// automatically generated by the FlatBuffers compiler, do not modify


// @generated

use core::mem;
use core::cmp::Ordering;

extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow};

// struct Property, aligned to 4
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct Property(pub [u8; 8]);
impl Default for Property { 
  fn default() -> Self { 
    Self([0; 8])
  }
}
impl core::fmt::Debug for Property {
  fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
    f.debug_struct("Property")
      .field("property", &self.property())
      .field("value", &self.value())
      .finish()
  }
}

impl flatbuffers::SimpleToVerifyInSlice for Property {}
impl<'a> flatbuffers::Follow<'a> for Property {
  type Inner = &'a Property;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    <&'a Property>::follow(buf, loc)
  }
}
impl<'a> flatbuffers::Follow<'a> for &'a Property {
  type Inner = &'a Property;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    flatbuffers::follow_cast_ref::<Property>(buf, loc)
  }
}
impl<'b> flatbuffers::Push for Property {
    type Output = Property;
    #[inline]
    unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
        let src = ::core::slice::from_raw_parts(self as *const Property as *const u8, <Self as flatbuffers::Push>::size());
        dst.copy_from_slice(src);
    }
    #[inline]
    fn alignment() -> flatbuffers::PushAlignment {
        flatbuffers::PushAlignment::new(4)
    }
}

impl<'a> flatbuffers::Verifiable for Property {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.in_buffer::<Self>(pos)
  }
}

impl<'a> Property {
  #[allow(clippy::too_many_arguments)]
  pub fn new(
    property: i32,
    value: i32,
  ) -> Self {
    let mut s = Self([0; 8]);
    s.set_property(property);
    s.set_value(value);
    s
  }

  pub fn property(&self) -> i32 {
    let mut mem = core::mem::MaybeUninit::<<i32 as EndianScalar>::Scalar>::uninit();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    EndianScalar::from_little_endian(unsafe {
      core::ptr::copy_nonoverlapping(
        self.0[0..].as_ptr(),
        mem.as_mut_ptr() as *mut u8,
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
      mem.assume_init()
    })
  }

  pub fn set_property(&mut self, x: i32) {
    let x_le = x.to_little_endian();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    unsafe {
      core::ptr::copy_nonoverlapping(
        &x_le as *const _ as *const u8,
        self.0[0..].as_mut_ptr(),
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
    }
  }

  pub fn value(&self) -> i32 {
    let mut mem = core::mem::MaybeUninit::<<i32 as EndianScalar>::Scalar>::uninit();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    EndianScalar::from_little_endian(unsafe {
      core::ptr::copy_nonoverlapping(
        self.0[4..].as_ptr(),
        mem.as_mut_ptr() as *mut u8,
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
      mem.assume_init()
    })
  }

  pub fn set_value(&mut self, x: i32) {
    let x_le = x.to_little_endian();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    unsafe {
      core::ptr::copy_nonoverlapping(
        &x_le as *const _ as *const u8,
        self.0[4..].as_mut_ptr(),
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
    }
  }

}

// struct RefineCost, aligned to 4
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct RefineCost(pub [u8; 8]);
impl Default for RefineCost { 
  fn default() -> Self { 
    Self([0; 8])
  }
}
impl core::fmt::Debug for RefineCost {
  fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
    f.debug_struct("RefineCost")
      .field("item_id", &self.item_id())
      .field("number", &self.number())
      .finish()
  }
}

impl flatbuffers::SimpleToVerifyInSlice for RefineCost {}
impl<'a> flatbuffers::Follow<'a> for RefineCost {
  type Inner = &'a RefineCost;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    <&'a RefineCost>::follow(buf, loc)
  }
}
impl<'a> flatbuffers::Follow<'a> for &'a RefineCost {
  type Inner = &'a RefineCost;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    flatbuffers::follow_cast_ref::<RefineCost>(buf, loc)
  }
}
impl<'b> flatbuffers::Push for RefineCost {
    type Output = RefineCost;
    #[inline]
    unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
        let src = ::core::slice::from_raw_parts(self as *const RefineCost as *const u8, <Self as flatbuffers::Push>::size());
        dst.copy_from_slice(src);
    }
    #[inline]
    fn alignment() -> flatbuffers::PushAlignment {
        flatbuffers::PushAlignment::new(4)
    }
}

impl<'a> flatbuffers::Verifiable for RefineCost {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.in_buffer::<Self>(pos)
  }
}

impl<'a> RefineCost {
  #[allow(clippy::too_many_arguments)]
  pub fn new(
    item_id: i32,
    number: i32,
  ) -> Self {
    let mut s = Self([0; 8]);
    s.set_item_id(item_id);
    s.set_number(number);
    s
  }

  pub fn item_id(&self) -> i32 {
    let mut mem = core::mem::MaybeUninit::<<i32 as EndianScalar>::Scalar>::uninit();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    EndianScalar::from_little_endian(unsafe {
      core::ptr::copy_nonoverlapping(
        self.0[0..].as_ptr(),
        mem.as_mut_ptr() as *mut u8,
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
      mem.assume_init()
    })
  }

  pub fn set_item_id(&mut self, x: i32) {
    let x_le = x.to_little_endian();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    unsafe {
      core::ptr::copy_nonoverlapping(
        &x_le as *const _ as *const u8,
        self.0[0..].as_mut_ptr(),
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
    }
  }

  pub fn number(&self) -> i32 {
    let mut mem = core::mem::MaybeUninit::<<i32 as EndianScalar>::Scalar>::uninit();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    EndianScalar::from_little_endian(unsafe {
      core::ptr::copy_nonoverlapping(
        self.0[4..].as_ptr(),
        mem.as_mut_ptr() as *mut u8,
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
      mem.assume_init()
    })
  }

  pub fn set_number(&mut self, x: i32) {
    let x_le = x.to_little_endian();
    // Safety:
    // Created from a valid Table for this object
    // Which contains a valid value in this slot
    unsafe {
      core::ptr::copy_nonoverlapping(
        &x_le as *const _ as *const u8,
        self.0[4..].as_mut_ptr(),
        core::mem::size_of::<<i32 as EndianScalar>::Scalar>(),
      );
    }
  }

}

pub enum AvatarBaseTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct AvatarBaseTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for AvatarBaseTemplate<'a> {
  type Inner = AvatarBaseTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> AvatarBaseTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_CODE_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_NAME: flatbuffers::VOffsetT = 8;
  pub const VT_FULL_NAME: flatbuffers::VOffsetT = 10;
  pub const VT_AUDIO_EVENT_REPLACE_PARAM: flatbuffers::VOffsetT = 12;
  pub const VT_AUDIO_BANK: flatbuffers::VOffsetT = 14;
  pub const VT_HIT_TYPES: flatbuffers::VOffsetT = 16;
  pub const VT_ELEMENT_TYPES: flatbuffers::VOffsetT = 18;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 20;
  pub const VT_GENDER: flatbuffers::VOffsetT = 22;
  pub const VT_CAMP: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 26;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    AvatarBaseTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args AvatarBaseTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<AvatarBaseTemplate<'bldr>> {
    let mut builder = AvatarBaseTemplateBuilder::new(_fbb);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    builder.add_camp(args.camp);
    builder.add_gender(args.gender);
    builder.add_unk_1(args.unk_1);
    if let Some(x) = args.element_types { builder.add_element_types(x); }
    if let Some(x) = args.hit_types { builder.add_hit_types(x); }
    if let Some(x) = args.audio_bank { builder.add_audio_bank(x); }
    if let Some(x) = args.audio_event_replace_param { builder.add_audio_event_replace_param(x); }
    if let Some(x) = args.full_name { builder.add_full_name(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    if let Some(x) = args.code_name { builder.add_code_name(x); }
    builder.add_id(args.id);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(AvatarBaseTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn code_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(AvatarBaseTemplate::VT_CODE_NAME, None)}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(AvatarBaseTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn full_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(AvatarBaseTemplate::VT_FULL_NAME, None)}
  }
  #[inline]
  pub fn audio_event_replace_param(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(AvatarBaseTemplate::VT_AUDIO_EVENT_REPLACE_PARAM, None)}
  }
  #[inline]
  pub fn audio_bank(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(AvatarBaseTemplate::VT_AUDIO_BANK, None)}
  }
  #[inline]
  pub fn hit_types(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(AvatarBaseTemplate::VT_HIT_TYPES, None)}
  }
  #[inline]
  pub fn element_types(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(AvatarBaseTemplate::VT_ELEMENT_TYPES, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(AvatarBaseTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn gender(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(AvatarBaseTemplate::VT_GENDER, Some(0)).unwrap()}
  }
  #[inline]
  pub fn camp(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(AvatarBaseTemplate::VT_CAMP, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(AvatarBaseTemplate::VT_UNK_2, None)}
  }
}

impl flatbuffers::Verifiable for AvatarBaseTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("code_name", Self::VT_CODE_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("full_name", Self::VT_FULL_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("audio_event_replace_param", Self::VT_AUDIO_EVENT_REPLACE_PARAM, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("audio_bank", Self::VT_AUDIO_BANK, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("hit_types", Self::VT_HIT_TYPES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("element_types", Self::VT_ELEMENT_TYPES, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("gender", Self::VT_GENDER, false)?
     .visit_field::<i32>("camp", Self::VT_CAMP, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("unk_2", Self::VT_UNK_2, false)?
     .finish();
    Ok(())
  }
}
pub struct AvatarBaseTemplateArgs<'a> {
    pub id: i32,
    pub code_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub full_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub audio_event_replace_param: Option<flatbuffers::WIPOffset<&'a str>>,
    pub audio_bank: Option<flatbuffers::WIPOffset<&'a str>>,
    pub hit_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub element_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_1: i32,
    pub gender: i32,
    pub camp: i32,
    pub unk_2: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
}
impl<'a> Default for AvatarBaseTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    AvatarBaseTemplateArgs {
      id: 0,
      code_name: None,
      name: None,
      full_name: None,
      audio_event_replace_param: None,
      audio_bank: None,
      hit_types: None,
      element_types: None,
      unk_1: 0,
      gender: 0,
      camp: 0,
      unk_2: None,
    }
  }
}

pub struct AvatarBaseTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> AvatarBaseTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(AvatarBaseTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_code_name(&mut self, code_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_CODE_NAME, code_name);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_full_name(&mut self, full_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_FULL_NAME, full_name);
  }
  #[inline]
  pub fn add_audio_event_replace_param(&mut self, audio_event_replace_param: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_AUDIO_EVENT_REPLACE_PARAM, audio_event_replace_param);
  }
  #[inline]
  pub fn add_audio_bank(&mut self, audio_bank: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_AUDIO_BANK, audio_bank);
  }
  #[inline]
  pub fn add_hit_types(&mut self, hit_types: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_HIT_TYPES, hit_types);
  }
  #[inline]
  pub fn add_element_types(&mut self, element_types: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_ELEMENT_TYPES, element_types);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(AvatarBaseTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_gender(&mut self, gender: i32) {
    self.fbb_.push_slot::<i32>(AvatarBaseTemplate::VT_GENDER, gender, 0);
  }
  #[inline]
  pub fn add_camp(&mut self, camp: i32) {
    self.fbb_.push_slot::<i32>(AvatarBaseTemplate::VT_CAMP, camp, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> AvatarBaseTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    AvatarBaseTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<AvatarBaseTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for AvatarBaseTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("AvatarBaseTemplate");
      ds.field("id", &self.id());
      ds.field("code_name", &self.code_name());
      ds.field("name", &self.name());
      ds.field("full_name", &self.full_name());
      ds.field("audio_event_replace_param", &self.audio_event_replace_param());
      ds.field("audio_bank", &self.audio_bank());
      ds.field("hit_types", &self.hit_types());
      ds.field("element_types", &self.element_types());
      ds.field("unk_1", &self.unk_1());
      ds.field("gender", &self.gender());
      ds.field("camp", &self.camp());
      ds.field("unk_2", &self.unk_2());
      ds.finish()
  }
}
pub enum WeaponTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct WeaponTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for WeaponTemplate<'a> {
  type Inner = WeaponTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> WeaponTemplate<'a> {
  pub const VT_ITEM_ID: flatbuffers::VOffsetT = 4;
  pub const VT_WEAPON_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_UNK_MISSING_FIELD: flatbuffers::VOffsetT = 8;
  pub const VT_BASE_PROPERTY: flatbuffers::VOffsetT = 10;
  pub const VT_RAND_PROPERTY: flatbuffers::VOffsetT = 12;
  pub const VT_STAR_LIMIT: flatbuffers::VOffsetT = 14;
  pub const VT_EXP_RECYCLE: flatbuffers::VOffsetT = 16;
  pub const VT_WEAPON_SCRIPT_CONFIG: flatbuffers::VOffsetT = 18;
  pub const VT_WEAPON_UI_MODEL: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_MISSING_FIELD_2: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_WEAPON_PATH: flatbuffers::VOffsetT = 26;
  pub const VT_UNK_MISSING_FIELD_3: flatbuffers::VOffsetT = 28;
  pub const VT_REFINE_INITIAL: flatbuffers::VOffsetT = 30;
  pub const VT_REFINE_LIMIT: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_MISSING_FIELD_4: flatbuffers::VOffsetT = 34;
  pub const VT_UNK_MISSING_FIELD_5: flatbuffers::VOffsetT = 36;
  pub const VT_UNK_STRING_WITH_VALUES: flatbuffers::VOffsetT = 38;
  pub const VT_UNK_MISSING_FIELD_6: flatbuffers::VOffsetT = 40;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 42;
  pub const VT_WEAPON_DESC: flatbuffers::VOffsetT = 44;
  pub const VT_WEAPON_RELEASE_TAG: flatbuffers::VOffsetT = 46;
  pub const VT_UNK_EMPTY_STRING: flatbuffers::VOffsetT = 48;
  pub const VT_AVATAR_ID: flatbuffers::VOffsetT = 50;
  pub const VT_WEAPON_COMMENT: flatbuffers::VOffsetT = 52;
  pub const VT_REFINE_COSTS: flatbuffers::VOffsetT = 54;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 56;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    WeaponTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args WeaponTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<WeaponTemplate<'bldr>> {
    let mut builder = WeaponTemplateBuilder::new(_fbb);
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.refine_costs { builder.add_refine_costs(x); }
    if let Some(x) = args.weapon_comment { builder.add_weapon_comment(x); }
    builder.add_avatar_id(args.avatar_id);
    if let Some(x) = args.unk_empty_string { builder.add_unk_empty_string(x); }
    if let Some(x) = args.weapon_release_tag { builder.add_weapon_release_tag(x); }
    if let Some(x) = args.weapon_desc { builder.add_weapon_desc(x); }
    builder.add_unk_2(args.unk_2);
    builder.add_unk_missing_field_6(args.unk_missing_field_6);
    if let Some(x) = args.unk_string_with_values { builder.add_unk_string_with_values(x); }
    builder.add_unk_missing_field_5(args.unk_missing_field_5);
    builder.add_unk_missing_field_4(args.unk_missing_field_4);
    builder.add_refine_limit(args.refine_limit);
    builder.add_refine_initial(args.refine_initial);
    builder.add_unk_missing_field_3(args.unk_missing_field_3);
    if let Some(x) = args.unk_weapon_path { builder.add_unk_weapon_path(x); }
    builder.add_unk_missing_field_2(args.unk_missing_field_2);
    builder.add_unk_1(args.unk_1);
    if let Some(x) = args.weapon_ui_model { builder.add_weapon_ui_model(x); }
    if let Some(x) = args.weapon_script_config { builder.add_weapon_script_config(x); }
    builder.add_exp_recycle(args.exp_recycle);
    builder.add_star_limit(args.star_limit);
    if let Some(x) = args.rand_property { builder.add_rand_property(x); }
    if let Some(x) = args.base_property { builder.add_base_property(x); }
    builder.add_unk_missing_field(args.unk_missing_field);
    if let Some(x) = args.weapon_name { builder.add_weapon_name(x); }
    builder.add_item_id(args.item_id);
    builder.finish()
  }


  #[inline]
  pub fn item_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_ITEM_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn weapon_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_NAME, None)}
  }
  #[inline]
  pub fn unk_missing_field(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD, Some(0)).unwrap()}
  }
  #[inline]
  pub fn base_property(&self) -> Option<&'a Property> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<Property>(WeaponTemplate::VT_BASE_PROPERTY, None)}
  }
  #[inline]
  pub fn rand_property(&self) -> Option<&'a Property> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<Property>(WeaponTemplate::VT_RAND_PROPERTY, None)}
  }
  #[inline]
  pub fn star_limit(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_STAR_LIMIT, Some(0)).unwrap()}
  }
  #[inline]
  pub fn exp_recycle(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_EXP_RECYCLE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn weapon_script_config(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_SCRIPT_CONFIG, None)}
  }
  #[inline]
  pub fn weapon_ui_model(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_UI_MODEL, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_missing_field_2(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_2, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_weapon_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_UNK_WEAPON_PATH, None)}
  }
  #[inline]
  pub fn unk_missing_field_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn refine_initial(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_REFINE_INITIAL, Some(0)).unwrap()}
  }
  #[inline]
  pub fn refine_limit(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_REFINE_LIMIT, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_missing_field_4(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_4, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_missing_field_5(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_5, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_string_with_values(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_UNK_STRING_WITH_VALUES, None)}
  }
  #[inline]
  pub fn unk_missing_field_6(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_6, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_2, Some(0)).unwrap()}
  }
  #[inline]
  pub fn weapon_desc(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_DESC, None)}
  }
  #[inline]
  pub fn weapon_release_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_RELEASE_TAG, None)}
  }
  #[inline]
  pub fn unk_empty_string(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_UNK_EMPTY_STRING, None)}
  }
  #[inline]
  pub fn avatar_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_AVATAR_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn weapon_comment(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(WeaponTemplate::VT_WEAPON_COMMENT, None)}
  }
  #[inline]
  pub fn refine_costs(&self) -> Option<flatbuffers::Vector<'a, RefineCost>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, RefineCost>>>(WeaponTemplate::VT_REFINE_COSTS, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(WeaponTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for WeaponTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("item_id", Self::VT_ITEM_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_name", Self::VT_WEAPON_NAME, false)?
     .visit_field::<i32>("unk_missing_field", Self::VT_UNK_MISSING_FIELD, false)?
     .visit_field::<Property>("base_property", Self::VT_BASE_PROPERTY, false)?
     .visit_field::<Property>("rand_property", Self::VT_RAND_PROPERTY, false)?
     .visit_field::<i32>("star_limit", Self::VT_STAR_LIMIT, false)?
     .visit_field::<i32>("exp_recycle", Self::VT_EXP_RECYCLE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_script_config", Self::VT_WEAPON_SCRIPT_CONFIG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_ui_model", Self::VT_WEAPON_UI_MODEL, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("unk_missing_field_2", Self::VT_UNK_MISSING_FIELD_2, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_weapon_path", Self::VT_UNK_WEAPON_PATH, false)?
     .visit_field::<i32>("unk_missing_field_3", Self::VT_UNK_MISSING_FIELD_3, false)?
     .visit_field::<i32>("refine_initial", Self::VT_REFINE_INITIAL, false)?
     .visit_field::<i32>("refine_limit", Self::VT_REFINE_LIMIT, false)?
     .visit_field::<i32>("unk_missing_field_4", Self::VT_UNK_MISSING_FIELD_4, false)?
     .visit_field::<i32>("unk_missing_field_5", Self::VT_UNK_MISSING_FIELD_5, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_string_with_values", Self::VT_UNK_STRING_WITH_VALUES, false)?
     .visit_field::<i32>("unk_missing_field_6", Self::VT_UNK_MISSING_FIELD_6, false)?
     .visit_field::<i32>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_desc", Self::VT_WEAPON_DESC, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_release_tag", Self::VT_WEAPON_RELEASE_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_empty_string", Self::VT_UNK_EMPTY_STRING, false)?
     .visit_field::<i32>("avatar_id", Self::VT_AVATAR_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("weapon_comment", Self::VT_WEAPON_COMMENT, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, RefineCost>>>("refine_costs", Self::VT_REFINE_COSTS, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .finish();
    Ok(())
  }
}
pub struct WeaponTemplateArgs<'a> {
    pub item_id: i32,
    pub weapon_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_missing_field: i32,
    pub base_property: Option<&'a Property>,
    pub rand_property: Option<&'a Property>,
    pub star_limit: i32,
    pub exp_recycle: i32,
    pub weapon_script_config: Option<flatbuffers::WIPOffset<&'a str>>,
    pub weapon_ui_model: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_1: i32,
    pub unk_missing_field_2: i32,
    pub unk_weapon_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_missing_field_3: i32,
    pub refine_initial: i32,
    pub refine_limit: i32,
    pub unk_missing_field_4: i32,
    pub unk_missing_field_5: i32,
    pub unk_string_with_values: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_missing_field_6: i32,
    pub unk_2: i32,
    pub weapon_desc: Option<flatbuffers::WIPOffset<&'a str>>,
    pub weapon_release_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_empty_string: Option<flatbuffers::WIPOffset<&'a str>>,
    pub avatar_id: i32,
    pub weapon_comment: Option<flatbuffers::WIPOffset<&'a str>>,
    pub refine_costs: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, RefineCost>>>,
    pub unk_3: i32,
}
impl<'a> Default for WeaponTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    WeaponTemplateArgs {
      item_id: 0,
      weapon_name: None,
      unk_missing_field: 0,
      base_property: None,
      rand_property: None,
      star_limit: 0,
      exp_recycle: 0,
      weapon_script_config: None,
      weapon_ui_model: None,
      unk_1: 0,
      unk_missing_field_2: 0,
      unk_weapon_path: None,
      unk_missing_field_3: 0,
      refine_initial: 0,
      refine_limit: 0,
      unk_missing_field_4: 0,
      unk_missing_field_5: 0,
      unk_string_with_values: None,
      unk_missing_field_6: 0,
      unk_2: 0,
      weapon_desc: None,
      weapon_release_tag: None,
      unk_empty_string: None,
      avatar_id: 0,
      weapon_comment: None,
      refine_costs: None,
      unk_3: 0,
    }
  }
}

