library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

static field core::int? _#nullableTopLevelField = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableTopLevelField = null;
static field core::int? _#nullableTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableTopLevelFieldWithInitializer = null;
static field core::int? _#nullableFinalTopLevelField = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableFinalTopLevelField = null;
static field core::int? _#nullableFinalTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer = null;
static get nullableTopLevelField() → core::int?
  return let final core::int? #t1 = self::_#nullableTopLevelField in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::fieldNI("nullableTopLevelField") : #t1{core::int?};
static set nullableTopLevelField(core::int? #t2) → void
  self::_#nullableTopLevelField = #t2;
static get nonNullableTopLevelField() → core::int
  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
static set nonNullableTopLevelField(core::int #t4) → void
  self::_#nonNullableTopLevelField = #t4;
static get nullableTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t5 = self::_#nullableTopLevelFieldWithInitializer in _in::isSentinel(#t5) ?{core::int?} self::_#nullableTopLevelFieldWithInitializer = null : #t5{core::int?};
static set nullableTopLevelFieldWithInitializer(core::int? #t6) → void
  self::_#nullableTopLevelFieldWithInitializer = #t6;
static get nonNullableTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
static set nonNullableTopLevelFieldWithInitializer(core::int #t8) → void
  self::_#nonNullableTopLevelFieldWithInitializer = #t8;
static get nullableFinalTopLevelField() → core::int?
  return let final core::int? #t9 = self::_#nullableFinalTopLevelField in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::fieldNI("nullableFinalTopLevelField") : #t9{core::int?};
static set nullableFinalTopLevelField(core::int? #t10) → void
  if(_in::isSentinel(self::_#nullableFinalTopLevelField))
    self::_#nullableFinalTopLevelField = #t10;
  else
    throw new _in::LateError::fieldAI("nullableFinalTopLevelField");
static get nonNullableFinalTopLevelField() → core::int
  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
static set nonNullableFinalTopLevelField(core::int #t12) → void
  if(self::_#nonNullableFinalTopLevelField.==(null))
    self::_#nonNullableFinalTopLevelField = #t12;
  else
    throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
static get nullableFinalTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t13 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t13;
static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15{core::int};
static method main() → dynamic {}
