// This file is autogenerated by build-prefixes.js. DO NOT EDIT!

use crate::targets::Browsers;

#[allow(dead_code)]
#[derive(Clone, Copy, PartialEq)]
pub enum Feature {
  AbsFunction,
  AccentSystemColor,
  AfarListStyleType,
  AmharicAbegedeListStyleType,
  AmharicListStyleType,
  AnchorSizeSize,
  AnimationTimelineShorthand,
  AnyLink,
  AnyPseudo,
  ArabicIndicListStyleType,
  ArmenianListStyleType,
  AsterisksListStyleType,
  AutoSize,
  Autofill,
  BengaliListStyleType,
  BinaryListStyleType,
  BorderImageRepeatRound,
  BorderImageRepeatSpace,
  CalcFunction,
  CambodianListStyleType,
  CapUnit,
  CaseInsensitive,
  ChUnit,
  Checkmark,
  CircleListStyleType,
  CjkDecimalListStyleType,
  CjkEarthlyBranchListStyleType,
  CjkHeavenlyStemListStyleType,
  ClampFunction,
  ColorFunction,
  ConicGradient,
  ContainerQueryLengthUnits,
  Cue,
  CueFunction,
  CustomMediaQueries,
  DecimalLeadingZeroListStyleType,
  DecimalListStyleType,
  DefaultPseudo,
  DetailsContent,
  DevanagariListStyleType,
  Dialog,
  DirSelector,
  DiscListStyleType,
  DisclosureClosedListStyleType,
  DisclosureOpenListStyleType,
  DoublePositionGradients,
  EmUnit,
  EthiopicAbegedeAmEtListStyleType,
  EthiopicAbegedeGezListStyleType,
  EthiopicAbegedeListStyleType,
  EthiopicAbegedeTiErListStyleType,
  EthiopicAbegedeTiEtListStyleType,
  EthiopicHalehameAaErListStyleType,
  EthiopicHalehameAaEtListStyleType,
  EthiopicHalehameAmEtListStyleType,
  EthiopicHalehameGezListStyleType,
  EthiopicHalehameOmEtListStyleType,
  EthiopicHalehameSidEtListStyleType,
  EthiopicHalehameSoEtListStyleType,
  EthiopicHalehameTigListStyleType,
  EthiopicListStyleType,
  EthiopicNumericListStyleType,
  ExUnit,
  ExtendedSystemFonts,
  FirstLetter,
  FirstLine,
  FitContentFunctionSize,
  FitContentSize,
  FocusVisible,
  FocusWithin,
  FontFamilySystemUi,
  FontSizeRem,
  FontSizeXXXLarge,
  FontStretchPercentage,
  FontStyleObliqueAngle,
  FontWeightNumber,
  FootnotesListStyleType,
  FormValidation,
  Fullscreen,
  Gencontent,
  GeorgianListStyleType,
  GradientInterpolationHints,
  GujaratiListStyleType,
  GurmukhiListStyleType,
  HasSelector,
  HebrewListStyleType,
  HexAlphaColors,
  HiraganaIrohaListStyleType,
  HiraganaListStyleType,
  HypotFunction,
  IcUnit,
  ImageSet,
  InOutOfRange,
  IndeterminatePseudo,
  IsAnimatableSize,
  IsSelector,
  JapaneseFormalListStyleType,
  JapaneseInformalListStyleType,
  KannadaListStyleType,
  KatakanaIrohaListStyleType,
  KatakanaListStyleType,
  KhmerListStyleType,
  KoreanHangulFormalListStyleType,
  KoreanHanjaFormalListStyleType,
  KoreanHanjaInformalListStyleType,
  LabColors,
  LangSelectorList,
  LaoListStyleType,
  LhUnit,
  LightDark,
  LinearGradient,
  LogicalBorderRadius,
  LogicalBorderShorthand,
  LogicalBorders,
  LogicalInset,
  LogicalMargin,
  LogicalMarginShorthand,
  LogicalPadding,
  LogicalPaddingShorthand,
  LogicalSize,
  LogicalTextAlign,
  LowerAlphaListStyleType,
  LowerArmenianListStyleType,
  LowerGreekListStyleType,
  LowerHexadecimalListStyleType,
  LowerLatinListStyleType,
  LowerNorwegianListStyleType,
  LowerRomanListStyleType,
  MalayalamListStyleType,
  MarkerPseudo,
  MaxContentSize,
  MaxFunction,
  MediaIntervalSyntax,
  MediaRangeSyntax,
  MinContentSize,
  MinFunction,
  ModFunction,
  MongolianListStyleType,
  MozAvailableSize,
  MyanmarListStyleType,
  Namespaces,
  Nesting,
  NoneListStyleType,
  NotSelectorList,
  NthChildOf,
  OctalListStyleType,
  OklabColors,
  OptionalPseudo,
  OriyaListStyleType,
  OromoListStyleType,
  OverflowShorthand,
  P3Colors,
  PartPseudo,
  PersianListStyleType,
  Picker,
  PickerIcon,
  PlaceContent,
  PlaceItems,
  PlaceSelf,
  Placeholder,
  PlaceholderShown,
  QUnit,
  RadialGradient,
  RcapUnit,
  RchUnit,
  ReadOnlyWrite,
  RemFunction,
  RemUnit,
  RepeatingConicGradient,
  RepeatingLinearGradient,
  RepeatingRadialGradient,
  RexUnit,
  RicUnit,
  RlhUnit,
  RoundFunction,
  Selection,
  Selectors2,
  Selectors3,
  Shadowdomv1,
  SidamaListStyleType,
  SignFunction,
  SimpChineseFormalListStyleType,
  SimpChineseInformalListStyleType,
  SomaliListStyleType,
  SpaceSeparatedColorNotation,
  SquareListStyleType,
  StretchSize,
  StringListStyleType,
  SymbolsListStyleType,
  TamilListStyleType,
  TargetText,
  TeluguListStyleType,
  TextDecorationThicknessPercent,
  TextDecorationThicknessShorthand,
  ThaiListStyleType,
  TibetanListStyleType,
  TigreListStyleType,
  TigrinyaErAbegedeListStyleType,
  TigrinyaErListStyleType,
  TigrinyaEtAbegedeListStyleType,
  TigrinyaEtListStyleType,
  TradChineseFormalListStyleType,
  TradChineseInformalListStyleType,
  UpperAlphaListStyleType,
  UpperArmenianListStyleType,
  UpperHexadecimalListStyleType,
  UpperLatinListStyleType,
  UpperNorwegianListStyleType,
  UpperRomanListStyleType,
  VbUnit,
  VhUnit,
  ViUnit,
  ViewTransition,
  ViewportPercentageUnitsDynamic,
  ViewportPercentageUnitsLarge,
  ViewportPercentageUnitsSmall,
  VmaxUnit,
  VminUnit,
  VwUnit,
  WebkitFillAvailableSize,
  XResolutionUnit,
}