pub struct WeaponTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> WeaponTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_item_id(&mut self, item_id: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_ITEM_ID, item_id, 0);
  }
  #[inline]
  pub fn add_weapon_name(&mut self, weapon_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_NAME, weapon_name);
  }
  #[inline]
  pub fn add_unk_missing_field(&mut self, unk_missing_field: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD, unk_missing_field, 0);
  }
  #[inline]
  pub fn add_base_property(&mut self, base_property: &Property) {
    self.fbb_.push_slot_always::<&Property>(WeaponTemplate::VT_BASE_PROPERTY, base_property);
  }
  #[inline]
  pub fn add_rand_property(&mut self, rand_property: &Property) {
    self.fbb_.push_slot_always::<&Property>(WeaponTemplate::VT_RAND_PROPERTY, rand_property);
  }
  #[inline]
  pub fn add_star_limit(&mut self, star_limit: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_STAR_LIMIT, star_limit, 0);
  }
  #[inline]
  pub fn add_exp_recycle(&mut self, exp_recycle: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_EXP_RECYCLE, exp_recycle, 0);
  }
  #[inline]
  pub fn add_weapon_script_config(&mut self, weapon_script_config: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_SCRIPT_CONFIG, weapon_script_config);
  }
  #[inline]
  pub fn add_weapon_ui_model(&mut self, weapon_ui_model: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_UI_MODEL, weapon_ui_model);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_unk_missing_field_2(&mut self, unk_missing_field_2: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_2, unk_missing_field_2, 0);
  }
  #[inline]
  pub fn add_unk_weapon_path(&mut self, unk_weapon_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_UNK_WEAPON_PATH, unk_weapon_path);
  }
  #[inline]
  pub fn add_unk_missing_field_3(&mut self, unk_missing_field_3: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_3, unk_missing_field_3, 0);
  }
  #[inline]
  pub fn add_refine_initial(&mut self, refine_initial: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_REFINE_INITIAL, refine_initial, 0);
  }
  #[inline]
  pub fn add_refine_limit(&mut self, refine_limit: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_REFINE_LIMIT, refine_limit, 0);
  }
  #[inline]
  pub fn add_unk_missing_field_4(&mut self, unk_missing_field_4: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_4, unk_missing_field_4, 0);
  }
  #[inline]
  pub fn add_unk_missing_field_5(&mut self, unk_missing_field_5: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_5, unk_missing_field_5, 0);
  }
  #[inline]
  pub fn add_unk_string_with_values(&mut self, unk_string_with_values: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_UNK_STRING_WITH_VALUES, unk_string_with_values);
  }
  #[inline]
  pub fn add_unk_missing_field_6(&mut self, unk_missing_field_6: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_MISSING_FIELD_6, unk_missing_field_6, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_2, unk_2, 0);
  }
  #[inline]
  pub fn add_weapon_desc(&mut self, weapon_desc: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_DESC, weapon_desc);
  }
  #[inline]
  pub fn add_weapon_release_tag(&mut self, weapon_release_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_RELEASE_TAG, weapon_release_tag);
  }
  #[inline]
  pub fn add_unk_empty_string(&mut self, unk_empty_string: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_UNK_EMPTY_STRING, unk_empty_string);
  }
  #[inline]
  pub fn add_avatar_id(&mut self, avatar_id: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_AVATAR_ID, avatar_id, 0);
  }
  #[inline]
  pub fn add_weapon_comment(&mut self, weapon_comment: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_WEAPON_COMMENT, weapon_comment);
  }
  #[inline]
  pub fn add_refine_costs(&mut self, refine_costs: flatbuffers::WIPOffset<flatbuffers::Vector<'b , RefineCost>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplate::VT_REFINE_COSTS, refine_costs);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(WeaponTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    WeaponTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<WeaponTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for WeaponTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("WeaponTemplate");
      ds.field("item_id", &self.item_id());
      ds.field("weapon_name", &self.weapon_name());
      ds.field("unk_missing_field", &self.unk_missing_field());
      ds.field("base_property", &self.base_property());
      ds.field("rand_property", &self.rand_property());
      ds.field("star_limit", &self.star_limit());
      ds.field("exp_recycle", &self.exp_recycle());
      ds.field("weapon_script_config", &self.weapon_script_config());
      ds.field("weapon_ui_model", &self.weapon_ui_model());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_missing_field_2", &self.unk_missing_field_2());
      ds.field("unk_weapon_path", &self.unk_weapon_path());
      ds.field("unk_missing_field_3", &self.unk_missing_field_3());
      ds.field("refine_initial", &self.refine_initial());
      ds.field("refine_limit", &self.refine_limit());
      ds.field("unk_missing_field_4", &self.unk_missing_field_4());
      ds.field("unk_missing_field_5", &self.unk_missing_field_5());
      ds.field("unk_string_with_values", &self.unk_string_with_values());
      ds.field("unk_missing_field_6", &self.unk_missing_field_6());
      ds.field("unk_2", &self.unk_2());
      ds.field("weapon_desc", &self.weapon_desc());
      ds.field("weapon_release_tag", &self.weapon_release_tag());
      ds.field("unk_empty_string", &self.unk_empty_string());
      ds.field("avatar_id", &self.avatar_id());
      ds.field("weapon_comment", &self.weapon_comment());
      ds.field("refine_costs", &self.refine_costs());
      ds.field("unk_3", &self.unk_3());
      ds.finish()
  }
}
pub enum UnlockConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct UnlockConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for UnlockConfigTemplate<'a> {
  type Inner = UnlockConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> UnlockConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 6;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 8;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 10;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 14;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 16;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 18;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 20;
  pub const VT_ICON_RES: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_9: flatbuffers::VOffsetT = 24;
  pub const VT_NAME: flatbuffers::VOffsetT = 26;
  pub const VT_UNK_10: flatbuffers::VOffsetT = 28;
  pub const VT_UNK_11: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_12: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_13: flatbuffers::VOffsetT = 34;
  pub const VT_UNK_14: flatbuffers::VOffsetT = 36;
  pub const VT_UNK_15: flatbuffers::VOffsetT = 38;
  pub const VT_UNK_16: flatbuffers::VOffsetT = 40;
  pub const VT_UNK_17: flatbuffers::VOffsetT = 42;
  pub const VT_UNK_18: flatbuffers::VOffsetT = 44;
  pub const VT_UNK_19: flatbuffers::VOffsetT = 46;
  pub const VT_UNK_20: flatbuffers::VOffsetT = 48;
  pub const VT_UNK_21: flatbuffers::VOffsetT = 50;
  pub const VT_UNK_22: flatbuffers::VOffsetT = 52;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    UnlockConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args UnlockConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<UnlockConfigTemplate<'bldr>> {
    let mut builder = UnlockConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.unk_22 { builder.add_unk_22(x); }
    builder.add_unk_21(args.unk_21);
    if let Some(x) = args.unk_20 { builder.add_unk_20(x); }
    builder.add_unk_19(args.unk_19);
    builder.add_unk_18(args.unk_18);
    if let Some(x) = args.unk_17 { builder.add_unk_17(x); }
    builder.add_unk_16(args.unk_16);
    if let Some(x) = args.unk_15 { builder.add_unk_15(x); }
    builder.add_unk_14(args.unk_14);
    builder.add_unk_12(args.unk_12);
    builder.add_unk_11(args.unk_11);
    if let Some(x) = args.unk_10 { builder.add_unk_10(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    builder.add_unk_9(args.unk_9);
    if let Some(x) = args.icon_res { builder.add_icon_res(x); }
    if let Some(x) = args.unk_8 { builder.add_unk_8(x); }
    builder.add_unk_7(args.unk_7);
    if let Some(x) = args.unk_6 { builder.add_unk_6(x); }
    builder.add_unk_5(args.unk_5);
    builder.add_unk_4(args.unk_4);
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    if let Some(x) = args.unk_1 { builder.add_unk_1(x); }
    builder.add_id(args.id);
    builder.add_unk_13(args.unk_13);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_1, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(UnlockConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_4(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_4, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_5(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_5, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_6(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_6, None)}
  }
  #[inline]
  pub fn unk_7(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_7, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_8(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_8, None)}
  }
  #[inline]
  pub fn icon_res(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_ICON_RES, None)}
  }
  #[inline]
  pub fn unk_9(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_9, Some(0)).unwrap()}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn unk_10(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_10, None)}
  }
  #[inline]
  pub fn unk_11(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_11, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_12(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_12, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_13(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(UnlockConfigTemplate::VT_UNK_13, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_14(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_14, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_15(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_15, None)}
  }
  #[inline]
  pub fn unk_16(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_16, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_17(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_17, None)}
  }
  #[inline]
  pub fn unk_18(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_18, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_19(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_19, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_20(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_20, None)}
  }
  #[inline]
  pub fn unk_21(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(UnlockConfigTemplate::VT_UNK_21, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_22(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(UnlockConfigTemplate::VT_UNK_22, None)}
  }
}

impl flatbuffers::Verifiable for UnlockConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<i32>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<i32>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<i32>("unk_7", Self::VT_UNK_7, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_8", Self::VT_UNK_8, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("icon_res", Self::VT_ICON_RES, false)?
     .visit_field::<i32>("unk_9", Self::VT_UNK_9, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_10", Self::VT_UNK_10, false)?
     .visit_field::<i32>("unk_11", Self::VT_UNK_11, false)?
     .visit_field::<i32>("unk_12", Self::VT_UNK_12, false)?
     .visit_field::<bool>("unk_13", Self::VT_UNK_13, false)?
     .visit_field::<i32>("unk_14", Self::VT_UNK_14, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_15", Self::VT_UNK_15, false)?
     .visit_field::<i32>("unk_16", Self::VT_UNK_16, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_17", Self::VT_UNK_17, false)?
     .visit_field::<i32>("unk_18", Self::VT_UNK_18, false)?
     .visit_field::<i32>("unk_19", Self::VT_UNK_19, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_20", Self::VT_UNK_20, false)?
     .visit_field::<i32>("unk_21", Self::VT_UNK_21, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_22", Self::VT_UNK_22, false)?
     .finish();
    Ok(())
  }
}
pub struct UnlockConfigTemplateArgs<'a> {
    pub id: i32,
    pub unk_1: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_3: i32,
    pub unk_4: i32,
    pub unk_5: i32,
    pub unk_6: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_7: i32,
    pub unk_8: Option<flatbuffers::WIPOffset<&'a str>>,
    pub icon_res: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_9: i32,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_10: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_11: i32,
    pub unk_12: i32,
    pub unk_13: bool,
    pub unk_14: i32,
    pub unk_15: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_16: i32,
    pub unk_17: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_18: i32,
    pub unk_19: i32,
    pub unk_20: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_21: i32,
    pub unk_22: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for UnlockConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    UnlockConfigTemplateArgs {
      id: 0,
      unk_1: None,
      unk_2: None,
      unk_3: 0,
      unk_4: 0,
      unk_5: 0,
      unk_6: None,
      unk_7: 0,
      unk_8: None,
      icon_res: None,
      unk_9: 0,
      name: None,
      unk_10: None,
      unk_11: 0,
      unk_12: 0,
      unk_13: false,
      unk_14: 0,
      unk_15: None,
      unk_16: 0,
      unk_17: None,
      unk_18: 0,
      unk_19: 0,
      unk_20: None,
      unk_21: 0,
      unk_22: None,
    }
  }
}

pub struct UnlockConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> UnlockConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_1, unk_1);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_4, unk_4, 0);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_5, unk_5, 0);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_6, unk_6);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_7, unk_7, 0);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_8, unk_8);
  }
  #[inline]
  pub fn add_icon_res(&mut self, icon_res: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_ICON_RES, icon_res);
  }
  #[inline]
  pub fn add_unk_9(&mut self, unk_9: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_9, unk_9, 0);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_unk_10(&mut self, unk_10: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_10, unk_10);
  }
  #[inline]
  pub fn add_unk_11(&mut self, unk_11: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_11, unk_11, 0);
  }
  #[inline]
  pub fn add_unk_12(&mut self, unk_12: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_12, unk_12, 0);
  }
  #[inline]
  pub fn add_unk_13(&mut self, unk_13: bool) {
    self.fbb_.push_slot::<bool>(UnlockConfigTemplate::VT_UNK_13, unk_13, false);
  }
  #[inline]
  pub fn add_unk_14(&mut self, unk_14: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_14, unk_14, 0);
  }
  #[inline]
  pub fn add_unk_15(&mut self, unk_15: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_15, unk_15);
  }
  #[inline]
  pub fn add_unk_16(&mut self, unk_16: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_16, unk_16, 0);
  }
  #[inline]
  pub fn add_unk_17(&mut self, unk_17: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_17, unk_17);
  }
  #[inline]
  pub fn add_unk_18(&mut self, unk_18: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_18, unk_18, 0);
  }
  #[inline]
  pub fn add_unk_19(&mut self, unk_19: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_19, unk_19, 0);
  }
  #[inline]
  pub fn add_unk_20(&mut self, unk_20: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_20, unk_20);
  }
  #[inline]
  pub fn add_unk_21(&mut self, unk_21: i32) {
    self.fbb_.push_slot::<i32>(UnlockConfigTemplate::VT_UNK_21, unk_21, 0);
  }
  #[inline]
  pub fn add_unk_22(&mut self, unk_22: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplate::VT_UNK_22, unk_22);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> UnlockConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    UnlockConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<UnlockConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for UnlockConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("UnlockConfigTemplate");
      ds.field("id", &self.id());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_2", &self.unk_2());
      ds.field("unk_3", &self.unk_3());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("unk_7", &self.unk_7());
      ds.field("unk_8", &self.unk_8());
      ds.field("icon_res", &self.icon_res());
      ds.field("unk_9", &self.unk_9());
      ds.field("name", &self.name());
      ds.field("unk_10", &self.unk_10());
      ds.field("unk_11", &self.unk_11());
      ds.field("unk_12", &self.unk_12());
      ds.field("unk_13", &self.unk_13());
      ds.field("unk_14", &self.unk_14());
      ds.field("unk_15", &self.unk_15());
      ds.field("unk_16", &self.unk_16());
      ds.field("unk_17", &self.unk_17());
      ds.field("unk_18", &self.unk_18());
      ds.field("unk_19", &self.unk_19());
      ds.field("unk_20", &self.unk_20());
      ds.field("unk_21", &self.unk_21());
      ds.field("unk_22", &self.unk_22());
      ds.finish()
  }
}
pub enum PostGirlConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct PostGirlConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for PostGirlConfigTemplate<'a> {
  type Inner = PostGirlConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> PostGirlConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_TAG: flatbuffers::VOffsetT = 8;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 10;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 14;
  pub const VT_ROLE_ICON_NAME: flatbuffers::VOffsetT = 16;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 18;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 20;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    PostGirlConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args PostGirlConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<PostGirlConfigTemplate<'bldr>> {
    let mut builder = PostGirlConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.unk_5 { builder.add_unk_5(x); }
    if let Some(x) = args.unk_4 { builder.add_unk_4(x); }
    if let Some(x) = args.role_icon_name { builder.add_role_icon_name(x); }
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    builder.add_unk_1(args.unk_1);
    if let Some(x) = args.tag { builder.add_tag(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    builder.add_id(args.id);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(PostGirlConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(PostGirlConfigTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(PostGirlConfigTemplate::VT_TAG, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(PostGirlConfigTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(PostGirlConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(PostGirlConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn role_icon_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(PostGirlConfigTemplate::VT_ROLE_ICON_NAME, None)}
  }
  #[inline]
  pub fn unk_4(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(PostGirlConfigTemplate::VT_UNK_4, None)}
  }
  #[inline]
  pub fn unk_5(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(PostGirlConfigTemplate::VT_UNK_5, None)}
  }
}

impl flatbuffers::Verifiable for PostGirlConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("tag", Self::VT_TAG, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("role_icon_name", Self::VT_ROLE_ICON_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_5", Self::VT_UNK_5, false)?
     .finish();
    Ok(())
  }
}
pub struct PostGirlConfigTemplateArgs<'a> {
    pub id: i32,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_1: i32,
    pub unk_2: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_3: i32,
    pub role_icon_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_4: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_5: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
}
impl<'a> Default for PostGirlConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    PostGirlConfigTemplateArgs {
      id: 0,
      name: None,
      tag: None,
      unk_1: 0,
      unk_2: None,
      unk_3: 0,
      role_icon_name: None,
      unk_4: None,
      unk_5: None,
    }
  }
}

pub struct PostGirlConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> PostGirlConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(PostGirlConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_tag(&mut self, tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_TAG, tag);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(PostGirlConfigTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(PostGirlConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_role_icon_name(&mut self, role_icon_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_ROLE_ICON_NAME, role_icon_name);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_UNK_4, unk_4);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplate::VT_UNK_5, unk_5);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> PostGirlConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    PostGirlConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<PostGirlConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for PostGirlConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("PostGirlConfigTemplate");
      ds.field("id", &self.id());
      ds.field("name", &self.name());
      ds.field("tag", &self.tag());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_2", &self.unk_2());
      ds.field("unk_3", &self.unk_3());
      ds.field("role_icon_name", &self.role_icon_name());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.finish()
  }
}
pub enum ArchiveFileQuestTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ArchiveFileQuestTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ArchiveFileQuestTemplate<'a> {
  type Inner = ArchiveFileQuestTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ArchiveFileQuestTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_ARCHIVE_ID: flatbuffers::VOffsetT = 6;
  pub const VT_ARCHIVE_NAME: flatbuffers::VOffsetT = 8;
  pub const VT_DIFFICULTY_LV: flatbuffers::VOffsetT = 10;
  pub const VT_SHOW_TYPE: flatbuffers::VOffsetT = 12;
  pub const VT_RECOMMENDED_HIT_TYPES: flatbuffers::VOffsetT = 14;
  pub const VT_VIDEO: flatbuffers::VOffsetT = 16;
  pub const VT_ARCHIVE_FILE_NAME: flatbuffers::VOffsetT = 18;
  pub const VT_ARCHIVE_FILE_NUM: flatbuffers::VOffsetT = 20;
  pub const VT_ARCHIVE_FILE_NI_IDS: flatbuffers::VOffsetT = 22;
  pub const VT_AUTO_DISTRIBUTION: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 26;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ArchiveFileQuestTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ArchiveFileQuestTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<ArchiveFileQuestTemplate<'bldr>> {
    let mut builder = ArchiveFileQuestTemplateBuilder::new(_fbb);
    if let Some(x) = args.archive_file_ni_ids { builder.add_archive_file_ni_ids(x); }
    if let Some(x) = args.archive_file_num { builder.add_archive_file_num(x); }
    if let Some(x) = args.archive_file_name { builder.add_archive_file_name(x); }
    if let Some(x) = args.video { builder.add_video(x); }
    if let Some(x) = args.recommended_hit_types { builder.add_recommended_hit_types(x); }
    builder.add_show_type(args.show_type);
    builder.add_difficulty_lv(args.difficulty_lv);
    if let Some(x) = args.archive_name { builder.add_archive_name(x); }
    builder.add_archive_id(args.archive_id);
    builder.add_id(args.id);
    builder.add_unk_1(args.unk_1);
    builder.add_auto_distribution(args.auto_distribution);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveFileQuestTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn archive_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveFileQuestTemplate::VT_ARCHIVE_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn archive_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveFileQuestTemplate::VT_ARCHIVE_NAME, None)}
  }
  #[inline]
  pub fn difficulty_lv(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveFileQuestTemplate::VT_DIFFICULTY_LV, Some(0)).unwrap()}
  }
  #[inline]
  pub fn show_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveFileQuestTemplate::VT_SHOW_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn recommended_hit_types(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(ArchiveFileQuestTemplate::VT_RECOMMENDED_HIT_TYPES, None)}
  }
  #[inline]
  pub fn video(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveFileQuestTemplate::VT_VIDEO, None)}
  }
  #[inline]
  pub fn archive_file_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NAME, None)}
  }
  #[inline]
  pub fn archive_file_num(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NUM, None)}
  }
  #[inline]
  pub fn archive_file_ni_ids(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NI_IDS, None)}
  }
  #[inline]
  pub fn auto_distribution(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveFileQuestTemplate::VT_AUTO_DISTRIBUTION, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveFileQuestTemplate::VT_UNK_1, Some(false)).unwrap()}
  }
}

impl flatbuffers::Verifiable for ArchiveFileQuestTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<i32>("archive_id", Self::VT_ARCHIVE_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("archive_name", Self::VT_ARCHIVE_NAME, false)?
     .visit_field::<i32>("difficulty_lv", Self::VT_DIFFICULTY_LV, false)?
     .visit_field::<i32>("show_type", Self::VT_SHOW_TYPE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("recommended_hit_types", Self::VT_RECOMMENDED_HIT_TYPES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("video", Self::VT_VIDEO, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("archive_file_name", Self::VT_ARCHIVE_FILE_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("archive_file_num", Self::VT_ARCHIVE_FILE_NUM, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("archive_file_ni_ids", Self::VT_ARCHIVE_FILE_NI_IDS, false)?
     .visit_field::<bool>("auto_distribution", Self::VT_AUTO_DISTRIBUTION, false)?
     .visit_field::<bool>("unk_1", Self::VT_UNK_1, false)?
     .finish();
    Ok(())
  }
}
pub struct ArchiveFileQuestTemplateArgs<'a> {
    pub id: i32,
    pub archive_id: i32,
    pub archive_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub difficulty_lv: i32,
    pub show_type: i32,
    pub recommended_hit_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub video: Option<flatbuffers::WIPOffset<&'a str>>,
    pub archive_file_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub archive_file_num: Option<flatbuffers::WIPOffset<&'a str>>,
    pub archive_file_ni_ids: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub auto_distribution: bool,
    pub unk_1: bool,
}
impl<'a> Default for ArchiveFileQuestTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    ArchiveFileQuestTemplateArgs {
      id: 0,
      archive_id: 0,
      archive_name: None,
      difficulty_lv: 0,
      show_type: 0,
      recommended_hit_types: None,
      video: None,
      archive_file_name: None,
      archive_file_num: None,
      archive_file_ni_ids: None,
      auto_distribution: false,
      unk_1: false,
    }
  }
}

pub struct ArchiveFileQuestTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ArchiveFileQuestTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveFileQuestTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_archive_id(&mut self, archive_id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveFileQuestTemplate::VT_ARCHIVE_ID, archive_id, 0);
  }
  #[inline]
  pub fn add_archive_name(&mut self, archive_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_ARCHIVE_NAME, archive_name);
  }
  #[inline]
  pub fn add_difficulty_lv(&mut self, difficulty_lv: i32) {
    self.fbb_.push_slot::<i32>(ArchiveFileQuestTemplate::VT_DIFFICULTY_LV, difficulty_lv, 0);
  }
  #[inline]
  pub fn add_show_type(&mut self, show_type: i32) {
    self.fbb_.push_slot::<i32>(ArchiveFileQuestTemplate::VT_SHOW_TYPE, show_type, 0);
  }
  #[inline]
  pub fn add_recommended_hit_types(&mut self, recommended_hit_types: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_RECOMMENDED_HIT_TYPES, recommended_hit_types);
  }
  #[inline]
  pub fn add_video(&mut self, video: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_VIDEO, video);
  }
  #[inline]
  pub fn add_archive_file_name(&mut self, archive_file_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NAME, archive_file_name);
  }
  #[inline]
  pub fn add_archive_file_num(&mut self, archive_file_num: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NUM, archive_file_num);
  }
  #[inline]
  pub fn add_archive_file_ni_ids(&mut self, archive_file_ni_ids: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplate::VT_ARCHIVE_FILE_NI_IDS, archive_file_ni_ids);
  }
  #[inline]
  pub fn add_auto_distribution(&mut self, auto_distribution: bool) {
    self.fbb_.push_slot::<bool>(ArchiveFileQuestTemplate::VT_AUTO_DISTRIBUTION, auto_distribution, false);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: bool) {
    self.fbb_.push_slot::<bool>(ArchiveFileQuestTemplate::VT_UNK_1, unk_1, false);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ArchiveFileQuestTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ArchiveFileQuestTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ArchiveFileQuestTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ArchiveFileQuestTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ArchiveFileQuestTemplate");
      ds.field("id", &self.id());
      ds.field("archive_id", &self.archive_id());
      ds.field("archive_name", &self.archive_name());
      ds.field("difficulty_lv", &self.difficulty_lv());
      ds.field("show_type", &self.show_type());
      ds.field("recommended_hit_types", &self.recommended_hit_types());
      ds.field("video", &self.video());
      ds.field("archive_file_name", &self.archive_file_name());
      ds.field("archive_file_num", &self.archive_file_num());
      ds.field("archive_file_ni_ids", &self.archive_file_ni_ids());
      ds.field("auto_distribution", &self.auto_distribution());
      ds.field("unk_1", &self.unk_1());
      ds.finish()
  }
}
pub enum ArchiveBattleQuestTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ArchiveBattleQuestTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ArchiveBattleQuestTemplate<'a> {
  type Inner = ArchiveBattleQuestTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ArchiveBattleQuestTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_QUEST_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_QUEST_DESC: flatbuffers::VOffsetT = 8;
  pub const VT_TARGET: flatbuffers::VOffsetT = 10;
  pub const VT_QUEST_TYPE: flatbuffers::VOffsetT = 12;
  pub const VT_CHAPTER: flatbuffers::VOffsetT = 14;
  pub const VT_DIFFICULTY: flatbuffers::VOffsetT = 16;
  pub const VT_MONSTER_LEVEL: flatbuffers::VOffsetT = 18;
  pub const VT_RECOMMENDED_LEVEL: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 24;
  pub const VT_HOLLOW_ID: flatbuffers::VOffsetT = 26;
  pub const VT_FIRST_BATTLE_EVENT_ID: flatbuffers::VOffsetT = 28;
  pub const VT_BATTLE_EVENT_ID: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 32;
  pub const VT_BATTLE_RANK: flatbuffers::VOffsetT = 34;
  pub const VT_SLOT_1_AVATAR: flatbuffers::VOffsetT = 36;
  pub const VT_SLOT_2_AVATAR: flatbuffers::VOffsetT = 38;
  pub const VT_SLOT_3_AVATAR: flatbuffers::VOffsetT = 40;
  pub const VT_BUDDY: flatbuffers::VOffsetT = 42;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 44;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 46;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 48;
  pub const VT_CHAPTER_NAME: flatbuffers::VOffsetT = 50;
  pub const VT_QUEST_IMAGE: flatbuffers::VOffsetT = 52;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 54;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 56;
  pub const VT_UNK_9: flatbuffers::VOffsetT = 58;
  pub const VT_UNK_10: flatbuffers::VOffsetT = 60;
  pub const VT_UNK_11: flatbuffers::VOffsetT = 62;
  pub const VT_UNK_12: flatbuffers::VOffsetT = 64;
  pub const VT_UNK_13: flatbuffers::VOffsetT = 66;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ArchiveBattleQuestTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ArchiveBattleQuestTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<ArchiveBattleQuestTemplate<'bldr>> {
    let mut builder = ArchiveBattleQuestTemplateBuilder::new(_fbb);
    builder.add_unk_13(args.unk_13);
    if let Some(x) = args.unk_12 { builder.add_unk_12(x); }
    builder.add_unk_11(args.unk_11);
    builder.add_unk_9(args.unk_9);
    if let Some(x) = args.unk_7 { builder.add_unk_7(x); }
    builder.add_quest_image(args.quest_image);
    if let Some(x) = args.chapter_name { builder.add_chapter_name(x); }
    builder.add_unk_5(args.unk_5);
    builder.add_buddy(args.buddy);
    builder.add_slot_3_avatar(args.slot_3_avatar);
    builder.add_slot_2_avatar(args.slot_2_avatar);
    builder.add_slot_1_avatar(args.slot_1_avatar);
    if let Some(x) = args.battle_rank { builder.add_battle_rank(x); }
    builder.add_unk_3(args.unk_3);
    builder.add_battle_event_id(args.battle_event_id);
    builder.add_first_battle_event_id(args.first_battle_event_id);
    builder.add_hollow_id(args.hollow_id);
    builder.add_unk_2(args.unk_2);
    builder.add_unk_1(args.unk_1);
    builder.add_recommended_level(args.recommended_level);
    builder.add_monster_level(args.monster_level);
    builder.add_difficulty(args.difficulty);
    builder.add_chapter(args.chapter);
    builder.add_quest_type(args.quest_type);
    if let Some(x) = args.target { builder.add_target(x); }
    if let Some(x) = args.quest_desc { builder.add_quest_desc(x); }
    if let Some(x) = args.quest_name { builder.add_quest_name(x); }
    builder.add_id(args.id);
    builder.add_unk_10(args.unk_10);
    builder.add_unk_8(args.unk_8);
    builder.add_unk_6(args.unk_6);
    builder.add_unk_4(args.unk_4);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn quest_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_QUEST_NAME, None)}
  }
  #[inline]
  pub fn quest_desc(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_QUEST_DESC, None)}
  }
  #[inline]
  pub fn target(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_TARGET, None)}
  }
  #[inline]
  pub fn quest_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_QUEST_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn chapter(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_CHAPTER, Some(0)).unwrap()}
  }
  #[inline]
  pub fn difficulty(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_DIFFICULTY, Some(0)).unwrap()}
  }
  #[inline]
  pub fn monster_level(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_MONSTER_LEVEL, Some(0)).unwrap()}
  }
  #[inline]
  pub fn recommended_level(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_RECOMMENDED_LEVEL, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_2, Some(0)).unwrap()}
  }
  #[inline]
  pub fn hollow_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_HOLLOW_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn first_battle_event_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_FIRST_BATTLE_EVENT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn battle_event_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_BATTLE_EVENT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn battle_rank(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_BATTLE_RANK, None)}
  }
  #[inline]
  pub fn slot_1_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_1_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn slot_2_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_2_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn slot_3_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_3_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn buddy(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_BUDDY, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_4(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveBattleQuestTemplate::VT_UNK_4, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_5(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_5, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_6(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveBattleQuestTemplate::VT_UNK_6, Some(false)).unwrap()}
  }
  #[inline]
  pub fn chapter_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_CHAPTER_NAME, None)}
  }
  #[inline]
  pub fn quest_image(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_QUEST_IMAGE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_7(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_UNK_7, None)}
  }
  #[inline]
  pub fn unk_8(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveBattleQuestTemplate::VT_UNK_8, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_9(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_9, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_10(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(ArchiveBattleQuestTemplate::VT_UNK_10, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_11(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_11, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_12(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ArchiveBattleQuestTemplate::VT_UNK_12, None)}
  }
  #[inline]
  pub fn unk_13(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ArchiveBattleQuestTemplate::VT_UNK_13, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for ArchiveBattleQuestTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("quest_name", Self::VT_QUEST_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("quest_desc", Self::VT_QUEST_DESC, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("target", Self::VT_TARGET, false)?
     .visit_field::<i32>("quest_type", Self::VT_QUEST_TYPE, false)?
     .visit_field::<i32>("chapter", Self::VT_CHAPTER, false)?
     .visit_field::<i32>("difficulty", Self::VT_DIFFICULTY, false)?
     .visit_field::<i32>("monster_level", Self::VT_MONSTER_LEVEL, false)?
     .visit_field::<i32>("recommended_level", Self::VT_RECOMMENDED_LEVEL, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("hollow_id", Self::VT_HOLLOW_ID, false)?
     .visit_field::<i32>("first_battle_event_id", Self::VT_FIRST_BATTLE_EVENT_ID, false)?
     .visit_field::<i32>("battle_event_id", Self::VT_BATTLE_EVENT_ID, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("battle_rank", Self::VT_BATTLE_RANK, false)?
     .visit_field::<i32>("slot_1_avatar", Self::VT_SLOT_1_AVATAR, false)?
     .visit_field::<i32>("slot_2_avatar", Self::VT_SLOT_2_AVATAR, false)?
     .visit_field::<i32>("slot_3_avatar", Self::VT_SLOT_3_AVATAR, false)?
     .visit_field::<i32>("buddy", Self::VT_BUDDY, false)?
     .visit_field::<bool>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<i32>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<bool>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("chapter_name", Self::VT_CHAPTER_NAME, false)?
     .visit_field::<i32>("quest_image", Self::VT_QUEST_IMAGE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_7", Self::VT_UNK_7, false)?
     .visit_field::<bool>("unk_8", Self::VT_UNK_8, false)?
     .visit_field::<i32>("unk_9", Self::VT_UNK_9, false)?
     .visit_field::<bool>("unk_10", Self::VT_UNK_10, false)?
     .visit_field::<i32>("unk_11", Self::VT_UNK_11, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_12", Self::VT_UNK_12, false)?
     .visit_field::<i32>("unk_13", Self::VT_UNK_13, false)?
     .finish();
    Ok(())
  }
}
pub struct ArchiveBattleQuestTemplateArgs<'a> {
    pub id: i32,
    pub quest_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub quest_desc: Option<flatbuffers::WIPOffset<&'a str>>,
    pub target: Option<flatbuffers::WIPOffset<&'a str>>,
    pub quest_type: i32,
    pub chapter: i32,
    pub difficulty: i32,
    pub monster_level: i32,
    pub recommended_level: i32,
    pub unk_1: i32,
    pub unk_2: i32,
    pub hollow_id: i32,
    pub first_battle_event_id: i32,
    pub battle_event_id: i32,
    pub unk_3: i32,
    pub battle_rank: Option<flatbuffers::WIPOffset<&'a str>>,
    pub slot_1_avatar: i32,
    pub slot_2_avatar: i32,
    pub slot_3_avatar: i32,
    pub buddy: i32,
    pub unk_4: bool,
    pub unk_5: i32,
    pub unk_6: bool,
    pub chapter_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub quest_image: i32,
    pub unk_7: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_8: bool,
    pub unk_9: i32,
    pub unk_10: bool,
    pub unk_11: i32,
    pub unk_12: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_13: i32,
}
impl<'a> Default for ArchiveBattleQuestTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    ArchiveBattleQuestTemplateArgs {
      id: 0,
      quest_name: None,
      quest_desc: None,
      target: None,
      quest_type: 0,
      chapter: 0,
      difficulty: 0,
      monster_level: 0,
      recommended_level: 0,
      unk_1: 0,
      unk_2: 0,
      hollow_id: 0,
      first_battle_event_id: 0,
      battle_event_id: 0,
      unk_3: 0,
      battle_rank: None,
      slot_1_avatar: 0,
      slot_2_avatar: 0,
      slot_3_avatar: 0,
      buddy: 0,
      unk_4: false,
      unk_5: 0,
      unk_6: false,
      chapter_name: None,
      quest_image: 0,
      unk_7: None,
      unk_8: false,
      unk_9: 0,
      unk_10: false,
      unk_11: 0,
      unk_12: None,
      unk_13: 0,
    }
  }
}

pub struct ArchiveBattleQuestTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ArchiveBattleQuestTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_quest_name(&mut self, quest_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_QUEST_NAME, quest_name);
  }
  #[inline]
  pub fn add_quest_desc(&mut self, quest_desc: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_QUEST_DESC, quest_desc);
  }
  #[inline]
  pub fn add_target(&mut self, target: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_TARGET, target);
  }
  #[inline]
  pub fn add_quest_type(&mut self, quest_type: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_QUEST_TYPE, quest_type, 0);
  }
  #[inline]
  pub fn add_chapter(&mut self, chapter: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_CHAPTER, chapter, 0);
  }
  #[inline]
  pub fn add_difficulty(&mut self, difficulty: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_DIFFICULTY, difficulty, 0);
  }
  #[inline]
  pub fn add_monster_level(&mut self, monster_level: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_MONSTER_LEVEL, monster_level, 0);
  }
  #[inline]
  pub fn add_recommended_level(&mut self, recommended_level: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_RECOMMENDED_LEVEL, recommended_level, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_2, unk_2, 0);
  }
  #[inline]
  pub fn add_hollow_id(&mut self, hollow_id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_HOLLOW_ID, hollow_id, 0);
  }
  #[inline]
  pub fn add_first_battle_event_id(&mut self, first_battle_event_id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_FIRST_BATTLE_EVENT_ID, first_battle_event_id, 0);
  }
  #[inline]
  pub fn add_battle_event_id(&mut self, battle_event_id: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_BATTLE_EVENT_ID, battle_event_id, 0);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_battle_rank(&mut self, battle_rank: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_BATTLE_RANK, battle_rank);
  }
  #[inline]
  pub fn add_slot_1_avatar(&mut self, slot_1_avatar: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_1_AVATAR, slot_1_avatar, 0);
  }
  #[inline]
  pub fn add_slot_2_avatar(&mut self, slot_2_avatar: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_2_AVATAR, slot_2_avatar, 0);
  }
  #[inline]
  pub fn add_slot_3_avatar(&mut self, slot_3_avatar: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_SLOT_3_AVATAR, slot_3_avatar, 0);
  }
  #[inline]
  pub fn add_buddy(&mut self, buddy: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_BUDDY, buddy, 0);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: bool) {
    self.fbb_.push_slot::<bool>(ArchiveBattleQuestTemplate::VT_UNK_4, unk_4, false);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_5, unk_5, 0);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: bool) {
    self.fbb_.push_slot::<bool>(ArchiveBattleQuestTemplate::VT_UNK_6, unk_6, false);
  }
  #[inline]
  pub fn add_chapter_name(&mut self, chapter_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_CHAPTER_NAME, chapter_name);
  }
  #[inline]
  pub fn add_quest_image(&mut self, quest_image: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_QUEST_IMAGE, quest_image, 0);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_UNK_7, unk_7);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: bool) {
    self.fbb_.push_slot::<bool>(ArchiveBattleQuestTemplate::VT_UNK_8, unk_8, false);
  }
  #[inline]
  pub fn add_unk_9(&mut self, unk_9: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_9, unk_9, 0);
  }
  #[inline]
  pub fn add_unk_10(&mut self, unk_10: bool) {
    self.fbb_.push_slot::<bool>(ArchiveBattleQuestTemplate::VT_UNK_10, unk_10, false);
  }
  #[inline]
  pub fn add_unk_11(&mut self, unk_11: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_11, unk_11, 0);
  }
  #[inline]
  pub fn add_unk_12(&mut self, unk_12: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplate::VT_UNK_12, unk_12);
  }
  #[inline]
  pub fn add_unk_13(&mut self, unk_13: i32) {
    self.fbb_.push_slot::<i32>(ArchiveBattleQuestTemplate::VT_UNK_13, unk_13, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ArchiveBattleQuestTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ArchiveBattleQuestTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ArchiveBattleQuestTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ArchiveBattleQuestTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ArchiveBattleQuestTemplate");
      ds.field("id", &self.id());
      ds.field("quest_name", &self.quest_name());
      ds.field("quest_desc", &self.quest_desc());
      ds.field("target", &self.target());
      ds.field("quest_type", &self.quest_type());
      ds.field("chapter", &self.chapter());
      ds.field("difficulty", &self.difficulty());
      ds.field("monster_level", &self.monster_level());
      ds.field("recommended_level", &self.recommended_level());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_2", &self.unk_2());
      ds.field("hollow_id", &self.hollow_id());
      ds.field("first_battle_event_id", &self.first_battle_event_id());
      ds.field("battle_event_id", &self.battle_event_id());
      ds.field("unk_3", &self.unk_3());
      ds.field("battle_rank", &self.battle_rank());
      ds.field("slot_1_avatar", &self.slot_1_avatar());
      ds.field("slot_2_avatar", &self.slot_2_avatar());
      ds.field("slot_3_avatar", &self.slot_3_avatar());
      ds.field("buddy", &self.buddy());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("chapter_name", &self.chapter_name());
      ds.field("quest_image", &self.quest_image());
      ds.field("unk_7", &self.unk_7());
      ds.field("unk_8", &self.unk_8());
      ds.field("unk_9", &self.unk_9());
      ds.field("unk_10", &self.unk_10());
      ds.field("unk_11", &self.unk_11());
      ds.field("unk_12", &self.unk_12());
      ds.field("unk_13", &self.unk_13());
      ds.finish()
  }
}
pub enum SectionConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct SectionConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for SectionConfigTemplate<'a> {
  type Inner = SectionConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> SectionConfigTemplate<'a> {
  pub const VT_SECTION_ID: flatbuffers::VOffsetT = 4;
  pub const VT_SECTION_PHOTO: flatbuffers::VOffsetT = 6;
  pub const VT_NAME: flatbuffers::VOffsetT = 8;
  pub const VT_BORN_TRANSFORM: flatbuffers::VOffsetT = 10;
  pub const VT_ALTERNATIVE_BORN_TRANSFORM: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 14;
  pub const VT_SECTION_NAME: flatbuffers::VOffsetT = 16;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    SectionConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args SectionConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<SectionConfigTemplate<'bldr>> {
    let mut builder = SectionConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.section_name { builder.add_section_name(x); }
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.alternative_born_transform { builder.add_alternative_born_transform(x); }
    if let Some(x) = args.born_transform { builder.add_born_transform(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    if let Some(x) = args.section_photo { builder.add_section_photo(x); }
    builder.add_section_id(args.section_id);
    builder.finish()
  }


  #[inline]
  pub fn section_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(SectionConfigTemplate::VT_SECTION_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn section_photo(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(SectionConfigTemplate::VT_SECTION_PHOTO, None)}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(SectionConfigTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn born_transform(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(SectionConfigTemplate::VT_BORN_TRANSFORM, None)}
  }
  #[inline]
  pub fn alternative_born_transform(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(SectionConfigTemplate::VT_ALTERNATIVE_BORN_TRANSFORM, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(SectionConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn section_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(SectionConfigTemplate::VT_SECTION_NAME, None)}
  }
}

impl flatbuffers::Verifiable for SectionConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("section_id", Self::VT_SECTION_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("section_photo", Self::VT_SECTION_PHOTO, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("born_transform", Self::VT_BORN_TRANSFORM, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("alternative_born_transform", Self::VT_ALTERNATIVE_BORN_TRANSFORM, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("section_name", Self::VT_SECTION_NAME, false)?
     .finish();
    Ok(())
  }
}
pub struct SectionConfigTemplateArgs<'a> {
    pub section_id: i32,
    pub section_photo: Option<flatbuffers::WIPOffset<&'a str>>,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub born_transform: Option<flatbuffers::WIPOffset<&'a str>>,
    pub alternative_born_transform: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_3: i32,
    pub section_name: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for SectionConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    SectionConfigTemplateArgs {
      section_id: 0,
      section_photo: None,
      name: None,
      born_transform: None,
      alternative_born_transform: None,
      unk_3: 0,
      section_name: None,
    }
  }
}

pub struct SectionConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> SectionConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_section_id(&mut self, section_id: i32) {
    self.fbb_.push_slot::<i32>(SectionConfigTemplate::VT_SECTION_ID, section_id, 0);
  }
  #[inline]
  pub fn add_section_photo(&mut self, section_photo: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplate::VT_SECTION_PHOTO, section_photo);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_born_transform(&mut self, born_transform: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplate::VT_BORN_TRANSFORM, born_transform);
  }
  #[inline]
  pub fn add_alternative_born_transform(&mut self, alternative_born_transform: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplate::VT_ALTERNATIVE_BORN_TRANSFORM, alternative_born_transform);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(SectionConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_section_name(&mut self, section_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplate::VT_SECTION_NAME, section_name);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> SectionConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    SectionConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<SectionConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for SectionConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("SectionConfigTemplate");
      ds.field("section_id", &self.section_id());
      ds.field("section_photo", &self.section_photo());
      ds.field("name", &self.name());
      ds.field("born_transform", &self.born_transform());
      ds.field("alternative_born_transform", &self.alternative_born_transform());
      ds.field("unk_3", &self.unk_3());
      ds.field("section_name", &self.section_name());
      ds.finish()
  }
}
pub enum MainCityBGMConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct MainCityBGMConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for MainCityBGMConfigTemplate<'a> {
  type Inner = MainCityBGMConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> MainCityBGMConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_PLAY_EVENT_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_STATE_NAME: flatbuffers::VOffsetT = 8;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    MainCityBGMConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args MainCityBGMConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<MainCityBGMConfigTemplate<'bldr>> {
    let mut builder = MainCityBGMConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.state_name { builder.add_state_name(x); }
    if let Some(x) = args.play_event_name { builder.add_play_event_name(x); }
    builder.add_id(args.id);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(MainCityBGMConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn play_event_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MainCityBGMConfigTemplate::VT_PLAY_EVENT_NAME, None)}
  }
  #[inline]
  pub fn state_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MainCityBGMConfigTemplate::VT_STATE_NAME, None)}
  }
}

impl flatbuffers::Verifiable for MainCityBGMConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("play_event_name", Self::VT_PLAY_EVENT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("state_name", Self::VT_STATE_NAME, false)?
     .finish();
    Ok(())
  }
}
pub struct MainCityBGMConfigTemplateArgs<'a> {
    pub id: i32,
    pub play_event_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub state_name: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for MainCityBGMConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    MainCityBGMConfigTemplateArgs {
      id: 0,
      play_event_name: None,
      state_name: None,
    }
  }
}