impl Feature {
  pub fn is_compatible(&self, browsers: Browsers) -> bool {
    match self {
      Feature::Selectors2 => {
        if let Some(version) = browsers.ie {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 131072 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 196864 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 197120 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131328 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::Selectors3 => {
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 197888 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 197120 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 591104 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 197120 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131328 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::Gencontent | Feature::FirstLine => {
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 131072 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 196864 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 197120 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131328 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::FirstLetter => {
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 197888 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 722432 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 196608 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::InOutOfRange => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3276800 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3473408 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2621440 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FormValidation => {
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263171 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::AnyLink => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3276800 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 4259840 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3407872 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 590336 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::DefaultPseudo => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3342336 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2490368 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::DirSelector => {
        if let Some(version) = browsers.edge {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3211264 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 6946816 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1638400 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FocusWithin => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3407872 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3932160 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3080192 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524800 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FocusVisible => {
        if let Some(version) = browsers.edge {
          if version < 5636096 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5570560 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 5636096 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4718592 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::IndeterminatePseudo => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3342336 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 2555904 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::IsSelector => {
        if let Some(version) = browsers.edge {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5111808 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 983040 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::OptionalPseudo => {
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131840 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::PlaceholderShown => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3342336 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3080192 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2228224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Dialog => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6422528 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 2424832 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1572864 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Fullscreen => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4194304 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 4653056 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655616 {
            return false;
          }
        }
        if browsers.android.is_some() || browsers.ie.is_some() || browsers.ios_saf.is_some() {
          return false;
        }
      }
      Feature::MarkerPseudo => {
        if let Some(version) = browsers.edge {
          if version < 5636096 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4456448 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 5636096 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4718592 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if browsers.ie.is_some() || browsers.ios_saf.is_some() || browsers.safari.is_some() {
          return false;
        }
      }
      Feature::Placeholder => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3342336 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2883584 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 459264 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Selection => {
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 196864 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 591104 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if browsers.ios_saf.is_some() {
          return false;
        }
      }
      Feature::CaseInsensitive => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3080192 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3211264 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2359296 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ReadOnlyWrite => {
        if let Some(version) = browsers.edge {
          if version < 851968 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5111808 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 2359296 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1507328 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Autofill => {
        if let Some(version) = browsers.chrome {
          if version < 7208960 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7208960 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5636096 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 6291456 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1376256 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Namespaces => {
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 131072 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262656 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131328 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
      }
      Feature::Shadowdomv1 => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3473408 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2621440 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 393728 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::HexAlphaColors => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3211264 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3407872 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524800 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Nesting => {
        if let Some(version) = browsers.edge {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7667712 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 6946816 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1638400 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::NotSelectorList => {
        if let Some(version) = browsers.edge {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5505024 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 983040 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::HasSelector => {
        if let Some(version) = browsers.edge {
          if version < 6881280 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7929856 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 6881280 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1310720 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FontFamilySystemUi => {
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6029312 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 3670016 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 393728 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ExtendedSystemFonts => {
        if let Some(version) = browsers.safari {
          if version < 852224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 852992 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.opera.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::CalcFunction => {
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 393472 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8847360 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::CustomMediaQueries | Feature::FitContentFunctionSize | Feature::StretchSize => return false,
      Feature::DoublePositionGradients => {
        if let Some(version) = browsers.chrome {
          if version < 4653056 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4194304 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3276800 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4653056 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ClampFunction => {
        if let Some(version) = browsers.chrome {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 852224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 852992 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5177344 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::PlaceSelf | Feature::PlaceItems => {
        if let Some(version) = browsers.chrome {
          if version < 3866624 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2949120 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 3866624 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::PlaceContent => {
        if let Some(version) = browsers.chrome {
          if version < 3866624 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2949120 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 3866624 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::OverflowShorthand => {
        if let Some(version) = browsers.chrome {
          if version < 4456448 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3997696 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3145728 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 852224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 852992 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4456448 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::MediaRangeSyntax => {
        if let Some(version) = browsers.chrome {
          if version < 6815744 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 6815744 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4653056 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1310720 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 6815744 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::MediaIntervalSyntax => {
        if let Some(version) = browsers.chrome {
          if version < 6815744 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 6815744 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6684672 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4653056 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1310720 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 6815744 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalBorders => {
        if let Some(version) = browsers.chrome {
          if version < 4521984 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2686976 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3145728 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4521984 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalBorderShorthand | Feature::LogicalMarginShorthand | Feature::LogicalPaddingShorthand => {
        if let Some(version) = browsers.chrome {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4325376 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 917760 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 918784 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5701632 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalBorderRadius => {
        if let Some(version) = browsers.chrome {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4325376 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5832704 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalMargin | Feature::LogicalPadding => {
        if let Some(version) = browsers.chrome {
          if version < 4521984 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2686976 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3145728 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5701632 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalInset => {
        if let Some(version) = browsers.chrome {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 917760 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 918784 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5701632 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalSize => {
        if let Some(version) = browsers.chrome {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2686976 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 3735552 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LogicalTextAlign => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 196864 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 131072 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 2424832 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LabColors => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7405568 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::OklabColors => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7405568 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ColorFunction => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7405568 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::SpaceSeparatedColorNotation => {
        if let Some(version) = browsers.chrome {
          if version < 4259840 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3407872 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3080192 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4259840 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::TextDecorationThicknessPercent => {
        if let Some(version) = browsers.chrome {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1115136 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1115136 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5701632 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::TextDecorationThicknessShorthand => {
        if let Some(version) = browsers.chrome {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5701632 {
            return false;
          }
        }
        if browsers.ie.is_some() || browsers.ios_saf.is_some() || browsers.safari.is_some() {
          return false;
        }
      }
      Feature::Cue => {
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3604480 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::CueFunction => {
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::AnyPseudo => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::PartPseudo => {
        if let Some(version) = browsers.chrome {
          if version < 4784128 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3407872 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 852224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 852992 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4784128 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ImageSet => {
        if let Some(version) = browsers.chrome {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 393216 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 393216 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::XResolutionUnit => {
        if let Some(version) = browsers.chrome {
          if version < 4456448 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3145728 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4456448 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::NthChildOf => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7405568 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::MinFunction | Feature::MaxFunction => {
        if let Some(version) = browsers.chrome {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 721152 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 721664 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5177344 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::RoundFunction | Feature::RemFunction | Feature::ModFunction => {
        if let Some(version) = browsers.chrome {
          if version < 8192000 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8192000 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5439488 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1769472 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8192000 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::AbsFunction | Feature::SignFunction => {
        if let Some(version) = browsers.firefox {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.ie.is_some()
          || browsers.opera.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::HypotFunction => {
        if let Some(version) = browsers.chrome {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5242880 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7864320 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::GradientInterpolationHints => {
        if let Some(version) = browsers.chrome {
          if version < 2621440 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2359296 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1769472 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 2621440 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::BorderImageRepeatRound => {
        if let Some(version) = browsers.chrome {
          if version < 1966080 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 590080 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 590592 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 131072 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::BorderImageRepeatSpace => {
        if let Some(version) = browsers.chrome {
          if version < 3670016 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3276800 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 590080 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 590592 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 393216 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 3670016 {
            return false;
          }
        }
      }
      Feature::FontSizeRem => {
        if let Some(version) = browsers.chrome {
          if version < 2752512 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2031616 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 1835008 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 2752512 {
            return false;
          }
        }
      }
      Feature::FontSizeXXXLarge => {
        if let Some(version) = browsers.chrome {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5177344 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FontStyleObliqueAngle => {
        if let Some(version) = browsers.chrome {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3997696 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3014656 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 721152 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 721664 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4063232 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FontWeightNumber => {
        if let Some(version) = browsers.chrome {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 1114112 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3997696 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3014656 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4063232 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::FontStretchPercentage => {
        if let Some(version) = browsers.chrome {
          if version < 4063232 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3997696 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3014656 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 721152 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 721664 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4063232 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LightDark => {
        if let Some(version) = browsers.chrome {
          if version < 8060928 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8060928 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5373952 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1115392 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1115392 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1769472 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8060928 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::AccentSystemColor => {
        if let Some(version) = browsers.firefox {
          if version < 6750208 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049856 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049856 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.ie.is_some()
          || browsers.opera.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::AnimationTimelineShorthand => {
        if let Some(version) = browsers.chrome {
          if version < 7536640 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7536640 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5046272 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1507328 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7536640 {
            return false;
          }
        }
        if browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.safari.is_some()
        {
          return false;
        }
      }
      Feature::ViewTransition => {
        if let Some(version) = browsers.chrome {
          if version < 7143424 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7143424 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4849664 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1376256 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7143424 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::DetailsContent => {
        if let Some(version) = browsers.chrome {
          if version < 8585216 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8585216 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5701632 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1180672 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1180672 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8585216 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() || browsers.samsung.is_some() {
          return false;
        }
      }
      Feature::TargetText => {
        if let Some(version) = browsers.chrome {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 8585216 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1180160 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1180160 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5832704 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::Picker => {
        if let Some(version) = browsers.chrome {
          if version < 8781824 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8781824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8781824 {
            return false;
          }
        }
        if browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.safari.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::PickerIcon | Feature::Checkmark => {
        if let Some(version) = browsers.chrome {
          if version < 8716288 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8716288 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5767168 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8716288 {
            return false;
          }
        }
        if browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.safari.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::QUnit => {
        if let Some(version) = browsers.chrome {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 3211264 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3014656 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 852224 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 852992 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4128768 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::CapUnit => {
        if let Some(version) = browsers.chrome {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6356992 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7733248 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ChUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1769472 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::ContainerQueryLengthUnits => {
        if let Some(version) = browsers.chrome {
          if version < 6881280 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 6881280 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7208960 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4718592 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1310720 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 6881280 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::EmUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 196608 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 65536 {
            return false;
          }
        }
      }
      Feature::ExUnit
      | Feature::CircleListStyleType
      | Feature::DecimalListStyleType
      | Feature::DiscListStyleType
      | Feature::SquareListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::IcUnit => {
        if let Some(version) = browsers.chrome {
          if version < 6946816 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 6946816 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6356992 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4718592 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1310720 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 6946816 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LhUnit => {
        if let Some(version) = browsers.chrome {
          if version < 7143424 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7143424 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4849664 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1376256 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7143424 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::RcapUnit => {
        if let Some(version) = browsers.chrome {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7733248 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7733248 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::RchUnit | Feature::RexUnit | Feature::RicUnit => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1114624 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::RemUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 131072 {
            return false;
          }
        }
      }
      Feature::RlhUnit => {
        if let Some(version) = browsers.chrome {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7274496 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 7864320 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4915200 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 1049600 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1441792 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7274496 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::VbUnit
      | Feature::ViUnit
      | Feature::ViewportPercentageUnitsDynamic
      | Feature::ViewportPercentageUnitsLarge
      | Feature::ViewportPercentageUnitsSmall => {
        if let Some(version) = browsers.chrome {
          if version < 7077888 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 7077888 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 6619136 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4784128 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 984064 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1376256 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 7077888 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::VhUnit | Feature::VwUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1245184 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 589824 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 393216 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 393216 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::VmaxUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1245184 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 66816 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::VminUnit => {
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1245184 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::ConicGradient | Feature::RepeatingConicGradient => {
        if let Some(version) = browsers.chrome {
          if version < 4521984 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 5439488 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3145728 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 786688 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 786944 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 4521984 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LinearGradient | Feature::RepeatingLinearGradient => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::RadialGradient => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::RepeatingRadialGradient => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 655360 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::AfarListStyleType
      | Feature::AmharicListStyleType
      | Feature::AmharicAbegedeListStyleType
      | Feature::EthiopicListStyleType
      | Feature::EthiopicAbegedeListStyleType
      | Feature::EthiopicAbegedeAmEtListStyleType
      | Feature::EthiopicAbegedeGezListStyleType
      | Feature::EthiopicAbegedeTiErListStyleType
      | Feature::EthiopicAbegedeTiEtListStyleType
      | Feature::EthiopicHalehameAaErListStyleType
      | Feature::EthiopicHalehameAaEtListStyleType
      | Feature::EthiopicHalehameAmEtListStyleType
      | Feature::EthiopicHalehameGezListStyleType
      | Feature::EthiopicHalehameOmEtListStyleType
      | Feature::EthiopicHalehameSidEtListStyleType
      | Feature::EthiopicHalehameSoEtListStyleType
      | Feature::EthiopicHalehameTigListStyleType
      | Feature::LowerHexadecimalListStyleType
      | Feature::LowerNorwegianListStyleType
      | Feature::UpperHexadecimalListStyleType
      | Feature::UpperNorwegianListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262656 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 196608 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ArabicIndicListStyleType
      | Feature::BengaliListStyleType
      | Feature::CjkEarthlyBranchListStyleType
      | Feature::CjkHeavenlyStemListStyleType
      | Feature::DevanagariListStyleType
      | Feature::GujaratiListStyleType
      | Feature::GurmukhiListStyleType
      | Feature::KannadaListStyleType
      | Feature::KhmerListStyleType
      | Feature::LaoListStyleType
      | Feature::MalayalamListStyleType
      | Feature::MyanmarListStyleType
      | Feature::OriyaListStyleType
      | Feature::PersianListStyleType
      | Feature::TeluguListStyleType
      | Feature::ThaiListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262656 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::ArmenianListStyleType
      | Feature::DecimalLeadingZeroListStyleType
      | Feature::GeorgianListStyleType
      | Feature::LowerAlphaListStyleType
      | Feature::LowerGreekListStyleType
      | Feature::LowerRomanListStyleType
      | Feature::UpperAlphaListStyleType
      | Feature::UpperLatinListStyleType
      | Feature::UpperRomanListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::AsterisksListStyleType | Feature::FootnotesListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::BinaryListStyleType
      | Feature::OctalListStyleType
      | Feature::OromoListStyleType
      | Feature::SidamaListStyleType
      | Feature::SomaliListStyleType
      | Feature::TigreListStyleType
      | Feature::TigrinyaErListStyleType
      | Feature::TigrinyaErAbegedeListStyleType
      | Feature::TigrinyaEtListStyleType
      | Feature::TigrinyaEtAbegedeListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262656 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::CambodianListStyleType | Feature::MongolianListStyleType | Feature::TibetanListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2162688 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 262656 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::CjkDecimalListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1835008 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4194304 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5963776 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::DisclosureClosedListStyleType | Feature::DisclosureOpenListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5832704 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2162688 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4128768 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5832704 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::EthiopicNumericListStyleType
      | Feature::JapaneseFormalListStyleType
      | Feature::JapaneseInformalListStyleType
      | Feature::TamilListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5963776 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 4194304 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5963776 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::HebrewListStyleType
      | Feature::HiraganaListStyleType
      | Feature::HiraganaIrohaListStyleType
      | Feature::KatakanaListStyleType
      | Feature::KatakanaIrohaListStyleType
      | Feature::NoneListStyleType
      | Feature::AutoSize => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::KoreanHangulFormalListStyleType
      | Feature::KoreanHanjaFormalListStyleType
      | Feature::KoreanHanjaInformalListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 2949120 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1835008 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2097152 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 2949120 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LowerArmenianListStyleType | Feature::UpperArmenianListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2162688 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 327936 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::LowerLatinListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 1179648 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 524288 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 65536 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::SimpChineseFormalListStyleType
      | Feature::SimpChineseInformalListStyleType
      | Feature::TradChineseFormalListStyleType
      | Feature::TradChineseInformalListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 2949120 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2097152 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 983040 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 2949120 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::StringListStyleType => {
        if let Some(version) = browsers.chrome {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 2555904 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 3735552 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 917760 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 918784 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 5177344 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::SymbolsListStyleType => {
        if let Some(version) = browsers.firefox {
          if version < 2293760 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.opera.is_some()
          || browsers.safari.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::AnchorSizeSize => {
        if let Some(version) = browsers.chrome {
          if version < 8192000 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 8192000 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 5439488 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 1769472 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 8192000 {
            return false;
          }
        }
        if browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.safari.is_some()
        {
          return false;
        }
      }
      Feature::FitContentSize => {
        if let Some(version) = browsers.chrome {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::IsAnimatableSize => {
        if let Some(version) = browsers.chrome {
          if version < 1703936 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 786432 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 1048576 {
            return false;
          }
        }
        if let Some(version) = browsers.ie {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
      }
      Feature::MaxContentSize => {
        if let Some(version) = browsers.chrome {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2818048 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 66816 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::MinContentSize => {
        if let Some(version) = browsers.chrome {
          if version < 3014656 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 2162688 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 720896 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 3014656 {
            return false;
          }
        }
        if browsers.ie.is_some() {
          return false;
        }
      }
      Feature::WebkitFillAvailableSize => {
        if let Some(version) = browsers.chrome {
          if version < 1638400 {
            return false;
          }
        }
        if let Some(version) = browsers.edge {
          if version < 5177344 {
            return false;
          }
        }
        if let Some(version) = browsers.opera {
          if version < 917504 {
            return false;
          }
        }
        if let Some(version) = browsers.safari {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 458752 {
            return false;
          }
        }
        if let Some(version) = browsers.samsung {
          if version < 327680 {
            return false;
          }
        }
        if let Some(version) = browsers.android {
          if version < 263168 {
            return false;
          }
        }
        if browsers.firefox.is_some() || browsers.ie.is_some() {
          return false;
        }
      }
      Feature::MozAvailableSize => {
        if let Some(version) = browsers.firefox {
          if version < 262144 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.ie.is_some()
          || browsers.ios_saf.is_some()
          || browsers.opera.is_some()
          || browsers.safari.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
      Feature::P3Colors | Feature::LangSelectorList => {
        if let Some(version) = browsers.safari {
          if version < 655616 {
            return false;
          }
        }
        if let Some(version) = browsers.ios_saf {
          if version < 656128 {
            return false;
          }
        }
        if browsers.android.is_some()
          || browsers.chrome.is_some()
          || browsers.edge.is_some()
          || browsers.firefox.is_some()
          || browsers.ie.is_some()
          || browsers.opera.is_some()
          || browsers.samsung.is_some()
        {
          return false;
        }
      }
    }
    true
  }

  pub fn is_partially_compatible(&self, targets: Browsers) -> bool {
    let mut browsers = Browsers::default();
    if targets.android.is_some() {
      browsers.android = targets.android;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.android = None;
    }
    if targets.chrome.is_some() {
      browsers.chrome = targets.chrome;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.chrome = None;
    }
    if targets.edge.is_some() {
      browsers.edge = targets.edge;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.edge = None;
    }
    if targets.firefox.is_some() {
      browsers.firefox = targets.firefox;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.firefox = None;
    }
    if targets.ie.is_some() {
      browsers.ie = targets.ie;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.ie = None;
    }
    if targets.ios_saf.is_some() {
      browsers.ios_saf = targets.ios_saf;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.ios_saf = None;
    }
    if targets.opera.is_some() {
      browsers.opera = targets.opera;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.opera = None;
    }
    if targets.safari.is_some() {
      browsers.safari = targets.safari;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.safari = None;
    }
    if targets.samsung.is_some() {
      browsers.samsung = targets.samsung;
      if self.is_compatible(browsers) {
        return true;
      }
      browsers.samsung = None;
    }

    false
  }
}