pub struct MainCityBGMConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> MainCityBGMConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(MainCityBGMConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_play_event_name(&mut self, play_event_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MainCityBGMConfigTemplate::VT_PLAY_EVENT_NAME, play_event_name);
  }
  #[inline]
  pub fn add_state_name(&mut self, state_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MainCityBGMConfigTemplate::VT_STATE_NAME, state_name);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> MainCityBGMConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    MainCityBGMConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<MainCityBGMConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for MainCityBGMConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("MainCityBGMConfigTemplate");
      ds.field("id", &self.id());
      ds.field("play_event_name", &self.play_event_name());
      ds.field("state_name", &self.state_name());
      ds.finish()
  }
}
pub enum HollowBuffTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowBuffTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowBuffTemplate<'a> {
  type Inner = HollowBuffTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowBuffTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_BUFF_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_MENU_NAME: flatbuffers::VOffsetT = 8;
  pub const VT_MINI_ICONS: flatbuffers::VOffsetT = 10;
  pub const VT_DECORATED_ICONS: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 14;
  pub const VT_PRICE: flatbuffers::VOffsetT = 16;
  pub const VT_UNLOCK_CONDITION: flatbuffers::VOffsetT = 18;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 20;
  pub const VT_CLIENT_ABILITY: flatbuffers::VOffsetT = 22;
  pub const VT_TARGETS: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 26;
  pub const VT_MAX_TIMES: flatbuffers::VOffsetT = 28;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 30;
  pub const VT_DESCRIPTION_TEXT: flatbuffers::VOffsetT = 32;
  pub const VT_PREFAB: flatbuffers::VOffsetT = 34;
  pub const VT_ICON: flatbuffers::VOffsetT = 36;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowBuffTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowBuffTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowBuffTemplate<'bldr>> {
    let mut builder = HollowBuffTemplateBuilder::new(_fbb);
    if let Some(x) = args.icon { builder.add_icon(x); }
    if let Some(x) = args.prefab { builder.add_prefab(x); }
    if let Some(x) = args.description_text { builder.add_description_text(x); }
    if let Some(x) = args.unk_4 { builder.add_unk_4(x); }
    builder.add_max_times(args.max_times);
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.targets { builder.add_targets(x); }
    builder.add_client_ability(args.client_ability);
    if let Some(x) = args.unlock_condition { builder.add_unlock_condition(x); }
    builder.add_price(args.price);
    builder.add_unk_1(args.unk_1);
    if let Some(x) = args.decorated_icons { builder.add_decorated_icons(x); }
    if let Some(x) = args.mini_icons { builder.add_mini_icons(x); }
    if let Some(x) = args.menu_name { builder.add_menu_name(x); }
    if let Some(x) = args.buff_name { builder.add_buff_name(x); }
    builder.add_id(args.id);
    builder.add_unk_2(args.unk_2);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn buff_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_BUFF_NAME, None)}
  }
  #[inline]
  pub fn menu_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_MENU_NAME, None)}
  }
  #[inline]
  pub fn mini_icons(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowBuffTemplate::VT_MINI_ICONS, None)}
  }
  #[inline]
  pub fn decorated_icons(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowBuffTemplate::VT_DECORATED_ICONS, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn price(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_PRICE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unlock_condition(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_UNLOCK_CONDITION, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowBuffTemplate::VT_UNK_2, Some(false)).unwrap()}
  }
  #[inline]
  pub fn client_ability(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_CLIENT_ABILITY, Some(0)).unwrap()}
  }
  #[inline]
  pub fn targets(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowBuffTemplate::VT_TARGETS, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn max_times(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowBuffTemplate::VT_MAX_TIMES, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_4(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_UNK_4, None)}
  }
  #[inline]
  pub fn description_text(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_DESCRIPTION_TEXT, None)}
  }
  #[inline]
  pub fn prefab(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_PREFAB, None)}
  }
  #[inline]
  pub fn icon(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowBuffTemplate::VT_ICON, None)}
  }
}

impl flatbuffers::Verifiable for HollowBuffTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("buff_name", Self::VT_BUFF_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("menu_name", Self::VT_MENU_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("mini_icons", Self::VT_MINI_ICONS, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("decorated_icons", Self::VT_DECORATED_ICONS, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("price", Self::VT_PRICE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlock_condition", Self::VT_UNLOCK_CONDITION, false)?
     .visit_field::<bool>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("client_ability", Self::VT_CLIENT_ABILITY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("targets", Self::VT_TARGETS, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<i32>("max_times", Self::VT_MAX_TIMES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("description_text", Self::VT_DESCRIPTION_TEXT, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("prefab", Self::VT_PREFAB, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("icon", Self::VT_ICON, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowBuffTemplateArgs<'a> {
    pub id: i32,
    pub buff_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub menu_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub mini_icons: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub decorated_icons: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_1: i32,
    pub price: i32,
    pub unlock_condition: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: bool,
    pub client_ability: i32,
    pub targets: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub unk_3: i32,
    pub max_times: i32,
    pub unk_4: Option<flatbuffers::WIPOffset<&'a str>>,
    pub description_text: Option<flatbuffers::WIPOffset<&'a str>>,
    pub prefab: Option<flatbuffers::WIPOffset<&'a str>>,
    pub icon: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for HollowBuffTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowBuffTemplateArgs {
      id: 0,
      buff_name: None,
      menu_name: None,
      mini_icons: None,
      decorated_icons: None,
      unk_1: 0,
      price: 0,
      unlock_condition: None,
      unk_2: false,
      client_ability: 0,
      targets: None,
      unk_3: 0,
      max_times: 0,
      unk_4: None,
      description_text: None,
      prefab: None,
      icon: None,
    }
  }
}

pub struct HollowBuffTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowBuffTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_buff_name(&mut self, buff_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_BUFF_NAME, buff_name);
  }
  #[inline]
  pub fn add_menu_name(&mut self, menu_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_MENU_NAME, menu_name);
  }
  #[inline]
  pub fn add_mini_icons(&mut self, mini_icons: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_MINI_ICONS, mini_icons);
  }
  #[inline]
  pub fn add_decorated_icons(&mut self, decorated_icons: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_DECORATED_ICONS, decorated_icons);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_price(&mut self, price: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_PRICE, price, 0);
  }
  #[inline]
  pub fn add_unlock_condition(&mut self, unlock_condition: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_UNLOCK_CONDITION, unlock_condition);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: bool) {
    self.fbb_.push_slot::<bool>(HollowBuffTemplate::VT_UNK_2, unk_2, false);
  }
  #[inline]
  pub fn add_client_ability(&mut self, client_ability: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_CLIENT_ABILITY, client_ability, 0);
  }
  #[inline]
  pub fn add_targets(&mut self, targets: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_TARGETS, targets);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_max_times(&mut self, max_times: i32) {
    self.fbb_.push_slot::<i32>(HollowBuffTemplate::VT_MAX_TIMES, max_times, 0);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_UNK_4, unk_4);
  }
  #[inline]
  pub fn add_description_text(&mut self, description_text: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_DESCRIPTION_TEXT, description_text);
  }
  #[inline]
  pub fn add_prefab(&mut self, prefab: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_PREFAB, prefab);
  }
  #[inline]
  pub fn add_icon(&mut self, icon: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplate::VT_ICON, icon);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowBuffTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowBuffTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowBuffTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowBuffTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowBuffTemplate");
      ds.field("id", &self.id());
      ds.field("buff_name", &self.buff_name());
      ds.field("menu_name", &self.menu_name());
      ds.field("mini_icons", &self.mini_icons());
      ds.field("decorated_icons", &self.decorated_icons());
      ds.field("unk_1", &self.unk_1());
      ds.field("price", &self.price());
      ds.field("unlock_condition", &self.unlock_condition());
      ds.field("unk_2", &self.unk_2());
      ds.field("client_ability", &self.client_ability());
      ds.field("targets", &self.targets());
      ds.field("unk_3", &self.unk_3());
      ds.field("max_times", &self.max_times());
      ds.field("unk_4", &self.unk_4());
      ds.field("description_text", &self.description_text());
      ds.field("prefab", &self.prefab());
      ds.field("icon", &self.icon());
      ds.finish()
  }
}
pub enum CafeConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct CafeConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for CafeConfigTemplate<'a> {
  type Inner = CafeConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> CafeConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_MENU_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 8;
  pub const VT_PRICE: flatbuffers::VOffsetT = 10;
  pub const VT_UNLOCK_CONDITION: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 14;
  pub const VT_DESCRIPTION_TEXT: flatbuffers::VOffsetT = 16;
  pub const VT_ICON: flatbuffers::VOffsetT = 18;
  pub const VT_CAFE_PREFAB: flatbuffers::VOffsetT = 20;
  pub const VT_REWARD_BUFF_ID: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 26;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 28;
  pub const VT_ENERGY_AMOUNT: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 34;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    CafeConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args CafeConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<CafeConfigTemplate<'bldr>> {
    let mut builder = CafeConfigTemplateBuilder::new(_fbb);
    builder.add_unk_8(args.unk_8);
    builder.add_unk_7(args.unk_7);
    builder.add_energy_amount(args.energy_amount);
    if let Some(x) = args.unk_5 { builder.add_unk_5(x); }
    builder.add_unk_4(args.unk_4);
    builder.add_unk_3(args.unk_3);
    builder.add_reward_buff_id(args.reward_buff_id);
    if let Some(x) = args.cafe_prefab { builder.add_cafe_prefab(x); }
    builder.add_icon(args.icon);
    if let Some(x) = args.description_text { builder.add_description_text(x); }
    if let Some(x) = args.unlock_condition { builder.add_unlock_condition(x); }
    builder.add_price(args.price);
    builder.add_unk_1(args.unk_1);
    if let Some(x) = args.menu_name { builder.add_menu_name(x); }
    builder.add_id(args.id);
    builder.add_unk_2(args.unk_2);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn menu_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CafeConfigTemplate::VT_MENU_NAME, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn price(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_PRICE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unlock_condition(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CafeConfigTemplate::VT_UNLOCK_CONDITION, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(CafeConfigTemplate::VT_UNK_2, Some(false)).unwrap()}
  }
  #[inline]
  pub fn description_text(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CafeConfigTemplate::VT_DESCRIPTION_TEXT, None)}
  }
  #[inline]
  pub fn icon(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_ICON, Some(0)).unwrap()}
  }
  #[inline]
  pub fn cafe_prefab(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CafeConfigTemplate::VT_CAFE_PREFAB, None)}
  }
  #[inline]
  pub fn reward_buff_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_REWARD_BUFF_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_4(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_UNK_4, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_5(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(CafeConfigTemplate::VT_UNK_5, None)}
  }
  #[inline]
  pub fn energy_amount(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_ENERGY_AMOUNT, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_7(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_UNK_7, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_8(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(CafeConfigTemplate::VT_UNK_8, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for CafeConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("menu_name", Self::VT_MENU_NAME, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("price", Self::VT_PRICE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlock_condition", Self::VT_UNLOCK_CONDITION, false)?
     .visit_field::<bool>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("description_text", Self::VT_DESCRIPTION_TEXT, false)?
     .visit_field::<i32>("icon", Self::VT_ICON, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("cafe_prefab", Self::VT_CAFE_PREFAB, false)?
     .visit_field::<i32>("reward_buff_id", Self::VT_REWARD_BUFF_ID, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<i32>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<i32>("energy_amount", Self::VT_ENERGY_AMOUNT, false)?
     .visit_field::<i32>("unk_7", Self::VT_UNK_7, false)?
     .visit_field::<i32>("unk_8", Self::VT_UNK_8, false)?
     .finish();
    Ok(())
  }
}
pub struct CafeConfigTemplateArgs<'a> {
    pub id: i32,
    pub menu_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_1: i32,
    pub price: i32,
    pub unlock_condition: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: bool,
    pub description_text: Option<flatbuffers::WIPOffset<&'a str>>,
    pub icon: i32,
    pub cafe_prefab: Option<flatbuffers::WIPOffset<&'a str>>,
    pub reward_buff_id: i32,
    pub unk_3: i32,
    pub unk_4: i32,
    pub unk_5: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub energy_amount: i32,
    pub unk_7: i32,
    pub unk_8: i32,
}
impl<'a> Default for CafeConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    CafeConfigTemplateArgs {
      id: 0,
      menu_name: None,
      unk_1: 0,
      price: 0,
      unlock_condition: None,
      unk_2: false,
      description_text: None,
      icon: 0,
      cafe_prefab: None,
      reward_buff_id: 0,
      unk_3: 0,
      unk_4: 0,
      unk_5: None,
      energy_amount: 0,
      unk_7: 0,
      unk_8: 0,
    }
  }
}

pub struct CafeConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> CafeConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_menu_name(&mut self, menu_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplate::VT_MENU_NAME, menu_name);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_price(&mut self, price: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_PRICE, price, 0);
  }
  #[inline]
  pub fn add_unlock_condition(&mut self, unlock_condition: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplate::VT_UNLOCK_CONDITION, unlock_condition);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: bool) {
    self.fbb_.push_slot::<bool>(CafeConfigTemplate::VT_UNK_2, unk_2, false);
  }
  #[inline]
  pub fn add_description_text(&mut self, description_text: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplate::VT_DESCRIPTION_TEXT, description_text);
  }
  #[inline]
  pub fn add_icon(&mut self, icon: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_ICON, icon, 0);
  }
  #[inline]
  pub fn add_cafe_prefab(&mut self, cafe_prefab: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplate::VT_CAFE_PREFAB, cafe_prefab);
  }
  #[inline]
  pub fn add_reward_buff_id(&mut self, reward_buff_id: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_REWARD_BUFF_ID, reward_buff_id, 0);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_UNK_4, unk_4, 0);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplate::VT_UNK_5, unk_5);
  }
  #[inline]
  pub fn add_energy_amount(&mut self, energy_amount: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_ENERGY_AMOUNT, energy_amount, 0);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_UNK_7, unk_7, 0);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: i32) {
    self.fbb_.push_slot::<i32>(CafeConfigTemplate::VT_UNK_8, unk_8, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> CafeConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    CafeConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<CafeConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for CafeConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("CafeConfigTemplate");
      ds.field("id", &self.id());
      ds.field("menu_name", &self.menu_name());
      ds.field("unk_1", &self.unk_1());
      ds.field("price", &self.price());
      ds.field("unlock_condition", &self.unlock_condition());
      ds.field("unk_2", &self.unk_2());
      ds.field("description_text", &self.description_text());
      ds.field("icon", &self.icon());
      ds.field("cafe_prefab", &self.cafe_prefab());
      ds.field("reward_buff_id", &self.reward_buff_id());
      ds.field("unk_3", &self.unk_3());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("energy_amount", &self.energy_amount());
      ds.field("unk_7", &self.unk_7());
      ds.field("unk_8", &self.unk_8());
      ds.finish()
  }
}
pub enum EquipmentTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct EquipmentTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for EquipmentTemplate<'a> {
  type Inner = EquipmentTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> EquipmentTemplate<'a> {
  pub const VT_ITEM_ID: flatbuffers::VOffsetT = 4;
  pub const VT_EQUIPMENT_TYPE: flatbuffers::VOffsetT = 6;
  pub const VT_SUIT_TYPE: flatbuffers::VOffsetT = 8;
  pub const VT_DISK_ICON_PATH: flatbuffers::VOffsetT = 10;
  pub const VT_DRAWING_PATH: flatbuffers::VOffsetT = 12;
  pub const VT_FRONT_LABEL_TEXTURE_PATH: flatbuffers::VOffsetT = 14;
  pub const VT_BACK_LABEL_TEXTURE_PATH: flatbuffers::VOffsetT = 16;
  pub const VT_DISK_TEXTURE_PATH: flatbuffers::VOffsetT = 18;
  pub const VT_PLAY_MUSIC_TAG: flatbuffers::VOffsetT = 20;
  pub const VT_PAUSE_MUSIC_TAG: flatbuffers::VOffsetT = 22;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    EquipmentTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args EquipmentTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<EquipmentTemplate<'bldr>> {
    let mut builder = EquipmentTemplateBuilder::new(_fbb);
    if let Some(x) = args.pause_music_tag { builder.add_pause_music_tag(x); }
    if let Some(x) = args.play_music_tag { builder.add_play_music_tag(x); }
    if let Some(x) = args.disk_texture_path { builder.add_disk_texture_path(x); }
    if let Some(x) = args.back_label_texture_path { builder.add_back_label_texture_path(x); }
    if let Some(x) = args.front_label_texture_path { builder.add_front_label_texture_path(x); }
    if let Some(x) = args.drawing_path { builder.add_drawing_path(x); }
    if let Some(x) = args.disk_icon_path { builder.add_disk_icon_path(x); }
    builder.add_suit_type(args.suit_type);
    builder.add_equipment_type(args.equipment_type);
    builder.add_item_id(args.item_id);
    builder.finish()
  }


  #[inline]
  pub fn item_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentTemplate::VT_ITEM_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn equipment_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentTemplate::VT_EQUIPMENT_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn suit_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentTemplate::VT_SUIT_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn disk_icon_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_DISK_ICON_PATH, None)}
  }
  #[inline]
  pub fn drawing_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_DRAWING_PATH, None)}
  }
  #[inline]
  pub fn front_label_texture_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_FRONT_LABEL_TEXTURE_PATH, None)}
  }
  #[inline]
  pub fn back_label_texture_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_BACK_LABEL_TEXTURE_PATH, None)}
  }
  #[inline]
  pub fn disk_texture_path(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_DISK_TEXTURE_PATH, None)}
  }
  #[inline]
  pub fn play_music_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_PLAY_MUSIC_TAG, None)}
  }
  #[inline]
  pub fn pause_music_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentTemplate::VT_PAUSE_MUSIC_TAG, None)}
  }
}

impl flatbuffers::Verifiable for EquipmentTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("item_id", Self::VT_ITEM_ID, false)?
     .visit_field::<i32>("equipment_type", Self::VT_EQUIPMENT_TYPE, false)?
     .visit_field::<i32>("suit_type", Self::VT_SUIT_TYPE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("disk_icon_path", Self::VT_DISK_ICON_PATH, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("drawing_path", Self::VT_DRAWING_PATH, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("front_label_texture_path", Self::VT_FRONT_LABEL_TEXTURE_PATH, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("back_label_texture_path", Self::VT_BACK_LABEL_TEXTURE_PATH, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("disk_texture_path", Self::VT_DISK_TEXTURE_PATH, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("play_music_tag", Self::VT_PLAY_MUSIC_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("pause_music_tag", Self::VT_PAUSE_MUSIC_TAG, false)?
     .finish();
    Ok(())
  }
}
pub struct EquipmentTemplateArgs<'a> {
    pub item_id: i32,
    pub equipment_type: i32,
    pub suit_type: i32,
    pub disk_icon_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub drawing_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub front_label_texture_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub back_label_texture_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub disk_texture_path: Option<flatbuffers::WIPOffset<&'a str>>,
    pub play_music_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub pause_music_tag: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for EquipmentTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    EquipmentTemplateArgs {
      item_id: 0,
      equipment_type: 0,
      suit_type: 0,
      disk_icon_path: None,
      drawing_path: None,
      front_label_texture_path: None,
      back_label_texture_path: None,
      disk_texture_path: None,
      play_music_tag: None,
      pause_music_tag: None,
    }
  }
}

pub struct EquipmentTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> EquipmentTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_item_id(&mut self, item_id: i32) {
    self.fbb_.push_slot::<i32>(EquipmentTemplate::VT_ITEM_ID, item_id, 0);
  }
  #[inline]
  pub fn add_equipment_type(&mut self, equipment_type: i32) {
    self.fbb_.push_slot::<i32>(EquipmentTemplate::VT_EQUIPMENT_TYPE, equipment_type, 0);
  }
  #[inline]
  pub fn add_suit_type(&mut self, suit_type: i32) {
    self.fbb_.push_slot::<i32>(EquipmentTemplate::VT_SUIT_TYPE, suit_type, 0);
  }
  #[inline]
  pub fn add_disk_icon_path(&mut self, disk_icon_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_DISK_ICON_PATH, disk_icon_path);
  }
  #[inline]
  pub fn add_drawing_path(&mut self, drawing_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_DRAWING_PATH, drawing_path);
  }
  #[inline]
  pub fn add_front_label_texture_path(&mut self, front_label_texture_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_FRONT_LABEL_TEXTURE_PATH, front_label_texture_path);
  }
  #[inline]
  pub fn add_back_label_texture_path(&mut self, back_label_texture_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_BACK_LABEL_TEXTURE_PATH, back_label_texture_path);
  }
  #[inline]
  pub fn add_disk_texture_path(&mut self, disk_texture_path: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_DISK_TEXTURE_PATH, disk_texture_path);
  }
  #[inline]
  pub fn add_play_music_tag(&mut self, play_music_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_PLAY_MUSIC_TAG, play_music_tag);
  }
  #[inline]
  pub fn add_pause_music_tag(&mut self, pause_music_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplate::VT_PAUSE_MUSIC_TAG, pause_music_tag);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> EquipmentTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    EquipmentTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<EquipmentTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for EquipmentTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("EquipmentTemplate");
      ds.field("item_id", &self.item_id());
      ds.field("equipment_type", &self.equipment_type());
      ds.field("suit_type", &self.suit_type());
      ds.field("disk_icon_path", &self.disk_icon_path());
      ds.field("drawing_path", &self.drawing_path());
      ds.field("front_label_texture_path", &self.front_label_texture_path());
      ds.field("back_label_texture_path", &self.back_label_texture_path());
      ds.field("disk_texture_path", &self.disk_texture_path());
      ds.field("play_music_tag", &self.play_music_tag());
      ds.field("pause_music_tag", &self.pause_music_tag());
      ds.finish()
  }
}
pub enum EquipmentSuitTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct EquipmentSuitTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for EquipmentSuitTemplate<'a> {
  type Inner = EquipmentSuitTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> EquipmentSuitTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_NAME: flatbuffers::VOffsetT = 6;
  pub const VT_PRIMARY_CONDITION: flatbuffers::VOffsetT = 8;
  pub const VT_PRIMARY_SUIT_PROPERTYS: flatbuffers::VOffsetT = 10;
  pub const VT_PRIMARY_SUIT_ABILITY: flatbuffers::VOffsetT = 12;
  pub const VT_PRIMARY_DESCRIPTION: flatbuffers::VOffsetT = 14;
  pub const VT_SECONDARY_CONDITION: flatbuffers::VOffsetT = 16;
  pub const VT_SECONDARY_SUIT_PROPERTYS: flatbuffers::VOffsetT = 18;
  pub const VT_SECONDARY_SUIT_ABILITY: flatbuffers::VOffsetT = 20;
  pub const VT_SECONDARY_DESCRIPTION: flatbuffers::VOffsetT = 22;
  pub const VT_SUIT_ITEM_ICON: flatbuffers::VOffsetT = 24;
  pub const VT_SUIT_STORY: flatbuffers::VOffsetT = 26;
  pub const VT_SUIT_FILTER_OPTION: flatbuffers::VOffsetT = 28;
  pub const VT_SUIT_ICON: flatbuffers::VOffsetT = 30;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    EquipmentSuitTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args EquipmentSuitTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<EquipmentSuitTemplate<'bldr>> {
    let mut builder = EquipmentSuitTemplateBuilder::new(_fbb);
    if let Some(x) = args.suit_icon { builder.add_suit_icon(x); }
    if let Some(x) = args.suit_filter_option { builder.add_suit_filter_option(x); }
    if let Some(x) = args.suit_story { builder.add_suit_story(x); }
    if let Some(x) = args.suit_item_icon { builder.add_suit_item_icon(x); }
    if let Some(x) = args.secondary_description { builder.add_secondary_description(x); }
    builder.add_secondary_suit_ability(args.secondary_suit_ability);
    if let Some(x) = args.secondary_suit_propertys { builder.add_secondary_suit_propertys(x); }
    builder.add_secondary_condition(args.secondary_condition);
    if let Some(x) = args.primary_description { builder.add_primary_description(x); }
    builder.add_primary_suit_ability(args.primary_suit_ability);
    if let Some(x) = args.primary_suit_propertys { builder.add_primary_suit_propertys(x); }
    builder.add_primary_condition(args.primary_condition);
    if let Some(x) = args.name { builder.add_name(x); }
    builder.add_id(args.id);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentSuitTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn primary_condition(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentSuitTemplate::VT_PRIMARY_CONDITION, Some(0)).unwrap()}
  }
  #[inline]
  pub fn primary_suit_propertys(&self) -> Option<flatbuffers::Vector<'a, Property>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, Property>>>(EquipmentSuitTemplate::VT_PRIMARY_SUIT_PROPERTYS, None)}
  }
  #[inline]
  pub fn primary_suit_ability(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentSuitTemplate::VT_PRIMARY_SUIT_ABILITY, Some(0)).unwrap()}
  }
  #[inline]
  pub fn primary_description(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_PRIMARY_DESCRIPTION, None)}
  }
  #[inline]
  pub fn secondary_condition(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentSuitTemplate::VT_SECONDARY_CONDITION, Some(0)).unwrap()}
  }
  #[inline]
  pub fn secondary_suit_propertys(&self) -> Option<flatbuffers::Vector<'a, Property>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, Property>>>(EquipmentSuitTemplate::VT_SECONDARY_SUIT_PROPERTYS, None)}
  }
  #[inline]
  pub fn secondary_suit_ability(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(EquipmentSuitTemplate::VT_SECONDARY_SUIT_ABILITY, Some(0)).unwrap()}
  }
  #[inline]
  pub fn secondary_description(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_SECONDARY_DESCRIPTION, None)}
  }
  #[inline]
  pub fn suit_item_icon(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_SUIT_ITEM_ICON, None)}
  }
  #[inline]
  pub fn suit_story(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_SUIT_STORY, None)}
  }
  #[inline]
  pub fn suit_filter_option(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_SUIT_FILTER_OPTION, None)}
  }
  #[inline]
  pub fn suit_icon(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(EquipmentSuitTemplate::VT_SUIT_ICON, None)}
  }
}

impl flatbuffers::Verifiable for EquipmentSuitTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<i32>("primary_condition", Self::VT_PRIMARY_CONDITION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, Property>>>("primary_suit_propertys", Self::VT_PRIMARY_SUIT_PROPERTYS, false)?
     .visit_field::<i32>("primary_suit_ability", Self::VT_PRIMARY_SUIT_ABILITY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("primary_description", Self::VT_PRIMARY_DESCRIPTION, false)?
     .visit_field::<i32>("secondary_condition", Self::VT_SECONDARY_CONDITION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, Property>>>("secondary_suit_propertys", Self::VT_SECONDARY_SUIT_PROPERTYS, false)?
     .visit_field::<i32>("secondary_suit_ability", Self::VT_SECONDARY_SUIT_ABILITY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("secondary_description", Self::VT_SECONDARY_DESCRIPTION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("suit_item_icon", Self::VT_SUIT_ITEM_ICON, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("suit_story", Self::VT_SUIT_STORY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("suit_filter_option", Self::VT_SUIT_FILTER_OPTION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("suit_icon", Self::VT_SUIT_ICON, false)?
     .finish();
    Ok(())
  }
}
pub struct EquipmentSuitTemplateArgs<'a> {
    pub id: i32,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub primary_condition: i32,
    pub primary_suit_propertys: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, Property>>>,
    pub primary_suit_ability: i32,
    pub primary_description: Option<flatbuffers::WIPOffset<&'a str>>,
    pub secondary_condition: i32,
    pub secondary_suit_propertys: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, Property>>>,
    pub secondary_suit_ability: i32,
    pub secondary_description: Option<flatbuffers::WIPOffset<&'a str>>,
    pub suit_item_icon: Option<flatbuffers::WIPOffset<&'a str>>,
    pub suit_story: Option<flatbuffers::WIPOffset<&'a str>>,
    pub suit_filter_option: Option<flatbuffers::WIPOffset<&'a str>>,
    pub suit_icon: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for EquipmentSuitTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    EquipmentSuitTemplateArgs {
      id: 0,
      name: None,
      primary_condition: 0,
      primary_suit_propertys: None,
      primary_suit_ability: 0,
      primary_description: None,
      secondary_condition: 0,
      secondary_suit_propertys: None,
      secondary_suit_ability: 0,
      secondary_description: None,
      suit_item_icon: None,
      suit_story: None,
      suit_filter_option: None,
      suit_icon: None,
    }
  }
}

pub struct EquipmentSuitTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> EquipmentSuitTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(EquipmentSuitTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_primary_condition(&mut self, primary_condition: i32) {
    self.fbb_.push_slot::<i32>(EquipmentSuitTemplate::VT_PRIMARY_CONDITION, primary_condition, 0);
  }
  #[inline]
  pub fn add_primary_suit_propertys(&mut self, primary_suit_propertys: flatbuffers::WIPOffset<flatbuffers::Vector<'b , Property>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_PRIMARY_SUIT_PROPERTYS, primary_suit_propertys);
  }
  #[inline]
  pub fn add_primary_suit_ability(&mut self, primary_suit_ability: i32) {
    self.fbb_.push_slot::<i32>(EquipmentSuitTemplate::VT_PRIMARY_SUIT_ABILITY, primary_suit_ability, 0);
  }
  #[inline]
  pub fn add_primary_description(&mut self, primary_description: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_PRIMARY_DESCRIPTION, primary_description);
  }
  #[inline]
  pub fn add_secondary_condition(&mut self, secondary_condition: i32) {
    self.fbb_.push_slot::<i32>(EquipmentSuitTemplate::VT_SECONDARY_CONDITION, secondary_condition, 0);
  }
  #[inline]
  pub fn add_secondary_suit_propertys(&mut self, secondary_suit_propertys: flatbuffers::WIPOffset<flatbuffers::Vector<'b , Property>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SECONDARY_SUIT_PROPERTYS, secondary_suit_propertys);
  }
  #[inline]
  pub fn add_secondary_suit_ability(&mut self, secondary_suit_ability: i32) {
    self.fbb_.push_slot::<i32>(EquipmentSuitTemplate::VT_SECONDARY_SUIT_ABILITY, secondary_suit_ability, 0);
  }
  #[inline]
  pub fn add_secondary_description(&mut self, secondary_description: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SECONDARY_DESCRIPTION, secondary_description);
  }
  #[inline]
  pub fn add_suit_item_icon(&mut self, suit_item_icon: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SUIT_ITEM_ICON, suit_item_icon);
  }
  #[inline]
  pub fn add_suit_story(&mut self, suit_story: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SUIT_STORY, suit_story);
  }
  #[inline]
  pub fn add_suit_filter_option(&mut self, suit_filter_option: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SUIT_FILTER_OPTION, suit_filter_option);
  }
  #[inline]
  pub fn add_suit_icon(&mut self, suit_icon: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplate::VT_SUIT_ICON, suit_icon);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> EquipmentSuitTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    EquipmentSuitTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<EquipmentSuitTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for EquipmentSuitTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("EquipmentSuitTemplate");
      ds.field("id", &self.id());
      ds.field("name", &self.name());
      ds.field("primary_condition", &self.primary_condition());
      ds.field("primary_suit_propertys", &self.primary_suit_propertys());
      ds.field("primary_suit_ability", &self.primary_suit_ability());
      ds.field("primary_description", &self.primary_description());
      ds.field("secondary_condition", &self.secondary_condition());
      ds.field("secondary_suit_propertys", &self.secondary_suit_propertys());
      ds.field("secondary_suit_ability", &self.secondary_suit_ability());
      ds.field("secondary_description", &self.secondary_description());
      ds.field("suit_item_icon", &self.suit_item_icon());
      ds.field("suit_story", &self.suit_story());
      ds.field("suit_filter_option", &self.suit_filter_option());
      ds.field("suit_icon", &self.suit_icon());
      ds.finish()
  }
}
pub enum HollowConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowConfigTemplate<'a> {
  type Inner = HollowConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_HOLLOW_GROUP: flatbuffers::VOffsetT = 6;
  pub const VT_NAME: flatbuffers::VOffsetT = 8;
  pub const VT_UNLOCK_CONDITION: flatbuffers::VOffsetT = 10;
  pub const VT_LOCK_HINT: flatbuffers::VOffsetT = 12;
  pub const VT_PIC_RES: flatbuffers::VOffsetT = 14;
  pub const VT_MODEL_RES: flatbuffers::VOffsetT = 16;
  pub const VT_LOCKED_COLOR: flatbuffers::VOffsetT = 18;
  pub const VT_UNLOCKED_COLOR: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 26;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowConfigTemplate<'bldr>> {
    let mut builder = HollowConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.unk_3 { builder.add_unk_3(x); }
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    if let Some(x) = args.unlocked_color { builder.add_unlocked_color(x); }
    if let Some(x) = args.locked_color { builder.add_locked_color(x); }
    if let Some(x) = args.model_res { builder.add_model_res(x); }
    if let Some(x) = args.pic_res { builder.add_pic_res(x); }
    if let Some(x) = args.lock_hint { builder.add_lock_hint(x); }
    if let Some(x) = args.unlock_condition { builder.add_unlock_condition(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    builder.add_hollow_group(args.hollow_group);
    builder.add_id(args.id);
    builder.add_unk_1(args.unk_1);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn hollow_group(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowConfigTemplate::VT_HOLLOW_GROUP, Some(0)).unwrap()}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn unlock_condition(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_UNLOCK_CONDITION, None)}
  }
  #[inline]
  pub fn lock_hint(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_LOCK_HINT, None)}
  }
  #[inline]
  pub fn pic_res(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_PIC_RES, None)}
  }
  #[inline]
  pub fn model_res(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_MODEL_RES, None)}
  }
  #[inline]
  pub fn locked_color(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_LOCKED_COLOR, None)}
  }
  #[inline]
  pub fn unlocked_color(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_UNLOCKED_COLOR, None)}
  }
  #[inline]
  pub fn unk_1(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowConfigTemplate::VT_UNK_1, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowConfigTemplate::VT_UNK_3, None)}
  }
}

impl flatbuffers::Verifiable for HollowConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<i32>("hollow_group", Self::VT_HOLLOW_GROUP, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlock_condition", Self::VT_UNLOCK_CONDITION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("lock_hint", Self::VT_LOCK_HINT, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("pic_res", Self::VT_PIC_RES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("model_res", Self::VT_MODEL_RES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("locked_color", Self::VT_LOCKED_COLOR, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlocked_color", Self::VT_UNLOCKED_COLOR, false)?
     .visit_field::<bool>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_3", Self::VT_UNK_3, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowConfigTemplateArgs<'a> {
    pub id: i32,
    pub hollow_group: i32,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unlock_condition: Option<flatbuffers::WIPOffset<&'a str>>,
    pub lock_hint: Option<flatbuffers::WIPOffset<&'a str>>,
    pub pic_res: Option<flatbuffers::WIPOffset<&'a str>>,
    pub model_res: Option<flatbuffers::WIPOffset<&'a str>>,
    pub locked_color: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unlocked_color: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_1: bool,
    pub unk_2: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_3: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for HollowConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowConfigTemplateArgs {
      id: 0,
      hollow_group: 0,
      name: None,
      unlock_condition: None,
      lock_hint: None,
      pic_res: None,
      model_res: None,
      locked_color: None,
      unlocked_color: None,
      unk_1: false,
      unk_2: None,
      unk_3: None,
    }
  }
}

pub struct HollowConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(HollowConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_hollow_group(&mut self, hollow_group: i32) {
    self.fbb_.push_slot::<i32>(HollowConfigTemplate::VT_HOLLOW_GROUP, hollow_group, 0);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_unlock_condition(&mut self, unlock_condition: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_UNLOCK_CONDITION, unlock_condition);
  }
  #[inline]
  pub fn add_lock_hint(&mut self, lock_hint: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_LOCK_HINT, lock_hint);
  }
  #[inline]
  pub fn add_pic_res(&mut self, pic_res: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_PIC_RES, pic_res);
  }
  #[inline]
  pub fn add_model_res(&mut self, model_res: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_MODEL_RES, model_res);
  }
  #[inline]
  pub fn add_locked_color(&mut self, locked_color: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_LOCKED_COLOR, locked_color);
  }
  #[inline]
  pub fn add_unlocked_color(&mut self, unlocked_color: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_UNLOCKED_COLOR, unlocked_color);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: bool) {
    self.fbb_.push_slot::<bool>(HollowConfigTemplate::VT_UNK_1, unk_1, false);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplate::VT_UNK_3, unk_3);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowConfigTemplate");
      ds.field("id", &self.id());
      ds.field("hollow_group", &self.hollow_group());
      ds.field("name", &self.name());
      ds.field("unlock_condition", &self.unlock_condition());
      ds.field("lock_hint", &self.lock_hint());
      ds.field("pic_res", &self.pic_res());
      ds.field("model_res", &self.model_res());
      ds.field("locked_color", &self.locked_color());
      ds.field("unlocked_color", &self.unlocked_color());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_2", &self.unk_2());
      ds.field("unk_3", &self.unk_3());
      ds.finish()
  }
}
pub enum HollowQuestTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowQuestTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowQuestTemplate<'a> {
  type Inner = HollowQuestTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowQuestTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 6;
  pub const VT_CHESSBOARD_ID: flatbuffers::VOffsetT = 8;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 10;
  pub const VT_GROUP_ID: flatbuffers::VOffsetT = 12;
  pub const VT_HOLLOW_QUEST_TYPE: flatbuffers::VOffsetT = 14;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 16;
  pub const VT_DURATION: flatbuffers::VOffsetT = 18;
  pub const VT_HAS_STAMINA: flatbuffers::VOffsetT = 20;
  pub const VT_ENVIRONMENTS: flatbuffers::VOffsetT = 22;
  pub const VT_MAIN_DIFFICULTY: flatbuffers::VOffsetT = 24;
  pub const VT_DIFFICULTIES: flatbuffers::VOffsetT = 26;
  pub const VT_RECOMMENDED_ELEMENTS: flatbuffers::VOffsetT = 28;
  pub const VT_CLIENT: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 34;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 36;
  pub const VT_SCALE: flatbuffers::VOffsetT = 38;
  pub const VT_SHOW_TIP: flatbuffers::VOffsetT = 40;
  pub const VT_MONSTER_LEVEL: flatbuffers::VOffsetT = 42;
  pub const VT_RECOMMENDED_LEVEL: flatbuffers::VOffsetT = 44;
  pub const VT_AVERAGE_LEVEL_TIPS: flatbuffers::VOffsetT = 46;
  pub const VT_RECOMMENDED_HIT_TYPES: flatbuffers::VOffsetT = 48;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 50;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 52;
  pub const VT_UNK_9: flatbuffers::VOffsetT = 54;
  pub const VT_UNK_10: flatbuffers::VOffsetT = 56;
  pub const VT_UNK_11: flatbuffers::VOffsetT = 58;
  pub const VT_UNK_12: flatbuffers::VOffsetT = 60;
  pub const VT_UNK_13: flatbuffers::VOffsetT = 62;
  pub const VT_SLOT_1_AVATAR: flatbuffers::VOffsetT = 64;
  pub const VT_SLOT_2_AVATAR: flatbuffers::VOffsetT = 66;
  pub const VT_SLOT_3_AVATAR: flatbuffers::VOffsetT = 68;
  pub const VT_UNK_14: flatbuffers::VOffsetT = 70;
  pub const VT_UNK_15: flatbuffers::VOffsetT = 72;
  pub const VT_UNK_16: flatbuffers::VOffsetT = 74;
  pub const VT_UNK_17: flatbuffers::VOffsetT = 76;
  pub const VT_PREVIEW_RES_GROUP_ID: flatbuffers::VOffsetT = 78;
  pub const VT_CHESSBOARD_RES_GROUP_ID: flatbuffers::VOffsetT = 80;
  pub const VT_BGM_CHAPTER_STATE: flatbuffers::VOffsetT = 82;
  pub const VT_UNK_18: flatbuffers::VOffsetT = 84;
  pub const VT_UNK_19: flatbuffers::VOffsetT = 86;
  pub const VT_UNK_20: flatbuffers::VOffsetT = 88;
  pub const VT_UNK_21: flatbuffers::VOffsetT = 90;
  pub const VT_UNK_22: flatbuffers::VOffsetT = 92;
  pub const VT_UNK_23: flatbuffers::VOffsetT = 94;
  pub const VT_UNK_24: flatbuffers::VOffsetT = 96;
  pub const VT_UNK_25: flatbuffers::VOffsetT = 98;
  pub const VT_UNK_26: flatbuffers::VOffsetT = 100;
  pub const VT_TITLE: flatbuffers::VOffsetT = 102;
  pub const VT_DIFFICULTY: flatbuffers::VOffsetT = 104;
  pub const VT_TARGET: flatbuffers::VOffsetT = 106;
  pub const VT_UNK_27: flatbuffers::VOffsetT = 108;
  pub const VT_UNK_28: flatbuffers::VOffsetT = 110;
  pub const VT_UNK_29: flatbuffers::VOffsetT = 112;
  pub const VT_UNK_30: flatbuffers::VOffsetT = 114;
  pub const VT_UNK_31: flatbuffers::VOffsetT = 116;
  pub const VT_UNK_32: flatbuffers::VOffsetT = 118;
  pub const VT_UNK_33: flatbuffers::VOffsetT = 120;
  pub const VT_HOLLOW_ITEM_BAN_LISTS: flatbuffers::VOffsetT = 122;
  pub const VT_UNK_34: flatbuffers::VOffsetT = 124;
  pub const VT_ENEMY_TYPES: flatbuffers::VOffsetT = 126;
  pub const VT_BACKGROUND: flatbuffers::VOffsetT = 128;
  pub const VT_UNK_35: flatbuffers::VOffsetT = 130;
  pub const VT_UNK_36: flatbuffers::VOffsetT = 132;
  pub const VT_UNK_37: flatbuffers::VOffsetT = 134;
  pub const VT_UNK_38: flatbuffers::VOffsetT = 136;
  pub const VT_UNK_39: flatbuffers::VOffsetT = 138;
  pub const VT_UNK_40: flatbuffers::VOffsetT = 140;
  pub const VT_UNK_41: flatbuffers::VOffsetT = 142;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowQuestTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowQuestTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowQuestTemplate<'bldr>> {
    let mut builder = HollowQuestTemplateBuilder::new(_fbb);
    builder.add_unk_41(args.unk_41);
    builder.add_unk_40(args.unk_40);
    builder.add_unk_39(args.unk_39);
    builder.add_unk_38(args.unk_38);
    if let Some(x) = args.unk_37 { builder.add_unk_37(x); }
    if let Some(x) = args.unk_36 { builder.add_unk_36(x); }
    builder.add_unk_35(args.unk_35);
    if let Some(x) = args.background { builder.add_background(x); }
    if let Some(x) = args.enemy_types { builder.add_enemy_types(x); }
    if let Some(x) = args.hollow_item_ban_lists { builder.add_hollow_item_ban_lists(x); }
    builder.add_unk_33(args.unk_33);
    builder.add_unk_31(args.unk_31);
    builder.add_unk_29(args.unk_29);
    builder.add_unk_28(args.unk_28);
    if let Some(x) = args.unk_27 { builder.add_unk_27(x); }
    if let Some(x) = args.target { builder.add_target(x); }
    if let Some(x) = args.difficulty { builder.add_difficulty(x); }
    if let Some(x) = args.title { builder.add_title(x); }
    builder.add_unk_26(args.unk_26);
    builder.add_unk_24(args.unk_24);
    builder.add_unk_23(args.unk_23);
    builder.add_unk_22(args.unk_22);
    if let Some(x) = args.unk_21 { builder.add_unk_21(x); }
    builder.add_unk_20(args.unk_20);
    if let Some(x) = args.unk_19 { builder.add_unk_19(x); }
    builder.add_unk_18(args.unk_18);
    if let Some(x) = args.bgm_chapter_state { builder.add_bgm_chapter_state(x); }
    builder.add_chessboard_res_group_id(args.chessboard_res_group_id);
    builder.add_preview_res_group_id(args.preview_res_group_id);
    builder.add_unk_17(args.unk_17);
    builder.add_unk_14(args.unk_14);
    builder.add_slot_3_avatar(args.slot_3_avatar);
    builder.add_slot_2_avatar(args.slot_2_avatar);
    builder.add_slot_1_avatar(args.slot_1_avatar);
    builder.add_unk_13(args.unk_13);
    builder.add_unk_11(args.unk_11);
    if let Some(x) = args.unk_10 { builder.add_unk_10(x); }
    if let Some(x) = args.unk_7 { builder.add_unk_7(x); }
    if let Some(x) = args.recommended_hit_types { builder.add_recommended_hit_types(x); }
    builder.add_average_level_tips(args.average_level_tips);
    builder.add_recommended_level(args.recommended_level);
    builder.add_monster_level(args.monster_level);
    builder.add_show_tip(args.show_tip);
    builder.add_scale(args.scale);
    builder.add_unk_6(args.unk_6);
    builder.add_unk_4(args.unk_4);
    if let Some(x) = args.client { builder.add_client(x); }
    if let Some(x) = args.recommended_elements { builder.add_recommended_elements(x); }
    if let Some(x) = args.difficulties { builder.add_difficulties(x); }
    if let Some(x) = args.main_difficulty { builder.add_main_difficulty(x); }
    if let Some(x) = args.environments { builder.add_environments(x); }
    if let Some(x) = args.has_stamina { builder.add_has_stamina(x); }
    if let Some(x) = args.duration { builder.add_duration(x); }
    builder.add_unk_3(args.unk_3);
    builder.add_hollow_quest_type(args.hollow_quest_type);
    builder.add_group_id(args.group_id);
    builder.add_unk_2(args.unk_2);
    builder.add_chessboard_id(args.chessboard_id);
    builder.add_unk_1(args.unk_1);
    builder.add_id(args.id);
    builder.add_unk_34(args.unk_34);
    builder.add_unk_32(args.unk_32);
    builder.add_unk_30(args.unk_30);
    builder.add_unk_25(args.unk_25);
    builder.add_unk_16(args.unk_16);
    builder.add_unk_15(args.unk_15);
    builder.add_unk_12(args.unk_12);
    builder.add_unk_9(args.unk_9);
    builder.add_unk_8(args.unk_8);
    builder.add_unk_5(args.unk_5);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn chessboard_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_CHESSBOARD_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_2, Some(0)).unwrap()}
  }
  #[inline]
  pub fn group_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_GROUP_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn hollow_quest_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_HOLLOW_QUEST_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn duration(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_DURATION, None)}
  }
  #[inline]
  pub fn has_stamina(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_HAS_STAMINA, None)}
  }
  #[inline]
  pub fn environments(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowQuestTemplate::VT_ENVIRONMENTS, None)}
  }
  #[inline]
  pub fn main_difficulty(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_MAIN_DIFFICULTY, None)}
  }
  #[inline]
  pub fn difficulties(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowQuestTemplate::VT_DIFFICULTIES, None)}
  }
  #[inline]
  pub fn recommended_elements(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowQuestTemplate::VT_RECOMMENDED_ELEMENTS, None)}
  }
  #[inline]
  pub fn client(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_CLIENT, None)}
  }
  #[inline]
  pub fn unk_4(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_4, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_5(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_5, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_6(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_6, Some(0)).unwrap()}
  }
  #[inline]
  pub fn scale(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_SCALE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn show_tip(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_SHOW_TIP, Some(0)).unwrap()}
  }
  #[inline]
  pub fn monster_level(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_MONSTER_LEVEL, Some(0)).unwrap()}
  }
  #[inline]
  pub fn recommended_level(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_RECOMMENDED_LEVEL, Some(0)).unwrap()}
  }
  #[inline]
  pub fn average_level_tips(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_AVERAGE_LEVEL_TIPS, Some(0)).unwrap()}
  }
  #[inline]
  pub fn recommended_hit_types(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_RECOMMENDED_HIT_TYPES, None)}
  }
  #[inline]
  pub fn unk_7(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_UNK_7, None)}
  }
  #[inline]
  pub fn unk_8(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_8, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_9(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_9, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_10(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_UNK_10, None)}
  }
  #[inline]
  pub fn unk_11(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_11, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_12(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_12, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_13(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_13, Some(0)).unwrap()}
  }
  #[inline]
  pub fn slot_1_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_SLOT_1_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn slot_2_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_SLOT_2_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn slot_3_avatar(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_SLOT_3_AVATAR, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_14(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_14, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_15(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_15, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_16(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_16, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_17(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_17, Some(0)).unwrap()}
  }
  #[inline]
  pub fn preview_res_group_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_PREVIEW_RES_GROUP_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn chessboard_res_group_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_CHESSBOARD_RES_GROUP_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn bgm_chapter_state(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_BGM_CHAPTER_STATE, None)}
  }
  #[inline]
  pub fn unk_18(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_18, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_19(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_UNK_19, None)}
  }
  #[inline]
  pub fn unk_20(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_20, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_21(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_UNK_21, None)}
  }
  #[inline]
  pub fn unk_22(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_22, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_23(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_23, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_24(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_24, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_25(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_25, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_26(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_26, Some(0)).unwrap()}
  }
  #[inline]
  pub fn title(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_TITLE, None)}
  }
  #[inline]
  pub fn difficulty(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_DIFFICULTY, None)}
  }
  #[inline]
  pub fn target(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_TARGET, None)}
  }
  #[inline]
  pub fn unk_27(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowQuestTemplate::VT_UNK_27, None)}
  }
  #[inline]
  pub fn unk_28(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_28, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_29(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_29, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_30(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_30, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_31(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_31, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_32(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_32, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_33(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_33, Some(0)).unwrap()}
  }
  #[inline]
  pub fn hollow_item_ban_lists(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_HOLLOW_ITEM_BAN_LISTS, None)}
  }
  #[inline]
  pub fn unk_34(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(HollowQuestTemplate::VT_UNK_34, Some(false)).unwrap()}
  }
  #[inline]
  pub fn enemy_types(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(HollowQuestTemplate::VT_ENEMY_TYPES, None)}
  }
  #[inline]
  pub fn background(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(HollowQuestTemplate::VT_BACKGROUND, None)}
  }
  #[inline]
  pub fn unk_35(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_35, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_36(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_UNK_36, None)}
  }
  #[inline]
  pub fn unk_37(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(HollowQuestTemplate::VT_UNK_37, None)}
  }
  #[inline]
  pub fn unk_38(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_38, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_39(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_39, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_40(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_40, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_41(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(HollowQuestTemplate::VT_UNK_41, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for HollowQuestTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("chessboard_id", Self::VT_CHESSBOARD_ID, false)?
     .visit_field::<i32>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("group_id", Self::VT_GROUP_ID, false)?
     .visit_field::<i32>("hollow_quest_type", Self::VT_HOLLOW_QUEST_TYPE, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("duration", Self::VT_DURATION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("has_stamina", Self::VT_HAS_STAMINA, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("environments", Self::VT_ENVIRONMENTS, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("main_difficulty", Self::VT_MAIN_DIFFICULTY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("difficulties", Self::VT_DIFFICULTIES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("recommended_elements", Self::VT_RECOMMENDED_ELEMENTS, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("client", Self::VT_CLIENT, false)?
     .visit_field::<i32>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<bool>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<i32>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<i32>("scale", Self::VT_SCALE, false)?
     .visit_field::<i32>("show_tip", Self::VT_SHOW_TIP, false)?
     .visit_field::<i32>("monster_level", Self::VT_MONSTER_LEVEL, false)?
     .visit_field::<i32>("recommended_level", Self::VT_RECOMMENDED_LEVEL, false)?
     .visit_field::<i32>("average_level_tips", Self::VT_AVERAGE_LEVEL_TIPS, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("recommended_hit_types", Self::VT_RECOMMENDED_HIT_TYPES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_7", Self::VT_UNK_7, false)?
     .visit_field::<bool>("unk_8", Self::VT_UNK_8, false)?
     .visit_field::<bool>("unk_9", Self::VT_UNK_9, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_10", Self::VT_UNK_10, false)?
     .visit_field::<i32>("unk_11", Self::VT_UNK_11, false)?
     .visit_field::<bool>("unk_12", Self::VT_UNK_12, false)?
     .visit_field::<i32>("unk_13", Self::VT_UNK_13, false)?
     .visit_field::<i32>("slot_1_avatar", Self::VT_SLOT_1_AVATAR, false)?
     .visit_field::<i32>("slot_2_avatar", Self::VT_SLOT_2_AVATAR, false)?
     .visit_field::<i32>("slot_3_avatar", Self::VT_SLOT_3_AVATAR, false)?
     .visit_field::<i32>("unk_14", Self::VT_UNK_14, false)?
     .visit_field::<bool>("unk_15", Self::VT_UNK_15, false)?
     .visit_field::<bool>("unk_16", Self::VT_UNK_16, false)?
     .visit_field::<i32>("unk_17", Self::VT_UNK_17, false)?
     .visit_field::<i32>("preview_res_group_id", Self::VT_PREVIEW_RES_GROUP_ID, false)?
     .visit_field::<i32>("chessboard_res_group_id", Self::VT_CHESSBOARD_RES_GROUP_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("bgm_chapter_state", Self::VT_BGM_CHAPTER_STATE, false)?
     .visit_field::<i32>("unk_18", Self::VT_UNK_18, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_19", Self::VT_UNK_19, false)?
     .visit_field::<i32>("unk_20", Self::VT_UNK_20, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_21", Self::VT_UNK_21, false)?
     .visit_field::<i32>("unk_22", Self::VT_UNK_22, false)?
     .visit_field::<i32>("unk_23", Self::VT_UNK_23, false)?
     .visit_field::<i32>("unk_24", Self::VT_UNK_24, false)?
     .visit_field::<bool>("unk_25", Self::VT_UNK_25, false)?
     .visit_field::<i32>("unk_26", Self::VT_UNK_26, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("title", Self::VT_TITLE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("difficulty", Self::VT_DIFFICULTY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("target", Self::VT_TARGET, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("unk_27", Self::VT_UNK_27, false)?
     .visit_field::<i32>("unk_28", Self::VT_UNK_28, false)?
     .visit_field::<i32>("unk_29", Self::VT_UNK_29, false)?
     .visit_field::<bool>("unk_30", Self::VT_UNK_30, false)?
     .visit_field::<i32>("unk_31", Self::VT_UNK_31, false)?
     .visit_field::<bool>("unk_32", Self::VT_UNK_32, false)?
     .visit_field::<i32>("unk_33", Self::VT_UNK_33, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("hollow_item_ban_lists", Self::VT_HOLLOW_ITEM_BAN_LISTS, false)?
     .visit_field::<bool>("unk_34", Self::VT_UNK_34, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("enemy_types", Self::VT_ENEMY_TYPES, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("background", Self::VT_BACKGROUND, false)?
     .visit_field::<i32>("unk_35", Self::VT_UNK_35, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_36", Self::VT_UNK_36, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_37", Self::VT_UNK_37, false)?
     .visit_field::<i32>("unk_38", Self::VT_UNK_38, false)?
     .visit_field::<i32>("unk_39", Self::VT_UNK_39, false)?
     .visit_field::<i32>("unk_40", Self::VT_UNK_40, false)?
     .visit_field::<i32>("unk_41", Self::VT_UNK_41, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowQuestTemplateArgs<'a> {
    pub id: i32,
    pub unk_1: i32,
    pub chessboard_id: i32,
    pub unk_2: i32,
    pub group_id: i32,
    pub hollow_quest_type: i32,
    pub unk_3: i32,
    pub duration: Option<flatbuffers::WIPOffset<&'a str>>,
    pub has_stamina: Option<flatbuffers::WIPOffset<&'a str>>,
    pub environments: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub main_difficulty: Option<flatbuffers::WIPOffset<&'a str>>,
    pub difficulties: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub recommended_elements: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub client: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_4: i32,
    pub unk_5: bool,
    pub unk_6: i32,
    pub scale: i32,
    pub show_tip: i32,
    pub monster_level: i32,
    pub recommended_level: i32,
    pub average_level_tips: i32,
    pub recommended_hit_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_7: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_8: bool,
    pub unk_9: bool,
    pub unk_10: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_11: i32,
    pub unk_12: bool,
    pub unk_13: i32,
    pub slot_1_avatar: i32,
    pub slot_2_avatar: i32,
    pub slot_3_avatar: i32,
    pub unk_14: i32,
    pub unk_15: bool,
    pub unk_16: bool,
    pub unk_17: i32,
    pub preview_res_group_id: i32,
    pub chessboard_res_group_id: i32,
    pub bgm_chapter_state: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_18: i32,
    pub unk_19: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_20: i32,
    pub unk_21: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_22: i32,
    pub unk_23: i32,
    pub unk_24: i32,
    pub unk_25: bool,
    pub unk_26: i32,
    pub title: Option<flatbuffers::WIPOffset<&'a str>>,
    pub difficulty: Option<flatbuffers::WIPOffset<&'a str>>,
    pub target: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_27: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub unk_28: i32,
    pub unk_29: i32,
    pub unk_30: bool,
    pub unk_31: i32,
    pub unk_32: bool,
    pub unk_33: i32,
    pub hollow_item_ban_lists: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_34: bool,
    pub enemy_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub background: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_35: i32,
    pub unk_36: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_37: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_38: i32,
    pub unk_39: i32,
    pub unk_40: i32,
    pub unk_41: i32,
}
impl<'a> Default for HollowQuestTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowQuestTemplateArgs {
      id: 0,
      unk_1: 0,
      chessboard_id: 0,
      unk_2: 0,
      group_id: 0,
      hollow_quest_type: 0,
      unk_3: 0,
      duration: None,
      has_stamina: None,
      environments: None,
      main_difficulty: None,
      difficulties: None,
      recommended_elements: None,
      client: None,
      unk_4: 0,
      unk_5: false,
      unk_6: 0,
      scale: 0,
      show_tip: 0,
      monster_level: 0,
      recommended_level: 0,
      average_level_tips: 0,
      recommended_hit_types: None,
      unk_7: None,
      unk_8: false,
      unk_9: false,
      unk_10: None,
      unk_11: 0,
      unk_12: false,
      unk_13: 0,
      slot_1_avatar: 0,
      slot_2_avatar: 0,
      slot_3_avatar: 0,
      unk_14: 0,
      unk_15: false,
      unk_16: false,
      unk_17: 0,
      preview_res_group_id: 0,
      chessboard_res_group_id: 0,
      bgm_chapter_state: None,
      unk_18: 0,
      unk_19: None,
      unk_20: 0,
      unk_21: None,
      unk_22: 0,
      unk_23: 0,
      unk_24: 0,
      unk_25: false,
      unk_26: 0,
      title: None,
      difficulty: None,
      target: None,
      unk_27: None,
      unk_28: 0,
      unk_29: 0,
      unk_30: false,
      unk_31: 0,
      unk_32: false,
      unk_33: 0,
      hollow_item_ban_lists: None,
      unk_34: false,
      enemy_types: None,
      background: None,
      unk_35: 0,
      unk_36: None,
      unk_37: None,
      unk_38: 0,
      unk_39: 0,
      unk_40: 0,
      unk_41: 0,
    }
  }
}

pub struct HollowQuestTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowQuestTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_chessboard_id(&mut self, chessboard_id: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_CHESSBOARD_ID, chessboard_id, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_2, unk_2, 0);
  }
  #[inline]
  pub fn add_group_id(&mut self, group_id: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_GROUP_ID, group_id, 0);
  }
  #[inline]
  pub fn add_hollow_quest_type(&mut self, hollow_quest_type: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_HOLLOW_QUEST_TYPE, hollow_quest_type, 0);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_duration(&mut self, duration: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_DURATION, duration);
  }
  #[inline]
  pub fn add_has_stamina(&mut self, has_stamina: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_HAS_STAMINA, has_stamina);
  }
  #[inline]
  pub fn add_environments(&mut self, environments: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_ENVIRONMENTS, environments);
  }
  #[inline]
  pub fn add_main_difficulty(&mut self, main_difficulty: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_MAIN_DIFFICULTY, main_difficulty);
  }
  #[inline]
  pub fn add_difficulties(&mut self, difficulties: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_DIFFICULTIES, difficulties);
  }
  #[inline]
  pub fn add_recommended_elements(&mut self, recommended_elements: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_RECOMMENDED_ELEMENTS, recommended_elements);
  }
  #[inline]
  pub fn add_client(&mut self, client: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_CLIENT, client);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_4, unk_4, 0);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_5, unk_5, false);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_6, unk_6, 0);
  }
  #[inline]
  pub fn add_scale(&mut self, scale: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_SCALE, scale, 0);
  }
  #[inline]
  pub fn add_show_tip(&mut self, show_tip: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_SHOW_TIP, show_tip, 0);
  }
  #[inline]
  pub fn add_monster_level(&mut self, monster_level: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_MONSTER_LEVEL, monster_level, 0);
  }
  #[inline]
  pub fn add_recommended_level(&mut self, recommended_level: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_RECOMMENDED_LEVEL, recommended_level, 0);
  }
  #[inline]
  pub fn add_average_level_tips(&mut self, average_level_tips: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_AVERAGE_LEVEL_TIPS, average_level_tips, 0);
  }
  #[inline]
  pub fn add_recommended_hit_types(&mut self, recommended_hit_types: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_RECOMMENDED_HIT_TYPES, recommended_hit_types);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_7, unk_7);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_8, unk_8, false);
  }
  #[inline]
  pub fn add_unk_9(&mut self, unk_9: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_9, unk_9, false);
  }
  #[inline]
  pub fn add_unk_10(&mut self, unk_10: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_10, unk_10);
  }
  #[inline]
  pub fn add_unk_11(&mut self, unk_11: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_11, unk_11, 0);
  }
  #[inline]
  pub fn add_unk_12(&mut self, unk_12: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_12, unk_12, false);
  }
  #[inline]
  pub fn add_unk_13(&mut self, unk_13: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_13, unk_13, 0);
  }
  #[inline]
  pub fn add_slot_1_avatar(&mut self, slot_1_avatar: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_SLOT_1_AVATAR, slot_1_avatar, 0);
  }
  #[inline]
  pub fn add_slot_2_avatar(&mut self, slot_2_avatar: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_SLOT_2_AVATAR, slot_2_avatar, 0);
  }
  #[inline]
  pub fn add_slot_3_avatar(&mut self, slot_3_avatar: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_SLOT_3_AVATAR, slot_3_avatar, 0);
  }
  #[inline]
  pub fn add_unk_14(&mut self, unk_14: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_14, unk_14, 0);
  }
  #[inline]
  pub fn add_unk_15(&mut self, unk_15: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_15, unk_15, false);
  }
  #[inline]
  pub fn add_unk_16(&mut self, unk_16: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_16, unk_16, false);
  }
  #[inline]
  pub fn add_unk_17(&mut self, unk_17: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_17, unk_17, 0);
  }
  #[inline]
  pub fn add_preview_res_group_id(&mut self, preview_res_group_id: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_PREVIEW_RES_GROUP_ID, preview_res_group_id, 0);
  }
  #[inline]
  pub fn add_chessboard_res_group_id(&mut self, chessboard_res_group_id: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_CHESSBOARD_RES_GROUP_ID, chessboard_res_group_id, 0);
  }
  #[inline]
  pub fn add_bgm_chapter_state(&mut self, bgm_chapter_state: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_BGM_CHAPTER_STATE, bgm_chapter_state);
  }
  #[inline]
  pub fn add_unk_18(&mut self, unk_18: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_18, unk_18, 0);
  }
  #[inline]
  pub fn add_unk_19(&mut self, unk_19: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_19, unk_19);
  }
  #[inline]
  pub fn add_unk_20(&mut self, unk_20: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_20, unk_20, 0);
  }
  #[inline]
  pub fn add_unk_21(&mut self, unk_21: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_21, unk_21);
  }
  #[inline]
  pub fn add_unk_22(&mut self, unk_22: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_22, unk_22, 0);
  }
  #[inline]
  pub fn add_unk_23(&mut self, unk_23: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_23, unk_23, 0);
  }
  #[inline]
  pub fn add_unk_24(&mut self, unk_24: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_24, unk_24, 0);
  }
  #[inline]
  pub fn add_unk_25(&mut self, unk_25: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_25, unk_25, false);
  }
  #[inline]
  pub fn add_unk_26(&mut self, unk_26: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_26, unk_26, 0);
  }
  #[inline]
  pub fn add_title(&mut self, title: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_TITLE, title);
  }
  #[inline]
  pub fn add_difficulty(&mut self, difficulty: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_DIFFICULTY, difficulty);
  }
  #[inline]
  pub fn add_target(&mut self, target: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_TARGET, target);
  }
  #[inline]
  pub fn add_unk_27(&mut self, unk_27: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_27, unk_27);
  }
  #[inline]
  pub fn add_unk_28(&mut self, unk_28: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_28, unk_28, 0);
  }
  #[inline]
  pub fn add_unk_29(&mut self, unk_29: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_29, unk_29, 0);
  }
  #[inline]
  pub fn add_unk_30(&mut self, unk_30: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_30, unk_30, false);
  }
  #[inline]
  pub fn add_unk_31(&mut self, unk_31: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_31, unk_31, 0);
  }
  #[inline]
  pub fn add_unk_32(&mut self, unk_32: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_32, unk_32, false);
  }
  #[inline]
  pub fn add_unk_33(&mut self, unk_33: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_33, unk_33, 0);
  }
  #[inline]
  pub fn add_hollow_item_ban_lists(&mut self, hollow_item_ban_lists: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_HOLLOW_ITEM_BAN_LISTS, hollow_item_ban_lists);
  }
  #[inline]
  pub fn add_unk_34(&mut self, unk_34: bool) {
    self.fbb_.push_slot::<bool>(HollowQuestTemplate::VT_UNK_34, unk_34, false);
  }
  #[inline]
  pub fn add_enemy_types(&mut self, enemy_types: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_ENEMY_TYPES, enemy_types);
  }
  #[inline]
  pub fn add_background(&mut self, background: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_BACKGROUND, background);
  }
  #[inline]
  pub fn add_unk_35(&mut self, unk_35: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_35, unk_35, 0);
  }
  #[inline]
  pub fn add_unk_36(&mut self, unk_36: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_36, unk_36);
  }
  #[inline]
  pub fn add_unk_37(&mut self, unk_37: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplate::VT_UNK_37, unk_37);
  }
  #[inline]
  pub fn add_unk_38(&mut self, unk_38: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_38, unk_38, 0);
  }
  #[inline]
  pub fn add_unk_39(&mut self, unk_39: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_39, unk_39, 0);
  }
  #[inline]
  pub fn add_unk_40(&mut self, unk_40: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_40, unk_40, 0);
  }
  #[inline]
  pub fn add_unk_41(&mut self, unk_41: i32) {
    self.fbb_.push_slot::<i32>(HollowQuestTemplate::VT_UNK_41, unk_41, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowQuestTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowQuestTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowQuestTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowQuestTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowQuestTemplate");
      ds.field("id", &self.id());
      ds.field("unk_1", &self.unk_1());
      ds.field("chessboard_id", &self.chessboard_id());
      ds.field("unk_2", &self.unk_2());
      ds.field("group_id", &self.group_id());
      ds.field("hollow_quest_type", &self.hollow_quest_type());
      ds.field("unk_3", &self.unk_3());
      ds.field("duration", &self.duration());
      ds.field("has_stamina", &self.has_stamina());
      ds.field("environments", &self.environments());
      ds.field("main_difficulty", &self.main_difficulty());
      ds.field("difficulties", &self.difficulties());
      ds.field("recommended_elements", &self.recommended_elements());
      ds.field("client", &self.client());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("scale", &self.scale());
      ds.field("show_tip", &self.show_tip());
      ds.field("monster_level", &self.monster_level());
      ds.field("recommended_level", &self.recommended_level());
      ds.field("average_level_tips", &self.average_level_tips());
      ds.field("recommended_hit_types", &self.recommended_hit_types());
      ds.field("unk_7", &self.unk_7());
      ds.field("unk_8", &self.unk_8());
      ds.field("unk_9", &self.unk_9());
      ds.field("unk_10", &self.unk_10());
      ds.field("unk_11", &self.unk_11());
      ds.field("unk_12", &self.unk_12());
      ds.field("unk_13", &self.unk_13());
      ds.field("slot_1_avatar", &self.slot_1_avatar());
      ds.field("slot_2_avatar", &self.slot_2_avatar());
      ds.field("slot_3_avatar", &self.slot_3_avatar());
      ds.field("unk_14", &self.unk_14());
      ds.field("unk_15", &self.unk_15());
      ds.field("unk_16", &self.unk_16());
      ds.field("unk_17", &self.unk_17());
      ds.field("preview_res_group_id", &self.preview_res_group_id());
      ds.field("chessboard_res_group_id", &self.chessboard_res_group_id());
      ds.field("bgm_chapter_state", &self.bgm_chapter_state());
      ds.field("unk_18", &self.unk_18());
      ds.field("unk_19", &self.unk_19());
      ds.field("unk_20", &self.unk_20());
      ds.field("unk_21", &self.unk_21());
      ds.field("unk_22", &self.unk_22());
      ds.field("unk_23", &self.unk_23());
      ds.field("unk_24", &self.unk_24());
      ds.field("unk_25", &self.unk_25());
      ds.field("unk_26", &self.unk_26());
      ds.field("title", &self.title());
      ds.field("difficulty", &self.difficulty());
      ds.field("target", &self.target());
      ds.field("unk_27", &self.unk_27());
      ds.field("unk_28", &self.unk_28());
      ds.field("unk_29", &self.unk_29());
      ds.field("unk_30", &self.unk_30());
      ds.field("unk_31", &self.unk_31());
      ds.field("unk_32", &self.unk_32());
      ds.field("unk_33", &self.unk_33());
      ds.field("hollow_item_ban_lists", &self.hollow_item_ban_lists());
      ds.field("unk_34", &self.unk_34());
      ds.field("enemy_types", &self.enemy_types());
      ds.field("background", &self.background());
      ds.field("unk_35", &self.unk_35());
      ds.field("unk_36", &self.unk_36());
      ds.field("unk_37", &self.unk_37());
      ds.field("unk_38", &self.unk_38());
      ds.field("unk_39", &self.unk_39());
      ds.field("unk_40", &self.unk_40());
      ds.field("unk_41", &self.unk_41());
      ds.finish()
  }
}
pub enum BattleGroupConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct BattleGroupConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for BattleGroupConfigTemplate<'a> {
  type Inner = BattleGroupConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> BattleGroupConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_QUEST_ID: flatbuffers::VOffsetT = 6;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 8;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 10;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 12;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 14;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 16;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 18;
  pub const VT_BATTLE_EVENT_ID: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_9: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_10: flatbuffers::VOffsetT = 26;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    BattleGroupConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args BattleGroupConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<BattleGroupConfigTemplate<'bldr>> {
    let mut builder = BattleGroupConfigTemplateBuilder::new(_fbb);
    if let Some(x) = args.unk_10 { builder.add_unk_10(x); }
    builder.add_battle_event_id(args.battle_event_id);
    if let Some(x) = args.unk_6 { builder.add_unk_6(x); }
    if let Some(x) = args.unk_5 { builder.add_unk_5(x); }
    if let Some(x) = args.unk_4 { builder.add_unk_4(x); }
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    builder.add_unk_1(args.unk_1);
    builder.add_quest_id(args.quest_id);
    builder.add_id(args.id);
    builder.add_unk_9(args.unk_9);
    builder.add_unk_8(args.unk_8);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(BattleGroupConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn quest_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(BattleGroupConfigTemplate::VT_QUEST_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(BattleGroupConfigTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(BattleGroupConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(BattleGroupConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_4(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(BattleGroupConfigTemplate::VT_UNK_4, None)}
  }
  #[inline]
  pub fn unk_5(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(BattleGroupConfigTemplate::VT_UNK_5, None)}
  }
  #[inline]
  pub fn unk_6(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(BattleGroupConfigTemplate::VT_UNK_6, None)}
  }
  #[inline]
  pub fn battle_event_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(BattleGroupConfigTemplate::VT_BATTLE_EVENT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_8(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(BattleGroupConfigTemplate::VT_UNK_8, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_9(&self) -> bool {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<bool>(BattleGroupConfigTemplate::VT_UNK_9, Some(false)).unwrap()}
  }
  #[inline]
  pub fn unk_10(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>(BattleGroupConfigTemplate::VT_UNK_10, None)}
  }
}

impl flatbuffers::Verifiable for BattleGroupConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<i32>("quest_id", Self::VT_QUEST_ID, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<i32>("battle_event_id", Self::VT_BATTLE_EVENT_ID, false)?
     .visit_field::<bool>("unk_8", Self::VT_UNK_8, false)?
     .visit_field::<bool>("unk_9", Self::VT_UNK_9, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<&'_ str>>>>("unk_10", Self::VT_UNK_10, false)?
     .finish();
    Ok(())
  }
}
pub struct BattleGroupConfigTemplateArgs<'a> {
    pub id: i32,
    pub quest_id: i32,
    pub unk_1: i32,
    pub unk_2: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_3: i32,
    pub unk_4: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_5: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_6: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
    pub battle_event_id: i32,
    pub unk_8: bool,
    pub unk_9: bool,
    pub unk_10: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<&'a str>>>>,
}
impl<'a> Default for BattleGroupConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    BattleGroupConfigTemplateArgs {
      id: 0,
      quest_id: 0,
      unk_1: 0,
      unk_2: None,
      unk_3: 0,
      unk_4: None,
      unk_5: None,
      unk_6: None,
      battle_event_id: 0,
      unk_8: false,
      unk_9: false,
      unk_10: None,
    }
  }
}

pub struct BattleGroupConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> BattleGroupConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(BattleGroupConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_quest_id(&mut self, quest_id: i32) {
    self.fbb_.push_slot::<i32>(BattleGroupConfigTemplate::VT_QUEST_ID, quest_id, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(BattleGroupConfigTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(BattleGroupConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplate::VT_UNK_4, unk_4);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplate::VT_UNK_5, unk_5);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplate::VT_UNK_6, unk_6);
  }
  #[inline]
  pub fn add_battle_event_id(&mut self, battle_event_id: i32) {
    self.fbb_.push_slot::<i32>(BattleGroupConfigTemplate::VT_BATTLE_EVENT_ID, battle_event_id, 0);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: bool) {
    self.fbb_.push_slot::<bool>(BattleGroupConfigTemplate::VT_UNK_8, unk_8, false);
  }
  #[inline]
  pub fn add_unk_9(&mut self, unk_9: bool) {
    self.fbb_.push_slot::<bool>(BattleGroupConfigTemplate::VT_UNK_9, unk_9, false);
  }
  #[inline]
  pub fn add_unk_10(&mut self, unk_10: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<&'b  str>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplate::VT_UNK_10, unk_10);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> BattleGroupConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    BattleGroupConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<BattleGroupConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for BattleGroupConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("BattleGroupConfigTemplate");
      ds.field("id", &self.id());
      ds.field("quest_id", &self.quest_id());
      ds.field("unk_1", &self.unk_1());
      ds.field("unk_2", &self.unk_2());
      ds.field("unk_3", &self.unk_3());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("battle_event_id", &self.battle_event_id());
      ds.field("unk_8", &self.unk_8());
      ds.field("unk_9", &self.unk_9());
      ds.field("unk_10", &self.unk_10());
      ds.finish()
  }
}
pub enum MusicPlayerConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct MusicPlayerConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for MusicPlayerConfigTemplate<'a> {
  type Inner = MusicPlayerConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> MusicPlayerConfigTemplate<'a> {
  pub const VT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_GROUP_ID: flatbuffers::VOffsetT = 6;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 8;
  pub const VT_PLAY_TAG: flatbuffers::VOffsetT = 10;
  pub const VT_PAUSE_TAG: flatbuffers::VOffsetT = 12;
  pub const VT_RESUME_TAG: flatbuffers::VOffsetT = 14;
  pub const VT_STOP_ALL_TAG: flatbuffers::VOffsetT = 16;
  pub const VT_PLAY_VOLUME: flatbuffers::VOffsetT = 18;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 22;
  pub const VT_UNLOCK_CONDITION: flatbuffers::VOffsetT = 24;
  pub const VT_NAME: flatbuffers::VOffsetT = 26;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 28;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 34;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    MusicPlayerConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args MusicPlayerConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<MusicPlayerConfigTemplate<'bldr>> {
    let mut builder = MusicPlayerConfigTemplateBuilder::new(_fbb);
    builder.add_unk_6(args.unk_6);
    if let Some(x) = args.unk_7 { builder.add_unk_7(x); }
    if let Some(x) = args.unk_5 { builder.add_unk_5(x); }
    if let Some(x) = args.unk_4 { builder.add_unk_4(x); }
    if let Some(x) = args.name { builder.add_name(x); }
    if let Some(x) = args.unlock_condition { builder.add_unlock_condition(x); }
    builder.add_unk_3(args.unk_3);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    if let Some(x) = args.play_volume { builder.add_play_volume(x); }
    if let Some(x) = args.stop_all_tag { builder.add_stop_all_tag(x); }
    if let Some(x) = args.resume_tag { builder.add_resume_tag(x); }
    if let Some(x) = args.pause_tag { builder.add_pause_tag(x); }
    if let Some(x) = args.play_tag { builder.add_play_tag(x); }
    if let Some(x) = args.unk_1 { builder.add_unk_1(x); }
    builder.add_group_id(args.group_id);
    builder.add_id(args.id);
    builder.finish()
  }


  #[inline]
  pub fn id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(MusicPlayerConfigTemplate::VT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn group_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(MusicPlayerConfigTemplate::VT_GROUP_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNK_1, None)}
  }
  #[inline]
  pub fn play_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_PLAY_TAG, None)}
  }
  #[inline]
  pub fn pause_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_PAUSE_TAG, None)}
  }
  #[inline]
  pub fn resume_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_RESUME_TAG, None)}
  }
  #[inline]
  pub fn stop_all_tag(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_STOP_ALL_TAG, None)}
  }
  #[inline]
  pub fn play_volume(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_PLAY_VOLUME, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn unk_3(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(MusicPlayerConfigTemplate::VT_UNK_3, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unlock_condition(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNLOCK_CONDITION, None)}
  }
  #[inline]
  pub fn name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_NAME, None)}
  }
  #[inline]
  pub fn unk_4(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNK_4, None)}
  }
  #[inline]
  pub fn unk_5(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNK_5, None)}
  }
  #[inline]
  pub fn unk_6(&self) -> i64 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i64>(MusicPlayerConfigTemplate::VT_UNK_6, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_7(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(MusicPlayerConfigTemplate::VT_UNK_7, None)}
  }
}

impl flatbuffers::Verifiable for MusicPlayerConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("id", Self::VT_ID, false)?
     .visit_field::<i32>("group_id", Self::VT_GROUP_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("play_tag", Self::VT_PLAY_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("pause_tag", Self::VT_PAUSE_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("resume_tag", Self::VT_RESUME_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("stop_all_tag", Self::VT_STOP_ALL_TAG, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("play_volume", Self::VT_PLAY_VOLUME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlock_condition", Self::VT_UNLOCK_CONDITION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<i64>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_7", Self::VT_UNK_7, false)?
     .finish();
    Ok(())
  }
}
pub struct MusicPlayerConfigTemplateArgs<'a> {
    pub id: i32,
    pub group_id: i32,
    pub unk_1: Option<flatbuffers::WIPOffset<&'a str>>,
    pub play_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub pause_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub resume_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub stop_all_tag: Option<flatbuffers::WIPOffset<&'a str>>,
    pub play_volume: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_3: i32,
    pub unlock_condition: Option<flatbuffers::WIPOffset<&'a str>>,
    pub name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_4: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_5: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_6: i64,
    pub unk_7: Option<flatbuffers::WIPOffset<&'a str>>,
}
impl<'a> Default for MusicPlayerConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    MusicPlayerConfigTemplateArgs {
      id: 0,
      group_id: 0,
      unk_1: None,
      play_tag: None,
      pause_tag: None,
      resume_tag: None,
      stop_all_tag: None,
      play_volume: None,
      unk_2: None,
      unk_3: 0,
      unlock_condition: None,
      name: None,
      unk_4: None,
      unk_5: None,
      unk_6: 0,
      unk_7: None,
    }
  }
}

pub struct MusicPlayerConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> MusicPlayerConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_id(&mut self, id: i32) {
    self.fbb_.push_slot::<i32>(MusicPlayerConfigTemplate::VT_ID, id, 0);
  }
  #[inline]
  pub fn add_group_id(&mut self, group_id: i32) {
    self.fbb_.push_slot::<i32>(MusicPlayerConfigTemplate::VT_GROUP_ID, group_id, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNK_1, unk_1);
  }
  #[inline]
  pub fn add_play_tag(&mut self, play_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_PLAY_TAG, play_tag);
  }
  #[inline]
  pub fn add_pause_tag(&mut self, pause_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_PAUSE_TAG, pause_tag);
  }
  #[inline]
  pub fn add_resume_tag(&mut self, resume_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_RESUME_TAG, resume_tag);
  }
  #[inline]
  pub fn add_stop_all_tag(&mut self, stop_all_tag: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_STOP_ALL_TAG, stop_all_tag);
  }
  #[inline]
  pub fn add_play_volume(&mut self, play_volume: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_PLAY_VOLUME, play_volume);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: i32) {
    self.fbb_.push_slot::<i32>(MusicPlayerConfigTemplate::VT_UNK_3, unk_3, 0);
  }
  #[inline]
  pub fn add_unlock_condition(&mut self, unlock_condition: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNLOCK_CONDITION, unlock_condition);
  }
  #[inline]
  pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_NAME, name);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNK_4, unk_4);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNK_5, unk_5);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: i64) {
    self.fbb_.push_slot::<i64>(MusicPlayerConfigTemplate::VT_UNK_6, unk_6, 0);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplate::VT_UNK_7, unk_7);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> MusicPlayerConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    MusicPlayerConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<MusicPlayerConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for MusicPlayerConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("MusicPlayerConfigTemplate");
      ds.field("id", &self.id());
      ds.field("group_id", &self.group_id());
      ds.field("unk_1", &self.unk_1());
      ds.field("play_tag", &self.play_tag());
      ds.field("pause_tag", &self.pause_tag());
      ds.field("resume_tag", &self.resume_tag());
      ds.field("stop_all_tag", &self.stop_all_tag());
      ds.field("play_volume", &self.play_volume());
      ds.field("unk_2", &self.unk_2());
      ds.field("unk_3", &self.unk_3());
      ds.field("unlock_condition", &self.unlock_condition());
      ds.field("name", &self.name());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("unk_7", &self.unk_7());
      ds.finish()
  }
}
pub enum TeleportConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct TeleportConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for TeleportConfigTemplate<'a> {
  type Inner = TeleportConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> TeleportConfigTemplate<'a> {
  pub const VT_TELEPORT_ID: flatbuffers::VOffsetT = 4;
  pub const VT_UNK_1: flatbuffers::VOffsetT = 6;
  pub const VT_CLIENT_VISIBLE: flatbuffers::VOffsetT = 8;
  pub const VT_UNLOCK_CONDITION: flatbuffers::VOffsetT = 10;
  pub const VT_TELEPORT_NAME: flatbuffers::VOffsetT = 12;
  pub const VT_TELEPORT_ICON: flatbuffers::VOffsetT = 14;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 16;
  pub const VT_SECTION_ID: flatbuffers::VOffsetT = 18;
  pub const VT_TRANSFORM_ID: flatbuffers::VOffsetT = 20;
  pub const VT_UNK_3: flatbuffers::VOffsetT = 22;
  pub const VT_UNK_4: flatbuffers::VOffsetT = 24;
  pub const VT_UNK_5: flatbuffers::VOffsetT = 26;
  pub const VT_UNK_6: flatbuffers::VOffsetT = 28;
  pub const VT_UNK_7: flatbuffers::VOffsetT = 30;
  pub const VT_UNK_8: flatbuffers::VOffsetT = 32;
  pub const VT_UNK_9: flatbuffers::VOffsetT = 34;
  pub const VT_UNK_10: flatbuffers::VOffsetT = 36;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    TeleportConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args TeleportConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<TeleportConfigTemplate<'bldr>> {
    let mut builder = TeleportConfigTemplateBuilder::new(_fbb);
    builder.add_unk_10(args.unk_10);
    if let Some(x) = args.unk_9 { builder.add_unk_9(x); }
    builder.add_unk_8(args.unk_8);
    builder.add_unk_7(args.unk_7);
    if let Some(x) = args.unk_6 { builder.add_unk_6(x); }
    if let Some(x) = args.unk_5 { builder.add_unk_5(x); }
    if let Some(x) = args.unk_4 { builder.add_unk_4(x); }
    if let Some(x) = args.unk_3 { builder.add_unk_3(x); }
    builder.add_transform_id(args.transform_id);
    builder.add_section_id(args.section_id);
    builder.add_unk_2(args.unk_2);
    if let Some(x) = args.teleport_icon { builder.add_teleport_icon(x); }
    if let Some(x) = args.teleport_name { builder.add_teleport_name(x); }
    if let Some(x) = args.unlock_condition { builder.add_unlock_condition(x); }
    builder.add_client_visible(args.client_visible);
    builder.add_unk_1(args.unk_1);
    builder.add_teleport_id(args.teleport_id);
    builder.finish()
  }


  #[inline]
  pub fn teleport_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_TELEPORT_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_1(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_UNK_1, Some(0)).unwrap()}
  }
  #[inline]
  pub fn client_visible(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_CLIENT_VISIBLE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unlock_condition(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(TeleportConfigTemplate::VT_UNLOCK_CONDITION, None)}
  }
  #[inline]
  pub fn teleport_name(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(TeleportConfigTemplate::VT_TELEPORT_NAME, None)}
  }
  #[inline]
  pub fn teleport_icon(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(TeleportConfigTemplate::VT_TELEPORT_ICON, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_UNK_2, Some(0)).unwrap()}
  }
  #[inline]
  pub fn section_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_SECTION_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn transform_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_TRANSFORM_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_3(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(TeleportConfigTemplate::VT_UNK_3, None)}
  }
  #[inline]
  pub fn unk_4(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(TeleportConfigTemplate::VT_UNK_4, None)}
  }
  #[inline]
  pub fn unk_5(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(TeleportConfigTemplate::VT_UNK_5, None)}
  }
  #[inline]
  pub fn unk_6(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(TeleportConfigTemplate::VT_UNK_6, None)}
  }
  #[inline]
  pub fn unk_7(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_UNK_7, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_8(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_UNK_8, Some(0)).unwrap()}
  }
  #[inline]
  pub fn unk_9(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(TeleportConfigTemplate::VT_UNK_9, None)}
  }
  #[inline]
  pub fn unk_10(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(TeleportConfigTemplate::VT_UNK_10, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for TeleportConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("teleport_id", Self::VT_TELEPORT_ID, false)?
     .visit_field::<i32>("unk_1", Self::VT_UNK_1, false)?
     .visit_field::<i32>("client_visible", Self::VT_CLIENT_VISIBLE, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unlock_condition", Self::VT_UNLOCK_CONDITION, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("teleport_name", Self::VT_TELEPORT_NAME, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("teleport_icon", Self::VT_TELEPORT_ICON, false)?
     .visit_field::<i32>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("section_id", Self::VT_SECTION_ID, false)?
     .visit_field::<i32>("transform_id", Self::VT_TRANSFORM_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("unk_3", Self::VT_UNK_3, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_4", Self::VT_UNK_4, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_5", Self::VT_UNK_5, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_6", Self::VT_UNK_6, false)?
     .visit_field::<i32>("unk_7", Self::VT_UNK_7, false)?
     .visit_field::<i32>("unk_8", Self::VT_UNK_8, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_9", Self::VT_UNK_9, false)?
     .visit_field::<i32>("unk_10", Self::VT_UNK_10, false)?
     .finish();
    Ok(())
  }
}
pub struct TeleportConfigTemplateArgs<'a> {
    pub teleport_id: i32,
    pub unk_1: i32,
    pub client_visible: i32,
    pub unlock_condition: Option<flatbuffers::WIPOffset<&'a str>>,
    pub teleport_name: Option<flatbuffers::WIPOffset<&'a str>>,
    pub teleport_icon: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: i32,
    pub section_id: i32,
    pub transform_id: i32,
    pub unk_3: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_4: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_5: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_6: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_7: i32,
    pub unk_8: i32,
    pub unk_9: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub unk_10: i32,
}
impl<'a> Default for TeleportConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    TeleportConfigTemplateArgs {
      teleport_id: 0,
      unk_1: 0,
      client_visible: 0,
      unlock_condition: None,
      teleport_name: None,
      teleport_icon: None,
      unk_2: 0,
      section_id: 0,
      transform_id: 0,
      unk_3: None,
      unk_4: None,
      unk_5: None,
      unk_6: None,
      unk_7: 0,
      unk_8: 0,
      unk_9: None,
      unk_10: 0,
    }
  }
}

pub struct TeleportConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> TeleportConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_teleport_id(&mut self, teleport_id: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_TELEPORT_ID, teleport_id, 0);
  }
  #[inline]
  pub fn add_unk_1(&mut self, unk_1: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_UNK_1, unk_1, 0);
  }
  #[inline]
  pub fn add_client_visible(&mut self, client_visible: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_CLIENT_VISIBLE, client_visible, 0);
  }
  #[inline]
  pub fn add_unlock_condition(&mut self, unlock_condition: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNLOCK_CONDITION, unlock_condition);
  }
  #[inline]
  pub fn add_teleport_name(&mut self, teleport_name: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_TELEPORT_NAME, teleport_name);
  }
  #[inline]
  pub fn add_teleport_icon(&mut self, teleport_icon: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_TELEPORT_ICON, teleport_icon);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_UNK_2, unk_2, 0);
  }
  #[inline]
  pub fn add_section_id(&mut self, section_id: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_SECTION_ID, section_id, 0);
  }
  #[inline]
  pub fn add_transform_id(&mut self, transform_id: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_TRANSFORM_ID, transform_id, 0);
  }
  #[inline]
  pub fn add_unk_3(&mut self, unk_3: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNK_3, unk_3);
  }
  #[inline]
  pub fn add_unk_4(&mut self, unk_4: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNK_4, unk_4);
  }
  #[inline]
  pub fn add_unk_5(&mut self, unk_5: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNK_5, unk_5);
  }
  #[inline]
  pub fn add_unk_6(&mut self, unk_6: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNK_6, unk_6);
  }
  #[inline]
  pub fn add_unk_7(&mut self, unk_7: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_UNK_7, unk_7, 0);
  }
  #[inline]
  pub fn add_unk_8(&mut self, unk_8: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_UNK_8, unk_8, 0);
  }
  #[inline]
  pub fn add_unk_9(&mut self, unk_9: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplate::VT_UNK_9, unk_9);
  }
  #[inline]
  pub fn add_unk_10(&mut self, unk_10: i32) {
    self.fbb_.push_slot::<i32>(TeleportConfigTemplate::VT_UNK_10, unk_10, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> TeleportConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    TeleportConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<TeleportConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for TeleportConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("TeleportConfigTemplate");
      ds.field("teleport_id", &self.teleport_id());
      ds.field("unk_1", &self.unk_1());
      ds.field("client_visible", &self.client_visible());
      ds.field("unlock_condition", &self.unlock_condition());
      ds.field("teleport_name", &self.teleport_name());
      ds.field("teleport_icon", &self.teleport_icon());
      ds.field("unk_2", &self.unk_2());
      ds.field("section_id", &self.section_id());
      ds.field("transform_id", &self.transform_id());
      ds.field("unk_3", &self.unk_3());
      ds.field("unk_4", &self.unk_4());
      ds.field("unk_5", &self.unk_5());
      ds.field("unk_6", &self.unk_6());
      ds.field("unk_7", &self.unk_7());
      ds.field("unk_8", &self.unk_8());
      ds.field("unk_9", &self.unk_9());
      ds.field("unk_10", &self.unk_10());
      ds.finish()
  }
}
pub enum ConditionConfigTemplateOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ConditionConfigTemplate<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ConditionConfigTemplate<'a> {
  type Inner = ConditionConfigTemplate<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ConditionConfigTemplate<'a> {
  pub const VT_CONDITION_ID: flatbuffers::VOffsetT = 4;
  pub const VT_ARGS: flatbuffers::VOffsetT = 6;
  pub const VT_COMMENTARY: flatbuffers::VOffsetT = 8;
  pub const VT_UNK_2: flatbuffers::VOffsetT = 10;
  pub const VT_STATIS_TYPE: flatbuffers::VOffsetT = 12;
  pub const VT_TARGET_NUM: flatbuffers::VOffsetT = 14;
  pub const VT_TYPE_: flatbuffers::VOffsetT = 16;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ConditionConfigTemplate { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ConditionConfigTemplateArgs<'args>
  ) -> flatbuffers::WIPOffset<ConditionConfigTemplate<'bldr>> {
    let mut builder = ConditionConfigTemplateBuilder::new(_fbb);
    builder.add_type_(args.type_);
    builder.add_target_num(args.target_num);
    builder.add_statis_type(args.statis_type);
    if let Some(x) = args.unk_2 { builder.add_unk_2(x); }
    if let Some(x) = args.commentary { builder.add_commentary(x); }
    if let Some(x) = args.args { builder.add_args(x); }
    builder.add_condition_id(args.condition_id);
    builder.finish()
  }


  #[inline]
  pub fn condition_id(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ConditionConfigTemplate::VT_CONDITION_ID, Some(0)).unwrap()}
  }
  #[inline]
  pub fn args(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ConditionConfigTemplate::VT_ARGS, None)}
  }
  #[inline]
  pub fn commentary(&self) -> Option<&'a str> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(ConditionConfigTemplate::VT_COMMENTARY, None)}
  }
  #[inline]
  pub fn unk_2(&self) -> Option<flatbuffers::Vector<'a, i32>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, i32>>>(ConditionConfigTemplate::VT_UNK_2, None)}
  }
  #[inline]
  pub fn statis_type(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ConditionConfigTemplate::VT_STATIS_TYPE, Some(0)).unwrap()}
  }
  #[inline]
  pub fn target_num(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ConditionConfigTemplate::VT_TARGET_NUM, Some(0)).unwrap()}
  }
  #[inline]
  pub fn type_(&self) -> i32 {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<i32>(ConditionConfigTemplate::VT_TYPE_, Some(0)).unwrap()}
  }
}

impl flatbuffers::Verifiable for ConditionConfigTemplate<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<i32>("condition_id", Self::VT_CONDITION_ID, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("args", Self::VT_ARGS, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<&str>>("commentary", Self::VT_COMMENTARY, false)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, i32>>>("unk_2", Self::VT_UNK_2, false)?
     .visit_field::<i32>("statis_type", Self::VT_STATIS_TYPE, false)?
     .visit_field::<i32>("target_num", Self::VT_TARGET_NUM, false)?
     .visit_field::<i32>("type_", Self::VT_TYPE_, false)?
     .finish();
    Ok(())
  }
}
pub struct ConditionConfigTemplateArgs<'a> {
    pub condition_id: i32,
    pub args: Option<flatbuffers::WIPOffset<&'a str>>,
    pub commentary: Option<flatbuffers::WIPOffset<&'a str>>,
    pub unk_2: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, i32>>>,
    pub statis_type: i32,
    pub target_num: i32,
    pub type_: i32,
}
impl<'a> Default for ConditionConfigTemplateArgs<'a> {
  #[inline]
  fn default() -> Self {
    ConditionConfigTemplateArgs {
      condition_id: 0,
      args: None,
      commentary: None,
      unk_2: None,
      statis_type: 0,
      target_num: 0,
      type_: 0,
    }
  }
}

pub struct ConditionConfigTemplateBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ConditionConfigTemplateBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_condition_id(&mut self, condition_id: i32) {
    self.fbb_.push_slot::<i32>(ConditionConfigTemplate::VT_CONDITION_ID, condition_id, 0);
  }
  #[inline]
  pub fn add_args(&mut self, args: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ConditionConfigTemplate::VT_ARGS, args);
  }
  #[inline]
  pub fn add_commentary(&mut self, commentary: flatbuffers::WIPOffset<&'b  str>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ConditionConfigTemplate::VT_COMMENTARY, commentary);
  }
  #[inline]
  pub fn add_unk_2(&mut self, unk_2: flatbuffers::WIPOffset<flatbuffers::Vector<'b , i32>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ConditionConfigTemplate::VT_UNK_2, unk_2);
  }
  #[inline]
  pub fn add_statis_type(&mut self, statis_type: i32) {
    self.fbb_.push_slot::<i32>(ConditionConfigTemplate::VT_STATIS_TYPE, statis_type, 0);
  }
  #[inline]
  pub fn add_target_num(&mut self, target_num: i32) {
    self.fbb_.push_slot::<i32>(ConditionConfigTemplate::VT_TARGET_NUM, target_num, 0);
  }
  #[inline]
  pub fn add_type_(&mut self, type_: i32) {
    self.fbb_.push_slot::<i32>(ConditionConfigTemplate::VT_TYPE_, type_, 0);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ConditionConfigTemplateBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ConditionConfigTemplateBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ConditionConfigTemplate<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ConditionConfigTemplate<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ConditionConfigTemplate");
      ds.field("condition_id", &self.condition_id());
      ds.field("args", &self.args());
      ds.field("commentary", &self.commentary());
      ds.field("unk_2", &self.unk_2());
      ds.field("statis_type", &self.statis_type());
      ds.field("target_num", &self.target_num());
      ds.field("type_", &self.type_());
      ds.finish()
  }
}
pub enum AvatarBaseTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct AvatarBaseTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for AvatarBaseTemplateTb<'a> {
  type Inner = AvatarBaseTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> AvatarBaseTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    AvatarBaseTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args AvatarBaseTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<AvatarBaseTemplateTb<'bldr>> {
    let mut builder = AvatarBaseTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<AvatarBaseTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<AvatarBaseTemplate>>>>(AvatarBaseTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for AvatarBaseTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<AvatarBaseTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct AvatarBaseTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<AvatarBaseTemplate<'a>>>>>,
}
impl<'a> Default for AvatarBaseTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    AvatarBaseTemplateTbArgs {
      data: None,
    }
  }
}

pub struct AvatarBaseTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> AvatarBaseTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<AvatarBaseTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(AvatarBaseTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> AvatarBaseTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    AvatarBaseTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<AvatarBaseTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for AvatarBaseTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("AvatarBaseTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum WeaponTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct WeaponTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for WeaponTemplateTb<'a> {
  type Inner = WeaponTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> WeaponTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    WeaponTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args WeaponTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<WeaponTemplateTb<'bldr>> {
    let mut builder = WeaponTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<WeaponTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<WeaponTemplate>>>>(WeaponTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for WeaponTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<WeaponTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct WeaponTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<WeaponTemplate<'a>>>>>,
}
impl<'a> Default for WeaponTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    WeaponTemplateTbArgs {
      data: None,
    }
  }
}

pub struct WeaponTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> WeaponTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<WeaponTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(WeaponTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    WeaponTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<WeaponTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for WeaponTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("WeaponTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum UnlockConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct UnlockConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for UnlockConfigTemplateTb<'a> {
  type Inner = UnlockConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> UnlockConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    UnlockConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args UnlockConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<UnlockConfigTemplateTb<'bldr>> {
    let mut builder = UnlockConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<UnlockConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<UnlockConfigTemplate>>>>(UnlockConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for UnlockConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<UnlockConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct UnlockConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<UnlockConfigTemplate<'a>>>>>,
}
impl<'a> Default for UnlockConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    UnlockConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct UnlockConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> UnlockConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<UnlockConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(UnlockConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> UnlockConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    UnlockConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<UnlockConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for UnlockConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("UnlockConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum PostGirlConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct PostGirlConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for PostGirlConfigTemplateTb<'a> {
  type Inner = PostGirlConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> PostGirlConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    PostGirlConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args PostGirlConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<PostGirlConfigTemplateTb<'bldr>> {
    let mut builder = PostGirlConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<PostGirlConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<PostGirlConfigTemplate>>>>(PostGirlConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for PostGirlConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<PostGirlConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct PostGirlConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<PostGirlConfigTemplate<'a>>>>>,
}
impl<'a> Default for PostGirlConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    PostGirlConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct PostGirlConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> PostGirlConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<PostGirlConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PostGirlConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> PostGirlConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    PostGirlConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<PostGirlConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for PostGirlConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("PostGirlConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum ArchiveFileQuestTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ArchiveFileQuestTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ArchiveFileQuestTemplateTb<'a> {
  type Inner = ArchiveFileQuestTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ArchiveFileQuestTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ArchiveFileQuestTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ArchiveFileQuestTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<ArchiveFileQuestTemplateTb<'bldr>> {
    let mut builder = ArchiveFileQuestTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveFileQuestTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveFileQuestTemplate>>>>(ArchiveFileQuestTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for ArchiveFileQuestTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<ArchiveFileQuestTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct ArchiveFileQuestTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveFileQuestTemplate<'a>>>>>,
}
impl<'a> Default for ArchiveFileQuestTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    ArchiveFileQuestTemplateTbArgs {
      data: None,
    }
  }
}

pub struct ArchiveFileQuestTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ArchiveFileQuestTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<ArchiveFileQuestTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveFileQuestTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ArchiveFileQuestTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ArchiveFileQuestTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ArchiveFileQuestTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ArchiveFileQuestTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ArchiveFileQuestTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum ArchiveBattleQuestTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ArchiveBattleQuestTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ArchiveBattleQuestTemplateTb<'a> {
  type Inner = ArchiveBattleQuestTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ArchiveBattleQuestTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ArchiveBattleQuestTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ArchiveBattleQuestTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<ArchiveBattleQuestTemplateTb<'bldr>> {
    let mut builder = ArchiveBattleQuestTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveBattleQuestTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveBattleQuestTemplate>>>>(ArchiveBattleQuestTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for ArchiveBattleQuestTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<ArchiveBattleQuestTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct ArchiveBattleQuestTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ArchiveBattleQuestTemplate<'a>>>>>,
}
impl<'a> Default for ArchiveBattleQuestTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    ArchiveBattleQuestTemplateTbArgs {
      data: None,
    }
  }
}

pub struct ArchiveBattleQuestTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ArchiveBattleQuestTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<ArchiveBattleQuestTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ArchiveBattleQuestTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ArchiveBattleQuestTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ArchiveBattleQuestTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ArchiveBattleQuestTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ArchiveBattleQuestTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ArchiveBattleQuestTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum SectionConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct SectionConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for SectionConfigTemplateTb<'a> {
  type Inner = SectionConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> SectionConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    SectionConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args SectionConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<SectionConfigTemplateTb<'bldr>> {
    let mut builder = SectionConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<SectionConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<SectionConfigTemplate>>>>(SectionConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for SectionConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<SectionConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct SectionConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<SectionConfigTemplate<'a>>>>>,
}
impl<'a> Default for SectionConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    SectionConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct SectionConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> SectionConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<SectionConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(SectionConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> SectionConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    SectionConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<SectionConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for SectionConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("SectionConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum MainCityBGMConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct MainCityBGMConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for MainCityBGMConfigTemplateTb<'a> {
  type Inner = MainCityBGMConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> MainCityBGMConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    MainCityBGMConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args MainCityBGMConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<MainCityBGMConfigTemplateTb<'bldr>> {
    let mut builder = MainCityBGMConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MainCityBGMConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MainCityBGMConfigTemplate>>>>(MainCityBGMConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for MainCityBGMConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<MainCityBGMConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct MainCityBGMConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MainCityBGMConfigTemplate<'a>>>>>,
}
impl<'a> Default for MainCityBGMConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    MainCityBGMConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct MainCityBGMConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> MainCityBGMConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<MainCityBGMConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MainCityBGMConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> MainCityBGMConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    MainCityBGMConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<MainCityBGMConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for MainCityBGMConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("MainCityBGMConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum HollowBuffTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowBuffTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowBuffTemplateTb<'a> {
  type Inner = HollowBuffTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowBuffTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowBuffTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowBuffTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowBuffTemplateTb<'bldr>> {
    let mut builder = HollowBuffTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowBuffTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowBuffTemplate>>>>(HollowBuffTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for HollowBuffTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<HollowBuffTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowBuffTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowBuffTemplate<'a>>>>>,
}
impl<'a> Default for HollowBuffTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowBuffTemplateTbArgs {
      data: None,
    }
  }
}

pub struct HollowBuffTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowBuffTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<HollowBuffTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowBuffTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowBuffTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowBuffTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowBuffTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowBuffTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowBuffTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum CafeConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct CafeConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for CafeConfigTemplateTb<'a> {
  type Inner = CafeConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> CafeConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    CafeConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args CafeConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<CafeConfigTemplateTb<'bldr>> {
    let mut builder = CafeConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CafeConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CafeConfigTemplate>>>>(CafeConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for CafeConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<CafeConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct CafeConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CafeConfigTemplate<'a>>>>>,
}
impl<'a> Default for CafeConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    CafeConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct CafeConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> CafeConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<CafeConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CafeConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> CafeConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    CafeConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<CafeConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for CafeConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("CafeConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum EquipmentTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct EquipmentTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for EquipmentTemplateTb<'a> {
  type Inner = EquipmentTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> EquipmentTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    EquipmentTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args EquipmentTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<EquipmentTemplateTb<'bldr>> {
    let mut builder = EquipmentTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentTemplate>>>>(EquipmentTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for EquipmentTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<EquipmentTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct EquipmentTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentTemplate<'a>>>>>,
}
impl<'a> Default for EquipmentTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    EquipmentTemplateTbArgs {
      data: None,
    }
  }
}

pub struct EquipmentTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> EquipmentTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<EquipmentTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> EquipmentTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    EquipmentTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<EquipmentTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for EquipmentTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("EquipmentTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum EquipmentSuitTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct EquipmentSuitTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for EquipmentSuitTemplateTb<'a> {
  type Inner = EquipmentSuitTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> EquipmentSuitTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    EquipmentSuitTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args EquipmentSuitTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<EquipmentSuitTemplateTb<'bldr>> {
    let mut builder = EquipmentSuitTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentSuitTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentSuitTemplate>>>>(EquipmentSuitTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for EquipmentSuitTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<EquipmentSuitTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct EquipmentSuitTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<EquipmentSuitTemplate<'a>>>>>,
}
impl<'a> Default for EquipmentSuitTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    EquipmentSuitTemplateTbArgs {
      data: None,
    }
  }
}

pub struct EquipmentSuitTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> EquipmentSuitTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<EquipmentSuitTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(EquipmentSuitTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> EquipmentSuitTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    EquipmentSuitTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<EquipmentSuitTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for EquipmentSuitTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("EquipmentSuitTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum HollowConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowConfigTemplateTb<'a> {
  type Inner = HollowConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowConfigTemplateTb<'bldr>> {
    let mut builder = HollowConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowConfigTemplate>>>>(HollowConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for HollowConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<HollowConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowConfigTemplate<'a>>>>>,
}
impl<'a> Default for HollowConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct HollowConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<HollowConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum HollowQuestTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct HollowQuestTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for HollowQuestTemplateTb<'a> {
  type Inner = HollowQuestTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> HollowQuestTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    HollowQuestTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args HollowQuestTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<HollowQuestTemplateTb<'bldr>> {
    let mut builder = HollowQuestTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowQuestTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowQuestTemplate>>>>(HollowQuestTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for HollowQuestTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<HollowQuestTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct HollowQuestTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<HollowQuestTemplate<'a>>>>>,
}
impl<'a> Default for HollowQuestTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    HollowQuestTemplateTbArgs {
      data: None,
    }
  }
}

pub struct HollowQuestTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> HollowQuestTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<HollowQuestTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(HollowQuestTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> HollowQuestTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    HollowQuestTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<HollowQuestTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for HollowQuestTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("HollowQuestTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum BattleGroupConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct BattleGroupConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for BattleGroupConfigTemplateTb<'a> {
  type Inner = BattleGroupConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> BattleGroupConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    BattleGroupConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args BattleGroupConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<BattleGroupConfigTemplateTb<'bldr>> {
    let mut builder = BattleGroupConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<BattleGroupConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<BattleGroupConfigTemplate>>>>(BattleGroupConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for BattleGroupConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<BattleGroupConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct BattleGroupConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<BattleGroupConfigTemplate<'a>>>>>,
}
impl<'a> Default for BattleGroupConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    BattleGroupConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct BattleGroupConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> BattleGroupConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<BattleGroupConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(BattleGroupConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> BattleGroupConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    BattleGroupConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<BattleGroupConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for BattleGroupConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("BattleGroupConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum MusicPlayerConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct MusicPlayerConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for MusicPlayerConfigTemplateTb<'a> {
  type Inner = MusicPlayerConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> MusicPlayerConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    MusicPlayerConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args MusicPlayerConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<MusicPlayerConfigTemplateTb<'bldr>> {
    let mut builder = MusicPlayerConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MusicPlayerConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MusicPlayerConfigTemplate>>>>(MusicPlayerConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for MusicPlayerConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<MusicPlayerConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct MusicPlayerConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<MusicPlayerConfigTemplate<'a>>>>>,
}
impl<'a> Default for MusicPlayerConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    MusicPlayerConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct MusicPlayerConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> MusicPlayerConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<MusicPlayerConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(MusicPlayerConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> MusicPlayerConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    MusicPlayerConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<MusicPlayerConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for MusicPlayerConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("MusicPlayerConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum TeleportConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct TeleportConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for TeleportConfigTemplateTb<'a> {
  type Inner = TeleportConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> TeleportConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    TeleportConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args TeleportConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<TeleportConfigTemplateTb<'bldr>> {
    let mut builder = TeleportConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<TeleportConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<TeleportConfigTemplate>>>>(TeleportConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for TeleportConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<TeleportConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct TeleportConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<TeleportConfigTemplate<'a>>>>>,
}
impl<'a> Default for TeleportConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    TeleportConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct TeleportConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> TeleportConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<TeleportConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(TeleportConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> TeleportConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    TeleportConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<TeleportConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for TeleportConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("TeleportConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
pub enum ConditionConfigTemplateTbOffset {}
#[derive(Copy, Clone, PartialEq)]

pub struct ConditionConfigTemplateTb<'a> {
  pub _tab: flatbuffers::Table<'a>,
}

impl<'a> flatbuffers::Follow<'a> for ConditionConfigTemplateTb<'a> {
  type Inner = ConditionConfigTemplateTb<'a>;
  #[inline]
  unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
    Self { _tab: flatbuffers::Table::new(buf, loc) }
  }
}

impl<'a> ConditionConfigTemplateTb<'a> {
  pub const VT_DATA: flatbuffers::VOffsetT = 4;

  #[inline]
  pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
    ConditionConfigTemplateTb { _tab: table }
  }
  #[allow(unused_mut)]
  pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
    _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
    args: &'args ConditionConfigTemplateTbArgs<'args>
  ) -> flatbuffers::WIPOffset<ConditionConfigTemplateTb<'bldr>> {
    let mut builder = ConditionConfigTemplateTbBuilder::new(_fbb);
    if let Some(x) = args.data { builder.add_data(x); }
    builder.finish()
  }


  #[inline]
  pub fn data(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ConditionConfigTemplate<'a>>>> {
    // Safety:
    // Created from valid Table for this object
    // which contains a valid value in this slot
    unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ConditionConfigTemplate>>>>(ConditionConfigTemplateTb::VT_DATA, None)}
  }
}

impl flatbuffers::Verifiable for ConditionConfigTemplateTb<'_> {
  #[inline]
  fn run_verifier(
    v: &mut flatbuffers::Verifier, pos: usize
  ) -> Result<(), flatbuffers::InvalidFlatbuffer> {
    use self::flatbuffers::Verifiable;
    v.visit_table(pos)?
     .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<ConditionConfigTemplate>>>>("data", Self::VT_DATA, false)?
     .finish();
    Ok(())
  }
}
pub struct ConditionConfigTemplateTbArgs<'a> {
    pub data: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<ConditionConfigTemplate<'a>>>>>,
}
impl<'a> Default for ConditionConfigTemplateTbArgs<'a> {
  #[inline]
  fn default() -> Self {
    ConditionConfigTemplateTbArgs {
      data: None,
    }
  }
}

pub struct ConditionConfigTemplateTbBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> {
  fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
  start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> ConditionConfigTemplateTbBuilder<'a, 'b, A> {
  #[inline]
  pub fn add_data(&mut self, data: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<ConditionConfigTemplate<'b >>>>) {
    self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(ConditionConfigTemplateTb::VT_DATA, data);
  }
  #[inline]
  pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> ConditionConfigTemplateTbBuilder<'a, 'b, A> {
    let start = _fbb.start_table();
    ConditionConfigTemplateTbBuilder {
      fbb_: _fbb,
      start_: start,
    }
  }
  #[inline]
  pub fn finish(self) -> flatbuffers::WIPOffset<ConditionConfigTemplateTb<'a>> {
    let o = self.fbb_.end_table(self.start_);
    flatbuffers::WIPOffset::new(o.value())
  }
}

impl core::fmt::Debug for ConditionConfigTemplateTb<'_> {
  fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
    let mut ds = f.debug_struct("ConditionConfigTemplateTb");
      ds.field("data", &self.data());
      ds.finish()
  }
}
