# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos.  If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================


import eos.config
from eos.calc import calculateRangeFactor
from eos.const import FittingModuleState, FitSystemSecurity
from eos.utils.spoolSupport import SpoolType, SpoolOptions, calculateSpoolup, resolveSpoolOptions


class BaseEffect:

    dealsDamage = False

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        pass


class DummyEffect(BaseEffect):
    pass


class Effect4(BaseEffect):
    """
    shieldBoosting

    Used by:
    Modules from group: Shield Booster (89 of 89)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        amount = module.getModifiedItemAttr('shieldBonus')
        speed = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('shieldRepair', amount / speed, **kwargs)


class Effect10(BaseEffect):
    """
    targetAttack

    Used by:
    Celestials from group: Destructible Effect Beacon (6 of 6)
    Drones from group: Combat Drone (75 of 75)
    Modules from group: Energy Weapon (212 of 214)
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set reload time to 1 second
        module.reloadTime = 1000


class Effect17(BaseEffect):
    """
    mining

    Used by:
    Drones from group: Mining Drone (10 of 10)
    """

    grouped = True
    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        miningDroneAmountPercent = container.getModifiedItemAttr('miningDroneAmountPercent')
        if (miningDroneAmountPercent is None) or (miningDroneAmountPercent == 0):
            pass
        else:
            container.multiplyItemAttr('miningAmount', miningDroneAmountPercent / 100, **kwargs)


class Effect21(BaseEffect):
    """
    shieldCapacityBonusOnline

    Used by:
    Modules from group: Shield Extender (36 of 36)
    Modules from group: Shield Resistance Amplifier (84 of 84)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('shieldCapacity', module.getModifiedItemAttr('capacityBonus'), **kwargs)


class Effect25(BaseEffect):
    """
    capacitorCapacityBonus

    Used by:
    Modules from group: Capacitor Battery (30 of 30)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('capacitorCapacity', ship.getModifiedItemAttr('capacitorBonus'), **kwargs)


class Effect26(BaseEffect):
    """
    structureRepair

    Used by:
    Modules from group: Hull Repair Unit (25 of 25)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        amount = module.getModifiedItemAttr('structureDamageAmount')
        speed = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('hullRepair', amount / speed, **kwargs)


class Effect27(BaseEffect):
    """
    armorRepair

    Used by:
    Modules from group: Armor Repair Unit (100 of 100)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        amount = module.getModifiedItemAttr('armorDamageAmount')
        speed = module.getModifiedItemAttr('duration') / 1000.0
        rps = amount / speed
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rps, **kwargs)


class Effect34(BaseEffect):
    """
    projectileFired

    Used by:
    Modules from group: Hybrid Weapon (221 of 221)
    Modules from group: Projectile Weapon (165 of 165)
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        rt = module.getModifiedItemAttr('reloadTime')
        if not rt:
            # Set reload time to 10 seconds
            module.reloadTime = 10000
        else:
            module.reloadTime = rt


class Effect38(BaseEffect):
    """
    empWave

    Used by:
    Modules from group: Smart Bomb (118 of 118)
    """

    dealsDamage = True
    type = 'active'


class Effect39(BaseEffect):
    """
    warpDisrupt

    Used by:
    Modules named like: Warp Disruptor (28 of 28)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs)


class Effect46(BaseEffect):
    """
    shipScan

    Used by:
    Modules from group: Ship Scanner (3 of 3)
    """

    type = 'active'


class Effect47(BaseEffect):
    """
    cargoScan

    Used by:
    Modules from group: Cargo Scanner (4 of 4)
    """

    type = 'active'


class Effect48(BaseEffect):
    """
    powerBooster

    Used by:
    Modules from group: Capacitor Booster (41 of 41)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set reload time to 10 seconds
        module.reloadTime = 10000
        # Make so that reloads are always taken into account during clculations
        module.forceReload = True

        if module.charge is None:
            return
        capAmount = module.getModifiedChargeAttr('capacitorBonus') or 0
        module.itemModifiedAttributes['capacitorNeed'] = -capAmount


class Effect50(BaseEffect):
    """
    modifyShieldRechargeRate

    Used by:
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Power Diagnostic System (23 of 23)
    Modules from group: Reactor Control Unit (22 of 22)
    Modules from group: Shield Recharger (4 of 4)
    Modules named like: Flux Coil (12 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('shieldRechargeRate', module.getModifiedItemAttr('shieldRechargeRateMultiplier') or 1, **kwargs)


class Effect51(BaseEffect):
    """
    modifyPowerRechargeRate

    Used by:
    Modules from group: Capacitor Flux Coil (6 of 6)
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Capacitor Recharger (18 of 18)
    Modules from group: Power Diagnostic System (23 of 23)
    Modules from group: Reactor Control Unit (22 of 22)
    Modules from group: Shield Power Relay (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('rechargeRate', module.getModifiedItemAttr('capacitorRechargeRateMultiplier'), **kwargs)


class Effect54(BaseEffect):
    """
    targetPassively

    Used by:
    Modules from group: Passive Targeting System (6 of 6)
    """

    type = 'active'


class Effect55(BaseEffect):
    """
    targetHostiles

    Used by:
    Modules from group: Automated Targeting System (6 of 6)
    """

    type = 'active'


class Effect56(BaseEffect):
    """
    powerOutputMultiply

    Used by:
    Modules from group: Capacitor Flux Coil (6 of 6)
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Power Diagnostic System (23 of 23)
    Modules from group: Reactor Control Unit (22 of 22)
    Variations of structure module: Standup Reactor Control Unit I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # We default this to None as there are times when the source attribute doesn't exist (for example, Cap Power Relay).
        # It will return 0 as it doesn't exist, which would nullify whatever the target attribute is
        fit.ship.multiplyItemAttr('powerOutput', module.getModifiedItemAttr('powerOutputMultiplier', None), **kwargs)


class Effect57(BaseEffect):
    """
    shieldCapacityMultiply

    Used by:
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Power Diagnostic System (23 of 23)
    Modules from group: Reactor Control Unit (22 of 22)
    Modules named like: Flux Coil (12 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # We default this to None as there are times when the source attribute doesn't exist (for example, Cap Power Relay).
        # It will return 0 as it doesn't exist, which would nullify whatever the target attribute is
        fit.ship.multiplyItemAttr('shieldCapacity', module.getModifiedItemAttr('shieldCapacityMultiplier', None), **kwargs)


class Effect58(BaseEffect):
    """
    capacitorCapacityMultiply

    Used by:
    Modules from group: Capacitor Flux Coil (6 of 6)
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Power Diagnostic System (23 of 23)
    Modules from group: Propulsion Module (68 of 133)
    Modules from group: Reactor Control Unit (22 of 22)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # We default this to None as there are times when the source attribute doesn't exist (for example, Cap Power Relay).
        # It will return 0 as it doesn't exist, which would nullify whatever the target attribute is
        fit.ship.multiplyItemAttr('capacitorCapacity', module.getModifiedItemAttr('capacitorCapacityMultiplier', None), **kwargs)


class Effect59(BaseEffect):
    """
    cargoCapacityMultiply

    Used by:
    Modules from group: Expanded Cargohold (7 of 7)
    Modules from group: Overdrive Injector System (7 of 7)
    Modules from group: Reinforced Bulkhead (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('capacity', module.getModifiedItemAttr('cargoCapacityMultiplier'), **kwargs)


class Effect60(BaseEffect):
    """
    structureHPMultiply

    Used by:
    Modules from group: Nanofiber Internal Structure (7 of 7)
    Modules from group: Reinforced Bulkhead (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('hp', module.getModifiedItemAttr('structureHPMultiplier'), **kwargs)


class Effect61(BaseEffect):
    """
    agilityBonus

    Used by:
    Subsystems named like: Propulsion Interdiction Nullifier (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('agility', src.getModifiedItemAttr('agilityBonusAdd'), **kwargs)


class Effect63(BaseEffect):
    """
    armorHPMultiply

    Used by:
    Modules from group: Armor Coating (202 of 202)
    Modules from group: Armor Plating Energized (187 of 187)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('armorHP', module.getModifiedItemAttr('armorHPMultiplier'), **kwargs)


class Effect67(BaseEffect):
    """
    miningLaser

    Used by:
    Modules from group: Frequency Mining Laser (3 of 3)
    Modules from group: Mining Laser (15 of 15)
    Modules from group: Strip Miner (5 of 5)
    Module: Citizen Miner
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set reload time to 1 second
        module.reloadTime = 1000


class Effect81(BaseEffect):
    """
    surveyScan

    Used by:
    Modules from group: Survey Scanner (3 of 3)
    """

    type = 'active'


class Effect89(BaseEffect):
    """
    projectileWeaponSpeedMultiply

    Used by:
    Modules from group: Gyrostabilizer (14 of 14)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect91(BaseEffect):
    """
    energyWeaponDamageMultiply

    Used by:
    Modules from group: Heat Sink (19 of 19)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect92(BaseEffect):
    """
    projectileWeaponDamageMultiply

    Used by:
    Modules from group: Gyrostabilizer (14 of 14)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect93(BaseEffect):
    """
    hybridWeaponDamageMultiply

    Used by:
    Modules from group: Magnetic Field Stabilizer (15 of 15)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect95(BaseEffect):
    """
    energyWeaponSpeedMultiply

    Used by:
    Modules from group: Heat Sink (19 of 19)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect96(BaseEffect):
    """
    hybridWeaponSpeedMultiply

    Used by:
    Modules from group: Magnetic Field Stabilizer (15 of 15)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect101(BaseEffect):
    """
    useMissiles

    Used by:
    Modules from group: Missile Launcher Heavy (12 of 12)
    Modules from group: Missile Launcher Rocket (15 of 15)
    Modules named like: Launcher (154 of 154)
    Structure Modules named like: Standup Launcher (7 of 7)
    """

    dealsDamage = True
    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        # Set reload time to 10 seconds
        src.reloadTime = 10000
        if 'projected' not in context:
            return
        if src.item.group.name == 'Missile Launcher Bomb':
            # Bomb Launcher Cooldown Timer
            moduleReactivationDelay = src.getModifiedItemAttr('moduleReactivationDelay')
            speed = src.getModifiedItemAttr('speed')
            # Void and Focused Void Bombs
            neutAmount = src.getModifiedChargeAttr('energyNeutralizerAmount')
            if moduleReactivationDelay and neutAmount and speed:
                fit.addDrain(src, speed + moduleReactivationDelay, neutAmount, 0)
            # Lockbreaker Bombs
            ecmStrengthBonus = src.getModifiedChargeAttr('scan{0}StrengthBonus'.format(fit.scanType))
            if ecmStrengthBonus:
                strModifier = 1 - min(1, ecmStrengthBonus / fit.scanStrength)
                fit.ecmProjectedStr *= strModifier


class Effect118(BaseEffect):
    """
    electronicAttributeModifyOnline

    Used by:
    Modules from group: Automated Targeting System (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('maxLockedTargets', module.getModifiedItemAttr('maxLockedTargetsBonus'), **kwargs)


class Effect157(BaseEffect):
    """
    largeHybridTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringLargeHybridTurret

    Used by:
    Implants named like: Zainou 'Deadeye' Large Hybrid Turret LH (6 of 6)
    Skill: Large Hybrid Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect159(BaseEffect):
    """
    mediumEnergyTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringMediumEnergyTurret

    Used by:
    Implants named like: Inherent Implants 'Lancer' Medium Energy Turret ME (6 of 6)
    Skill: Medium Energy Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect160(BaseEffect):
    """
    mediumHybridTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringMediumHybridTurret

    Used by:
    Implants named like: Zainou 'Deadeye' Medium Hybrid Turret MH (6 of 6)
    Skill: Medium Hybrid Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect161(BaseEffect):
    """
    mediumProjectileTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringMediumProjectileTurret

    Used by:
    Implants named like: Eifyr and Co. 'Gunslinger' Medium Projectile Turret MP (6 of 6)
    Skill: Medium Projectile Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect162(BaseEffect):
    """
    largeEnergyTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringLargeEnergyTurret

    Used by:
    Implants named like: Inherent Implants 'Lancer' Large Energy Turret LE (6 of 6)
    Implant: Pashan's Turret Handling Mindlink
    Skill: Large Energy Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect172(BaseEffect):
    """
    smallEnergyTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringSmallEnergyTurret

    Used by:
    Implants named like: Inherent Implants 'Lancer' Small Energy Turret SE (6 of 6)
    Skill: Small Energy Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect173(BaseEffect):
    """
    smallHybridTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringSmallHybridTurret

    Used by:
    Implants named like: Zainou 'Deadeye' Small Hybrid Turret SH (6 of 6)
    Skill: Small Hybrid Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect174(BaseEffect):
    """
    smallProjectileTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringSmallProjectileTurret

    Used by:
    Implants named like: Eifyr and Co. 'Gunslinger' Small Projectile Turret SP (6 of 6)
    Skill: Small Projectile Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect212(BaseEffect):
    """
    sensorUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringSensorUpgrades

    Used by:
    Implants named like: Zainou 'Gypsy' Electronics Upgrades EU (6 of 6)
    Modules named like: Liquid Cooled Electronics (8 of 8)
    Skill: Electronics Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Electronics Upgrades'),
                                      'cpu', container.getModifiedItemAttr('cpuNeedBonus') * level, **kwargs)


class Effect214(BaseEffect):
    """
    targetingMaxTargetBonusModAddMaxLockedTargetsLocationChar

    Used by:
    Skills named like: Target Management (2 of 2)
    """

    type = 'passive', 'structure'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        amount = skill.getModifiedItemAttr('maxTargetBonus') * skill.level
        fit.extraAttributes.increase('maxTargetsLockedFromSkills', amount, **kwargs)


class Effect223(BaseEffect):
    """
    navigationVelocityBonusPostPercentMaxVelocityLocationShip

    Used by:
    Implant: Low-grade Snake Alpha
    Implant: Mid-grade Snake Alpha
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', implant.getModifiedItemAttr('velocityBonus'), **kwargs)


class Effect227(BaseEffect):
    """
    accerationControlCapNeedBonusPostPercentCapacitorNeedLocationShipGroupAfterburner

    Used by:
    Modules named like: Dynamic Fuel Valve (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus'), **kwargs)


class Effect230(BaseEffect):
    """
    afterburnerDurationBonusPostPercentDurationLocationShipModulesRequiringAfterburner

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Afterburner AB (6 of 6)
    Implant: Zor's Custom Navigation Link
    Skill: Afterburner
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'duration', container.getModifiedItemAttr('durationBonus') * level, **kwargs)


class Effect235(BaseEffect):
    """
    warpdriveoperationWarpCapacitorNeedBonusPostPercentWarpCapacitorNeedLocationShip

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Warp Drive Operation WD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpCapacitorNeed', implant.getModifiedItemAttr('warpCapacitorNeedBonus'), **kwargs)


class Effect242(BaseEffect):
    """
    accerationControlSpeedFBonusPostPercentSpeedFactorLocationShipGroupAfterburner

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Acceleration Control AC (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'speedFactor', implant.getModifiedItemAttr('speedFBonus'), **kwargs)


class Effect244(BaseEffect):
    """
    highSpeedManuveringCapacitorNeedMultiplierPostPercentCapacitorNeedLocationShipModulesRequiringHighSpeedManuvering

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' High Speed Maneuvering HS (6 of 6)
    Skill: High Speed Maneuvering
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect271(BaseEffect):
    """
    hullUpgradesArmorHpBonusPostPercentHpLocationShip

    Used by:
    Implants named like: grade Amulet (15 of 18)
    Modules named like: Trimark Armor Pump (8 of 8)
    Implant: Low-grade Snake Epsilon
    Implant: Mid-grade Snake Epsilon
    Skill: Hull Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('armorHP', (container.getModifiedItemAttr('armorHpBonus') or 0) * level, **kwargs)


class Effect272(BaseEffect):
    """
    repairSystemsDurationBonusPostPercentDurationLocationShipModulesRequiringRepairSystems

    Used by:
    Implants named like: Inherent Implants 'Noble' Repair Systems RS (6 of 6)
    Modules named like: Nanobot Accelerator (8 of 8)
    Implant: Numon Family Heirloom
    Skill: Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'duration', container.getModifiedItemAttr('durationSkillBonus') * level, **kwargs)


class Effect273(BaseEffect):
    """
    shieldUpgradesPowerNeedBonusPostPercentPowerLocationShipModulesRequiringShieldUpgrades

    Used by:
    Implants named like: Zainou 'Gnome' Shield Upgrades SU (6 of 6)
    Modules named like: Core Defense Charge Economizer (8 of 8)
    Skill: Shield Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Upgrades'),
                                      'power', container.getModifiedItemAttr('powerNeedBonus') * level, **kwargs)


class Effect277(BaseEffect):
    """
    tacticalshieldManipulationSkillBoostUniformityBonus

    Used by:
    Skill: Tactical Shield Manipulation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('shieldUniformity', skill.getModifiedItemAttr('uniformityBonus') * skill.level, **kwargs)


class Effect279(BaseEffect):
    """
    shieldEmmisionSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringShieldEmmisionSystems

    Used by:
    Implants named like: Zainou 'Gnome' Shield Emission Systems SE (6 of 6)
    Skill: Shield Emission Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Capital Shield Emission Systems'),
            'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect287(BaseEffect):
    """
    controlledBurstsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Inherent Implants 'Lancer' Controlled Bursts CB (6 of 6)
    Skill: Controlled Bursts
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect290(BaseEffect):
    """
    sharpshooterRangeSkillBonusPostPercentMaxRangeLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Frentix Booster (4 of 4)
    Implants named like: Zainou 'Deadeye' Sharpshooter ST (6 of 6)
    Skill: Sharpshooter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'maxRange', container.getModifiedItemAttr('rangeSkillBonus') * level, **kwargs)


class Effect298(BaseEffect):
    """
    surgicalStrikeFalloffBonusPostPercentFalloffLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Sooth Sayer Booster (4 of 4)
    Implants named like: Zainou 'Deadeye' Trajectory Analysis TA (6 of 6)
    Skill: Trajectory Analysis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'falloff', container.getModifiedItemAttr('falloffBonus') * level, **kwargs)


class Effect315(BaseEffect):
    """
    dronesSkillBoostMaxActiveDroneBonus

    Used by:
    Skill: Drones
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        amount = skill.getModifiedItemAttr('maxActiveDroneBonus') * skill.level
        fit.extraAttributes.increase('maxActiveDrones', amount, **kwargs)


class Effect391(BaseEffect):
    """
    astrogeologyMiningAmountBonusPostPercentMiningAmountLocationShipModulesRequiringMining

    Used by:
    Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
    Implant: Michi's Excavation Augmentor
    Skill: Astrogeology
    Skill: Mining
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'miningAmount', container.getModifiedItemAttr('miningAmountBonus') * level, **kwargs)


class Effect392(BaseEffect):
    """
    mechanicHullHpBonusPostPercentHpShip

    Used by:
    Implants named like: Inherent Implants 'Noble' Mechanic MC (6 of 6)
    Modules named like: Transverse Bulkhead (8 of 8)
    Skill: Mechanics
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('hp', container.getModifiedItemAttr('hullHpBonus') * level, **kwargs)


class Effect394(BaseEffect):
    """
    navigationVelocityBonusPostPercentMaxVelocityShip

    Used by:
    Modules from group: Rig Anchor (4 of 4)
    Implants named like: Agency 'Overclocker' SB Dose (4 of 4)
    Implants named like: grade Snake (16 of 18)
    Modules named like: Auxiliary Thrusters (8 of 8)
    Implant: Quafe Zero
    Skill: Navigation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        amount = container.getModifiedItemAttr('velocityBonus') or 0
        penalties = 'skill' not in context and 'implant' not in context and 'booster' not in context
        fit.ship.boostItemAttr('maxVelocity', amount * level,
                               stackingPenalties=penalties, **kwargs)


class Effect395(BaseEffect):
    """
    evasiveManeuveringAgilityBonusPostPercentAgilityShip

    Used by:
    Modules from group: Rig Anchor (4 of 4)
    Implants named like: Eifyr and Co. 'Rogue' Evasive Maneuvering EM (6 of 6)
    Implants named like: grade Nomad (10 of 12)
    Modules named like: Low Friction Nozzle Joints (8 of 8)
    Implant: Genolution Core Augmentation CA-4
    Skill: Evasive Maneuvering
    Skill: Spaceship Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalties = 'skill' not in context and 'implant' not in context
        fit.ship.boostItemAttr('agility', container.getModifiedItemAttr('agilityBonus') * level,
                               stackingPenalties=penalties, **kwargs)


class Effect396(BaseEffect):
    """
    energyGridUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringEnergyGridUpgrades

    Used by:
    Implants named like: Inherent Implants 'Squire' Energy Grid Upgrades EU (6 of 6)
    Modules named like: Powergrid Subroutine Maximizer (8 of 8)
    Skill: Energy Grid Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Energy Grid Upgrades'),
                                      'cpu', container.getModifiedItemAttr('cpuNeedBonus') * level, **kwargs)


class Effect397(BaseEffect):
    """
    electronicsCpuOutputBonusPostPercentCpuOutputLocationShipGroupComputer

    Used by:
    Implants named like: Zainou 'Gypsy' CPU Management EE (6 of 6)
    Modules named like: Processor Overclocking Unit (8 of 8)
    Subsystems named like: Core Electronic Efficiency Gate (2 of 2)
    Implant: Genolution Core Augmentation CA-2
    Skill: CPU Management
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('cpuOutput', container.getModifiedItemAttr('cpuOutputBonus2') * level, **kwargs)


class Effect408(BaseEffect):
    """
    largeProjectileTurretDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringLargeProjectileTurret

    Used by:
    Implants named like: Eifyr and Co. 'Gunslinger' Large Projectile Turret LP (6 of 6)
    Skill: Large Projectile Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect414(BaseEffect):
    """
    gunneryTurretSpeeBonusPostPercentSpeedLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Inherent Implants 'Lancer' Gunnery RF (6 of 6)
    Implant: Pashan's Turret Customization Mindlink
    Skill: Gunnery
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'speed', container.getModifiedItemAttr('turretSpeeBonus') * level, **kwargs)


class Effect446(BaseEffect):
    """
    shieldManagementShieldCapacityBonusPostPercentCapacityLocationShipGroupShield

    Used by:
    Implants named like: Zainou 'Gnome' Shield Management SM (6 of 6)
    Modules named like: Core Defense Field Extender (8 of 8)
    Implant: Genolution Core Augmentation CA-3
    Implant: Sansha Modified 'Gnome' Implant
    Skill: Shield Management
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('shieldCapacity', container.getModifiedItemAttr('shieldCapacityBonus') * level, **kwargs)


class Effect485(BaseEffect):
    """
    energysystemsoperationCapRechargeBonusPostPercentRechargeRateLocationShipGroupCapacitor

    Used by:
    Implants named like: Inherent Implants 'Squire' Capacitor Systems Operation EO (6 of 6)
    Modules named like: Capacitor Control Circuit (8 of 8)
    Implant: Genolution Core Augmentation CA-2
    Skill: Capacitor Systems Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('rechargeRate', container.getModifiedItemAttr('capRechargeBonus') * level, **kwargs)


class Effect486(BaseEffect):
    """
    shieldOperationRechargeratebonusPostPercentRechargeRateLocationShipGroupShield

    Used by:
    Implants named like: Zainou 'Gnome' Shield Operation SP (6 of 6)
    Modules named like: Core Defense Field Purger (8 of 8)
    Implant: Sansha Modified 'Gnome' Implant
    Skill: Shield Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('shieldRechargeRate', container.getModifiedItemAttr('rechargeratebonus') * level, **kwargs)


class Effect490(BaseEffect):
    """
    engineeringPowerEngineeringOutputBonusPostPercentPowerOutputLocationShipGroupPowerCore

    Used by:
    Implants named like: Inherent Implants 'Squire' Power Grid Management EG (6 of 6)
    Modules named like: Ancillary Current Router (8 of 8)
    Subsystems named like: Core Augmented Reactor (4 of 4)
    Implant: Genolution Core Augmentation CA-1
    Skill: Power Grid Management
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('powerOutput', container.getModifiedItemAttr('powerEngineeringOutputBonus') * level, **kwargs)


class Effect494(BaseEffect):
    """
    warpDriveOperationWarpCapacitorNeedBonusPostPercentWarpCapacitorNeedLocationShipGroupPropulsion

    Used by:
    Modules named like: Warp Core Optimizer (8 of 8)
    Skill: Warp Drive Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('warpCapacitorNeed', container.getModifiedItemAttr('warpCapacitorNeedBonus') * level,
                               stackingPenalties='skill' not in context, **kwargs)


class Effect504(BaseEffect):
    """
    scoutDroneOperationDroneRangeBonusModAddDroneControlDistanceChar

    Used by:
    Modules named like: Drone Control Range Augmentor (8 of 8)
    Skills named like: Drone Avionics (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        amount = container.getModifiedItemAttr('droneRangeBonus') * level
        fit.extraAttributes.increase('droneControlRange', amount, **kwargs)


class Effect506(BaseEffect):
    """
    fuelConservationCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringAfterburner

    Used by:
    Skill: Afterburner
    Skill: Fuel Conservation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'capacitorNeed', skill.getModifiedItemAttr('capNeedBonus') * skill.level, **kwargs)


class Effect507(BaseEffect):
    """
    longRangeTargetingMaxTargetRangeBonusPostPercentMaxTargetRangeLocationShipGroupElectronic

    Used by:
    Implants named like: Zainou 'Gypsy' Long Range Targeting LT (6 of 6)
    Skill: Long Range Targeting
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('maxTargetRange', container.getModifiedItemAttr('maxTargetRangeBonus') * level, **kwargs)


class Effect508(BaseEffect):
    """
    shipPDmgBonusMF

    Used by:
    Ship: Cheetah
    Ship: Freki
    Ship: Republic Fleet Firetail
    Ship: Slasher
    Ship: Stiletto
    Ship: Wolf
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect511(BaseEffect):
    """
    shipEnergyTCapNeedBonusAF

    Used by:
    Ship: Crusader
    Ship: Executioner
    Ship: Gold Magnate
    Ship: Punisher
    Ship: Retribution
    Ship: Silver Magnate
    Ship: Tormentor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonus2AF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect512(BaseEffect):
    """
    shipSHTDmgBonusGF

    Used by:
    Variations of ship: Incursus (3 of 3)
    Ship: Atron
    Ship: Federation Navy Comet
    Ship: Helios
    Ship: Pacifier
    Ship: Taranis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusGF'),
                                      skill='Gallente Frigate', **kwargs)


class Effect514(BaseEffect):
    """
    shipSETDmgBonusAF

    Used by:
    Ship: Executioner
    Ship: Gold Magnate
    Ship: Silver Magnate
    Ship: Tormentor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusAF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect516(BaseEffect):
    """
    shipTCapNeedBonusAC

    Used by:
    Ship: Devoter
    Ship: Omen
    Ship: Zealot
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusAC'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect521(BaseEffect):
    """
    shipHRangeBonusCC

    Used by:
    Ship: Eagle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCC'),
                                      skill='Caldari Cruiser', **kwargs)


class Effect527(BaseEffect):
    """
    shipVelocityBonusMI

    Used by:
    Variations of ship: Mammoth (2 of 2)
    Ship: Hoarder
    Ship: Prowler
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('shipBonusMI'),
                               skill='Minmatar Industrial', **kwargs)


class Effect529(BaseEffect):
    """
    shipCargoBonusAI

    Used by:
    Variations of ship: Sigil (2 of 2)
    Ship: Bestower
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('shipBonusAI'),
                               skill='Amarr Industrial', **kwargs)


class Effect536(BaseEffect):
    """
    cpuMultiplierPostMulCpuOutputShip

    Used by:
    Modules from group: CPU Enhancer (19 of 19)
    Variations of structure module: Standup Co-Processor Array I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('cpuOutput', module.getModifiedItemAttr('cpuMultiplier'), **kwargs)


class Effect542(BaseEffect):
    """
    shipCapNeedBonusAB

    Used by:
    Variations of ship: Armageddon (3 of 5)
    Ship: Apocalypse Imperial Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect549(BaseEffect):
    """
    shipPTDmgBonusMB

    Used by:
    Variations of ship: Tempest (3 of 4)
    Ship: Machariel
    Ship: Panther
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMB'),
                                      skill='Minmatar Battleship', **kwargs)


class Effect550(BaseEffect):
    """
    shipHTDmgBonusGB

    Used by:
    Ship: Dominix Navy Issue
    Ship: Hyperion
    Ship: Kronos
    Ship: Marshal
    Ship: Megathron Federate Issue
    Ship: Sin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusGB'),
                                      skill='Gallente Battleship', **kwargs)


class Effect553(BaseEffect):
    """
    shipHTTrackingBonusGB

    Used by:
    Ship: Vindicator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGB'),
                                      skill='Gallente Battleship', **kwargs)


class Effect562(BaseEffect):
    """
    shipHTDmgBonusfixedGC

    Used by:
    Variations of ship: Vexor (3 of 4)
    Ship: Adrestia
    Ship: Arazu
    Ship: Deimos
    Ship: Enforcer
    Ship: Exequror Navy Issue
    Ship: Thorax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect581(BaseEffect):
    """
    weaponUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Zainou 'Gnome' Weapon Upgrades WU (6 of 6)
    Skill: Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery') or mod.item.requiresSkill('Vorton Projector Operation'),
                                      'cpu', container.getModifiedItemAttr('cpuNeedBonus') * level, **kwargs)


class Effect582(BaseEffect):
    """
    rapidFiringRofBonusPostPercentSpeedLocationShipModulesRequiringGunnery

    Used by:
    Skill: Rapid Firing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'speed', skill.getModifiedItemAttr('rofBonus') * skill.level, **kwargs)


class Effect584(BaseEffect):
    """
    surgicalStrikeDamageMultiplierBonusPostPercentDamageMultiplierLocationShipModulesRequiringGunnery

    Used by:
    Implants named like: Agency 'Pyrolancea' DB Dose (4 of 4)
    Implants named like: Eifyr and Co. 'Gunslinger' Surgical Strike SS (6 of 6)
    Implant: Standard Cerebral Accelerator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'damageMultiplier', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect587(BaseEffect):
    """
    surgicalStrikeDamageMultiplierBonusPostPercentDamageMultiplierLocationShipGroupEnergyWeapon

    Used by:
    Skill: Surgical Strike
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect588(BaseEffect):
    """
    surgicalStrikeDamageMultiplierBonusPostPercentDamageMultiplierLocationShipGroupProjectileWeapon

    Used by:
    Skill: Surgical Strike
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect589(BaseEffect):
    """
    surgicalStrikeDamageMultiplierBonusPostPercentDamageMultiplierLocationShipGroupHybridWeapon

    Used by:
    Skill: Surgical Strike
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect590(BaseEffect):
    """
    energyPulseWeaponsDurationBonusPostPercentDurationLocationShipModulesRequiringEnergyPulseWeapons

    Used by:
    Implants named like: Inherent Implants 'Squire' Energy Pulse Weapons EP (6 of 6)
    Skill: Energy Pulse Weapons
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Energy Pulse Weapons'),
                                      'duration', container.getModifiedItemAttr('durationBonus') * level, **kwargs)


class Effect596(BaseEffect):
    """
    ammoInfluenceRange

    Used by:
    Items from category: Charge (608 of 973)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('maxRange', module.getModifiedChargeAttr('weaponRangeMultiplier'), **kwargs)


class Effect598(BaseEffect):
    """
    ammoSpeedMultiplier

    Used by:
    Charges from group: Festival Charges (29 of 29)
    Charges from group: Interdiction Probe (2 of 2)
    Charges from group: Structure Festival Charges (2 of 2)
    Special Edition Assetss from group: Festival Charges Expired (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('speed', module.getModifiedChargeAttr('speedMultiplier') or 1, **kwargs)


class Effect599(BaseEffect):
    """
    ammoFallofMultiplier

    Used by:
    Charges from group: Advanced Artillery Ammo (8 of 8)
    Charges from group: Advanced Autocannon Ammo (8 of 8)
    Charges from group: Advanced Beam Laser Crystal (8 of 8)
    Charges from group: Advanced Blaster Charge (8 of 8)
    Charges from group: Advanced Pulse Laser Crystal (8 of 8)
    Charges from group: Advanced Railgun Charge (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('falloff', module.getModifiedChargeAttr('fallofMultiplier') or 1, **kwargs)


class Effect600(BaseEffect):
    """
    ammoTrackingMultiplier

    Used by:
    Charges from group: Advanced Artillery Ammo (8 of 8)
    Charges from group: Advanced Autocannon Ammo (8 of 8)
    Charges from group: Advanced Beam Laser Crystal (8 of 8)
    Charges from group: Advanced Blaster Charge (8 of 8)
    Charges from group: Advanced Exotic Plasma Charge (6 of 6)
    Charges from group: Advanced Pulse Laser Crystal (8 of 8)
    Charges from group: Advanced Railgun Charge (8 of 8)
    Charges from group: Projectile Ammo (128 of 128)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('trackingSpeed', module.getModifiedChargeAttr('trackingSpeedMultiplier'), **kwargs)


class Effect602(BaseEffect):
    """
    shipPTurretSpeedBonusMC

    Used by:
    Variations of ship: Rupture (3 of 3)
    Variations of ship: Stabber (3 of 3)
    Ship: Enforcer
    Ship: Huginn
    Ship: Scythe Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)


class Effect604(BaseEffect):
    """
    shipPTspeedBonusMB2

    Used by:
    Variations of ship: Tempest (4 of 4)
    Ship: Maelstrom
    Ship: Marshal
    Ship: Panther
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMB2'), skill='Minmatar Battleship', **kwargs)


class Effect607(BaseEffect):
    """
    cloaking

    Used by:
    Modules from group: Cloaking Device (10 of 14)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set flag which is used to determine if ship is cloaked or not
        # This is used to apply cloak-only bonuses, like Black Ops' speed bonus
        # Doesn't apply to covops cloaks
        fit.extraAttributes['cloaked'] = True
        # Apply speed penalty
        fit.ship.multiplyItemAttr('maxVelocity', module.getModifiedItemAttr('maxVelocityModifier'), **kwargs)


class Effect623(BaseEffect):
    """
    miningDroneOperationMiningAmountBonusPostPercentMiningDroneAmountPercentChar

    Used by:
    Modules named like: Drone Mining Augmentor (8 of 8)
    Skill: Mining Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount',
                                     container.getModifiedItemAttr('miningAmountBonus') * level, **kwargs)


class Effect627(BaseEffect):
    """
    powerIncrease

    Used by:
    Modules from group: Auxiliary Power Core (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('powerOutput', module.getModifiedItemAttr('powerIncrease'), **kwargs)


class Effect657(BaseEffect):
    """
    agilityMultiplierEffect

    Used by:
    Modules from group: Inertial Stabilizer (7 of 7)
    Modules from group: Nanofiber Internal Structure (7 of 7)
    Modules from group: Reinforced Bulkhead (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility',
                               module.getModifiedItemAttr('agilityMultiplier'),
                               stackingPenalties=True, **kwargs)


class Effect660(BaseEffect):
    """
    missileEMDmgBonus

    Used by:
    Skills named like: Missiles (5 of 7)
    Skill: Rockets
    Skill: Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
                                        'emDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect661(BaseEffect):
    """
    missileExplosiveDmgBonus

    Used by:
    Skills named like: Missiles (5 of 7)
    Skill: Rockets
    Skill: Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
                                        'explosiveDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect662(BaseEffect):
    """
    missileThermalDmgBonus

    Used by:
    Skills named like: Missiles (5 of 7)
    Skill: Rockets
    Skill: Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
                                        'thermalDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect668(BaseEffect):
    """
    missileKineticDmgBonus2

    Used by:
    Skills named like: Missiles (5 of 7)
    Skill: Rockets
    Skill: Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill(skill),
                                        'kineticDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect670(BaseEffect):
    """
    antiWarpScramblingPassive

    Used by:
    Modules from group: Warp Core Stabilizer (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs)


class Effect675(BaseEffect):
    """
    weaponUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringEnergyPulseWeapons

    Used by:
    Skill: Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Energy Pulse Weapons'),
                                      'cpu', skill.getModifiedItemAttr('cpuNeedBonus') * skill.level, **kwargs)


class Effect677(BaseEffect):
    """
    weaponUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringMissileLauncherOperation

    Used by:
    Implants named like: Zainou 'Gnome' Launcher CPU Efficiency LE (6 of 6)
    Skill: Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'cpu', container.getModifiedItemAttr('cpuNeedBonus') * level, **kwargs)


class Effect699(BaseEffect):
    """
    signatureAnalysisScanResolutionBonusPostPercentScanResolutionShip

    Used by:
    Implants named like: Zainou 'Gypsy' Signature Analysis SA (6 of 6)
    Modules named like: Targeting System Subcontroller (8 of 8)
    Implant: Quafe Zero
    Skill: Signature Analysis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context or 'booster' in context else True
        fit.ship.boostItemAttr('scanResolution', container.getModifiedItemAttr('scanResolutionBonus') * level,
                               stackingPenalties=penalized, **kwargs)


class Effect706(BaseEffect):
    """
    covertOpsWarpResistance

    Used by:
    Ships from group: Covert Ops (5 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpFactor', src.getModifiedItemAttr('eliteBonusCovertOps1'), skill='Covert Ops', **kwargs)


class Effect726(BaseEffect):
    """
    shipBonusCargo2GI

    Used by:
    Variations of ship: Miasmos (3 of 4)
    Variations of ship: Nereus (2 of 2)
    Ship: Iteron Mark V
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        # TODO: investigate if we can live without such ifs or hardcoding
        # Viator doesn't have GI bonus
        if 'shipBonusGI' in fit.ship.item.attributes:
            bonusAttr = 'shipBonusGI'
        else:
            bonusAttr = 'shipBonusGI2'
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr(bonusAttr), skill='Gallente Industrial', **kwargs)


class Effect727(BaseEffect):
    """
    shipBonusCargoCI

    Used by:
    Variations of ship: Badger (2 of 2)
    Ship: Tayra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('shipBonusCI'), skill='Caldari Industrial', **kwargs)


class Effect728(BaseEffect):
    """
    shipBonusCargoMI

    Used by:
    Variations of ship: Wreathe (2 of 2)
    Ship: Mammoth
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('shipBonusMI'), skill='Minmatar Industrial', **kwargs)


class Effect729(BaseEffect):
    """
    shipBonusVelocityGI

    Used by:
    Variations of ship: Epithal (2 of 2)
    Variations of ship: Miasmos (4 of 4)
    Ship: Iteron Mark V
    Ship: Kryos
    Ship: Viator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        # TODO: investigate if we can live without such ifs or hardcoding
        # Viator doesn't have GI bonus
        if 'shipBonusGI' in fit.ship.item.attributes:
            bonusAttr = 'shipBonusGI'
        else:
            bonusAttr = 'shipBonusGI2'
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr(bonusAttr), skill='Gallente Industrial', **kwargs)


class Effect730(BaseEffect):
    """
    shipBonusVelocityCI

    Used by:
    Variations of ship: Tayra (2 of 2)
    Ship: Crane
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('shipBonusCI'), skill='Caldari Industrial', **kwargs)


class Effect732(BaseEffect):
    """
    shipVelocityBonusAI

    Used by:
    Variations of ship: Bestower (2 of 2)
    Ship: Prorator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('shipBonusAI'), skill='Amarr Industrial', **kwargs)


class Effect736(BaseEffect):
    """
    shipBonusCapCapAB

    Used by:
    Ship: Apocalypse Imperial Issue
    Ship: Paladin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacitorCapacity', ship.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect744(BaseEffect):
    """
    surveyScanspeedBonusPostPercentDurationLocationShipModulesRequiringElectronics

    Used by:
    Modules named like: Signal Focusing Kit (8 of 8)
    Skill: Survey
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('CPU Management'),
                                      'duration', container.getModifiedItemAttr('scanspeedBonus') * level, **kwargs)


class Effect754(BaseEffect):
    """
    shipHybridDamageBonusCF

    Used by:
    Ship: Raptor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect757(BaseEffect):
    """
    shipETDamageAF

    Used by:
    Ship: Crucifier Navy Issue
    Ship: Crusader
    Ship: Imperial Navy Slicer
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect760(BaseEffect):
    """
    shipBonusSmallMissileRoFCF2

    Used by:
    Ship: Buzzard
    Ship: Hawk
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect763(BaseEffect):
    """
    missileDMGBonus

    Used by:
    Modules from group: Ballistic Control system (22 of 22)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        for dmgType in ('em', 'kinetic', 'explosive', 'thermal'):
            fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                               '%sDamage' % dmgType,
                                               container.getModifiedItemAttr('missileDamageMultiplierBonus'),
                                               stackingPenalties=True, **kwargs)


class Effect784(BaseEffect):
    """
    missileBombardmentMaxFlightTimeBonusPostPercentExplosionDelayOwnerCharModulesRequiringMissileLauncherOperation

    Used by:
    Implants named like: Zainou 'Deadeye' Missile Bombardment MB (6 of 6)
    Modules named like: Rocket Fuel Cache Partition (8 of 8)
    Implant: Antipharmakon Toxot
    Skill: Missile Bombardment
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context or 'booster' in context else True
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosionDelay', container.getModifiedItemAttr('maxFlightTimeBonus') * level,
                                        stackingPenalties=penalized, **kwargs)


class Effect804(BaseEffect):
    """
    ammoInfluenceCapNeed

    Used by:
    Items from category: Charge (514 of 973)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Dirty hack to work around cap charges setting cap booster
        # injection amount to zero
        rawAttr = module.item.getAttribute('capacitorNeed')
        if rawAttr is not None and rawAttr >= 0:
            module.boostItemAttr('capacitorNeed', module.getModifiedChargeAttr('capNeedBonus') or 0, **kwargs)


class Effect836(BaseEffect):
    """
    skillFreightBonus

    Used by:
    Modules named like: Cargohold Optimization (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', module.getModifiedItemAttr('cargoCapacityBonus'), **kwargs)


class Effect848(BaseEffect):
    """
    cloakingTargetingDelayBonusPostPercentCloakingTargetingDelayBonusForShipModulesRequiringCloaking

    Used by:
    Skill: Cloaking
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cloaking'),
                                      'cloakingTargetingDelay',
                                      skill.getModifiedItemAttr('cloakingTargetingDelayBonus') * skill.level, **kwargs)


class Effect854(BaseEffect):
    """
    cloakingScanResolutionMultiplier

    Used by:
    Modules from group: Cloaking Device (12 of 14)
    """

    type = 'offline'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('scanResolution',
                                  module.getModifiedItemAttr('scanResolutionMultiplier'),
                                  stackingPenalties=True, penaltyGroup='cloakingScanResolutionMultiplier', **kwargs)


class Effect856(BaseEffect):
    """
    warpSkillSpeed

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Warp Drive Speed WS (6 of 6)
    Implants named like: grade Ascendancy (10 of 12)
    Modules named like: Hyperspatial Velocity Optimizer (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        penalized = False if 'skill' in context or 'implant' in context else True
        fit.ship.boostItemAttr('baseWarpSpeed', container.getModifiedItemAttr('WarpSBonus'),
                               stackingPenalties=penalized, **kwargs)


class Effect874(BaseEffect):
    """
    shipProjectileOptimalBonuseMF2

    Used by:
    Ship: Cheetah
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect882(BaseEffect):
    """
    shipHybridRangeBonusCF2

    Used by:
    Ship: Harpy
    Ship: Raptor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect887(BaseEffect):
    """
    shipETspeedBonusAB2

    Used by:
    Variations of ship: Armageddon (3 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect889(BaseEffect):
    """
    missileLauncherSpeedMultiplier

    Used by:
    Modules from group: Ballistic Control system (22 of 22)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect891(BaseEffect):
    """
    shipCruiseMissileVelocityBonusCB3

    Used by:
    Variations of ship: Raven (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCB3'),
                                        skill='Caldari Battleship', **kwargs)


class Effect892(BaseEffect):
    """
    shipTorpedosVelocityBonusCB3

    Used by:
    Variations of ship: Raven (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCB3'),
                                        skill='Caldari Battleship', **kwargs)


class Effect896(BaseEffect):
    """
    covertOpsCpuBonus1

    Used by:
    Ships from group: Stealth Bomber (4 of 5)
    Subsystems named like: Defensive Covert Reconfiguration (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cloaking Device',
                                         'cpu', container.getModifiedItemAttr('cloakingCpuNeedBonus'), **kwargs)


class Effect898(BaseEffect):
    """
    shipMissileKineticDamageCF

    Used by:
    Ship: Buzzard
    Ship: Condor
    Ship: Hawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCF'),
                                        skill='Caldari Frigate', **kwargs)


class Effect899(BaseEffect):
    """
    shipMissileKineticDamageCC

    Used by:
    Ship: Cerberus
    Ship: Onyx
    Ship: Orthrus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCC'),
                                        skill='Caldari Cruiser', **kwargs)


class Effect900(BaseEffect):
    """
    shipDroneScoutThermalDamageGF2

    Used by:
    Ship: Helios
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Light Drone Operation'),
                                     'thermalDamage', ship.getModifiedItemAttr('shipBonusGF2'),
                                     skill='Gallente Frigate', **kwargs)


class Effect907(BaseEffect):
    """
    shipLaserRofAC2

    Used by:
    Ship: Omen
    Ship: Zealot
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusAC2'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect909(BaseEffect):
    """
    shipArmorHpAC2

    Used by:
    Ship: Augoror Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', ship.getModifiedItemAttr('shipBonusAC2'),
                               skill='Amarr Cruiser', **kwargs)


class Effect912(BaseEffect):
    """
    shipMissileLauncherRofCC2

    Used by:
    Ship: Onyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonusCC2'),
                                      skill='Caldari Cruiser', **kwargs)


class Effect918(BaseEffect):
    """
    shipDronesMaxGC2

    Used by:
    Ship: Guardian-Vexor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.extraAttributes.increase('maxActiveDrones', ship.getModifiedItemAttr('shipBonusGC2'),
                                     skill='Gallente Cruiser', **kwargs)


class Effect919(BaseEffect):
    """
    shipHybridTrackingGC2

    Used by:
    Ship: Enforcer
    Ship: Thorax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect958(BaseEffect):
    """
    shipArmorEmResistanceAC2

    Used by:
    Ship: Maller
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusAC2'),
                               skill='Amarr Cruiser', **kwargs)


class Effect959(BaseEffect):
    """
    shipArmorExplosiveResistanceAC2

    Used by:
    Ship: Maller
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusAC2'),
                               skill='Amarr Cruiser', **kwargs)


class Effect960(BaseEffect):
    """
    shipArmorKineticResistanceAC2

    Used by:
    Ship: Maller
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusAC2'),
                               skill='Amarr Cruiser', **kwargs)


class Effect961(BaseEffect):
    """
    shipArmorThermalResistanceAC2

    Used by:
    Ship: Maller
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusAC2'),
                               skill='Amarr Cruiser', **kwargs)


class Effect968(BaseEffect):
    """
    shipProjectileDmgMC2

    Used by:
    Variations of ship: Rupture (3 of 3)
    Ship: Cynabal
    Ship: Moracha
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMC2'),
                                      skill='Minmatar Cruiser', **kwargs)


class Effect980(BaseEffect):
    """
    cloakingWarpSafe

    Used by:
    Modules named like: Covert Ops Cloaking Device II (2 of 2)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.extraAttributes['cloaked'] = True


class Effect989(BaseEffect):
    """
    eliteBonusGunshipHybridOptimal1

    Used by:
    Ship: Enyo
    Ship: Harpy
    Ship: Ishkur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusGunship1'),
                                      skill='Assault Frigates', **kwargs)


class Effect991(BaseEffect):
    """
    eliteBonusGunshipLaserOptimal1

    Used by:
    Ship: Retribution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusGunship1'),
                                      skill='Assault Frigates', **kwargs)


class Effect996(BaseEffect):
    """
    eliteBonusGunshipHybridTracking2

    Used by:
    Ship: Enyo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect998(BaseEffect):
    """
    eliteBonusGunshipProjectileFalloff2

    Used by:
    Ship: Wolf
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect999(BaseEffect):
    """
    eliteBonusGunshipShieldBoost2

    Used by:
    Ship: Hawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect1001(BaseEffect):
    """
    eliteBonusGunshipCapRecharge2

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('rechargeRate', ship.getModifiedItemAttr('eliteBonusGunship2'),
                               skill='Assault Frigates', **kwargs)


class Effect1003(BaseEffect):
    """
    selfT2SmallLaserPulseDamageBonus

    Used by:
    Skill: Small Pulse Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Pulse Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1004(BaseEffect):
    """
    selfT2SmallLaserBeamDamageBonus

    Used by:
    Skill: Small Beam Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Beam Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1005(BaseEffect):
    """
    selfT2SmallHybridBlasterDamageBonus

    Used by:
    Skill: Small Blaster Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Blaster Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1006(BaseEffect):
    """
    selfT2SmallHybridRailDamageBonus

    Used by:
    Skill: Small Railgun Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Railgun Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1007(BaseEffect):
    """
    selfT2SmallProjectileACDamageBonus

    Used by:
    Skill: Small Autocannon Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Autocannon Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1008(BaseEffect):
    """
    selfT2SmallProjectileArtyDamageBonus

    Used by:
    Skill: Small Artillery Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Artillery Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1009(BaseEffect):
    """
    selfT2MediumLaserPulseDamageBonus

    Used by:
    Skill: Medium Pulse Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Pulse Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1010(BaseEffect):
    """
    selfT2MediumLaserBeamDamageBonus

    Used by:
    Skill: Medium Beam Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Beam Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1011(BaseEffect):
    """
    selfT2MediumHybridBlasterDamageBonus

    Used by:
    Skill: Medium Blaster Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Blaster Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1012(BaseEffect):
    """
    selfT2MediumHybridRailDamageBonus

    Used by:
    Skill: Medium Railgun Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Railgun Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1013(BaseEffect):
    """
    selfT2MediumProjectileACDamageBonus

    Used by:
    Skill: Medium Autocannon Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Autocannon Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1014(BaseEffect):
    """
    selfT2MediumProjectileArtyDamageBonus

    Used by:
    Skill: Medium Artillery Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Artillery Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1015(BaseEffect):
    """
    selfT2LargeLaserPulseDamageBonus

    Used by:
    Skill: Large Pulse Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Pulse Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1016(BaseEffect):
    """
    selfT2LargeLaserBeamDamageBonus

    Used by:
    Skill: Large Beam Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Beam Laser Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1017(BaseEffect):
    """
    selfT2LargeHybridBlasterDamageBonus

    Used by:
    Skill: Large Blaster Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Blaster Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1018(BaseEffect):
    """
    selfT2LargeHybridRailDamageBonus

    Used by:
    Skill: Large Railgun Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Railgun Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1019(BaseEffect):
    """
    selfT2LargeProjectileACDamageBonus

    Used by:
    Skill: Large Autocannon Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Autocannon Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1020(BaseEffect):
    """
    selfT2LargeProjectileArtyDamageBonus

    Used by:
    Skill: Large Artillery Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Artillery Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1021(BaseEffect):
    """
    eliteBonusGunshipHybridDmg2

    Used by:
    Ship: Harpy
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect1024(BaseEffect):
    """
    shipMissileHeavyVelocityBonusCC2

    Used by:
    Ship: Caracal
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCC2'),
                                        skill='Caldari Cruiser', **kwargs)


class Effect1025(BaseEffect):
    """
    shipMissileLightVelocityBonusCC2

    Used by:
    Ship: Caracal
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCC2'),
                                        skill='Caldari Cruiser', **kwargs)


class Effect1030(BaseEffect):
    """
    remoteArmorSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringRemoteArmorSystems

    Used by:
    Implants named like: Inherent Implants 'Noble' Remote Armor Repair Systems RA (6 of 6)
    Modules named like: Remote Repair Augmentor (6 of 8)
    Skill: Remote Armor Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems') or mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
            'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1033(BaseEffect):
    """
    eliteBonusLogisticRemoteArmorRepairCapNeed1

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogistics1'), skill='Logistics Cruisers', **kwargs)


class Effect1034(BaseEffect):
    """
    eliteBonusLogisticRemoteArmorRepairCapNeed2

    Used by:
    Ship: Guardian
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogistics2'), skill='Logistics Cruisers', **kwargs)


class Effect1035(BaseEffect):
    """
    eliteBonusLogisticShieldTransferCapNeed2

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogistics2'), skill='Logistics Cruisers', **kwargs)


class Effect1036(BaseEffect):
    """
    eliteBonusLogisticShieldTransferCapNeed1

    Used by:
    Ship: Basilisk
    Ship: Etana
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogistics1'), skill='Logistics Cruisers', **kwargs)


class Effect1046(BaseEffect):
    """
    shipRemoteArmorRangeGC1

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'maxRange',
                                      src.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect1047(BaseEffect):
    """
    shipRemoteArmorRangeAC2

    Used by:
    Ship: Guardian
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect1048(BaseEffect):
    """
    shipShieldTransferRangeCC1

    Used by:
    Ship: Basilisk
    Ship: Etana
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'maxRange',
                                      src.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect1049(BaseEffect):
    """
    shipShieldTransferRangeMC2

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'maxRange',
                                      src.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect1056(BaseEffect):
    """
    eliteBonusHeavyGunshipHybridOptimal1

    Used by:
    Ship: Eagle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1057(BaseEffect):
    """
    eliteBonusHeavyGunshipProjectileOptimal1

    Used by:
    Ship: Muninn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1058(BaseEffect):
    """
    eliteBonusHeavyGunshipLaserOptimal1

    Used by:
    Ship: Zealot
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1060(BaseEffect):
    """
    eliteBonusHeavyGunshipProjectileFallOff1

    Used by:
    Ship: Vagabond
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1061(BaseEffect):
    """
    eliteBonusHeavyGunshipHybridDmg2

    Used by:
    Ship: Deimos
    Ship: Eagle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1062(BaseEffect):
    """
    eliteBonusHeavyGunshipLaserDmg2

    Used by:
    Ship: Zealot
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1063(BaseEffect):
    """
    eliteBonusHeavyGunshipProjectileTracking2

    Used by:
    Ship: Muninn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1080(BaseEffect):
    """
    eliteBonusHeavyGunshipHybridFallOff1

    Used by:
    Ship: Deimos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1081(BaseEffect):
    """
    eliteBonusHeavyGunshipHeavyMissileFlightTime1

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosionDelay', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                        skill='Heavy Assault Cruisers', **kwargs)


class Effect1082(BaseEffect):
    """
    eliteBonusHeavyGunshipLightMissileFlightTime1

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'explosionDelay', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                        skill='Heavy Assault Cruisers', **kwargs)


class Effect1084(BaseEffect):
    """
    eliteBonusHeavyGunshipDroneControlRange1

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.extraAttributes.increase('droneControlRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                     skill='Heavy Assault Cruisers', **kwargs)


class Effect1087(BaseEffect):
    """
    eliteBonusHeavyGunshipProjectileDmg2

    Used by:
    Ship: Vagabond
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect1099(BaseEffect):
    """
    shipProjectileTrackingMF2

    Used by:
    Variations of ship: Slasher (3 of 3)
    Ship: Republic Fleet Firetail
    Ship: Wolf
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusMF2'),
                                      skill='Minmatar Frigate', **kwargs)


class Effect1176(BaseEffect):
    """
    accerationControlSkillAb&MwdSpeedBoost

    Used by:
    Implant: Zor's Custom Navigation Hyper-Link
    Skill: Acceleration Control
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'speedFactor', container.getModifiedItemAttr('speedFBonus') * level, **kwargs)


class Effect1179(BaseEffect):
    """
    eliteBonusGunshipLaserDamage2

    Used by:
    Ship: Retribution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect1181(BaseEffect):
    """
    eliteBonusLogisticEnergyTransferCapNeed1

    Used by:
    Ship: Guardian
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'capacitorNeed', ship.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect1182(BaseEffect):
    """
    shipEnergyTransferRange1

    Used by:
    Ship: Guardian
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusAC'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect1183(BaseEffect):
    """
    eliteBonusLogisticEnergyTransferCapNeed2

    Used by:
    Ship: Basilisk
    Ship: Etana
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'capacitorNeed', ship.getModifiedItemAttr('eliteBonusLogistics2'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect1184(BaseEffect):
    """
    shipEnergyTransferRange2

    Used by:
    Ship: Basilisk
    Ship: Etana
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCC2'),
                                      skill='Caldari Cruiser', **kwargs)


class Effect1185(BaseEffect):
    """
    structureStealthEmitterArraySigDecrease

    Used by:
    Implants named like: X Instinct Booster (4 of 4)
    Implants named like: grade Halo (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', implant.getModifiedItemAttr('signatureRadiusBonus'), **kwargs)


class Effect1190(BaseEffect):
    """
    iceHarvestCycleTimeModulesRequiringIceHarvesting

    Used by:
    Implants named like: Inherent Implants 'Yeti' Ice Harvesting IH (3 of 3)
    Module: Medium Ice Harvester Accelerator I
    Skill: Ice Harvesting
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                      'duration', container.getModifiedItemAttr('iceHarvestCycleBonus') * level, **kwargs)


class Effect1200(BaseEffect):
    """
    miningInfoMultiplier

    Used by:
    Charges from group: Mining Crystal (40 of 40)
    Charges named like: Mining Crystal (42 of 42)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('specialtyMiningAmount',
                                module.getModifiedChargeAttr('specialisationAsteroidYieldMultiplier'), **kwargs)


class Effect1212(BaseEffect):
    """
    crystalMiningamountInfo2

    Used by:
    Modules from group: Frequency Mining Laser (3 of 3)
    """

    runTime = 'late'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.preAssignItemAttr('specialtyMiningAmount', module.getModifiedItemAttr('miningAmount'), **kwargs)


class Effect1215(BaseEffect):
    """
    shipEnergyDrainAmountAF1

    Used by:
    Ship: Caedes
    Ship: Cruor
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('shipBonusAF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect1218(BaseEffect):
    """
    shipBonusPirateSmallHybridDmg

    Used by:
    Ship: Daredevil
    Ship: Hecate
    Ship: Sunesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1219(BaseEffect):
    """
    shipEnergyVampireTransferAmountBonusAB

    Used by:
    Ship: Bhaalgorn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('shipBonusAB'),
                                      skill='Amarr Battleship', **kwargs)


class Effect1220(BaseEffect):
    """
    shipEnergyVampireTransferAmountBonusAc

    Used by:
    Ship: Ashimmu
    Ship: Rabisu
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('shipBonusAC'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect1221(BaseEffect):
    """
    shipStasisWebRangeBonusMB

    Used by:
    Ship: Bhaalgorn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMB'),
                                      skill='Minmatar Battleship', **kwargs)


class Effect1222(BaseEffect):
    """
    shipStasisWebRangeBonusMC2

    Used by:
    Ship: Ashimmu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMC2'),
                                      skill='Minmatar Cruiser', **kwargs)


class Effect1228(BaseEffect):
    """
    shipProjectileTrackingGF

    Used by:
    Ship: Chremoas
    Ship: Dramiel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect1230(BaseEffect):
    """
    shipMissileVelocityPirateFactionFrigate

    Used by:
    Ship: Barghest
    Ship: Garmur
    Ship: Orthrus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1232(BaseEffect):
    """
    shipProjectileRofPirateCruiser

    Used by:
    Ship: Cynabal
    Ship: Moracha
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1233(BaseEffect):
    """
    shipHybridDmgPirateCruiser

    Used by:
    Ship: Gnosis
    Ship: Vigilant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1234(BaseEffect):
    """
    shipMissileVelocityPirateFactionLight

    Used by:
    Ship: Corax
    Ship: Talwar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1239(BaseEffect):
    """
    shipProjectileRofPirateBattleship

    Used by:
    Ship: Machariel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1240(BaseEffect):
    """
    shipHybridDmgPirateBattleship

    Used by:
    Ship: Vindicator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect1255(BaseEffect):
    """
    setBonusBloodraider

    Used by:
    Implants named like: grade Talisman (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'durationBonus', implant.getModifiedItemAttr('implantSetBloodraider'), **kwargs)


class Effect1256(BaseEffect):
    """
    setBonusBloodraiderNosferatu

    Used by:
    Implants named like: grade Talisman (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capacitor Emission Systems'),
                                      'duration', implant.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect1261(BaseEffect):
    """
    setBonusSerpentis

    Used by:
    Implants named like: grade Snake (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'velocityBonus', implant.getModifiedItemAttr('implantSetSerpentis'), **kwargs)


class Effect1264(BaseEffect):
    """
    interceptor2HybridTracking

    Used by:
    Ship: Taranis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusInterceptor2'),
                                      skill='Interceptors', **kwargs)


class Effect1268(BaseEffect):
    """
    interceptor2LaserTracking

    Used by:
    Ship: Crusader
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusInterceptor2'),
                                      skill='Interceptors', **kwargs)


class Effect1281(BaseEffect):
    """
    structuralAnalysisEffect

    Used by:
    Implants named like: Inherent Implants 'Noble' Repair Proficiency RP (6 of 6)
    Modules named like: Auxiliary Nano Pump (8 of 8)
    Implant: Imperial Navy Modified 'Noble' Implant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        penalized = 'implant' not in context
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', container.getModifiedItemAttr('repairBonus'),
                                      stackingPenalties=penalized, **kwargs)


class Effect1318(BaseEffect):
    """
    ewSkillScanStrengthBonus

    Used by:
    Modules named like: Particle Dispersion Augmentor (8 of 8)
    Skill: Signal Dispersion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        groups = ('ECM', 'Burst Jammer')
        level = container.level if 'skill' in context else 1
        for scanType in ('Gravimetric', 'Ladar', 'Magnetometric', 'Radar'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                          'scan{0}StrengthBonus'.format(scanType),
                                          container.getModifiedItemAttr('scanSkillEwStrengthBonus') * level,
                                          stackingPenalties=False if 'skill' in context else True, **kwargs)


class Effect1360(BaseEffect):
    """
    ewSkillRsdCapNeedBonusSkillLevel

    Used by:
    Implants named like: Zainou 'Gypsy' Sensor Linking SL (6 of 6)
    Skill: Sensor Linking
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Sensor Linking'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1361(BaseEffect):
    """
    ewSkillTdCapNeedBonusSkillLevel

    Used by:
    Implants named like: Zainou 'Gypsy' Weapon Disruption WD (6 of 6)
    Skill: Weapon Disruption
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1370(BaseEffect):
    """
    ewSkillTpCapNeedBonusSkillLevel

    Used by:
    Implants named like: Zainou 'Gypsy' Target Painting TG (6 of 6)
    Skill: Target Painting
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Target Painting'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1372(BaseEffect):
    """
    ewSkillEwCapNeedSkillLevel

    Used by:
    Implants named like: Zainou 'Gypsy' Electronic Warfare EW (6 of 6)
    Modules named like: Signal Disruption Amplifier (8 of 8)
    Skill: Electronic Warfare
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1395(BaseEffect):
    """
    shieldBoostAmplifierPassive

    Used by:
    Implants named like: grade Crystal (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', container.getModifiedItemAttr('shieldBoostMultiplier'), **kwargs)


class Effect1397(BaseEffect):
    """
    setBonusGuristas

    Used by:
    Implants named like: grade Crystal (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'shieldBoostMultiplier', implant.getModifiedItemAttr('implantSetGuristas'), **kwargs)


class Effect1409(BaseEffect):
    """
    systemScanDurationSkillAstrometrics

    Used by:
    Implants named like: Poteque 'Prospector' Astrometric Acquisition AQ (3 of 3)
    Skill: Astrometric Acquisition
    Skill: Astrometrics
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Astrometrics'),
                                      'duration', container.getModifiedItemAttr('durationBonus') * level, **kwargs)


class Effect1410(BaseEffect):
    """
    propulsionSkillCapNeedBonusSkillLevel

    Used by:
    Implants named like: Zainou 'Gypsy' Propulsion Jamming PJ (6 of 6)
    Skill: Propulsion Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Propulsion Jamming'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect1412(BaseEffect):
    """
    shipBonusHybridOptimalCB

    Used by:
    Ship: Rokh
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect1434(BaseEffect):
    """
    caldariShipEwStrengthCB

    Used by:
    Ship: Scorpion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for sensorType in ('Gravimetric', 'Ladar', 'Magnetometric', 'Radar'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Electronic Warfare'),
                                          'scan{0}StrengthBonus'.format(sensorType),
                                          ship.getModifiedItemAttr('shipBonusCB'),
                                          skill='Caldari Battleship', **kwargs)


class Effect1441(BaseEffect):
    """
    caldariShipEwOptimalRangeCB3

    Used by:
    Ship: Scorpion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCB3'),
                                      skill='Caldari Battleship', **kwargs)


class Effect1442(BaseEffect):
    """
    caldariShipEwOptimalRangeCC2

    Used by:
    Ship: Blackbird
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect1443(BaseEffect):
    """
    caldariShipEwCapacitorNeedCC

    Used by:
    Ship: Chameleon
    Ship: Falcon
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusCC'),
                                      skill='Caldari Cruiser', **kwargs)


class Effect1445(BaseEffect):
    """
    ewSkillRsdMaxRangeBonus

    Used by:
    Modules named like: Particle Dispersion Projector (8 of 8)
    Skill: Long Distance Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Sensor Linking'),
                                      'maxRange', container.getModifiedItemAttr('rangeSkillBonus') * level,
                                      stackingPenalties='skill' not in context, **kwargs)


class Effect1446(BaseEffect):
    """
    ewSkillTpMaxRangeBonus

    Used by:
    Modules named like: Particle Dispersion Projector (8 of 8)
    Skill: Long Distance Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'maxRange', container.getModifiedItemAttr('rangeSkillBonus') * level,
                                      stackingPenalties='skill' not in context, **kwargs)


class Effect1448(BaseEffect):
    """
    ewSkillTdMaxRangeBonus

    Used by:
    Modules named like: Particle Dispersion Projector (8 of 8)
    Skill: Long Distance Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Weapon Disruptor',
                                      'maxRange', container.getModifiedItemAttr('rangeSkillBonus') * level,
                                      stackingPenalties='skill' not in context, **kwargs)


class Effect1449(BaseEffect):
    """
    ewSkillRsdFallOffBonus

    Used by:
    Skill: Frequency Modulation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Sensor Linking'),
                                      'falloffEffectiveness', skill.getModifiedItemAttr('falloffBonus') * skill.level, **kwargs)


class Effect1450(BaseEffect):
    """
    ewSkillTpFallOffBonus

    Used by:
    Skill: Frequency Modulation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'falloffEffectiveness', skill.getModifiedItemAttr('falloffBonus') * skill.level, **kwargs)


class Effect1451(BaseEffect):
    """
    ewSkillTdFallOffBonus

    Used by:
    Skill: Frequency Modulation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Weapon Disruptor',
                                      'falloffEffectiveness', skill.getModifiedItemAttr('falloffBonus') * skill.level, **kwargs)


class Effect1452(BaseEffect):
    """
    ewSkillEwMaxRangeBonus

    Used by:
    Implants named like: grade Centurion (10 of 12)
    Modules named like: Particle Dispersion Projector (8 of 8)
    Skill: Long Distance Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'maxRange', container.getModifiedItemAttr('rangeSkillBonus') * level,
                                      stackingPenalties='skill' not in context and 'implant' not in context, **kwargs)


class Effect1453(BaseEffect):
    """
    ewSkillEwFallOffBonus

    Used by:
    Skill: Frequency Modulation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'falloffEffectiveness', skill.getModifiedItemAttr('falloffBonus') * skill.level, **kwargs)


class Effect1472(BaseEffect):
    """
    missileSkillAoeCloudSizeBonus

    Used by:
    Implants named like: Zainou 'Deadeye' Guided Missile Precision GP (6 of 6)
    Modules named like: Warhead Rigor Catalyst (8 of 8)
    Skill: Guided Missile Precision
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalize = False if 'skill' in context or 'implant' in context else True
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeCloudSize', container.getModifiedItemAttr('aoeCloudSizeBonus') * level,
                                        stackingPenalties=penalize, **kwargs)


class Effect1500(BaseEffect):
    """
    shieldOperationSkillBoostCapacitorNeedBonus

    Used by:
    Modules named like: Core Defense Capacitor Safeguard (8 of 8)
    Skill: Shield Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'capacitorNeed', container.getModifiedItemAttr('shieldBoostCapacitorBonus') * level, **kwargs)


class Effect1550(BaseEffect):
    """
    ewSkillTargetPaintingStrengthBonus

    Used by:
    Skill: Signature Focusing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus',
                                      skill.getModifiedItemAttr('scanSkillTargetPaintStrengthBonus') * skill.level, **kwargs)


class Effect1551(BaseEffect):
    """
    minmatarShipEwTargetPainterMF2

    Used by:
    Ship: Hyena
    Ship: Vigil
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('shipBonusMF2'),
                                      skill='Minmatar Frigate', **kwargs)


class Effect1577(BaseEffect):
    """
    haloSetBonus

    Used by:
    Implants named like: grade Halo (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(
            lambda implant: implant.item.requiresSkill('Cybernetics'),
            'signatureRadiusBonus', implant.getModifiedItemAttr('implantSetHalo'), **kwargs)


class Effect1579(BaseEffect):
    """
    setBonusSansha

    Used by:
    Implants named like: grade Amulet (18 of 18)
    Implant: High-grade Halo Omega
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'armorHpBonus', implant.getModifiedItemAttr('implantSetAmulet') or 1, **kwargs)


class Effect1581(BaseEffect):
    """
    jumpDriveSkillsRangeBonus

    Used by:
    Skill: Jump Drive Calibration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('jumpDriveRange', skill.getModifiedItemAttr('jumpDriveRangeBonus') * skill.level, **kwargs)


class Effect1585(BaseEffect):
    """
    capitalTurretSkillLaserDamage

    Used by:
    Skill: Capital Energy Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1586(BaseEffect):
    """
    capitalTurretSkillProjectileDamage

    Used by:
    Skill: Capital Projectile Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Projectile Turret'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1587(BaseEffect):
    """
    capitalTurretSkillHybridDamage

    Used by:
    Skill: Capital Hybrid Turret
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1588(BaseEffect):
    """
    capitalLauncherSkillCitadelKineticDamage

    Used by:
    Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
    Skill: XL Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect1590(BaseEffect):
    """
    missileSkillAoeVelocityBonus

    Used by:
    Implants named like: Zainou 'Deadeye' Target Navigation Prediction TN (6 of 6)
    Modules named like: Warhead Flare Catalyst (8 of 8)
    Skill: Target Navigation Prediction
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalize = False if 'skill' in context or 'implant' in context else True
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeVelocity', container.getModifiedItemAttr('aoeVelocityBonus') * level,
                                        stackingPenalties=penalize, **kwargs)


class Effect1592(BaseEffect):
    """
    capitalLauncherSkillCitadelEmDamage

    Used by:
    Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
    Skill: XL Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'),
                                        'emDamage', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect1593(BaseEffect):
    """
    capitalLauncherSkillCitadelExplosiveDamage

    Used by:
    Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
    Skill: XL Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect1594(BaseEffect):
    """
    capitalLauncherSkillCitadelThermalDamage

    Used by:
    Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
    Skill: XL Torpedoes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect1595(BaseEffect):
    """
    missileSkillWarheadUpgradesEmDamageBonus

    Used by:
    Implants named like: Agency 'Pyrolancea' DB Dose (4 of 4)
    Skill: Warhead Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        mod = src.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'emDamage', src.getModifiedItemAttr('damageMultiplierBonus') * mod, **kwargs)


class Effect1596(BaseEffect):
    """
    missileSkillWarheadUpgradesExplosiveDamageBonus

    Used by:
    Implants named like: Agency 'Pyrolancea' DB Dose (4 of 4)
    Skill: Warhead Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        mod = src.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', src.getModifiedItemAttr('damageMultiplierBonus') * mod, **kwargs)


class Effect1597(BaseEffect):
    """
    missileSkillWarheadUpgradesKineticDamageBonus

    Used by:
    Implants named like: Agency 'Pyrolancea' DB Dose (4 of 4)
    Skill: Warhead Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        mod = src.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', src.getModifiedItemAttr('damageMultiplierBonus') * mod, **kwargs)


class Effect1615(BaseEffect):
    """
    shipAdvancedSpaceshipCommandAgilityBonus

    Used by:
    Items from market group: Ships > Capital Ships (40 of 41)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        skillName = 'Advanced Spaceship Command'
        skill = fit.character.getSkill(skillName)
        fit.ship.boostItemAttr('agility', skill.getModifiedItemAttr('agilityBonus'), skill=skillName, **kwargs)


class Effect1616(BaseEffect):
    """
    skillCapitalShipsAdvancedAgility

    Used by:
    Skill: Capital Ships
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        if fit.ship.item.requiresSkill('Capital Ships'):
            fit.ship.boostItemAttr('agility', skill.getModifiedItemAttr('agilityBonus') * skill.level, **kwargs)


class Effect1617(BaseEffect):
    """
    shipCapitalAgilityBonus

    Used by:
    Items from market group: Ships > Capital Ships (31 of 41)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('agility', src.getModifiedItemAttr('advancedCapitalAgility'),
                                  stackingPenalties=True, **kwargs)


class Effect1634(BaseEffect):
    """
    capitalShieldOperationSkillCapacitorNeedBonus

    Used by:
    Modules named like: Core Defense Capacitor Safeguard (8 of 8)
    Skill: Capital Shield Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'),
                                      'capacitorNeed', container.getModifiedItemAttr('shieldBoostCapacitorBonus') * level, **kwargs)


class Effect1635(BaseEffect):
    """
    capitalRepairSystemsSkillDurationBonus

    Used by:
    Modules named like: Nanobot Accelerator (8 of 8)
    Skill: Capital Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'),
                                      'duration', container.getModifiedItemAttr('durationSkillBonus') * level,
                                      stackingPenalties='skill' not in context, **kwargs)


class Effect1638(BaseEffect):
    """
    skillAdvancedWeaponUpgradesPowerNeedBonus

    Used by:
    Skill: Advanced Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: (mod.item.requiresSkill('Gunnery') or
                         mod.item.requiresSkill('Missile Launcher Operation') or
                         mod.item.requiresSkill('Vorton Projector Operation')),
            'power', skill.getModifiedItemAttr('powerNeedBonus') * skill.level, **kwargs)


class Effect1643(BaseEffect):
    """
    armoredCommandMindlink

    Used by:
    Implant: Armored Command Mindlink
    Implant: Federation Navy Command Mindlink
    Implant: Imperial Navy Command Mindlink
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'buffDuration',
                                      src.getModifiedItemAttr('mindlinkBonus'), **kwargs)


class Effect1644(BaseEffect):
    """
    skirmishCommandMindlink

    Used by:
    Implant: Federation Navy Command Mindlink
    Implant: Republic Fleet Command Mindlink
    Implant: Skirmish Command Mindlink
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'buffDuration',
                                      src.getModifiedItemAttr('mindlinkBonus'), **kwargs)


class Effect1645(BaseEffect):
    """
    shieldCommandMindlink

    Used by:
    Implants from group: Cyber Leadership (4 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'buffDuration',
                                      src.getModifiedItemAttr('mindlinkBonus'), **kwargs)


class Effect1646(BaseEffect):
    """
    informationCommandMindlink

    Used by:
    Implant: Caldari Navy Command Mindlink
    Implant: Imperial Navy Command Mindlink
    Implant: Information Command Mindlink
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'buffDuration',
                                      src.getModifiedItemAttr('mindlinkBonus'), **kwargs)


class Effect1650(BaseEffect):
    """
    skillSiegeModuleConsumptionQuantityBonus

    Used by:
    Skill: Tactical Weapon Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        amount = -skill.getModifiedItemAttr('consumptionQuantityBonus')
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
                                         'consumptionQuantity', amount * skill.level, **kwargs)


class Effect1657(BaseEffect):
    """
    missileSkillWarheadUpgradesThermalDamageBonus

    Used by:
    Implants named like: Agency 'Pyrolancea' DB Dose (4 of 4)
    Skill: Warhead Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        mod = src.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', src.getModifiedItemAttr('damageMultiplierBonus') * mod, **kwargs)


class Effect1668(BaseEffect):
    """
    freighterCargoBonusA2

    Used by:
    Variations of ship: Providence (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('freighterBonusA2'), skill='Amarr Freighter', **kwargs)


class Effect1669(BaseEffect):
    """
    freighterCargoBonusC2

    Used by:
    Variations of ship: Charon (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('freighterBonusC2'), skill='Caldari Freighter', **kwargs)


class Effect1670(BaseEffect):
    """
    freighterCargoBonusG2

    Used by:
    Variations of ship: Obelisk (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('freighterBonusG2'), skill='Gallente Freighter', **kwargs)


class Effect1671(BaseEffect):
    """
    freighterCargoBonusM2

    Used by:
    Variations of ship: Fenrir (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', ship.getModifiedItemAttr('freighterBonusM2'), skill='Minmatar Freighter', **kwargs)


class Effect1672(BaseEffect):
    """
    freighterMaxVelocityBonusA1

    Used by:
    Ship: Providence
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('freighterBonusA1'), skill='Amarr Freighter', **kwargs)


class Effect1673(BaseEffect):
    """
    freighterMaxVelocityBonusC1

    Used by:
    Ship: Charon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('freighterBonusC1'), skill='Caldari Freighter', **kwargs)


class Effect1674(BaseEffect):
    """
    freighterMaxVelocityBonusG1

    Used by:
    Ship: Obelisk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('freighterBonusG1'), skill='Gallente Freighter', **kwargs)


class Effect1675(BaseEffect):
    """
    freighterMaxVelocityBonusM1

    Used by:
    Ship: Fenrir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('freighterBonusM1'), skill='Minmatar Freighter', **kwargs)


class Effect1720(BaseEffect):
    """
    shieldBoostAmplifier

    Used by:
    Modules from group: Capacitor Power Relay (20 of 20)
    Modules from group: Shield Boost Amplifier (25 of 25)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Operation') or mod.item.requiresSkill('Capital Shield Operation'),
            'shieldBonus', module.getModifiedItemAttr('shieldBoostMultiplier'),
            stackingPenalties=True, **kwargs)


class Effect1722(BaseEffect):
    """
    jumpDriveSkillsCapacitorNeedBonus

    Used by:
    Skill: Jump Drive Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('jumpDriveCapacitorNeed',
                               skill.getModifiedItemAttr('jumpDriveCapacitorNeedBonus') * skill.level, **kwargs)


class Effect1730(BaseEffect):
    """
    droneDmgBonus

    Used by:
    Skills from group: Drones (8 of 26)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill(skill),
                                     'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect1738(BaseEffect):
    """
    doHacking

    Used by:
    Modules from group: Data Miners (10 of 10)
    """

    type = 'active'


class Effect1763(BaseEffect):
    """
    missileSkillRapidLauncherRoF

    Used by:
    Implants named like: Zainou 'Deadeye' Rapid Launch RL (6 of 6)
    Implant: Standard Cerebral Accelerator
    Implant: Whelan Machorin's Ballistic Smartlink
    Skill: Missile Launcher Operation
    Skill: Rapid Launch
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', container.getModifiedItemAttr('rofBonus') * level, **kwargs)


class Effect1764(BaseEffect):
    """
    missileSkillMissileProjectileVelocityBonus

    Used by:
    Implants named like: Zainou 'Deadeye' Missile Projection MP (6 of 6)
    Modules named like: Hydraulic Bay Thrusters (8 of 8)
    Skill: Missile Projection
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context else True
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', container.getModifiedItemAttr('speedFactor') * level,
                                        stackingPenalties=penalized, **kwargs)


class Effect1773(BaseEffect):
    """
    shipBonusSHTFalloffGF2

    Used by:
    Ship: Atron
    Ship: Daredevil
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect1804(BaseEffect):
    """
    shipArmorEMResistanceAF1

    Used by:
    Ship: Astero
    Ship: Malice
    Ship: Punisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect1805(BaseEffect):
    """
    shipArmorTHResistanceAF1

    Used by:
    Ship: Astero
    Ship: Malice
    Ship: Punisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusAF'),
                               skill='Amarr Frigate', **kwargs)


class Effect1806(BaseEffect):
    """
    shipArmorKNResistanceAF1

    Used by:
    Ship: Astero
    Ship: Malice
    Ship: Punisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusAF'),
                               skill='Amarr Frigate', **kwargs)


class Effect1807(BaseEffect):
    """
    shipArmorEXResistanceAF1

    Used by:
    Ship: Astero
    Ship: Malice
    Ship: Punisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusAF'),
                               skill='Amarr Frigate', **kwargs)


class Effect1812(BaseEffect):
    """
    shipShieldEMResistanceCC2

    Used by:
    Variations of ship: Moa (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', ship.getModifiedItemAttr('shipBonusCC2'),
                               skill='Caldari Cruiser', **kwargs)


class Effect1813(BaseEffect):
    """
    shipShieldThermalResistanceCC2

    Used by:
    Variations of ship: Moa (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', ship.getModifiedItemAttr('shipBonusCC2'),
                               skill='Caldari Cruiser', **kwargs)


class Effect1814(BaseEffect):
    """
    shipShieldKineticResistanceCC2

    Used by:
    Variations of ship: Moa (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', ship.getModifiedItemAttr('shipBonusCC2'),
                               skill='Caldari Cruiser', **kwargs)


class Effect1815(BaseEffect):
    """
    shipShieldExplosiveResistanceCC2

    Used by:
    Variations of ship: Moa (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusCC2'),
                               skill='Caldari Cruiser', **kwargs)


class Effect1816(BaseEffect):
    """
    shipShieldEMResistanceCF2

    Used by:
    Variations of ship: Merlin (3 of 4)
    Ship: Cambion
    Ship: Whiptail
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', ship.getModifiedItemAttr('shipBonusCF'),
                               skill='Caldari Frigate', **kwargs)


class Effect1817(BaseEffect):
    """
    shipShieldThermalResistanceCF2

    Used by:
    Variations of ship: Merlin (3 of 4)
    Ship: Cambion
    Ship: Whiptail
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', ship.getModifiedItemAttr('shipBonusCF'),
                               skill='Caldari Frigate', **kwargs)


class Effect1819(BaseEffect):
    """
    shipShieldKineticResistanceCF2

    Used by:
    Variations of ship: Merlin (3 of 4)
    Ship: Cambion
    Ship: Whiptail
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', ship.getModifiedItemAttr('shipBonusCF'),
                               skill='Caldari Frigate', **kwargs)


class Effect1820(BaseEffect):
    """
    shipShieldExplosiveResistanceCF2

    Used by:
    Variations of ship: Merlin (3 of 4)
    Ship: Cambion
    Ship: Whiptail
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusCF'),
                               skill='Caldari Frigate', **kwargs)


class Effect1848(BaseEffect):
    """
    miningForemanMindlink

    Used by:
    Implant: Mining Foreman Mindlink
    Implant: ORE Mining Director Mindlink
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('mindlinkBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'buffDuration',
                                      src.getModifiedItemAttr('mindlinkBonus'), **kwargs)


class Effect1851(BaseEffect):
    """
    selfRof

    Used by:
    Skills named like: Missile Specialization (4 of 5)
    Skill: Rocket Specialization
    Skill: Torpedo Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill),
                                      'speed', skill.getModifiedItemAttr('rofBonus') * skill.level, **kwargs)


class Effect1862(BaseEffect):
    """
    shipMissileEMDamageCF2

    Used by:
    Ship: Garmur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusCF2'),
                                        skill='Caldari Frigate', **kwargs)


class Effect1863(BaseEffect):
    """
    shipMissileThermalDamageCF2

    Used by:
    Ship: Garmur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusCF2'),
                                        skill='Caldari Frigate', **kwargs)


class Effect1864(BaseEffect):
    """
    shipMissileExplosiveDamageCF2

    Used by:
    Ship: Garmur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusCF2'),
                                        skill='Caldari Frigate', **kwargs)


class Effect1882(BaseEffect):
    """
    miningYieldMultiplyPercent

    Used by:
    Variations of module: Mining Laser Upgrade I (5 of 5)
    Module: Frostline 'Omnivore' Harvester Upgrade
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'miningAmount', module.getModifiedItemAttr('miningAmountBonus'), **kwargs)


class Effect1885(BaseEffect):
    """
    shipCruiseLauncherROFBonus2CB

    Used by:
    Ship: Raven
    Ship: Raven State Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Cruise',
                                      'speed', ship.getModifiedItemAttr('shipBonus2CB'),
                                      skill='Caldari Battleship', **kwargs)


class Effect1886(BaseEffect):
    """
    shipSiegeLauncherROFBonus2CB

    Used by:
    Ship: Raven
    Ship: Raven State Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
                                      'speed', ship.getModifiedItemAttr('shipBonus2CB'),
                                      skill='Caldari Battleship', **kwargs)


class Effect1896(BaseEffect):
    """
    eliteBargeBonusIceHarvestingCycleTimeBarge3

    Used by:
    Ships from group: Exhumer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                      'duration', ship.getModifiedItemAttr('eliteBonusBarge2'),
                                      skill='Exhumers', **kwargs)


class Effect1910(BaseEffect):
    """
    eliteBonusVampireDrainAmount2

    Used by:
    Ship: Curse
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1911(BaseEffect):
    """
    eliteReconBonusGravimetricStrength2

    Used by:
    Ship: Chameleon
    Ship: Falcon
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanGravimetricStrengthBonus', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1912(BaseEffect):
    """
    eliteReconBonusMagnetometricStrength2

    Used by:
    Ship: Chameleon
    Ship: Falcon
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanMagnetometricStrengthBonus', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1913(BaseEffect):
    """
    eliteReconBonusRadarStrength2

    Used by:
    Ship: Chameleon
    Ship: Falcon
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanRadarStrengthBonus', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1914(BaseEffect):
    """
    eliteReconBonusLadarStrength2

    Used by:
    Ship: Chameleon
    Ship: Falcon
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanLadarStrengthBonus', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1921(BaseEffect):
    """
    eliteReconStasisWebBonus2

    Used by:
    Ship: Huginn
    Ship: Moracha
    Ship: Rapier
    Ship: Victor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1922(BaseEffect):
    """
    eliteReconScramblerRangeBonus2

    Used by:
    Ship: Arazu
    Ship: Enforcer
    Ship: Lachesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect1959(BaseEffect):
    """
    armorReinforcerMassAdd

    Used by:
    Modules from group: Armor Plate (51 of 51)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('mass', module.getModifiedItemAttr('massAddition'), **kwargs)


class Effect1964(BaseEffect):
    """
    shipBonusShieldTransferCapneed1

    Used by:
    Ship: Osprey
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect1969(BaseEffect):
    """
    shipBonusRemoteArmorRepairCapNeedGC1

    Used by:
    Ship: Exequror
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect1996(BaseEffect):
    """
    caldariShipEwCapacitorNeedCF2

    Used by:
    Ship: Griffin
    Ship: Kitsune
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusCF2'),
                                      skill='Caldari Frigate', **kwargs)


class Effect2000(BaseEffect):
    """
    droneRangeBonusAdd

    Used by:
    Modules from group: Drone Control Range Module (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        amount = module.getModifiedItemAttr('droneRangeBonus')
        fit.extraAttributes.increase('droneControlRange', amount, **kwargs)


class Effect2008(BaseEffect):
    """
    cynosuralDurationBonus

    Used by:
    Ships from group: Black Ops (5 of 5)
    Ships from group: Force Recon Ship (8 of 9)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cynosural Field Theory'),
                                      'duration', ship.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect2013(BaseEffect):
    """
    droneMaxVelocityBonus

    Used by:
    Modules named like: Drone Speed Augmentor (6 of 8)
    Implant: Overmind 'Goliath' Drone Tuner T25-10S
    Implant: Overmind 'Hawkmoth' Drone Tuner S10-25T
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalties = False if 'implant' in context else True
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxVelocity', container.getModifiedItemAttr('droneMaxVelocityBonus') * level,
                                     stackingPenalties=penalties, **kwargs)


class Effect2014(BaseEffect):
    """
    droneMaxRangeBonus

    Used by:
    Modules named like: Drone Scope Chip (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context else True
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxRange',
                                     container.getModifiedItemAttr('rangeSkillBonus') * level,
                                     stackingPenalties=penalized, **kwargs)


class Effect2015(BaseEffect):
    """
    droneDurabilityShieldCapBonus

    Used by:
    Modules named like: Drone Durability Enhancer (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity', module.getModifiedItemAttr('hullHpBonus'), **kwargs)


class Effect2016(BaseEffect):
    """
    droneDurabilityArmorHPBonus

    Used by:
    Modules named like: Drone Durability Enhancer (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP', module.getModifiedItemAttr('hullHpBonus'), **kwargs)


class Effect2017(BaseEffect):
    """
    droneDurabilityHPBonus

    Used by:
    Modules named like: Drone Durability Enhancer (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp', container.getModifiedItemAttr('hullHpBonus') * level, **kwargs)


class Effect2019(BaseEffect):
    """
    repairDroneShieldBonusBonus

    Used by:
    Implants named like: Black Market 'Valdimar' Repair Drone Operation DR (3 of 3)
    Modules named like: Drone Repair Augmentor (8 of 8)
    Skill: Repair Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context else True
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone',
                                     'shieldBonus', container.getModifiedItemAttr('damageHP') * level,
                                     stackingPenalties=penalized, **kwargs)


class Effect2020(BaseEffect):
    """
    repairDroneArmorDamageAmountBonus

    Used by:
    Implants named like: Black Market 'Valdimar' Repair Drone Operation DR (3 of 3)
    Modules named like: Drone Repair Augmentor (8 of 8)
    Skill: Repair Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context else True
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone',
                                     'armorDamageAmount', container.getModifiedItemAttr('damageHP') * level,
                                     stackingPenalties=penalized, **kwargs)


class Effect2029(BaseEffect):
    """
    addToSignatureRadius2

    Used by:
    Modules from group: Missile Launcher Bomb (2 of 2)
    Modules from group: Shield Extender (36 of 36)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusAdd'), **kwargs)


class Effect2041(BaseEffect):
    """
    modifyArmorResonancePostPercent

    Used by:
    Modules from group: Armor Coating (202 of 202)
    Modules from group: Armor Plating Energized (187 of 187)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('armor%sDamageResonance' % type.capitalize(),
                                   module.getModifiedItemAttr('%sDamageResistanceBonus' % type),
                                   stackingPenalties=True, **kwargs)


class Effect2052(BaseEffect):
    """
    modifyShieldResonancePostPercent

    Used by:
    Modules from group: Shield Resistance Amplifier (84 of 84)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('shield%sDamageResonance' % type.capitalize(),
                                   module.getModifiedItemAttr('%sDamageResistanceBonus' % type),
                                   stackingPenalties=True, **kwargs)


class Effect2053(BaseEffect):
    """
    emShieldCompensationHardeningBonusGroupShieldAmp

    Used by:
    Skill: EM Shield Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Shield Resistance Amplifier',
                                      'emDamageResistanceBonus', skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2054(BaseEffect):
    """
    explosiveShieldCompensationHardeningBonusGroupShieldAmp

    Used by:
    Skill: Explosive Shield Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Shield Resistance Amplifier',
                                      'explosiveDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2055(BaseEffect):
    """
    kineticShieldCompensationHardeningBonusGroupShieldAmp

    Used by:
    Skill: Kinetic Shield Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Shield Resistance Amplifier',
                                      'kineticDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2056(BaseEffect):
    """
    thermalShieldCompensationHardeningBonusGroupShieldAmp

    Used by:
    Skill: Thermal Shield Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Shield Resistance Amplifier',
                                      'thermalDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2105(BaseEffect):
    """
    emArmorCompensationHardeningBonusGroupArmorCoating

    Used by:
    Skill: EM Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Coating',
                                      'emDamageResistanceBonus', skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2106(BaseEffect):
    """
    explosiveArmorCompensationHardeningBonusGroupArmorCoating

    Used by:
    Skill: Explosive Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Coating',
                                      'explosiveDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2107(BaseEffect):
    """
    kineticArmorCompensationHardeningBonusGroupArmorCoating

    Used by:
    Skill: Kinetic Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Coating',
                                      'kineticDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2108(BaseEffect):
    """
    thermicArmorCompensationHardeningBonusGroupArmorCoating

    Used by:
    Skill: Thermal Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Coating',
                                      'thermalDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2109(BaseEffect):
    """
    emArmorCompensationHardeningBonusGroupEnergized

    Used by:
    Skill: EM Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Plating Energized',
                                      'emDamageResistanceBonus', skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2110(BaseEffect):
    """
    explosiveArmorCompensationHardeningBonusGroupEnergized

    Used by:
    Skill: Explosive Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Plating Energized',
                                      'explosiveDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2111(BaseEffect):
    """
    kineticArmorCompensationHardeningBonusGroupEnergized

    Used by:
    Skill: Kinetic Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Plating Energized',
                                      'kineticDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2112(BaseEffect):
    """
    thermicArmorCompensationHardeningBonusGroupEnergized

    Used by:
    Skill: Thermal Armor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Plating Energized',
                                      'thermalDamageResistanceBonus',
                                      skill.getModifiedItemAttr('hardeningBonus') * skill.level, **kwargs)


class Effect2130(BaseEffect):
    """
    smallHybridMaxRangeBonus

    Used by:
    Ship: Catalyst
    Ship: Cormorant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect2131(BaseEffect):
    """
    smallEnergyMaxRangeBonus

    Used by:
    Ship: Coercer
    Ship: Gold Magnate
    Ship: Silver Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect2132(BaseEffect):
    """
    smallProjectileMaxRangeBonus

    Used by:
    Ship: Thrasher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect2133(BaseEffect):
    """
    energyTransferArrayMaxRangeBonus

    Used by:
    Ship: Augoror
    Ship: Osprey
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'maxRange', ship.getModifiedItemAttr('maxRangeBonus2'), **kwargs)


class Effect2134(BaseEffect):
    """
    shieldTransporterMaxRangeBonus

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    Ship: Osprey
    Ship: Rorqual
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Shield Booster', 'maxRange',
                                      ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Ancillary Remote Shield Booster', 'maxRange',
                                      ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect2135(BaseEffect):
    """
    armorRepairProjectorMaxRangeBonus

    Used by:
    Variations of ship: Navitas (2 of 2)
    Ship: Augoror
    Ship: Deacon
    Ship: Exequror
    Ship: Inquisitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Armor Repairer', 'maxRange',
                                      src.getModifiedItemAttr('maxRangeBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Ancillary Remote Armor Repairer', 'maxRange',
                                      src.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect2143(BaseEffect):
    """
    minmatarShipEwTargetPainterMC2

    Used by:
    Ship: Huginn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('shipBonusMC2'),
                                      skill='Minmatar Cruiser', **kwargs)


class Effect2152(BaseEffect):
    """
    jumpPortalGeneration

    Used by:
    Module: Jump Portal Generator I
    """

    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect2155(BaseEffect):
    """
    eliteBonusCommandShipProjectileDamageCS1

    Used by:
    Ship: Sleipnir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
                                      skill='Command Ships', **kwargs)


class Effect2156(BaseEffect):
    """
    eliteBonusCommandShipProjectileFalloffCS2

    Used by:
    Ship: Sleipnir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                      skill='Command Ships', **kwargs)


class Effect2157(BaseEffect):
    """
    eliteBonusCommandShipLaserDamageCS1

    Used by:
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
                                      skill='Command Ships', **kwargs)


class Effect2158(BaseEffect):
    """
    eliteBonusCommandShipLaserROFCS2

    Used by:
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'speed', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                      skill='Command Ships', **kwargs)


class Effect2160(BaseEffect):
    """
    eliteBonusCommandShipHybridFalloffCS2

    Used by:
    Ship: Astarte
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                      skill='Command Ships', **kwargs)


class Effect2161(BaseEffect):
    """
    eliteBonusCommandShipHybridOptimalCS1

    Used by:
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
                                      skill='Command Ships', **kwargs)


class Effect2179(BaseEffect):
    """
    shipBonusDroneHitpointsGC2

    Used by:
    Ships named like: Stratios (2 of 2)
    Ship: Vexor
    Ship: Vexor Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         type, ship.getModifiedItemAttr('shipBonusGC2'),
                                         skill='Gallente Cruiser', **kwargs)


class Effect2181(BaseEffect):
    """
    shipBonusDroneHitpointsFixedAC2

    Used by:
    Variations of ship: Arbitrator (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         type, ship.getModifiedItemAttr('shipBonusAC2'),
                                         skill='Amarr Cruiser', **kwargs)


class Effect2186(BaseEffect):
    """
    shipBonusDroneHitpointsGB2

    Used by:
    Variations of ship: Dominix (3 of 3)
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         type, ship.getModifiedItemAttr('shipBonusGB2'),
                                         skill='Gallente Battleship', **kwargs)


class Effect2187(BaseEffect):
    """
    shipBonusDroneDamageMultiplierGB2

    Used by:
    Variations of ship: Dominix (3 of 3)
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGB2'),
                                     skill='Gallente Battleship', **kwargs)


class Effect2188(BaseEffect):
    """
    shipBonusDroneDamageMultiplierGC2

    Used by:
    Ships named like: Stratios (2 of 2)
    Ship: Vexor
    Ship: Vexor Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC2'),
                                     skill='Gallente Cruiser', **kwargs)


class Effect2189(BaseEffect):
    """
    shipBonusDroneDamageMultiplierAC2

    Used by:
    Variations of ship: Arbitrator (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusAC2'),
                                     skill='Amarr Cruiser', **kwargs)


class Effect2200(BaseEffect):
    """
    eliteBonusInterdictorsMissileKineticDamage1

    Used by:
    Ship: Flycatcher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Light Missiles') or mod.charge.requiresSkill('Rockets'),
            'kineticDamage', ship.getModifiedItemAttr('eliteBonusInterdictors1'), skill='Interdictors', **kwargs)


class Effect2201(BaseEffect):
    """
    eliteBonusInterdictorsProjectileFalloff1

    Used by:
    Ship: Sabre
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusInterdictors1'),
                                      skill='Interdictors', **kwargs)


class Effect2215(BaseEffect):
    """
    shipBonusPirateFrigateProjDamage

    Used by:
    Ship: Chremoas
    Ship: Dramiel
    Ship: Sunesis
    Ship: Svipul
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect2232(BaseEffect):
    """
    scanStrengthBonusPercentOnline

    Used by:
    Modules from group: Signal Amplifier (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            fit.ship.boostItemAttr('scan%sStrength' % type,
                                   module.getModifiedItemAttr('scan%sStrengthPercent' % type),
                                   stackingPenalties=True, **kwargs)


class Effect2249(BaseEffect):
    """
    shipBonusDroneMiningAmountAC2

    Used by:
    Ship: Arbitrator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'miningAmount', ship.getModifiedItemAttr('shipBonusAC2'),
                                     skill='Amarr Cruiser', **kwargs)


class Effect2250(BaseEffect):
    """
    shipBonusDroneMiningAmountGC2

    Used by:
    Ship: Vexor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount', ship.getModifiedItemAttr('shipBonusGC2'),
                                     skill='Gallente Cruiser', **kwargs)


class Effect2251(BaseEffect):
    """
    commandshipMultiRelayEffect

    Used by:
    Ships from group: Command Ship (8 of 8)
    Ships from group: Industrial Command Ship (2 of 2)
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('maxGangModules'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('maxGangModules'), **kwargs)


class Effect2252(BaseEffect):
    """
    covertOpsAndReconOpsCloakModuleDelayBonus

    Used by:
    Ships from group: Black Ops (5 of 5)
    Ships from group: Blockade Runner (4 of 4)
    Ships from group: Covert Ops (8 of 8)
    Ships from group: Expedition Frigate (2 of 2)
    Ships from group: Force Recon Ship (9 of 9)
    Ships from group: Stealth Bomber (5 of 5)
    Ships named like: Stratios (2 of 2)
    Subsystems named like: Defensive Covert Reconfiguration (4 of 4)
    Ship: Astero
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemForce(lambda mod: mod.item.requiresSkill('Cloaking'),
                                      'moduleReactivationDelay',
                                      container.getModifiedItemAttr('covertOpsAndReconOpsCloakModuleDelay'), **kwargs)


class Effect2253(BaseEffect):
    """
    covertOpsStealthBomberTargettingDelayBonus

    Used by:
    Ships from group: Black Ops (5 of 5)
    Ships from group: Stealth Bomber (5 of 5)
    Ship: Caedes
    Ship: Chremoas
    Ship: Endurance
    Ship: Etana
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemForce(lambda mod: mod.item.group.name == 'Cloaking Device',
                                      'cloakingTargetingDelay',
                                      ship.getModifiedItemAttr('covertOpsStealthBomberTargettingDelay'), **kwargs)


class Effect2255(BaseEffect):
    """
    tractorBeamCan

    Used by:
    Deployables from group: Mobile Tractor Unit (3 of 3)
    Modules from group: Tractor Beam (4 of 4)
    """

    type = 'active'


class Effect2298(BaseEffect):
    """
    scanStrengthBonusPercentPassive

    Used by:
    Implants named like: High grade Grail (5 of 6)
    Implants named like: High grade Jackal (5 of 6)
    Implants named like: High grade Spur (5 of 6)
    Implants named like: High grade Talon (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        for type in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            sensorType = 'scan{0}Strength'.format(type)
            sensorBoost = 'scan{0}StrengthPercent'.format(type)
            if sensorBoost in implant.item.attributes:
                fit.ship.boostItemAttr(sensorType, implant.getModifiedItemAttr(sensorBoost), **kwargs)


class Effect2302(BaseEffect):
    """
    damageControl

    Used by:
    Modules from group: Damage Control (24 of 29)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):
            for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'):
                bonus = '%s%sDamageResonance' % (attrPrefix, damageType)
                bonus = '%s%s' % (bonus[0].lower(), bonus[1:])
                booster = '%s%sDamageResonance' % (layer, damageType)
                fit.ship.multiplyItemAttr(bonus, module.getModifiedItemAttr(booster),
                                          stackingPenalties=True, penaltyGroup='preMul', **kwargs)


class Effect2305(BaseEffect):
    """
    eliteReconBonusEnergyNeutAmount2

    Used by:
    Ship: Curse
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('eliteBonusReconShip2'),
                                      skill='Recon Ships', **kwargs)


class Effect2354(BaseEffect):
    """
    capitalRemoteArmorRepairerCapNeedBonusSkill

    Used by:
    Variations of module: Capital Remote Repair Augmentor I (2 of 2)
    Skill: Capital Remote Armor Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect2355(BaseEffect):
    """
    capitalRemoteShieldTransferCapNeedBonusSkill

    Used by:
    Skill: Capital Shield Emission Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect2356(BaseEffect):
    """
    capitalRemoteEnergyTransferCapNeedBonusSkill

    Used by:
    Skill: Capital Capacitor Emission Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Capacitor Emission Systems'),
                                      'capacitorNeed', skill.getModifiedItemAttr('capNeedBonus') * skill.level, **kwargs)


class Effect2402(BaseEffect):
    """
    skillSuperWeaponDmgBonus

    Used by:
    Skill: Doomsday Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        damageTypes = ('em', 'explosive', 'kinetic', 'thermal')
        for dmgType in damageTypes:
            dmgAttr = '{0}Damage'.format(dmgType)
            fit.modules.filteredItemBoost(
                lambda mod: mod.item.group.name == 'Super Weapon' and dmgAttr in mod.itemModifiedAttributes,
                dmgAttr, skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect2422(BaseEffect):
    """
    implantVelocityBonus

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Navigation NN (6 of 6)
    Implant: Genolution Core Augmentation CA-3
    Implant: Shaqil's Speed Enhancer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', implant.getModifiedItemAttr('implantBonusVelocity'), **kwargs)


class Effect2432(BaseEffect):
    """
    energyManagementCapacitorBonusPostPercentCapacityLocationShipGroupCapacitorCapacityBonus

    Used by:
    Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6)
    Implants named like: Mindflood Booster (4 of 4)
    Modules named like: Semiconductor Memory Cell (8 of 8)
    Implant: Antipharmakon Aeolis
    Implant: Genolution Core Augmentation CA-1
    Skill: Capacitor Management
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.ship.boostItemAttr('capacitorCapacity', container.getModifiedItemAttr('capacitorCapacityBonus') * level, **kwargs)


class Effect2444(BaseEffect):
    """
    minerCpuUsageMultiplyPercent2

    Used by:
    Variations of module: Mining Laser Upgrade I (5 of 5)
    Module: Frostline 'Omnivore' Harvester Upgrade
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'cpu', module.getModifiedItemAttr('cpuPenaltyPercent'), **kwargs)


class Effect2445(BaseEffect):
    """
    iceMinerCpuUsagePercent

    Used by:
    Variations of module: Ice Harvester Upgrade I (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                      'cpu', module.getModifiedItemAttr('cpuPenaltyPercent'), **kwargs)


class Effect2456(BaseEffect):
    """
    miningUpgradeCPUPenaltyReductionModulesRequiringMiningUpgradePercent

    Used by:
    Implants named like: Inherent Implants 'Highwall' Mining Upgrades MU (3 of 3)
    Skill: Mining Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Upgrades'),
                                      'cpuPenaltyPercent',
                                      container.getModifiedItemAttr('miningUpgradeCPUReductionBonus') * level, **kwargs)


class Effect2465(BaseEffect):
    """
    shipBonusArmorResistAB

    Used by:
    Ship: Abaddon
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('Em', 'Explosive', 'Kinetic', 'Thermal'):
            fit.ship.boostItemAttr('armor{0}DamageResonance'.format(type), ship.getModifiedItemAttr('shipBonusAB'),
                                   skill='Amarr Battleship', **kwargs)


class Effect2479(BaseEffect):
    """
    iceHarvestCycleTimeModulesRequiringIceHarvestingOnline

    Used by:
    Variations of module: Ice Harvester Upgrade I (5 of 5)
    Module: Frostline 'Omnivore' Harvester Upgrade
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                      'duration', module.getModifiedItemAttr('iceHarvestCycleBonus'), **kwargs)


class Effect2485(BaseEffect):
    """
    implantArmorHpBonus2

    Used by:
    Implants named like: Inherent Implants 'Noble' Hull Upgrades HG (7 of 7)
    Implant: Genolution Core Augmentation CA-4
    Implant: Imperial Navy Modified 'Noble' Implant
    Implant: Imperial Special Ops Field Enhancer - Standard
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', implant.getModifiedItemAttr('armorHpBonus2'), **kwargs)


class Effect2488(BaseEffect):
    """
    implantVelocityBonus2

    Used by:
    Implant: Republic Special Ops Field Enhancer - Gamma
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', implant.getModifiedItemAttr('velocityBonus2'), **kwargs)


class Effect2489(BaseEffect):
    """
    shipBonusRemoteTrackingComputerFalloffMC

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusMC'),
                                      skill='Minmatar Cruiser', **kwargs)


class Effect2490(BaseEffect):
    """
    shipBonusRemoteTrackingComputerFalloffGC2

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect2491(BaseEffect):
    """
    ewSkillEcmBurstRangeBonus

    Used by:
    Modules named like: Particle Dispersion Projector (8 of 8)
    Skill: Long Distance Jamming
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Burst Jammer',
                                      'ecmBurstRange', container.getModifiedItemAttr('rangeSkillBonus') * level, **kwargs)


class Effect2492(BaseEffect):
    """
    ewSkillEcmBurstCapNeedBonus

    Used by:
    Implants named like: Zainou 'Gypsy' Electronic Warfare EW (6 of 6)
    Modules named like: Signal Disruption Amplifier (8 of 8)
    Skill: Electronic Warfare
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Burst Jammer',
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect2503(BaseEffect):
    """
    shipHTTrackingBonusGB2

    Used by:
    Ships named like: Megathron (3 of 3)
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGB2'),
                                      skill='Gallente Battleship', **kwargs)


class Effect2504(BaseEffect):
    """
    shipBonusHybridTrackingGF2

    Used by:
    Ship: Ares
    Ship: Federation Navy Comet
    Ship: Pacifier
    Ship: Tristan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGF2'),
                                      skill='Gallente Frigate', **kwargs)


class Effect2561(BaseEffect):
    """
    eliteBonusAssaultShipMissileVelocity1

    Used by:
    Ship: Hawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusGunship1'),
                                        skill='Assault Frigates', **kwargs)


class Effect2589(BaseEffect):
    """
    modifyBoosterEffectChanceWithBoosterChanceBonusPostPercent

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Recovery NR (2 of 2)
    Skill: Neurotoxin Recovery
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        for i in range(5):
            attr = 'boosterEffectChance{0}'.format(i + 1)
            fit.boosters.filteredItemBoost(lambda booster: attr in booster.itemModifiedAttributes,
                                           attr, container.getModifiedItemAttr('boosterChanceBonus') * level, **kwargs)


class Effect2602(BaseEffect):
    """
    shipBonusEmShieldResistanceCB2

    Used by:
    Ship: Rattlesnake
    Ship: Rokh
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', ship.getModifiedItemAttr('shipBonus2CB'),
                               skill='Caldari Battleship', **kwargs)


class Effect2603(BaseEffect):
    """
    shipBonusExplosiveShieldResistanceCB2

    Used by:
    Ship: Rattlesnake
    Ship: Rokh
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonus2CB'),
                               skill='Caldari Battleship', **kwargs)


class Effect2604(BaseEffect):
    """
    shipBonusKineticShieldResistanceCB2

    Used by:
    Ship: Rattlesnake
    Ship: Rokh
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', ship.getModifiedItemAttr('shipBonus2CB'),
                               skill='Caldari Battleship', **kwargs)


class Effect2605(BaseEffect):
    """
    shipBonusThermicShieldResistanceCB2

    Used by:
    Ship: Rattlesnake
    Ship: Rokh
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', ship.getModifiedItemAttr('shipBonus2CB'),
                               skill='Caldari Battleship', **kwargs)


class Effect2611(BaseEffect):
    """
    eliteBonusGunshipProjectileDamage1

    Used by:
    Ship: Wolf
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusGunship1'),
                                      skill='Assault Frigates', **kwargs)


class Effect2644(BaseEffect):
    """
    increaseSignatureRadiusOnline

    Used by:
    Modules from group: Inertial Stabilizer (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'),
                               stackingPenalties=True, **kwargs)


class Effect2645(BaseEffect):
    """
    scanResolutionMultiplierOnline

    Used by:
    Modules from group: Warp Core Stabilizer (8 of 8)
    Module: Target Spectrum Breaker
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionMultiplier'),
                                  stackingPenalties=True, **kwargs)


class Effect2646(BaseEffect):
    """
    maxTargetRangeBonus

    Used by:
    Modules from group: Warp Core Stabilizer (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)


class Effect2647(BaseEffect):
    """
    eliteBonusHeavyGunshipHeavyMissileLaunhcerRof2

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy',
                                      'speed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect2648(BaseEffect):
    """
    eliteBonusHeavyGunshipHeavyAssaultMissileLaunhcerRof2

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy Assault',
                                      'speed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect2649(BaseEffect):
    """
    eliteBonusHeavyGunshipAssaultMissileLaunhcerRof2

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Light',
                                      'speed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect2670(BaseEffect):
    """
    sensorBoosterActivePercentage

    Used by:
    Modules from group: Sensor Booster (16 of 16)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionBonus'),
                               stackingPenalties=True, **kwargs)

        for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            fit.ship.boostItemAttr(
                'scan{}Strength'.format(scanType),
                module.getModifiedItemAttr('scan{}StrengthPercent'.format(scanType)),
                stackingPenalties=True, **kwargs)


class Effect2688(BaseEffect):
    """
    capNeedBonusEffectLasers

    Used by:
    Modules named like: Energy Discharge Elutriation (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'capacitorNeed', module.getModifiedItemAttr('capNeedBonus'), **kwargs)


class Effect2689(BaseEffect):
    """
    capNeedBonusEffectHybrids

    Used by:
    Modules named like: Hybrid Discharge Elutriation (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'capacitorNeed', module.getModifiedItemAttr('capNeedBonus'), **kwargs)


class Effect2690(BaseEffect):
    """
    cpuNeedBonusEffectLasers

    Used by:
    Modules named like: Algid Energy Administrations Unit (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'cpu', module.getModifiedItemAttr('cpuNeedBonus'), **kwargs)


class Effect2691(BaseEffect):
    """
    cpuNeedBonusEffectHybrid

    Used by:
    Modules named like: Algid Hybrid Administrations Unit (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'cpu', module.getModifiedItemAttr('cpuNeedBonus'), **kwargs)


class Effect2693(BaseEffect):
    """
    falloffBonusEffectLasers

    Used by:
    Modules named like: Energy Ambit Extension (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'falloff', module.getModifiedItemAttr('falloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2694(BaseEffect):
    """
    falloffBonusEffectHybrids

    Used by:
    Modules named like: Hybrid Ambit Extension (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'falloff', module.getModifiedItemAttr('falloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2695(BaseEffect):
    """
    falloffBonusEffectProjectiles

    Used by:
    Modules named like: Projectile Ambit Extension (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                      'falloff', module.getModifiedItemAttr('falloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2696(BaseEffect):
    """
    maxRangeBonusEffectLasers

    Used by:
    Modules named like: Energy Locus Coordinator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'maxRange', module.getModifiedItemAttr('maxRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2697(BaseEffect):
    """
    maxRangeBonusEffectHybrids

    Used by:
    Modules named like: Hybrid Locus Coordinator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'maxRange', module.getModifiedItemAttr('maxRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2698(BaseEffect):
    """
    maxRangeBonusEffectProjectiles

    Used by:
    Modules named like: Projectile Locus Coordinator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                      'maxRange', module.getModifiedItemAttr('maxRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2706(BaseEffect):
    """
    drawbackPowerNeedLasers

    Used by:
    Modules from group: Rig Energy Weapon (56 of 56)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'power', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2707(BaseEffect):
    """
    drawbackPowerNeedHybrids

    Used by:
    Modules from group: Rig Hybrid Weapon (56 of 56)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'power', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2708(BaseEffect):
    """
    drawbackPowerNeedProjectiles

    Used by:
    Modules from group: Rig Projectile Weapon (40 of 40)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                      'power', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2712(BaseEffect):
    """
    drawbackArmorHP

    Used by:
    Modules from group: Rig Navigation (48 of 64)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2713(BaseEffect):
    """
    drawbackCPUOutput

    Used by:
    Modules from group: Rig Drones (58 of 64)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('cpuOutput', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2714(BaseEffect):
    """
    drawbackCPUNeedLaunchers

    Used by:
    Modules from group: Rig Launcher (48 of 48)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'cpu', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2716(BaseEffect):
    """
    drawbackSigRad

    Used by:
    Modules from group: Rig Shield (72 of 72)
    Modules named like: Optimizer (16 of 16)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('drawback'),
                               stackingPenalties=True, **kwargs)


class Effect2717(BaseEffect):
    """
    drawbackMaxVelocity

    Used by:
    Modules from group: Rig Armor (48 of 72)
    Modules from group: Rig Resource Processing (8 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('drawback'),
                               stackingPenalties=True, **kwargs)


class Effect2718(BaseEffect):
    """
    drawbackShieldCapacity

    Used by:
    Modules from group: Rig Electronic Systems (40 of 48)
    Modules from group: Rig Targeting (16 of 16)
    Modules named like: Signal Focusing Kit (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect2726(BaseEffect):
    """
    miningClouds

    Used by:
    Modules from group: Gas Cloud Harvester (5 of 5)
    """

    type = 'active'


class Effect2727(BaseEffect):
    """
    gasCloudHarvestingMaxGroupSkillLevel

    Used by:
    Skill: Gas Cloud Harvesting
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == 'Gas Cloud Harvester',
                                         'maxGroupActive', skill.level, **kwargs)


class Effect2734(BaseEffect):
    """
    shipECMScanStrengthBonusCF

    Used by:
    Variations of ship: Griffin (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('Gravimetric', 'Ladar', 'Radar', 'Magnetometric'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                          'scan{0}StrengthBonus'.format(type),
                                          ship.getModifiedItemAttr('shipBonusCF'),
                                          skill='Caldari Frigate', **kwargs)


class Effect2735(BaseEffect):
    """
    boosterArmorHpPenalty

    Used by:
    Implants named like: Crash Booster (3 of 4)
    Implants named like: Exile Booster (3 of 4)
    Implants named like: Frentix Booster (3 of 4)
    Implants named like: X Instinct Booster (3 of 4)
    """

    attr = 'boosterArmorHPPenalty'
    displayName = 'Armor Capacity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2736(BaseEffect):
    """
    boosterArmorRepairAmountPenalty

    Used by:
    Implants named like: Drop Booster (3 of 4)
    Implants named like: Mindflood Booster (3 of 4)
    Implants named like: Sooth Sayer Booster (3 of 4)
    """

    attr = 'boosterArmorRepairAmountPenalty'
    displayName = 'Armor Repair Amount'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Armor Repair Unit', 'Ancillary Armor Repairer'),
                                      'armorDamageAmount', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2737(BaseEffect):
    """
    boosterShieldCapacityPenalty

    Used by:
    Implants named like: Blue Pill Booster (3 of 5)
    Implants named like: Drop Booster (3 of 4)
    Implants named like: Sooth Sayer Booster (3 of 4)
    Implants named like: X Instinct Booster (3 of 4)
    """

    attr = 'boosterShieldCapacityPenalty'
    displayName = 'Shield Capacity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2739(BaseEffect):
    """
    boosterTurretOptimalRangePenalty

    Used by:
    Implants named like: Blue Pill Booster (3 of 5)
    Implants named like: Mindflood Booster (3 of 4)
    Implants named like: Sooth Sayer Booster (3 of 4)
    """

    attr = 'boosterTurretOptimalRangePenalty'
    displayName = 'Turret Optimal Range'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'maxRange', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2741(BaseEffect):
    """
    boosterTurretFalloffPenalty

    Used by:
    Implants named like: Drop Booster (3 of 4)
    Implants named like: X Instinct Booster (3 of 4)
    """

    attr = 'boosterTurretFalloffPenalty'
    displayName = 'Turret Falloff'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'falloff', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2745(BaseEffect):
    """
    boosterCapacitorCapacityPenalty

    Used by:
    Implants named like: Blue Pill Booster (3 of 5)
    Implants named like: Exile Booster (3 of 4)
    """

    attr = 'boosterCapacitorCapacityPenalty'
    displayName = 'Cap Capacity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacitorCapacity', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2746(BaseEffect):
    """
    boosterMaxVelocityPenalty

    Used by:
    Implants named like: Crash Booster (3 of 4)
    Items from market group: Implants & Boosters > Booster > Booster Slot 02 (9 of 13)
    """

    attr = 'boosterMaxVelocityPenalty'
    displayName = 'Velocity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2747(BaseEffect):
    """
    boosterTurretTrackingPenalty

    Used by:
    Implants named like: Exile Booster (3 of 4)
    Implants named like: Frentix Booster (3 of 4)
    """

    attr = 'boosterTurretTrackingPenalty'
    displayName = 'Turret Tracking'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'trackingSpeed', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2748(BaseEffect):
    """
    boosterMissileVelocityPenalty

    Used by:
    Implants named like: Crash Booster (3 of 4)
    Implants named like: X Instinct Booster (3 of 4)
    """

    attr = 'boosterMissileVelocityPenalty'
    displayName = 'Missile Velocity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2749(BaseEffect):
    """
    boosterMissileExplosionVelocityPenalty

    Used by:
    Implants named like: Blue Pill Booster (3 of 5)
    """

    attr = 'boosterAOEVelocityPenalty'
    displayName = 'Missile Explosion Velocity'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeVelocity', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2756(BaseEffect):
    """
    shipBonusECMStrengthBonusCC

    Used by:
    Ship: Blackbird
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('Gravimetric', 'Magnetometric', 'Ladar', 'Radar'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                          'scan{0}StrengthBonus'.format(type), ship.getModifiedItemAttr('shipBonusCC'),
                                          skill='Caldari Cruiser', **kwargs)


class Effect2757(BaseEffect):
    """
    salvaging

    Used by:
    Modules from group: Salvager (3 of 3)
    """

    type = 'active'


class Effect2760(BaseEffect):
    """
    boosterModifyBoosterArmorPenalties

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
    Implants named like: grade Edge (10 of 12)
    Skill: Neurotoxin Control
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        attrs = ('boosterArmorHPPenalty', 'boosterArmorRepairAmountPenalty')
        for attr in attrs:
            fit.boosters.filteredItemBoost(lambda booster: True, attr,
                                           container.getModifiedItemAttr('boosterAttributeModifier') * level, **kwargs)


class Effect2763(BaseEffect):
    """
    boosterModifyBoosterShieldPenalty

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
    Implants named like: grade Edge (10 of 12)
    Skill: Neurotoxin Control
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        attrs = ('boosterShieldBoostAmountPenalty', 'boosterShieldCapacityPenalty', 'shieldBoostMultiplier')
        for attr in attrs:
            # shieldBoostMultiplier can be positive (Blue Pill) and negative value (other boosters)
            # We're interested in decreasing only side-effects
            fit.boosters.filteredItemBoost(lambda booster: booster.getModifiedItemAttr(attr) < 0,
                                           attr, container.getModifiedItemAttr('boosterAttributeModifier') * level, **kwargs)


class Effect2766(BaseEffect):
    """
    boosterModifyBoosterMaxVelocityAndCapacitorPenalty

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
    Implants named like: grade Edge (10 of 12)
    Skill: Neurotoxin Control
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        attrs = ('boosterCapacitorCapacityPenalty', 'boosterMaxVelocityPenalty')
        for attr in attrs:
            fit.boosters.filteredItemBoost(lambda booster: True, attr,
                                           container.getModifiedItemAttr('boosterAttributeModifier') * level, **kwargs)


class Effect2776(BaseEffect):
    """
    boosterModifyBoosterMissilePenalty

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
    Implants named like: grade Edge (10 of 12)
    Skill: Neurotoxin Control
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        attrs = ('boosterAOEVelocityPenalty', 'boosterMissileAOECloudPenalty', 'boosterMissileVelocityPenalty')
        for attr in attrs:
            fit.boosters.filteredItemBoost(lambda booster: True, attr,
                                           container.getModifiedItemAttr('boosterAttributeModifier') * level, **kwargs)


class Effect2778(BaseEffect):
    """
    boosterModifyBoosterTurretPenalty

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Neurotoxin Control NC (2 of 2)
    Implants named like: grade Edge (10 of 12)
    Skill: Neurotoxin Control
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        attrs = ('boosterTurretFalloffPenalty', 'boosterTurretOptimalRangePenalty', 'boosterTurretTrackingPenalty')
        for attr in attrs:
            fit.boosters.filteredItemBoost(lambda booster: True, attr,
                                           container.getModifiedItemAttr('boosterAttributeModifier') * level, **kwargs)


class Effect2791(BaseEffect):
    """
    boosterMissileExplosionCloudPenaltyFixed

    Used by:
    Implants named like: Exile Booster (3 of 4)
    Implants named like: Mindflood Booster (3 of 4)
    """

    attr = 'boosterMissileAOECloudPenalty'
    displayName = 'Missile Explosion Radius'
    type = 'boosterSideEffect'

    @classmethod
    def handler(cls, fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeCloudSize', booster.getModifiedItemAttr(cls.attr), **kwargs)


class Effect2792(BaseEffect):
    """
    modifyArmorResonancePostPercentPassive

    Used by:
    Modules named like: Armor Reinforcer (32 of 32)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('armor' + type.capitalize() + 'DamageResonance',
                                   module.getModifiedItemAttr(type + 'DamageResistanceBonus') or 0,
                                   stackingPenalties=True, **kwargs)


class Effect2794(BaseEffect):
    """
    salvagingAccessDifficultyBonusEffectPassive

    Used by:
    Modules from group: Rig Resource Processing (8 of 10)
    Implant: Poteque 'Prospector' Salvaging SV-905
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Salvaging'),
                                         'accessDifficultyBonus', container.getModifiedItemAttr('accessDifficultyBonus'),
                                         position='post', **kwargs)


class Effect2795(BaseEffect):
    """
    modifyShieldResonancePostPercentPassive

    Used by:
    Modules named like: Shield Reinforcer (32 of 32)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('shield' + type.capitalize() + 'DamageResonance',
                                   module.getModifiedItemAttr(type + 'DamageResistanceBonus') or 0,
                                   stackingPenalties=True, **kwargs)


class Effect2796(BaseEffect):
    """
    massReductionBonusPassive

    Used by:
    Modules from group: Rig Anchor (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('mass', module.getModifiedItemAttr('massBonusPercentage'),
                               stackingPenalties=True, **kwargs)


class Effect2797(BaseEffect):
    """
    projectileWeaponSpeedMultiplyPassive

    Used by:
    Modules named like: Projectile Burst Aerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2798(BaseEffect):
    """
    projectileWeaponDamageMultiplyPassive

    Used by:
    Modules named like: Projectile Collision Accelerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2799(BaseEffect):
    """
    missileLauncherSpeedMultiplierPassive

    Used by:
    Modules named like: Bay Loading Accelerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2801(BaseEffect):
    """
    energyWeaponSpeedMultiplyPassive

    Used by:
    Modules named like: Energy Burst Aerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2802(BaseEffect):
    """
    hybridWeaponDamageMultiplyPassive

    Used by:
    Modules named like: Hybrid Collision Accelerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2803(BaseEffect):
    """
    energyWeaponDamageMultiplyPassive

    Used by:
    Modules named like: Energy Collision Accelerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2804(BaseEffect):
    """
    hybridWeaponSpeedMultiplyPassive

    Used by:
    Modules named like: Hybrid Burst Aerator (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect2805(BaseEffect):
    """
    shipBonusLargeEnergyWeaponDamageAB2

    Used by:
    Ship: Abaddon
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusAB2'),
                                      skill='Amarr Battleship', **kwargs)


class Effect2809(BaseEffect):
    """
    shipMissileAssaultMissileVelocityBonusCC2

    Used by:
    Ship: Caracal
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCC2'),
                                        skill='Caldari Cruiser', **kwargs)


class Effect2810(BaseEffect):
    """
    eliteBonusHeavyGunshipAssaultMissileFlightTime1

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'explosionDelay', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                        skill='Heavy Assault Cruisers', **kwargs)


class Effect2812(BaseEffect):
    """
    caldariShipECMBurstOptimalRangeCB3

    Used by:
    Ship: Scorpion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Burst Jammer',
                                      'ecmBurstRange', ship.getModifiedItemAttr('shipBonusCB3'),
                                      skill='Caldari Battleship', **kwargs)


class Effect2837(BaseEffect):
    """
    armorHPBonusAdd

    Used by:
    Modules from group: Armor Plate (51 of 51)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('armorHP', module.getModifiedItemAttr('armorHPBonusAdd'), **kwargs)


class Effect2847(BaseEffect):
    """
    trackingSpeedBonusPassiveRequiringGunneryTrackingSpeedBonus

    Used by:
    Implants named like: Drop Booster (4 of 4)
    Implants named like: Eifyr and Co. 'Gunslinger' Motion Prediction MR (6 of 6)
    Implant: Antipharmakon Iokira
    Implant: Ogdin's Eye Coordination Enhancer
    Skill: Motion Prediction
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'trackingSpeed', container.getModifiedItemAttr('trackingSpeedBonus') * level, **kwargs)


class Effect2848(BaseEffect):
    """
    accessDifficultyBonusModifierRequiringArchaelogy

    Used by:
    Modules named like: Emission Scope Sharpener (8 of 8)
    Implant: Poteque 'Prospector' Archaeology AC-905
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda module: module.item.requiresSkill('Archaeology'),
                                         'accessDifficultyBonus',
                                         container.getModifiedItemAttr('accessDifficultyBonusModifier'),
                                         position='post', **kwargs)


class Effect2849(BaseEffect):
    """
    accessDifficultyBonusModifierRequiringHacking

    Used by:
    Modules named like: Memetic Algorithm Bank (8 of 8)
    Implant: Neural Lace 'Blackglass' Net Intrusion 920-40
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    Implant: Poteque 'Prospector' Hacking HC-905
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda c: c.item.requiresSkill('Hacking'),
                                         'accessDifficultyBonus',
                                         container.getModifiedItemAttr('accessDifficultyBonusModifier'),
                                         position='post', **kwargs)


class Effect2850(BaseEffect):
    """
    durationBonusForGroupAfterburner

    Used by:
    Modules named like: Engine Thermal Shielding (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'duration', module.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect2851(BaseEffect):
    """
    missileDMGBonusPassive

    Used by:
    Modules named like: Warhead Calefaction Catalyst (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        for dmgType in ('em', 'kinetic', 'explosive', 'thermal'):
            fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                               '%sDamage' % dmgType,
                                               container.getModifiedItemAttr('missileDamageMultiplierBonus'),
                                               stackingPenalties=True, **kwargs)


class Effect2853(BaseEffect):
    """
    cloakingTargetingDelayBonusLRSMCloakingPassive

    Used by:
    Modules named like: Targeting Systems Stabilizer (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda module: module.item.requiresSkill('Cloaking'),
                                      'cloakingTargetingDelay', module.getModifiedItemAttr('cloakingTargetingDelayBonus'), **kwargs)


class Effect2857(BaseEffect):
    """
    cynosuralGeneration

    Used by:
    Modules from group: Cynosural Field Generator (3 of 3)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('speedFactor'), **kwargs)


class Effect2858(BaseEffect):
    """
    cloneJumpAccepting

    Used by:
    Module: Clone Vat Bay I
    """

    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)
        fit.ship.forceItemAttr('canCloak', mod.getModifiedChargeAttr('canCloak'), **kwargs)


class Effect2865(BaseEffect):
    """
    velocityBonusOnline

    Used by:
    Modules from group: Entosis Link (6 of 6)
    Modules from group: Nanofiber Internal Structure (7 of 7)
    Modules from group: Overdrive Injector System (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('implantBonusVelocity'),
                               stackingPenalties=True, **kwargs)


class Effect2866(BaseEffect):
    """
    biologyTimeBonusFixed

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Biology BY (2 of 2)
    Skill: Biology
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.boosters.filteredItemBoost(lambda bst: True, 'boosterDuration',
                                       container.getModifiedItemAttr('durationBonus') * level, **kwargs)


class Effect2867(BaseEffect):
    """
    sentryDroneDamageBonus

    Used by:
    Modules named like: Sentry Damage Augmentor (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'damageMultiplier', module.getModifiedItemAttr('damageMultiplierBonus'),
                                     stackingPenalties=True, **kwargs)


class Effect2868(BaseEffect):
    """
    armorDamageAmountBonusCapitalArmorRepairers

    Used by:
    Modules named like: Auxiliary Nano Pump (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'),
                                      'armorDamageAmount', implant.getModifiedItemAttr('repairBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect2872(BaseEffect):
    """
    missileVelocityBonusDefender

    Used by:
    Implants named like: Zainou 'Snapshot' Defender Missiles DM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Defender Missiles'),
                                           'maxVelocity', container.getModifiedItemAttr('missileVelocityBonus'), **kwargs)


class Effect2881(BaseEffect):
    """
    missileEMDmgBonusCruise3

    Used by:
    Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2882(BaseEffect):
    """
    missileExplosiveDmgBonusCruise3

    Used by:
    Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2883(BaseEffect):
    """
    missileKineticDmgBonusCruise3

    Used by:
    Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2884(BaseEffect):
    """
    missileThermalDmgBonusCruise3

    Used by:
    Implants named like: Zainou 'Snapshot' Cruise Missiles CM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2885(BaseEffect):
    """
    gasHarvestingCycleTimeModulesRequiringGasCloudHarvesting

    Used by:
    Implants named like: Eifyr and Co. 'Alchemist' Gas Harvesting GH (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gas Cloud Harvesting'),
                                      'duration', implant.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect2887(BaseEffect):
    """
    missileEMDmgBonusRocket

    Used by:
    Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2888(BaseEffect):
    """
    missileExplosiveDmgBonusRocket

    Used by:
    Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2889(BaseEffect):
    """
    missileKineticDmgBonusRocket

    Used by:
    Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2890(BaseEffect):
    """
    missileThermalDmgBonusRocket

    Used by:
    Implants named like: Zainou 'Snapshot' Rockets RD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2891(BaseEffect):
    """
    missileEMDmgBonusStandard

    Used by:
    Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2892(BaseEffect):
    """
    missileExplosiveDmgBonusStandard

    Used by:
    Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2893(BaseEffect):
    """
    missileKineticDmgBonusStandard

    Used by:
    Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2894(BaseEffect):
    """
    missileThermalDmgBonusStandard

    Used by:
    Implants named like: Zainou 'Snapshot' Light Missiles LM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2899(BaseEffect):
    """
    missileEMDmgBonusHeavy

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2900(BaseEffect):
    """
    missileExplosiveDmgBonusHeavy

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2901(BaseEffect):
    """
    missileKineticDmgBonusHeavy

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2902(BaseEffect):
    """
    missileThermalDmgBonusHeavy

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Missiles HM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2903(BaseEffect):
    """
    missileEMDmgBonusHAM

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2904(BaseEffect):
    """
    missileExplosiveDmgBonusHAM

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2905(BaseEffect):
    """
    missileKineticDmgBonusHAM

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2906(BaseEffect):
    """
    missileThermalDmgBonusHAM

    Used by:
    Implants named like: Zainou 'Snapshot' Heavy Assault Missiles AM (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2907(BaseEffect):
    """
    missileEMDmgBonusTorpedo

    Used by:
    Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'emDamage', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2908(BaseEffect):
    """
    missileExplosiveDmgBonusTorpedo

    Used by:
    Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosiveDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2909(BaseEffect):
    """
    missileKineticDmgBonusTorpedo

    Used by:
    Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'kineticDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2910(BaseEffect):
    """
    missileThermalDmgBonusTorpedo

    Used by:
    Implants named like: Zainou 'Snapshot' Torpedoes TD (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'thermalDamage', container.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect2911(BaseEffect):
    """
    dataminerModuleDurationReduction

    Used by:
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Data Miners',
                                      'duration', implant.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect2967(BaseEffect):
    """
    skillTriageModuleConsumptionQuantityBonus

    Used by:
    Skill: Tactical Logistics Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        amount = -skill.getModifiedItemAttr('consumptionQuantityBonus')
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
                                         'consumptionQuantity', amount * skill.level, **kwargs)


class Effect2979(BaseEffect):
    """
    skillRemoteHullRepairSystemsCapNeedBonus

    Used by:
    Skill: Remote Hull Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Hull Repair Systems'),
                                      'capacitorNeed', skill.getModifiedItemAttr('capNeedBonus') * skill.level, **kwargs)


class Effect2980(BaseEffect):
    """
    skillCapitalRemoteHullRepairSystemsCapNeedBonus

    Used by:
    Skill: Capital Remote Hull Repair Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Remote Hull Repair Systems'),
                                      'capacitorNeed', skill.getModifiedItemAttr('capNeedBonus') * skill.level, **kwargs)


class Effect2982(BaseEffect):
    """
    skillRemoteECMDurationBonus

    Used by:
    Skill: Burst Projector Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        # We need to make sure that the attribute exists, otherwise we add attributes that don't belong.  See #927
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation') and
                                                  mod.item.getAttribute('duration'),
                                      'duration',
                                      skill.getModifiedItemAttr('projECMDurationBonus') * skill.level, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation') and
                                                  mod.item.getAttribute('durationECMJammerBurstProjector'),
                                      'durationECMJammerBurstProjector',
                                      skill.getModifiedItemAttr('projECMDurationBonus') * skill.level, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation') and
                                                  mod.item.getAttribute('durationTargetIlluminationBurstProjector'),
                                      'durationTargetIlluminationBurstProjector',
                                      skill.getModifiedItemAttr('projECMDurationBonus') * skill.level, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation') and
                                                  mod.item.getAttribute('durationSensorDampeningBurstProjector'),
                                      'durationSensorDampeningBurstProjector',
                                      skill.getModifiedItemAttr('projECMDurationBonus') * skill.level, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation') and
                                                  mod.item.getAttribute('durationWeaponDisruptionBurstProjector'),
                                      'durationWeaponDisruptionBurstProjector',
                                      skill.getModifiedItemAttr('projECMDurationBonus') * skill.level, **kwargs)


class Effect3001(BaseEffect):
    """
    overloadRofBonus

    Used by:
    Modules from group: Missile Launcher Torpedo (22 of 22)
    Items from market group: Ship Equipment > Turrets & Launchers (444 of 907)
    Module: Interdiction Sphere Launcher I
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('speed', module.getModifiedItemAttr('overloadRofBonus'), **kwargs)


class Effect3002(BaseEffect):
    """
    overloadSelfDurationBonus

    Used by:
    Modules from group: Ancillary Remote Shield Booster (4 of 4)
    Modules from group: Capacitor Booster (41 of 41)
    Modules from group: Energy Neutralizer (54 of 54)
    Modules from group: Energy Nosferatu (54 of 54)
    Modules from group: Hull Repair Unit (25 of 25)
    Modules from group: Remote Armor Repairer (39 of 39)
    Modules from group: Remote Capacitor Transmitter (35 of 35)
    Modules from group: Remote Shield Booster (38 of 38)
    Modules from group: Smart Bomb (118 of 118)
    Modules from group: Warp Disrupt Field Generator (7 of 7)
    Modules named like: Remote Repairer (56 of 56)
    Module: Reactive Armor Hardener
    Module: Target Spectrum Breaker
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('duration', module.getModifiedItemAttr('overloadSelfDurationBonus') or 0, **kwargs)


class Effect3024(BaseEffect):
    """
    eliteBonusCoverOpsBombExplosiveDmg1

    Used by:
    Ship: Hound
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                        'explosiveDamage', ship.getModifiedItemAttr('eliteBonusCovertOps1'),
                                        skill='Covert Ops', **kwargs)


class Effect3025(BaseEffect):
    """
    overloadSelfDamageBonus

    Used by:
    Modules from group: Energy Weapon (101 of 214)
    Modules from group: Hybrid Weapon (105 of 221)
    Modules from group: Precursor Weapon (19 of 19)
    Modules from group: Projectile Weapon (99 of 165)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('damageMultiplier', module.getModifiedItemAttr('overloadDamageModifier'), **kwargs)


class Effect3026(BaseEffect):
    """
    eliteBonusCoverOpsBombKineticDmg1

    Used by:
    Ship: Manticore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                        'kineticDamage', ship.getModifiedItemAttr('eliteBonusCovertOps1'),
                                        skill='Covert Ops', **kwargs)


class Effect3027(BaseEffect):
    """
    eliteBonusCoverOpsBombThermalDmg1

    Used by:
    Ship: Nemesis
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                        'thermalDamage', ship.getModifiedItemAttr('eliteBonusCovertOps1'),
                                        skill='Covert Ops', **kwargs)


class Effect3028(BaseEffect):
    """
    eliteBonusCoverOpsBombEmDmg1

    Used by:
    Ship: Purifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                        'emDamage', ship.getModifiedItemAttr('eliteBonusCovertOps1'),
                                        skill='Covert Ops', **kwargs)


class Effect3029(BaseEffect):
    """
    overloadSelfEmHardeningBonus

    Used by:
    Variations of module: EM Armor Hardener I (37 of 37)
    Variations of module: EM Shield Hardener I (20 of 20)
    Module: Civilian EM Shield Hardener
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('emDamageResistanceBonus', module.getModifiedItemAttr('overloadHardeningBonus'), **kwargs)


class Effect3030(BaseEffect):
    """
    overloadSelfThermalHardeningBonus

    Used by:
    Variations of module: Thermal Armor Hardener I (37 of 37)
    Variations of module: Thermal Shield Hardener I (20 of 20)
    Module: Civilian Thermal Shield Hardener
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('thermalDamageResistanceBonus', module.getModifiedItemAttr('overloadHardeningBonus'), **kwargs)


class Effect3031(BaseEffect):
    """
    overloadSelfExplosiveHardeningBonus

    Used by:
    Variations of module: Explosive Armor Hardener I (37 of 37)
    Variations of module: Explosive Shield Hardener I (20 of 20)
    Module: Civilian Explosive Shield Hardener
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('explosiveDamageResistanceBonus', module.getModifiedItemAttr('overloadHardeningBonus'), **kwargs)


class Effect3032(BaseEffect):
    """
    overloadSelfKineticHardeningBonus

    Used by:
    Variations of module: Kinetic Armor Hardener I (37 of 37)
    Variations of module: Kinetic Shield Hardener I (20 of 20)
    Module: Civilian Kinetic Shield Hardener
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('kineticDamageResistanceBonus', module.getModifiedItemAttr('overloadHardeningBonus'), **kwargs)


class Effect3035(BaseEffect):
    """
    overloadSelfHardeningInvulnerabilityBonus

    Used by:
    Modules named like: Capital Flex Hardener (9 of 9)
    Variations of module: Multispectrum Shield Hardener I (18 of 18)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            module.boostItemAttr('%sDamageResistanceBonus' % type,
                                 module.getModifiedItemAttr('overloadHardeningBonus'), **kwargs)


class Effect3036(BaseEffect):
    """
    skillBombDeploymentModuleReactivationDelayBonus

    Used by:
    Skill: Bomb Deployment
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Bomb',
                                      'moduleReactivationDelay', skill.getModifiedItemAttr('reactivationDelayBonus') * skill.level, **kwargs)


class Effect3046(BaseEffect):
    """
    modifyMaxVelocityOfShipPassive

    Used by:
    Modules from group: Expanded Cargohold (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('maxVelocity', module.getModifiedItemAttr('maxVelocityModifier'), stackingPenalties=True, **kwargs)


class Effect3047(BaseEffect):
    """
    structureHPMultiplyPassive

    Used by:
    Modules from group: Expanded Cargohold (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('hp', module.getModifiedItemAttr('structureHPMultiplier'), **kwargs)


class Effect3061(BaseEffect):
    """
    heatDamageBonus

    Used by:
    Modules from group: Shield Boost Amplifier (25 of 25)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'heatDamage', module.getModifiedItemAttr('heatDamageBonus'), **kwargs)


class Effect3169(BaseEffect):
    """
    shieldTransportCpuNeedBonusEffect

    Used by:
    Ships from group: Logistics (3 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'cpu',
                                      src.getModifiedItemAttr('shieldTransportCpuNeedBonus'), **kwargs)


class Effect3172(BaseEffect):
    """
    droneArmorDamageBonusEffect

    Used by:
    Ships from group: Logistics (6 of 7)
    Ship: Exequror
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        # This is actually level-less bonus, anyway you have to train cruisers 5
        # and will get 100% (20%/lvl as stated by description)
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone',
                                     'armorDamageAmount', ship.getModifiedItemAttr('droneArmorDamageAmountBonus'), **kwargs)


class Effect3173(BaseEffect):
    """
    droneShieldBonusBonusEffect

    Used by:
    Ships from group: Logistics (6 of 7)
    Ship: Exequror
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        # This is actually level-less bonus, anyway you have to train cruisers 5
        # and will get 100% (20%/lvl as stated by description)
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone',
                                     'shieldBonus', ship.getModifiedItemAttr('droneShieldBonusBonus'), **kwargs)


class Effect3174(BaseEffect):
    """
    overloadSelfRangeBonus

    Used by:
    Modules from group: Stasis Grappler (7 of 7)
    Modules from group: Stasis Web (19 of 19)
    Modules from group: Warp Scrambler (54 of 55)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxRange', module.getModifiedItemAttr('overloadRangeBonus'),
                             stackingPenalties=True, **kwargs)


class Effect3175(BaseEffect):
    """
    overloadSelfSpeedBonus

    Used by:
    Modules from group: Propulsion Module (133 of 133)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('speedFactor', module.getModifiedItemAttr('overloadSpeedFactorBonus'),
                             stackingPenalties=True, **kwargs)


class Effect3182(BaseEffect):
    """
    overloadSelfECMStrenghtBonus

    Used by:
    Modules from group: Burst Jammer (11 of 11)
    Modules from group: ECM (39 of 39)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
                module.boostItemAttr('scan{0}StrengthBonus'.format(scanType),
                                     module.getModifiedItemAttr('overloadECMStrengthBonus'),
                                     stackingPenalties=True, **kwargs)


class Effect3196(BaseEffect):
    """
    thermodynamicsSkillDamageBonus

    Used by:
    Skill: Thermodynamics
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: 'heatDamage' in mod.item.attributes, 'heatDamage',
                                      skill.getModifiedItemAttr('thermodynamicsHeatDamage') * skill.level, **kwargs)


class Effect3200(BaseEffect):
    """
    overloadSelfArmorDamageAmountDurationBonus

    Used by:
    Modules from group: Ancillary Armor Repairer (7 of 7)
    Modules from group: Armor Repair Unit (100 of 100)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('duration', module.getModifiedItemAttr('overloadSelfDurationBonus'))
        module.boostItemAttr('armorDamageAmount', module.getModifiedItemAttr('overloadArmorDamageAmount'),
                             stackingPenalties=True, **kwargs)


class Effect3201(BaseEffect):
    """
    overloadSelfShieldBonusDurationBonus

    Used by:
    Modules from group: Ancillary Shield Booster (8 of 8)
    Modules from group: Shield Booster (89 of 89)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('duration', module.getModifiedItemAttr('overloadSelfDurationBonus'))
        module.boostItemAttr('shieldBonus', module.getModifiedItemAttr('overloadShieldBonus'), stackingPenalties=True, **kwargs)


class Effect3212(BaseEffect):
    """
    missileSkillFoFAoeCloudSizeBonus

    Used by:
    Implants named like: Zainou 'Snapshot' Auto Targeting Explosion Radius FR (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('FoF Missiles'),
                                        'aoeCloudSize', container.getModifiedItemAttr('aoeCloudSizeBonus') * level, **kwargs)


class Effect3234(BaseEffect):
    """
    shipRocketExplosiveDmgAF

    Used by:
    Ship: Anathema
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusAF'),
                                        skill='Amarr Frigate', **kwargs)


class Effect3235(BaseEffect):
    """
    shipRocketKineticDmgAF

    Used by:
    Ship: Anathema
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusAF'),
                                        skill='Amarr Frigate', **kwargs)


class Effect3236(BaseEffect):
    """
    shipRocketThermalDmgAF

    Used by:
    Ship: Anathema
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusAF'),
                                        skill='Amarr Frigate', **kwargs)


class Effect3237(BaseEffect):
    """
    shipRocketEmDmgAF

    Used by:
    Ship: Anathema
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusAF'),
                                        skill='Amarr Frigate', **kwargs)


class Effect3241(BaseEffect):
    """
    eliteBonusGunshipArmorEmResistance1

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('eliteBonusGunship1'),
                               skill='Assault Frigates', **kwargs)


class Effect3242(BaseEffect):
    """
    eliteBonusGunshipArmorThermalResistance1

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('eliteBonusGunship1'),
                               skill='Assault Frigates', **kwargs)


class Effect3243(BaseEffect):
    """
    eliteBonusGunshipArmorKineticResistance1

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('eliteBonusGunship1'),
                               skill='Assault Frigates', **kwargs)


class Effect3244(BaseEffect):
    """
    eliteBonusGunshipArmorExplosiveResistance1

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('eliteBonusGunship1'),
                               skill='Assault Frigates', **kwargs)


class Effect3249(BaseEffect):
    """
    shipCapRecharge2AF

    Used by:
    Ship: Anathema
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('rechargeRate', ship.getModifiedItemAttr('shipBonus2AF'),
                               skill='Amarr Frigate', **kwargs)


class Effect3264(BaseEffect):
    """
    skillIndustrialReconfigurationConsumptionQuantityBonus

    Used by:
    Skill: Industrial Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        amount = -skill.getModifiedItemAttr('consumptionQuantityBonus')
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill(skill),
                                         'consumptionQuantity', amount * skill.level, **kwargs)


class Effect3267(BaseEffect):
    """
    shipConsumptionQuantityBonusIndustrialReconfigurationORECapital1

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Industrial Reconfiguration'),
                                      'consumptionQuantity', ship.getModifiedItemAttr('shipBonusORECapital1'),
                                      skill='Capital Industrial Ships', **kwargs)


class Effect3297(BaseEffect):
    """
    shipEnergyNeutralizerTransferAmountBonusAB

    Used by:
    Ship: Bhaalgorn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('shipBonusAB'),
                                      skill='Amarr Battleship', **kwargs)


class Effect3298(BaseEffect):
    """
    shipEnergyNeutralizerTransferAmountBonusAC

    Used by:
    Ship: Ashimmu
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('shipBonusAC'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect3299(BaseEffect):
    """
    shipEnergyNeutralizerTransferAmountBonusAF

    Used by:
    Ship: Caedes
    Ship: Cruor
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('shipBonusAF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect3313(BaseEffect):
    """
    cloneVatMaxJumpCloneBonusSkillNew

    Used by:
    Skill: Cloning Facility Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxJumpClones', skill.getModifiedItemAttr('maxJumpClonesBonus') * skill.level, **kwargs)


class Effect3331(BaseEffect):
    """
    eliteBonusCommandShipArmorHP1

    Used by:
    Ship: Damnation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', ship.getModifiedItemAttr('eliteBonusCommandShips1'), skill='Command Ships', **kwargs)


class Effect3335(BaseEffect):
    """
    shipArmorEmResistanceMC2

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect3336(BaseEffect):
    """
    shipArmorExplosiveResistanceMC2

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusMC2'),
                               skill='Minmatar Cruiser', **kwargs)


class Effect3339(BaseEffect):
    """
    shipArmorKineticResistanceMC2

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusMC2'),
                               skill='Minmatar Cruiser', **kwargs)


class Effect3340(BaseEffect):
    """
    shipArmorThermalResistanceMC2

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusMC2'),
                               skill='Minmatar Cruiser', **kwargs)


class Effect3343(BaseEffect):
    """
    eliteBonusHeavyInterdictorsProjectileFalloff1

    Used by:
    Ship: Broadsword
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                      skill='Heavy Interdiction Cruisers', **kwargs)


class Effect3355(BaseEffect):
    """
    eliteBonusHeavyInterdictorHeavyMissileVelocityBonus1

    Used by:
    Ship: Onyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                        skill='Heavy Interdiction Cruisers', **kwargs)


class Effect3356(BaseEffect):
    """
    eliteBonusHeavyInterdictorHeavyAssaultMissileVelocityBonus

    Used by:
    Ship: Onyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                        skill='Heavy Interdiction Cruisers', **kwargs)


class Effect3357(BaseEffect):
    """
    eliteBonusHeavyInterdictorLightMissileVelocityBonus

    Used by:
    Ship: Onyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                        skill='Heavy Interdiction Cruisers', **kwargs)


class Effect3366(BaseEffect):
    """
    shipRemoteSensorDampenerCapNeedGF

    Used by:
    Ship: Keres
    Ship: Maulus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect3367(BaseEffect):
    """
    eliteBonusElectronicAttackShipWarpScramblerMaxRange1

    Used by:
    Ship: Keres
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip1'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect3369(BaseEffect):
    """
    eliteBonusElectronicAttackShipECMOptimalRange1

    Used by:
    Ship: Kitsune
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip1'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect3370(BaseEffect):
    """
    eliteBonusElectronicAttackShipStasisWebMaxRange1

    Used by:
    Ship: Hyena
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip1'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect3371(BaseEffect):
    """
    eliteBonusElectronicAttackShipWarpScramblerCapNeed2

    Used by:
    Ship: Keres
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'capacitorNeed', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip2'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect3374(BaseEffect):
    """
    eliteBonusElectronicAttackShipSignatureRadius2

    Used by:
    Ship: Hyena
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip2'),
                               skill='Electronic Attack Ships', **kwargs)


class Effect3379(BaseEffect):
    """
    implantHardwiringABcapacitorNeed

    Used by:
    Implants named like: Eifyr and Co. 'Rogue' Fuel Conservation FC (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'capacitorNeed', implant.getModifiedItemAttr('capNeedBonus'), **kwargs)


class Effect3380(BaseEffect):
    """
    warpDisruptSphere

    Used by:
    Modules from group: Warp Disrupt Field Generator (7 of 7)
    """

    runTime = 'early'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' in context:
            if module.charge is None:
                return
            if module.getModifiedItemAttr('warpScrambleRange', 0) < (projectionRange or 0):
                return
            if module.charge.ID in (29003, 45010):
                fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs)
            if module.charge.ID == 45010:
                fit.modules.filteredItemIncrease(
                    lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Micro Jump Drive Operation'),
                    'activationBlocked', 1, **kwargs)
        else:
            fit.ship.forceItemAttr('disallowAssistance', 1, **kwargs)
            if module.charge is not None:
                return
            fit.ship.boostItemAttr('mass', module.getModifiedItemAttr('massBonusPercentage'), **kwargs)
            fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'), **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                          'speedBoostFactor', module.getModifiedItemAttr('speedBoostFactorBonus'), **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'speedFactor', module.getModifiedItemAttr('speedFactorBonus'), **kwargs)


class Effect3392(BaseEffect):
    """
    eliteBonusBlackOpsLargeEnergyTurretTracking1

    Used by:
    Ship: Redeemer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusBlackOps1'), skill='Black Ops', **kwargs)


class Effect3403(BaseEffect):
    """
    eliteBonusBlackOpsCloakVelocity2

    Used by:
    Ships from group: Black Ops (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        if fit.extraAttributes['cloaked']:
            fit.ship.multiplyItemAttr('maxVelocity', ship.getModifiedItemAttr('eliteBonusBlackOps2'), skill='Black Ops', **kwargs)


class Effect3406(BaseEffect):
    """
    eliteBonusBlackOpsMaxVelocity1

    Used by:
    Ship: Panther
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('eliteBonusBlackOps1'), skill='Black Ops', **kwargs)


class Effect3415(BaseEffect):
    """
    eliteBonusViolatorsLargeEnergyTurretDamageRole1

    Used by:
    Ship: Paladin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect3416(BaseEffect):
    """
    eliteBonusViolatorsLargeHybridTurretDamageRole1

    Used by:
    Ship: Kronos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect3417(BaseEffect):
    """
    eliteBonusViolatorsLargeProjectileTurretDamageRole1

    Used by:
    Ship: Vargur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect3424(BaseEffect):
    """
    eliteBonusViolatorsLargeHybridTurretTracking1

    Used by:
    Ship: Kronos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusViolators1'), skill='Marauders', **kwargs)


class Effect3425(BaseEffect):
    """
    eliteBonusViolatorsLargeProjectileTurretTracking1

    Used by:
    Ship: Vargur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusViolators1'), skill='Marauders', **kwargs)


class Effect3427(BaseEffect):
    """
    eliteBonusViolatorsTractorBeamMaxRangeRole2

    Used by:
    Ships from group: Marauder (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusViolatorsRole2'), **kwargs)


class Effect3439(BaseEffect):
    """
    eliteBonusViolatorsEwTargetPainting1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('eliteBonusViolators1'),
                                      skill='Marauders', **kwargs)


class Effect3447(BaseEffect):
    """
    shipBonusPTFalloffMB1

    Used by:
    Ship: Marshal
    Ship: Vargur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect3466(BaseEffect):
    """
    eliteBonusElectronicAttackShipRechargeRate2

    Used by:
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('rechargeRate', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip2'),
                               skill='Electronic Attack Ships', **kwargs)


class Effect3467(BaseEffect):
    """
    eliteBonusElectronicAttackShipCapacitorCapacity2

    Used by:
    Ship: Kitsune
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacitorCapacity', ship.getModifiedItemAttr('eliteBonusElectronicAttackShip2'),
                               skill='Electronic Attack Ships', **kwargs)


class Effect3468(BaseEffect):
    """
    eliteBonusHeavyInterdictorsWarpDisruptFieldGeneratorWarpScrambleRange2

    Used by:
    Ships from group: Heavy Interdiction Cruiser (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Disrupt Field Generator',
                                      'warpScrambleRange', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors2'),
                                      skill='Heavy Interdiction Cruisers', **kwargs)


class Effect3473(BaseEffect):
    """
    eliteBonusViolatorsTractorBeamMaxTractorVelocityRole3

    Used by:
    Ships from group: Marauder (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam',
                                      'maxTractorVelocity', ship.getModifiedItemAttr('eliteBonusViolatorsRole3'), **kwargs)


class Effect3478(BaseEffect):
    """
    shipLaserDamagePirateBattleship

    Used by:
    Ship: Bhaalgorn
    Ship: Nightmare
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect3480(BaseEffect):
    """
    shipTrackingBonusAB

    Used by:
    Ship: Nightmare
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect3483(BaseEffect):
    """
    shipBonusMediumEnergyTurretDamagePirateFaction

    Used by:
    Ship: Ashimmu
    Ship: Fiend
    Ship: Gnosis
    Ship: Phantasm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect3484(BaseEffect):
    """
    shipBonusMediumEnergyTurretTrackingAC2

    Used by:
    Ship: Fiend
    Ship: Phantasm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect3487(BaseEffect):
    """
    shipBonusSmallEnergyTurretDamagePirateFaction

    Used by:
    Ship: Caedes
    Ship: Confessor
    Ship: Cruor
    Ship: Imp
    Ship: Succubus
    Ship: Sunesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect3489(BaseEffect):
    """
    shipBonusSmallEnergyTurretTracking2AF

    Used by:
    Ship: Imp
    Ship: Succubus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect3493(BaseEffect):
    """
    rorqualCargoScanRangeBonus

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Cargo Scanner',
                                      'cargoScanRange', ship.getModifiedItemAttr('cargoScannerRangeBonus'), **kwargs)


class Effect3494(BaseEffect):
    """
    rorqualSurveyScannerRangeBonus

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Survey Scanner',
                                      'surveyScanRange', ship.getModifiedItemAttr('surveyScannerRangeBonus'), **kwargs)


class Effect3495(BaseEffect):
    """
    shipCapPropulsionJamming

    Used by:
    Ships from group: Interceptor (10 of 10)
    Ship: Atron
    Ship: Condor
    Ship: Executioner
    Ship: Slasher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        groups = ('Stasis Web', 'Warp Scrambler')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'capacitorNeed', ship.getModifiedItemAttr('eliteBonusInterceptorRole'), **kwargs)


class Effect3496(BaseEffect):
    """
    setBonusThukker

    Used by:
    Implants named like: grade Nomad (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'agilityBonus', implant.getModifiedItemAttr('implantSetThukker'), **kwargs)


class Effect3498(BaseEffect):
    """
    setBonusSisters

    Used by:
    Implants named like: grade Virtue (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'scanStrengthBonus', implant.getModifiedItemAttr('implantSetSisters'), **kwargs)


class Effect3499(BaseEffect):
    """
    setBonusSyndicate

    Used by:
    Implants named like: grade Edge (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'boosterAttributeModifier',
                                                 implant.getModifiedItemAttr('implantSetSyndicate'), **kwargs)


class Effect3513(BaseEffect):
    """
    setBonusMordus

    Used by:
    Implants named like: grade Centurion (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'rangeSkillBonus', implant.getModifiedItemAttr('implantSetMordus'), **kwargs)


class Effect3514(BaseEffect):
    """
    Interceptor2WarpScrambleRange

    Used by:
    Ships from group: Interceptor (6 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusInterceptor2'), skill='Interceptors', **kwargs)


class Effect3519(BaseEffect):
    """
    weaponUpgradesCpuNeedBonusPostPercentCpuLocationShipModulesRequiringBombLauncher

    Used by:
    Skill: Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Bomb Deployment'),
                                      'cpu', skill.getModifiedItemAttr('cpuNeedBonus') * skill.level, **kwargs)


class Effect3520(BaseEffect):
    """
    skillAdvancedWeaponUpgradesPowerNeedBonusBombLaunchers

    Used by:
    Skill: Advanced Weapon Upgrades
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Bomb Deployment'),
                                      'power', skill.getModifiedItemAttr('powerNeedBonus') * skill.level, **kwargs)


class Effect3526(BaseEffect):
    """
    cynosuralTheoryConsumptionBonus

    Used by:
    Ships from group: Force Recon Ship (8 of 9)
    Ship: Venture
    Skill: Cynosural Field Theory
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Cynosural Field Generator',
                                      'consumptionQuantity',
                                      container.getModifiedItemAttr('consumptionQuantityBonusPercentage') * level, **kwargs)


class Effect3530(BaseEffect):
    """
    eliteBonusBlackOpsAgiliy1

    Used by:
    Ship: Sin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('eliteBonusBlackOps1'), skill='Black Ops', **kwargs)


class Effect3532(BaseEffect):
    """
    skillJumpDriveConsumptionAmountBonusPercentage

    Used by:
    Skill: Jump Fuel Conservation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('jumpDriveConsumptionAmount',
                               skill.getModifiedItemAttr('consumptionQuantityBonusPercentage') * skill.level, **kwargs)


class Effect3561(BaseEffect):
    """
    ewSkillTrackingDisruptionTrackingSpeedBonus

    Used by:
    Modules named like: Tracking Diagnostic Subroutines (8 of 8)
    Skill: Weapon Destabilization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Weapon Disruptor',
                                      'trackingSpeedBonus',
                                      container.getModifiedItemAttr('scanSkillEwStrengthBonus') * level, **kwargs)


class Effect3568(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkMaxRangeBonus1

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'maxRangeBonus', ship.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect3569(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkMaxRangeBonus2

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'maxRangeBonus', ship.getModifiedItemAttr('eliteBonusLogistics2'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect3570(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkTrackingSpeedBonus2

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'trackingSpeedBonus', ship.getModifiedItemAttr('eliteBonusLogistics2'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect3571(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkTrackingSpeedBonus1

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'trackingSpeedBonus', ship.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect3586(BaseEffect):
    """
    ewSkillSignalSuppressionScanResolutionBonus

    Used by:
    Modules named like: Inverted Signal Field Projector (8 of 8)
    Skill: Signal Suppression
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context else True
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'scanResolutionBonus',
                                      container.getModifiedItemAttr('scanSkillEwStrengthBonus') * level,
                                      stackingPenalties=penalized, **kwargs)


class Effect3587(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerMaxTargetRangeBonusGC2

    Used by:
    Variations of ship: Celestis (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxTargetRangeBonus', ship.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect3588(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerMaxTargetRangeBonusGF2

    Used by:
    Ship: Keres
    Ship: Maulus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxTargetRangeBonus', ship.getModifiedItemAttr('shipBonusGF2'),
                                      skill='Gallente Frigate', **kwargs)


class Effect3589(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerScanResolutionBonusGF2

    Used by:
    Ship: Keres
    Ship: Maulus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'scanResolutionBonus', ship.getModifiedItemAttr('shipBonusGF2'),
                                      skill='Gallente Frigate', **kwargs)


class Effect3590(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerScanResolutionBonusGC2

    Used by:
    Variations of ship: Celestis (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'scanResolutionBonus', ship.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect3591(BaseEffect):
    """
    ewSkillSignalSuppressionMaxTargetRangeBonus

    Used by:
    Modules named like: Inverted Signal Field Projector (8 of 8)
    Skill: Signal Suppression
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxTargetRangeBonus',
                                      container.getModifiedItemAttr('scanSkillEwStrengthBonus') * level, **kwargs)


class Effect3592(BaseEffect):
    """
    eliteBonusJumpFreighterHullHP1

    Used by:
    Ships from group: Jump Freighter (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('hp', ship.getModifiedItemAttr('eliteBonusJumpFreighter1'), skill='Jump Freighters', **kwargs)


class Effect3593(BaseEffect):
    """
    eliteBonusJumpFreighterJumpDriveConsumptionAmount2

    Used by:
    Ships from group: Jump Freighter (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('jumpDriveConsumptionAmount', ship.getModifiedItemAttr('eliteBonusJumpFreighter2'),
                               skill='Jump Freighters', **kwargs)


class Effect3597(BaseEffect):
    """
    scriptSensorBoosterScanResolutionBonusBonus

    Used by:
    Charges from group: Sensor Booster Script (3 of 3)
    Charges from group: Sensor Dampener Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('scanResolutionBonus', module.getModifiedChargeAttr('scanResolutionBonusBonus'), **kwargs)


class Effect3598(BaseEffect):
    """
    scriptSensorBoosterMaxTargetRangeBonusBonus

    Used by:
    Charges from group: Sensor Booster Script (3 of 3)
    Charges from group: Sensor Dampener Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxTargetRangeBonus', module.getModifiedChargeAttr('maxTargetRangeBonusBonus'), **kwargs)


class Effect3599(BaseEffect):
    """
    scriptTrackingComputerTrackingSpeedBonusBonus

    Used by:
    Charges from group: Tracking Disruption Script (2 of 2)
    Charges from group: Tracking Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('trackingSpeedBonus', module.getModifiedChargeAttr('trackingSpeedBonusBonus'), **kwargs)


class Effect3600(BaseEffect):
    """
    scriptTrackingComputerMaxRangeBonusBonus

    Used by:
    Charges from group: Tracking Disruption Script (2 of 2)
    Charges from group: Tracking Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxRangeBonus', module.getModifiedChargeAttr('maxRangeBonusBonus'), **kwargs)


class Effect3601(BaseEffect):
    """
    scriptWarpDisruptionFieldGeneratorSetDisallowInEmpireSpace

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.forceItemAttr('disallowInEmpireSpace', module.getModifiedChargeAttr('disallowInEmpireSpace'), **kwargs)


class Effect3602(BaseEffect):
    """
    scriptDurationBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('duration', module.getModifiedChargeAttr('durationBonus'), **kwargs)


class Effect3617(BaseEffect):
    """
    scriptSignatureRadiusBonusBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('signatureRadiusBonus', module.getModifiedChargeAttr('signatureRadiusBonusBonus'), **kwargs)


class Effect3618(BaseEffect):
    """
    scriptMassBonusPercentageBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('massBonusPercentage', module.getModifiedChargeAttr('massBonusPercentageBonus'), **kwargs)


class Effect3619(BaseEffect):
    """
    scriptSpeedBoostFactorBonusBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('speedBoostFactorBonus', module.getModifiedChargeAttr('speedBoostFactorBonusBonus'), **kwargs)


class Effect3620(BaseEffect):
    """
    scriptSpeedFactorBonusBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('speedFactorBonus', module.getModifiedChargeAttr('speedFactorBonusBonus'), **kwargs)


class Effect3648(BaseEffect):
    """
    scriptWarpScrambleRangeBonus

    Used by:
    Charges from group: Warp Disruption Script (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('warpScrambleRange', module.getModifiedChargeAttr('warpScrambleRangeBonus'), **kwargs)


class Effect3649(BaseEffect):
    """
    eliteBonusViolatorsLargeEnergyTurretDamage1

    Used by:
    Ship: Paladin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusViolators1'),
                                      skill='Marauders', **kwargs)


class Effect3650(BaseEffect):
    """
    ewGroupRsdMaxRangeBonus

    Used by:
    Implants named like: grade Centurion (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxRange', implant.getModifiedItemAttr('rangeSkillBonus'), **kwargs)


class Effect3651(BaseEffect):
    """
    ewGroupTpMaxRangeBonus

    Used by:
    Implants named like: grade Centurion (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'maxRange', implant.getModifiedItemAttr('rangeSkillBonus'), **kwargs)


class Effect3652(BaseEffect):
    """
    ewGroupTdMaxRangeBonus

    Used by:
    Implants named like: grade Centurion (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Weapon Disruptor',
                                      'maxRange', implant.getModifiedItemAttr('rangeSkillBonus'), **kwargs)


class Effect3653(BaseEffect):
    """
    ewGroupEcmBurstMaxRangeBonus

    Used by:
    Implants named like: grade Centurion (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Burst Projectors',
                                      'maxRange', implant.getModifiedItemAttr('rangeSkillBonus'), **kwargs)


class Effect3655(BaseEffect):
    """
    gunneryMaxRangeBonusOnline

    Used by:
    Modules from group: Tracking Enhancer (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'maxRange', module.getModifiedItemAttr('maxRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect3656(BaseEffect):
    """
    gunneryTrackingSpeedBonusOnline

    Used by:
    Modules from group: Tracking Enhancer (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'trackingSpeed', module.getModifiedItemAttr('trackingSpeedBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect3657(BaseEffect):
    """
    shipScanResolutionBonusOnline

    Used by:
    Modules from group: Signal Amplifier (7 of 7)
    Structure Modules from group: Structure Signal Amplifier (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionBonus'),
                               stackingPenalties=True, **kwargs)


class Effect3659(BaseEffect):
    """
    shipMaxTargetRangeBonusOnline

    Used by:
    Modules from group: Signal Amplifier (7 of 7)
    Structure Modules from group: Structure Signal Amplifier (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)


class Effect3660(BaseEffect):
    """
    shipMaxLockedTargetsBonusAddOnline

    Used by:
    Modules from group: Signal Amplifier (7 of 7)
    Structure Modules from group: Structure Signal Amplifier (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('maxLockedTargets', module.getModifiedItemAttr('maxLockedTargetsBonus'), **kwargs)


class Effect3668(BaseEffect):
    """
    miningLaserRangeBonus

    Used by:
    Implants named like: grade Harvest (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mining Laser',
                                      'maxRange', implant.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect3669(BaseEffect):
    """
    frequencyMiningLaserMaxRangeBonus

    Used by:
    Implants named like: grade Harvest (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Frequency Mining Laser',
                                      'maxRange', implant.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect3670(BaseEffect):
    """
    stripMinerMaxRangeBonus

    Used by:
    Implants named like: grade Harvest (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Strip Miner',
                                      'maxRange', implant.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect3671(BaseEffect):
    """
    gasHarvesterMaxRangeBonus

    Used by:
    Implants named like: grade Harvest (10 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Gas Cloud Harvester',
                                      'maxRange', implant.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect3672(BaseEffect):
    """
    setBonusOre

    Used by:
    Implants named like: grade Harvest (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'maxRangeBonus', implant.getModifiedItemAttr('implantSetORE'), **kwargs)


class Effect3674(BaseEffect):
    """
    jumpPortalGenerationBO

    Used by:
    Module: Covert Jump Portal Generator I
    """

    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect3677(BaseEffect):
    """
    shipBonusLargeEnergyTurretMaxRangeAB2

    Used by:
    Ship: Apocalypse
    Ship: Apocalypse Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect3678(BaseEffect):
    """
    eliteBonusJumpFreighterShieldHP1

    Used by:
    Ship: Nomad
    Ship: Rhea
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', ship.getModifiedItemAttr('eliteBonusJumpFreighter1'),
                               skill='Jump Freighters', **kwargs)


class Effect3679(BaseEffect):
    """
    eliteBonusJumpFreighterArmorHP1

    Used by:
    Ship: Anshar
    Ship: Ark
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', ship.getModifiedItemAttr('eliteBonusJumpFreighter1'), skill='Jump Freighters', **kwargs)


class Effect3680(BaseEffect):
    """
    freighterAgilityBonusC1

    Used by:
    Ship: Rhea
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('freighterBonusC1'), skill='Caldari Freighter', **kwargs)


class Effect3681(BaseEffect):
    """
    freighterAgilityBonusM1

    Used by:
    Ship: Nomad
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('freighterBonusM1'), skill='Minmatar Freighter', **kwargs)


class Effect3682(BaseEffect):
    """
    freighterAgilityBonusG1

    Used by:
    Ship: Anshar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('freighterBonusG1'), skill='Gallente Freighter', **kwargs)


class Effect3683(BaseEffect):
    """
    freighterAgilityBonusA1

    Used by:
    Ship: Ark
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('freighterBonusA1'), skill='Amarr Freighter', **kwargs)


class Effect3686(BaseEffect):
    """
    scriptTrackingComputerFalloffBonusBonus

    Used by:
    Charges from group: Tracking Disruption Script (2 of 2)
    Charges from group: Tracking Script (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('falloffBonus', module.getModifiedChargeAttr('falloffBonusBonus'), **kwargs)


class Effect3703(BaseEffect):
    """
    shipMissileLauncherSpeedBonusMC2

    Used by:
    Ship: Bellicose
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Rapid Light', 'Missile Launcher Heavy', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect3705(BaseEffect):
    """
    shipHybridTurretROFBonusGC2

    Used by:
    Ship: Exequror Navy Issue
    Ship: Phobos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect3706(BaseEffect):
    """
    shipBonusProjectileTrackingMC2

    Used by:
    Ship: Stabber Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect3726(BaseEffect):
    """
    agilityMultiplierEffectPassive

    Used by:
    Modules named like: Polycarbon Engine Housing (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', module.getModifiedItemAttr('agilityBonus'), stackingPenalties=True, **kwargs)


class Effect3727(BaseEffect):
    """
    velocityBonusPassive

    Used by:
    Modules named like: Polycarbon Engine Housing (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('implantBonusVelocity'),
                               stackingPenalties=True, **kwargs)


class Effect3739(BaseEffect):
    """
    zColinOrcaTractorRangeBonus

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam', 'maxRange',
                                      src.getModifiedItemAttr('roleBonusTractorBeamRange'), **kwargs)


class Effect3740(BaseEffect):
    """
    zColinOrcaTractorVelocityBonus

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam', 'maxTractorVelocity',
                                      ship.getModifiedItemAttr('roleBonusTractorBeamVelocity'), **kwargs)


class Effect3742(BaseEffect):
    """
    cargoAndOreHoldCapacityBonusICS1

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialOreHoldCapacity',
                               src.getModifiedItemAttr('shipBonusICS1'),
                               skill='Industrial Command Ships', **kwargs)

        fit.ship.boostItemAttr('capacity',
                               src.getModifiedItemAttr('shipBonusICS1'),
                               skill='Industrial Command Ships', **kwargs)


class Effect3744(BaseEffect):
    """
    miningForemanBurstBonusICS2

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff4Value',
                                      src.getModifiedItemAttr('shipBonusICS2'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff1Value',
                                      src.getModifiedItemAttr('shipBonusICS2'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'buffDuration',
                                      src.getModifiedItemAttr('shipBonusICS2'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff3Value',
                                      src.getModifiedItemAttr('shipBonusICS2'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff2Value',
                                      src.getModifiedItemAttr('shipBonusICS2'), skill='Industrial Command Ships', **kwargs)


class Effect3745(BaseEffect):
    """
    zColinOrcaSurveyScannerBonus

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Survey Scanner', 'surveyScanRange',
                                      src.getModifiedItemAttr('roleBonusSurveyScannerRange'), **kwargs)


class Effect3765(BaseEffect):
    """
    covertOpsStealthBomberSiegeMissileLauncherPowerNeedBonus

    Used by:
    Ships from group: Stealth Bomber (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
                                         'power', ship.getModifiedItemAttr('stealthBomberLauncherPower'), **kwargs)


class Effect3766(BaseEffect):
    """
    interceptorMWDSignatureRadiusBonus

    Used by:
    Ships from group: Interceptor (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('eliteBonusInterceptor'),
                                      skill='Interceptors', **kwargs)


class Effect3767(BaseEffect):
    """
    eliteBonusCommandShipsHeavyMissileExplosionVelocityCS2

    Used by:
    Ship: Claymore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'aoeVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                        skill='Command Ships', **kwargs)


class Effect3771(BaseEffect):
    """
    armorHPBonusAddPassive

    Used by:
    Subsystems from group: Defensive Subsystem (9 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('armorHP', module.getModifiedItemAttr('armorHPBonusAdd') or 0, **kwargs)


class Effect3773(BaseEffect):
    """
    hardPointModifierEffect

    Used by:
    Subsystems from group: Offensive Subsystem (12 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('turretSlotsLeft', module.getModifiedItemAttr('turretHardPointModifier'), **kwargs)
        fit.ship.increaseItemAttr('launcherSlotsLeft', module.getModifiedItemAttr('launcherHardPointModifier'), **kwargs)


class Effect3774(BaseEffect):
    """
    slotModifier

    Used by:
    Items from category: Subsystem (48 of 48)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('hiSlots', module.getModifiedItemAttr('hiSlotModifier'), **kwargs)
        fit.ship.increaseItemAttr('medSlots', module.getModifiedItemAttr('medSlotModifier'), **kwargs)
        fit.ship.increaseItemAttr('lowSlots', module.getModifiedItemAttr('lowSlotModifier'), **kwargs)


class Effect3782(BaseEffect):
    """
    powerOutputAddPassive

    Used by:
    Subsystems from group: Offensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('powerOutput', module.getModifiedItemAttr('powerOutput'), **kwargs)


class Effect3783(BaseEffect):
    """
    cpuOutputAddCpuOutputPassive

    Used by:
    Subsystems from group: Offensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('cpuOutput', module.getModifiedItemAttr('cpuOutput'), **kwargs)


class Effect3797(BaseEffect):
    """
    droneBandwidthAddPassive

    Used by:
    Subsystems from group: Offensive Subsystem (12 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('droneBandwidth', module.getModifiedItemAttr('droneBandwidth'), **kwargs)


class Effect3799(BaseEffect):
    """
    droneCapacityAdddroneCapacityPassive

    Used by:
    Subsystems from group: Offensive Subsystem (12 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('droneCapacity', module.getModifiedItemAttr('droneCapacity'), **kwargs)


class Effect3807(BaseEffect):
    """
    maxTargetRangeAddPassive

    Used by:
    Subsystems named like: Propulsion Interdiction Nullifier (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRange'), **kwargs)


class Effect3808(BaseEffect):
    """
    signatureRadiusAddPassive

    Used by:
    Subsystems from group: Defensive Subsystem (8 of 12)
    Subsystems named like: Propulsion Interdiction Nullifier (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadius'), **kwargs)


class Effect3810(BaseEffect):
    """
    capacityAddPassive

    Used by:
    Subsystems named like: Defensive Covert Reconfiguration (4 of 4)
    Subsystem: Legion Defensive - Nanobot Injector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, subsystem, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('capacity', subsystem.getModifiedItemAttr('cargoCapacityAdd') or 0, **kwargs)


class Effect3811(BaseEffect):
    """
    capacitorCapacityAddPassive

    Used by:
    Items from category: Subsystem (20 of 48)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('capacitorCapacity', module.getModifiedItemAttr('capacitorCapacity') or 0, **kwargs)


class Effect3831(BaseEffect):
    """
    shieldCapacityAddPassive

    Used by:
    Subsystems from group: Defensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('shieldCapacity', module.getModifiedItemAttr('shieldCapacity'), **kwargs)


class Effect3857(BaseEffect):
    """
    subsystemBonusAmarrPropulsionMaxVelocity

    Used by:
    Subsystem: Legion Propulsion - Intercalated Nanofibers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('subsystemBonusAmarrPropulsion'),
                               skill='Amarr Propulsion Systems', **kwargs)


class Effect3859(BaseEffect):
    """
    subsystemBonusCaldariPropulsionMaxVelocity

    Used by:
    Subsystem: Tengu Propulsion - Chassis Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('subsystemBonusCaldariPropulsion'),
                               skill='Caldari Propulsion Systems', **kwargs)


class Effect3860(BaseEffect):
    """
    subsystemBonusMinmatarPropulsionMaxVelocity

    Used by:
    Subsystem: Loki Propulsion - Intercalated Nanofibers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('subsystemBonusMinmatarPropulsion'),
                               skill='Minmatar Propulsion Systems', **kwargs)


class Effect3861(BaseEffect):
    """
    subsystemBonusMinmatarPropulsionAfterburnerSpeedFactor

    Used by:
    Subsystem: Loki Propulsion - Wake Limiter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('subsystemBonusMinmatarPropulsion'),
                                      skill='Minmatar Propulsion Systems', **kwargs)


class Effect3863(BaseEffect):
    """
    subsystemBonusCaldariPropulsionAfterburnerSpeedFactor

    Used by:
    Subsystem: Tengu Propulsion - Fuel Catalyst
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('subsystemBonusCaldariPropulsion'),
                                      skill='Caldari Propulsion Systems', **kwargs)


class Effect3864(BaseEffect):
    """
    subsystemBonusAmarrPropulsionAfterburnerSpeedFactor

    Used by:
    Subsystem: Legion Propulsion - Wake Limiter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('subsystemBonusAmarrPropulsion'),
                                      skill='Amarr Propulsion Systems', **kwargs)


class Effect3865(BaseEffect):
    """
    subsystemBonusAmarrPropulsion2Agility

    Used by:
    Subsystem: Legion Propulsion - Intercalated Nanofibers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', src.getModifiedItemAttr('subsystemBonusAmarrPropulsion2'),
                               skill='Amarr Propulsion Systems', **kwargs)


class Effect3866(BaseEffect):
    """
    subsystemBonusCaldariPropulsion2Agility

    Used by:
    Subsystem: Tengu Propulsion - Chassis Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', src.getModifiedItemAttr('subsystemBonusCaldariPropulsion2'),
                               skill='Caldari Propulsion Systems', **kwargs)


class Effect3867(BaseEffect):
    """
    subsystemBonusGallentePropulsion2Agility

    Used by:
    Subsystem: Proteus Propulsion - Hyperspatial Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', src.getModifiedItemAttr('subsystemBonusGallentePropulsion2'),
                               skill='Gallente Propulsion Systems', **kwargs)


class Effect3868(BaseEffect):
    """
    subsystemBonusMinmatarPropulsion2Agility

    Used by:
    Subsystem: Loki Propulsion - Intercalated Nanofibers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', src.getModifiedItemAttr('subsystemBonusMinmatarPropulsion2'),
                               skill='Minmatar Propulsion Systems', **kwargs)


class Effect3869(BaseEffect):
    """
    subsystemBonusMinmatarPropulsion2MWDPenalty

    Used by:
    Subsystem: Loki Propulsion - Wake Limiter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', src.getModifiedItemAttr('subsystemBonusMinmatarPropulsion2'),
                                      skill='Minmatar Propulsion Systems', **kwargs)


class Effect3872(BaseEffect):
    """
    subsystemBonusAmarrPropulsion2MWDPenalty

    Used by:
    Subsystem: Legion Propulsion - Wake Limiter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', src.getModifiedItemAttr('subsystemBonusAmarrPropulsion2'),
                                      skill='Amarr Propulsion Systems', **kwargs)


class Effect3875(BaseEffect):
    """
    subsystemBonusGallentePropulsionABMWDCapNeed

    Used by:
    Subsystem: Proteus Propulsion - Localized Injectors
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'capacitorNeed', module.getModifiedItemAttr('subsystemBonusGallentePropulsion'),
                                      skill='Gallente Propulsion Systems', **kwargs)


class Effect3893(BaseEffect):
    """
    subsystemBonusMinmatarCoreScanStrengthLADAR

    Used by:
    Subsystem: Loki Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanLadarStrength', src.getModifiedItemAttr('subsystemBonusMinmatarCore'),
                               skill='Minmatar Core Systems', **kwargs)


class Effect3895(BaseEffect):
    """
    subsystemBonusGallenteCoreScanStrengthMagnetometric

    Used by:
    Subsystem: Proteus Core - Electronic Efficiency Gate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanMagnetometricStrength', src.getModifiedItemAttr('subsystemBonusGallenteCore'),
                               skill='Gallente Core Systems', **kwargs)


class Effect3897(BaseEffect):
    """
    subsystemBonusCaldariCoreScanStrengthGravimetric

    Used by:
    Subsystem: Tengu Core - Electronic Efficiency Gate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanGravimetricStrength', src.getModifiedItemAttr('subsystemBonusCaldariCore'), skill='Caldari Core Systems', **kwargs)


class Effect3900(BaseEffect):
    """
    subsystemBonusAmarrCoreScanStrengthRADAR

    Used by:
    Subsystem: Legion Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanRadarStrength', src.getModifiedItemAttr('subsystemBonusAmarrCore'),
                               skill='Amarr Core Systems', **kwargs)


class Effect3959(BaseEffect):
    """
    subsystemBonusAmarrDefensiveArmorRepairAmount

    Used by:
    Subsystem: Legion Defensive - Covert Reconfiguration
    Subsystem: Legion Defensive - Nanobot Injector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', module.getModifiedItemAttr('subsystemBonusAmarrDefensive'),
                                      skill='Amarr Defensive Systems', **kwargs)


class Effect3961(BaseEffect):
    """
    subsystemBonusGallenteDefensiveArmorRepairAmount

    Used by:
    Subsystem: Proteus Defensive - Covert Reconfiguration
    Subsystem: Proteus Defensive - Nanobot Injector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', module.getModifiedItemAttr('subsystemBonusGallenteDefensive'),
                                      skill='Gallente Defensive Systems', **kwargs)


class Effect3962(BaseEffect):
    """
    subsystemBonusMinmatarDefensiveShieldArmorRepairAmount

    Used by:
    Subsystem: Loki Defensive - Adaptive Defense Node
    Subsystem: Loki Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive'),
                                      skill='Minmatar Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive'),
                                      skill='Minmatar Defensive Systems', **kwargs)


class Effect3964(BaseEffect):
    """
    subsystemBonusCaldariDefensiveShieldBoostAmount

    Used by:
    Subsystem: Tengu Defensive - Amplification Node
    Subsystem: Tengu Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', module.getModifiedItemAttr('subsystemBonusCaldariDefensive'),
                                      skill='Caldari Defensive Systems', **kwargs)


class Effect3976(BaseEffect):
    """
    subsystemBonusCaldariDefensiveShieldHP

    Used by:
    Subsystem: Tengu Defensive - Supplemental Screening
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', module.getModifiedItemAttr('subsystemBonusCaldariDefensive'),
                               skill='Caldari Defensive Systems', **kwargs)


class Effect3979(BaseEffect):
    """
    subsystemBonusMinmatarDefensiveShieldArmorHP

    Used by:
    Subsystem: Loki Defensive - Augmented Durability
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive'),
                               skill='Minmatar Defensive Systems', **kwargs)
        fit.ship.boostItemAttr('armorHP', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive'),
                               skill='Minmatar Defensive Systems', **kwargs)


class Effect3980(BaseEffect):
    """
    subsystemBonusGallenteDefensiveArmorHP

    Used by:
    Subsystem: Proteus Defensive - Augmented Plating
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', module.getModifiedItemAttr('subsystemBonusGallenteDefensive'),
                               skill='Gallente Defensive Systems', **kwargs)


class Effect3982(BaseEffect):
    """
    subsystemBonusAmarrDefensiveArmorHP

    Used by:
    Subsystem: Legion Defensive - Augmented Plating
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', module.getModifiedItemAttr('subsystemBonusAmarrDefensive'),
                               skill='Amarr Defensive Systems', **kwargs)


class Effect3992(BaseEffect):
    """
    systemShieldHP

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestial: Republic Stellar Observatory
    Celestial: State Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('shieldCapacity', beacon.getModifiedItemAttr('shieldCapacityMultiplier'), **kwargs)


class Effect3993(BaseEffect):
    """
    systemTargetingRange

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('maxTargetRange', beacon.getModifiedItemAttr('maxTargetRangeMultiplier'),
                                  stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect3995(BaseEffect):
    """
    systemSignatureRadius

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('signatureRadius', beacon.getModifiedItemAttr('signatureRadiusMultiplier'),
                                  stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect3996(BaseEffect):
    """
    systemArmorEmResistance

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestials named like: Incursion Effect (2 of 2)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', beacon.getModifiedItemAttr('armorEmDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect3997(BaseEffect):
    """
    systemArmorExplosiveResistance

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestials named like: Incursion Effect (2 of 2)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance',
                               beacon.getModifiedItemAttr('armorExplosiveDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect3998(BaseEffect):
    """
    systemArmorKineticResistance

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestials named like: Incursion Effect (2 of 2)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance',
                               beacon.getModifiedItemAttr('armorKineticDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect3999(BaseEffect):
    """
    systemArmorThermalResistance

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestials named like: Incursion Effect (2 of 2)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance',
                               beacon.getModifiedItemAttr('armorThermalDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect4002(BaseEffect):
    """
    systemMissileVelocity

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'maxVelocity', beacon.getModifiedItemAttr('missileVelocityMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4003(BaseEffect):
    """
    systemMaxVelocity

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('maxVelocity', beacon.getModifiedItemAttr('maxVelocityMultiplier'),
                                  stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4016(BaseEffect):
    """
    systemDamageMultiplierGunnery

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Gunnery'),
                                         'damageMultiplier', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect4017(BaseEffect):
    """
    systemDamageThermalMissiles

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'thermalDamage', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4018(BaseEffect):
    """
    systemDamageEmMissiles

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'emDamage', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4019(BaseEffect):
    """
    systemDamageExplosiveMissiles

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'explosiveDamage', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4020(BaseEffect):
    """
    systemDamageKineticMissiles

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'kineticDamage', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4021(BaseEffect):
    """
    systemDamageDrones

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill('Drones'),
                                        'damageMultiplier', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                        stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4022(BaseEffect):
    """
    systemTracking

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Gunnery'),
                                         'trackingSpeed', module.getModifiedItemAttr('trackingSpeedMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4023(BaseEffect):
    """
    systemAoeVelocity

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'aoeVelocity', beacon.getModifiedItemAttr('aoeVelocityMultiplier'), **kwargs)


class Effect4033(BaseEffect):
    """
    systemHeatDamage

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'heatDamage' in mod.itemModifiedAttributes,
                                         'heatDamage', module.getModifiedItemAttr('heatDamageMultiplier'), **kwargs)


class Effect4034(BaseEffect):
    """
    systemOverloadArmor

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadArmorDamageAmount' in mod.itemModifiedAttributes,
                                         'overloadArmorDamageAmount', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4035(BaseEffect):
    """
    systemOverloadDamageModifier

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadDamageModifier' in mod.itemModifiedAttributes,
                                         'overloadDamageModifier', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4036(BaseEffect):
    """
    systemOverloadDurationBonus

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadDurationBonus' in mod.itemModifiedAttributes,
                                         'overloadDurationBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4037(BaseEffect):
    """
    systemOverloadEccmStrength

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadECCMStrenghtBonus' in mod.itemModifiedAttributes,
                                         'overloadECCMStrenghtBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4038(BaseEffect):
    """
    systemOverloadEcmStrength

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadECMStrengthBonus' in mod.itemModifiedAttributes,
                                         'overloadECMStrengthBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4039(BaseEffect):
    """
    systemOverloadHardening

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadHardeningBonus' in mod.itemModifiedAttributes,
                                         'overloadHardeningBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4040(BaseEffect):
    """
    systemOverloadRange

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadRangeBonus' in mod.itemModifiedAttributes,
                                         'overloadRangeBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4041(BaseEffect):
    """
    systemOverloadRof

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadRofBonus' in mod.itemModifiedAttributes,
                                         'overloadRofBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4042(BaseEffect):
    """
    systemOverloadSelfDuration

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadSelfDurationBonus' in mod.itemModifiedAttributes,
                                         'overloadSelfDurationBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4043(BaseEffect):
    """
    systemOverloadShieldBonus

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadShieldBonus' in mod.itemModifiedAttributes,
                                         'overloadShieldBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4044(BaseEffect):
    """
    systemOverloadSpeedFactor

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: 'overloadSpeedFactorBonus' in mod.itemModifiedAttributes,
                                         'overloadSpeedFactorBonus', module.getModifiedItemAttr('overloadBonusMultiplier'), **kwargs)


class Effect4045(BaseEffect):
    """
    systemSmartBombRange

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Smart Bomb',
                                         'empFieldRange', module.getModifiedItemAttr('empFieldRangeMultiplier'), **kwargs)


class Effect4046(BaseEffect):
    """
    systemSmartBombEmDamage

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Smart Bomb',
                                         'emDamage', module.getModifiedItemAttr('smartbombDamageMultiplier'), **kwargs)


class Effect4047(BaseEffect):
    """
    systemSmartBombThermalDamage

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Smart Bomb',
                                         'thermalDamage', module.getModifiedItemAttr('smartbombDamageMultiplier'), **kwargs)


class Effect4048(BaseEffect):
    """
    systemSmartBombKineticDamage

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Smart Bomb',
                                         'kineticDamage', module.getModifiedItemAttr('smartbombDamageMultiplier'), **kwargs)


class Effect4049(BaseEffect):
    """
    systemSmartBombExplosiveDamage

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Smart Bomb',
                                         'explosiveDamage', module.getModifiedItemAttr('smartbombDamageMultiplier'), **kwargs)


class Effect4054(BaseEffect):
    """
    systemSmallEnergyDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                         'damageMultiplier', module.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect4055(BaseEffect):
    """
    systemSmallProjectileDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                         'damageMultiplier', module.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect4056(BaseEffect):
    """
    systemSmallHybridDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                         'damageMultiplier', module.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect4057(BaseEffect):
    """
    systemRocketEmDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Rockets'),
                                           'emDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4058(BaseEffect):
    """
    systemRocketExplosiveDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Rockets'),
                                           'explosiveDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4059(BaseEffect):
    """
    systemRocketKineticDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Rockets'),
                                           'kineticDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4060(BaseEffect):
    """
    systemRocketThermalDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Rockets'),
                                           'thermalDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4061(BaseEffect):
    """
    systemStandardMissileThermalDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                           'thermalDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4062(BaseEffect):
    """
    systemStandardMissileEmDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                           'emDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4063(BaseEffect):
    """
    systemStandardMissileExplosiveDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                           'explosiveDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4086(BaseEffect):
    """
    systemArmorRepairAmount

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Repair Systems') or
                                                     mod.item.requiresSkill('Capital Repair Systems'),
                                         'armorDamageAmount', module.getModifiedItemAttr('armorDamageAmountMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4088(BaseEffect):
    """
    systemArmorRemoteRepairAmount

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    Celestial: Dazh Liminality Locus
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems') or mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
            'armorDamageAmount', module.getModifiedItemAttr('armorDamageAmountMultiplierRemote'), stackingPenalties=True, **kwargs)


class Effect4089(BaseEffect):
    """
    systemShieldRemoteRepairAmount

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    Celestial: Dazh Liminality Locus
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Capital Shield Emission Systems'),
            'shieldBonus', module.getModifiedItemAttr('shieldBonusMultiplierRemote'), stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4090(BaseEffect):
    """
    systemCapacitorCapacity

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('capacitorCapacity', beacon.getModifiedItemAttr('capacitorCapacityMultiplierSystem'), **kwargs)


class Effect4091(BaseEffect):
    """
    systemCapacitorRecharge

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    Celestials named like: Class Pulsar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('rechargeRate', beacon.getModifiedItemAttr('rechargeRateMultiplier'), **kwargs)


class Effect4093(BaseEffect):
    """
    subsystemBonusAmarrOffensiveEnergyWeaponDamageMultiplier

    Used by:
    Subsystem: Legion Offensive - Liquid Crystal Magnifiers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', module.getModifiedItemAttr('subsystemBonusAmarrOffensive'),
                                      skill='Amarr Offensive Systems', **kwargs)


class Effect4104(BaseEffect):
    """
    subsystemBonusCaldariOffensiveHybridWeaponMaxRange

    Used by:
    Subsystem: Tengu Offensive - Magnetic Infusion Basin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', module.getModifiedItemAttr('subsystemBonusCaldariOffensive'),
                                      skill='Caldari Offensive Systems', **kwargs)


class Effect4106(BaseEffect):
    """
    subsystemBonusGallenteOffensiveHybridWeaponFalloff

    Used by:
    Subsystem: Proteus Offensive - Hybrid Encoding Platform
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', module.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                      skill='Gallente Offensive Systems', **kwargs)


class Effect4114(BaseEffect):
    """
    subsystemBonusMinmatarOffensiveProjectileWeaponFalloff

    Used by:
    Subsystem: Loki Offensive - Projectile Scoping Array
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', module.getModifiedItemAttr('subsystemBonusMinmatarOffensive'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4115(BaseEffect):
    """
    subsystemBonusMinmatarOffensiveProjectileWeaponMaxRange

    Used by:
    Subsystem: Loki Offensive - Projectile Scoping Array
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'maxRange', module.getModifiedItemAttr('subsystemBonusMinmatarOffensive'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4122(BaseEffect):
    """
    subsystemBonusCaldariOffensive1LauncherROF

    Used by:
    Subsystem: Tengu Offensive - Accelerated Ejection Bay
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Heavy', 'Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', src.getModifiedItemAttr('subsystemBonusCaldariOffensive'), skill='Caldari Offensive Systems', **kwargs)


class Effect4135(BaseEffect):
    """
    systemShieldEmResistance

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', beacon.getModifiedItemAttr('shieldEmDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect4136(BaseEffect):
    """
    systemShieldExplosiveResistance

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance',
                               beacon.getModifiedItemAttr('shieldExplosiveDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect4137(BaseEffect):
    """
    systemShieldKineticResistance

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance',
                               beacon.getModifiedItemAttr('shieldKineticDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect4138(BaseEffect):
    """
    systemShieldThermalResistance

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance',
                               beacon.getModifiedItemAttr('shieldThermalDamageResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect4152(BaseEffect):
    """
    subsystemBonusAmarrEngineeringHeatDamageReduction

    Used by:
    Subsystem: Legion Core - Energy Parasitic Complex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      module.getModifiedItemAttr('subsystemBonusAmarrCore'),
                                      skill='Amarr Core Systems', **kwargs)


class Effect4153(BaseEffect):
    """
    subsystemBonusCaldariEngineeringHeatDamageReduction

    Used by:
    Subsystem: Tengu Core - Obfuscation Manifold
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      module.getModifiedItemAttr('subsystemBonusCaldariCore'),
                                      skill='Caldari Core Systems', **kwargs)


class Effect4154(BaseEffect):
    """
    subsystemBonusGallenteEngineeringHeatDamageReduction

    Used by:
    Subsystem: Proteus Core - Friction Extension Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      module.getModifiedItemAttr('subsystemBonusGallenteCore'),
                                      skill='Gallente Core Systems', **kwargs)


class Effect4155(BaseEffect):
    """
    subsystemBonusMinmatarEngineeringHeatDamageReduction

    Used by:
    Subsystem: Loki Core - Immobility Drivers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      module.getModifiedItemAttr('subsystemBonusMinmatarCore'),
                                      skill='Minmatar Core Systems', **kwargs)


class Effect4158(BaseEffect):
    """
    subsystemBonusCaldariCoreCapacitorCapacity

    Used by:
    Subsystem: Tengu Core - Augmented Graviton Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacitorCapacity', src.getModifiedItemAttr('subsystemBonusCaldariCore'),
                               skill='Caldari Core Systems', **kwargs)


class Effect4159(BaseEffect):
    """
    subsystemBonusAmarrCoreCapacitorCapacity

    Used by:
    Subsystem: Legion Core - Augmented Antimatter Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacitorCapacity', src.getModifiedItemAttr('subsystemBonusAmarrCore'), skill='Amarr Core Systems', **kwargs)


class Effect4161(BaseEffect):
    """
    baseMaxScanDeviationModifierRequiringAstrometrics

    Used by:
    Implants named like: Poteque 'Prospector' Astrometric Pinpointing AP (3 of 3)
    Skill: Astrometric Pinpointing
    Skill: Astrometrics
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseMaxScanDeviation',
                                        container.getModifiedItemAttr('maxScanDeviationModifier') * level, **kwargs)


class Effect4162(BaseEffect):
    """
    baseSensorStrengthModifierRequiringAstrometrics

    Used by:
    Modules from group: Scan Probe Launcher (4 of 7)
    Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)
    Implants named like: grade Virtue (10 of 12)
    Modules named like: Gravity Capacitor Upgrade (8 of 8)
    Skill: Astrometric Rangefinding
    Skill: Astrometrics
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        penalized = False if 'skill' in context or 'implant' in context else True
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', container.getModifiedItemAttr('scanStrengthBonus') * level,
                                        stackingPenalties=penalized, **kwargs)


class Effect4165(BaseEffect):
    """
    shipBonusScanProbeStrengthCF

    Used by:
    Ship: Heron
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Scanner Probe',
                                        'baseSensorStrength', ship.getModifiedItemAttr('shipBonusCF2'),
                                        skill='Caldari Frigate', **kwargs)


class Effect4166(BaseEffect):
    """
    shipBonusScanProbeStrengthMF

    Used by:
    Ship: Probe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Scanner Probe',
                                        'baseSensorStrength', ship.getModifiedItemAttr('shipBonusMF2'),
                                        skill='Minmatar Frigate', **kwargs)


class Effect4167(BaseEffect):
    """
    shipBonusScanProbeStrengthGF

    Used by:
    Ship: Imicus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Scanner Probe',
                                        'baseSensorStrength', ship.getModifiedItemAttr('shipBonusGF2'),
                                        skill='Gallente Frigate', **kwargs)


class Effect4168(BaseEffect):
    """
    eliteBonusCoverOpsScanProbeStrength2

    Used by:
    Ships from group: Covert Ops (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Scanner Probe',
                                        'baseSensorStrength', ship.getModifiedItemAttr('eliteBonusCovertOps2'),
                                        skill='Covert Ops', **kwargs)


class Effect4187(BaseEffect):
    """
    shipBonusStrategicCruiserAmarrHeatDamage

    Used by:
    Ship: Legion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserAmarr1'),
                                      skill='Amarr Strategic Cruiser', **kwargs)


class Effect4188(BaseEffect):
    """
    shipBonusStrategicCruiserCaldariHeatDamage

    Used by:
    Ship: Tengu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserCaldari1'),
                                      skill='Caldari Strategic Cruiser', **kwargs)


class Effect4189(BaseEffect):
    """
    shipBonusStrategicCruiserGallenteHeatDamage

    Used by:
    Ship: Proteus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserGallente1'),
                                      skill='Gallente Strategic Cruiser', **kwargs)


class Effect4190(BaseEffect):
    """
    shipBonusStrategicCruiserMinmatarHeatDamage

    Used by:
    Ship: Loki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserMinmatar1'),
                                      skill='Minmatar Strategic Cruiser', **kwargs)


class Effect4215(BaseEffect):
    """
    subsystemBonusAmarrOffensive2EnergyWeaponCapacitorNeed

    Used by:
    Subsystem: Legion Offensive - Liquid Crystal Magnifiers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'capacitorNeed', module.getModifiedItemAttr('subsystemBonusAmarrOffensive2'),
                                      skill='Amarr Offensive Systems', **kwargs)


class Effect4216(BaseEffect):
    """
    subsystemBonusAmarrCore2EnergyVampireAmount

    Used by:
    Subsystem: Legion Core - Energy Parasitic Complex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'powerTransferAmount',
                                      src.getModifiedItemAttr('subsystemBonusAmarrCore2'), skill='Amarr Core Systems', **kwargs)


class Effect4217(BaseEffect):
    """
    subsystemBonusAmarrCore2EnergyDestabilizerAmount

    Used by:
    Subsystem: Legion Core - Energy Parasitic Complex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'energyNeutralizerAmount',
                                      src.getModifiedItemAttr('subsystemBonusAmarrCore2'), skill='Amarr Core Systems', **kwargs)


class Effect4248(BaseEffect):
    """
    subsystemBonusCaldariOffensive2MissileLauncherKineticDamage

    Used by:
    Subsystem: Tengu Offensive - Accelerated Ejection Bay
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'kineticDamage', src.getModifiedItemAttr('subsystemBonusCaldariOffensive2'),
                                        skill='Caldari Offensive Systems', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', src.getModifiedItemAttr('subsystemBonusCaldariOffensive2'),
                                        skill='Caldari Offensive Systems', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'kineticDamage', src.getModifiedItemAttr('subsystemBonusCaldariOffensive2'),
                                        skill='Caldari Offensive Systems', **kwargs)


class Effect4250(BaseEffect):
    """
    subsystemBonusGallenteOffensiveDroneDamageHP

    Used by:
    Subsystem: Proteus Offensive - Drone Synthesis Projector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'armorHP', src.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                     skill='Gallente Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'hp', src.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                     skill='Gallente Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'damageMultiplier', src.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                     skill='Gallente Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'shieldCapacity', src.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                     skill='Gallente Offensive Systems', **kwargs)


class Effect4251(BaseEffect):
    """
    subsystemBonusMinmatarOffensive2ProjectileWeaponDamageMultiplier

    Used by:
    Subsystem: Loki Offensive - Projectile Scoping Array
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', module.getModifiedItemAttr('subsystemBonusMinmatarOffensive2'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4256(BaseEffect):
    """
    subsystemBonusMinmatarOffensive2MissileLauncherROF

    Used by:
    Subsystem: Loki Offensive - Launcher Efficiency Configuration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Heavy', 'Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', src.getModifiedItemAttr('subsystemBonusMinmatarOffensive2'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4264(BaseEffect):
    """
    subsystemBonusMinmatarCoreCapacitorRecharge

    Used by:
    Subsystem: Loki Core - Augmented Nuclear Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('rechargeRate', src.getModifiedItemAttr('subsystemBonusMinmatarCore'),
                               skill='Minmatar Core Systems', **kwargs)


class Effect4265(BaseEffect):
    """
    subsystemBonusGallenteCoreCapacitorRecharge

    Used by:
    Subsystem: Proteus Core - Augmented Fusion Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('rechargeRate', src.getModifiedItemAttr('subsystemBonusGallenteCore'),
                               skill='Gallente Core Systems', **kwargs)


class Effect4269(BaseEffect):
    """
    subsystemBonusAmarrCore3ScanResolution

    Used by:
    Subsystem: Legion Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanResolution', src.getModifiedItemAttr('subsystemBonusAmarrCore3'),
                               skill='Amarr Core Systems', **kwargs)


class Effect4270(BaseEffect):
    """
    subsystemBonusMinmatarCore3ScanResolution

    Used by:
    Subsystem: Loki Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanResolution', src.getModifiedItemAttr('subsystemBonusMinmatarCore3'),
                               skill='Minmatar Core Systems', **kwargs)


class Effect4271(BaseEffect):
    """
    subsystemBonusCaldariCore2MaxTargetingRange

    Used by:
    Subsystem: Tengu Core - Electronic Efficiency Gate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)


class Effect4272(BaseEffect):
    """
    subsystemBonusGallenteCore2MaxTargetingRange

    Used by:
    Subsystem: Proteus Core - Electronic Efficiency Gate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', src.getModifiedItemAttr('subsystemBonusGallenteCore2'),
                               skill='Gallente Core Systems', **kwargs)


class Effect4273(BaseEffect):
    """
    subsystemBonusGallenteCore2WarpScrambleRange

    Used by:
    Subsystem: Proteus Core - Friction Extension Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler', 'maxRange',
                                      src.getModifiedItemAttr('subsystemBonusGallenteCore2'), skill='Gallente Core Systems', **kwargs)


class Effect4274(BaseEffect):
    """
    subsystemBonusMinmatarCore2StasisWebifierRange

    Used by:
    Subsystem: Loki Core - Immobility Drivers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', src.getModifiedItemAttr('subsystemBonusMinmatarCore2'), skill='Minmatar Core Systems', **kwargs)


class Effect4275(BaseEffect):
    """
    subsystemBonusCaldariPropulsion2WarpSpeed

    Used by:
    Subsystem: Tengu Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('subsystemBonusCaldariPropulsion2'),
                               skill='Caldari Propulsion Systems', **kwargs)


class Effect4277(BaseEffect):
    """
    subsystemBonusGallentePropulsionWarpCapacitor

    Used by:
    Subsystem: Proteus Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpCapacitorNeed', src.getModifiedItemAttr('subsystemBonusGallentePropulsion'),
                               skill='Gallente Propulsion Systems', **kwargs)


class Effect4278(BaseEffect):
    """
    subsystemBonusGallentePropulsion2WarpSpeed

    Used by:
    Subsystem: Proteus Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('subsystemBonusGallentePropulsion2'),
                               skill='Gallente Propulsion Systems', **kwargs)


class Effect4280(BaseEffect):
    """
    systemAgility

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('agility', beacon.getModifiedItemAttr('agilityMultiplier'), stackingPenalties=True, **kwargs)


class Effect4282(BaseEffect):
    """
    subsystemBonusGallenteOffensive2HybridWeaponDamageMultiplier

    Used by:
    Subsystem: Proteus Offensive - Hybrid Encoding Platform
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', module.getModifiedItemAttr('subsystemBonusGallenteOffensive2'),
                                      skill='Gallente Offensive Systems', **kwargs)


class Effect4283(BaseEffect):
    """
    subsystemBonusCaldariOffensive2HybridWeaponDamageMultiplier

    Used by:
    Subsystem: Tengu Offensive - Magnetic Infusion Basin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', module.getModifiedItemAttr('subsystemBonusCaldariOffensive2'),
                                      skill='Caldari Offensive Systems', **kwargs)


class Effect4286(BaseEffect):
    """
    subsystemBonusAmarrOffensive2RemoteArmorRepairCapUse

    Used by:
    Subsystem: Legion Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('subsystemBonusAmarrOffensive2'), skill='Amarr Offensive Systems', **kwargs)


class Effect4288(BaseEffect):
    """
    subsystemBonusGallenteOffensive2RemoteArmorRepairCapUse

    Used by:
    Subsystem: Proteus Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('subsystemBonusGallenteOffensive2'), skill='Gallente Offensive Systems', **kwargs)


class Effect4290(BaseEffect):
    """
    subsystemBonusMinmatarOffensive2RemoteRepCapUse

    Used by:
    Subsystem: Loki Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'capacitorNeed', src.getModifiedItemAttr('subsystemBonusMinmatarOffensive2'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4292(BaseEffect):
    """
    subsystemBonusCaldariOffensive2RemoteShieldBoosterCapUse

    Used by:
    Subsystem: Tengu Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'capacitorNeed', src.getModifiedItemAttr('subsystemBonusCaldariOffensive2'),
                                      skill='Caldari Offensive Systems', **kwargs)


class Effect4321(BaseEffect):
    """
    subsystemBonusCaldariCore2ECMStrengthRange

    Used by:
    Subsystem: Tengu Core - Obfuscation Manifold
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'scanLadarStrengthBonus',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'scanRadarStrengthBonus',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'maxRange',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'scanGravimetricStrengthBonus',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'scanMagnetometricStrengthBonus',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore2'), skill='Caldari Core Systems', **kwargs)


class Effect4327(BaseEffect):
    """
    subsystemBonusAmarrOffensive3DroneDamageHP

    Used by:
    Subsystem: Legion Offensive - Assault Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'hp', src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'armorHP', src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'shieldCapacity', src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'damageMultiplier', src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)


class Effect4330(BaseEffect):
    """
    subsystemBonusAmarrOffensive3EnergyWeaponMaxRange

    Used by:
    Subsystem: Legion Offensive - Liquid Crystal Magnifiers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', module.getModifiedItemAttr('subsystemBonusAmarrOffensive3'),
                                      skill='Amarr Offensive Systems', **kwargs)


class Effect4331(BaseEffect):
    """
    subsystemBonusCaldariOffensive3HMLHAMVelocity

    Used by:
    Subsystem: Tengu Offensive - Accelerated Ejection Bay
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles') or mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', src.getModifiedItemAttr('subsystemBonusCaldariOffensive3'),
                                        skill='Caldari Offensive Systems', **kwargs)


class Effect4342(BaseEffect):
    """
    subsystemBonusMinmatarCore2MaxTargetingRange

    Used by:
    Subsystem: Loki Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', src.getModifiedItemAttr('subsystemBonusMinmatarCore2'),
                               skill='Minmatar Core Systems', **kwargs)


class Effect4343(BaseEffect):
    """
    subsystemBonusAmarrCore2MaxTargetingRange

    Used by:
    Subsystem: Legion Core - Dissolution Sequencer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', src.getModifiedItemAttr('subsystemBonusAmarrCore2'),
                               skill='Amarr Core Systems', **kwargs)


class Effect4347(BaseEffect):
    """
    subsystemBonusGallenteOffensive3TurretTracking

    Used by:
    Subsystem: Proteus Offensive - Drone Synthesis Projector
    Subsystem: Proteus Offensive - Hybrid Encoding Platform
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', module.getModifiedItemAttr('subsystemBonusGallenteOffensive3'),
                                      skill='Gallente Offensive Systems', **kwargs)


class Effect4351(BaseEffect):
    """
    subsystemBonusMinmatarOffensive3TurretTracking

    Used by:
    Subsystem: Loki Offensive - Projectile Scoping Array
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'trackingSpeed', module.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect4358(BaseEffect):
    """
    ecmRangeBonusModuleEffect

    Used by:
    Modules from group: ECM Stabilizer (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'maxRange', module.getModifiedItemAttr('ecmRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect4360(BaseEffect):
    """
    subsystemBonusAmarrOffensiveMissileLauncherROF

    Used by:
    Subsystem: Legion Offensive - Assault Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Heavy', 'Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', src.getModifiedItemAttr('subsystemBonusAmarrOffensive'), skill='Amarr Offensive Systems', **kwargs)


class Effect4362(BaseEffect):
    """
    subsystemBonusAmarrOffensive2MissileDamage

    Used by:
    Subsystem: Legion Offensive - Assault Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', src.getModifiedItemAttr('subsystemBonusAmarrOffensive2'), skill='Amarr Offensive Systems', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', src.getModifiedItemAttr('subsystemBonusAmarrOffensive2'), skill='Amarr Offensive Systems', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                        'emDamage', src.getModifiedItemAttr('subsystemBonusAmarrOffensive2'), skill='Amarr Offensive Systems', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', src.getModifiedItemAttr('subsystemBonusAmarrOffensive2'), skill='Amarr Offensive Systems', **kwargs)


class Effect4366(BaseEffect):
    """
    shipBonusMediumHybridDmgCC2

    Used by:
    Ship: Falcon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect4369(BaseEffect):
    """
    subsystemBonusWarpBubbleImmune

    Used by:
    Subsystems named like: Propulsion Interdiction Nullifier (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.forceItemAttr('warpBubbleImmune', module.getModifiedItemAttr('warpBubbleImmuneModifier'), **kwargs)


class Effect4370(BaseEffect):
    """
    caldariShipEwFalloffRangeCC2

    Used by:
    Ship: Blackbird
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusCC2'),
                                      skill='Caldari Cruiser', **kwargs)


class Effect4372(BaseEffect):
    """
    caldariShipEwFalloffRangeCB3

    Used by:
    Ship: Scorpion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusCB3'),
                                      skill='Caldari Battleship', **kwargs)


class Effect4373(BaseEffect):
    """
    subSystemBonusAmarrOffensiveCommandBursts

    Used by:
    Subsystem: Legion Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: (mod.item.requiresSkill('Skirmish Command') or
                                                       mod.item.requiresSkill('Armored Command') or
                                                       mod.item.requiresSkill('Information Command')),
                                          attrName, src.getModifiedItemAttr('subsystemBonusAmarrOffensive'),
                                          skill='Amarr Offensive Systems', **kwargs)


class Effect4377(BaseEffect):
    """
    shipBonusTorpedoVelocityGF2

    Used by:
    Ship: Nemesis
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4378(BaseEffect):
    """
    shipBonusTorpedoVelocityMF2

    Used by:
    Ship: Hound
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect4379(BaseEffect):
    """
    shipBonusTorpedoVelocity2AF

    Used by:
    Ship: Purifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect4380(BaseEffect):
    """
    shipBonusTorpedoVelocityCF2

    Used by:
    Ship: Manticore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect4384(BaseEffect):
    """
    eliteReconBonusHeavyMissileVelocity

    Used by:
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusReconShip1'),
                                        skill='Recon Ships', **kwargs)


class Effect4385(BaseEffect):
    """
    eliteReconBonusHeavyAssaultMissileVelocity

    Used by:
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusReconShip1'),
                                        skill='Recon Ships', **kwargs)


class Effect4393(BaseEffect):
    """
    shipBonusEliteCover2TorpedoThermalDamage

    Used by:
    Ship: Nemesis
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'thermalDamage', ship.getModifiedItemAttr('eliteBonusCovertOps2'),
                                        skill='Covert Ops', **kwargs)


class Effect4394(BaseEffect):
    """
    shipBonusEliteCover2TorpedoEMDamage

    Used by:
    Ship: Purifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'emDamage', ship.getModifiedItemAttr('eliteBonusCovertOps2'), skill='Covert Ops', **kwargs)


class Effect4395(BaseEffect):
    """
    shipBonusEliteCover2TorpedoExplosiveDamage

    Used by:
    Ship: Hound
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosiveDamage', ship.getModifiedItemAttr('eliteBonusCovertOps2'),
                                        skill='Covert Ops', **kwargs)


class Effect4396(BaseEffect):
    """
    shipBonusEliteCover2TorpedoKineticDamage

    Used by:
    Ship: Manticore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'kineticDamage', ship.getModifiedItemAttr('eliteBonusCovertOps2'),
                                        skill='Covert Ops', **kwargs)


class Effect4397(BaseEffect):
    """
    shipBonusGFTorpedoExplosionVelocity

    Used by:
    Ship: Nemesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect4398(BaseEffect):
    """
    shipBonusMF1TorpedoExplosionVelocity

    Used by:
    Ship: Hound
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect4399(BaseEffect):
    """
    shipBonusCF1TorpedoExplosionVelocity

    Used by:
    Ship: Manticore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect4400(BaseEffect):
    """
    shipBonusAF1TorpedoExplosionVelocity

    Used by:
    Ship: Purifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect4413(BaseEffect):
    """
    shipBonusGF1TorpedoFlightTime

    Used by:
    Ship: Nemesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosionDelay', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect4415(BaseEffect):
    """
    shipBonusMF1TorpedoFlightTime

    Used by:
    Ship: Hound
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosionDelay', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect4416(BaseEffect):
    """
    shipBonusCF1TorpedoFlightTime

    Used by:
    Ship: Manticore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosionDelay', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect4417(BaseEffect):
    """
    shipBonusAF1TorpedoFlightTime

    Used by:
    Ship: Purifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosionDelay', ship.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect4451(BaseEffect):
    """
    ScanRadarStrengthModifierEffect

    Used by:
    Implants named like: Low grade Grail (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('scanRadarStrength', implant.getModifiedItemAttr('scanRadarStrengthModifier'), **kwargs)


class Effect4452(BaseEffect):
    """
    ScanLadarStrengthModifierEffect

    Used by:
    Implants named like: Low grade Jackal (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('scanLadarStrength', implant.getModifiedItemAttr('scanLadarStrengthModifier'), **kwargs)


class Effect4453(BaseEffect):
    """
    ScanGravimetricStrengthModifierEffect

    Used by:
    Implants named like: Low grade Talon (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('scanGravimetricStrength', implant.getModifiedItemAttr('scanGravimetricStrengthModifier'), **kwargs)


class Effect4454(BaseEffect):
    """
    ScanMagnetometricStrengthModifierEffect

    Used by:
    Implants named like: Low grade Spur (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('scanMagnetometricStrength',
                                  implant.getModifiedItemAttr('scanMagnetometricStrengthModifier'), **kwargs)


class Effect4456(BaseEffect):
    """
    federationsetbonus3

    Used by:
    Implants named like: High grade Spur (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanMagnetometricStrengthPercent',
                                                 implant.getModifiedItemAttr('implantSetFederationNavy'), **kwargs)


class Effect4457(BaseEffect):
    """
    imperialsetbonus3

    Used by:
    Implants named like: High grade Grail (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanRadarStrengthPercent',
                                                 implant.getModifiedItemAttr('implantSetImperialNavy'), **kwargs)


class Effect4458(BaseEffect):
    """
    republicsetbonus3

    Used by:
    Implants named like: High grade Jackal (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanLadarStrengthPercent',
                                                 implant.getModifiedItemAttr('implantSetRepublicFleet'), **kwargs)


class Effect4459(BaseEffect):
    """
    caldarisetbonus3

    Used by:
    Implants named like: High grade Talon (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanGravimetricStrengthPercent',
                                                 implant.getModifiedItemAttr('implantSetCaldariNavy'), **kwargs)


class Effect4460(BaseEffect):
    """
    imperialsetLGbonus

    Used by:
    Implants named like: Low grade Grail (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanRadarStrengthModifier',
                                                 implant.getModifiedItemAttr('implantSetLGImperialNavy'), **kwargs)


class Effect4461(BaseEffect):
    """
    federationsetLGbonus

    Used by:
    Implants named like: Low grade Spur (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanMagnetometricStrengthModifier',
                                                 implant.getModifiedItemAttr('implantSetLGFederationNavy'), **kwargs)


class Effect4462(BaseEffect):
    """
    caldarisetLGbonus

    Used by:
    Implants named like: Low grade Talon (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanGravimetricStrengthModifier',
                                                 implant.getModifiedItemAttr('implantSetLGCaldariNavy'), **kwargs)


class Effect4463(BaseEffect):
    """
    republicsetLGbonus

    Used by:
    Implants named like: Low grade Jackal (6 of 6)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'scanLadarStrengthModifier',
                                                 implant.getModifiedItemAttr('implantSetLGRepublicFleet'), **kwargs)


class Effect4464(BaseEffect):
    """
    shipProjectileRofMF

    Used by:
    Ship: Claw
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusMF'), stackingPenalties=True, skill='Minmatar Frigate', **kwargs)


class Effect4471(BaseEffect):
    """
    shipBonusStasisMF2

    Used by:
    Ship: Caedes
    Ship: Cruor
    Ship: Freki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect4472(BaseEffect):
    """
    shipProjectileDmgMC

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)


class Effect4473(BaseEffect):
    """
    shipVelocityBonusATC1

    Used by:
    Ship: Adrestia
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('shipBonusATC1'), **kwargs)


class Effect4474(BaseEffect):
    """
    shipMTMaxRangeBonusATC

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusATC2'), **kwargs)


class Effect4475(BaseEffect):
    """
    shipMTFalloffBonusATC

    Used by:
    Ship: Mimir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusATC2'), **kwargs)


class Effect4476(BaseEffect):
    """
    shipMTFalloffBonusATF

    Used by:
    Ship: Freki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4477(BaseEffect):
    """
    shipMTMaxRangeBonusATF

    Used by:
    Ship: Freki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4478(BaseEffect):
    """
    shipBonusAfterburnerCapNeedATF

    Used by:
    Ship: Freki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module',
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusATF1'), **kwargs)


class Effect4479(BaseEffect):
    """
    shipBonusSurveyProbeExplosionDelaySkillSurveyCovertOps3

    Used by:
    Ships from group: Covert Ops (5 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Survey Probe',
                                        'explosionDelay', ship.getModifiedItemAttr('eliteBonusCovertOps3'),
                                        skill='Covert Ops', **kwargs)


class Effect4482(BaseEffect):
    """
    shipETOptimalRange2AF

    Used by:
    Ship: Imperial Navy Slicer
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect4484(BaseEffect):
    """
    shipPTurretFalloffBonusGB

    Used by:
    Ship: Machariel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGB'), skill='Gallente Battleship', **kwargs)


class Effect4485(BaseEffect):
    """
    shipBonusStasisWebSpeedFactorMB

    Used by:
    Ship: Vindicator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'speedFactor', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect4489(BaseEffect):
    """
    superWeaponAmarr

    Used by:
    Module: 'Judgment' Electromagnetic Doomsday
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect4490(BaseEffect):
    """
    superWeaponCaldari

    Used by:
    Module: 'Oblivion' Kinetic Doomsday
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect4491(BaseEffect):
    """
    superWeaponGallente

    Used by:
    Module: 'Aurora Ominae' Thermal Doomsday
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect4492(BaseEffect):
    """
    superWeaponMinmatar

    Used by:
    Module: 'Gjallarhorn' Explosive Doomsday
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect4510(BaseEffect):
    """
    shipStasisWebStrengthBonusMC2

    Used by:
    Ship: Victor
    Ship: Vigilant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'speedFactor', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect4512(BaseEffect):
    """
    shipPTurretFalloffBonusGC

    Used by:
    Ship: Cynabal
    Ship: Moracha
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect4513(BaseEffect):
    """
    shipStasisWebStrengthBonusMF2

    Used by:
    Ship: Daredevil
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'speedFactor', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect4515(BaseEffect):
    """
    shipFalloffBonusMF

    Used by:
    Ship: Chremoas
    Ship: Dramiel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect4516(BaseEffect):
    """
    shipHTurretFalloffBonusGC

    Used by:
    Ship: Victor
    Ship: Vigilant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect4527(BaseEffect):
    """
    gunneryFalloffBonusOnline

    Used by:
    Modules from group: Tracking Enhancer (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                      'falloff', module.getModifiedItemAttr('falloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect4555(BaseEffect):
    """
    capitalLauncherSkillCruiseCitadelEmDamage1

    Used by:
    Skill: XL Cruise Missiles
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'),
                                        'emDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect4556(BaseEffect):
    """
    capitalLauncherSkillCruiseCitadelExplosiveDamage1

    Used by:
    Skill: XL Cruise Missiles
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'),
                                        'explosiveDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect4557(BaseEffect):
    """
    capitalLauncherSkillCruiseCitadelKineticDamage1

    Used by:
    Skill: XL Cruise Missiles
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'),
                                        'kineticDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect4558(BaseEffect):
    """
    capitalLauncherSkillCruiseCitadelThermalDamage1

    Used by:
    Skill: XL Cruise Missiles
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'),
                                        'thermalDamage', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect4559(BaseEffect):
    """
    gunneryMaxRangeFalloffTrackingSpeedBonus

    Used by:
    Modules from group: Tracking Computer (11 of 11)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for attr in ('maxRange', 'falloff', 'trackingSpeed'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          attr, module.getModifiedItemAttr('%sBonus' % attr),
                                          stackingPenalties=True, **kwargs)


class Effect4575(BaseEffect):
    """
    industrialCoreEffect2

    Used by:
    Variations of module: Industrial Core I (2 of 2)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.multiplyItemAttr('mass', src.getModifiedItemAttr('siegeMassMultiplier'), **kwargs)
        fit.ship.multiplyItemAttr('scanResolution',
                                  src.getModifiedItemAttr('scanResolutionMultiplier'),
                                  stackingPenalties=True, **kwargs)

        #  Remote Shield Repper Bonuses
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'duration', src.getModifiedItemAttr('industrialCoreRemoteLogisticsDurationBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'maxRange', src.getModifiedItemAttr('industrialCoreRemoteLogisticsRangeBonus'),
                                      stackingPenalties=True, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'capacitorNeed', src.getModifiedItemAttr('industrialCoreRemoteLogisticsDurationBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('industrialCoreRemoteLogisticsRangeBonus'),
                                      stackingPenalties=True, **kwargs)

        #  Local Shield Repper Bonuses
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'),
                                      'duration', src.getModifiedItemAttr('industrialCoreLocalLogisticsDurationBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'),
                                      'shieldBonus', src.getModifiedItemAttr('industrialCoreLocalLogisticsAmountBonus'),
                                      stackingPenalties=True, **kwargs)

        # Mining Burst Bonuses
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'),
                                      'warfareBuff1Value', src.getModifiedItemAttr('industrialCoreBonusMiningBurstStrength'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'),
                                      'warfareBuff2Value', src.getModifiedItemAttr('industrialCoreBonusMiningBurstStrength'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'),
                                      'warfareBuff3Value', src.getModifiedItemAttr('industrialCoreBonusMiningBurstStrength'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'),
                                      'warfareBuff4Value', src.getModifiedItemAttr('industrialCoreBonusMiningBurstStrength'), **kwargs)

        #  Command Burst Range Bonus
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'),
                                      'maxRange', src.getModifiedItemAttr('industrialCoreBonusCommandBurstRange'),
                                      stackingPenalties=True, **kwargs)

        # Drone Bonuses
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Ice Harvesting Drone Operation'),
                                     'duration', src.getModifiedItemAttr('industrialCoreBonusDroneIceHarvesting'), **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount', src.getModifiedItemAttr('industrialCoreBonusDroneMining'), **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxVelocity', src.getModifiedItemAttr('industrialCoreBonusDroneVelocity'),
                                     stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', src.getModifiedItemAttr('industrialCoreBonusDroneDamageHP'),
                                     stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity', src.getModifiedItemAttr('industrialCoreBonusDroneDamageHP'), **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP', src.getModifiedItemAttr('industrialCoreBonusDroneDamageHP'), **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp', src.getModifiedItemAttr('industrialCoreBonusDroneDamageHP'), **kwargs)

        # Remote impedance (no reps, etc)
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)
        fit.ship.boostItemAttr('remoteRepairImpedance', src.getModifiedItemAttr('remoteRepairImpedanceBonus'), **kwargs)
        fit.ship.increaseItemAttr('disallowTethering', src.getModifiedItemAttr('disallowTethering'), **kwargs)
        fit.ship.boostItemAttr('sensorDampenerResistance', src.getModifiedItemAttr('sensorDampenerResistanceBonus'), **kwargs)
        fit.ship.boostItemAttr('remoteAssistanceImpedance', src.getModifiedItemAttr('remoteAssistanceImpedanceBonus'), **kwargs)
        fit.ship.increaseItemAttr('disallowDocking', src.getModifiedItemAttr('disallowDocking'), **kwargs)


class Effect4576(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkFalloffBonus1

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'falloffBonus', ship.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect4577(BaseEffect):
    """
    eliteBonusLogisticsTrackingLinkFalloffBonus2

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Tracking Computer',
                                      'falloffBonus', ship.getModifiedItemAttr('eliteBonusLogistics2'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect4579(BaseEffect):
    """
    droneRigStasisWebSpeedFactorBonus

    Used by:
    Modules named like: Stasis Drone Augmentor (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Stasis Webifying Drone',
                                     'speedFactor', module.getModifiedItemAttr('webSpeedFactorBonus'), **kwargs)


class Effect4619(BaseEffect):
    """
    shipBonusDroneDamageGF2

    Used by:
    Ship: Utu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4620(BaseEffect):
    """
    shipBonusWarpScramblerMaxRangeGF2

    Used by:
    Ship: Garmur
    Ship: Utu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4621(BaseEffect):
    """
    shipBonusHeatDamageATF1

    Used by:
    Ship: Cambion
    Ship: Etana
    Ship: Utu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusATF1'), **kwargs)


class Effect4622(BaseEffect):
    """
    shipBonusSmallHybridMaxRangeATF2

    Used by:
    Ship: Utu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4623(BaseEffect):
    """
    shipBonusSmallHybridTrackingSpeedATF2

    Used by:
    Ship: Utu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4624(BaseEffect):
    """
    shipBonusHybridTrackingATC2

    Used by:
    Ship: Adrestia
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusATC2'), **kwargs)


class Effect4625(BaseEffect):
    """
    shipBonusHybridFalloffATC2

    Used by:
    Ship: Adrestia
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusATC2'), **kwargs)


class Effect4626(BaseEffect):
    """
    shipBonusWarpScramblerMaxRangeGC2

    Used by:
    Ship: Adrestia
    Ship: Orthrus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect4635(BaseEffect):
    """
    eliteBonusMaraudersCruiseAndTorpedoDamageRole1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('em', 'explosive', 'kinetic', 'thermal')
        for damageType in damageTypes:
            fit.modules.filteredChargeBoost(
                lambda mod: mod.charge.requiresSkill('Cruise Missiles') or mod.charge.requiresSkill('Torpedoes'),
                '{0}Damage'.format(damageType), ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect4636(BaseEffect):
    """
    shipBonusAoeVelocityCruiseAndTorpedoCB2

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Cruise Missiles') or mod.charge.requiresSkill('Torpedoes'),
            'aoeVelocity', ship.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)


class Effect4637(BaseEffect):
    """
    shipCruiseAndTorpedoVelocityBonusCB3

    Used by:
    Ship: Golem
    Ship: Widow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Cruise Missiles') or mod.charge.requiresSkill('Torpedoes'),
            'maxVelocity', ship.getModifiedItemAttr('shipBonusCB3'), skill='Caldari Battleship', **kwargs)


class Effect4640(BaseEffect):
    """
    shipArmorEMAndExpAndkinAndThmResistanceAC2

    Used by:
    Ships named like: Stratios (2 of 2)
    Ship: Sacrilege
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('Em', 'Explosive', 'Kinetic', 'Thermal')
        for damageType in damageTypes:
            fit.ship.boostItemAttr('armor{0}DamageResonance'.format(damageType), ship.getModifiedItemAttr('shipBonusAC2'),
                                   skill='Amarr Cruiser', **kwargs)


class Effect4643(BaseEffect):
    """
    shipHeavyAssaultMissileEMAndExpAndKinAndThmDmgAC1

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('em', 'explosive', 'kinetic', 'thermal')
        for damageType in damageTypes:
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                            '{0}Damage'.format(damageType), ship.getModifiedItemAttr('shipBonusAC'),
                                            skill='Amarr Cruiser', **kwargs)


class Effect4645(BaseEffect):
    """
    eliteBonusHeavyGunshipHeavyAndHeavyAssaultAndAssaultMissileLauncherROF

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault', 'Missile Launcher Heavy')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect4648(BaseEffect):
    """
    eliteBonusBlackOpsECMGravAndLadarAndMagnetometricAndRadarStrength1

    Used by:
    Ship: Widow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        sensorTypes = ('Gravimetric', 'Ladar', 'Magnetometric', 'Radar')
        for type in sensorTypes:
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'scan{0}StrengthBonus'.format(type),
                                          ship.getModifiedItemAttr('eliteBonusBlackOps1'), skill='Black Ops', **kwargs)


class Effect4649(BaseEffect):
    """
    shipCruiseAndSiegeLauncherROFBonus2CB

    Used by:
    Ship: Widow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        affectedGroups = ('Missile Launcher Cruise', 'Missile Launcher Torpedo')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in affectedGroups,
                                      'speed', ship.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)


class Effect4667(BaseEffect):
    """
    shipBonusNoctisSalvageCycle

    Used by:
    Ship: Noctis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Salvaging'),
                                      'duration', ship.getModifiedItemAttr('shipBonusOreIndustrial1'),
                                      skill='ORE Industrial', **kwargs)


class Effect4668(BaseEffect):
    """
    shipBonusNoctisTractorCycle

    Used by:
    Ship: Noctis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam',
                                      'duration', ship.getModifiedItemAttr('shipBonusOreIndustrial1'),
                                      skill='ORE Industrial', **kwargs)


class Effect4669(BaseEffect):
    """
    shipBonusNoctisTractorVelocity

    Used by:
    Ship: Noctis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam',
                                      'maxTractorVelocity', ship.getModifiedItemAttr('shipBonusOreIndustrial2'),
                                      skill='ORE Industrial', **kwargs)


class Effect4670(BaseEffect):
    """
    shipBonusNoctisTractorRange

    Used by:
    Ship: Noctis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Tractor Beam',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusOreIndustrial2'),
                                      skill='ORE Industrial', **kwargs)


class Effect4728(BaseEffect):
    """
    OffensiveDefensiveReduction

    Used by:
    Celestials named like: Drifter Incursion (6 of 6)
    Celestials named like: Sansha Incursion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        damages = ('em', 'thermal', 'kinetic', 'explosive')
        for damage in damages:
            # Nerf missile damage
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                            '{0}Damage'.format(damage),
                                            beacon.getModifiedItemAttr('systemEffectDamageReduction'), **kwargs)
            # Nerf smartbomb damage
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Smart Bomb',
                                          '{0}Damage'.format(damage),
                                          beacon.getModifiedItemAttr('systemEffectDamageReduction'), **kwargs)
            # Nerf armor resistances
            fit.ship.boostItemAttr('armor{0}DamageResonance'.format(damage.capitalize()),
                                   beacon.getModifiedItemAttr('armor{0}DamageResistanceBonus'.format(damage.capitalize())), **kwargs)
            # Nerf shield resistances
            fit.ship.boostItemAttr('shield{0}DamageResonance'.format(damage.capitalize()),
                                   beacon.getModifiedItemAttr('shield{0}DamageResistanceBonus'.format(damage.capitalize())), **kwargs)
        # Nerf drone damage output
        fit.drones.filteredItemBoost(lambda drone: True,
                                     'damageMultiplier', beacon.getModifiedItemAttr('systemEffectDamageReduction'), **kwargs)
        # Nerf turret damage output
        fit.modules.filteredItemBoost(lambda module: module.item.requiresSkill('Gunnery'),
                                      'damageMultiplier', beacon.getModifiedItemAttr('systemEffectDamageReduction'), **kwargs)


class Effect4760(BaseEffect):
    """
    subsystemBonusCaldariPropulsionWarpCapacitor

    Used by:
    Subsystem: Tengu Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpCapacitorNeed', src.getModifiedItemAttr('subsystemBonusCaldariPropulsion'),
                               skill='Caldari Propulsion Systems', **kwargs)


class Effect4775(BaseEffect):
    """
    shipEnergyNeutralizerTransferAmountBonusAF2

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('shipBonus2AF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect4782(BaseEffect):
    """
    shipBonusSmallEnergyWeaponOptimalRangeATF2

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4789(BaseEffect):
    """
    shipBonusSmallEnergyTurretDamageATF1

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusATF1'), **kwargs)


class Effect4793(BaseEffect):
    """
    shipBonusMissileLauncherHeavyROFATC1

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy',
                                      'speed', ship.getModifiedItemAttr('shipBonusATC1'), **kwargs)


class Effect4794(BaseEffect):
    """
    shipBonusMissileLauncherAssaultROFATC1

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Light',
                                      'speed', ship.getModifiedItemAttr('shipBonusATC1'), **kwargs)


class Effect4795(BaseEffect):
    """
    shipBonusMissileLauncherHeavyAssaultROFATC1

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy Assault',
                                      'speed', ship.getModifiedItemAttr('shipBonusATC1'), **kwargs)


class Effect4799(BaseEffect):
    """
    eliteBonusBlackOpsECMBurstGravAndLadarAndMagnetoAndRadar

    Used by:
    Ship: Widow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        sensorTypes = ('Gravimetric', 'Ladar', 'Magnetometric', 'Radar')
        for type in sensorTypes:
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Burst Jammer',
                                          'scan{0}StrengthBonus'.format(type),
                                          ship.getModifiedItemAttr('eliteBonusBlackOps1'), skill='Black Ops', **kwargs)


class Effect4804(BaseEffect):
    """
    dataMiningSkillBoostAccessDifficultyBonusAbsolutePercent

    Used by:
    Skill: Archaeology
    Skill: Hacking
    Skill: Salvaging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill(skill), 'accessDifficultyBonus',
                                         skill.getModifiedItemAttr('accessDifficultyBonusAbsolutePercent') * skill.level, **kwargs)


class Effect4809(BaseEffect):
    """
    ecmGravimetricStrengthBonusPercent

    Used by:
    Modules from group: ECM Stabilizer (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanGravimetricStrengthBonus', module.getModifiedItemAttr('ecmStrengthBonusPercent'),
                                      stackingPenalties=True, **kwargs)


class Effect4810(BaseEffect):
    """
    ecmLadarStrengthBonusPercent

    Used by:
    Modules from group: ECM Stabilizer (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanLadarStrengthBonus', module.getModifiedItemAttr('ecmStrengthBonusPercent'),
                                      stackingPenalties=True, **kwargs)


class Effect4811(BaseEffect):
    """
    ecmMagnetometricStrengthBonusPercent

    Used by:
    Modules from group: ECM Stabilizer (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanMagnetometricStrengthBonus',
                                      module.getModifiedItemAttr('ecmStrengthBonusPercent'),
                                      stackingPenalties=True, **kwargs)


class Effect4812(BaseEffect):
    """
    ecmRadarStrengthBonusPercent

    Used by:
    Modules from group: ECM Stabilizer (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                      'scanRadarStrengthBonus', module.getModifiedItemAttr('ecmStrengthBonusPercent'),
                                      stackingPenalties=True, **kwargs)


class Effect4814(BaseEffect):
    """
    jumpPortalConsumptionBonusPercentSkill

    Used by:
    Skill: Jump Portal Generation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), 'consumptionQuantity',
                                      skill.getModifiedItemAttr('consumptionQuantityBonusPercent') * skill.level, **kwargs)


class Effect4817(BaseEffect):
    """
    salvagerModuleDurationReduction

    Used by:
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Salvager',
                                      'duration', implant.getModifiedItemAttr('durationBonus'), **kwargs)


class Effect4820(BaseEffect):
    """
    bcLargeEnergyTurretPowerNeedBonus

    Used by:
    Ship: Oracle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                         'power', ship.getModifiedItemAttr('bcLargeTurretPower'), **kwargs)


class Effect4821(BaseEffect):
    """
    bcLargeHybridTurretPowerNeedBonus

    Used by:
    Ship: Naga
    Ship: Talos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                         'power', ship.getModifiedItemAttr('bcLargeTurretPower'), **kwargs)


class Effect4822(BaseEffect):
    """
    bcLargeProjectileTurretPowerNeedBonus

    Used by:
    Ship: Tornado
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                         'power', ship.getModifiedItemAttr('bcLargeTurretPower'), **kwargs)


class Effect4823(BaseEffect):
    """
    bcLargeEnergyTurretCPUNeedBonus

    Used by:
    Ship: Oracle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                         'cpu', ship.getModifiedItemAttr('bcLargeTurretCPU'), **kwargs)


class Effect4824(BaseEffect):
    """
    bcLargeHybridTurretCPUNeedBonus

    Used by:
    Ship: Naga
    Ship: Talos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                         'cpu', ship.getModifiedItemAttr('bcLargeTurretCPU'), **kwargs)


class Effect4825(BaseEffect):
    """
    bcLargeProjectileTurretCPUNeedBonus

    Used by:
    Ship: Tornado
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                         'cpu', ship.getModifiedItemAttr('bcLargeTurretCPU'), **kwargs)


class Effect4826(BaseEffect):
    """
    bcLargeEnergyTurretCapacitorNeedBonus

    Used by:
    Ship: Oracle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                         'capacitorNeed', ship.getModifiedItemAttr('bcLargeTurretCap'), **kwargs)


class Effect4827(BaseEffect):
    """
    bcLargeHybridTurretCapacitorNeedBonus

    Used by:
    Ship: Naga
    Ship: Talos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                         'capacitorNeed', ship.getModifiedItemAttr('bcLargeTurretCap'), **kwargs)


class Effect4867(BaseEffect):
    """
    setBonusChristmasPowergrid

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'powerEngineeringOutputBonus',
                                                 implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect4868(BaseEffect):
    """
    setBonusChristmasCapacitorCapacity

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'capacitorCapacityBonus',
                                                 implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect4869(BaseEffect):
    """
    setBonusChristmasCPUOutput

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'cpuOutputBonus2', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect4871(BaseEffect):
    """
    setBonusChristmasCapacitorRecharge2

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'capRechargeBonus', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect4896(BaseEffect):
    """
    shipBonusDroneHitpointsGF2

    Used by:
    Ship: Ishkur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4897(BaseEffect):
    """
    shipBonusDroneArmorHitpointsGF2

    Used by:
    Ship: Ishkur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4898(BaseEffect):
    """
    shipBonusDroneShieldHitpointsGF2

    Used by:
    Ship: Ishkur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect4901(BaseEffect):
    """
    shipMissileSpeedBonusAF

    Used by:
    Ship: Vengeance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect4902(BaseEffect):
    """
    MWDSignatureRadiusRoleBonus

    Used by:
    Ships from group: Assault Frigate (9 of 13)
    Ships from group: Command Destroyer (5 of 5)
    Ships from group: Heavy Assault Cruiser (9 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('MWDSignatureRadiusBonus'), **kwargs)


class Effect4906(BaseEffect):
    """
    systemDamageFighters

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.drones.filteredItemMultiply(lambda drone: drone.item.requiresSkill('Fighters'),
                                        'damageMultiplier', beacon.getModifiedItemAttr('damageMultiplierMultiplier'),
                                        stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4911(BaseEffect):
    """
    modifyShieldRechargeRatePassive

    Used by:
    Modules named like: Processor Overclocking Unit (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('shieldRechargeRate', module.getModifiedItemAttr('shieldRechargeRateMultiplier'), **kwargs)


class Effect4921(BaseEffect):
    """
    microJumpDrive

    Used by:
    Modules from group: Micro Jump Drive (2 of 2)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonusPercent'), **kwargs)


class Effect4923(BaseEffect):
    """
    skillMJDdurationBonus

    Used by:
    Skill: Micro Jump Drive Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Micro Jump Drive Operation'),
                                      'duration', skill.getModifiedItemAttr('durationBonus') * skill.level, **kwargs)


class Effect4928(BaseEffect):
    """
    adaptiveArmorHardener

    Used by:
    Module: Reactive Armor Hardener
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # pyfalog = Logger(__name__)

        damagePattern = fit.damagePattern
        # pyfalog.debug('==============================')

        static_adaptive_behavior = eos.config.settings['useStaticAdaptiveArmorHardener']

        if (damagePattern.emAmount == damagePattern.thermalAmount == damagePattern.kineticAmount == damagePattern.explosiveAmount) and static_adaptive_behavior:
            # pyfalog.debug('Setting adaptivearmorhardener resists to uniform profile.')
            for attr in ('armorEmDamageResonance', 'armorThermalDamageResonance', 'armorKineticDamageResonance', 'armorExplosiveDamageResonance'):
                fit.ship.multiplyItemAttr(attr, module.getModifiedItemAttr(attr), stackingPenalties=True, penaltyGroup='preMul')
            return

        # Skip if there is no damage pattern. Example: projected ships or fleet boosters
        if damagePattern:

            # Populate a tuple with the damage profile modified by current armor resists.
            baseDamageTaken = (
                damagePattern.emAmount * fit.ship.getModifiedItemAttr('armorEmDamageResonance'),
                damagePattern.thermalAmount * fit.ship.getModifiedItemAttr('armorThermalDamageResonance'),
                damagePattern.kineticAmount * fit.ship.getModifiedItemAttr('armorKineticDamageResonance'),
                damagePattern.explosiveAmount * fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance'),
            )
            # pyfalog.debug('Damage Adjusted for Armor Resists: %f/%f/%f/%f' % (baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3]))

            resistanceShiftAmount = module.getModifiedItemAttr(
                'resistanceShiftAmount') / 100  # The attribute is in percent and we want a fraction
            RAHResistance = [
                module.getModifiedItemAttr('armorEmDamageResonance'),
                module.getModifiedItemAttr('armorThermalDamageResonance'),
                module.getModifiedItemAttr('armorKineticDamageResonance'),
                module.getModifiedItemAttr('armorExplosiveDamageResonance'),
            ]

            # Simulate RAH cycles until the RAH either stops changing or enters a loop.
            # The number of iterations is limited to prevent an infinite loop if something goes wrong.
            cycleList = []
            loopStart = -20
            for num in range(50):
                # pyfalog.debug('Starting cycle %d.' % num)
                # The strange order is to emulate the ingame sorting when different types have taken the same amount of damage.
                # This doesn't take into account stacking penalties. In a few cases fitting a Damage Control causes an inaccurate result.
                damagePattern_tuples = [
                    (0, baseDamageTaken[0] * RAHResistance[0], RAHResistance[0]),
                    (3, baseDamageTaken[3] * RAHResistance[3], RAHResistance[3]),
                    (2, baseDamageTaken[2] * RAHResistance[2], RAHResistance[2]),
                    (1, baseDamageTaken[1] * RAHResistance[1], RAHResistance[1]),
                ]

                # Sort the tuple to drop the highest damage value to the bottom
                sortedDamagePattern_tuples = sorted(damagePattern_tuples, key=lambda damagePattern: damagePattern[1])

                if sortedDamagePattern_tuples[2][1] == 0:
                    # One damage type: the top damage type takes from the other three
                    # Since the resistances not taking damage will end up going to the type taking damage we just do the whole thing at once.
                    change0 = 1 - sortedDamagePattern_tuples[0][2]
                    change1 = 1 - sortedDamagePattern_tuples[1][2]
                    change2 = 1 - sortedDamagePattern_tuples[2][2]
                    change3 = -(change0 + change1 + change2)
                elif sortedDamagePattern_tuples[1][1] == 0:
                    # Two damage types: the top two damage types take from the other two
                    # Since the resistances not taking damage will end up going equally to the types taking damage we just do the whole thing at once.
                    change0 = 1 - sortedDamagePattern_tuples[0][2]
                    change1 = 1 - sortedDamagePattern_tuples[1][2]
                    change2 = -(change0 + change1) / 2
                    change3 = -(change0 + change1) / 2
                else:
                    # Three or four damage types: the top two damage types take from the other two
                    change0 = min(resistanceShiftAmount, 1 - sortedDamagePattern_tuples[0][2])
                    change1 = min(resistanceShiftAmount, 1 - sortedDamagePattern_tuples[1][2])
                    change2 = -(change0 + change1) / 2
                    change3 = -(change0 + change1) / 2

                RAHResistance[sortedDamagePattern_tuples[0][0]] = sortedDamagePattern_tuples[0][2] + change0
                RAHResistance[sortedDamagePattern_tuples[1][0]] = sortedDamagePattern_tuples[1][2] + change1
                RAHResistance[sortedDamagePattern_tuples[2][0]] = sortedDamagePattern_tuples[2][2] + change2
                RAHResistance[sortedDamagePattern_tuples[3][0]] = sortedDamagePattern_tuples[3][2] + change3
                # pyfalog.debug('Resistances shifted to %f/%f/%f/%f' % ( RAHResistance[0], RAHResistance[1], RAHResistance[2], RAHResistance[3]))

                # See if the current RAH profile has been encountered before, indicating a loop.
                for i, val in enumerate(cycleList):
                    tolerance = 1e-06
                    if abs(RAHResistance[0] - val[0]) <= tolerance and \
                                abs(RAHResistance[1] - val[1]) <= tolerance and \
                                abs(RAHResistance[2] - val[2]) <= tolerance and \
                                abs(RAHResistance[3] - val[3]) <= tolerance:
                        loopStart = i
                        # pyfalog.debug('Loop found: %d-%d' % (loopStart, num))
                        break
                if loopStart >= 0:
                    break

                cycleList.append(list(RAHResistance))

            # if loopStart < 0:
                # pyfalog.error('Reactive Armor Hardener failed to find equilibrium. Damage profile after armor: {0}/{1}/{2}/{3}'.format(
                #             baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3]))

            # Average the profiles in the RAH loop, or the last 20 if it didn't find a loop.
            loopCycles = cycleList[loopStart:]
            numCycles = len(loopCycles)
            average = [0, 0, 0, 0]
            for cycle in loopCycles:
                for i in range(4):
                    average[i] += cycle[i]

            for i in range(4):
                average[i] = round(average[i] / numCycles, 3)

            # Set the new resistances
            # pyfalog.debug('Setting new resist profile: %f/%f/%f/%f' % ( average[0], average[1], average[2],average[3]))
            for i, attr in enumerate((
                    'armorEmDamageResonance', 'armorThermalDamageResonance', 'armorKineticDamageResonance',
                    'armorExplosiveDamageResonance')):
                module.increaseItemAttr(attr, average[i] - module.getModifiedItemAttr(attr))
                fit.ship.multiplyItemAttr(attr, average[i], stackingPenalties=True, penaltyGroup='preMul', **kwargs)


class Effect4934(BaseEffect):
    """
    shipArmorRepairingGF2

    Used by:
    Ship: Incursus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGF2'),
                                      skill='Gallente Frigate', **kwargs)


class Effect4936(BaseEffect):
    """
    fueledShieldBoosting

    Used by:
    Modules from group: Ancillary Shield Booster (8 of 8)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        amount = module.getModifiedItemAttr('shieldBonus')
        speed = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('shieldRepair', amount / speed, **kwargs)


class Effect4941(BaseEffect):
    """
    shipHybridDamageBonusCF2

    Used by:
    Ship: Griffin Navy Issue
    Ship: Merlin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect4942(BaseEffect):
    """
    targetBreaker

    Used by:
    Module: Target Spectrum Breaker
    """

    type = 'active'


class Effect4945(BaseEffect):
    """
    skillTargetBreakerDurationBonus2

    Used by:
    Skill: Target Breaker Amplification
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Breaker',
                                      'duration', skill.getModifiedItemAttr('durationBonus') * skill.level, **kwargs)


class Effect4946(BaseEffect):
    """
    skillTargetBreakerCapNeedBonus2

    Used by:
    Skill: Target Breaker Amplification
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Breaker',
                                      'capacitorNeed', skill.getModifiedItemAttr('capNeedBonus') * skill.level, **kwargs)


class Effect4950(BaseEffect):
    """
    shipBonusShieldBoosterMB1a

    Used by:
    Ship: Maelstrom
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect4951(BaseEffect):
    """
    shieldBoostAmplifierPassiveBooster

    Used by:
    Implants named like: Agency 'Hardshell' TB Dose (4 of 4)
    Implants named like: Blue Pill Booster (5 of 5)
    Implant: Antipharmakon Thureo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Operation') or mod.item.requiresSkill('Capital Shield Operation'),
            'shieldBonus', container.getModifiedItemAttr('shieldBoostMultiplier'), **kwargs)


class Effect4961(BaseEffect):
    """
    systemShieldRepairAmountShieldSkills

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Shield Operation') or
                                                     mod.item.requiresSkill('Capital Shield Operation'),
                                         'shieldBonus', module.getModifiedItemAttr('shieldBonusMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect4967(BaseEffect):
    """
    shieldBoosterDurationBonusShieldSkills

    Used by:
    Modules named like: Core Defense Operational Solidifier (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Operation') or mod.item.requiresSkill('Capital Shield Operation'),
            'duration', module.getModifiedItemAttr('durationSkillBonus'), **kwargs)


class Effect4970(BaseEffect):
    """
    boosterShieldBoostAmountPenaltyShieldSkills

    Used by:
    Implants named like: Crash Booster (3 of 4)
    Implants named like: Frentix Booster (3 of 4)
    Implants named like: Mindflood Booster (3 of 4)
    """

    attr = 'boosterShieldBoostAmountPenalty'
    displayName = 'Shield Boost'
    type = 'boosterSideEffect'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation') or mod.item.requiresSkill('Capital Shield Operation'),
                                      'shieldBonus', src.getModifiedItemAttr('boosterShieldBoostAmountPenalty'), **kwargs)


class Effect4972(BaseEffect):
    """
    eliteBonusAssaultShipLightMissileROF

    Used by:
    Ship: Cambion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Light',
                                      'speed', ship.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect4973(BaseEffect):
    """
    eliteBonusAssaultShipRocketROF

    Used by:
    Ship: Cambion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rocket',
                                      'speed', ship.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect4974(BaseEffect):
    """
    eliteBonusMarauderShieldBonus2a

    Used by:
    Ship: Golem
    Ship: Vargur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('eliteBonusViolators2'), skill='Marauders', **kwargs)


class Effect4975(BaseEffect):
    """
    shipBonusMissileKineticlATF2

    Used by:
    Ship: Cambion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusATF2'), **kwargs)


class Effect4976(BaseEffect):
    """
    skillReactiveArmorHardenerDurationBonus

    Used by:
    Skill: Resistance Phasing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Resistance Shift Hardener', 'duration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Resistance Phasing'), 'duration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect4989(BaseEffect):
    """
    missileSkillAoeCloudSizeBonusAllIncludingCapitals

    Used by:
    Implants named like: Crash Booster (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeCloudSize', implant.getModifiedItemAttr('aoeCloudSizeBonus'), **kwargs)


class Effect4990(BaseEffect):
    """
    shipEnergyTCapNeedBonusRookie

    Used by:
    Ship: Hematos
    Ship: Impairor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('rookieSETCapBonus'), **kwargs)


class Effect4991(BaseEffect):
    """
    shipSETDmgBonusRookie

    Used by:
    Ship: Hematos
    Ship: Immolator
    Ship: Impairor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('rookieSETDamageBonus'), **kwargs)


class Effect4994(BaseEffect):
    """
    shipArmorEMResistanceRookie

    Used by:
    Ship: Devoter
    Ship: Gold Magnate
    Ship: Impairor
    Ship: Phobos
    Ship: Silver Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('rookieArmorResistanceBonus'), **kwargs)


class Effect4995(BaseEffect):
    """
    shipArmorEXResistanceRookie

    Used by:
    Ship: Devoter
    Ship: Gold Magnate
    Ship: Impairor
    Ship: Phobos
    Ship: Silver Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('rookieArmorResistanceBonus'), **kwargs)


class Effect4996(BaseEffect):
    """
    shipArmorKNResistanceRookie

    Used by:
    Ship: Devoter
    Ship: Gold Magnate
    Ship: Impairor
    Ship: Phobos
    Ship: Silver Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('rookieArmorResistanceBonus'), **kwargs)


class Effect4997(BaseEffect):
    """
    shipArmorTHResistanceRookie

    Used by:
    Ship: Devoter
    Ship: Gold Magnate
    Ship: Impairor
    Ship: Phobos
    Ship: Silver Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('rookieArmorResistanceBonus'), **kwargs)


class Effect4999(BaseEffect):
    """
    shipHybridRangeBonusRookie

    Used by:
    Ship: Ibis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('rookieSHTOptimalBonus'), **kwargs)


class Effect5000(BaseEffect):
    """
    shipMissileKineticDamageRookie

    Used by:
    Ship: Ibis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('rookieMissileKinDamageBonus'), **kwargs)


class Effect5008(BaseEffect):
    """
    shipShieldEMResistanceRookie

    Used by:
    Ships from group: Heavy Interdiction Cruiser (3 of 5)
    Ship: Ibis
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', ship.getModifiedItemAttr('rookieShieldResistBonus'), **kwargs)


class Effect5009(BaseEffect):
    """
    shipShieldExplosiveResistanceRookie

    Used by:
    Ships from group: Heavy Interdiction Cruiser (3 of 5)
    Ship: Ibis
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', ship.getModifiedItemAttr('rookieShieldResistBonus'), **kwargs)


class Effect5011(BaseEffect):
    """
    shipShieldKineticResistanceRookie

    Used by:
    Ships from group: Heavy Interdiction Cruiser (3 of 5)
    Ship: Ibis
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', ship.getModifiedItemAttr('rookieShieldResistBonus'), **kwargs)


class Effect5012(BaseEffect):
    """
    shipShieldThermalResistanceRookie

    Used by:
    Ships from group: Heavy Interdiction Cruiser (3 of 5)
    Ship: Ibis
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', ship.getModifiedItemAttr('rookieShieldResistBonus'), **kwargs)


class Effect5013(BaseEffect):
    """
    shipSHTDmgBonusRookie

    Used by:
    Ship: Velator
    Ship: Violator
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('rookieSHTDamageBonus'), **kwargs)


class Effect5014(BaseEffect):
    """
    shipBonusDroneDamageMultiplierRookie

    Used by:
    Ship: Gnosis
    Ship: Praxis
    Ship: Sunesis
    Ship: Taipan
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('rookieDroneBonus'), **kwargs)


class Effect5015(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerMaxTargetRangeBonusRookie

    Used by:
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxTargetRangeBonus', ship.getModifiedItemAttr('rookieDampStrengthBonus'), **kwargs)


class Effect5016(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerScanResolutionBonusRookie

    Used by:
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'scanResolutionBonus', ship.getModifiedItemAttr('rookieDampStrengthBonus'), **kwargs)


class Effect5017(BaseEffect):
    """
    shipArmorRepairingRookie

    Used by:
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('rookieArmorRepBonus'), **kwargs)


class Effect5018(BaseEffect):
    """
    shipVelocityBonusRookie

    Used by:
    Ship: Reaper
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', ship.getModifiedItemAttr('rookieShipVelocityBonus'), **kwargs)


class Effect5019(BaseEffect):
    """
    minmatarShipEwTargetPainterRookie

    Used by:
    Ship: Reaper
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('rookieTargetPainterStrengthBonus'), **kwargs)


class Effect5020(BaseEffect):
    """
    shipSPTDmgBonusRookie

    Used by:
    Ship: Echo
    Ship: Reaper
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('rookieSPTDamageBonus'), **kwargs)


class Effect5021(BaseEffect):
    """
    shipShieldBoostRookie

    Used by:
    Ship: Immolator
    Ship: Reaper
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('rookieShieldBoostBonus'), **kwargs)


class Effect5028(BaseEffect):
    """
    shipECMScanStrengthBonusRookie

    Used by:
    Ship: Ibis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('Gravimetric', 'Ladar', 'Radar', 'Magnetometric'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM',
                                          'scan{0}StrengthBonus'.format(type),
                                          ship.getModifiedItemAttr('rookieECMStrengthBonus'), **kwargs)


class Effect5029(BaseEffect):
    """
    shipBonusDroneMiningAmountRole

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount', src.getModifiedItemAttr('roleBonusDroneMiningYield'), **kwargs)


class Effect5030(BaseEffect):
    """
    shipBonusMiningDroneAmountPercentRookie

    Used by:
    Ship: Gnosis
    Ship: Praxis
    Ship: Taipan
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount', container.getModifiedItemAttr('rookieDroneBonus'), **kwargs)


class Effect5035(BaseEffect):
    """
    shipBonusDroneHitpointsRookie

    Used by:
    Variations of ship: Procurer (2 of 2)
    Ship: Gnosis
    Ship: Praxis
    Ship: Sunesis
    Ship: Taipan
    Ship: Velator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         type, ship.getModifiedItemAttr('rookieDroneBonus'), **kwargs)


class Effect5036(BaseEffect):
    """
    shipBonusSalvageCycleAF

    Used by:
    Ship: Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Salvaging'),
                                      'duration', ship.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect5045(BaseEffect):
    """
    shipBonusSalvageCycleCF

    Used by:
    Ship: Heron
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Salvaging'),
                                      'duration', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect5048(BaseEffect):
    """
    shipBonusSalvageCycleGF

    Used by:
    Ship: Imicus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Salvaging'),
                                      'duration', ship.getModifiedItemAttr('shipBonusGF'), skill='Amarr Frigate', **kwargs)


class Effect5051(BaseEffect):
    """
    shipBonusSalvageCycleMF

    Used by:
    Ship: Probe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Salvaging'),
                                      'duration', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect5055(BaseEffect):
    """
    iceHarvesterDurationMultiplier

    Used by:
    Ship: Endurance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                         'duration', ship.getModifiedItemAttr('iceHarvestCycleBonus'), **kwargs)


class Effect5058(BaseEffect):
    """
    miningYieldMultiplyPassive

    Used by:
    Variations of ship: Venture (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Mining'),
                                         'miningAmount', module.getModifiedItemAttr('miningAmountMultiplier'), **kwargs)


class Effect5059(BaseEffect):
    """
    shipBonusIceHarvesterDurationORE3

    Used by:
    Ships from group: Exhumer (3 of 3)
    Ships from group: Mining Barge (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'),
                                      'duration', container.getModifiedItemAttr('shipBonusORE3'), skill='Mining Barge', **kwargs)


class Effect5066(BaseEffect):
    """
    shipBonusTargetPainterOptimalMF1

    Used by:
    Ship: Hyena
    Ship: Vigil
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Target Painting'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect5067(BaseEffect):
    """
    shipBonusOreHoldORE2

    Used by:
    Variations of ship: Retriever (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialOreHoldCapacity', ship.getModifiedItemAttr('shipBonusORE2'), skill='Mining Barge', **kwargs)


class Effect5068(BaseEffect):
    """
    shipBonusShieldCapacityORE2

    Used by:
    Variations of ship: Procurer (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', ship.getModifiedItemAttr('shipBonusORE2'), skill='Mining Barge', **kwargs)


class Effect5069(BaseEffect):
    """
    mercoxitCrystalBonus

    Used by:
    Module: Medium Mercoxit Mining Crystal Optimization I
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Mercoxit Processing'),
                                        'specialisationAsteroidYieldMultiplier',
                                        module.getModifiedItemAttr('miningAmountBonus'), **kwargs)


class Effect5079(BaseEffect):
    """
    shipMissileKineticDamageCF2

    Used by:
    Ship: Garmur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5080(BaseEffect):
    """
    shipMissileVelocityCF

    Used by:
    Ship: Caldari Navy Hookbill
    Ship: Crow
    Ship: Kestrel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect5081(BaseEffect):
    """
    maxTargetingRangeBonusPostPercentPassive

    Used by:
    Modules named like: Ionic Field Projector (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)


class Effect5087(BaseEffect):
    """
    shipBonusDroneHitpointsGF

    Used by:
    Ship: Astero
    Ship: Maulus Navy Issue
    Ship: Tristan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for layer in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         layer, ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5090(BaseEffect):
    """
    shipShieldBoostMF

    Used by:
    Ship: Breacher
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect5103(BaseEffect):
    """
    shipBonusShieldTransferCapNeedCF

    Used by:
    Variations of ship: Bantam (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect5104(BaseEffect):
    """
    shipBonusShieldTransferBoostAmountCF2

    Used by:
    Variations of ship: Bantam (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5105(BaseEffect):
    """
    shipBonusShieldTransferCapNeedMF

    Used by:
    Variations of ship: Burst (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect5106(BaseEffect):
    """
    shipBonusShieldTransferBoostAmountMF2

    Used by:
    Variations of ship: Burst (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect5107(BaseEffect):
    """
    shipBonusRemoteArmorRepairCapNeedGF

    Used by:
    Variations of ship: Navitas (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5108(BaseEffect):
    """
    shipBonusRemoteArmorRepairAmountGF2

    Used by:
    Variations of ship: Navitas (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusGF2'),
                                      skill='Gallente Frigate', **kwargs)


class Effect5109(BaseEffect):
    """
    shipBonusRemoteArmorRepairCapNeedAF

    Used by:
    Ship: Deacon
    Ship: Inquisitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect5110(BaseEffect):
    """
    shipBonusRemoteArmorRepairAmount2AF

    Used by:
    Ship: Deacon
    Ship: Inquisitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect5111(BaseEffect):
    """
    shipBonusDroneTrackingGF

    Used by:
    Ship: Maulus Navy Issue
    Ship: Tristan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'trackingSpeed', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5119(BaseEffect):
    """
    shipBonusScanProbeStrength2AF

    Used by:
    Ship: Magnate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Scanner Probe',
                                        'baseSensorStrength', ship.getModifiedItemAttr('shipBonus2AF'),
                                        skill='Amarr Frigate', **kwargs)


class Effect5121(BaseEffect):
    """
    energyTransferArrayTransferAmountBonus

    Used by:
    Ship: Augoror
    Ship: Osprey
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'powerTransferAmount', ship.getModifiedItemAttr('energyTransferAmountBonus'), **kwargs)


class Effect5122(BaseEffect):
    """
    shipBonusShieldTransferCapneedMC1

    Used by:
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)


class Effect5123(BaseEffect):
    """
    shipBonusRemoteArmorRepairCapNeedAC1

    Used by:
    Ship: Augoror
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5124(BaseEffect):
    """
    shipBonusRemoteArmorRepairAmountAC2

    Used by:
    Ship: Augoror
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect5125(BaseEffect):
    """
    shipBonusRemoteArmorRepairAmountGC2

    Used by:
    Ship: Exequror
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect5126(BaseEffect):
    """
    shipBonusShieldTransferBoostAmountCC2

    Used by:
    Ship: Osprey
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5127(BaseEffect):
    """
    shipBonusShieldTransferBoostAmountMC2

    Used by:
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect5128(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerOptimalBonusGC1

    Used by:
    Ship: Celestis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect5129(BaseEffect):
    """
    minmatarShipEwTargetPainterMC1

    Used by:
    Ship: Bellicose
    Ship: Rapier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter',
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('shipBonusMC'),
                                      skill='Minmatar Cruiser', **kwargs)


class Effect5131(BaseEffect):
    """
    shipMissileRofCC

    Used by:
    Ships named like: Caracal (2 of 2)
    Ship: Enforcer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Heavy', 'Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'speed', ship.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect5132(BaseEffect):
    """
    shipPTurretFalloffBonusMC2

    Used by:
    Ship: Enforcer
    Ship: Stabber
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect5133(BaseEffect):
    """
    shipHTDamageBonusCC

    Used by:
    Ship: Moa
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect5136(BaseEffect):
    """
    shipMETCDamageBonusAC

    Used by:
    Ship: Augoror Navy Issue
    Ship: Enforcer
    Ship: Maller
    Ship: Omen Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5139(BaseEffect):
    """
    shipMiningBonusOREfrig1

    Used by:
    Variations of ship: Venture (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'miningAmount', module.getModifiedItemAttr('shipBonusOREfrig1'),
                                      skill='Mining Frigate', **kwargs)


class Effect5142(BaseEffect):
    """
    GCHYieldMultiplyPassive

    Used by:
    Ship: Prospect
    Ship: Venture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Gas Cloud Harvester',
                                         'miningAmount', module.getModifiedItemAttr('miningAmountMultiplier'), **kwargs)


class Effect5153(BaseEffect):
    """
    shipMissileVelocityPirateFactionRocket

    Used by:
    Ship: Corax
    Ship: Talwar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5156(BaseEffect):
    """
    shipGCHYieldBonusOREfrig2

    Used by:
    Ship: Prospect
    Ship: Venture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Gas Cloud Harvester',
                                      'duration', module.getModifiedItemAttr('shipBonusOREfrig2'), skill='Mining Frigate', **kwargs)


class Effect5162(BaseEffect):
    """
    skillReactiveArmorHardenerCapNeedBonus

    Used by:
    Skill: Resistance Phasing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Resistance Shift Hardener', 'capacitorNeed',
                                      src.getModifiedItemAttr('capNeedBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Resistance Phasing'), 'capacitorNeed',
                                      src.getModifiedItemAttr('capNeedBonus') * lvl, **kwargs)


class Effect5165(BaseEffect):
    """
    shipBonusDroneMWDboostrole

    Used by:
    Ship: Algos
    Ship: Dragoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxVelocity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5168(BaseEffect):
    """
    droneSalvageBonus

    Used by:
    Skill: Salvage Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.drones.filteredItemIncrease(lambda drone: drone.item.requiresSkill('Salvage Drone Operation'),
                                        'accessDifficultyBonus',
                                        container.getModifiedItemAttr('accessDifficultyBonus') * container.level, **kwargs)


class Effect5180(BaseEffect):
    """
    sensorCompensationSensorStrengthBonusGravimetric

    Used by:
    Skill: Gravimetric Sensor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanGravimetricStrength',
                               container.getModifiedItemAttr('sensorStrengthBonus') * container.level, **kwargs)


class Effect5181(BaseEffect):
    """
    sensorCompensationSensorStrengthBonusLadar

    Used by:
    Skill: Ladar Sensor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanLadarStrength', container.getModifiedItemAttr('sensorStrengthBonus') * container.level, **kwargs)


class Effect5182(BaseEffect):
    """
    sensorCompensationSensorStrengthBonusMagnetometric

    Used by:
    Skill: Magnetometric Sensor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanMagnetometricStrength',
                               container.getModifiedItemAttr('sensorStrengthBonus') * container.level, **kwargs)


class Effect5183(BaseEffect):
    """
    sensorCompensationSensorStrengthBonusRadar

    Used by:
    Skill: Radar Sensor Compensation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanRadarStrength', container.getModifiedItemAttr('sensorStrengthBonus') * container.level, **kwargs)


class Effect5185(BaseEffect):
    """
    shipEnergyVampireAmountBonusFixedAF2

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('shipBonus2AF'),
                                      skill='Amarr Frigate', **kwargs)


class Effect5187(BaseEffect):
    """
    shipBonusEwRemoteSensorDampenerFalloffBonusGC1

    Used by:
    Ship: Celestis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Sensor Dampener',
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusGC'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect5188(BaseEffect):
    """
    trackingSpeedBonusEffectHybrids

    Used by:
    Modules named like: Hybrid Metastasis Adjuster (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Hybrid Weapon',
                                      'trackingSpeed', module.getModifiedItemAttr('trackingSpeedBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect5189(BaseEffect):
    """
    trackingSpeedBonusEffectLasers

    Used by:
    Modules named like: Energy Metastasis Adjuster (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Weapon',
                                      'trackingSpeed', module.getModifiedItemAttr('trackingSpeedBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect5190(BaseEffect):
    """
    trackingSpeedBonusEffectProjectiles

    Used by:
    Modules named like: Projectile Metastasis Adjuster (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Projectile Weapon',
                                      'trackingSpeed', module.getModifiedItemAttr('trackingSpeedBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect5201(BaseEffect):
    """
    armorUpgradesMassPenaltyReductionBonus

    Used by:
    Skill: Armor Layering
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Armor Plate',
                                      'massAddition', container.getModifiedItemAttr('massPenaltyReduction') * level, **kwargs)


class Effect5205(BaseEffect):
    """
    shipSETTrackingBonusRookie

    Used by:
    Ship: Immolator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('rookieSETTracking'), **kwargs)


class Effect5206(BaseEffect):
    """
    shipSETOptimalBonusRookie

    Used by:
    Ship: Immolator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('rookieSETOptimal'), **kwargs)


class Effect5207(BaseEffect):
    """
    shipNOSTransferAmountBonusRookie

    Used by:
    Ship: Hematos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', ship.getModifiedItemAttr('rookieNosDrain'), **kwargs)


class Effect5208(BaseEffect):
    """
    shipNeutDestabilizationAmountBonusRookie

    Used by:
    Ship: Hematos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', ship.getModifiedItemAttr('rookieNeutDrain'), **kwargs)


class Effect5209(BaseEffect):
    """
    shipWebVelocityBonusRookie

    Used by:
    Ship: Hematos
    Ship: Violator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'speedFactor', ship.getModifiedItemAttr('rookieWebAmount'), **kwargs)


class Effect5212(BaseEffect):
    """
    shipDroneMWDSpeedBonusRookie

    Used by:
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: True,
                                     'maxVelocity', ship.getModifiedItemAttr('rookieDroneMWDspeed'), **kwargs)


class Effect5213(BaseEffect):
    """
    shipRocketMaxVelocityBonusRookie

    Used by:
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'maxVelocity', ship.getModifiedItemAttr('rookieRocketVelocity'), **kwargs)


class Effect5214(BaseEffect):
    """
    shipLightMissileMaxVelocityBonusRookie

    Used by:
    Ship: Taipan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('rookieLightMissileVelocity'), **kwargs)


class Effect5215(BaseEffect):
    """
    shipSHTTrackingSpeedBonusRookie

    Used by:
    Ship: Violator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('rookieSHTTracking'), **kwargs)


class Effect5216(BaseEffect):
    """
    shipSHTFalloffBonusRookie

    Used by:
    Ship: Violator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('rookieSHTFalloff'), **kwargs)


class Effect5217(BaseEffect):
    """
    shipSPTTrackingSpeedBonusRookie

    Used by:
    Ship: Echo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('rookieSPTTracking'), **kwargs)


class Effect5218(BaseEffect):
    """
    shipSPTFalloffBonusRookie

    Used by:
    Ship: Echo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('rookieSPTFalloff'), **kwargs)


class Effect5219(BaseEffect):
    """
    shipSPTOptimalRangeBonusRookie

    Used by:
    Ship: Echo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('rookieSPTOptimal'), **kwargs)


class Effect5220(BaseEffect):
    """
    shipProjectileDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5221(BaseEffect):
    """
    shipHeavyAssaultMissileEMDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5222(BaseEffect):
    """
    shipHeavyAssaultMissileKinDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5223(BaseEffect):
    """
    shipHeavyAssaultMissileThermDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5224(BaseEffect):
    """
    shipHeavyAssaultMissileExpDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5225(BaseEffect):
    """
    shipHeavyMissileEMDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5226(BaseEffect):
    """
    shipHeavyMissileExpDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5227(BaseEffect):
    """
    shipHeavyMissileKinDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5228(BaseEffect):
    """
    shipHeavyMissileThermDmgPirateCruiser

    Used by:
    Ship: Gnosis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5229(BaseEffect):
    """
    shipScanProbeStrengthBonusPirateCruiser

    Used by:
    Ships named like: Stratios (2 of 2)
    Ship: Astero
    Ship: Gnosis
    Ship: Praxis
    Ship: Sunesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', container.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect5230(BaseEffect):
    """
    modifyActiveShieldResonancePostPercent

    Used by:
    Modules from group: Flex Shield Hardener (5 of 5)
    Modules from group: Shield Hardener (102 of 102)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for damageType in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('shield' + damageType.capitalize() + 'DamageResonance',
                                   module.getModifiedItemAttr(damageType + 'DamageResistanceBonus'),
                                   stackingPenalties=True, **kwargs)


class Effect5231(BaseEffect):
    """
    modifyActiveArmorResonancePostPercent

    Used by:
    Modules from group: Armor Hardener (148 of 148)
    Modules from group: Flex Armor Hardener (4 of 4)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for damageType in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('armor%sDamageResonance' % damageType.capitalize(),
                                   module.getModifiedItemAttr('%sDamageResistanceBonus' % damageType),
                                   stackingPenalties=True, **kwargs)


class Effect5234(BaseEffect):
    """
    shipSmallMissileExpDmgCF2

    Used by:
    Ship: Caldari Navy Hookbill
    Ship: Kestrel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'explosiveDamage', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5237(BaseEffect):
    """
    shipSmallMissileKinDmgCF2

    Used by:
    Ship: Kestrel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'kineticDamage', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5240(BaseEffect):
    """
    shipSmallMissileThermDmgCF2

    Used by:
    Ship: Caldari Navy Hookbill
    Ship: Kestrel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'thermalDamage', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5243(BaseEffect):
    """
    shipSmallMissileEMDmgCF2

    Used by:
    Ship: Caldari Navy Hookbill
    Ship: Kestrel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'emDamage', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5259(BaseEffect):
    """
    reconShipCloakCpuBonus1

    Used by:
    Ships from group: Force Recon Ship (7 of 9)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Cloaking Device',
                                      'cpu', ship.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect5260(BaseEffect):
    """
    covertOpsCloakCpuPercentBonus1

    Used by:
    Ships from group: Covert Ops (6 of 8)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cloaking'),
                                      'cpu', ship.getModifiedItemAttr('eliteBonusCovertOps1'), skill='Covert Ops', **kwargs)


class Effect5261(BaseEffect):
    """
    CovertCloakCPUAddition

    Used by:
    Modules named like: Covert Ops Cloaking Device II (2 of 2)
    Module: Covert Cynosural Field Generator I
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.increaseItemAttr('cpu', module.getModifiedItemAttr('covertCloakCPUAdd') or 0, **kwargs)


class Effect5262(BaseEffect):
    """
    covertOpsCloakCpuPenalty

    Used by:
    Subsystems from group: Defensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Cloaking'),
                                         'covertCloakCPUAdd', module.getModifiedItemAttr('covertCloakCPUPenalty'), **kwargs)


class Effect5263(BaseEffect):
    """
    covertCynoCpuPenalty

    Used by:
    Subsystems from group: Defensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Cynosural Field Theory'),
                                         'covertCloakCPUAdd', module.getModifiedItemAttr('covertCloakCPUPenalty'), **kwargs)


class Effect5264(BaseEffect):
    """
    warfareLinkCPUAddition

    Used by:
    Modules from group: Command Burst (10 of 10)
    Modules from group: Gang Coordinator (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.increaseItemAttr('cpu', module.getModifiedItemAttr('warfareLinkCPUAdd') or 0, **kwargs)


class Effect5265(BaseEffect):
    """
    warfareLinkCpuPenalty

    Used by:
    Subsystems from group: Offensive Subsystem (8 of 12)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'),
                                         'warfareLinkCPUAdd', module.getModifiedItemAttr('warfareLinkCPUPenalty'), **kwargs)


class Effect5266(BaseEffect):
    """
    blockadeRunnerCloakCpuPercentBonus

    Used by:
    Ships from group: Blockade Runner (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Cloaking Device',
                                      'cpu', ship.getModifiedItemAttr('eliteIndustrialCovertCloakBonus'),
                                      skill='Transport Ships', **kwargs)


class Effect5267(BaseEffect):
    """
    drawbackRepairSystemsPGNeed

    Used by:
    Modules named like: Auxiliary Nano Pump (6 of 8)
    Modules named like: Nanobot Accelerator (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'power', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect5268(BaseEffect):
    """
    drawbackCapRepPGNeed

    Used by:
    Variations of module: Capital Auxiliary Nano Pump I (2 of 2)
    Variations of module: Capital Nanobot Accelerator I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'),
                                      'power', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect5275(BaseEffect):
    """
    fueledArmorRepair

    Used by:
    Modules from group: Ancillary Armor Repairer (7 of 7)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if module.charge and module.charge.name == 'Nanite Repair Paste':
            multiplier = 3
        else:
            multiplier = 1

        amount = module.getModifiedItemAttr('armorDamageAmount') * multiplier
        speed = module.getModifiedItemAttr('duration') / 1000.0
        rps = amount / speed
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rps, **kwargs)


class Effect5293(BaseEffect):
    """
    shipLaserCapNeed2AD1

    Used by:
    Ship: Coercer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect5294(BaseEffect):
    """
    shipLaserTracking2AD2

    Used by:
    Ship: Coercer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusAD2'), skill='Amarr Destroyer', **kwargs)


class Effect5295(BaseEffect):
    """
    shipBonusDroneDamageMultiplierAD1

    Used by:
    Variations of ship: Dragoon (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect5300(BaseEffect):
    """
    shipBonusDroneHitpointsAD1

    Used by:
    Variations of ship: Dragoon (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldCapacity',
                                     src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'hp',
                                     src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorHP',
                                     src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect5303(BaseEffect):
    """
    shipHybridRange1CD1

    Used by:
    Ship: Cormorant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCD1'), skill='Caldari Destroyer', **kwargs)


class Effect5304(BaseEffect):
    """
    shipHybridTrackingCD2

    Used by:
    Ship: Cormorant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusCD2'), skill='Caldari Destroyer', **kwargs)


class Effect5305(BaseEffect):
    """
    shipBonusFrigateSizedMissileKineticDamageCD1

    Used by:
    Ship: Corax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCD1'),
                                        skill='Caldari Destroyer', **kwargs)


class Effect5306(BaseEffect):
    """
    shipRocketKineticDmgCD1

    Used by:
    Ship: Corax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCD1'),
                                        skill='Caldari Destroyer', **kwargs)


class Effect5307(BaseEffect):
    """
    shipBonusAoeVelocityRocketsCD2

    Used by:
    Ship: Corax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusCD2'), skill='Caldari Destroyer', **kwargs)


class Effect5308(BaseEffect):
    """
    shipBonusAoeVelocityStandardMissilesCD2

    Used by:
    Ship: Corax
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusCD2'), skill='Caldari Destroyer', **kwargs)


class Effect5309(BaseEffect):
    """
    shipHybridFallOff1GD1

    Used by:
    Ship: Catalyst
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)


class Effect5310(BaseEffect):
    """
    shipHybridTracking1GD2

    Used by:
    Variations of ship: Catalyst (2 of 2)
    Ship: Algos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGD2'), skill='Gallente Destroyer', **kwargs)


class Effect5311(BaseEffect):
    """
    shipBonusDroneDamageMultiplierGD1

    Used by:
    Variations of ship: Algos (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)


class Effect5316(BaseEffect):
    """
    shipBonusDroneHitpointsGD1

    Used by:
    Variations of ship: Algos (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldCapacity',
                                     src.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorHP',
                                     src.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'hp',
                                     src.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)


class Effect5317(BaseEffect):
    """
    shipProjectileDamageMD1

    Used by:
    Variations of ship: Thrasher (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMD1'),
                                      skill='Minmatar Destroyer', **kwargs)


class Effect5318(BaseEffect):
    """
    shipProjectileTracking1MD2

    Used by:
    Variations of ship: Thrasher (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusMD2'), skill='Minmatar Destroyer', **kwargs)


class Effect5319(BaseEffect):
    """
    shipBonusFrigateSizedLightMissileExplosiveDamageMD1

    Used by:
    Ship: Talwar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusMD1'),
                                        skill='Minmatar Destroyer', **kwargs)


class Effect5320(BaseEffect):
    """
    shipRocketExplosiveDmgMD1

    Used by:
    Ship: Talwar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusMD1'),
                                        skill='Minmatar Destroyer', **kwargs)


class Effect5321(BaseEffect):
    """
    shipBonusMWDSignatureRadiusMD2

    Used by:
    Ship: Talwar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('shipBonusMD2'),
                                      skill='Minmatar Destroyer', **kwargs)


class Effect5322(BaseEffect):
    """
    shipArmorEMResistance1ABC1

    Used by:
    Variations of ship: Prophecy (2 of 2)
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusABC1'),
                               skill='Amarr Battlecruiser', **kwargs)


class Effect5323(BaseEffect):
    """
    shipArmorExplosiveResistance1ABC1

    Used by:
    Variations of ship: Prophecy (2 of 2)
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusABC1'),
                               skill='Amarr Battlecruiser', **kwargs)


class Effect5324(BaseEffect):
    """
    shipArmorKineticResistance1ABC1

    Used by:
    Variations of ship: Prophecy (2 of 2)
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusABC1'),
                               skill='Amarr Battlecruiser', **kwargs)


class Effect5325(BaseEffect):
    """
    shipArmorThermResistance1ABC1

    Used by:
    Variations of ship: Prophecy (2 of 2)
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusABC1'),
                               skill='Amarr Battlecruiser', **kwargs)


class Effect5326(BaseEffect):
    """
    shipBonusDroneDamageMultiplierABC2

    Used by:
    Ship: Prophecy
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusABC2'),
                                     skill='Amarr Battlecruiser', **kwargs)


class Effect5331(BaseEffect):
    """
    shipBonusDroneHitpointsABC2

    Used by:
    Ship: Prophecy
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for layer in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         layer, ship.getModifiedItemAttr('shipBonusABC2'), skill='Amarr Battlecruiser', **kwargs)


class Effect5332(BaseEffect):
    """
    shipLaserCapABC1

    Used by:
    Ship: Harbinger
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusABC1'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5333(BaseEffect):
    """
    shipLaserDamageBonusABC2

    Used by:
    Ships named like: Harbinger (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusABC2'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5334(BaseEffect):
    """
    shipHybridOptimal1CBC1

    Used by:
    Variations of ship: Ferox (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCBC1'), skill='Caldari Battlecruiser', **kwargs)


class Effect5335(BaseEffect):
    """
    shipShieldEmResistance1CBC2

    Used by:
    Ship: Drake
    Ship: Nighthawk
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', ship.getModifiedItemAttr('shipBonusCBC2'),
                               skill='Caldari Battlecruiser', **kwargs)


class Effect5336(BaseEffect):
    """
    shipShieldExplosiveResistance1CBC2

    Used by:
    Ship: Drake
    Ship: Nighthawk
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusCBC2'),
                               skill='Caldari Battlecruiser', **kwargs)


class Effect5337(BaseEffect):
    """
    shipShieldKineticResistance1CBC2

    Used by:
    Ship: Drake
    Ship: Nighthawk
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', ship.getModifiedItemAttr('shipBonusCBC2'),
                               skill='Caldari Battlecruiser', **kwargs)


class Effect5338(BaseEffect):
    """
    shipShieldThermalResistance1CBC2

    Used by:
    Ship: Drake
    Ship: Nighthawk
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', ship.getModifiedItemAttr('shipBonusCBC2'),
                               skill='Caldari Battlecruiser', **kwargs)


class Effect5339(BaseEffect):
    """
    shipBonusHeavyAssaultMissileKineticDamageCBC1

    Used by:
    Ship: Drake
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCBC1'),
                                        skill='Caldari Battlecruiser', **kwargs)


class Effect5340(BaseEffect):
    """
    shipBonusHeavyMissileKineticDamageCBC1

    Used by:
    Ship: Drake
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCBC1'),
                                        skill='Caldari Battlecruiser', **kwargs)


class Effect5341(BaseEffect):
    """
    shipHybridDmg1GBC1

    Used by:
    Variations of ship: Brutix (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusGBC1'),
                                      skill='Gallente Battlecruiser', **kwargs)


class Effect5342(BaseEffect):
    """
    shipArmorRepairing1GBC2

    Used by:
    Variations of ship: Myrmidon (2 of 2)
    Ship: Astarte
    Ship: Brutix
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGBC2'),
                                      skill='Gallente Battlecruiser', **kwargs)


class Effect5343(BaseEffect):
    """
    shipBonusDroneDamageMultiplierGBC1

    Used by:
    Variations of ship: Myrmidon (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGBC1'),
                                     skill='Gallente Battlecruiser', **kwargs)


class Effect5348(BaseEffect):
    """
    shipBonusDroneHitpointsGBC1

    Used by:
    Variations of ship: Myrmidon (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for layer in ('shieldCapacity', 'armorHP', 'hp'):
            fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                         layer, ship.getModifiedItemAttr('shipBonusGBC1'), skill='Gallente Battlecruiser', **kwargs)


class Effect5349(BaseEffect):
    """
    shipBonusHeavyMissileLauncherRofMBC2

    Used by:
    Variations of ship: Cyclone (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy',
                                      'speed', ship.getModifiedItemAttr('shipBonusMBC2'), skill='Minmatar Battlecruiser', **kwargs)


class Effect5350(BaseEffect):
    """
    shipBonusHeavyAssaultMissileLauncherRofMBC2

    Used by:
    Variations of ship: Cyclone (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy Assault',
                                      'speed', ship.getModifiedItemAttr('shipBonusMBC2'), skill='Minmatar Battlecruiser', **kwargs)


class Effect5351(BaseEffect):
    """
    shipShieldBoost1MBC1

    Used by:
    Variations of ship: Cyclone (2 of 2)
    Ship: Sleipnir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMBC1'),
                                      skill='Minmatar Battlecruiser', **kwargs)


class Effect5352(BaseEffect):
    """
    shipBonusProjectileDamageMBC1

    Used by:
    Ships named like: Hurricane (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMBC1'),
                                      skill='Minmatar Battlecruiser', **kwargs)


class Effect5353(BaseEffect):
    """
    shipProjectileRof1MBC2

    Used by:
    Ship: Hurricane
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMBC2'), skill='Minmatar Battlecruiser', **kwargs)


class Effect5354(BaseEffect):
    """
    shipLargeLaserCapABC1

    Used by:
    Ship: Oracle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusABC1'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5355(BaseEffect):
    """
    shipLargeLaserDamageBonusABC2

    Used by:
    Ship: Oracle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusABC2'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5356(BaseEffect):
    """
    shipHybridRangeBonusCBC1

    Used by:
    Ship: Naga
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusCBC1'), skill='Caldari Battlecruiser', **kwargs)


class Effect5357(BaseEffect):
    """
    shipHybridDamageBonusCBC2

    Used by:
    Ship: Naga
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCBC2'),
                                      skill='Caldari Battlecruiser', **kwargs)


class Effect5358(BaseEffect):
    """
    shipLargeHybridTrackingBonusGBC1

    Used by:
    Ship: Talos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGBC1'),
                                      skill='Gallente Battlecruiser', **kwargs)


class Effect5359(BaseEffect):
    """
    shipHybridDamageBonusGBC2

    Used by:
    Ship: Talos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusGBC2'),
                                      skill='Gallente Battlecruiser', **kwargs)


class Effect5360(BaseEffect):
    """
    shipProjectileRofBonusMBC1

    Used by:
    Ship: Tornado
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMBC1'), skill='Minmatar Battlecruiser', **kwargs)


class Effect5361(BaseEffect):
    """
    shipProjectileFalloffBonusMBC2

    Used by:
    Ship: Tornado
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusMBC2'), skill='Minmatar Battlecruiser', **kwargs)


class Effect5364(BaseEffect):
    """
    armorAllRepairSystemsAmountBonusPassive

    Used by:
    Implants named like: Agency 'Hardshell' TB Dose (4 of 4)
    Implants named like: Exile Booster (4 of 4)
    Implant: Antipharmakon Kosybo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, booster, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Repair Systems') or mod.item.requiresSkill('Capital Repair Systems'),
            'armorDamageAmount', booster.getModifiedItemAttr('armorDamageAmountBonus') or 0, **kwargs)


class Effect5365(BaseEffect):
    """
    eliteBonusViolatorsRepairSystemsArmorDamageAmount2

    Used by:
    Ship: Kronos
    Ship: Paladin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('eliteBonusViolators2'),
                                      skill='Marauders', **kwargs)


class Effect5366(BaseEffect):
    """
    shipBonusRepairSystemsBonusATC2

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusATC2'), **kwargs)


class Effect5367(BaseEffect):
    """
    shipBonusRepairSystemsArmorRepairAmountGB2

    Used by:
    Ship: Hyperion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGB2'),
                                      skill='Gallente Battleship', **kwargs)


class Effect5378(BaseEffect):
    """
    shipHeavyMissileAOECloudSizeCBC1

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCBC1'),
                                        skill='Caldari Battlecruiser', **kwargs)


class Effect5379(BaseEffect):
    """
    shipHeavyAssaultMissileAOECloudSizeCBC1

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCBC1'),
                                        skill='Caldari Battlecruiser', **kwargs)


class Effect5380(BaseEffect):
    """
    shipHybridTrackingGBC2

    Used by:
    Ship: Brutix Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGBC2'),
                                      skill='Gallente Battlecruiser', **kwargs)


class Effect5381(BaseEffect):
    """
    shipEnergyTrackingABC1

    Used by:
    Ship: Harbinger Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusABC1'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5382(BaseEffect):
    """
    shipBonusMETOptimalAC2

    Used by:
    Ship: Enforcer
    Ship: Omen Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect5383(BaseEffect):
    """
    shipMissileEMDamageCC

    Used by:
    Ship: Orthrus
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect5384(BaseEffect):
    """
    shipMissileThermDamageCC

    Used by:
    Ship: Orthrus
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect5385(BaseEffect):
    """
    shipMissileExpDamageCC

    Used by:
    Ship: Orthrus
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect5386(BaseEffect):
    """
    shipMissileKinDamageCC2

    Used by:
    Ship: Rook
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5387(BaseEffect):
    """
    shipHeavyAssaultMissileAOECloudSizeCC2

    Used by:
    Ship: Caracal Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5388(BaseEffect):
    """
    shipHeavyMissileAOECloudSizeCC2

    Used by:
    Ship: Caracal Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5397(BaseEffect):
    """
    baseMaxScanDeviationModifierModuleOnline2None

    Used by:
    Variations of module: Scan Pinpointing Array I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseMaxScanDeviation',
                                        module.getModifiedItemAttr('maxScanDeviationModifierModule'),
                                        stackingPenalties=True, **kwargs)


class Effect5398(BaseEffect):
    """
    systemScanDurationModuleModifier

    Used by:
    Modules from group: Scanning Upgrade Time (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Astrometrics'),
                                      'duration', module.getModifiedItemAttr('scanDurationBonus'), **kwargs)


class Effect5399(BaseEffect):
    """
    baseSensorStrengthModifierModule

    Used by:
    Variations of module: Scan Rangefinding Array I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', module.getModifiedItemAttr('scanStrengthBonusModule'),
                                        stackingPenalties=True, **kwargs)


class Effect5402(BaseEffect):
    """
    shipMissileHeavyAssaultVelocityABC2

    Used by:
    Ship: Damnation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusABC2'),
                                        skill='Amarr Battlecruiser', **kwargs)


class Effect5403(BaseEffect):
    """
    shipMissileHeavyVelocityABC2

    Used by:
    Ship: Damnation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusABC2'),
                                        skill='Amarr Battlecruiser', **kwargs)


class Effect5410(BaseEffect):
    """
    shipLaserCap1ABC2

    Used by:
    Ship: Absolution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusABC2'),
                                      skill='Amarr Battlecruiser', **kwargs)


class Effect5411(BaseEffect):
    """
    shipMissileVelocityCD1

    Used by:
    Ship: Flycatcher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCD1'), skill='Caldari Destroyer', **kwargs)


class Effect5417(BaseEffect):
    """
    shipBonusDroneDamageMultiplierAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5418(BaseEffect):
    """
    shipBonusDroneArmorHitPointsAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5419(BaseEffect):
    """
    shipBonusDroneShieldHitPointsAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5420(BaseEffect):
    """
    shipBonusDroneStructureHitPointsAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5424(BaseEffect):
    """
    shipLargeHybridTurretRofGB

    Used by:
    Ship: Megathron
    Ship: Megathron Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusGB'), skill='Gallente Battleship', **kwargs)


class Effect5427(BaseEffect):
    """
    shipBonusDroneTrackingGB

    Used by:
    Ship: Dominix
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'trackingSpeed', ship.getModifiedItemAttr('shipBonusGB'), skill='Gallente Battleship', **kwargs)


class Effect5428(BaseEffect):
    """
    shipBonusDroneOptimalRangeGB

    Used by:
    Ship: Dominix
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxRange', ship.getModifiedItemAttr('shipBonusGB'), skill='Gallente Battleship', **kwargs)


class Effect5429(BaseEffect):
    """
    shipBonusMissileAoeVelocityMB2

    Used by:
    Ship: Typhoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusMB2'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5430(BaseEffect):
    """
    shipBonusAoeVelocityCruiseMissilesMB2

    Used by:
    Ship: Typhoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusMB2'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5431(BaseEffect):
    """
    shipBonusLargeEnergyTurretTrackingAB

    Used by:
    Ship: Apocalypse
    Ship: Apocalypse Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5433(BaseEffect):
    """
    hackingSkillVirusBonus

    Used by:
    Modules named like: Memetic Algorithm Bank (8 of 8)
    Implant: Neural Lace 'Blackglass' Net Intrusion 920-40
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    Implant: Poteque 'Prospector' Hacking HC-905
    Skill: Hacking
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Hacking'),
                                         'virusCoherence', container.getModifiedItemAttr('virusCoherenceBonus') * level, **kwargs)


class Effect5437(BaseEffect):
    """
    archaeologySkillVirusBonus

    Used by:
    Modules named like: Emission Scope Sharpener (8 of 8)
    Implant: Poteque 'Prospector' Archaeology AC-905
    Implant: Poteque 'Prospector' Environmental Analysis EY-1005
    Skill: Archaeology
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Archaeology'),
                                         'virusCoherence', container.getModifiedItemAttr('virusCoherenceBonus') * level, **kwargs)


class Effect5440(BaseEffect):
    """
    systemStandardMissileKineticDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                           'kineticDamage', beacon.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5444(BaseEffect):
    """
    shipTorpedoAOECloudSize1CB

    Used by:
    Ship: Raven Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5445(BaseEffect):
    """
    shipCruiseMissileAOECloudSize1CB

    Used by:
    Ship: Raven Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5456(BaseEffect):
    """
    shipCruiseMissileROFCB

    Used by:
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Cruise',
                                      'speed', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5457(BaseEffect):
    """
    shipTorpedoROFCB

    Used by:
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
                                      'speed', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5459(BaseEffect):
    """
    hackingVirusStrengthBonus

    Used by:
    Implant: Neural Lace 'Blackglass' Net Intrusion 920-40
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Hacking'), 'virusStrength', src.getModifiedItemAttr('virusStrengthBonus'), **kwargs)


class Effect5460(BaseEffect):
    """
    minigameVirusStrengthBonus

    Used by:
    Ships from group: Covert Ops (7 of 8)
    Ships named like: Stratios (2 of 2)
    Subsystems named like: Defensive Covert Reconfiguration (4 of 4)
    Ship: Astero
    Ship: Heron
    Ship: Imicus
    Ship: Magnate
    Ship: Nestor
    Ship: Probe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemIncrease(
            lambda mod: (mod.item.requiresSkill('Hacking') or mod.item.requiresSkill('Archaeology')),
            'virusStrength', container.getModifiedItemAttr('virusStrengthBonus') * level, **kwargs)


class Effect5461(BaseEffect):
    """
    shieldOperationRechargeratebonusPostPercentOnline

    Used by:
    Modules from group: Shield Power Relay (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldRechargeRate', module.getModifiedItemAttr('rechargeratebonus') or 0, **kwargs)


class Effect5468(BaseEffect):
    """
    shipBonusAgilityCI2

    Used by:
    Ship: Badger
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusCI2'), skill='Caldari Industrial', **kwargs)


class Effect5469(BaseEffect):
    """
    shipBonusAgilityMI2

    Used by:
    Ship: Wreathe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusMI2'), skill='Minmatar Industrial', **kwargs)


class Effect5470(BaseEffect):
    """
    shipBonusAgilityGI2

    Used by:
    Ship: Nereus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusGI2'), skill='Gallente Industrial', **kwargs)


class Effect5471(BaseEffect):
    """
    shipBonusAgilityAI2

    Used by:
    Ship: Sigil
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusAI2'), skill='Amarr Industrial', **kwargs)


class Effect5476(BaseEffect):
    """
    shipBonusOreCapacityGI2

    Used by:
    Ship: Miasmos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialOreHoldCapacity', ship.getModifiedItemAttr('shipBonusGI2'),
                               skill='Gallente Industrial', **kwargs)


class Effect5477(BaseEffect):
    """
    shipBonusAmmoBayMI2

    Used by:
    Ship: Hoarder
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialAmmoHoldCapacity', ship.getModifiedItemAttr('shipBonusMI2'),
                               skill='Minmatar Industrial', **kwargs)


class Effect5478(BaseEffect):
    """
    shipBonusPICommoditiesHoldGI2

    Used by:
    Ship: Epithal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialPlanetaryCommoditiesHoldCapacity', ship.getModifiedItemAttr('shipBonusGI2'),
                               skill='Gallente Industrial', **kwargs)


class Effect5479(BaseEffect):
    """
    shipBonusMineralBayGI2

    Used by:
    Ship: Kryos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('specialMineralHoldCapacity', ship.getModifiedItemAttr('shipBonusGI2'),
                               skill='Gallente Industrial', **kwargs)


class Effect5480(BaseEffect):
    """
    setBonusChristmasBonusVelocity

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'implantBonusVelocity', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect5482(BaseEffect):
    """
    setBonusChristmasAgilityBonus

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'agilityBonus', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect5483(BaseEffect):
    """
    setBonusChristmasShieldCapacityBonus

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'shieldCapacityBonus', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect5484(BaseEffect):
    """
    setBonusChristmasArmorHPBonus2

    Used by:
    Implants named like: Genolution Core Augmentation CA (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Special Edition Implant',
                                                 'armorHpBonus2', implant.getModifiedItemAttr('implantSetChristmas'), **kwargs)


class Effect5485(BaseEffect):
    """
    shipSPTOptimalBonusMF

    Used by:
    Ship: Chremoas
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect5486(BaseEffect):
    """
    shipBonusProjectileDamageMBC2

    Used by:
    Ship: Sleipnir
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusMBC2'),
                                      skill='Minmatar Battlecruiser', **kwargs)


class Effect5496(BaseEffect):
    """
    eliteBonusCommandShipHAMRoFCS1

    Used by:
    Ship: Claymore
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy Assault',
                                      'speed', ship.getModifiedItemAttr('eliteBonusCommandShips1'), skill='Command Ships', **kwargs)


class Effect5497(BaseEffect):
    """
    eliteBonusCommandShipHMRoFCS1

    Used by:
    Ship: Claymore
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Heavy',
                                      'speed', ship.getModifiedItemAttr('eliteBonusCommandShips1'), skill='Command Ships', **kwargs)


class Effect5498(BaseEffect):
    """
    eliteBonusCommandShipsHeavyAssaultMissileExplosionVelocityCS2

    Used by:
    Ship: Claymore
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'aoeVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                        skill='Command Ships', **kwargs)


class Effect5499(BaseEffect):
    """
    eliteBonusCommandShipsHeavyAssaultMissileExplosionRadiusCS2

    Used by:
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                        skill='Command Ships', **kwargs)


class Effect5500(BaseEffect):
    """
    eliteBonusCommandShipsHeavyMissileExplosionRadiusCS2

    Used by:
    Ship: Nighthawk
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'aoeCloudSize', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                        skill='Command Ships', **kwargs)


class Effect5501(BaseEffect):
    """
    eliteBonusCommandShipMediumHybridDamageCS2

    Used by:
    Ship: Vulture
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                      skill='Command Ships', **kwargs)


class Effect5502(BaseEffect):
    """
    eliteBonusCommandShipMediumHybridTrackingCS1

    Used by:
    Ship: Eos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
                                      skill='Command Ships', **kwargs)


class Effect5503(BaseEffect):
    """
    eliteBonusCommandShipHeavyDroneTrackingCS2

    Used by:
    Ship: Eos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                     skill='Command Ships', **kwargs)


class Effect5504(BaseEffect):
    """
    eliteBonusCommandShipHeavyDroneVelocityCS2

    Used by:
    Ship: Eos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'maxVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
                                     skill='Command Ships', **kwargs)


class Effect5505(BaseEffect):
    """
    eliteBonusCommandShipMediumHybridRoFCS1

    Used by:
    Ship: Astarte
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'speed', ship.getModifiedItemAttr('eliteBonusCommandShips1'), skill='Command Ships', **kwargs)


class Effect5514(BaseEffect):
    """
    eliteBonusCommandShipHeavyAssaultMissileDamageCS2

    Used by:
    Ship: Damnation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('em', 'explosive', 'kinetic', 'thermal')
        for damageType in damageTypes:
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                            '{0}Damage'.format(damageType),
                                            ship.getModifiedItemAttr('eliteBonusCommandShips2'), skill='Command Ships', **kwargs)


class Effect5521(BaseEffect):
    """
    eliteBonusCommandShipHeavyMissileDamageCS2

    Used by:
    Ship: Damnation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('em', 'explosive', 'kinetic', 'thermal')
        for damageType in damageTypes:
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                            '{0}Damage'.format(damageType),
                                            ship.getModifiedItemAttr('eliteBonusCommandShips2'), skill='Command Ships', **kwargs)


class Effect5539(BaseEffect):
    """
    shipBonusHMLKineticDamageAC

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5540(BaseEffect):
    """
    shipBonusHMLEMDamageAC

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5541(BaseEffect):
    """
    shipBonusHMLThermDamageAC

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5542(BaseEffect):
    """
    shipBonusHMLExploDamageAC

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect5552(BaseEffect):
    """
    shipBonusHMLVelocityEliteBonusHeavyGunship1

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                        skill='Heavy Assault Cruisers', **kwargs)


class Effect5553(BaseEffect):
    """
    shipBonusHAMVelocityEliteBonusHeavyGunship1

    Used by:
    Ship: Sacrilege
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'maxVelocity', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                        skill='Heavy Assault Cruisers', **kwargs)


class Effect5554(BaseEffect):
    """
    shipBonusArmorRepAmountGC2

    Used by:
    Ship: Deimos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGC2'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect5555(BaseEffect):
    """
    shipBonusHeavyDroneSpeedGC

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'maxVelocity', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect5556(BaseEffect):
    """
    shipBonusHeavyDRoneTrackingGC

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'trackingSpeed', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect5557(BaseEffect):
    """
    shipBonusSentryDroneOptimalRangeEliteBonusHeavyGunship2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                     skill='Heavy Assault Cruisers', **kwargs)


class Effect5558(BaseEffect):
    """
    shipBonusSentryDroneTrackingEliteBonusHeavyGunship2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'trackingSpeed', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                     skill='Heavy Assault Cruisers', **kwargs)


class Effect5559(BaseEffect):
    """
    shipBonusShieldBoostAmountMC2

    Used by:
    Ship: Vagabond
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect5560(BaseEffect):
    """
    roleBonusMarauderMJDRReactivationDelayBonus

    Used by:
    Ships from group: Marauder (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Micro Jump Drive',
                                      'moduleReactivationDelay', ship.getModifiedItemAttr('roleBonusMarauder'), **kwargs)


class Effect5564(BaseEffect):
    """
    subSystemBonusCaldariOffensiveCommandBursts

    Used by:
    Subsystem: Tengu Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: (mod.item.requiresSkill('Skirmish Command') or
                                                       mod.item.requiresSkill('Shield Command') or
                                                       mod.item.requiresSkill('Information Command')),
                                          attrName, src.getModifiedItemAttr('subsystemBonusCaldariOffensive'),
                                          skill='Caldari Offensive Systems', **kwargs)


class Effect5568(BaseEffect):
    """
    subSystemBonusGallenteOffensiveCommandBursts

    Used by:
    Subsystem: Proteus Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: (mod.item.requiresSkill('Skirmish Command') or
                                                       mod.item.requiresSkill('Armored Command') or
                                                       mod.item.requiresSkill('Information Command')),
                                          attrName, src.getModifiedItemAttr('subsystemBonusGallenteOffensive'),
                                          skill='Gallente Offensive Systems', **kwargs)


class Effect5570(BaseEffect):
    """
    subSystemBonusMinmatarOffensiveCommandBursts

    Used by:
    Subsystem: Loki Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: (mod.item.requiresSkill('Skirmish Command') or
                                                       mod.item.requiresSkill('Shield Command') or
                                                       mod.item.requiresSkill('Armored Command')),
                                          attrName, src.getModifiedItemAttr('subsystemBonusMinmatarOffensive'),
                                          skill='Minmatar Offensive Systems', **kwargs)


class Effect5572(BaseEffect):
    """
    eliteBonusCommandShipArmoredCS3

    Used by:
    Ships from group: Command Ship (4 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandShips3'),
                                          skill='Command Ships', **kwargs)


class Effect5573(BaseEffect):
    """
    eliteBonusCommandShipSiegeCS3

    Used by:
    Ships from group: Command Ship (4 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandShips3'),
                                          skill='Command Ships', **kwargs)


class Effect5574(BaseEffect):
    """
    eliteBonusCommandShipSkirmishCS3

    Used by:
    Ships from group: Command Ship (4 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandShips3'),
                                          skill='Command Ships', **kwargs)


class Effect5575(BaseEffect):
    """
    eliteBonusCommandShipInformationCS3

    Used by:
    Ships from group: Command Ship (4 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Information Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandShips3'),
                                          skill='Command Ships', **kwargs)


class Effect5607(BaseEffect):
    """
    capacitorEmissionSystemskill

    Used by:
    Implants named like: Inherent Implants 'Squire' Capacitor Emission Systems ES (6 of 6)
    Modules named like: Egress Port Maximizer (8 of 8)
    Skill: Capacitor Emission Systems
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capacitor Emission Systems'),
                                      'capacitorNeed', container.getModifiedItemAttr('capNeedBonus') * level, **kwargs)


class Effect5610(BaseEffect):
    """
    shipBonusLargeEnergyTurretMaxRangeAB

    Used by:
    Ship: Marshal
    Ship: Paladin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect5611(BaseEffect):
    """
    shipBonusHTFalloffGB2

    Used by:
    Ship: Kronos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusGB2'), skill='Gallente Battleship', **kwargs)


class Effect5618(BaseEffect):
    """
    shipBonusRHMLROF2CB

    Used by:
    Ship: Raven
    Ship: Widow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy',
                                      'speed', ship.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)


class Effect5619(BaseEffect):
    """
    shipBonusRHMLROFCB

    Used by:
    Ship: Scorpion Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy',
                                      'speed', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5620(BaseEffect):
    """
    shipBonusRHMLROFMB

    Used by:
    Ship: Typhoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy',
                                      'speed', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5621(BaseEffect):
    """
    shipBonusCruiseROFMB

    Used by:
    Ship: Typhoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Cruise',
                                      'speed', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5622(BaseEffect):
    """
    shipBonusTorpedoROFMB

    Used by:
    Ship: Typhoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
                                      'speed', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5628(BaseEffect):
    """
    shipBonusCruiseMissileEMDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5629(BaseEffect):
    """
    shipBonusCruiseMissileThermDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5630(BaseEffect):
    """
    shipBonusCruiseMissileKineticDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5631(BaseEffect):
    """
    shipBonusCruiseMissileExploDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5632(BaseEffect):
    """
    shipBonusTorpedoMissileExploDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5633(BaseEffect):
    """
    shipBonusTorpedoMissileEMDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5634(BaseEffect):
    """
    shipBonusTorpedoMissileThermDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5635(BaseEffect):
    """
    shipBonusTorpedoMissileKineticDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5636(BaseEffect):
    """
    shipBonusHeavyMissileEMDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusMB'), skill='Minmatar Battleship', **kwargs)


class Effect5637(BaseEffect):
    """
    shipBonusHeavyMissileThermDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5638(BaseEffect):
    """
    shipBonusHeavyMissileKineticDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5639(BaseEffect):
    """
    shipBonusHeavyMissileExploDmgMB

    Used by:
    Ship: Typhoon Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusMB'),
                                        skill='Minmatar Battleship', **kwargs)


class Effect5644(BaseEffect):
    """
    shipBonusMissileVelocityCC2

    Used by:
    Ship: Cerberus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5647(BaseEffect):
    """
    covertOpsCloakCPUPercentRoleBonus

    Used by:
    Ships from group: Expedition Frigate (2 of 2)
    Ship: Astero
    Ship: Enforcer
    Ship: Pacifier
    Ship: Victor
    Ship: Victorieux Luxury Yacht
    Ship: Virtuoso
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cloaking'),
                                      'cpu', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5650(BaseEffect):
    """
    shipArmorResistanceAF1

    Used by:
    Ship: Malediction
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('Em', 'Explosive', 'Kinetic', 'Thermal')
        for damageType in damageTypes:
            fit.ship.boostItemAttr('armor{0}DamageResonance'.format(damageType), ship.getModifiedItemAttr('shipBonusAF'),
                                   skill='Amarr Frigate', **kwargs)


class Effect5657(BaseEffect):
    """
    Interceptor2ShieldResist

    Used by:
    Ship: Raptor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        damageTypes = ('Em', 'Explosive', 'Kinetic', 'Thermal')
        for damageType in damageTypes:
            fit.ship.boostItemAttr('shield{0}DamageResonance'.format(damageType),
                                   ship.getModifiedItemAttr('eliteBonusInterceptor2'), skill='Interceptors', **kwargs)


class Effect5673(BaseEffect):
    """
    interceptor2ProjectileDamage

    Used by:
    Ship: Claw
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusInterceptor2'),
                                      skill='Interceptors', **kwargs)


class Effect5676(BaseEffect):
    """
    shipBonusSmallMissileExplosionRadiusCD2

    Used by:
    Ship: Flycatcher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCD2'), skill='Caldari Destroyer', **kwargs)


class Effect5688(BaseEffect):
    """
    shipBonusMissileVelocityAD2

    Used by:
    Ship: Heretic
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', ship.getModifiedItemAttr('shipBonusAD2'), skill='Amarr Destroyer', **kwargs)


class Effect5695(BaseEffect):
    """
    eliteBonusInterdictorsArmorResist1

    Used by:
    Ship: Heretic
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('Em', 'Thermal', 'Explosive', 'Kinetic'):
            fit.ship.boostItemAttr('armor%sDamageResonance' % damageType,
                                   ship.getModifiedItemAttr('eliteBonusInterdictors1'), skill='Interdictors', **kwargs)


class Effect5717(BaseEffect):
    """
    implantSetWarpSpeed

    Used by:
    Implants named like: grade Ascendancy (12 of 12)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.group.name == 'Cyberimplant',
                                                 'WarpSBonus', implant.getModifiedItemAttr('implantSetWarpSpeed'), **kwargs)


class Effect5721(BaseEffect):
    """
    shipBonusMETOptimalRangePirateFaction

    Used by:
    Ships named like: Stratios (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5722(BaseEffect):
    """
    shipHybridOptimalGD1

    Used by:
    Ship: Eris
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGD1'), skill='Gallente Destroyer', **kwargs)


class Effect5723(BaseEffect):
    """
    eliteBonusInterdictorsMWDSigRadius2

    Used by:
    Ships from group: Interdictor (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'signatureRadiusBonus', ship.getModifiedItemAttr('eliteBonusInterdictors2'),
                                      skill='Interdictors', **kwargs)


class Effect5724(BaseEffect):
    """
    shipSHTOptimalBonusGF

    Used by:
    Ship: Ares
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5725(BaseEffect):
    """
    shipBonusRemoteRepairAmountPirateFaction

    Used by:
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5726(BaseEffect):
    """
    shipBonusLETOptimalRangePirateFaction

    Used by:
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5733(BaseEffect):
    """
    eliteBonusMaraudersHeavyMissileDamageExpRole1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosiveDamage', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect5734(BaseEffect):
    """
    eliteBonusMaraudersHeavyMissileDamageKinRole1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'kineticDamage', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect5735(BaseEffect):
    """
    eliteBonusMaraudersHeavyMissileDamageEMRole1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect5736(BaseEffect):
    """
    eliteBonusMaraudersHeavyMissileDamageThermRole1

    Used by:
    Ship: Golem
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'thermalDamage', ship.getModifiedItemAttr('eliteBonusViolatorsRole1'), **kwargs)


class Effect5737(BaseEffect):
    """
    shipScanProbeStrengthBonusPirateFaction

    Used by:
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5738(BaseEffect):
    """
    shipBonusRemoteRepairRangePirateFaction2

    Used by:
    Ship: Nestor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'falloffEffectiveness', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect5754(BaseEffect):
    """
    overloadSelfTrackingModuleBonus

    Used by:
    Modules named like: Tracking Computer (19 of 19)
    Variations of module: Tracking Disruptor I (6 of 6)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxRangeBonus', module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus'), **kwargs)
        module.boostItemAttr('falloffBonus', module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus'), **kwargs)
        module.boostItemAttr('trackingSpeedBonus', module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus'), **kwargs)


class Effect5757(BaseEffect):
    """
    overloadSelfSensorModuleBonus

    Used by:
    Modules from group: Remote Sensor Booster (8 of 8)
    Modules from group: Sensor Booster (16 of 16)
    Modules from group: Sensor Dampener (6 of 6)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxTargetRangeBonus', module.getModifiedItemAttr('overloadSensorModuleStrengthBonus'), **kwargs)
        module.boostItemAttr('scanResolutionBonus', module.getModifiedItemAttr('overloadSensorModuleStrengthBonus'),
                             stackingPenalties=True, **kwargs)

        for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            module.boostItemAttr(
                'scan{}StrengthPercent'.format(scanType),
                module.getModifiedItemAttr('overloadSensorModuleStrengthBonus'),
                stackingPenalties=True, **kwargs)


class Effect5758(BaseEffect):
    """
    overloadSelfPainterBonus

    Used by:
    Modules from group: Target Painter (8 of 8)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('signatureRadiusBonus', module.getModifiedItemAttr('overloadPainterStrengthBonus') or 0, **kwargs)


class Effect5769(BaseEffect):
    """
    repairDroneHullBonusBonus

    Used by:
    Implants named like: Black Market 'Valdimar' Repair Drone Operation DR (3 of 3)
    Modules named like: Drone Repair Augmentor (8 of 8)
    Skill: Repair Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone',
                                     'structureDamageAmount', container.getModifiedItemAttr('damageHP') * level, **kwargs)


class Effect5778(BaseEffect):
    """
    shipMissileRoFMF2

    Used by:
    Ship: Breacher
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect5779(BaseEffect):
    """
    shipBonusSPTFalloffMF2

    Used by:
    Ship: Pacifier
    Ship: Rifter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect5793(BaseEffect):
    """
    ewSkillTrackingDisruptionRangeDisruptionBonus

    Used by:
    Modules named like: Tracking Diagnostic Subroutines (8 of 8)
    Skill: Weapon Destabilization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        for attr in ('maxRangeBonus', 'falloffBonus'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'),
                                          attr, container.getModifiedItemAttr('scanSkillEwStrengthBonus') * level, **kwargs)


class Effect5802(BaseEffect):
    """
    shipBonusAfterburnerSpeedFactor2CB

    Used by:
    Ship: Nightmare
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)


class Effect5803(BaseEffect):
    """
    shipBonusSentryDroneDamageMultiplierPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5804(BaseEffect):
    """
    shipBonusHeavyDroneDamageMultiplierPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5805(BaseEffect):
    """
    shipBonusSentryDroneHPPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'hp', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5806(BaseEffect):
    """
    shipBonusSentryDroneArmorHpPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5807(BaseEffect):
    """
    shipBonusSentryDroneShieldHpPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5808(BaseEffect):
    """
    shipBonusHeavyDroneShieldHpPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5809(BaseEffect):
    """
    shipBonusHeavyDroneArmorHpPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5810(BaseEffect):
    """
    shipBonusHeavyDroneHPPirateFaction

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5811(BaseEffect):
    """
    shipBonusKineticMissileDamageGB2

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusGB2'),
                                        skill='Gallente Battleship', **kwargs)


class Effect5812(BaseEffect):
    """
    shipBonusThermalMissileDamageGB2

    Used by:
    Ship: Rattlesnake
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusGB2'),
                                        skill='Gallente Battleship', **kwargs)


class Effect5813(BaseEffect):
    """
    shipBonusAfterburnerSpeedFactorCF2

    Used by:
    Ship: Imp
    Ship: Succubus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5814(BaseEffect):
    """
    shipBonusKineticMissileDamageGF

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5815(BaseEffect):
    """
    shipBonusThermalMissileDamageGF

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect5816(BaseEffect):
    """
    shipBonusLightDroneDamageMultiplierPirateFaction

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5817(BaseEffect):
    """
    shipBonusLightDroneHPPirateFaction

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5818(BaseEffect):
    """
    shipBonusLightDroneArmorHPPirateFaction

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5819(BaseEffect):
    """
    shipBonusLightDroneShieldHPPirateFaction

    Used by:
    Ship: Whiptail
    Ship: Worm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5820(BaseEffect):
    """
    shipBonusAfterburnerSpeedFactorCC2

    Used by:
    Ship: Fiend
    Ship: Phantasm
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'speedFactor', module.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect5821(BaseEffect):
    """
    shipBonusMediumDroneDamageMultiplierPirateFaction

    Used by:
    Ship: Chameleon
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5822(BaseEffect):
    """
    shipBonusMediumDroneHPPirateFaction

    Used by:
    Ship: Chameleon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5823(BaseEffect):
    """
    shipBonusMediumDroneArmorHPPirateFaction

    Used by:
    Ship: Chameleon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5824(BaseEffect):
    """
    shipBonusMediumDroneShieldHPPirateFaction

    Used by:
    Ship: Chameleon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect5825(BaseEffect):
    """
    shipBonusKineticMissileDamageGC2

    Used by:
    Ship: Chameleon
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect5826(BaseEffect):
    """
    shipBonusThermalMissileDamageGC2

    Used by:
    Ship: Chameleon
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect5827(BaseEffect):
    """
    shipBonusTDOptimalBonusAF1

    Used by:
    Ship: Crucifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusAF'), skill='Amarr Frigate', **kwargs)


class Effect5829(BaseEffect):
    """
    shipBonusMiningDurationORE3

    Used by:
    Ships from group: Exhumer (3 of 3)
    Ships from group: Mining Barge (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'duration', ship.getModifiedItemAttr('shipBonusORE3'), skill='Mining Barge', **kwargs)


class Effect5832(BaseEffect):
    """
    shipBonusMiningIceHarvestingRangeORE2

    Used by:
    Variations of ship: Covetor (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Mining') or mod.item.requiresSkill('Ice Harvesting'),
            'maxRange', ship.getModifiedItemAttr('shipBonusORE2'), skill='Mining Barge', **kwargs)


class Effect5839(BaseEffect):
    """
    eliteBargeShieldResistance1

    Used by:
    Ships from group: Exhumer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'thermal', 'explosive', 'kinetic'):
            fit.ship.boostItemAttr('shield{}DamageResonance'.format(damageType.capitalize()),
                                   ship.getModifiedItemAttr('eliteBonusBarge1'), skill='Exhumers', **kwargs)


class Effect5840(BaseEffect):
    """
    eliteBargeBonusMiningDurationBarge2

    Used by:
    Ships from group: Exhumer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'duration', ship.getModifiedItemAttr('eliteBonusBarge2'), skill='Exhumers', **kwargs)


class Effect5852(BaseEffect):
    """
    eliteBonusExpeditionMining1

    Used by:
    Ship: Prospect
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
                                      'miningAmount', module.getModifiedItemAttr('eliteBonusExpedition1'),
                                      skill='Expedition Frigates', **kwargs)


class Effect5853(BaseEffect):
    """
    eliteBonusExpeditionSigRadius2

    Used by:
    Ship: Prospect
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', ship.getModifiedItemAttr('eliteBonusExpedition2'),
                               skill='Expedition Frigates', **kwargs)


class Effect5854(BaseEffect):
    """
    shipBonusNosferatuOverride

    Used by:
    Ship: Ashimmu
    Ship: Bhaalgorn
    Ship: Caedes
    Ship: Chemosh
    Ship: Cruor
    Ship: Dagon
    Ship: Molok
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemForce(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'nosOverride', ship.getModifiedItemAttr('nosOverride'), **kwargs)


class Effect5862(BaseEffect):
    """
    shipMissileEMDamageCB

    Used by:
    Ship: Barghest
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'emDamage', ship.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect5863(BaseEffect):
    """
    shipMissileKinDamageCB

    Used by:
    Ship: Barghest
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'kineticDamage', ship.getModifiedItemAttr('shipBonusCB'),
                                        skill='Caldari Battleship', **kwargs)


class Effect5864(BaseEffect):
    """
    shipMissileThermDamageCB

    Used by:
    Ship: Barghest
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'thermalDamage', ship.getModifiedItemAttr('shipBonusCB'),
                                        skill='Caldari Battleship', **kwargs)


class Effect5865(BaseEffect):
    """
    shipMissileExploDamageCB

    Used by:
    Ship: Barghest
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', ship.getModifiedItemAttr('shipBonusCB'),
                                        skill='Caldari Battleship', **kwargs)


class Effect5866(BaseEffect):
    """
    shipBonusWarpScrambleMaxRangeGB

    Used by:
    Ship: Barghest
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', ship.getModifiedItemAttr('shipBonusGB'), skill='Gallente Battleship', **kwargs)


class Effect5867(BaseEffect):
    """
    shipBonusMissileExplosionDelayPirateFaction2

    Used by:
    Ship: Barghest
    Ship: Garmur
    Ship: Orthrus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosionDelay', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect5868(BaseEffect):
    """
    drawbackCargoCapacity

    Used by:
    Modules named like: Transverse Bulkhead (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('capacity', module.getModifiedItemAttr('drawback'), **kwargs)


class Effect5869(BaseEffect):
    """
    eliteIndustrialWarpSpeedBonus1

    Used by:
    Ships from group: Blockade Runner (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', ship.getModifiedItemAttr('eliteBonusIndustrial1'),
                               skill='Transport Ships', **kwargs)


class Effect5870(BaseEffect):
    """
    shipBonusShieldBoostCI2

    Used by:
    Ship: Bustard
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusCI2'), skill='Caldari Industrial', **kwargs)


class Effect5871(BaseEffect):
    """
    shipBonusShieldBoostMI2

    Used by:
    Ship: Mastodon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', ship.getModifiedItemAttr('shipBonusMI2'), skill='Minmatar Industrial', **kwargs)


class Effect5872(BaseEffect):
    """
    shipBonusArmorRepairAI2

    Used by:
    Ship: Impel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusAI2'),
                                      skill='Amarr Industrial', **kwargs)


class Effect5873(BaseEffect):
    """
    shipBonusArmorRepairGI2

    Used by:
    Ship: Occator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGI2'),
                                      skill='Gallente Industrial', **kwargs)


class Effect5874(BaseEffect):
    """
    eliteIndustrialFleetCapacity1

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('fleetHangarCapacity', ship.getModifiedItemAttr('eliteBonusIndustrial1'),
                               skill='Transport Ships', **kwargs)


class Effect5881(BaseEffect):
    """
    eliteIndustrialShieldResists2

    Used by:
    Ship: Bustard
    Ship: Mastodon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'thermal', 'explosive', 'kinetic'):
            fit.ship.boostItemAttr('shield{}DamageResonance'.format(damageType.capitalize()),
                                   ship.getModifiedItemAttr('eliteBonusIndustrial2'), skill='Transport Ships', **kwargs)


class Effect5888(BaseEffect):
    """
    eliteIndustrialArmorResists2

    Used by:
    Ship: Impel
    Ship: Occator
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'thermal', 'explosive', 'kinetic'):
            fit.ship.boostItemAttr('armor{}DamageResonance'.format(damageType.capitalize()),
                                   ship.getModifiedItemAttr('eliteBonusIndustrial2'), skill='Transport Ships', **kwargs)


class Effect5889(BaseEffect):
    """
    eliteIndustrialABHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'),
                                      'overloadSpeedFactorBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5890(BaseEffect):
    """
    eliteIndustrialMWDHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
                                      'overloadSpeedFactorBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5891(BaseEffect):
    """
    eliteIndustrialArmorHardenerHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'),
                                      'overloadHardeningBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5892(BaseEffect):
    """
    eliteIndustrialReactiveArmorHardenerHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'),
                                      'overloadSelfDurationBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5893(BaseEffect):
    """
    eliteIndustrialShieldHardenerHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Tactical Shield Manipulation'),
                                      'overloadHardeningBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5896(BaseEffect):
    """
    eliteIndustrialShieldBoosterHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'overloadShieldBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'overloadSelfDurationBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5899(BaseEffect):
    """
    eliteIndustrialArmorRepairHeatBonus

    Used by:
    Ships from group: Deep Space Transport (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadArmorDamageAmount', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadSelfDurationBonus', ship.getModifiedItemAttr('roleBonusOverheatDST'), **kwargs)


class Effect5900(BaseEffect):
    """
    warpSpeedAddition

    Used by:
    Modules from group: Warp Accelerator (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpSpeedMultiplier', module.getModifiedItemAttr('warpSpeedAdd'), **kwargs)


class Effect5901(BaseEffect):
    """
    roleBonusBulkheadCPU

    Used by:
    Ships from group: Freighter (4 of 5)
    Ships from group: Jump Freighter (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Reinforced Bulkhead',
                                      'cpu', ship.getModifiedItemAttr('cpuNeedBonus'), **kwargs)


class Effect5911(BaseEffect):
    """
    onlineJumpDriveConsumptionAmountBonusPercentage

    Used by:
    Modules from group: Jump Drive Economizer (3 of 3)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('jumpDriveConsumptionAmount',
                               module.getModifiedItemAttr('consumptionQuantityBonusPercentage'), stackingPenalties=True, **kwargs)


class Effect5912(BaseEffect):
    """
    systemRemoteCapTransmitterAmount

    Used by:
    Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                         'powerTransferAmount', beacon.getModifiedItemAttr('energyTransferAmountBonus'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5913(BaseEffect):
    """
    systemArmorHP

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    Celestial: Federal Stellar Observatory
    Celestial: Imperial Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('armorHP', beacon.getModifiedItemAttr('armorHPMultiplier'), **kwargs)


class Effect5914(BaseEffect):
    """
    systemEnergyNeutMultiplier

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestial: Imperial Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                         'energyNeutralizerAmount',
                                         beacon.getModifiedItemAttr('energyWarfareStrengthMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5915(BaseEffect):
    """
    systemEnergyVampireMultiplier

    Used by:
    Celestials named like: Class Pulsar Effects (6 of 6)
    Celestial: Imperial Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                         'powerTransferAmount',
                                         beacon.getModifiedItemAttr('energyWarfareStrengthMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5916(BaseEffect):
    """
    systemDamageExplosiveBombs

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'explosiveDamage', beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5917(BaseEffect):
    """
    systemDamageKineticBombs

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'kineticDamage', beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5918(BaseEffect):
    """
    systemDamageThermalBombs

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'thermalDamage', beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5919(BaseEffect):
    """
    systemDamageEMBombs

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'emDamage', beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5920(BaseEffect):
    """
    systemAoeCloudSize

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                           'aoeCloudSize', beacon.getModifiedItemAttr('aoeCloudSizeMultiplier'), **kwargs)


class Effect5921(BaseEffect):
    """
    systemTargetPainterMultiplier

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Target Painting'),
                                         'signatureRadiusBonus',
                                         beacon.getModifiedItemAttr('targetPainterStrengthMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5922(BaseEffect):
    """
    systemWebifierStrengthMultiplier

    Used by:
    Celestials named like: Class Black Hole Effects (6 of 6)
    Celestial: Republic Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Stasis Web',
                                         'speedFactor', beacon.getModifiedItemAttr('stasisWebStrengthMultiplier'),
                                         stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5923(BaseEffect):
    """
    systemNeutBombs

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'energyNeutralizerAmount',
                                           beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5924(BaseEffect):
    """
    systemGravimetricECMBomb

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'scanGravimetricStrengthBonus',
                                           beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5925(BaseEffect):
    """
    systemLadarECMBomb

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'scanLadarStrengthBonus',
                                           beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5926(BaseEffect):
    """
    systemMagnetrometricECMBomb

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'scanMagnetometricStrengthBonus',
                                           beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5927(BaseEffect):
    """
    systemRadarECMBomb

    Used by:
    Celestials named like: Class Red Giant Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Bomb Deployment'),
                                           'scanRadarStrengthBonus',
                                           beacon.getModifiedItemAttr('smartbombDamageMultiplier'),
                                           stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5929(BaseEffect):
    """
    systemDroneTracking

    Used by:
    Celestials named like: Class Magnetar Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.drones.filteredItemMultiply(lambda drone: True,
                                        'trackingSpeed', beacon.getModifiedItemAttr('trackingSpeedMultiplier'),
                                        stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect5934(BaseEffect):
    """
    warpScrambleBlockMWDWithNPCEffect

    Used by:
    Modules named like: Warp Scrambler (27 of 27)
    """

    runTime = 'early'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'))
        fit.modules.filteredItemIncrease(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Micro Jump Drive Operation'),
            'activationBlocked', module.getModifiedItemAttr('activationBlockedStrenght'), **kwargs)


class Effect5938(BaseEffect):
    """
    shipBonusSmallMissileExplosionRadiusCF2

    Used by:
    Ship: Crow
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
            'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCF2'), skill='Caldari Frigate', **kwargs)


class Effect5939(BaseEffect):
    """
    shipRocketRoFBonusAF2

    Used by:
    Ship: Malediction
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rocket',
                                      'speed', ship.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect5940(BaseEffect):
    """
    eliteBonusInterdictorsSHTRoF1

    Used by:
    Ship: Eris
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'speed', ship.getModifiedItemAttr('eliteBonusInterdictors1'), skill='Interdictors', **kwargs)


class Effect5944(BaseEffect):
    """
    shipMissileLauncherRoFAD1Fixed

    Used by:
    Ship: Heretic
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect5945(BaseEffect):
    """
    cloakingPrototype

    Used by:
    Modules named like: Prototype Cloaking Device I (2 of 2)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set flag which is used to determine if ship is cloaked or not
        # This is used to apply cloak-only bonuses, like Black Ops' speed bonus
        # Doesn't apply to covops cloaks
        fit.extraAttributes['cloaked'] = True
        # Apply speed penalty
        fit.ship.multiplyItemAttr('maxVelocity', module.getModifiedItemAttr('maxVelocityModifier'), **kwargs)


class Effect5951(BaseEffect):
    """
    drawbackWarpSpeed

    Used by:
    Modules from group: Rig Anchor (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', module.getModifiedItemAttr('drawback'), stackingPenalties=True, **kwargs)


class Effect5956(BaseEffect):
    """
    shipMETDamageBonusAC2

    Used by:
    Ship: Devoter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect5957(BaseEffect):
    """
    eliteBonusHeavyInterdictorsMETOptimal

    Used by:
    Ship: Devoter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                      skill='Heavy Interdiction Cruisers', **kwargs)


class Effect5958(BaseEffect):
    """
    shipHybridTrackingGC

    Used by:
    Ship: Lachesis
    Ship: Phobos
    Ship: Vexor Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect5959(BaseEffect):
    """
    eliteBonusHeavyInterdictorsHybridOptimal1

    Used by:
    Ship: Phobos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyInterdictors1'),
                                      skill='Heavy Interdiction Cruisers', **kwargs)


class Effect5994(BaseEffect):
    """
    resistanceKillerHullAll

    Used by:
    Modules named like: Polarized (12 of 15)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for dmgType in ('em', 'thermal', 'kinetic', 'explosive'):
            tgtAttr = '{}DamageResonance'.format(dmgType)
            fit.ship.forceItemAttr(tgtAttr, module.getModifiedItemAttr('resistanceKillerHull'), **kwargs)


class Effect5995(BaseEffect):
    """
    resistanceKillerShieldArmorAll

    Used by:
    Modules named like: Polarized (12 of 15)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for layer in ('armor', 'shield'):
            for dmgType in ('em', 'thermal', 'kinetic', 'explosive'):
                tgtAttr = '{}{}DamageResonance'.format(layer, dmgType.capitalize())
                fit.ship.forceItemAttr(tgtAttr, module.getModifiedItemAttr('resistanceKiller'), **kwargs)


class Effect5998(BaseEffect):
    """
    freighterSMACapacityBonusO1

    Used by:
    Ship: Bowhead
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        # todo: stacking?
        fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('freighterBonusO2'), skill='ORE Freighter',
                               stackingPenalties=True, **kwargs)


class Effect6001(BaseEffect):
    """
    freighterAgilityBonus2O2

    Used by:
    Ship: Bowhead
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shipMaintenanceBayCapacity', ship.getModifiedItemAttr('freighterBonusO1'),
                               skill='ORE Freighter', **kwargs)


class Effect6006(BaseEffect):
    """
    shipSETDamageAmarrTacticalDestroyer1

    Used by:
    Ship: Confessor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusTacticalDestroyerAmarr1'),
                                      skill='Amarr Tactical Destroyer', **kwargs)


class Effect6007(BaseEffect):
    """
    shipSETCapNeedAmarrTacticalDestroyer2

    Used by:
    Ship: Confessor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusTacticalDestroyerAmarr2'),
                                      skill='Amarr Tactical Destroyer', **kwargs)


class Effect6008(BaseEffect):
    """
    shipHeatDamageAmarrTacticalDestroyer3

    Used by:
    Ship: Confessor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusTacticalDestroyerAmarr3'),
                                      skill='Amarr Tactical Destroyer', **kwargs)


class Effect6009(BaseEffect):
    """
    probeLauncherCPUPercentRoleBonusT3

    Used by:
    Ships from group: Strategic Cruiser (4 of 4)
    Ships from group: Tactical Destroyer (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Astrometrics'), 'cpu', src.getModifiedItemAttr('roleBonusT3ProbeCPU'), **kwargs)


class Effect6010(BaseEffect):
    """
    shipModeMaxTargetRangePostDiv

    Used by:
    Modules named like: Sharpshooter Mode (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr(
            'maxTargetRange',
            1 / module.getModifiedItemAttr('modeMaxTargetRangePostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6011(BaseEffect):
    """
    shipModeSETOptimalRangePostDiv

    Used by:
    Module: Confessor Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Energy Turret'),
            'maxRange',
            1 / module.getModifiedItemAttr('modeMaxRangePostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6012(BaseEffect):
    """
    shipModeScanStrengthPostDiv

    Used by:
    Modules named like: Sharpshooter Mode (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            fit.ship.multiplyItemAttr(
                'scan{}Strength'.format(scanType),
                1 / (module.getModifiedItemAttr('mode{}StrengthPostDiv'.format(scanType)) or 1),
                stackingPenalties=True,
                penaltyGroup='postDiv',
                **kwargs)


class Effect6014(BaseEffect):
    """
    modeSigRadiusPostDiv

    Used by:
    Module: Confessor Defense Mode
    Module: Jackdaw Defense Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('signatureRadius', 1 / module.getModifiedItemAttr('modeSignatureRadiusPostDiv'),
                                  stackingPenalties=True, penaltyGroup='postDiv', **kwargs)


class Effect6015(BaseEffect):
    """
    modeArmorResonancePostDiv

    Used by:
    Modules named like: Defense Mode (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for srcResType, tgtResType in (
                ('Em', 'Em'),
                ('Explosive', 'Explosive'),
                ('Kinetic', 'Kinetic'),
                ('Thermic', 'Thermal')
        ):
            fit.ship.multiplyItemAttr(
                'armor{0}DamageResonance'.format(tgtResType),
                1 / module.getModifiedItemAttr('mode{0}ResistancePostDiv'.format(srcResType)),
                stackingPenalties=True,
                penaltyGroup='postDiv',
                **kwargs)


class Effect6016(BaseEffect):
    """
    modeAgilityPostDiv

    Used by:
    Modules named like: Propulsion Mode (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr(
            'agility',
            1 / module.getModifiedItemAttr('modeAgilityPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6017(BaseEffect):
    """
    modeVelocityPostDiv

    Used by:
    Module: Jackdaw Propulsion Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr(
            'maxVelocity',
            1 / module.getModifiedItemAttr('modeVelocityPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6020(BaseEffect):
    """
    shipBonusEnergyNeutOptimalRS3

    Used by:
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6021(BaseEffect):
    """
    shipBonusEnergyNosOptimalRS3

    Used by:
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6025(BaseEffect):
    """
    eliteReconBonusMHTOptimalRange1

    Used by:
    Ship: Lachesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect6027(BaseEffect):
    """
    eliteReconBonusMPTdamage1

    Used by:
    Ship: Huginn
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('eliteBonusReconShip1'),
                                      skill='Recon Ships', **kwargs)


class Effect6032(BaseEffect):
    """
    remoteCapacitorTransmitterPowerNeedBonusEffect

    Used by:
    Ships from group: Logistics (3 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter',
                                      'power', ship.getModifiedItemAttr('powerTransferPowerNeedBonus'), **kwargs)


class Effect6036(BaseEffect):
    """
    shipHeatDamageMinmatarTacticalDestroyer3

    Used by:
    Ship: Svipul
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusTacticalDestroyerMinmatar3'),
                                      skill='Minmatar Tactical Destroyer', **kwargs)


class Effect6037(BaseEffect):
    """
    shipSPTDamageMinmatarTacticalDestroyer1

    Used by:
    Ship: Svipul
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusTacticalDestroyerMinmatar1'),
                                      skill='Minmatar Tactical Destroyer', **kwargs)


class Effect6038(BaseEffect):
    """
    shipSPTOptimalMinmatarTacticalDestroyer2

    Used by:
    Ship: Svipul
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusTacticalDestroyerMinmatar2'),
                                      skill='Minmatar Tactical Destroyer', **kwargs)


class Effect6039(BaseEffect):
    """
    shipModeSPTTrackingPostDiv

    Used by:
    Module: Svipul Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
            'trackingSpeed',
            1 / module.getModifiedItemAttr('modeTrackingPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6040(BaseEffect):
    """
    modeMWDSigRadiusPostDiv

    Used by:
    Module: Svipul Defense Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
            'signatureRadiusBonus',
            1 / module.getModifiedItemAttr('modeMWDSigPenaltyPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6041(BaseEffect):
    """
    modeShieldResonancePostDiv

    Used by:
    Module: Jackdaw Defense Mode
    Module: Svipul Defense Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for srcResType, tgtResType in (
                ('Em', 'Em'),
                ('Explosive', 'Explosive'),
                ('Kinetic', 'Kinetic'),
                ('Thermic', 'Thermal')
        ):
            fit.ship.multiplyItemAttr(
                'shield{0}DamageResonance'.format(tgtResType),
                1 / module.getModifiedItemAttr('mode{0}ResistancePostDiv'.format(srcResType)),
                stackingPenalties=True,
                penaltyGroup='postDiv',
                **kwargs)


class Effect6045(BaseEffect):
    """
    shipBonusSentryDamageMultiplierGC3

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC3'), skill='Gallente Cruiser', **kwargs)


class Effect6046(BaseEffect):
    """
    shipBonusSentryHPGC3

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'hp', ship.getModifiedItemAttr('shipBonusGC3'), skill='Gallente Cruiser', **kwargs)


class Effect6047(BaseEffect):
    """
    shipBonusSentryArmorHPGC3

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusGC3'), skill='Gallente Cruiser', **kwargs)


class Effect6048(BaseEffect):
    """
    shipBonusSentryShieldHPGC3

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusGC3'), skill='Gallente Cruiser', **kwargs)


class Effect6051(BaseEffect):
    """
    shipBonusLightDroneDamageMultiplierGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6052(BaseEffect):
    """
    shipBonusMediumDroneDamageMultiplierGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6053(BaseEffect):
    """
    shipBonusHeavyDroneDamageMultiplierGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'damageMultiplier', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6054(BaseEffect):
    """
    shipBonusHeavyDroneHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6055(BaseEffect):
    """
    shipBonusHeavyDroneArmorHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6056(BaseEffect):
    """
    shipBonusHeavyDroneShieldHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6057(BaseEffect):
    """
    shipBonusMediumDroneShieldHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6058(BaseEffect):
    """
    shipBonusMediumDroneArmorHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6059(BaseEffect):
    """
    shipBonusMediumDroneHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6060(BaseEffect):
    """
    shipBonusLightDroneHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6061(BaseEffect):
    """
    shipBonusLightDroneArmorHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6062(BaseEffect):
    """
    shipBonusLightDroneShieldHPGC2

    Used by:
    Ship: Ishtar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Light Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusGC2'), skill='Gallente Cruiser', **kwargs)


class Effect6063(BaseEffect):
    """
    entosisLink

    Used by:
    Modules from group: Entosis Link (6 of 6)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.forceItemAttr('disallowAssistance', module.getModifiedItemAttr('disallowAssistance'))
        for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            fit.ship.boostItemAttr(
                'scan{}Strength'.format(scanType),
                module.getModifiedItemAttr('scan{}StrengthPercent'.format(scanType)),
                stackingPenalties=True, **kwargs)


class Effect6076(BaseEffect):
    """
    shipModeMissileVelocityPostDiv

    Used by:
    Module: Jackdaw Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeMultiply(
            lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
            'maxVelocity',
            1 / module.getModifiedItemAttr('modeMaxRangePostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6077(BaseEffect):
    """
    shipHeatDamageCaldariTacticalDestroyer3

    Used by:
    Ship: Jackdaw
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusTacticalDestroyerCaldari3'),
                                      skill='Caldari Tactical Destroyer', **kwargs)


class Effect6083(BaseEffect):
    """
    shipSmallMissileDmgPirateFaction

    Used by:
    Ship: Jackdaw
    Ship: Sunesis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'explosive', 'kinetic', 'thermal'):
            fit.modules.filteredChargeBoost(
                lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
                '{0}Damage'.format(damageType), ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect6085(BaseEffect):
    """
    shipMissileRoFCaldariTacticalDestroyer1

    Used by:
    Ship: Jackdaw
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'speed', ship.getModifiedItemAttr('shipBonusTacticalDestroyerCaldari1'),
                                      skill='Caldari Tactical Destroyer', **kwargs)


class Effect6088(BaseEffect):
    """
    shipBonusHeavyAssaultMissileAllDamageMC2

    Used by:
    Ship: Rapier
    Ship: Scythe Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'explosive', 'kinetic', 'thermal'):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                            '{0}Damage'.format(damageType), ship.getModifiedItemAttr('shipBonusMC2'),
                                            skill='Minmatar Cruiser', **kwargs)


class Effect6093(BaseEffect):
    """
    shipBonusHeavyMissileAllDamageMC2

    Used by:
    Ship: Rapier
    Ship: Scythe Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'explosive', 'kinetic', 'thermal'):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                            '{0}Damage'.format(damageType), ship.getModifiedItemAttr('shipBonusMC2'),
                                            skill='Minmatar Cruiser', **kwargs)


class Effect6096(BaseEffect):
    """
    shipBonusLightMissileAllDamageMC2

    Used by:
    Ship: Rapier
    Ship: Scythe Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for damageType in ('em', 'explosive', 'kinetic', 'thermal'):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                            '{0}Damage'.format(damageType), ship.getModifiedItemAttr('shipBonusMC2'),
                                            skill='Minmatar Cruiser', **kwargs)


class Effect6098(BaseEffect):
    """
    shipMissileReloadTimeCaldariTacticalDestroyer2

    Used by:
    Ship: Jackdaw
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
                                      'reloadTime', ship.getModifiedItemAttr('shipBonusTacticalDestroyerCaldari2'),
                                      skill='Caldari Tactical Destroyer', **kwargs)


class Effect6104(BaseEffect):
    """
    entosisDurationMultiply

    Used by:
    Items from market group: Ships > Capital Ships (31 of 41)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Infomorph Psychology'),
                                         'duration', ship.getModifiedItemAttr('entosisDurationMultiplier') or 1, **kwargs)


class Effect6110(BaseEffect):
    """
    missileVelocityBonusOnline

    Used by:
    Modules from group: Missile Guidance Enhancer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', module.getModifiedItemAttr('missileVelocityBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6111(BaseEffect):
    """
    missileExplosionDelayBonusOnline

    Used by:
    Modules from group: Missile Guidance Enhancer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosionDelay', module.getModifiedItemAttr('explosionDelayBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6112(BaseEffect):
    """
    missileAOECloudSizeBonusOnline

    Used by:
    Modules from group: Missile Guidance Enhancer (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeCloudSize', module.getModifiedItemAttr('aoeCloudSizeBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6113(BaseEffect):
    """
    missileAOEVelocityBonusOnline

    Used by:
    Modules from group: Missile Guidance Enhancer (3 of 3)
    Module: ML-EKP 'Polybolos' Ballistic Control System
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'aoeVelocity', module.getModifiedItemAttr('aoeVelocityBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6128(BaseEffect):
    """
    scriptMissileGuidanceComputerAOECloudSizeBonusBonus

    Used by:
    Charges from group: Tracking Script (2 of 2)
    Charges named like: Missile Script (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('aoeCloudSizeBonus', module.getModifiedChargeAttr('aoeCloudSizeBonusBonus'), **kwargs)


class Effect6129(BaseEffect):
    """
    scriptMissileGuidanceComputerAOEVelocityBonusBonus

    Used by:
    Charges from group: Tracking Script (2 of 2)
    Charges named like: Missile Script (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('aoeVelocityBonus', module.getModifiedChargeAttr('aoeVelocityBonusBonus'), **kwargs)


class Effect6130(BaseEffect):
    """
    scriptMissileGuidanceComputerMissileVelocityBonusBonus

    Used by:
    Charges named like: Missile Script (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('missileVelocityBonus', module.getModifiedChargeAttr('missileVelocityBonusBonus'), **kwargs)


class Effect6131(BaseEffect):
    """
    scriptMissileGuidanceComputerExplosionDelayBonusBonus

    Used by:
    Charges named like: Missile Script (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('explosionDelayBonus', module.getModifiedChargeAttr('explosionDelayBonusBonus'), **kwargs)


class Effect6135(BaseEffect):
    """
    missileGuidanceComputerBonus4

    Used by:
    Modules from group: Missile Guidance Computer (3 of 3)
    """

    type = 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        for srcAttr, tgtAttr in (
                ('aoeCloudSizeBonus', 'aoeCloudSize'),
                ('aoeVelocityBonus', 'aoeVelocity'),
                ('missileVelocityBonus', 'maxVelocity'),
                ('explosionDelayBonus', 'explosionDelay'),
        ):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                            tgtAttr, container.getModifiedItemAttr(srcAttr),
                                            stackingPenalties=True, **kwargs)


class Effect6144(BaseEffect):
    """
    overloadSelfMissileGuidanceBonus5

    Used by:
    Modules from group: Missile Guidance Computer (3 of 3)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for tgtAttr in (
                'aoeCloudSizeBonus',
                'explosionDelayBonus',
                'missileVelocityBonus',
                'maxVelocityModifier',
                'aoeVelocityBonus'
        ):
            module.boostItemAttr(tgtAttr, module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus'), **kwargs)


class Effect6148(BaseEffect):
    """
    shipHeatDamageGallenteTacticalDestroyer3

    Used by:
    Ship: Hecate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'heatDamage',
                                      ship.getModifiedItemAttr('shipBonusTacticalDestroyerGallente3'),
                                      skill='Gallente Tactical Destroyer', **kwargs)


class Effect6149(BaseEffect):
    """
    shipSHTRoFGallenteTacticalDestroyer1

    Used by:
    Ship: Hecate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusTacticalDestroyerGallente1'),
                                      skill='Gallente Tactical Destroyer', **kwargs)


class Effect6150(BaseEffect):
    """
    shipSHTTrackingGallenteTacticalDestroyer2

    Used by:
    Ship: Hecate
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusTacticalDestroyerGallente2'),
                                      skill='Gallente Tactical Destroyer', **kwargs)


class Effect6151(BaseEffect):
    """
    modeHullResonancePostDiv

    Used by:
    Module: Hecate Defense Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for srcResType, tgtResType in (
                ('Em', 'em'),
                ('Explosive', 'explosive'),
                ('Kinetic', 'kinetic'),
                ('Thermic', 'thermal')
        ):
            fit.ship.multiplyItemAttr(
                '{0}DamageResonance'.format(tgtResType),
                1 / module.getModifiedItemAttr('mode{0}ResistancePostDiv'.format(srcResType)), **kwargs)


class Effect6152(BaseEffect):
    """
    shipModeSHTOptimalRangePostDiv

    Used by:
    Module: Hecate Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
            'maxRange',
            1 / module.getModifiedItemAttr('modeMaxRangePostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6153(BaseEffect):
    """
    modeMWDCapPostDiv

    Used by:
    Module: Hecate Propulsion Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
            'capacitorNeed',
            1 / module.getModifiedItemAttr('modeMWDCapPostDiv'),
            **kwargs)


class Effect6154(BaseEffect):
    """
    modeMWDBoostPostDiv

    Used by:
    Module: Hecate Propulsion Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering'),
            'speedFactor',
            1 / module.getModifiedItemAttr('modeMWDVelocityPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv',
            **kwargs)


class Effect6155(BaseEffect):
    """
    modeArmorRepDurationPostDiv

    Used by:
    Module: Hecate Defense Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Repair Systems'),
            'duration',
            1 / module.getModifiedItemAttr('modeArmorRepDurationPostDiv'),
            **kwargs)


class Effect6163(BaseEffect):
    """
    passiveSpeedLimit

    Used by:
    Modules from group: Entosis Link (6 of 6)
    """

    runtime = 'late'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.extraAttributes['speedLimit'] = src.getModifiedItemAttr('speedLimit')


class Effect6164(BaseEffect):
    """
    systemMaxVelocityPercentage

    Used by:
    Celestials named like: Drifter Incursion (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', beacon.getModifiedItemAttr('maxVelocityMultiplier'), stackingPenalties=True, **kwargs)


class Effect6166(BaseEffect):
    """
    shipBonusWDFGnullPenalties

    Used by:
    Ship: Fiend
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Propulsion Jamming'),
                                      'speedFactorBonus', ship.getModifiedItemAttr('shipBonusAT'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Propulsion Jamming'),
                                      'speedBoostFactorBonus', ship.getModifiedItemAttr('shipBonusAT'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Propulsion Jamming'),
                                      'massBonusPercentage', ship.getModifiedItemAttr('shipBonusAT'), **kwargs)


class Effect6170(BaseEffect):
    """
    entosisCPUPenalty

    Used by:
    Ships from group: Interceptor (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Infomorph Psychology'),
                                         'entosisCPUAdd', ship.getModifiedItemAttr('entosisCPUPenalty'), **kwargs)


class Effect6171(BaseEffect):
    """
    entosisCPUAddition

    Used by:
    Modules from group: Entosis Link (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.increaseItemAttr('cpu', module.getModifiedItemAttr('entosisCPUAdd'), **kwargs)


class Effect6172(BaseEffect):
    """
    battlecruiserMETRange

    Used by:
    Ships named like: Harbinger (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'maxRange', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'falloff', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect6173(BaseEffect):
    """
    battlecruiserMHTRange

    Used by:
    Ships named like: Brutix (2 of 2)
    Ship: Ferox
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'maxRange', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'falloff', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect6174(BaseEffect):
    """
    battlecruiserMPTRange

    Used by:
    Ships named like: Hurricane (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'maxRange', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'falloff', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect6175(BaseEffect):
    """
    battlecruiserMissileRange

    Used by:
    Ships named like: Drake (2 of 2)
    Ship: Cyclone
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'maxVelocity', skill.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect6176(BaseEffect):
    """
    battlecruiserDroneSpeed

    Used by:
    Ship: Myrmidon
    Ship: Prophecy
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxVelocity', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect6177(BaseEffect):
    """
    shipHybridDmg1CBC2

    Used by:
    Ship: Ferox
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusCBC2'),
                                      skill='Caldari Battlecruiser', **kwargs)


class Effect6178(BaseEffect):
    """
    shipBonusProjectileTrackingMBC2

    Used by:
    Ship: Hurricane Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusMBC2'),
                                      skill='Minmatar Battlecruiser', **kwargs)


class Effect6184(BaseEffect):
    """
    shipModuleRemoteCapacitorTransmitter

    Used by:
    Modules from group: Remote Capacitor Transmitter (35 of 35)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        if src.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        amount = src.getModifiedItemAttr('powerTransferAmount')
        duration = src.getModifiedItemAttr('duration')
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        fit.addDrain(src, duration, -amount, 0)


class Effect6185(BaseEffect):
    """
    shipModuleRemoteHullRepairer

    Used by:
    Modules from group: Remote Hull Repairer (8 of 8)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        bonus = module.getModifiedItemAttr('structureDamageAmount')
        bonus *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        duration = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('hullRepair', bonus / duration, **kwargs)


class Effect6186(BaseEffect):
    """
    shipModuleRemoteShieldBooster

    Used by:
    Modules from group: Remote Shield Booster (38 of 38)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        bonus = container.getModifiedItemAttr('shieldBonus')
        bonus *= calculateRangeFactor(
            srcOptimalRange=container.getModifiedItemAttr('maxRange'),
            srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        duration = container.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('shieldRepair', bonus / duration, **kwargs)


class Effect6187(BaseEffect):
    """
    energyNeutralizerFalloff

    Used by:
    Modules from group: Energy Neutralizer (54 of 54)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if not ((hasattr(src, 'state') and src.state >= FittingModuleState.ACTIVE) or hasattr(src, 'amountActive')):
            return
        amount = src.getModifiedItemAttr('energyNeutralizerAmount')
        amount *= calculateRangeFactor(
            srcOptimalRange=src.getModifiedItemAttr('maxRange'),
            srcFalloffRange=src.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        time = src.getModifiedItemAttr('duration')
        fit.addDrain(src, time, amount, 0)


class Effect6188(BaseEffect):
    """
    shipModuleRemoteArmorRepairer

    Used by:
    Modules from group: Remote Armor Repairer (39 of 39)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        bonus = container.getModifiedItemAttr('armorDamageAmount')
        bonus *= calculateRangeFactor(
            srcOptimalRange=container.getModifiedItemAttr('maxRange'),
            srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        duration = container.getModifiedItemAttr('duration') / 1000.0
        rps = bonus / duration
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rps, **kwargs)


class Effect6195(BaseEffect):
    """
    expeditionFrigateShieldResistance1

    Used by:
    Ship: Endurance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for dmgType in ('Em', 'Thermal', 'Kinetic', 'Explosive'):
            fit.ship.boostItemAttr('shield{}DamageResonance'.format(dmgType),
                                   src.getModifiedItemAttr('eliteBonusExpedition1'),
                                   skill='Expedition Frigates', **kwargs)


class Effect6196(BaseEffect):
    """
    expeditionFrigateBonusIceHarvestingCycleTime2

    Used by:
    Ship: Endurance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'duration',
                                      src.getModifiedItemAttr('eliteBonusExpedition2'), skill='Expedition Frigates', **kwargs)


class Effect6197(BaseEffect):
    """
    energyNosferatuFalloff

    Used by:
    Modules from group: Energy Nosferatu (54 of 54)
    """

    runTime = 'late'
    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        amount = src.getModifiedItemAttr('powerTransferAmount')
        time = src.getModifiedItemAttr('duration')
        if 'projected' in context:
            if 'effect' in kwargs:
                from eos.modifiedAttributeDict import ModifiedAttributeDict
                amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
            amount *= calculateRangeFactor(
                srcOptimalRange=src.getModifiedItemAttr('maxRange'),
                srcFalloffRange=src.getModifiedItemAttr('falloffEffectiveness'),
                distance=projectionRange)
            fit.addDrain(src, time, amount, 0)
        elif 'module' in context:
            src.itemModifiedAttributes.force('capacitorNeed', -amount, **kwargs)


class Effect6201(BaseEffect):
    """
    doomsdaySlash

    Used by:
    Modules named like: Reaper (4 of 4)
    """

    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect6208(BaseEffect):
    """
    microJumpPortalDrive

    Used by:
    Module: Micro Jump Field Generator
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonusPercent'),
                               stackingPenalties=True, **kwargs)


class Effect6214(BaseEffect):
    """
    roleBonusCDLinksPGReduction

    Used by:
    Ships from group: Command Destroyer (5 of 5)
    Ship: Porpoise
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'power',
                                      src.getModifiedItemAttr('roleBonusCD'), **kwargs)


class Effect6216(BaseEffect):
    """
    structureEnergyNeutralizerFalloff

    Used by:
    Structure Modules from group: Structure Energy Neutralizer (5 of 5)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        amount = 0
        if 'projected' not in context:
            return
        if not ((hasattr(src, 'state') and src.state >= FittingModuleState.ACTIVE) or hasattr(src, 'amountActive')):
            return
        amount = src.getModifiedItemAttr('energyNeutralizerAmount')
        amount *= calculateRangeFactor(
            srcOptimalRange=src.getModifiedItemAttr('maxRange'),
            srcFalloffRange=src.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        time = src.getModifiedItemAttr('duration')
        fit.addDrain(src, time, amount, 0)


class Effect6222(BaseEffect):
    """
    structureWarpScrambleBlockMWDWithNPCEffect

    Used by:
    Structure Modules from group: Structure Warp Scrambler (2 of 2)
    """

    runTime = 'early'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs)
        fit.modules.filteredItemIncrease(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Micro Jump Drive Operation'),
            'activationBlocked', module.getModifiedItemAttr('activationBlockedStrenght'), **kwargs)


class Effect6230(BaseEffect):
    """
    shipBonusEnergyNeutOptimalRS1

    Used by:
    Ship: Curse
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect6232(BaseEffect):
    """
    shipBonusEnergyNeutFalloffRS2

    Used by:
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusReconShip2'), skill='Recon Ships', **kwargs)


class Effect6233(BaseEffect):
    """
    shipBonusEnergyNeutFalloffRS3

    Used by:
    Ship: Curse
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6234(BaseEffect):
    """
    shipBonusEnergyNosOptimalRS1

    Used by:
    Ship: Curse
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect6237(BaseEffect):
    """
    shipBonusEnergyNosFalloffRS2

    Used by:
    Ship: Pilgrim
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusReconShip2'), skill='Recon Ships', **kwargs)


class Effect6238(BaseEffect):
    """
    shipBonusEnergyNosFalloffRS3

    Used by:
    Ship: Curse
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6239(BaseEffect):
    """
    miningFrigateBonusIceHarvestingCycleTime2

    Used by:
    Ship: Endurance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'duration',
                                      src.getModifiedItemAttr('shipBonusOREfrig2'), skill='Mining Frigate', **kwargs)


class Effect6241(BaseEffect):
    """
    shipBonusEnergyNeutFalloffAD1

    Used by:
    Ship: Dragoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect6242(BaseEffect):
    """
    shipBonusEnergyNeutOptimalAD2

    Used by:
    Ship: Dragoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAD2'), skill='Amarr Destroyer', **kwargs)


class Effect6245(BaseEffect):
    """
    shipBonusEnergyNosOptimalAD2

    Used by:
    Ship: Dragoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAD2'), skill='Amarr Destroyer', **kwargs)


class Effect6246(BaseEffect):
    """
    shipBonusEnergyNosFalloffAD1

    Used by:
    Ship: Dragoon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAD1'), skill='Amarr Destroyer', **kwargs)


class Effect6253(BaseEffect):
    """
    shipBonusEnergyNeutOptimalAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect6256(BaseEffect):
    """
    shipBonusEnergyNeutFalloffAB2

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect6257(BaseEffect):
    """
    shipBonusEnergyNosOptimalAB

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAB'), skill='Amarr Battleship', **kwargs)


class Effect6260(BaseEffect):
    """
    shipBonusEnergyNosFalloffAB2

    Used by:
    Ship: Armageddon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAB2'), skill='Amarr Battleship', **kwargs)


class Effect6267(BaseEffect):
    """
    shipBonusEnergyNeutOptimalEAF1

    Used by:
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusElectronicAttackShip1'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect6272(BaseEffect):
    """
    shipBonusEnergyNeutFalloffEAF3

    Used by:
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusElectronicAttackShip3'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect6273(BaseEffect):
    """
    shipBonusEnergyNosOptimalEAF1

    Used by:
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusElectronicAttackShip1'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect6278(BaseEffect):
    """
    shipBonusEnergyNosFalloffEAF3

    Used by:
    Ship: Sentinel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusElectronicAttackShip3'),
                                      skill='Electronic Attack Ships', **kwargs)


class Effect6281(BaseEffect):
    """
    shipBonusEnergyNeutOptimalAF2

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect6285(BaseEffect):
    """
    shipBonusEnergyNeutFalloffAF3

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonus3AF'), skill='Amarr Frigate', **kwargs)


class Effect6287(BaseEffect):
    """
    shipBonusEnergyNosOptimalAF2

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect6291(BaseEffect):
    """
    shipBonusEnergyNosFalloffAF3

    Used by:
    Ship: Malice
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonus3AF'), skill='Amarr Frigate', **kwargs)


class Effect6294(BaseEffect):
    """
    shipBonusEnergyNeutOptimalAC1

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect6299(BaseEffect):
    """
    shipBonusEnergyNeutFalloffAC3

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAC3'), skill='Amarr Cruiser', **kwargs)


class Effect6300(BaseEffect):
    """
    shipBonusEnergyNosOptimalAC1

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect6301(BaseEffect):
    """
    shipBonusNosOptimalFalloffAC2

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'maxRange',
                                      src.getModifiedItemAttr('shipBonusAC2'), skill='Amarr Cruiser', **kwargs)


class Effect6305(BaseEffect):
    """
    shipBonusEnergyNosFalloffAC3

    Used by:
    Ship: Vangel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusAC3'), skill='Amarr Cruiser', **kwargs)


class Effect6307(BaseEffect):
    """
    shipBonusThermMissileDmgMD1

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusMD1'), skill='Minmatar Destroyer', **kwargs)


class Effect6308(BaseEffect):
    """
    shipBonusEMMissileDmgMD1

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusMD1'), skill='Minmatar Destroyer', **kwargs)


class Effect6309(BaseEffect):
    """
    shipBonusKineticMissileDmgMD1

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusMD1'), skill='Minmatar Destroyer', **kwargs)


class Effect6310(BaseEffect):
    """
    shipBonusExplosiveMissileDmgMD1

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', src.getModifiedItemAttr('shipBonusMD1'),
                                        skill='Minmatar Destroyer', **kwargs)


class Effect6315(BaseEffect):
    """
    eliteBonusCommandDestroyerSkirmish1

    Used by:
    Ships from group: Command Destroyer (3 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandDestroyer1'),
                                          skill='Command Destroyers', **kwargs)


class Effect6316(BaseEffect):
    """
    eliteBonusCommandDestroyerShield1

    Used by:
    Ship: Bifrost
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandDestroyer1'),
                                          skill='Command Destroyers', **kwargs)


class Effect6317(BaseEffect):
    """
    eliteBonusCommandDestroyerMJFGspool2

    Used by:
    Ships from group: Command Destroyer (5 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Micro Jump Drive Operation'), 'duration',
                                      src.getModifiedItemAttr('eliteBonusCommandDestroyer2'), skill='Command Destroyers', **kwargs)


class Effect6318(BaseEffect):
    """
    shipBonusEMShieldResistanceMD2

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusMD2'),
                               skill='Minmatar Destroyer', **kwargs)


class Effect6319(BaseEffect):
    """
    shipBonusKineticShieldResistanceMD2

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusMD2'),
                               skill='Minmatar Destroyer', **kwargs)


class Effect6320(BaseEffect):
    """
    shipBonusThermalShieldResistanceMD2

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusMD2'),
                               skill='Minmatar Destroyer', **kwargs)


class Effect6321(BaseEffect):
    """
    shipBonusExplosiveShieldResistanceMD2

    Used by:
    Ship: Bifrost
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusMD2'),
                               skill='Minmatar Destroyer', **kwargs)


class Effect6322(BaseEffect):
    """
    scriptscanGravimetricStrengthBonusBonus

    Used by:
    Charges from group: Structure ECM script (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('scanGravimetricStrengthBonus', src.getModifiedChargeAttr('scanGravimetricStrengthBonusBonus'), **kwargs)


class Effect6323(BaseEffect):
    """
    scriptscanLadarStrengthBonusBonus

    Used by:
    Charges from group: Structure ECM script (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('scanLadarStrengthBonus', src.getModifiedChargeAttr('scanLadarStrengthBonusBonus'), **kwargs)


class Effect6324(BaseEffect):
    """
    scriptscanMagnetometricStrengthBonusBonus

    Used by:
    Charges from group: Structure ECM script (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('scanMagnetometricStrengthBonus', src.getModifiedChargeAttr('scanMagnetometricStrengthBonusBonus'), **kwargs)


class Effect6325(BaseEffect):
    """
    scriptscanRadarStrengthBonusBonus

    Used by:
    Charges from group: Structure ECM script (4 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('scanRadarStrengthBonus', src.getModifiedChargeAttr('scanRadarStrengthBonusBonus'), **kwargs)


class Effect6326(BaseEffect):
    """
    shipBonusThermalMissileDamageCD1

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusCD1'), skill='Caldari Destroyer', **kwargs)


class Effect6327(BaseEffect):
    """
    shipBonusEMMissileDamageCD1

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusCD1'), skill='Caldari Destroyer', **kwargs)


class Effect6328(BaseEffect):
    """
    shipBonusKineticMissileDamageCD1

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusCD1'), skill='Caldari Destroyer', **kwargs)


class Effect6329(BaseEffect):
    """
    shipBonusExplosiveMissileDamageCD1

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                        'explosiveDamage', src.getModifiedItemAttr('shipBonusCD1'),
                                        skill='Caldari Destroyer', **kwargs)


class Effect6330(BaseEffect):
    """
    shipBonusShieldEMResistanceCD2

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusCD2'),
                               skill='Caldari Destroyer', **kwargs)


class Effect6331(BaseEffect):
    """
    shipBonusShieldThermalResistanceCD2

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusCD2'),
                               skill='Caldari Destroyer', **kwargs)


class Effect6332(BaseEffect):
    """
    shipBonusShieldKineticResistanceCD2

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusCD2'),
                               skill='Caldari Destroyer', **kwargs)


class Effect6333(BaseEffect):
    """
    shipBonusShieldExplosiveResistanceCD2

    Used by:
    Ship: Stork
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusCD2'),
                               skill='Caldari Destroyer', **kwargs)


class Effect6334(BaseEffect):
    """
    eliteBonusCommandDestroyerInfo1

    Used by:
    Ships from group: Command Destroyer (3 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Information Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandDestroyer1'),
                                          skill='Command Destroyers', **kwargs)


class Effect6335(BaseEffect):
    """
    shipBonusKineticArmorResistanceAD2

    Used by:
    Ship: Pontifex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusAD2'),
                               skill='Amarr Destroyer', **kwargs)


class Effect6336(BaseEffect):
    """
    shipBonusThermalArmorResistanceAD2

    Used by:
    Ship: Pontifex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusAD2'),
                               skill='Amarr Destroyer', **kwargs)


class Effect6337(BaseEffect):
    """
    shipBonusEMArmorResistanceAD2

    Used by:
    Ship: Pontifex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusAD2'), skill='Amarr Destroyer', **kwargs)


class Effect6338(BaseEffect):
    """
    shipBonusExplosiveArmorResistanceAD2

    Used by:
    Ship: Pontifex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusAD2'),
                               skill='Amarr Destroyer', **kwargs)


class Effect6339(BaseEffect):
    """
    eliteBonusCommandDestroyerArmored1

    Used by:
    Ship: Magus
    Ship: Pontifex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command'),
                                          attrName, src.getModifiedItemAttr('eliteBonusCommandDestroyer1'),
                                          skill='Command Destroyers', **kwargs)


class Effect6340(BaseEffect):
    """
    shipBonusKineticArmorResistanceGD2

    Used by:
    Ship: Magus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusGD2'),
                               skill='Gallente Destroyer', **kwargs)


class Effect6341(BaseEffect):
    """
    shipBonusEMArmorResistanceGD2

    Used by:
    Ship: Magus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusGD2'),
                               skill='Gallente Destroyer', **kwargs)


class Effect6342(BaseEffect):
    """
    shipBonusThermalArmorResistanceGD2

    Used by:
    Ship: Magus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusGD2'),
                               skill='Gallente Destroyer', **kwargs)


class Effect6343(BaseEffect):
    """
    shipBonusExplosiveArmorResistanceGD2

    Used by:
    Ship: Magus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusGD2'),
                               skill='Gallente Destroyer', **kwargs)


class Effect6350(BaseEffect):
    """
    shipSmallMissileKinDmgCF3

    Used by:
    Ship: Caldari Navy Hookbill
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Light Missiles') or mod.charge.requiresSkill('Rockets'), 'kineticDamage',
            src.getModifiedItemAttr('shipBonus3CF'), skill='Caldari Frigate', **kwargs)


class Effect6351(BaseEffect):
    """
    shipMissileKinDamageCC3

    Used by:
    Ship: Osprey Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusCC3'), skill='Caldari Cruiser', **kwargs)


class Effect6352(BaseEffect):
    """
    roleBonusWDRange

    Used by:
    Ship: Crucifier Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), 'falloffEffectiveness',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), 'maxRange',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6353(BaseEffect):
    """
    roleBonusWDCapCPU

    Used by:
    Ship: Crucifier Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), 'cpu',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), 'capacitorNeed',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6354(BaseEffect):
    """
    shipBonusEwWeaponDisruptionStrengthAF2

    Used by:
    Variations of ship: Crucifier (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in (
            'trackingSpeedBonus', 'explosionDelayBonus', 'maxRangeBonus', 'falloffBonus',
            'missileVelocityBonus', 'aoeVelocityBonus', 'aoeCloudSizeBonus'
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), attrName,
                                          src.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect6355(BaseEffect):
    """
    roleBonusECMCapCPU

    Used by:
    Ship: Griffin Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'capacitorNeed',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'cpu', src.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6356(BaseEffect):
    """
    roleBonusECMRange

    Used by:
    Ship: Griffin Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'maxRange',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6357(BaseEffect):
    """
    shipBonusJustScramblerRangeGF2

    Used by:
    Ship: Maulus Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Navigation'), 'maxRange',
                                      src.getModifiedItemAttr('shipBonusGF2'), skill='Gallente Frigate', **kwargs)


class Effect6358(BaseEffect):
    """
    roleBonusJustScramblerStrength

    Used by:
    Ship: Maulus Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Navigation'),
                                         'warpScrambleStrength', ship.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6359(BaseEffect):
    """
    shipBonusAoeVelocityRocketsMF

    Used by:
    Ship: Vigil Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'), 'aoeVelocity',
                                        src.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect6360(BaseEffect):
    """
    shipRocketEMThermKinDmgMF2

    Used by:
    Ship: Vigil Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusMF2'), skill='Minmatar Frigate', **kwargs)


class Effect6361(BaseEffect):
    """
    shipRocketExpDmgMF3

    Used by:
    Ship: Vigil Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonus3MF'), skill='Minmatar Frigate', **kwargs)


class Effect6362(BaseEffect):
    """
    roleBonusStasisRange

    Used by:
    Ship: Vigil Fleet Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'maxRange',
                                      src.getModifiedItemAttr('roleBonus'), **kwargs)


class Effect6368(BaseEffect):
    """
    shieldTransporterFalloffBonus

    Used by:
    Variations of ship: Bantam (2 of 2)
    Variations of ship: Burst (2 of 2)
    Ship: Osprey
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Shield Booster', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('falloffBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Ancillary Remote Shield Booster',
                                      'falloffEffectiveness', src.getModifiedItemAttr('falloffBonus'), **kwargs)


class Effect6369(BaseEffect):
    """
    shipShieldTransferFalloffMC2

    Used by:
    Ship: Scimitar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect6370(BaseEffect):
    """
    shipShieldTransferFalloffCC1

    Used by:
    Ship: Basilisk
    Ship: Etana
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'falloffEffectiveness',
                                      src.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect6371(BaseEffect):
    """
    shipRemoteArmorFalloffGC1

    Used by:
    Ship: Oneiros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('shipBonusGC'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect6372(BaseEffect):
    """
    shipRemoteArmorFalloffAC2

    Used by:
    Ship: Guardian
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('shipBonusAC2'),
                                      skill='Amarr Cruiser', **kwargs)


class Effect6373(BaseEffect):
    """
    armorRepairProjectorFalloffBonus

    Used by:
    Variations of ship: Navitas (2 of 2)
    Ship: Augoror
    Ship: Deacon
    Ship: Exequror
    Ship: Inquisitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Armor Repairer', 'falloffEffectiveness',
                                      src.getModifiedItemAttr('falloffBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Ancillary Remote Armor Repairer',
                                      'falloffEffectiveness', src.getModifiedItemAttr('falloffBonus'), **kwargs)


class Effect6374(BaseEffect):
    """
    droneHullRepairBonusEffect

    Used by:
    Ships from group: Logistics (6 of 7)
    Ship: Exequror
    Ship: Scythe
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == 'Logistic Drone', 'structureDamageAmount',
                                     src.getModifiedItemAttr('droneArmorDamageAmountBonus'), **kwargs)


class Effect6377(BaseEffect):
    """
    eliteBonusLogiFrigArmorRepSpeedCap1

    Used by:
    Ship: Deacon
    Ship: Thalia
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogiFrig1'), skill='Logistics Frigates', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'duration',
                                      src.getModifiedItemAttr('eliteBonusLogiFrig1'), skill='Logistics Frigates', **kwargs)


class Effect6378(BaseEffect):
    """
    eliteBonusLogiFrigShieldRepSpeedCap1

    Used by:
    Ship: Kirin
    Ship: Scalpel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'duration',
                                      src.getModifiedItemAttr('eliteBonusLogiFrig1'), skill='Logistics Frigates', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'capacitorNeed',
                                      src.getModifiedItemAttr('eliteBonusLogiFrig1'), skill='Logistics Frigates', **kwargs)


class Effect6379(BaseEffect):
    """
    eliteBonusLogiFrigArmorHP2

    Used by:
    Ship: Deacon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', src.getModifiedItemAttr('eliteBonusLogiFrig2'), skill='Logistics Frigates', **kwargs)


class Effect6380(BaseEffect):
    """
    eliteBonusLogiFrigShieldHP2

    Used by:
    Ship: Kirin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', src.getModifiedItemAttr('eliteBonusLogiFrig2'), skill='Logistics Frigates', **kwargs)


class Effect6381(BaseEffect):
    """
    eliteBonusLogiFrigSignature2

    Used by:
    Ship: Scalpel
    Ship: Thalia
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', src.getModifiedItemAttr('eliteBonusLogiFrig2'),
                               skill='Logistics Frigates', **kwargs)


class Effect6384(BaseEffect):
    """
    overloadSelfMissileGuidanceModuleBonus

    Used by:
    Variations of module: Guidance Disruptor I (6 of 6)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for tgtAttr in (
                'aoeCloudSizeBonus',
                'explosionDelayBonus',
                'missileVelocityBonus',
                'aoeVelocityBonus'
        ):
            module.boostItemAttr(tgtAttr, module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus'), **kwargs)


class Effect6385(BaseEffect):
    """
    ignoreCloakVelocityPenalty

    Used by:
    Ship: Endurance
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemForce(lambda mod: mod.item.group.name == 'Cloaking Device',
                                      'maxVelocityModifier', src.getModifiedItemAttr('velocityPenaltyReduction'), **kwargs)


class Effect6386(BaseEffect):
    """
    ewSkillGuidanceDisruptionBonus

    Used by:
    Modules named like: Tracking Diagnostic Subroutines (8 of 8)
    Skill: Weapon Destabilization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        level = src.level if 'skill' in context else 1
        for attr in (
                'explosionDelayBonus',
                'aoeVelocityBonus',
                'aoeCloudSizeBonus',
                'missileVelocityBonus'
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'),
                                          attr, src.getModifiedItemAttr('scanSkillEwStrengthBonus') * level, **kwargs)


class Effect6395(BaseEffect):
    """
    shipBonusEwWeaponDisruptionStrengthAC1

    Used by:
    Variations of ship: Arbitrator (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in (
            'missileVelocityBonus', 'aoeVelocityBonus', 'maxRangeBonus', 'explosionDelayBonus',
            'aoeCloudSizeBonus', 'trackingSpeedBonus', 'falloffBonus'
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Weapon Disruption'), attrName,
                                          src.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect6396(BaseEffect):
    """
    skillStructureMissileDamageBonus

    Used by:
    Skill: Structure Missile Systems
    """

    type = 'passive', 'structure'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Anti-Capital Missile', 'Structure Anti-Subcapital Missile', 'Structure Guided Bomb')
        for damageType in ('em', 'thermal', 'explosive', 'kinetic'):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in groups,
                                            '%sDamage' % damageType, src.getModifiedItemAttr('damageMultiplierBonus'),
                                            skill='Structure Missile Systems', **kwargs)


class Effect6400(BaseEffect):
    """
    skillStructureElectronicSystemsCapNeedBonus

    Used by:
    Skill: Structure Electronic Systems
    """

    type = 'passive', 'structure'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Warp Scrambler', 'Structure Disruption Battery', 'Structure Stasis Webifier')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'capacitorNeed', src.getModifiedItemAttr('capNeedBonus'),
                                      skill='Structure Electronic Systems', **kwargs)


class Effect6401(BaseEffect):
    """
    skillStructureEngineeringSystemsCapNeedBonus

    Used by:
    Skill: Structure Engineering Systems
    """

    type = 'passive', 'structure'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Energy Neutralizer', 'Structure Area Denial Module')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'capacitorNeed', src.getModifiedItemAttr('capNeedBonus'),
                                      skill='Structure Engineering Systems', **kwargs)


class Effect6402(BaseEffect):
    """
    structureRigAoeVelocityBonusSingleTargetMissiles

    Used by:
    Structure Modules named like: Standup Set Missile (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Anti-Subcapital Missile', 'Structure Anti-Capital Missile')

        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in groups,
                                      'aoeVelocity', src.getModifiedItemAttr('structureRigMissileExploVeloBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6403(BaseEffect):
    """
    structureRigVelocityBonusSingleTargetMissiles

    Used by:
    Structure Modules named like: Standup Set Missile (6 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Anti-Subcapital Missile', 'Structure Anti-Capital Missile')
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in groups,
                                      'maxVelocity', src.getModifiedItemAttr('structureRigMissileVelocityBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6404(BaseEffect):
    """
    structureRigNeutralizerMaxRangeFalloffEffectiveness

    Used by:
    Structure Modules from group: Structure Combat Rig XL - Energy Neutralizer and EW (2 of 2)
    Structure Modules named like: Standup Set Energy Neutralizer (4 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Energy Neutralizer',
                                      'maxRange', src.getModifiedItemAttr('structureRigEwarOptimalBonus'),
                                      stackingPenalties=True, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Energy Neutralizer',
                                      'falloffEffectiveness', src.getModifiedItemAttr('structureRigEwarFalloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6405(BaseEffect):
    """
    structureRigNeutralizerCapacitorNeed

    Used by:
    Structure Modules from group: Structure Combat Rig XL - Energy Neutralizer and EW (2 of 2)
    Structure Modules named like: Standup Set Energy Neutralizer (4 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Energy Neutralizer',
                                      'capacitorNeed', src.getModifiedItemAttr('structureRigEwarCapUseBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6406(BaseEffect):
    """
    structureRigEWMaxRangeFalloff

    Used by:
    Structure Modules from group: Structure Combat Rig M - EW projection (2 of 2)
    Structure Modules named like: Standup Set EW (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure ECM Battery', 'Structure Disruption Battery')

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'falloff', src.getModifiedItemAttr('structureRigEwarFalloffBonus'),
                                      stackingPenalties=True, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'maxRange', src.getModifiedItemAttr('structureRigEwarOptimalBonus'),
                                      stackingPenalties=True, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'falloffEffectiveness', src.getModifiedItemAttr('structureRigEwarFalloffBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6407(BaseEffect):
    """
    structureRigEWCapacitorNeed

    Used by:
    Structure Modules from group: Structure Combat Rig M - EW Cap Reduction (2 of 2)
    Structure Modules named like: Standup Set EW (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure ECM Battery', 'Structure Disruption Battery')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'capacitorNeed', src.getModifiedItemAttr('structureRigEwarCapUseBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6408(BaseEffect):
    """
    structureRigMaxTargets

    Used by:
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    Structure Modules named like: Standup Set Target (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.extraAttributes.increase('maxTargetsLockedFromSkills', src.getModifiedItemAttr('structureRigMaxTargetBonus'), **kwargs)


class Effect6409(BaseEffect):
    """
    structureRigSensorResolution

    Used by:
    Structure Modules from group: Structure Combat Rig L - Max Targets and Sensor Boosting (2 of 2)
    Structure Modules from group: Structure Combat Rig M - Boosted Sensors (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanResolution', src.getModifiedItemAttr('structureRigScanResBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6410(BaseEffect):
    """
    structureRigExplosionRadiusBonusAoEMissiles

    Used by:
    Structure Modules from group: Structure Combat Rig L - AoE Launcher Application and Projection (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Missile and AoE Missile (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Structure Guided Bomb',
                                        'aoeCloudSize', src.getModifiedItemAttr('structureRigMissileExplosionRadiusBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6411(BaseEffect):
    """
    structureRigVelocityBonusAoeMissiles

    Used by:
    Structure Modules from group: Structure Combat Rig L - AoE Launcher Application and Projection (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Missile and AoE Missile (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name == 'Structure Guided Bomb',
                                        'maxVelocity', src.getModifiedItemAttr('structureRigMissileVelocityBonus'),
                                        stackingPenalties=True, **kwargs)


class Effect6412(BaseEffect):
    """
    structureRigPDBmaxRange

    Used by:
    Structure Modules from group: Structure Combat Rig L - Point Defense Battery Application and Projection (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Area Denial Module',
                                      'empFieldRange', src.getModifiedItemAttr('structureRigPDRangeBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6413(BaseEffect):
    """
    structureRigPDBCapacitorNeed

    Used by:
    Structure Modules from group: Structure Combat Rig L - Point Defense Battery Application and Projection (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Area Denial Module',
                                      'capacitorNeed', src.getModifiedItemAttr('structureRigPDCapUseBonus'),
                                      stackingPenalties=True, **kwargs)


class Effect6417(BaseEffect):
    """
    structureRigDoomsdayDamageLoss

    Used by:
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == 'Structure Doomsday Weapon',
                                         'lightningWeaponDamageLossTarget',
                                         src.getModifiedItemAttr('structureRigDoomsdayDamageLossTargetBonus'), **kwargs)


class Effect6422(BaseEffect):
    """
    remoteSensorDampFalloff

    Used by:
    Modules from group: Sensor Dampener (6 of 6)
    Starbases from group: Sensor Dampening Battery (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus') * rangeFactor,
                               stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionBonus') * rangeFactor,
                               stackingPenalties=True, **kwargs)


class Effect6423(BaseEffect):
    """
    shipModuleGuidanceDisruptor

    Used by:
    Variations of module: Guidance Disruptor I (6 of 6)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        for srcAttr, tgtAttr in (
            ('aoeCloudSizeBonus', 'aoeCloudSize'),
            ('aoeVelocityBonus', 'aoeVelocity'),
            ('missileVelocityBonus', 'maxVelocity'),
            ('explosionDelayBonus', 'explosionDelay')
        ):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                            tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                            stackingPenalties=True, **kwargs)


class Effect6424(BaseEffect):
    """
    shipModuleTrackingDisruptor

    Used by:
    Variations of module: Tracking Disruptor I (6 of 6)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        for srcAttr, tgtAttr in (
            ('trackingSpeedBonus', 'trackingSpeed'),
            ('maxRangeBonus', 'maxRange'),
            ('falloffBonus', 'falloff')
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                          stackingPenalties=True, **kwargs)


class Effect6425(BaseEffect):
    """
    remoteTargetPaintFalloff

    Used by:
    Modules from group: Target Painter (8 of 8)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        appliedBoost = container.getModifiedItemAttr('signatureRadiusBonus') * calculateRangeFactor(
            srcOptimalRange=container.getModifiedItemAttr('maxRange'),
            srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('signatureRadius', appliedBoost, stackingPenalties=True, **kwargs)


class Effect6426(BaseEffect):
    """
    remoteWebifierFalloff

    Used by:
    Modules from group: Stasis Grappler (7 of 7)
    Modules from group: Stasis Web (19 of 19)
    Starbases from group: Stasis Webification Battery (3 of 3)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        appliedBoost = module.getModifiedItemAttr('speedFactor') * calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('maxVelocity', appliedBoost, stackingPenalties=True, **kwargs)


class Effect6427(BaseEffect):
    """
    remoteSensorBoostFalloff

    Used by:
    Modules from group: Remote Sensor Booster (8 of 8)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        for srcAttr, tgtAttr in (
            ('maxTargetRangeBonus', 'maxTargetRange'),
            ('scanResolutionBonus', 'scanResolution'),
            ('scanGravimetricStrengthPercent', 'scanGravimetricStrength'),
            ('scanMagnetometricStrengthPercent', 'scanMagnetometricStrength'),
            ('scanRadarStrengthPercent', 'scanRadarStrength'),
            ('scanLadarStrengthPercent', 'scanLadarStrength')
        ):
            fit.ship.boostItemAttr(tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                   stackingPenalties=True, **kwargs)


class Effect6428(BaseEffect):
    """
    shipModuleRemoteTrackingComputer

    Used by:
    Modules from group: Remote Tracking Computer (8 of 8)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        for srcAttr, tgtAttr in (
            ('trackingSpeedBonus', 'trackingSpeed'),
            ('maxRangeBonus', 'maxRange'),
            ('falloffBonus', 'falloff')
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                          stackingPenalties=True, **kwargs)


class Effect6431(BaseEffect):
    """
    fighterAbilityMissiles

    Used by:
    Items from category: Fighter (48 of 82)
    Fighters from group: Light Fighter (32 of 32)
    """

    dealsDamage = True
    displayName = 'Missile Attack'
    hasCharges = True
    prefix = 'fighterAbilityMissiles'
    type = 'active'


class Effect6434(BaseEffect):
    """
    fighterAbilityEnergyNeutralizer

    Used by:
    Fighters named like: Cenobite (4 of 4)
    """

    displayName = 'Energy Neutralizer'
    grouped = True
    prefix = 'fighterAbilityEnergyNeutralizer'
    type = 'active', 'projected'

    @classmethod
    def handler(cls, fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        amount = src.getModifiedItemAttr('{}Amount'.format(cls.prefix)) * src.amount
        amount *= calculateRangeFactor(
            srcOptimalRange=src.getModifiedItemAttr('{}OptimalRange'.format(cls.prefix)),
            srcFalloffRange=src.getModifiedItemAttr('{}FalloffRange'.format(cls.prefix)),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        time = src.getModifiedItemAttr('{}Duration'.format(cls.prefix))
        fit.addDrain(src, time, amount, 0)


class Effect6435(BaseEffect):
    """
    fighterAbilityStasisWebifier

    Used by:
    Fighters named like: Dromi (4 of 4)
    """

    displayName = 'Stasis Webifier'
    grouped = True
    prefix = 'fighterAbilityStasisWebifier'
    type = 'active', 'projected'

    @classmethod
    def handler(cls, fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        speedBoost = src.getModifiedItemAttr('{}SpeedPenalty'.format(cls.prefix)) * src.amount
        speedBoost *= calculateRangeFactor(
            srcOptimalRange=src.getModifiedItemAttr('{}OptimalRange'.format(cls.prefix)),
            srcFalloffRange=src.getModifiedItemAttr('{}FalloffRange'.format(cls.prefix)),
            distance=projectionRange)
        fit.ship.boostItemAttr('maxVelocity', speedBoost, stackingPenalties=True, **kwargs)


class Effect6436(BaseEffect):
    """
    fighterAbilityWarpDisruption

    Used by:
    Fighters named like: Siren (4 of 4)
    """

    displayName = 'Warp Disruption'
    grouped = True
    prefix = 'fighterAbilityWarpDisruption'
    type = 'active', 'projected'

    @classmethod
    def handler(cls, fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if src.getModifiedItemAttr('{}Range'.format(cls.prefix), 0) < (projectionRange or 0):
            return
        fit.ship.increaseItemAttr(
            'warpScrambleStatus',
            src.getModifiedItemAttr('{}PointStrength'.format(cls.prefix)) * src.amount,
            **kwargs)


class Effect6437(BaseEffect):
    """
    fighterAbilityECM

    Used by:
    Fighters named like: Scarab (4 of 4)
    """

    displayName = 'ECM'
    grouped = True
    prefix = 'fighterAbilityECM'
    type = 'projected', 'active'

    @classmethod
    def handler(cls, fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        strength = src.getModifiedItemAttr('{}Strength{}'.format(cls.prefix, fit.scanType)) * src.amount
        strength *= calculateRangeFactor(
            srcOptimalRange=src.getModifiedItemAttr('{}RangeOptimal'.format(cls.prefix)),
            srcFalloffRange=src.getModifiedItemAttr('{}RangeFalloff'.format(cls.prefix)),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6439(BaseEffect):
    """
    fighterAbilityEvasiveManeuvers

    Used by:
    Fighters from group: Light Fighter (16 of 32)
    """

    displayName = 'Evasive Maneuvers'
    grouped = True
    prefix = 'fighterAbilityEvasiveManeuvers'
    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        container.boostItemAttr('maxVelocity',
                                container.getModifiedItemAttr('fighterAbilityEvasiveManeuversSpeedBonus'), **kwargs)
        container.boostItemAttr('signatureRadius',
                                container.getModifiedItemAttr('fighterAbilityEvasiveManeuversSignatureRadiusBonus'),
                                stackingPenalties=True, **kwargs)

        # These may not have stacking penalties, but there's nothing else that affects the attributes yet to check.
        container.multiplyItemAttr('shieldEmDamageResonance',
                                   container.getModifiedItemAttr('fighterAbilityEvasiveManeuversEmResonance'),
                                   stackingPenalties=True, **kwargs)
        container.multiplyItemAttr('shieldThermalDamageResonance',
                                   container.getModifiedItemAttr('fighterAbilityEvasiveManeuversThermResonance'),
                                   stackingPenalties=True, **kwargs)
        container.multiplyItemAttr('shieldKineticDamageResonance',
                                   container.getModifiedItemAttr('fighterAbilityEvasiveManeuversKinResonance'),
                                   stackingPenalties=True, **kwargs)
        container.multiplyItemAttr('shieldExplosiveDamageResonance',
                                   container.getModifiedItemAttr('fighterAbilityEvasiveManeuversExpResonance'),
                                   stackingPenalties=True, **kwargs)


class Effect6440(BaseEffect):
    """
    fighterAbilityAfterburner

    Used by:
    Fighters named like: Shadow (2 of 2)
    Fighters named like: Siren (4 of 4)
    """

    displayName = 'Afterburner'
    grouped = True
    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxVelocity', module.getModifiedItemAttr('fighterAbilityAfterburnerSpeedBonus'),
                             stackingPenalties=True, **kwargs)


class Effect6441(BaseEffect):
    """
    fighterAbilityMicroWarpDrive

    Used by:
    Items from category: Fighter (44 of 82)
    """

    displayName = 'Microwarpdrive'
    grouped = True
    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.boostItemAttr('maxVelocity', module.getModifiedItemAttr('fighterAbilityMicroWarpDriveSpeedBonus'),
                             stackingPenalties=True, **kwargs)
        module.boostItemAttr('signatureRadius',
                             module.getModifiedItemAttr('fighterAbilityMicroWarpDriveSignatureRadiusBonus'),
                             stackingPenalties=True, **kwargs)


class Effect6443(BaseEffect):
    """
    pointDefense

    Used by:
    Structure Modules from group: Structure Area Denial Module (2 of 2)
    """

    type = 'active'


class Effect6447(BaseEffect):
    """
    lightningWeapon

    Used by:
    Structure Module: Standup Arcing Vorton Projector I
    """

    type = 'active'


class Effect6448(BaseEffect):
    """
    structureMissileGuidanceEnhancer

    Used by:
    Variations of structure module: Standup Missile Guidance Enhancer I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        missileGroups = ('Structure Anti-Capital Missile', 'Structure Anti-Subcapital Missile')
        for srcAttr, tgtAttr in (
                ('aoeCloudSizeBonus', 'aoeCloudSize'),
                ('aoeVelocityBonus', 'aoeVelocity'),
                ('missileVelocityBonus', 'maxVelocity'),
                ('explosionDelayBonus', 'explosionDelay'),
        ):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in missileGroups,
                                            tgtAttr, container.getModifiedItemAttr(srcAttr),
                                            stackingPenalties=True, **kwargs)


class Effect6449(BaseEffect):
    """
    structureBallisticControlSystem

    Used by:
    Variations of structure module: Standup Ballistic Control System I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        missileGroups = ('Structure Anti-Capital Missile', 'Structure Anti-Subcapital Missile')

        for dmgType in ('em', 'kinetic', 'explosive', 'thermal'):
            fit.modules.filteredChargeMultiply(lambda mod: mod.charge.group.name in missileGroups,
                                               '%sDamage' % dmgType,
                                               module.getModifiedItemAttr('missileDamageMultiplierBonus'),
                                               stackingPenalties=True, **kwargs)

        launcherGroups = ('Structure XL Missile Launcher', 'Structure Multirole Missile Launcher')
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name in launcherGroups,
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect6465(BaseEffect):
    """
    fighterAbilityAttackM

    Used by:
    Items from category: Fighter (50 of 82)
    Fighters from group: Heavy Fighter (34 of 34)
    """

    dealsDamage = True
    displayName = 'Turret Attack'
    prefix = 'fighterAbilityAttackMissile'
    type = 'active'


class Effect6470(BaseEffect):
    """
    remoteECMFalloff

    Used by:
    Modules from group: ECM (39 of 39)
    Starbases from group: Electronic Warfare Battery (12 of 12)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        strength = module.getModifiedItemAttr('scan{0}StrengthBonus'.format(fit.scanType))
        strength *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6472(BaseEffect):
    """
    doomsdayBeamDOT

    Used by:
    Modules named like: Lance (4 of 4)
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect6473(BaseEffect):
    """
    doomsdayConeDOT

    Used by:
    Module: Bosonic Field Generator
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect6474(BaseEffect):
    """
    doomsdayHOG

    Used by:
    Module: Gravitational Transportation Field Oscillator
    """

    type = 'active'

    @staticmethod
    def handler(fit, mod, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxVelocity', mod.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', mod.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)


class Effect6475(BaseEffect):
    """
    structureRigDoomsdayTargetAmountBonus

    Used by:
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.group.name == 'Structure Doomsday Weapon',
                                         'lightningWeaponTargetAmount',
                                         src.getModifiedItemAttr('structureRigDoomsdayTargetAmountBonus'), **kwargs)


class Effect6476(BaseEffect):
    """
    doomsdayAOEWeb

    Used by:
    Module: Stasis Webification Burst Projector
    Structure Module: Standup Stasis Webification Burst Projector
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('speedFactor'),
                               stackingPenalties=True, **kwargs)


class Effect6477(BaseEffect):
    """
    doomsdayAOENeut

    Used by:
    Module: Energy Neutralization Burst Projector
    Structure Module: Standup Energy Neutralization Burst Projector
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if not ((hasattr(src, 'state') and src.state >= FittingModuleState.ACTIVE) or hasattr(src, 'amountActive')):
            return
        amount = src.getModifiedItemAttr('energyNeutralizerAmount')
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        time = src.getModifiedItemAttr('duration')
        fit.addDrain(src, time, amount, 0)


class Effect6478(BaseEffect):
    """
    doomsdayAOEPaint

    Used by:
    Module: Target Illumination Burst Projector
    Structure Module: Standup Target Illumination Burst Projector
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        fit.ship.boostItemAttr('signatureRadius', container.getModifiedItemAttr('signatureRadiusBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6479(BaseEffect):
    """
    doomsdayAOETrack

    Used by:
    Module: Weapon Disruption Burst Projector
    Structure Module: Standup Weapon Disruption Burst Projector
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        for srcAttr, tgtAttr in (
            ('aoeCloudSizeBonus', 'aoeCloudSize'),
            ('aoeVelocityBonus', 'aoeVelocity'),
            ('missileVelocityBonus', 'maxVelocity'),
            ('explosionDelayBonus', 'explosionDelay')
        ):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                            tgtAttr, module.getModifiedItemAttr(srcAttr),
                                            stackingPenalties=True, **kwargs)
        for srcAttr, tgtAttr in (
            ('trackingSpeedBonus', 'trackingSpeed'),
            ('maxRangeBonus', 'maxRange'),
            ('falloffBonus', 'falloff')
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          tgtAttr, module.getModifiedItemAttr(srcAttr),
                                          stackingPenalties=True, **kwargs)


class Effect6481(BaseEffect):
    """
    doomsdayAOEDamp

    Used by:
    Module: Sensor Dampening Burst Projector
    Structure Module: Standup Sensor Dampening Burst Projector
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6482(BaseEffect):
    """
    doomsdayAOEBubble

    Used by:
    Module: Warp Disruption Burst Projector
    Structure Module: Standup Warp Disruption Burst Projector
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        return


class Effect6484(BaseEffect):
    """
    emergencyHullEnergizer

    Used by:
    Variations of module: Capital Emergency Hull Energizer I (5 of 5)
    """

    runtime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for dmgType in ('em', 'thermal', 'kinetic', 'explosive'):
            fit.ship.multiplyItemAttr('{}DamageResonance'.format(dmgType),
                                      src.getModifiedItemAttr('hull{}DamageResonance'.format(dmgType.title())),
                                      stackingPenalties=True, penaltyGroup='postMul', **kwargs)


class Effect6485(BaseEffect):
    """
    fighterAbilityLaunchBomb

    Used by:
    Fighters from group: Heavy Fighter (16 of 34)
    """

    dealsDamage = True
    displayName = 'Bomb'
    hasCharges = True
    prefix = 'fighterAbilityLaunchBomb'
    type = 'active'


class Effect6487(BaseEffect):
    """
    modifyEnergyWarfareResistance

    Used by:
    Modules from group: Capacitor Battery (30 of 30)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('energyWarfareResistance',
                               module.getModifiedItemAttr('energyWarfareResistanceBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6488(BaseEffect):
    """
    scriptSensorBoosterSensorStrengthBonusBonus

    Used by:
    Charges from group: Sensor Booster Script (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'):
            module.boostItemAttr('scan{}StrengthPercent'.format(scanType),
                                 module.getModifiedChargeAttr('sensorStrengthBonusBonus'), **kwargs)


class Effect6501(BaseEffect):
    """
    shipBonusDreadnoughtA1DamageBonus

    Used by:
    Ship: Revelation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtA1'), skill='Amarr Dreadnought', **kwargs)


class Effect6502(BaseEffect):
    """
    shipBonusDreadnoughtA2ArmorResists

    Used by:
    Ship: Revelation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtA2'),
                               skill='Amarr Dreadnought', **kwargs)
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtA2'),
                               skill='Amarr Dreadnought', **kwargs)
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtA2'),
                               skill='Amarr Dreadnought', **kwargs)
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtA2'),
                               skill='Amarr Dreadnought', **kwargs)


class Effect6503(BaseEffect):
    """
    shipBonusDreadnoughtA3CapNeed

    Used by:
    Ship: Revelation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtA3'), skill='Amarr Dreadnought', **kwargs)


class Effect6504(BaseEffect):
    """
    shipBonusDreadnoughtC1DamageBonus

    Used by:
    Ship: Phoenix
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for attrName in ('emDamage', 'thermalDamage', 'kineticDamage', 'explosiveDamage'):
            fit.modules.filteredChargeBoost(lambda mod: (mod.charge.requiresSkill('XL Torpedoes') or
                                                         mod.charge.requiresSkill('XL Cruise Missiles') or
                                                         mod.charge.requiresSkill('Torpedoes')), attrName,
                                            src.getModifiedItemAttr('shipBonusDreadnoughtC1'),
                                            skill='Caldari Dreadnought', **kwargs)


class Effect6505(BaseEffect):
    """
    shipBonusDreadnoughtC2ShieldResists

    Used by:
    Variations of ship: Phoenix (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtC2'),
                               skill='Caldari Dreadnought', **kwargs)
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtC2'),
                               skill='Caldari Dreadnought', **kwargs)
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtC2'),
                               skill='Caldari Dreadnought', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusDreadnoughtC2'),
                               skill='Caldari Dreadnought', **kwargs)


class Effect6506(BaseEffect):
    """
    shipBonusDreadnoughtG1DamageBonus

    Used by:
    Ship: Moros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)


class Effect6507(BaseEffect):
    """
    shipBonusDreadnoughtG2ROFBonus

    Used by:
    Variations of ship: Moros (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG2'), skill='Gallente Dreadnought', **kwargs)


class Effect6508(BaseEffect):
    """
    shipBonusDreadnoughtG3RepairTime

    Used by:
    Ship: Moros
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'), 'duration',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG3'), skill='Gallente Dreadnought', **kwargs)


class Effect6509(BaseEffect):
    """
    shipBonusDreadnoughtM1DamageBonus

    Used by:
    Ship: Naglfar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Projectile Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtM1'), skill='Minmatar Dreadnought', **kwargs)


class Effect6510(BaseEffect):
    """
    shipBonusDreadnoughtM2ROFBonus

    Used by:
    Ship: Naglfar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Projectile Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtM2'), skill='Minmatar Dreadnought', **kwargs)


class Effect6511(BaseEffect):
    """
    shipBonusDreadnoughtM3RepairTime

    Used by:
    Ship: Naglfar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'), 'duration',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtM2'), skill='Minmatar Dreadnought', **kwargs)


class Effect6513(BaseEffect):
    """
    doomsdayAOEECM

    Used by:
    Module: ECM Jammer Burst Projector
    Structure Module: Standup ECM Jammer Burst Projector
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        strength = module.getModifiedItemAttr('scan{0}StrengthBonus'.format(fit.scanType))
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6526(BaseEffect):
    """
    shipBonusForceAuxiliaryA1RemoteRepairAndCapAmount

    Used by:
    Ship: Apostle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Capacitor Emission Systems'),
                                      'powerTransferAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryA1'),
                                      skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryA1'),
                                      skill='Amarr Carrier', **kwargs)


class Effect6527(BaseEffect):
    """
    shipBonusForceAuxiliaryA2ArmorResists

    Used by:
    Ship: Apostle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryA2'),
                               skill='Amarr Carrier', **kwargs)


class Effect6533(BaseEffect):
    """
    shipBonusForceAuxiliaryA4WarfareLinksBonus

    Used by:
    Ship: Apostle
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command') or
                                                  mod.item.requiresSkill('Information Command'),
                                      'warfareBuff4Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryA4'),
                                      skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command') or
                                                  mod.item.requiresSkill('Information Command'),
                                      'warfareBuff3Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryA4'),
                                      skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command') or
                                                  mod.item.requiresSkill('Information Command'),
                                      'warfareBuff1Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryA4'),
                                      skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command') or
                                                  mod.item.requiresSkill('Information Command'),
                                      'buffDuration', src.getModifiedItemAttr('shipBonusForceAuxiliaryA4'),
                                      skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command') or
                                                  mod.item.requiresSkill('Information Command'),
                                      'warfareBuff2Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryA4'),
                                      skill='Amarr Carrier', **kwargs)


class Effect6534(BaseEffect):
    """
    shipBonusForceAuxiliaryM4WarfareLinksBonus

    Used by:
    Ship: Lif
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusForceAuxiliaryM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryM4'), skill='Minmatar Carrier', **kwargs)


class Effect6535(BaseEffect):
    """
    shipBonusForceAuxiliaryG4WarfareLinksBonus

    Used by:
    Ship: Ninazu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusForceAuxiliaryG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryG4'), skill='Gallente Carrier', **kwargs)


class Effect6536(BaseEffect):
    """
    shipBonusForceAuxiliaryC4WarfareLinksBonus

    Used by:
    Ship: Minokawa
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusForceAuxiliaryC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusForceAuxiliaryC4'), skill='Caldari Carrier', **kwargs)


class Effect6537(BaseEffect):
    """
    shipBonusRole1CommandBurstCPUBonus

    Used by:
    Ships from group: Force Auxiliary (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'cpu',
                                      src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6545(BaseEffect):
    """
    shipBonusForceAuxiliaryC1RemoteBoostAndCapAmount

    Used by:
    Ship: Minokawa
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        if src.getModifiedItemAttr('shipBonusForceAuxiliaryC1') is None:
            return  # See GH Issue 1321

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Capacitor Emission Systems'),
                                      'powerTransferAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryC1'),
                                      skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'),
                                      'shieldBonus', src.getModifiedItemAttr('shipBonusForceAuxiliaryC1'),
                                      skill='Caldari Carrier', **kwargs)


class Effect6546(BaseEffect):
    """
    shipBonusForceAuxiliaryC2ShieldResists

    Used by:
    Variations of ship: Minokawa (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusForceAuxiliaryC2'),
                               skill='Caldari Carrier', **kwargs)


class Effect6548(BaseEffect):
    """
    shipBonusForceAuxiliaryG1RemoteCycleTime

    Used by:
    Ship: Ninazu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Capital Remote Armor Repair Systems') or mod.item.requiresSkill('Capital Shield Emission Systems'),
            'duration', src.getModifiedItemAttr('shipBonusForceAuxiliaryG1'), skill='Gallente Carrier', **kwargs)


class Effect6549(BaseEffect):
    """
    shipBonusForceAuxiliaryG2LocalRepairAmount

    Used by:
    Ship: Ninazu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'), 'armorDamageAmount',
                                      src.getModifiedItemAttr('shipBonusForceAuxiliaryG2'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'), 'armorDamageAmount',
                                      src.getModifiedItemAttr('shipBonusForceAuxiliaryG2'), skill='Gallente Carrier', **kwargs)


class Effect6551(BaseEffect):
    """
    shipBonusForceAuxiliaryM1RemoteDuration

    Used by:
    Ship: Lif
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems') or mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
            'duration', src.getModifiedItemAttr('shipBonusForceAuxiliaryM1'), skill='Minmatar Carrier', **kwargs)


class Effect6552(BaseEffect):
    """
    shipBonusForceAuxiliaryM2LocalBoostAmount

    Used by:
    Ship: Lif
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'), 'shieldBonus',
                                      src.getModifiedItemAttr('shipBonusForceAuxiliaryM2'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'), 'shieldBonus',
                                      src.getModifiedItemAttr('shipBonusForceAuxiliaryM2'), skill='Minmatar Carrier', **kwargs)


class Effect6555(BaseEffect):
    """
    moduleBonusDroneNavigationComputer

    Used by:
    Modules from group: Drone Navigation Computer (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxVelocity',
                                     src.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)


class Effect6556(BaseEffect):
    """
    moduleBonusDroneDamageAmplifier

    Used by:
    Modules from group: Drone Damage Modules (11 of 11)
    Modules named like: C3 'Hivaa Saitsuo' Ballistic Control System (2 of 2)
    Module: Abyssal Ballistic Control System
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('droneDamageBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('droneDamageBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('droneDamageBonus'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('droneDamageBonus'), stackingPenalties=True, **kwargs)


class Effect6557(BaseEffect):
    """
    moduleBonusOmnidirectionalTrackingLink

    Used by:
    Modules from group: Drone Tracking Modules (10 of 10)
    """

    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretRangeFalloff', src.getModifiedItemAttr('falloffBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionVelocity',
                                       src.getModifiedItemAttr('aoeVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'trackingSpeed',
                                     src.getModifiedItemAttr('trackingSpeedBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionRadius',
                                       src.getModifiedItemAttr('aoeCloudSizeBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretTrackingSpeed',
                                       src.getModifiedItemAttr('trackingSpeedBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionRadius',
                                       src.getModifiedItemAttr('aoeCloudSizeBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesRange',
                                       src.getModifiedItemAttr('maxRangeBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileRangeOptimal', src.getModifiedItemAttr('maxRangeBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'falloff',
                                     src.getModifiedItemAttr('falloffBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionVelocity',
                                       src.getModifiedItemAttr('aoeVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileRangeFalloff', src.getModifiedItemAttr('falloffBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxRange',
                                     src.getModifiedItemAttr('maxRangeBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretRangeOptimal', src.getModifiedItemAttr('maxRangeBonus'),
                                       stackingPenalties=True, **kwargs)


class Effect6558(BaseEffect):
    """
    moduleBonusOmnidirectionalTrackingLinkOverload

    Used by:
    Modules from group: Drone Tracking Modules (10 of 10)
    """

    type = 'overheat'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        overloadBonus = module.getModifiedItemAttr('overloadTrackingModuleStrengthBonus')
        module.boostItemAttr('maxRangeBonus', overloadBonus, **kwargs)
        module.boostItemAttr('falloffBonus', overloadBonus, **kwargs)
        module.boostItemAttr('trackingSpeedBonus', overloadBonus, **kwargs)
        module.boostItemAttr('aoeCloudSizeBonus', overloadBonus, **kwargs)
        module.boostItemAttr('aoeVelocityBonus', overloadBonus, **kwargs)


class Effect6559(BaseEffect):
    """
    moduleBonusOmnidirectionalTrackingEnhancer

    Used by:
    Modules from group: Drone Tracking Enhancer (10 of 10)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionRadius',
                                       src.getModifiedItemAttr('aoeCloudSizeBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileRangeOptimal', src.getModifiedItemAttr('maxRangeBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretRangeFalloff', src.getModifiedItemAttr('falloffBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionRadius',
                                       src.getModifiedItemAttr('aoeCloudSizeBonus'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'falloff',
                                     src.getModifiedItemAttr('falloffBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileRangeFalloff', src.getModifiedItemAttr('falloffBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretTrackingSpeed',
                                       src.getModifiedItemAttr('trackingSpeedBonus'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxRange',
                                     src.getModifiedItemAttr('maxRangeBonus'), stackingPenalties=True, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'trackingSpeed',
                                     src.getModifiedItemAttr('trackingSpeedBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretRangeOptimal', src.getModifiedItemAttr('maxRangeBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionVelocity',
                                       src.getModifiedItemAttr('aoeVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionVelocity',
                                       src.getModifiedItemAttr('aoeVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesRange',
                                       src.getModifiedItemAttr('maxRangeBonus'), stackingPenalties=True, **kwargs)


class Effect6560(BaseEffect):
    """
    skillBonusFighters

    Used by:
    Skill: Fighters
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6561(BaseEffect):
    """
    skillBonusLightFighters

    Used by:
    Skill: Light Fighters
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Light Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('maxVelocityBonus') * lvl, **kwargs)


class Effect6562(BaseEffect):
    """
    skillBonusSupportFightersShield

    Used by:
    Skill: Support Fighters
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('shieldBonus') * lvl, **kwargs)


class Effect6563(BaseEffect):
    """
    skillBonusHeavyFighters

    Used by:
    Skill: Heavy Fighters
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Heavy Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Heavy Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Heavy Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6565(BaseEffect):
    """
    citadelRigBonus

    Used by:
    Structures from group: Citadel (9 of 9)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):

        for attr in [
            'structureRigDoomsdayDamageLossTargetBonus',
            'structureRigScanResBonus',
            'structureRigPDRangeBonus',
            'structureRigPDCapUseBonus',
            'structureRigMissileExploVeloBonus',
            'structureRigMissileVelocityBonus',
            'structureRigEwarOptimalBonus',
            'structureRigEwarFalloffBonus',
            'structureRigEwarCapUseBonus',
            'structureRigMissileExplosionRadiusBonus'
        ]:
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Jury Rigging'),
                                      attr, src.getModifiedItemAttr('structureRoleBonus'), **kwargs)


class Effect6566(BaseEffect):
    """
    moduleBonusFighterSupportUnit

    Used by:
    Modules from group: Fighter Support Unit (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('fighterBonusShieldCapacityPercent'), **kwargs)
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('fighterBonusVelocityPercent'), stackingPenalties=True, penaltyGroup='postMul', **kwargs)
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDuration',
                                       src.getModifiedItemAttr('fighterBonusROFPercent'), stackingPenalties=True, penaltyGroup='postMul', **kwargs)
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityAttackTurretDuration',
                                       src.getModifiedItemAttr('fighterBonusROFPercent'), stackingPenalties=True, penaltyGroup='postMul', **kwargs)
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesDuration',
                                       src.getModifiedItemAttr('fighterBonusROFPercent'), stackingPenalties=True, penaltyGroup='postMul', **kwargs)
        fit.fighters.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldRechargeRate',
                                       src.getModifiedItemAttr('fighterBonusShieldRechargePercent'), **kwargs)


class Effect6567(BaseEffect):
    """
    moduleBonusNetworkedSensorArray

    Used by:
    Module: Networked Sensor Array
    """

    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('scanResolution', src.getModifiedItemAttr('scanResolutionBonus'), stackingPenalties=True, **kwargs)

        for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'):
            attr = 'scan{}Strength'.format(scanType)
            bonus = src.getModifiedItemAttr('scan{}StrengthPercent'.format(scanType))
            fit.ship.boostItemAttr(attr, bonus, stackingPenalties=True, **kwargs)
            fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), attr, bonus,
                                           stackingPenalties=True, **kwargs)

        # EW cap need increase
        groups = [
            'Burst Jammer',
            'Weapon Disruptor',
            'ECM',
            'Stasis Grappler',
            'Sensor Dampener',
            'Target Painter']

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or
                                                  mod.item.requiresSkill('Propulsion Jamming'),
                                      'capacitorNeed', src.getModifiedItemAttr('ewCapacitorNeedBonus'), **kwargs)


class Effect6570(BaseEffect):
    """
    skillBonusFighterHangarManagement

    Used by:
    Skill: Fighter Hangar Management
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.ship.boostItemAttr('fighterCapacity', src.getModifiedItemAttr('skillBonusFighterHangarSize') * lvl, **kwargs)


class Effect6571(BaseEffect):
    """
    skillBonusCapitalAutocannonSpecialization

    Used by:
    Skill: Capital Autocannon Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Autocannon Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6572(BaseEffect):
    """
    skillBonusCapitalArtillerySpecialization

    Used by:
    Skill: Capital Artillery Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Artillery Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6573(BaseEffect):
    """
    skillBonusCapitalBlasterSpecialization

    Used by:
    Skill: Capital Blaster Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Blaster Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6574(BaseEffect):
    """
    skillBonusCapitalRailgunSpecialization

    Used by:
    Skill: Capital Railgun Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Railgun Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6575(BaseEffect):
    """
    skillBonusCapitalPulseLaserSpecialization

    Used by:
    Skill: Capital Pulse Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Pulse Laser Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6576(BaseEffect):
    """
    skillBonusCapitalBeamLaserSpecialization

    Used by:
    Skill: Capital Beam Laser Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Beam Laser Specialization'),
                                      'damageMultiplier', src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)


class Effect6577(BaseEffect):
    """
    skillBonusXLCruiseMissileSpecialization

    Used by:
    Skill: XL Cruise Missile Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missile Specialization'), 'speed',
                                      src.getModifiedItemAttr('rofBonus') * lvl, **kwargs)


class Effect6578(BaseEffect):
    """
    skillBonusXLTorpedoSpecialization

    Used by:
    Skill: XL Torpedo Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('XL Torpedo Specialization'), 'speed',
                                      src.getModifiedItemAttr('rofBonus') * lvl, **kwargs)


class Effect6580(BaseEffect):
    """
    shipBonusRole2LogisticDroneRepAmountBonus

    Used by:
    Ships from group: Force Auxiliary (5 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'), 'structureDamageAmount',
                                     src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'), 'armorDamageAmount',
                                     src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'), 'shieldBonus',
                                     src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect6581(BaseEffect):
    """
    moduleBonusTriageModule

    Used by:
    Variations of module: Triage Module I (2 of 2)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        # Remote effect bonuses (duration / amount / range / falloff)
        for skill, amtAttr, stack in (
                ('Capital Remote Armor Repair Systems', 'armorDamageAmount', True),
                ('Capital Shield Emission Systems', 'shieldBonus', True),
                ('Capital Capacitor Emission Systems', 'powerTransferAmount', False),
                ('Capital Remote Hull Repair Systems', 'structureDamageAmount', False)):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), 'duration',
                                          src.getModifiedItemAttr('siegeRemoteLogisticsDurationBonus'), **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), amtAttr,
                                          src.getModifiedItemAttr('siegeRemoteLogisticsAmountBonus'),
                                          stackingPenalties=stack, **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), 'maxRange',
                                          src.getModifiedItemAttr('siegeRemoteLogisticsRangeBonus'), stackingPenalties=True, **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), 'falloffEffectiveness',
                                          src.getModifiedItemAttr('siegeRemoteLogisticsRangeBonus'), stackingPenalties=True, **kwargs)

        # Local armor/shield rep effects (duration / amount)
        for skill, amtAttr in (
                ('Capital Shield Operation', 'shieldBonus'),
                ('Capital Repair Systems', 'armorDamageAmount')):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), 'duration',
                                          src.getModifiedItemAttr('siegeLocalLogisticsDurationBonus'), **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), amtAttr,
                                          src.getModifiedItemAttr('siegeLocalLogisticsAmountBonus'),
                                          stackingPenalties=True, **kwargs)

        # Speed bonus
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('speedFactor'), stackingPenalties=True, **kwargs)

        # Scan resolution multiplier
        fit.ship.multiplyItemAttr('scanResolution', src.getModifiedItemAttr('scanResolutionMultiplier'),
                                  stackingPenalties=True, **kwargs)

        # Mass multiplier
        fit.ship.multiplyItemAttr('mass', src.getModifiedItemAttr('siegeMassMultiplier'), stackingPenalties=True, **kwargs)

        # Max locked targets
        fit.ship.increaseItemAttr('maxLockedTargets', src.getModifiedItemAttr('maxLockedTargetsBonus'), **kwargs)

        # EW cap need increase
        groups = [
            'Burst Jammer',
            'Weapon Disruptor',
            'ECM',
            'Stasis Grappler',
            'Sensor Dampener',
            'Target Painter']

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or
                                                  mod.item.requiresSkill('Propulsion Jamming'),
                                      'capacitorNeed', src.getModifiedItemAttr('ewCapacitorNeedBonus'), **kwargs)

        # todo: test for April 2016 release
        # Block EWAR & projected effects
        fit.ship.forceItemAttr('disallowOffensiveModifiers', src.getModifiedItemAttr('disallowOffensiveModifiers'), **kwargs)
        fit.ship.forceItemAttr('disallowAssistance', src.getModifiedItemAttr('disallowAssistance'), **kwargs)

        # new in April 2016 release
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('droneDamageBonus'), stackingPenalties=True, **kwargs)

        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)
        fit.ship.boostItemAttr('sensorDampenerResistance', src.getModifiedItemAttr('sensorDampenerResistanceBonus'), **kwargs)
        fit.ship.boostItemAttr('remoteAssistanceImpedance', src.getModifiedItemAttr('remoteAssistanceImpedanceBonus'), **kwargs)
        fit.ship.boostItemAttr('remoteRepairImpedance', src.getModifiedItemAttr('remoteRepairImpedanceBonus'), **kwargs)

        fit.ship.forceItemAttr('disallowTethering', src.getModifiedItemAttr('disallowTethering'), **kwargs)
        fit.ship.forceItemAttr('disallowDocking', src.getModifiedItemAttr('disallowDocking'), **kwargs)


class Effect6582(BaseEffect):
    """
    moduleBonusSiegeModule

    Used by:
    Variations of module: Siege Module I (2 of 2)
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        # Turrets
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret') or
                                                  mod.item.requiresSkill('Capital Hybrid Turret') or
                                                  mod.item.requiresSkill('Capital Projectile Turret') or
                                                  mod.item.requiresSkill('Capital Precursor Weapon'),
                                      'damageMultiplier', src.getModifiedItemAttr('siegeTurretDamageBonus'), **kwargs)

        # Missiles
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes') or
                                                        mod.charge.requiresSkill('XL Cruise Missiles') or
                                                        mod.charge.requiresSkill('Torpedoes'),
                                            '%sDamage' % type, src.getModifiedItemAttr('siegeMissileDamageBonus'), **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes') or
                                                  mod.item.requiresSkill('XL Cruise Missiles'),
                                      'speed', src.getModifiedItemAttr('siegeLauncherROFBonus'), **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Torpedo',
                                      'speed', src.getModifiedItemAttr('siegeHAWMissileROFBonus'),
                                      stackingPenalties=True, penaltyGroup='postPercent', **kwargs)

        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
                                        'maxVelocity', src.getModifiedItemAttr('siegeTorpedoVelocityBonus'),
                                        stackingPenalties=True, **kwargs)

        # Tank
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation') or
                                                  mod.item.requiresSkill('Capital Repair Systems'),
                                      'duration', src.getModifiedItemAttr('siegeLocalLogisticsDurationBonus'), **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Operation'),
                                      'shieldBonus', src.getModifiedItemAttr('siegeLocalLogisticsAmountBonus'),
                                      stackingPenalties=True, **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('siegeLocalLogisticsAmountBonus'),
                                      stackingPenalties=True, **kwargs)

        # Mobility & safety penalties
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('speedFactor'), **kwargs)
        fit.ship.multiplyItemAttr('mass', src.getModifiedItemAttr('siegeMassMultiplier'),
                                  stackingPenalties=True, penaltyGroup='postMul', **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)
        fit.ship.forceItemAttr('disallowDocking', src.getModifiedItemAttr('disallowDocking'), **kwargs)
        fit.ship.forceItemAttr('disallowTethering', src.getModifiedItemAttr('disallowTethering'), **kwargs)

        # Ewar and assistance resistances
        fit.ship.boostItemAttr('remoteRepairImpedance', src.getModifiedItemAttr('remoteRepairImpedanceBonus'), **kwargs)
        fit.ship.boostItemAttr('sensorDampenerResistance', src.getModifiedItemAttr('sensorDampenerResistanceBonus'), **kwargs)
        fit.ship.boostItemAttr('remoteAssistanceImpedance', src.getModifiedItemAttr('remoteAssistanceImpedanceBonus'), **kwargs)
        fit.ship.boostItemAttr('weaponDisruptionResistance', src.getModifiedItemAttr('weaponDisruptionResistanceBonus'), **kwargs)


class Effect6591(BaseEffect):
    """
    shipBonusSupercarrierA3WarpStrength

    Used by:
    Ship: Aeon
    Ship: Revenant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusSupercarrierA3'),
                                  skill='Amarr Carrier', **kwargs)


class Effect6592(BaseEffect):
    """
    shipBonusSupercarrierC3WarpStrength

    Used by:
    Ship: Revenant
    Ship: Wyvern
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusSupercarrierC3'),
                                  skill='Caldari Carrier', **kwargs)


class Effect6593(BaseEffect):
    """
    shipBonusSupercarrierG3WarpStrength

    Used by:
    Variations of ship: Nyx (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusSupercarrierG3'),
                                  skill='Gallente Carrier', **kwargs)


class Effect6594(BaseEffect):
    """
    shipBonusSupercarrierM3WarpStrength

    Used by:
    Ship: Hel
    Ship: Vendetta
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusSupercarrierM3'),
                                  skill='Minmatar Carrier', **kwargs)


class Effect6595(BaseEffect):
    """
    shipBonusCarrierA4WarfareLinksBonus

    Used by:
    Ship: Archon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusCarrierA4'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusCarrierA4'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusCarrierA4'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusCarrierA4'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusCarrierA4'), skill='Amarr Carrier', **kwargs)


class Effect6596(BaseEffect):
    """
    shipBonusCarrierC4WarfareLinksBonus

    Used by:
    Ship: Chimera
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusCarrierC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusCarrierC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusCarrierC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusCarrierC4'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusCarrierC4'), skill='Caldari Carrier', **kwargs)


class Effect6597(BaseEffect):
    """
    shipBonusCarrierG4WarfareLinksBonus

    Used by:
    Ship: Thanatos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusCarrierG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusCarrierG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusCarrierG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusCarrierG4'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusCarrierG4'), skill='Gallente Carrier', **kwargs)


class Effect6598(BaseEffect):
    """
    shipBonusCarrierM4WarfareLinksBonus

    Used by:
    Ship: Nidhoggur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusCarrierM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusCarrierM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusCarrierM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusCarrierM4'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusCarrierM4'), skill='Minmatar Carrier', **kwargs)


class Effect6599(BaseEffect):
    """
    shipBonusCarrierA1ArmorResists

    Used by:
    Ship: Archon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusCarrierA1'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusCarrierA1'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusCarrierA1'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusCarrierA1'),
                               skill='Amarr Carrier', **kwargs)


class Effect6600(BaseEffect):
    """
    shipBonusCarrierC1ShieldResists

    Used by:
    Ship: Chimera
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusCarrierC1'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusCarrierC1'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusCarrierC1'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusCarrierC1'),
                               skill='Caldari Carrier', **kwargs)


class Effect6601(BaseEffect):
    """
    shipBonusCarrierG1FighterDamage

    Used by:
    Ship: Thanatos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierG1'), skill='Gallente Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierG1'), skill='Gallente Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierG1'), skill='Gallente Carrier', **kwargs)


class Effect6602(BaseEffect):
    """
    shipBonusCarrierM1FighterDamage

    Used by:
    Ship: Nidhoggur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierM1'), skill='Minmatar Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierM1'), skill='Minmatar Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusCarrierM1'), skill='Minmatar Carrier', **kwargs)


class Effect6603(BaseEffect):
    """
    shipBonusSupercarrierA1FighterDamage

    Used by:
    Ship: Aeon
    Ship: Revenant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA1'), skill='Amarr Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA1'), skill='Amarr Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA1'), skill='Amarr Carrier', **kwargs)


class Effect6604(BaseEffect):
    """
    shipBonusSupercarrierC1FighterDamage

    Used by:
    Ship: Revenant
    Ship: Wyvern
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierC1'), skill='Caldari Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierC1'), skill='Caldari Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierC1'), skill='Caldari Carrier', **kwargs)


class Effect6605(BaseEffect):
    """
    shipBonusSupercarrierG1FighterDamage

    Used by:
    Variations of ship: Nyx (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierG1'), skill='Gallente Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierG1'), skill='Gallente Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierG1'), skill='Gallente Carrier', **kwargs)


class Effect6606(BaseEffect):
    """
    shipBonusSupercarrierM1FighterDamage

    Used by:
    Ship: Hel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierM1'), skill='Minmatar Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierM1'), skill='Minmatar Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusSupercarrierM1'), skill='Minmatar Carrier', **kwargs)


class Effect6607(BaseEffect):
    """
    shipBonusSupercarrierA5WarfareLinksBonus

    Used by:
    Ship: Aeon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusSupercarrierA5'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusSupercarrierA5'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusSupercarrierA5'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusSupercarrierA5'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Armored Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusSupercarrierA5'), skill='Amarr Carrier', **kwargs)


class Effect6608(BaseEffect):
    """
    shipBonusSupercarrierC5WarfareLinksBonus

    Used by:
    Ship: Wyvern
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusSupercarrierC5'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusSupercarrierC5'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusSupercarrierC5'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusSupercarrierC5'), skill='Caldari Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Command') or mod.item.requiresSkill('Information Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusSupercarrierC5'), skill='Caldari Carrier', **kwargs)


class Effect6609(BaseEffect):
    """
    shipBonusSupercarrierG5WarfareLinksBonus

    Used by:
    Ship: Nyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusSupercarrierG5'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusSupercarrierG5'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusSupercarrierG5'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusSupercarrierG5'), skill='Gallente Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Armored Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusSupercarrierG5'), skill='Gallente Carrier', **kwargs)


class Effect6610(BaseEffect):
    """
    shipBonusSupercarrierM5WarfareLinksBonus

    Used by:
    Ship: Hel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff4Value', src.getModifiedItemAttr('shipBonusSupercarrierM5'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff1Value', src.getModifiedItemAttr('shipBonusSupercarrierM5'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff3Value', src.getModifiedItemAttr('shipBonusSupercarrierM5'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'buffDuration', src.getModifiedItemAttr('shipBonusSupercarrierM5'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Skirmish Command') or mod.item.requiresSkill('Shield Command'),
            'warfareBuff2Value', src.getModifiedItemAttr('shipBonusSupercarrierM5'), skill='Minmatar Carrier', **kwargs)


class Effect6611(BaseEffect):
    """
    shipBonusSupercarrierC2AfterburnerBonus

    Used by:
    Ship: Revenant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'), 'speedFactor',
                                      src.getModifiedItemAttr('shipBonusSupercarrierC2'), skill='Caldari Carrier', **kwargs)


class Effect6612(BaseEffect):
    """
    shipBonusSupercarrierA2FighterApplicationBonus

    Used by:
    Ship: Revenant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionVelocity',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA2'), skill='Amarr Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionVelocity',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA2'), skill='Amarr Carrier', **kwargs)


class Effect6613(BaseEffect):
    """
    shipBonusSupercarrierRole1NumWarfareLinks

    Used by:
    Ships from group: Supercarrier (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6614(BaseEffect):
    """
    shipBonusSupercarrierRole2ArmorShieldModuleBonus

    Used by:
    Ships from group: Supercarrier (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'armorHPBonusAdd',
                                      src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Upgrades'), 'capacityBonus',
                                      src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect6615(BaseEffect):
    """
    shipBonusSupercarrierA4BurstProjectorBonus

    Used by:
    Ship: Aeon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation'),
                                      'durationWeaponDisruptionBurstProjector',
                                      src.getModifiedItemAttr('shipBonusSupercarrierA4'), skill='Amarr Carrier', **kwargs)


class Effect6616(BaseEffect):
    """
    shipBonusSupercarrierC4BurstProjectorBonus

    Used by:
    Ship: Wyvern
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation'),
                                      'durationECMJammerBurstProjector', src.getModifiedItemAttr('shipBonusSupercarrierC4'),
                                      skill='Caldari Carrier', **kwargs)


class Effect6617(BaseEffect):
    """
    shipBonusSupercarrierG4BurstProjectorBonus

    Used by:
    Ship: Nyx
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation'),
                                      'durationSensorDampeningBurstProjector',
                                      src.getModifiedItemAttr('shipBonusSupercarrierG4'), skill='Gallente Carrier', **kwargs)


class Effect6618(BaseEffect):
    """
    shipBonusSupercarrierM4BurstProjectorBonus

    Used by:
    Ship: Hel
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation'),
                                      'durationTargetIlluminationBurstProjector',
                                      src.getModifiedItemAttr('shipBonusSupercarrierM4'), skill='Minmatar Carrier', **kwargs)


class Effect6619(BaseEffect):
    """
    shipBonusCarrierRole1NumWarfareLinks

    Used by:
    Ships from group: Carrier (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6620(BaseEffect):
    """
    shipBonusDreadnoughtC3ReloadBonus

    Used by:
    Ship: Phoenix
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'), 'reloadTime',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtC3'), skill='Caldari Dreadnought', **kwargs)


class Effect6621(BaseEffect):
    """
    shipBonusSupercarrierA2ArmorResists

    Used by:
    Ship: Aeon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierA2'),
                               skill='Amarr Carrier', **kwargs)
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierA2'),
                               skill='Amarr Carrier', **kwargs)


class Effect6622(BaseEffect):
    """
    shipBonusSupercarrierC2ShieldResists

    Used by:
    Ship: Wyvern
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierC2'),
                               skill='Caldari Carrier', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusSupercarrierC2'),
                               skill='Caldari Carrier', **kwargs)


class Effect6623(BaseEffect):
    """
    shipBonusSupercarrierG2FighterHitpoints

    Used by:
    Variations of ship: Nyx (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('shipBonusSupercarrierG2'), skill='Gallente Carrier', **kwargs)


class Effect6624(BaseEffect):
    """
    shipBonusSupercarrierM2FighterVelocity

    Used by:
    Ship: Hel
    Ship: Vendetta
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('shipBonusSupercarrierM2'), skill='Minmatar Carrier', **kwargs)


class Effect6625(BaseEffect):
    """
    shipBonusCarrierA2SupportFighterBonus

    Used by:
    Ship: Archon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'), 'fighterSquadronOrbitRange',
                                       src.getModifiedItemAttr('shipBonusCarrierA2'), skill='Amarr Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'),
                                       'fighterAbilityEnergyNeutralizerOptimalRange',
                                       src.getModifiedItemAttr('shipBonusCarrierA2'), skill='Amarr Carrier', **kwargs)


class Effect6626(BaseEffect):
    """
    shipBonusCarrierC2SupportFighterBonus

    Used by:
    Ship: Chimera
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'), 'fighterSquadronOrbitRange',
                                       src.getModifiedItemAttr('shipBonusCarrierC2'), skill='Caldari Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'),
                                       'fighterAbilityECMRangeOptimal', src.getModifiedItemAttr('shipBonusCarrierC2'),
                                       skill='Caldari Carrier', **kwargs)


class Effect6627(BaseEffect):
    """
    shipBonusCarrierG2SupportFighterBonus

    Used by:
    Ship: Thanatos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'), 'fighterSquadronOrbitRange',
                                       src.getModifiedItemAttr('shipBonusCarrierG2'), skill='Gallente Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'),
                                       'fighterAbilityWarpDisruptionRange', src.getModifiedItemAttr('shipBonusCarrierG2'),
                                       skill='Gallente Carrier', **kwargs)


class Effect6628(BaseEffect):
    """
    shipBonusCarrierM2SupportFighterBonus

    Used by:
    Ship: Nidhoggur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'), 'fighterSquadronOrbitRange',
                                       src.getModifiedItemAttr('shipBonusCarrierM2'), skill='Minmatar Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Support Fighters'),
                                       'fighterAbilityStasisWebifierOptimalRange',
                                       src.getModifiedItemAttr('shipBonusCarrierM2'), skill='Minmatar Carrier', **kwargs)


class Effect6629(BaseEffect):
    """
    scriptResistanceBonusBonus

    Used by:
    Charges named like: Resistance Script (8 of 8)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('emDamageResistanceBonus', src.getModifiedChargeAttr('emDamageResistanceBonusBonus'), **kwargs)
        src.boostItemAttr('explosiveDamageResistanceBonus',
                          src.getModifiedChargeAttr('explosiveDamageResistanceBonusBonus'), **kwargs)
        src.boostItemAttr('kineticDamageResistanceBonus', src.getModifiedChargeAttr('kineticDamageResistanceBonusBonus'), **kwargs)
        src.boostItemAttr('thermalDamageResistanceBonus', src.getModifiedChargeAttr('thermalDamageResistanceBonusBonus'), **kwargs)


class Effect6634(BaseEffect):
    """
    shipBonusTitanA1DamageBonus

    Used by:
    Ship: Avatar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusTitanA1'), skill='Amarr Titan', **kwargs)


class Effect6635(BaseEffect):
    """
    shipBonusTitanC1KinDamageBonus

    Used by:
    Ship: Leviathan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)


class Effect6636(BaseEffect):
    """
    shipBonusTitanG1DamageBonus

    Used by:
    Ship: Erebus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)


class Effect6637(BaseEffect):
    """
    shipBonusTitanM1DamageBonus

    Used by:
    Ship: Ragnarok
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Projectile Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusTitanM1'), skill='Minmatar Titan', **kwargs)


class Effect6638(BaseEffect):
    """
    shipBonusTitanC2ROFBonus

    Used by:
    Variations of ship: Leviathan (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher XL Cruise', 'speed',
                                      src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Torpedo', 'speed',
                                      src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher XL Torpedo', 'speed',
                                      src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)


class Effect6639(BaseEffect):
    """
    shipBonusSupercarrierA4FighterApplicationBonus

    Used by:
    Ship: Revenant
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesExplosionRadius',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA4'), skill='Amarr Carrier', **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileExplosionRadius',
                                       src.getModifiedItemAttr('shipBonusSupercarrierA4'), skill='Amarr Carrier', **kwargs)


class Effect6640(BaseEffect):
    """
    shipBonusRole1NumWarfareLinks

    Used by:
    Ships from group: Titan (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6641(BaseEffect):
    """
    shipBonusRole2ArmorPlates&ShieldExtendersBonus

    Used by:
    Ships from group: Titan (7 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'armorHPBonusAdd',
                                      src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Upgrades'), 'capacityBonus',
                                      src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect6642(BaseEffect):
    """
    skillBonusDoomsdayRapidFiring

    Used by:
    Skill: Doomsday Rapid Firing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Doomsday Operation'), 'duration',
                                      src.getModifiedItemAttr('rofBonus') * lvl, **kwargs)


class Effect6647(BaseEffect):
    """
    shipBonusTitanA3WarpStrength

    Used by:
    Variations of ship: Avatar (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusTitanA3'), skill='Amarr Titan', **kwargs)


class Effect6648(BaseEffect):
    """
    shipBonusTitanC3WarpStrength

    Used by:
    Variations of ship: Leviathan (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusTitanC3'), skill='Caldari Titan', **kwargs)


class Effect6649(BaseEffect):
    """
    shipBonusTitanG3WarpStrength

    Used by:
    Variations of ship: Erebus (2 of 2)
    Ship: Komodo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusTitanG3'), skill='Gallente Titan', **kwargs)


class Effect6650(BaseEffect):
    """
    shipBonusTitanM3WarpStrength

    Used by:
    Ships from group: Titan (3 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('shipBonusTitanM3'), skill='Minmatar Titan', **kwargs)


class Effect6651(BaseEffect):
    """
    shipModuleAncillaryRemoteArmorRepairer

    Used by:
    Modules from group: Ancillary Remote Armor Repairer (4 of 4)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        if module.charge and module.charge.name == 'Nanite Repair Paste':
            multiplier = 3
        else:
            multiplier = 1
        amount = module.getModifiedItemAttr('armorDamageAmount') * multiplier
        amount *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        speed = module.getModifiedItemAttr('duration') / 1000.0
        rps = amount / speed
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rps, **kwargs)


class Effect6652(BaseEffect):
    """
    shipModuleAncillaryRemoteShieldBooster

    Used by:
    Modules from group: Ancillary Remote Shield Booster (4 of 4)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        amount = module.getModifiedItemAttr('shieldBonus')
        amount *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        speed = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('shieldRepair', amount / speed, **kwargs)


class Effect6653(BaseEffect):
    """
    shipBonusTitanA2CapNeed

    Used by:
    Ship: Avatar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'), 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusTitanA2'), skill='Amarr Titan', **kwargs)


class Effect6654(BaseEffect):
    """
    shipBonusTitanG2ROFBonus

    Used by:
    Variations of ship: Erebus (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)


class Effect6655(BaseEffect):
    """
    shipBonusTitanM2ROFBonus

    Used by:
    Ship: Ragnarok
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Projectile Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusTitanM2'), skill='Minmatar Titan', **kwargs)


class Effect6656(BaseEffect):
    """
    shipBonusRole3XLTorpdeoVelocityBonus

    Used by:
    Variations of ship: Leviathan (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'maxVelocity',
                                        src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect6657(BaseEffect):
    """
    shipBonusTitanC5AllDamageBonus

    Used by:
    Ship: Leviathan
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Torpedoes'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)


class Effect6658(BaseEffect):
    """
    moduleBonusBastionModule

    Used by:
    Module: Bastion Module I
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        # Resistances
        for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):
            for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'):
                bonus = '%s%sDamageResonance' % (attrPrefix, damageType)
                bonus = '%s%s' % (bonus[0].lower(), bonus[1:])
                booster = '%s%sDamageResonance' % (layer, damageType)
                penalize = False if layer == 'hull' else True
                fit.ship.multiplyItemAttr(bonus, src.getModifiedItemAttr(booster),
                                          stackingPenalties=penalize, penaltyGroup='preMul', **kwargs)

        # Turrets
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret') or
                                                  mod.item.requiresSkill('Large Hybrid Turret') or
                                                  mod.item.requiresSkill('Large Projectile Turret'),
                                      'maxRange', src.getModifiedItemAttr('maxRangeBonus'),
                                      stackingPenalties=True, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret') or
                                                  mod.item.requiresSkill('Large Hybrid Turret') or
                                                  mod.item.requiresSkill('Large Projectile Turret'),
                                      'falloff', src.getModifiedItemAttr('falloffBonus'),
                                      stackingPenalties=True, **kwargs)

        # Missiles
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes') or
                                                    mod.charge.requiresSkill('Cruise Missiles') or
                                                    mod.charge.requiresSkill('Heavy Missiles'),
                                        'maxVelocity', src.getModifiedItemAttr('missileVelocityBonus'), **kwargs)

        # Tanking
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('armorDamageAmountBonus'),
                                      stackingPenalties=True, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', src.getModifiedItemAttr('shieldBoostMultiplier'),
                                      stackingPenalties=True, **kwargs)

        # Speed penalty
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('speedFactor'), **kwargs)

        # @todo: test these for April 2016 release
        # Max locked targets
        fit.ship.forceItemAttr('maxLockedTargets', src.getModifiedItemAttr('maxLockedTargets'), **kwargs)

        # new with April 2016 release
        for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'):
            fit.ship.boostItemAttr('scan{}Strength'.format(scanType),
                                   src.getModifiedItemAttr('scan{}StrengthPercent'.format(scanType)),
                                   stackingPenalties=True, **kwargs)

        fit.ship.boostItemAttr('remoteRepairImpedance', src.getModifiedItemAttr('remoteRepairImpedanceBonus'), **kwargs)
        fit.ship.boostItemAttr('remoteAssistanceImpedance', src.getModifiedItemAttr('remoteAssistanceImpedanceBonus'), **kwargs)
        fit.ship.boostItemAttr('sensorDampenerResistance', src.getModifiedItemAttr('sensorDampenerResistanceBonus'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Micro Jump Drive Operation'),
                                         'activationBlocked', src.getModifiedItemAttr('activationBlockedStrenght'), **kwargs)
        fit.ship.boostItemAttr('targetPainterResistance', src.getModifiedItemAttr('targetPainterResistanceBonus'), **kwargs)
        fit.ship.boostItemAttr('weaponDisruptionResistance', src.getModifiedItemAttr('weaponDisruptionResistanceBonus'), **kwargs)
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('siegeModeWarpStatus'), **kwargs)

        fit.ship.forceItemAttr('disallowDocking', src.getModifiedItemAttr('disallowDocking'), **kwargs)
        fit.ship.forceItemAttr('disallowTethering', src.getModifiedItemAttr('disallowTethering'), **kwargs)


class Effect6661(BaseEffect):
    """
    shipBonusCarrierM3FighterVelocity

    Used by:
    Ship: Nidhoggur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('shipBonusCarrierM3'), skill='Minmatar Carrier', **kwargs)


class Effect6662(BaseEffect):
    """
    shipBonusCarrierG3FighterHitpoints

    Used by:
    Ship: Thanatos
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('shipBonusCarrierG3'), skill='Gallente Carrier', **kwargs)


class Effect6663(BaseEffect):
    """
    skillBonusDroneInterfacing

    Used by:
    Skill: Drone Interfacing
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('damageMultiplierBonus') * lvl, **kwargs)
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'), 'miningDroneAmountPercent',
                                     src.getModifiedItemAttr('miningAmountBonus') * lvl, **kwargs)


class Effect6664(BaseEffect):
    """
    skillBonusDroneSharpshooting

    Used by:
    Implants named like: Black Market 'Valdimar' Drone Sharpshooting DS (3 of 3)
    Skill: Drone Sharpshooting
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Drones'), 'maxRange',
            src.getModifiedItemAttr('rangeSkillBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesRange',
            src.getModifiedItemAttr('rangeSkillBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityAttackTurretRangeOptimal',
            src.getModifiedItemAttr('rangeSkillBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityAttackMissileRangeOptimal',
            src.getModifiedItemAttr('rangeSkillBonus') * lvl, **kwargs)


class Effect6665(BaseEffect):
    """
    skillBonusDroneDurability

    Used by:
    Implants named like: Black Market 'Valdimar' Drone Durability DD (3 of 3)
    Skill: Drone Durability
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'hp',
                                     src.getModifiedItemAttr('hullHpBonus') * lvl, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorHP',
                                     src.getModifiedItemAttr('armorHpBonus') * lvl, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldCapacity',
                                     src.getModifiedItemAttr('shieldCapacityBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('shieldCapacityBonus') * lvl, **kwargs)


class Effect6667(BaseEffect):
    """
    skillBonusDroneNavigation

    Used by:
    Implants named like: Black Market 'Valdimar' Drone Navigation DN (3 of 3)
    Skill: Drone Navigation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxVelocity',
                                     src.getModifiedItemAttr('maxVelocityBonus') * lvl, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('maxVelocityBonus') * lvl, **kwargs)


class Effect6669(BaseEffect):
    """
    moduleBonusCapitalDroneDurabilityEnhancer

    Used by:
    Variations of module: Capital Drone Durability Enhancer I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorHP',
                                     src.getModifiedItemAttr('hullHpBonus'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'hp',
                                     src.getModifiedItemAttr('hullHpBonus'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldCapacity',
                                     src.getModifiedItemAttr('hullHpBonus'), **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('hullHpBonus'), **kwargs)
        fit.ship.boostItemAttr('cpuOutput', src.getModifiedItemAttr('drawback'), **kwargs)


class Effect6670(BaseEffect):
    """
    moduleBonusCapitalDroneScopeChip

    Used by:
    Variations of module: Capital Drone Scope Chip I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxRange',
                                     src.getModifiedItemAttr('rangeSkillBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesRange',
                                       src.getModifiedItemAttr('rangeSkillBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackTurretRangeOptimal', src.getModifiedItemAttr('rangeSkillBonus'),
                                       stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'),
                                       'fighterAbilityAttackMissileRangeOptimal',
                                       src.getModifiedItemAttr('rangeSkillBonus'), stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('cpuOutput', src.getModifiedItemAttr('drawback'), **kwargs)


class Effect6671(BaseEffect):
    """
    moduleBonusCapitalDroneSpeedAugmentor

    Used by:
    Variations of module: Capital Drone Speed Augmentor I (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'maxVelocity',
                                     src.getModifiedItemAttr('droneMaxVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'maxVelocity',
                                       src.getModifiedItemAttr('droneMaxVelocityBonus'), stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('cpuOutput', src.getModifiedItemAttr('drawback'), **kwargs)


class Effect6672(BaseEffect):
    """
    structureCombatRigSecurityModification

    Used by:
    Items from market group: Structure Modifications > Structure Combat Rigs (32 of 34)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        secMap = {
            FitSystemSecurity.HISEC: 'hiSecModifier',
            FitSystemSecurity.LOWSEC: 'lowSecModifier',
            FitSystemSecurity.NULLSEC: 'nullSecModifier',
            FitSystemSecurity.WSPACE: 'nullSecModifier'}
        fitSec = fit.getSystemSecurity()
        attrName = secMap[fitSec]
        secModifier = module.getModifiedItemAttr(attrName)
        module.multiplyItemAttr('structureRigDoomsdayDamageLossTargetBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigScanResBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigPDRangeBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigPDCapUseBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigMissileExploVeloBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigMissileVelocityBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigEwarOptimalBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigEwarFalloffBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigEwarCapUseBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigMissileExplosionRadiusBonus', secModifier, **kwargs)
        module.multiplyItemAttr('structureRigMaxTargetRangeBonus', secModifier, **kwargs)


class Effect6679(BaseEffect):
    """
    skillStructureDoomsdayDurationBonus

    Used by:
    Skill: Structure Doomsday Operation
    """

    type = 'passive', 'structure'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Doomsday Weapon',
                                      'duration', src.getModifiedItemAttr('durationBonus'),
                                      skill='Structure Doomsday Operation', **kwargs)


class Effect6681(BaseEffect):
    """
    shipBonusRole3NumWarfareLinks

    Used by:
    Ships from group: Force Auxiliary (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('shipBonusRole3'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect6682(BaseEffect):
    """
    structureModuleEffectStasisWebifier

    Used by:
    Structure Modules from group: Structure Stasis Webifier (2 of 2)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        speedBoost = module.getModifiedItemAttr('speedFactor')
        speedBoost *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('maxVelocity', speedBoost, stackingPenalties=True, **kwargs)


class Effect6683(BaseEffect):
    """
    structureModuleEffectTargetPainter

    Used by:
    Variations of structure module: Standup Target Painter I (2 of 2)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        appliedBoost = container.getModifiedItemAttr('signatureRadiusBonus')
        appliedBoost *= calculateRangeFactor(
            srcOptimalRange=container.getModifiedItemAttr('maxRange'),
            srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('signatureRadius', appliedBoost, stackingPenalties=True, **kwargs)


class Effect6684(BaseEffect):
    """
    structureModuleEffectRemoteSensorDampener

    Used by:
    Variations of structure module: Standup Remote Sensor Dampener I (2 of 2)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('maxTargetRangeBonus') * rangeFactor,
                               stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('scanResolution', module.getModifiedItemAttr('scanResolutionBonus') * rangeFactor,
                               stackingPenalties=True, **kwargs)


class Effect6685(BaseEffect):
    """
    structureModuleEffectECM

    Used by:
    Structure Modules from group: Structure ECM Battery (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        strength = module.getModifiedItemAttr('scan{0}StrengthBonus'.format(fit.scanType))
        strength *= calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6686(BaseEffect):
    """
    structureModuleEffectWeaponDisruption

    Used by:
    Variations of structure module: Standup Weapon Disruptor I (2 of 2)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        rangeFactor = calculateRangeFactor(
            srcOptimalRange=module.getModifiedItemAttr('maxRange'),
            srcFalloffRange=module.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        for srcAttr, tgtAttr in (
            ('aoeCloudSizeBonus', 'aoeCloudSize'),
            ('aoeVelocityBonus', 'aoeVelocity'),
            ('missileVelocityBonus', 'maxVelocity'),
            ('explosionDelayBonus', 'explosionDelay')
        ):
            fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                            tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                            stackingPenalties=True, **kwargs)
        for srcAttr, tgtAttr in (
            ('trackingSpeedBonus', 'trackingSpeed'),
            ('maxRangeBonus', 'maxRange'),
            ('falloffBonus', 'falloff')
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          tgtAttr, module.getModifiedItemAttr(srcAttr) * rangeFactor,
                                          stackingPenalties=True, **kwargs)


class Effect6687(BaseEffect):
    """
    npcEntityRemoteArmorRepairer

    Used by:
    Drones named like: Armor Maintenance Bot (6 of 6)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        if container.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        bonus = container.getModifiedItemAttr('armorDamageAmount')
        duration = container.getModifiedItemAttr('duration') / 1000.0
        rps = bonus / duration
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rps, **kwargs)


class Effect6688(BaseEffect):
    """
    npcEntityRemoteShieldBooster

    Used by:
    Drones named like: Shield Maintenance Bot (6 of 6)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        if container.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        bonus = container.getModifiedItemAttr('shieldBonus')
        duration = container.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('shieldRepair', bonus / duration, **kwargs)


class Effect6689(BaseEffect):
    """
    npcEntityRemoteHullRepairer

    Used by:
    Drones named like: Hull Maintenance Bot (6 of 6)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        bonus = module.getModifiedItemAttr('structureDamageAmount')
        duration = module.getModifiedItemAttr('duration') / 1000.0
        fit.extraAttributes.increase('hullRepair', bonus / duration, **kwargs)


class Effect6690(BaseEffect):
    """
    remoteWebifierEntity

    Used by:
    Drones from group: Stasis Webifying Drone (3 of 3)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.boostItemAttr('maxVelocity', module.getModifiedItemAttr('speedFactor'),
                               stackingPenalties=True, **kwargs)


class Effect6691(BaseEffect):
    """
    entityEnergyNeutralizerFalloff

    Used by:
    Drones from group: Energy Neutralizer Drone (3 of 3)
    """

    type = 'active', 'projected'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if not ((hasattr(src, 'state') and src.state >= FittingModuleState.ACTIVE) or hasattr(src, 'amountActive')):
            return
        if src.getModifiedItemAttr('energyNeutralizerRangeOptimal', 0) < (projectionRange or 0):
            return
        amount = src.getModifiedItemAttr('energyNeutralizerAmount')
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        time = src.getModifiedItemAttr('energyNeutralizerDuration')
        fit.addDrain(src, time, amount, 0)


class Effect6692(BaseEffect):
    """
    remoteTargetPaintEntity

    Used by:
    Drones named like: TP (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if container.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.boostItemAttr('signatureRadius', container.getModifiedItemAttr('signatureRadiusBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6693(BaseEffect):
    """
    remoteSensorDampEntity

    Used by:
    Drones named like: SD (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if container.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        fit.ship.boostItemAttr('maxTargetRange', container.getModifiedItemAttr('maxTargetRangeBonus'),
                               stackingPenalties=True, **kwargs)
        fit.ship.boostItemAttr('scanResolution', container.getModifiedItemAttr('scanResolutionBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6694(BaseEffect):
    """
    npcEntityWeaponDisruptor

    Used by:
    Drones named like: TD (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if container.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0):
            return
        for srcAttr, tgtAttr in (
            ('trackingSpeedBonus', 'trackingSpeed'),
            ('maxRangeBonus', 'maxRange'),
            ('falloffBonus', 'falloff')
        ):
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Gunnery'),
                                          tgtAttr, container.getModifiedItemAttr(srcAttr),
                                          stackingPenalties=True, **kwargs)


class Effect6695(BaseEffect):
    """
    entityECMFalloff

    Used by:
    Drones named like: EC (3 of 3)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if container.getModifiedItemAttr('ECMRangeOptimal', 0) < (projectionRange or 0):
            return
        strength = container.getModifiedItemAttr('scan{0}StrengthBonus'.format(fit.scanType))
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6697(BaseEffect):
    """
    rigDrawbackReductionArmor

    Used by:
    Skill: Armor Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Armor', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Resource Processing', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6698(BaseEffect):
    """
    rigDrawbackReductionAstronautics

    Used by:
    Skill: Astronautics Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Navigation', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Anchor', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6699(BaseEffect):
    """
    rigDrawbackReductionDrones

    Used by:
    Skill: Drones Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Drones', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6700(BaseEffect):
    """
    rigDrawbackReductionElectronic

    Used by:
    Skill: Electronic Superiority Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Electronic Systems', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Scanning', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Targeting', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6701(BaseEffect):
    """
    rigDrawbackReductionProjectile

    Used by:
    Skill: Projectile Weapon Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Projectile Weapon', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6702(BaseEffect):
    """
    rigDrawbackReductionEnergyWeapon

    Used by:
    Skill: Energy Weapon Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Energy Weapon', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6703(BaseEffect):
    """
    rigDrawbackReductionHybrid

    Used by:
    Skill: Hybrid Weapon Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Hybrid Weapon', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6704(BaseEffect):
    """
    rigDrawbackReductionLauncher

    Used by:
    Skill: Launcher Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Launcher', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6705(BaseEffect):
    """
    rigDrawbackReductionShield

    Used by:
    Skill: Shield Rigging
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Rig Shield', 'drawback',
                                      src.getModifiedItemAttr('rigDrawbackBonus') * lvl, **kwargs)


class Effect6706(BaseEffect):
    """
    setBonusAsklepian

    Used by:
    Implants named like: grade Asklepian (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Cybernetics'),
                                                 'armorRepairBonus', src.getModifiedItemAttr('implantSetSerpentis2'), **kwargs)


class Effect6708(BaseEffect):
    """
    armorRepairAmountBonusSubcap

    Used by:
    Implants named like: grade Asklepian (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('armorRepairBonus'), **kwargs)


class Effect6709(BaseEffect):
    """
    shipBonusRole1CapitalHybridDamageBonus

    Used by:
    Ship: Vehement
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6710(BaseEffect):
    """
    shipBonusDreadnoughtM1WebStrengthBonus

    Used by:
    Ship: Vehement
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'speedFactor',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtM1'), skill='Minmatar Dreadnought', **kwargs)


class Effect6711(BaseEffect):
    """
    shipBonusRole3CapitalHybridDamageBonus

    Used by:
    Ship: Vanquisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect6712(BaseEffect):
    """
    shipBonusTitanM1WebStrengthBonus

    Used by:
    Ship: Vanquisher
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'speedFactor',
                                      src.getModifiedItemAttr('shipBonusTitanM1'), skill='Minmatar Titan', **kwargs)


class Effect6713(BaseEffect):
    """
    shipBonusSupercarrierM1BurstProjectorWebBonus

    Used by:
    Ship: Vendetta
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Burst Projector Operation'), 'speedFactor',
                                      src.getModifiedItemAttr('shipBonusSupercarrierM1'), skill='Minmatar Carrier', **kwargs)


class Effect6714(BaseEffect):
    """
    ECMBurstJammer

    Used by:
    Modules from group: Burst Jammer (11 of 11)
    """

    type = 'projected', 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowOffensiveModifiers'):
            return
        if module.getModifiedItemAttr('ecmBurstRange', 0) < (projectionRange or 0):
            return
        strength = module.getModifiedItemAttr('scan{0}StrengthBonus'.format(fit.scanType))
        if 'effect' in kwargs:
            from eos.modifiedAttributeDict import ModifiedAttributeDict
            strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect'])
        chanceModifier = 1 - min(1, strength / fit.scanStrength)
        fit.ecmProjectedStr *= chanceModifier


class Effect6717(BaseEffect):
    """
    roleBonusIceOreMiningDurationCap

    Used by:
    Variations of ship: Covetor (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'), 'capacitorNeed',
                                      src.getModifiedItemAttr('miningDurationRoleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'), 'duration',
                                      src.getModifiedItemAttr('miningDurationRoleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'duration',
                                      src.getModifiedItemAttr('miningDurationRoleBonus'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'capacitorNeed',
                                      src.getModifiedItemAttr('miningDurationRoleBonus'), **kwargs)


class Effect6720(BaseEffect):
    """
    shipBonusDroneRepairMC1

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldBonus',
                                     src.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'structureDamageAmount',
                                     src.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorDamageAmount',
                                     src.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)


class Effect6721(BaseEffect):
    """
    eliteBonusLogisticRemoteArmorRepairOptimalFalloff1

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'falloffEffectiveness',
                                      src.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'maxRange',
                                      src.getModifiedItemAttr('eliteBonusLogistics1'),
                                      skill='Logistics Cruisers', **kwargs)


class Effect6722(BaseEffect):
    """
    roleBonusRemoteArmorRepairOptimalFalloff

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'falloffEffectiveness',
                                      src.getModifiedItemAttr('roleBonusRepairRange'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'maxRange',
                                      src.getModifiedItemAttr('roleBonusRepairRange'), **kwargs)


class Effect6723(BaseEffect):
    """
    shipBonusCloakCpuMC2

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cloaking'), 'cpu',
                                      src.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)


class Effect6724(BaseEffect):
    """
    eliteBonusLogisticRemoteArmorRepairDuration3

    Used by:
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'duration',
                                      src.getModifiedItemAttr('eliteBonusLogistics3'), skill='Logistics Cruisers', **kwargs)


class Effect6725(BaseEffect):
    """
    shipBonusSETFalloffAF2

    Used by:
    Ship: Caedes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'), 'falloff',
                                      src.getModifiedItemAttr('shipBonus2AF'), skill='Amarr Frigate', **kwargs)


class Effect6726(BaseEffect):
    """
    shipBonusCloakCpuMF1

    Used by:
    Ship: Caedes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Cloaking'), 'cpu',
                                      src.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect6727(BaseEffect):
    """
    eliteBonusCoverOpsNOSNeutFalloff1

    Used by:
    Ship: Caedes
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Energy Nosferatu', 'Energy Neutralizer'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('eliteBonusCovertOps1'),
                                      stackingPenalties=True, skill='Covert Ops', **kwargs)


class Effect6730(BaseEffect):
    """
    moduleBonusMicrowarpdrive

    Used by:
    Modules from group: Propulsion Module (68 of 133)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('mass', module.getModifiedItemAttr('massAddition'), **kwargs)
        speedBoost = module.getModifiedItemAttr('speedFactor')
        mass = fit.ship.getModifiedItemAttr('mass')
        thrust = module.getModifiedItemAttr('speedBoostFactor')
        fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass, **kwargs)
        fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'),
                               stackingPenalties=True, **kwargs)


class Effect6731(BaseEffect):
    """
    moduleBonusAfterburner

    Used by:
    Modules from group: Propulsion Module (65 of 133)
    """

    runTime = 'late'
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('mass', module.getModifiedItemAttr('massAddition'), **kwargs)
        speedBoost = module.getModifiedItemAttr('speedFactor')
        mass = fit.ship.getModifiedItemAttr('mass')
        thrust = module.getModifiedItemAttr('speedBoostFactor')
        fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass, **kwargs)


class Effect6732(BaseEffect):
    """
    moduleBonusWarfareLinkArmor

    Used by:
    Variations of module: Armor Command Burst I (2 of 2)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedChargeAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedChargeAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6733(BaseEffect):
    """
    moduleBonusWarfareLinkShield

    Used by:
    Variations of module: Shield Command Burst I (2 of 2)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedChargeAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedChargeAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6734(BaseEffect):
    """
    moduleBonusWarfareLinkSkirmish

    Used by:
    Variations of module: Skirmish Command Burst I (2 of 2)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedChargeAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedChargeAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6735(BaseEffect):
    """
    moduleBonusWarfareLinkInfo

    Used by:
    Variations of module: Information Command Burst I (2 of 2)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedChargeAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedChargeAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6736(BaseEffect):
    """
    moduleBonusWarfareLinkMining

    Used by:
    Variations of module: Mining Foreman Burst I (2 of 2)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedChargeAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedChargeAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6737(BaseEffect):
    """
    chargeBonusWarfareCharge

    Used by:
    Items from market group: Ammunition & Charges > Command Burst Charges (15 of 15)
    """

    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 4):
            value = module.getModifiedChargeAttr('warfareBuff{}Multiplier'.format(x))
            module.multiplyItemAttr('warfareBuff{}Value'.format(x), value, **kwargs)


class Effect6753(BaseEffect):
    """
    moduleTitanEffectGenerator

    Used by:
    Modules from group: Titan Phenomena Generator (4 of 4)
    """

    type = 'active', 'gang'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if module.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = module.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = module.getModifiedItemAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, module, kwargs['effect'])


class Effect6762(BaseEffect):
    """
    miningDroneSpecBonus

    Used by:
    Skill: Mining Drone Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Drone Specialization'), 'miningAmount',
                                     src.getModifiedItemAttr('miningAmountBonus') * lvl, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Drone Specialization'), 'maxVelocity',
                                     src.getModifiedItemAttr('maxVelocityBonus') * lvl, **kwargs)


class Effect6763(BaseEffect):
    """
    iceHarvestingDroneOperationDurationBonus

    Used by:
    Modules named like: Drone Mining Augmentor (8 of 8)
    Skill: Ice Harvesting Drone Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level if 'skill' in context else 1
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting Drone Operation'), 'duration', src.getModifiedItemAttr('rofBonus') * lvl, **kwargs)


class Effect6764(BaseEffect):
    """
    iceHarvestingDroneSpecBonus

    Used by:
    Skill: Ice Harvesting Drone Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting Drone Specialization'), 'duration',
                                     src.getModifiedItemAttr('rofBonus') * lvl, **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting Drone Specialization'),
                                     'maxVelocity', src.getModifiedItemAttr('maxVelocityBonus') * lvl, **kwargs)


class Effect6765(BaseEffect):
    """
    spatialPhenomenaGenerationDurationBonus

    Used by:
    Skill: Spatial Phenomena Generation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Spatial Phenomena Generation'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6766(BaseEffect):
    """
    commandProcessorEffect

    Used by:
    Modules named like: Command Processor I (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupActive',
                                         src.getModifiedItemAttr('maxGangModules'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Leadership'), 'maxGroupOnline',
                                         src.getModifiedItemAttr('maxGangModules'), **kwargs)


class Effect6769(BaseEffect):
    """
    commandBurstAoEBonus

    Used by:
    Skill: Fleet Command
    Skill: Leadership
    Skill: Wing Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'maxRange',
                                      src.getModifiedItemAttr('areaOfEffectBonus') * src.level, **kwargs)


class Effect6770(BaseEffect):
    """
    armoredCommandDurationBonus

    Used by:
    Skill: Armored Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6771(BaseEffect):
    """
    shieldCommandDurationBonus

    Used by:
    Skill: Shield Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6772(BaseEffect):
    """
    informationCommandDurationBonus

    Used by:
    Skill: Information Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6773(BaseEffect):
    """
    skirmishCommandDurationBonus

    Used by:
    Skill: Skirmish Command
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6774(BaseEffect):
    """
    miningForemanDurationBonus

    Used by:
    Skill: Mining Foreman
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6776(BaseEffect):
    """
    armoredCommandStrengthBonus

    Used by:
    Skill: Armored Command Specialist
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Armored Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)


class Effect6777(BaseEffect):
    """
    shieldCommandStrengthBonus

    Used by:
    Skill: Shield Command Specialist
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)


class Effect6778(BaseEffect):
    """
    informationCommandStrengthBonus

    Used by:
    Skill: Information Command Specialist
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Information Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)


class Effect6779(BaseEffect):
    """
    skirmishCommandStrengthBonus

    Used by:
    Skill: Skirmish Command Specialist
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff3Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff4Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff1Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Skirmish Command'), 'warfareBuff2Multiplier',
                                        src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)


class Effect6780(BaseEffect):
    """
    miningForemanStrengthBonus

    Used by:
    Skill: Mining Director
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff4Value', src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff3Value', src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff2Value', src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff1Value', src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs)


class Effect6782(BaseEffect):
    """
    commandBurstReloadTimeBonus

    Used by:
    Skill: Command Burst Specialist
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'),
                                      'reloadTime',
                                      src.getModifiedItemAttr('reloadTimeBonus') * lvl, **kwargs)


class Effect6783(BaseEffect):
    """
    commandBurstAoERoleBonus

    Used by:
    Ships from group: Carrier (4 of 4)
    Ships from group: Combat Battlecruiser (14 of 14)
    Ships from group: Command Ship (8 of 8)
    Ships from group: Force Auxiliary (6 of 6)
    Ships from group: Supercarrier (6 of 6)
    Ships from group: Titan (7 of 7)
    Subsystems named like: Offensive Support Processor (4 of 4)
    Ship: Orca
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'maxRange',
                                      src.getModifiedItemAttr('roleBonusCommandBurstAoERange'), **kwargs)


class Effect6786(BaseEffect):
    """
    shieldCommandBurstBonusICS3

    Used by:
    Ship: Orca
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff4Multiplier',
                                      src.getModifiedItemAttr('shipBonusICS3'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff1Multiplier',
                                      src.getModifiedItemAttr('shipBonusICS3'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff2Multiplier',
                                      src.getModifiedItemAttr('shipBonusICS3'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff3Multiplier',
                                      src.getModifiedItemAttr('shipBonusICS3'), skill='Industrial Command Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'buffDuration',
                                      src.getModifiedItemAttr('shipBonusICS3'), skill='Industrial Command Ships', **kwargs)


class Effect6787(BaseEffect):
    """
    shipBonusDroneHPDamageMiningICS4

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier',
                                     src.getModifiedItemAttr('shipBonusICS4'),
                                     skill='Industrial Command Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity',
                                     src.getModifiedItemAttr('shipBonusICS4'),
                                     skill='Industrial Command Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP',
                                     src.getModifiedItemAttr('shipBonusICS4'),
                                     skill='Industrial Command Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp',
                                     src.getModifiedItemAttr('shipBonusICS4'),
                                     skill='Industrial Command Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount',
                                     src.getModifiedItemAttr('shipBonusICS4'),
                                     skill='Industrial Command Ships', **kwargs)


class Effect6788(BaseEffect):
    """
    shipBonusDroneIceHarvestingICS5

    Used by:
    Ships from group: Industrial Command Ship (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Ice Harvesting Drone Operation'),
                                     'duration',
                                     src.getModifiedItemAttr('shipBonusICS5'),
                                     skill='Industrial Command Ships', **kwargs)


class Effect6789(BaseEffect):
    """
    industrialBonusDroneDamage

    Used by:
    Ships from group: Blockade Runner (4 of 4)
    Ships from group: Deep Space Transport (4 of 4)
    Ships from group: Exhumer (3 of 3)
    Ships from group: Industrial (17 of 17)
    Ships from group: Industrial Command Ship (2 of 2)
    Ships from group: Mining Barge (3 of 3)
    Variations of ship: Venture (3 of 3)
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier',
                                     src.getModifiedItemAttr('industrialBonusDroneDamage'), **kwargs)


class Effect6790(BaseEffect):
    """
    shipBonusDroneIceHarvestingRole

    Used by:
    Ship: Orca
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Ice Harvesting Drone Operation'), 'duration',
                                     src.getModifiedItemAttr('roleBonusDroneIceHarvestingSpeed'), **kwargs)


class Effect6792(BaseEffect):
    """
    shipBonusDroneHPDamageMiningORECapital4

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier',
                                     src.getModifiedItemAttr('shipBonusORECapital4'),
                                     skill='Capital Industrial Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'shieldCapacity',
                                     src.getModifiedItemAttr('shipBonusORECapital4'),
                                     skill='Capital Industrial Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'armorHP',
                                     src.getModifiedItemAttr('shipBonusORECapital4'),
                                     skill='Capital Industrial Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'hp',
                                     src.getModifiedItemAttr('shipBonusORECapital4'),
                                     skill='Capital Industrial Ships', **kwargs)

        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Mining Drone Operation'),
                                     'miningAmount',
                                     src.getModifiedItemAttr('shipBonusORECapital4'),
                                     skill='Capital Industrial Ships', **kwargs)


class Effect6793(BaseEffect):
    """
    miningForemanBurstBonusORECapital2

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff1Value',
                                      src.getModifiedItemAttr('shipBonusORECapital2'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff2Value',
                                      src.getModifiedItemAttr('shipBonusORECapital2'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff4Value',
                                      src.getModifiedItemAttr('shipBonusORECapital2'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'warfareBuff3Value',
                                      src.getModifiedItemAttr('shipBonusORECapital2'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining Foreman'), 'buffDuration',
                                      src.getModifiedItemAttr('shipBonusORECapital2'), skill='Capital Industrial Ships', **kwargs)


class Effect6794(BaseEffect):
    """
    shieldCommandBurstBonusORECapital3

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff4Value',
                                      src.getModifiedItemAttr('shipBonusORECapital3'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'buffDuration',
                                      src.getModifiedItemAttr('shipBonusORECapital3'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff1Value',
                                      src.getModifiedItemAttr('shipBonusORECapital3'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff3Value',
                                      src.getModifiedItemAttr('shipBonusORECapital3'), skill='Capital Industrial Ships', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Command'), 'warfareBuff2Value',
                                      src.getModifiedItemAttr('shipBonusORECapital3'), skill='Capital Industrial Ships', **kwargs)


class Effect6795(BaseEffect):
    """
    shipBonusDroneIceHarvestingORECapital5

    Used by:
    Ship: Rorqual
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Ice Harvesting Drone Operation'),
                                     'duration',
                                     src.getModifiedItemAttr('shipBonusORECapital5'),
                                     skill='Capital Industrial Ships', **kwargs)


class Effect6796(BaseEffect):
    """
    shipModeSHTDamagePostDiv

    Used by:
    Module: Hecate Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Hybrid Turret'),
            'damageMultiplier',
            1 / module.getModifiedItemAttr('modeDamageBonusPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv', **kwargs)


class Effect6797(BaseEffect):
    """
    shipModeSPTDamagePostDiv

    Used by:
    Module: Svipul Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
            'damageMultiplier',
            1 / module.getModifiedItemAttr('modeDamageBonusPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv', **kwargs)


class Effect6798(BaseEffect):
    """
    shipModeSETDamagePostDiv

    Used by:
    Module: Confessor Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('Small Energy Turret'),
            'damageMultiplier',
            1 / module.getModifiedItemAttr('modeDamageBonusPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv', **kwargs)


class Effect6799(BaseEffect):
    """
    shipModeSmallMissileDamagePostDiv

    Used by:
    Module: Jackdaw Sharpshooter Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        types = ('thermal', 'em', 'explosive', 'kinetic')
        for type in types:
            fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Rockets') or mod.charge.requiresSkill('Light Missiles'),
                                               '{}Damage'.format(type),
                                               1 / module.getModifiedItemAttr('modeDamageBonusPostDiv'),
                                               stackingPenalties=True,
                                               penaltyGroup='postDiv', **kwargs)


class Effect6800(BaseEffect):
    """
    modeDampTDResistsPostDiv

    Used by:
    Modules named like: Sharpshooter Mode (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('weaponDisruptionResistance', 1 / module.getModifiedItemAttr('modeEwarResistancePostDiv'), **kwargs)
        fit.ship.multiplyItemAttr('sensorDampenerResistance', 1 / module.getModifiedItemAttr('modeEwarResistancePostDiv'), **kwargs)


class Effect6801(BaseEffect):
    """
    modeMWDandABBoostPostDiv

    Used by:
    Module: Confessor Propulsion Mode
    Module: Svipul Propulsion Mode
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Afterburner'),
            'speedFactor',
            1 / module.getModifiedItemAttr('modeVelocityPostDiv'),
            stackingPenalties=True,
            penaltyGroup='postDiv', **kwargs)


class Effect6807(BaseEffect):
    """
    invulnerabilityCoreDurationBonus

    Used by:
    Skill: Invulnerability Core Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        lvl = src.level
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Invulnerability Core Operation'), 'buffDuration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Invulnerability Core Operation'), 'duration',
                                      src.getModifiedItemAttr('durationBonus') * lvl, **kwargs)


class Effect6844(BaseEffect):
    """
    skillMultiplierDefenderMissileVelocity

    Used by:
    Skill: Defender Missiles
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Defender Missiles'),
                                        'maxVelocity', skill.getModifiedItemAttr('missileVelocityBonus') * skill.level, **kwargs)


class Effect6845(BaseEffect):
    """
    shipBonusCommandDestroyerRole1DefenderBonus

    Used by:
    Ships from group: Command Destroyer (4 of 5)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Defender Missiles'),
                                      'moduleReactivationDelay', ship.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6851(BaseEffect):
    """
    shipBonusRole3CapitalEnergyDamageBonus

    Used by:
    Ship: Chemosh
    Ship: Molok
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Energy Turret'), 'damageMultiplier', src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect6852(BaseEffect):
    """
    shipBonusTitanM1WebRangeBonus

    Used by:
    Ship: Molok
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', src.getModifiedItemAttr('shipBonusTitanM1'), skill='Minmatar Titan', **kwargs)


class Effect6853(BaseEffect):
    """
    shipBonusTitanA1EnergyWarfareAmountBonus

    Used by:
    Ship: Molok
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', src.getModifiedItemAttr('shipBonusTitanA1'), skill='Amarr Titan', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', src.getModifiedItemAttr('shipBonusTitanA1'), skill='Amarr Titan', **kwargs)


class Effect6855(BaseEffect):
    """
    shipBonusDreadnoughtA1EnergyWarfareAmountBonus

    Used by:
    Ship: Chemosh
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', src.getModifiedItemAttr('shipBonusDreadnoughtA1'), skill='Amarr Dreadnought', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer',
                                      'energyNeutralizerAmount', src.getModifiedItemAttr('shipBonusDreadnoughtA1'), skill='Amarr Dreadnought', **kwargs)


class Effect6856(BaseEffect):
    """
    shipBonusDreadnoughtM1WebRangeBonus

    Used by:
    Ship: Chemosh
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'maxRange', src.getModifiedItemAttr('shipBonusDreadnoughtM1'), skill='Minmatar Dreadnought', **kwargs)


class Effect6857(BaseEffect):
    """
    shipBonusForceAuxiliaryA1NosferatuRangeBonus

    Used by:
    Ship: Dagon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'maxRange', src.getModifiedItemAttr('shipBonusForceAuxiliaryA1'), skill='Amarr Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'falloffEffectiveness', src.getModifiedItemAttr('shipBonusForceAuxiliaryA1'), skill='Amarr Carrier', **kwargs)


class Effect6858(BaseEffect):
    """
    shipBonusForceAuxiliaryA1NosferatuDrainAmount

    Used by:
    Ship: Dagon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu',
                                      'powerTransferAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryA1'), skill='Amarr Carrier', **kwargs)


class Effect6859(BaseEffect):
    """
    shipBonusRole4NosferatuCPUBonus

    Used by:
    Ship: Dagon
    Ship: Rabisu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Nosferatu', 'cpu', src.getModifiedItemAttr('shipBonusRole4'), **kwargs)


class Effect6860(BaseEffect):
    """
    shipBonusRole5RemoteArmorRepairPowergridBonus

    Used by:
    Ships from group: Logistics (3 of 7)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'power',
                                      src.getModifiedItemAttr('shipBonusRole5'), **kwargs)


class Effect6861(BaseEffect):
    """
    shipBonusRole5CapitalRemoteArmorRepairPowergridBonus

    Used by:
    Ship: Dagon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Remote Armor Repair Systems'), 'power', src.getModifiedItemAttr('shipBonusRole5'), **kwargs)


class Effect6862(BaseEffect):
    """
    shipBonusForceAuxiliaryM1RemoteArmorRepairDuration

    Used by:
    Ship: Dagon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
                                      'duration', src.getModifiedItemAttr('shipBonusForceAuxiliaryM1'), skill='Minmatar Carrier', **kwargs)


class Effect6865(BaseEffect):
    """
    eliteBonusCoverOpsWarpVelocity1

    Used by:
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('eliteBonusCovertOps1'), skill='Covert Ops', **kwargs)


class Effect6866(BaseEffect):
    """
    shipBonusSmallMissileFlightTimeCF1

    Used by:
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
                                        'explosionDelay', src.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
                                        'explosionDelay', src.getModifiedItemAttr('shipBonusCF'), skill='Caldari Frigate', **kwargs)


class Effect6867(BaseEffect):
    """
    shipBonusSPTRoFMF

    Used by:
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'speed', src.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect6871(BaseEffect):
    """
    concordSecStatusTankBonus

    Used by:
    Ship: Enforcer
    Ship: Marshal
    Ship: Pacifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):

        # Get pilot sec status bonus directly here, instead of going through the intermediary effects
        # via https://forums.eveonline.com/default.aspx?g=posts&t=515826
        try:
            bonus = max(0, min(50.0, (src.owner.character.secStatus * 10)))
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            bonus = None

        if bonus is not None:
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', bonus, stackingPenalties=True, **kwargs)
            fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'shieldBonus', bonus, stackingPenalties=True, **kwargs)


class Effect6872(BaseEffect):
    """
    eliteReconStasisWebBonus1

    Used by:
    Ship: Enforcer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'maxRange', src.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect6873(BaseEffect):
    """
    eliteBonusReconWarpVelocity3

    Used by:
    Ship: Enforcer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6874(BaseEffect):
    """
    shipBonusMedMissileFlightTimeCC2

    Used by:
    Ship: Enforcer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'explosionDelay', src.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'explosionDelay', src.getModifiedItemAttr('shipBonusCC2'), skill='Caldari Cruiser', **kwargs)


class Effect6877(BaseEffect):
    """
    eliteBonusBlackOpsWarpVelocity1

    Used by:
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('eliteBonusBlackOps1'), stackingPenalties=True, skill='Black Ops', **kwargs)


class Effect6878(BaseEffect):
    """
    eliteBonusBlackOpsScramblerRange4

    Used by:
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusBlackOps4'), stackingPenalties=True, skill='Black Ops', **kwargs)


class Effect6879(BaseEffect):
    """
    eliteBonusBlackOpsWebRange3

    Used by:
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'maxRange',
                                      src.getModifiedItemAttr('eliteBonusBlackOps3'), stackingPenalties=True, skill='Black Ops', **kwargs)


class Effect6880(BaseEffect):
    """
    shipBonusLauncherRoF2CB

    Used by:
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Cruise', 'speed',
                                      src.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo', 'speed',
                                      src.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy', 'speed',
                                      src.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)


class Effect6881(BaseEffect):
    """
    shipBonusLargeMissileFlightTimeCB1

    Used by:
    Ship: Marshal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'explosionDelay',
                                        src.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'explosionDelay',
                                        src.getModifiedItemAttr('shipBonusCB'), skill='Caldari Battleship', **kwargs)


class Effect6883(BaseEffect):
    """
    shipBonusForceAuxiliaryM2LocalRepairAmount

    Used by:
    Ship: Dagon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryM2'), skill='Minmatar Carrier', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Repair Systems'),
                                      'armorDamageAmount', src.getModifiedItemAttr('shipBonusForceAuxiliaryM2'), skill='Minmatar Carrier', **kwargs)


class Effect6894(BaseEffect):
    """
    subsystemEnergyNeutFittingReduction

    Used by:
    Subsystem: Legion Core - Energy Parasitic Complex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Energy Nosferatu', 'Energy Neutralizer'),
        'cpu', src.getModifiedItemAttr('subsystemEnergyNeutFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Energy Nosferatu', 'Energy Neutralizer'),
                                      'power', src.getModifiedItemAttr('subsystemEnergyNeutFittingReduction'), **kwargs)


class Effect6895(BaseEffect):
    """
    subsystemMETFittingReduction

    Used by:
    Subsystem: Legion Offensive - Liquid Crystal Magnifiers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'cpu', src.getModifiedItemAttr('subsystemMETFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Energy Turret'),
                                      'power', src.getModifiedItemAttr('subsystemMETFittingReduction'), **kwargs)


class Effect6896(BaseEffect):
    """
    subsystemMHTFittingReduction

    Used by:
    Subsystem: Proteus Offensive - Drone Synthesis Projector
    Subsystem: Proteus Offensive - Hybrid Encoding Platform
    Subsystem: Tengu Offensive - Magnetic Infusion Basin
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'cpu', src.getModifiedItemAttr('subsystemMHTFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
                                      'power', src.getModifiedItemAttr('subsystemMHTFittingReduction'), **kwargs)


class Effect6897(BaseEffect):
    """
    subsystemMPTFittingReduction

    Used by:
    Subsystem: Loki Offensive - Projectile Scoping Array
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'power', src.getModifiedItemAttr('subsystemMPTFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Projectile Turret'),
                                      'cpu', src.getModifiedItemAttr('subsystemMPTFittingReduction'), **kwargs)


class Effect6898(BaseEffect):
    """
    subsystemMRARFittingReduction

    Used by:
    Subsystems named like: Offensive Support Processor (3 of 4)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'),
            'mediumRemoteRepFittingMultiplier', src.getModifiedItemAttr('subsystemMRARFittingReduction'), **kwargs)


class Effect6899(BaseEffect):
    """
    subsystemMRSBFittingReduction

    Used by:
    Subsystem: Loki Offensive - Support Processor
    Subsystem: Tengu Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
            'mediumRemoteRepFittingMultiplier', src.getModifiedItemAttr('subsystemMRSBFittingReduction'), **kwargs)


class Effect6900(BaseEffect):
    """
    subsystemMMissileFittingReduction

    Used by:
    Subsystem: Legion Offensive - Assault Optimization
    Subsystem: Loki Offensive - Launcher Efficiency Configuration
    Subsystem: Tengu Offensive - Accelerated Ejection Bay
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Missile Launcher Heavy', 'Missile Launcher Rapid Light', 'Missile Launcher Heavy Assault')
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'cpu', src.getModifiedItemAttr('subsystemMMissileFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
                                      'power', src.getModifiedItemAttr('subsystemMMissileFittingReduction'), **kwargs)


class Effect6908(BaseEffect):
    """
    shipBonusStrategicCruiserCaldariNaniteRepairTime2

    Used by:
    Ship: Tengu
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'moduleRepairRate',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserCaldari2'),
                                      skill='Caldari Strategic Cruiser', **kwargs)


class Effect6909(BaseEffect):
    """
    shipBonusStrategicCruiserAmarrNaniteRepairTime2

    Used by:
    Ship: Legion
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'moduleRepairRate',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserAmarr2'),
                                      skill='Amarr Strategic Cruiser', **kwargs)


class Effect6910(BaseEffect):
    """
    shipBonusStrategicCruiserGallenteNaniteRepairTime2

    Used by:
    Ship: Proteus
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'moduleRepairRate',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserGallente2'),
                                      skill='Gallente Strategic Cruiser', **kwargs)


class Effect6911(BaseEffect):
    """
    shipBonusStrategicCruiserMinmatarNaniteRepairTime2

    Used by:
    Ship: Loki
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: True, 'moduleRepairRate',
                                      ship.getModifiedItemAttr('shipBonusStrategicCruiserMinmatar2'),
                                      skill='Minmatar Strategic Cruiser', **kwargs)


class Effect6920(BaseEffect):
    """
    structureHPBonusAddPassive

    Used by:
    Subsystems named like: Defensive Covert Reconfiguration (4 of 4)
    Subsystem: Loki Defensive - Adaptive Defense Node
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('hp', module.getModifiedItemAttr('structureHPBonusAdd') or 0, **kwargs)


class Effect6921(BaseEffect):
    """
    subSystemBonusAmarrDefensive2ScanProbeStrength

    Used by:
    Subsystem: Legion Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', src.getModifiedItemAttr('subsystemBonusAmarrDefensive2'),
                                        skill='Amarr Defensive Systems', **kwargs)


class Effect6923(BaseEffect):
    """
    subsystemBonusMinmatarOffensive1HMLHAMVelo

    Used by:
    Subsystem: Loki Offensive - Launcher Efficiency Configuration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles') or mod.charge.requiresSkill('Heavy Assault Missiles'),
                                      'maxVelocity', container.getModifiedItemAttr('subsystemBonusMinmatarOffensive'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect6924(BaseEffect):
    """
    subsystemBonusMinmatarOffensive3MissileExpVelo

    Used by:
    Subsystem: Loki Offensive - Launcher Efficiency Configuration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
                                      'aoeVelocity', container.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect6925(BaseEffect):
    """
    subsystemBonusGallenteOffensive2DroneVeloTracking

    Used by:
    Subsystem: Proteus Offensive - Drone Synthesis Projector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'maxVelocity', src.getModifiedItemAttr('subsystemBonusGallenteOffensive2'),
                                     skill='Gallente Offensive Systems', **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'trackingSpeed', src.getModifiedItemAttr('subsystemBonusGallenteOffensive2'),
                                     skill='Gallente Offensive Systems', **kwargs)


class Effect6926(BaseEffect):
    """
    subsystemBonusAmarrPropulsionWarpCapacitor

    Used by:
    Subsystem: Legion Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpCapacitorNeed', src.getModifiedItemAttr('subsystemBonusAmarrPropulsion'), skill='Amarr Propulsion Systems', **kwargs)


class Effect6927(BaseEffect):
    """
    subsystemBonusMinmatarPropulsionWarpCapacitor

    Used by:
    Subsystem: Loki Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpCapacitorNeed', src.getModifiedItemAttr('subsystemBonusMinmatarPropulsion'),
                               skill='Minmatar Propulsion Systems', **kwargs)


class Effect6928(BaseEffect):
    """
    subsystemBonusCaldariPropulsion2PropModHeatBenefit

    Used by:
    Subsystem: Tengu Propulsion - Fuel Catalyst
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner') or mod.item.requiresSkill('High Speed Maneuvering'),
                                      'overloadSpeedFactorBonus', src.getModifiedItemAttr('subsystemBonusCaldariPropulsion2'),
                                      skill='Caldari Propulsion Systems', **kwargs)


class Effect6929(BaseEffect):
    """
    subsystemBonusGallentePropulsion2PropModHeatBenefit

    Used by:
    Subsystem: Proteus Propulsion - Localized Injectors
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner') or mod.item.requiresSkill('High Speed Maneuvering'),
                                      'overloadSpeedFactorBonus', src.getModifiedItemAttr('subsystemBonusGallentePropulsion2'),
                                      skill='Gallente Propulsion Systems', **kwargs)


class Effect6930(BaseEffect):
    """
    subsystemBonusAmarrCore2EnergyResistance

    Used by:
    Subsystem: Legion Core - Augmented Antimatter Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('energyWarfareResistance', src.getModifiedItemAttr('subsystemBonusAmarrCore2'), skill='Amarr Core Systems', **kwargs)


class Effect6931(BaseEffect):
    """
    subsystemBonusMinmatarCore2EnergyResistance

    Used by:
    Subsystem: Loki Core - Augmented Nuclear Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('energyWarfareResistance', src.getModifiedItemAttr('subsystemBonusMinmatarCore2'),
                               skill='Minmatar Core Systems', **kwargs)


class Effect6932(BaseEffect):
    """
    subsystemBonusGallenteCore2EnergyResistance

    Used by:
    Subsystem: Proteus Core - Augmented Fusion Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('energyWarfareResistance', src.getModifiedItemAttr('subsystemBonusGallenteCore2'),
                               skill='Gallente Core Systems', **kwargs)


class Effect6933(BaseEffect):
    """
    subsystemBonusCaldariCore2EnergyResistance

    Used by:
    Subsystem: Tengu Core - Augmented Graviton Reactor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('energyWarfareResistance', src.getModifiedItemAttr('subsystemBonusCaldariCore2'),
                               skill='Caldari Core Systems', **kwargs)


class Effect6934(BaseEffect):
    """
    shipMaxLockedTargetsBonusAddPassive

    Used by:
    Subsystems named like: Core Dissolution Sequencer (2 of 2)
    Subsystems named like: Core Electronic Efficiency Gate (2 of 2)
    Subsystems named like: Offensive Support Processor (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('maxLockedTargets', src.getModifiedItemAttr('maxLockedTargetsBonus'), **kwargs)


class Effect6935(BaseEffect):
    """
    subsystemBonusAmarrCore3EnergyWarHeatBonus

    Used by:
    Subsystem: Legion Core - Energy Parasitic Complex
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Energy Nosferatu', 'Energy Neutralizer'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusAmarrCore3'), skill='Amarr Core Systems', **kwargs)


class Effect6936(BaseEffect):
    """
    subsystemBonusMinmatarCore3StasisWebHeatBonus

    Used by:
    Subsystem: Loki Core - Immobility Drivers
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web',
                                      'overloadRangeBonus', src.getModifiedItemAttr('subsystemBonusMinmatarCore3'),
                                      skill='Minmatar Core Systems', **kwargs)


class Effect6937(BaseEffect):
    """
    subsystemBonusGallenteCore3WarpScramHeatBonus

    Used by:
    Subsystem: Proteus Core - Friction Extension Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler', 'overloadRangeBonus',
                                      src.getModifiedItemAttr('subsystemBonusGallenteCore3'), skill='Gallente Core Systems', **kwargs)


class Effect6938(BaseEffect):
    """
    subsystemBonusCaldariCore3ECMHeatBonus

    Used by:
    Subsystem: Tengu Core - Obfuscation Manifold
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'ECM', 'overloadECMStrengthBonus',
                                      src.getModifiedItemAttr('subsystemBonusCaldariCore3'), skill='Caldari Core Systems', **kwargs)


class Effect6939(BaseEffect):
    """
    subsystemBonusAmarrDefensive2HardenerHeat

    Used by:
    Subsystem: Legion Defensive - Augmented Plating
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusAmarrDefensive2'), skill='Amarr Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadHardeningBonus',
                                      src.getModifiedItemAttr('subsystemBonusAmarrDefensive2'), skill='Amarr Defensive Systems', **kwargs)


class Effect6940(BaseEffect):
    """
    subsystemBonusGallenteDefensive2HardenerHeat

    Used by:
    Subsystem: Proteus Defensive - Augmented Plating
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadHardeningBonus',
                                      src.getModifiedItemAttr('subsystemBonusGallenteDefensive2'), skill='Gallente Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusGallenteDefensive2'), skill='Gallente Defensive Systems', **kwargs)


class Effect6941(BaseEffect):
    """
    subsystemBonusCaldariDefensive2HardenerHeat

    Used by:
    Subsystem: Tengu Defensive - Supplemental Screening
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Tactical Shield Manipulation'),
                                      'overloadHardeningBonus', src.getModifiedItemAttr('subsystemBonusCaldariDefensive2'),
                                      skill='Caldari Defensive Systems', **kwargs)


class Effect6942(BaseEffect):
    """
    subsystemBonusMinmatarDefensive2HardenerHeat

    Used by:
    Subsystem: Loki Defensive - Augmented Durability
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusMinmatarDefensive2'), skill='Minmatar Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Hull Upgrades'), 'overloadHardeningBonus',
                                      src.getModifiedItemAttr('subsystemBonusMinmatarDefensive2'), skill='Minmatar Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Tactical Shield Manipulation'), 'overloadHardeningBonus',
                                      src.getModifiedItemAttr('subsystemBonusMinmatarDefensive2'), skill='Minmatar Defensive Systems', **kwargs)


class Effect6943(BaseEffect):
    """
    subsystemBonusAmarrDefensive3ArmorRepHeat

    Used by:
    Subsystem: Legion Defensive - Covert Reconfiguration
    Subsystem: Legion Defensive - Nanobot Injector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusAmarrDefensive3'),
                                      skill='Amarr Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadArmorDamageAmount', src.getModifiedItemAttr('subsystemBonusAmarrDefensive3'),
                                      skill='Amarr Defensive Systems', **kwargs)


class Effect6944(BaseEffect):
    """
    subsystemBonusGallenteDefensive3ArmorRepHeat

    Used by:
    Subsystem: Proteus Defensive - Covert Reconfiguration
    Subsystem: Proteus Defensive - Nanobot Injector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusGallenteDefensive3'),
                                      skill='Gallente Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'overloadArmorDamageAmount', src.getModifiedItemAttr('subsystemBonusGallenteDefensive3'),
                                      skill='Gallente Defensive Systems', **kwargs)


class Effect6945(BaseEffect):
    """
    subsystemBonusCaldariDefensive3ShieldBoostHeat

    Used by:
    Subsystem: Tengu Defensive - Amplification Node
    Subsystem: Tengu Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'overloadShieldBonus', src.getModifiedItemAttr('subsystemBonusCaldariDefensive3'),
                                      skill='Caldari Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Operation'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusCaldariDefensive3'),
                                      skill='Caldari Defensive Systems', **kwargs)


class Effect6946(BaseEffect):
    """
    subsystemBonusMinmatarDefensive3LocalRepHeat

    Used by:
    Subsystem: Loki Defensive - Adaptive Defense Node
    Subsystem: Loki Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems') or mod.item.requiresSkill('Shield Operation'),
                                      'overloadArmorDamageAmount', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive3'),
                                      skill='Minmatar Defensive Systems', **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems') or mod.item.requiresSkill('Shield Operation'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusMinmatarDefensive3'),
                                      skill='Minmatar Defensive Systems', **kwargs)


class Effect6947(BaseEffect):
    """
    subSystemBonusCaldariDefensive2ScanProbeStrength

    Used by:
    Subsystem: Tengu Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'),
                                        'baseSensorStrength', src.getModifiedItemAttr('subsystemBonusCaldariDefensive2'),
                                        skill='Caldari Defensive Systems', **kwargs)


class Effect6949(BaseEffect):
    """
    subSystemBonusGallenteDefensive2ScanProbeStrength

    Used by:
    Subsystem: Proteus Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'), 'baseSensorStrength',
                                        src.getModifiedItemAttr('subsystemBonusGallenteDefensive2'), skill='Gallente Defensive Systems', **kwargs)


class Effect6951(BaseEffect):
    """
    subSystemBonusMinmatarDefensive2ScanProbeStrength

    Used by:
    Subsystem: Loki Defensive - Covert Reconfiguration
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'), 'baseSensorStrength',
                                        src.getModifiedItemAttr('subsystemBonusMinmatarDefensive2'), skill='Minmatar Defensive Systems', **kwargs)


class Effect6953(BaseEffect):
    """
    mediumRemoteRepFittingAdjustment

    Used by:
    Variations of module: Medium Remote Armor Repairer I (12 of 12)
    Variations of module: Medium Remote Shield Booster I (11 of 11)
    Module: Medium Ancillary Remote Armor Repairer
    Module: Medium Ancillary Remote Shield Booster
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('power', module.getModifiedItemAttr('mediumRemoteRepFittingMultiplier'), **kwargs)
        module.multiplyItemAttr('cpu', module.getModifiedItemAttr('mediumRemoteRepFittingMultiplier'), **kwargs)


class Effect6954(BaseEffect):
    """
    subsystemBonusCommandBurstFittingReduction

    Used by:
    Subsystems named like: Offensive Support Processor (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'power',
                                      src.getModifiedItemAttr('subsystemCommandBurstFittingReduction'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'cpu',
                                      src.getModifiedItemAttr('subsystemCommandBurstFittingReduction'), **kwargs)


class Effect6955(BaseEffect):
    """
    subsystemRemoteShieldBoostFalloffBonus

    Used by:
    Subsystem: Loki Offensive - Support Processor
    Subsystem: Tengu Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Remote Shield Booster', 'Ancillary Remote Shield Booster'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('remoteShieldBoosterFalloffBonus'), **kwargs)


class Effect6956(BaseEffect):
    """
    subsystemRemoteArmorRepairerOptimalBonus

    Used by:
    Subsystems named like: Offensive Support Processor (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Remote Armor Repairer', 'Ancillary Remote Armor Repairer'),
                                      'maxRange', src.getModifiedItemAttr('remoteArmorRepairerOptimalBonus'), **kwargs)


class Effect6957(BaseEffect):
    """
    subsystemRemoteArmorRepairerFalloffBonus

    Used by:
    Subsystems named like: Offensive Support Processor (3 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Remote Armor Repairer', 'Ancillary Remote Armor Repairer'),
                                      'falloffEffectiveness', src.getModifiedItemAttr('remoteArmorRepairerFalloffBonus'), **kwargs)


class Effect6958(BaseEffect):
    """
    subsystemBonusAmarrOffensive3RemoteArmorRepairHeat

    Used by:
    Subsystem: Legion Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)


class Effect6959(BaseEffect):
    """
    subsystemBonusGallenteOffensive3RemoteArmorRepairHeat

    Used by:
    Subsystem: Proteus Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'overloadSelfDurationBonus',
                                      src.getModifiedItemAttr('subsystemBonusGallenteOffensive3'), skill='Gallente Offensive Systems', **kwargs)


class Effect6960(BaseEffect):
    """
    subsystemBonusCaldariOffensive3RemoteShieldBoosterHeat

    Used by:
    Subsystem: Tengu Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusCaldariOffensive3'),
                                      skill='Caldari Offensive Systems', **kwargs)


class Effect6961(BaseEffect):
    """
    subsystemBonusMinmatarOffensive3RemoteRepHeat

    Used by:
    Subsystem: Loki Offensive - Support Processor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'),
                                      skill='Minmatar Offensive Systems', **kwargs)


class Effect6962(BaseEffect):
    """
    subsystemBonusAmarrPropulsion2WarpSpeed

    Used by:
    Subsystem: Legion Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('subsystemBonusAmarrPropulsion2'),
                               skill='Amarr Propulsion Systems', **kwargs)


class Effect6963(BaseEffect):
    """
    subsystemBonusMinmatarPropulsion2WarpSpeed

    Used by:
    Subsystem: Loki Propulsion - Interdiction Nullifier
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('subsystemBonusMinmatarPropulsion2'),
                               skill='Minmatar Propulsion Systems', **kwargs)


class Effect6964(BaseEffect):
    """
    subsystemBonusGallentePropulsionWarpSpeed

    Used by:
    Subsystem: Proteus Propulsion - Hyperspatial Optimization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('baseWarpSpeed', module.getModifiedItemAttr('subsystemBonusGallentePropulsion'),
                               skill='Gallente Propulsion Systems', **kwargs)


class Effect6981(BaseEffect):
    """
    shipBonusTitanG1KinThermDamageBonus

    Used by:
    Ship: Komodo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)


class Effect6982(BaseEffect):
    """
    shipBonusTitanG2EMExplosiveDamageBonus

    Used by:
    Ship: Komodo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'explosiveDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'emDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'emDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'explosiveDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'emDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'explosiveDamage',
                                      src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)


class Effect6983(BaseEffect):
    """
    shipBonusTitanC1ShieldResists

    Used by:
    Ship: Komodo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)


class Effect6984(BaseEffect):
    """
    shipBonusRole4FighterDamageAndHitpoints

    Used by:
    Ship: Caiman
    Ship: Komodo
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'shieldCapacity',
                                       src.getModifiedItemAttr('shipBonusRole4'), **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityAttackTurretDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusRole4'), **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityAttackMissileDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusRole4'), **kwargs)
        fit.fighters.filteredItemBoost(lambda mod: mod.item.requiresSkill('Fighters'), 'fighterAbilityMissilesDamageMultiplier',
                                       src.getModifiedItemAttr('shipBonusRole4'), **kwargs)


class Effect6985(BaseEffect):
    """
    shipBonusDreadnoughtG1KinThermDamageBonus

    Used by:
    Ship: Caiman
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'thermalDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'kineticDamage',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)


class Effect6986(BaseEffect):
    """
    shipBonusForceAuxiliaryG1RemoteShieldBoostAmount

    Used by:
    Ship: Loggerhead
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Shield Emission Systems'), 'shieldBonus',
                                      src.getModifiedItemAttr('shipBonusForceAuxiliaryG1'), skill='Gallente Carrier', **kwargs)


class Effect6987(BaseEffect):
    """
    shipBonusRole2LogisticDroneRepAmountAndHitpointBonus

    Used by:
    Ship: Loggerhead
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'structureDamageAmount', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'shieldBonus', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'armorDamageAmount', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'armorHP', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'shieldCapacity', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Drone Operation'),
                                        'hp', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect6992(BaseEffect):
    """
    roleBonusMHTDamage1

    Used by:
    Ship: Victor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'), 'damageMultiplier', src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect6993(BaseEffect):
    """
    roleBonus2BoosterPenaltyReduction

    Used by:
    Ship: Victor
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterMissileAOECloudPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterCapacitorCapacityPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterAOEVelocityPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterArmorRepairAmountPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterMissileVelocityPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterTurretTrackingPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterShieldCapacityPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterTurretOptimalRangePenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterShieldBoostAmountPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterTurretFalloffPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterArmorHPPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)
        fit.boosters.filteredItemBoost(lambda mod: mod.item.group.name == 'Booster', 'boosterMaxVelocityPenalty', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect6994(BaseEffect):
    """
    eliteReconBonusMHTDamage1

    Used by:
    Ship: Victor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('eliteBonusReconShip1'), skill='Recon Ships', **kwargs)


class Effect6995(BaseEffect):
    """
    targetDisintegratorAttack

    Used by:
    Modules from group: Precursor Weapon (19 of 19)
    """

    dealsDamage = True
    type = 'active'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        # Set reload time to 1 second
        module.reloadTime = 1000


class Effect6996(BaseEffect):
    """
    eliteReconBonusArmorRepAmount3

    Used by:
    Ship: Victor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'), 'armorDamageAmount',
                                      src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect6997(BaseEffect):
    """
    eliteCovertOpsBonusArmorRepAmount4

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'), 'armorDamageAmount',
                                      src.getModifiedItemAttr('eliteBonusCovertOps4'), skill='Covert Ops', **kwargs)


class Effect6999(BaseEffect):
    """
    covertOpsStealthBomberSiegeMissileLauncherCPUNeedBonus

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
                                         'cpu', ship.getModifiedItemAttr('stealthBomberLauncherCPU'), **kwargs)


class Effect7000(BaseEffect):
    """
    shipBonusSHTFalloffGF1

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'), 'falloff',
                                      src.getModifiedItemAttr('shipBonusGF'), skill='Gallente Frigate', **kwargs)


class Effect7001(BaseEffect):
    """
    roleBonusTorpRoF1

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo', 'speed', src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect7002(BaseEffect):
    """
    roleBonusBombLauncherPWGCPU3

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Bomb Deployment'), 'power', src.getModifiedItemAttr('shipBonusRole3'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Bomb Deployment'), 'cpu', src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect7003(BaseEffect):
    """
    eliteBonusCovertOpsSHTDamage3

    Used by:
    Ship: Virtuoso
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('eliteBonusCovertOps3'), skill='Covert Ops', **kwargs)


class Effect7008(BaseEffect):
    """
    structureFullPowerStateHitpointModifier

    Used by:
    Items from category: Structure (17 of 17)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('shieldCapacity', src.getModifiedItemAttr('structureFullPowerStateHitpointMultiplier') or 0, **kwargs)
        fit.ship.multiplyItemAttr('armorHP', src.getModifiedItemAttr('structureFullPowerStateHitpointMultiplier') or 0, **kwargs)


class Effect7009(BaseEffect):
    """
    serviceModuleFullPowerHitpointPostAssign

    Used by:
    Structure Modules from group: Structure Citadel Service Module (2 of 2)
    Structure Modules from group: Structure Engineering Service Module (6 of 6)
    Structure Modules from group: Structure Navigation Service Module (3 of 3)
    Structure Modules from group: Structure Resource Processing Service Module (4 of 4)
    Structure Module: Standup Moon Drill I
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.forceItemAttr('structureFullPowerStateHitpointMultiplier', src.getModifiedItemAttr('serviceModuleFullPowerStateHitpointMultiplier'), **kwargs)


class Effect7012(BaseEffect):
    """
    moduleBonusAssaultDamageControl

    Used by:
    Variations of module: Assault Damage Control I (5 of 5)
    Module: Abyssal Assault Damage Control
    """

    runTime = 'early'
    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):
            for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'):
                booster = '%s%sDamageResonance' % (layer, damageType)

                src.forceItemAttr(booster, src.getModifiedItemAttr('resistanceMultiplier'), **kwargs)


class Effect7013(BaseEffect):
    """
    eliteBonusGunshipKineticMissileDamage1

    Used by:
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'kineticDamage',
                                        src.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect7014(BaseEffect):
    """
    eliteBonusGunshipThermalMissileDamage1

    Used by:
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'thermalDamage',
                                        src.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect7015(BaseEffect):
    """
    eliteBonusGunshipEMMissileDamage1

    Used by:
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'emDamage',
                                        src.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect7016(BaseEffect):
    """
    eliteBonusGunshipExplosiveMissileDamage1

    Used by:
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'explosiveDamage',
                                        src.getModifiedItemAttr('eliteBonusGunship1'), skill='Assault Frigates', **kwargs)


class Effect7017(BaseEffect):
    """
    eliteBonusGunshipExplosionVelocity2

    Used by:
    Ship: Jaguar
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'aoeVelocity',
                                        src.getModifiedItemAttr('eliteBonusGunship2'), stackingPenalties=True, skill='Assault Frigates', **kwargs)


class Effect7018(BaseEffect):
    """
    shipSETROFAF

    Used by:
    Ship: Retribution
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Energy Turret'), 'speed',
                                      src.getModifiedItemAttr('shipBonusAF'), stackingPenalties=False, skill='Amarr Frigate', **kwargs)


class Effect7020(BaseEffect):
    """
    remoteWebifierMaxRangeBonus

    Used by:
    Implants named like: Inquest 'Eros' Stasis Webifier MR (3 of 3)
    Implants named like: Inquest 'Hedone' Entanglement Optimizer WS (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Stasis Web', 'maxRange',
                                      src.getModifiedItemAttr('stasisWebRangeBonus'), stackingPenalties=False, **kwargs)


class Effect7021(BaseEffect):
    """
    structureRigMaxTargetRange

    Used by:
    Structure Modules from group: Structure Combat Rig L - Max Targets and Sensor Boosting (2 of 2)
    Structure Modules from group: Structure Combat Rig M - Boosted Sensors (2 of 2)
    Structure Modules from group: Structure Combat Rig XL - Doomsday and Targeting (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('maxTargetRange', module.getModifiedItemAttr('structureRigMaxTargetRangeBonus'), **kwargs)


class Effect7024(BaseEffect):
    """
    shipBonusDroneTrackingEliteGunship2

    Used by:
    Ship: Ishkur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'trackingSpeed',
                                     src.getModifiedItemAttr('eliteBonusGunship2'), skill='Assault Frigates', **kwargs)


class Effect7026(BaseEffect):
    """
    scriptStandupWarpScram

    Used by:
    Charge: Standup Focused Warp Scrambling Script
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        src.boostItemAttr('maxRange', src.getModifiedChargeAttr('warpScrambleRangeBonus'), **kwargs)
        src.forceItemAttr('activationBlockedStrenght', src.getModifiedChargeAttr('activationBlockedStrenght'), **kwargs)


class Effect7027(BaseEffect):
    """
    structureCapacitorCapacityBonus

    Used by:
    Structure Modules from group: Structure Capacitor Battery (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('capacitorCapacity', ship.getModifiedItemAttr('capacitorBonus'), **kwargs)


class Effect7028(BaseEffect):
    """
    structureModifyPowerRechargeRate

    Used by:
    Structure Modules from group: Structure Capacitor Power Relay (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('rechargeRate', module.getModifiedItemAttr('capacitorRechargeRateMultiplier'), **kwargs)


class Effect7029(BaseEffect):
    """
    structureArmorHPBonus

    Used by:
    Structure Modules from group: Structure Armor Reinforcer (2 of 2)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('hiddenArmorHPMultiplier', src.getModifiedItemAttr('armorHpBonus'), stackingPenalties=True, **kwargs)


class Effect7030(BaseEffect):
    """
    structureAoERoFRoleBonus

    Used by:
    Items from category: Structure (11 of 17)
    Structures from group: Citadel (8 of 9)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Guided Bomb Launcher',
                                      'speed', ship.getModifiedItemAttr('structureAoERoFRoleBonus'), **kwargs)
        for attr in ['duration', 'durationTargetIlluminationBurstProjector', 'durationWeaponDisruptionBurstProjector',
                     'durationECMJammerBurstProjector', 'durationSensorDampeningBurstProjector', 'capacitorNeed']:
            fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Structure Burst Projector',
                                          attr, ship.getModifiedItemAttr('structureAoERoFRoleBonus'), **kwargs)


class Effect7031(BaseEffect):
    """
    shipBonusHeavyMissileKineticDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7032(BaseEffect):
    """
    shipBonusHeavyMissileThermalDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7033(BaseEffect):
    """
    shipBonusHeavyMissileEMDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
                                        'emDamage', src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7034(BaseEffect):
    """
    shipBonusHeavyMissileExplosiveDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7035(BaseEffect):
    """
    shipBonusHeavyAssaultMissileExplosiveDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7036(BaseEffect):
    """
    shipBonusHeavyAssaultMissileEMDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7037(BaseEffect):
    """
    shipBonusHeavyAssaultMissileThermalDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'thermalDamage', src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7038(BaseEffect):
    """
    shipBonusHeavyAssaultMissileKineticDamageCBC2

    Used by:
    Ship: Drake Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
                                        'kineticDamage', src.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)


class Effect7039(BaseEffect):
    """
    structureHiddenMissileDamageMultiplier

    Used by:
    Items from category: Structure (14 of 17)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        groups = ('Structure Anti-Subcapital Missile', 'Structure Anti-Capital Missile')
        for dmgType in ('em', 'kinetic', 'explosive', 'thermal'):
            fit.modules.filteredChargeMultiply(lambda mod: mod.item.group.name in groups,
                                               '%sDamage' % dmgType,
                                               src.getModifiedItemAttr('hiddenMissileDamageMultiplier'), **kwargs)


class Effect7040(BaseEffect):
    """
    structureHiddenArmorHPMultiplier

    Used by:
    Items from category: Structure (17 of 17)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('armorHP', src.getModifiedItemAttr('hiddenArmorHPMultiplier') or 0, **kwargs)


class Effect7042(BaseEffect):
    """
    shipArmorHitPointsAC1

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorHP', src.getModifiedItemAttr('shipBonusAC'), skill='Amarr Cruiser', **kwargs)


class Effect7043(BaseEffect):
    """
    shipShieldHitpointsCC1

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', src.getModifiedItemAttr('shipBonusCC'), skill='Caldari Cruiser', **kwargs)


class Effect7044(BaseEffect):
    """
    shipAgilityBonusGC1

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', src.getModifiedItemAttr('shipBonusGC'), skill='Gallente Cruiser', **kwargs)


class Effect7045(BaseEffect):
    """
    shipSignatureRadiusMC1

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('signatureRadius', src.getModifiedItemAttr('shipBonusMC'), skill='Minmatar Cruiser', **kwargs)


class Effect7046(BaseEffect):
    """
    eliteBonusFlagCruiserAllResistances1

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('explosiveDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('shieldKineticDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('shieldExplosiveDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('armorThermalDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('thermalDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('shieldEmDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('armorEmDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('shieldThermalDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('kineticDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('armorKineticDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)
        fit.ship.boostItemAttr('emDamageResonance', src.getModifiedItemAttr('eliteBonusFlagCruisers1'), skill='Flag Cruisers', **kwargs)


class Effect7047(BaseEffect):
    """
    roleBonusFlagCruiserModuleFittingReduction

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Propulsion Module', 'Micro Jump Drive'),
                                      'power', src.getModifiedItemAttr('flagCruiserFittingBonusPropMods'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Propulsion Module', 'Micro Jump Drive'),
                                      'cpu', src.getModifiedItemAttr('flagCruiserFittingBonusPropMods'), **kwargs)

        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Target Painter', 'Scan Probe Launcher'),
                                      'cpu', src.getModifiedItemAttr('flagCruiserFittingBonusPainterProbes'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ('Target Painter', 'Scan Probe Launcher'),
                                      'power', src.getModifiedItemAttr('flagCruiserFittingBonusPainterProbes'), **kwargs)


class Effect7050(BaseEffect):
    """
    aoe_beacon_bioluminescence_cloud

    Used by:
    Celestials named like: Bioluminescence Cloud (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))
                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7051(BaseEffect):
    """
    aoe_beacon_caustic_cloud

    Used by:
    Celestials named like: Caustic Cloud (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))
                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7052(BaseEffect):
    """
    roleBonusFlagCruiserTargetPainterModifications

    Used by:
    Ship: Monitor
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter', 'signatureRadiusBonus',
                                      src.getModifiedItemAttr('targetPainterStrengthModifierFlagCruisers'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Target Painter', 'maxRange',
                                      src.getModifiedItemAttr('targetPainterRangeModifierFlagCruisers'), **kwargs)


class Effect7055(BaseEffect):
    """
    shipLargeWeaponsDamageBonus

    Used by:
    Ship: Praxis
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Hybrid Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Projectile Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'thermalDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'explosiveDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'kineticDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'emDamage',
                                        src.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect7058(BaseEffect):
    """
    aoe_beacon_filament_cloud

    Used by:
    Celestials named like: Filament Cloud (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))
                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7059(BaseEffect):
    """
    weather_caustic_toxin

    Used by:
    Celestial: caustic_toxin_weather_1
    Celestial: caustic_toxin_weather_2
    Celestial: caustic_toxin_weather_3
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))
                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7060(BaseEffect):
    """
    weather_darkness

    Used by:
    Celestial: darkness_weather_1
    Celestial: darkness_weather_2
    Celestial: darkness_weather_3
    Celestial: pvp_weather_1
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 5):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))
                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7061(BaseEffect):
    """
    weather_electric_storm

    Used by:
    Celestial: electric_storm_weather_1
    Celestial: electric_storm_weather_2
    Celestial: electric_storm_weather_3
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7062(BaseEffect):
    """
    weather_infernal

    Used by:
    Celestial: infernal_weather_1
    Celestial: infernal_weather_2
    Celestial: infernal_weather_3
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7063(BaseEffect):
    """
    weather_xenon_gas

    Used by:
    Celestial: xenon_gas_weather_1
    Celestial: xenon_gas_weather_2
    Celestial: xenon_gas_weather_3
    """

    runTime = 'early'
    type = ('projected', 'passive', 'gang')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        for x in range(1, 3):
            if beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x)):
                value = beacon.getModifiedItemAttr('warfareBuff{}Value'.format(x))
                id = beacon.getModifiedItemAttr('warfareBuff{}ID'.format(x))

                if id:
                    fit.addCommandBonus(id, value, beacon, kwargs['effect'], 'early')


class Effect7064(BaseEffect):
    """
    weather_basic

    Used by:
    Celestial: basic_weather
    """

    runTime = 'early'
    type = ('projected', 'passive')


class Effect7071(BaseEffect):
    """
    smallPrecursorTurretDmgBonusRequiredSkill

    Used by:
    Skill: Small Precursor Weapon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7072(BaseEffect):
    """
    mediumPrecursorTurretDmgBonusRequiredSkill

    Used by:
    Skill: Medium Precursor Weapon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7073(BaseEffect):
    """
    largePrecursorTurretDmgBonusRequiredSkill

    Used by:
    Skill: Large Precursor Weapon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Precursor Weapon'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7074(BaseEffect):
    """
    smallDisintegratorSkillDmgBonus

    Used by:
    Skill: Small Disintegrator Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Disintegrator Specialization'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7075(BaseEffect):
    """
    mediumDisintegratorSkillDmgBonus

    Used by:
    Skill: Medium Disintegrator Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Disintegrator Specialization'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7076(BaseEffect):
    """
    largeDisintegratorSkillDmgBonus

    Used by:
    Skill: Large Disintegrator Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Disintegrator Specialization'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7077(BaseEffect):
    """
    disintegratorWeaponDamageMultiply

    Used by:
    Modules from group: Entropic Radiation Sink (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Precursor Weapon',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect7078(BaseEffect):
    """
    disintegratorWeaponSpeedMultiply

    Used by:
    Modules from group: Entropic Radiation Sink (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Precursor Weapon',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect7079(BaseEffect):
    """
    shipPCBSSPeedBonusPCBS1

    Used by:
    Ship: Leshak
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Precursor Weapon'),
                                      'speed', ship.getModifiedItemAttr('shipBonusPBS1'), skill='Precursor Battleship', **kwargs)


class Effect7080(BaseEffect):
    """
    shipPCBSDmgBonusPCBS2

    Used by:
    Ship: Leshak
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Precursor Weapon'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusPBS2'), skill='Precursor Battleship', **kwargs)


class Effect7085(BaseEffect):
    """
    shipbonusPCTDamagePC1

    Used by:
    Variations of ship: Vedmak (2 of 2)
    Ship: Tiamat
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusPC1'), skill='Precursor Cruiser', **kwargs)


class Effect7086(BaseEffect):
    """
    shipbonusPCTTrackingPC2

    Used by:
    Variations of ship: Vedmak (2 of 2)
    Ship: Tiamat
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'trackingSpeed', ship.getModifiedItemAttr('shipBonusPC2'), skill='Precursor Cruiser', **kwargs)


class Effect7087(BaseEffect):
    """
    shipbonusPCTOptimalPF2

    Used by:
    Ship: Hydra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusPF2'), skill='Precursor Frigate', **kwargs)


class Effect7088(BaseEffect):
    """
    shipbonusPCTDamagePF1

    Used by:
    Variations of ship: Damavik (2 of 2)
    Ship: Hydra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusPF1'), skill='Precursor Frigate', **kwargs)


class Effect7091(BaseEffect):
    """
    shipBonusNosNeutCapNeedRoleBonus2

    Used by:
    Variations of ship: Rodiva (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capacitor Emission Systems'), 'capacitorNeed', src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect7092(BaseEffect):
    """
    shipBonusRemoteRepCapNeedRoleBonus2

    Used by:
    Variations of ship: Damavik (2 of 2)
    Variations of ship: Kikimora (2 of 2)
    Variations of ship: Vedmak (2 of 2)
    Ship: Drekavac
    Ship: Hydra
    Ship: Leshak
    Ship: Tiamat
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems') or mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
            'capacitorNeed', ship.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect7093(BaseEffect):
    """
    shipBonusSmartbombCapNeedRoleBonus2

    Used by:
    Variations of ship: Damavik (2 of 2)
    Variations of ship: Kikimora (2 of 2)
    Variations of ship: Rodiva (2 of 2)
    Variations of ship: Vedmak (2 of 2)
    Ship: Drekavac
    Ship: Hydra
    Ship: Leshak
    Ship: Tiamat
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Energy Pulse Weapons'),
                                      'capacitorNeed', ship.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect7094(BaseEffect):
    """
    shipBonusRemoteRepMaxRangeRoleBonus1

    Used by:
    Variations of ship: Damavik (2 of 2)
    Variations of ship: Kikimora (2 of 2)
    Variations of ship: Vedmak (2 of 2)
    Ship: Drekavac
    Ship: Hydra
    Ship: Leshak
    Ship: Tiamat
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems') or mod.item.requiresSkill('Capital Remote Armor Repair Systems'),
            'maxRange', ship.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect7097(BaseEffect):
    """
    surgicalStrikeDamageMultiplierBonusPostPercentDamageMultiplierLocationShipGroupPrecursorTurret

    Used by:
    Skill: Surgical Strike
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Precursor Weapon',
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect7111(BaseEffect):
    """
    systemSmallPrecursorTurretDamage

    Used by:
    Celestials named like: Class Wolf Rayet Effects (6 of 6)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                         'damageMultiplier', module.getModifiedItemAttr('smallWeaponDamageMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect7112(BaseEffect):
    """
    shipBonusNeutCapNeedRoleBonus2

    Used by:
    Variations of ship: Damavik (2 of 2)
    Variations of ship: Kikimora (2 of 2)
    Variations of ship: Vedmak (2 of 2)
    Ship: Drekavac
    Ship: Hydra
    Ship: Leshak
    Ship: Tiamat
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Energy Neutralizer', 'capacitorNeed',
                                      src.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect7116(BaseEffect):
    """
    eliteBonusReconScanProbeStrength2

    Used by:
    Ship: Tiamat
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Astrometrics'), 'baseSensorStrength',
                                        src.getModifiedItemAttr('eliteBonusReconShip2'), skill='Recon Ships', **kwargs)


class Effect7117(BaseEffect):
    """
    roleBonusWarpSpeed

    Used by:
    Ship: Cynabal
    Ship: Dramiel
    Ship: Leopard
    Ship: Machariel
    Ship: Victorieux Luxury Yacht
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', src.getModifiedItemAttr('shipRoleBonusWarpSpeed'), **kwargs)


class Effect7118(BaseEffect):
    """
    eliteBonusCovertOps3PCTdamagePerCycle

    Used by:
    Ship: Hydra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'), 'damageMultiplierBonusPerCycle',
                                         src.getModifiedItemAttr('eliteBonusCovertOps3'), skill='Covert Ops', **kwargs)


class Effect7119(BaseEffect):
    """
    eliteBonusReconShip3PCTdamagePerCycle

    Used by:
    Ship: Tiamat
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'), 'damageMultiplierBonusPerCycle',
                                         src.getModifiedItemAttr('eliteBonusReconShip3'), skill='Recon Ships', **kwargs)


class Effect7142(BaseEffect):
    """
    massEntanglerEffect5

    Used by:
    Module: Zero-Point Mass Entangler
    """

    type = 'active'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.ship.increaseItemAttr('warpScrambleStatus', src.getModifiedItemAttr('warpScrambleStrength'), **kwargs)
        fit.ship.boostItemAttr('mass', src.getModifiedItemAttr('massBonusPercentage'), stackingPenalties=True, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'), 'speedFactor',
                                      src.getModifiedItemAttr('speedFactorBonus'), stackingPenalties=True, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Afterburner'), 'speedBoostFactor',
                                      src.getModifiedItemAttr('speedBoostFactorBonus'), **kwargs)
        fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill('High Speed Maneuvering'), 'activationBlocked',
                                         src.getModifiedItemAttr('activationBlockedStrenght'), **kwargs)
        fit.ship.boostItemAttr('maxVelocity', src.getModifiedItemAttr('maxVelocityBonus'), stackingPenalties=True, **kwargs)


class Effect7154(BaseEffect):
    """
    shipBonusPD1DisintegratorDamage

    Used by:
    Variations of ship: Kikimora (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusPD1'),
                                      skill='Precursor Destroyer', **kwargs)


class Effect7155(BaseEffect):
    """
    shipBonusPBC1DisintegratorDamage

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'damageMultiplier', ship.getModifiedItemAttr('shipBonusPBC1'),
                                      skill='Precursor Battlecruiser', **kwargs)


class Effect7156(BaseEffect):
    """
    smallDisintegratorMaxRangeBonus

    Used by:
    Ship: Kikimora
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('maxRangeBonus'), **kwargs)


class Effect7157(BaseEffect):
    """
    shipBonusPD2DisintegratorMaxRange

    Used by:
    Variations of ship: Kikimora (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('shipBonusPD2'),
                                      skill='Precursor Destroyer', **kwargs)


class Effect7158(BaseEffect):
    """
    shipArmorKineticResistancePBC2

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusPBC2'),
                               skill='Precursor Battlecruiser', **kwargs)


class Effect7159(BaseEffect):
    """
    shipArmorThermalResistancePBC2

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusPBC2'),
                               skill='Precursor Battlecruiser', **kwargs)


class Effect7160(BaseEffect):
    """
    shipArmorEMResistancePBC2

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusPBC2'),
                               skill='Precursor Battlecruiser', **kwargs)


class Effect7161(BaseEffect):
    """
    shipArmorExplosiveResistancePBC2

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusPBC2'),
                               skill='Precursor Battlecruiser', **kwargs)


class Effect7162(BaseEffect):
    """
    shipRoleDisintegratorMaxRangeCBC

    Used by:
    Ship: Drekavac
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('roleBonusCBC'), **kwargs)


class Effect7166(BaseEffect):
    """
    ShipModuleRemoteArmorMutadaptiveRepairer

    Used by:
    Modules from group: Mutadaptive Remote Armor Repairer (5 of 5)
    """

    runTime = 'late'
    type = 'projected', 'active'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        if 'projected' not in context:
            return
        if fit.ship.getModifiedItemAttr('disallowAssistance'):
            return
        repAmountBase = container.getModifiedItemAttr('armorDamageAmount')
        repAmountBase *= calculateRangeFactor(
            srcOptimalRange=container.getModifiedItemAttr('maxRange'),
            srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'),
            distance=projectionRange)
        cycleTime = container.getModifiedItemAttr('duration') / 1000.0
        repSpoolMax = container.getModifiedItemAttr('repairMultiplierBonusMax')
        repSpoolPerCycle = container.getModifiedItemAttr('repairMultiplierBonusPerCycle')
        defaultSpoolValue = eos.config.settings['globalDefaultSpoolupPercentage']
        spoolType, spoolAmount = resolveSpoolOptions(SpoolOptions(SpoolType.SPOOL_SCALE, defaultSpoolValue, False), container)
        rps = repAmountBase * (1 + calculateSpoolup(repSpoolMax, repSpoolPerCycle, cycleTime, spoolType, spoolAmount)[0]) / cycleTime
        rpsPreSpool = repAmountBase * (1 + calculateSpoolup(repSpoolMax, repSpoolPerCycle, cycleTime, SpoolType.SPOOL_SCALE, 0)[0]) / cycleTime
        rpsFullSpool = repAmountBase * (1 + calculateSpoolup(repSpoolMax, repSpoolPerCycle, cycleTime, SpoolType.SPOOL_SCALE, 1)[0]) / cycleTime
        fit.extraAttributes.increase('armorRepair', rps, **kwargs)
        fit.extraAttributes.increase('armorRepairPreSpool', rpsPreSpool, **kwargs)
        fit.extraAttributes.increase('armorRepairFullSpool', rpsFullSpool, **kwargs)


class Effect7167(BaseEffect):
    """
    shipBonusRemoteCapacitorTransferRangeRole1

    Used by:
    Variations of ship: Rodiva (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Remote Capacitor Transmitter', 'maxRange', src.getModifiedItemAttr('shipBonusRole1'), **kwargs)


class Effect7168(BaseEffect):
    """
    shipBonusMutadaptiveRemoteRepairRangeRole3

    Used by:
    Ship: Rodiva
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'maxRange', src.getModifiedItemAttr('shipBonusRole3'), **kwargs)


class Effect7169(BaseEffect):
    """
    shipBonusMutadaptiveRepAmountPC1

    Used by:
    Ship: Rodiva
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'armorDamageAmount', src.getModifiedItemAttr('shipBonusPC1'), skill='Precursor Cruiser', **kwargs)


class Effect7170(BaseEffect):
    """
    shipBonusMutadaptiveRepCapNeedPC2

    Used by:
    Ship: Rodiva
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'capacitorNeed', src.getModifiedItemAttr('shipBonusPC2'), skill='Precursor Cruiser', **kwargs)


class Effect7171(BaseEffect):
    """
    shipBonusMutadaptiveRemoteRepRangePC1

    Used by:
    Ship: Zarmazd
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'maxRange', src.getModifiedItemAttr('shipBonusPC1'), skill='Precursor Cruiser', **kwargs)


class Effect7172(BaseEffect):
    """
    shipBonusMutadaptiveRemoteRepCapNeedeliteBonusLogisitics1

    Used by:
    Ship: Zarmazd
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'capacitorNeed', src.getModifiedItemAttr('eliteBonusLogistics1'), skill='Logistics Cruisers', **kwargs)


class Effect7173(BaseEffect):
    """
    shipBonusMutadaptiveRemoteRepAmounteliteBonusLogisitics2

    Used by:
    Ship: Zarmazd
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mutadaptive Remote Armor Repairer', 'armorDamageAmount', src.getModifiedItemAttr('eliteBonusLogistics2'), skill='Logistics Cruisers', **kwargs)


class Effect7176(BaseEffect):
    """
    skillBonusDroneInterfacingNotFighters

    Used by:
    Implant: CreoDron 'Bumblebee' Drone Tuner T10-5D
    Implant: CreoDron 'Yellowjacket' Drone Tuner D5-10T
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'damageMultiplier',
                                     src.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)


class Effect7177(BaseEffect):
    """
    skillBonusDroneDurabilityNotFighters

    Used by:
    Implants named like: Drone Tuner (4 of 4)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'hp',
                                     src.getModifiedItemAttr('hullHpBonus'))
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'armorHP',
                                     src.getModifiedItemAttr('armorHpBonus'))
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'), 'shieldCapacity',
                                     src.getModifiedItemAttr('shieldCapacityBonus'), **kwargs)


class Effect7179(BaseEffect):
    """
    stripMinerDurationMultiplier

    Used by:
    Module: Frostline 'Omnivore' Harvester Upgrade
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Strip Miner',
                                      'duration', module.getModifiedItemAttr('miningDurationMultiplier'), **kwargs)


class Effect7180(BaseEffect):
    """
    miningDurationMultiplierOnline

    Used by:
    Module: Frostline 'Omnivore' Harvester Upgrade
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Mining Laser',
                                      'duration', module.getModifiedItemAttr('miningDurationMultiplier'), **kwargs)


class Effect7183(BaseEffect):
    """
    implantWarpScrambleRangeBonus

    Used by:
    Implants named like: Inquest 'Hedone' Entanglement Optimizer WS (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
                                      'maxRange', src.getModifiedItemAttr('warpScrambleRangeBonus'),
                                      stackingPenalties=False, **kwargs)


class Effect7184(BaseEffect):
    """
    shipBonusMediumDroneHProle8

    Used by:
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'hp', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect7185(BaseEffect):
    """
    shipBonusMediumDroneShieldHProle8

    Used by:
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'shieldCapacity', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect7186(BaseEffect):
    """
    shipBonusMediumDroneArmorHProle8

    Used by:
    Ship: Gila
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Medium Drone Operation'),
                                     'armorHP', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)


class Effect7193(BaseEffect):
    """
    systemMiningCycleTimeBonus

    Used by:
    Celestials named like: Stellar Observatory (4 of 4)
    Celestials named like: Triglavian Invasion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'), 'duration',
                                      beacon.getModifiedItemAttr('miningDurationMultiplier'), **kwargs)


class Effect7202(BaseEffect):
    """
    systemDroneSpeedBonusPercent

    Used by:
    Celestials named like: Triglavian Invasion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'maxVelocity', beacon.getModifiedItemAttr('droneMaxVelocityBonus'),
                                     stackingPenalties=True, **kwargs)


class Effect7203(BaseEffect):
    """
    systemDroneDamageBonusPercent

    Used by:
    Celestials named like: Triglavian Invasion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
                                     'damageMultiplier', beacon.getModifiedItemAttr('droneDamageBonus'),
                                     stackingPenalties=True, **kwargs)


class Effect7204(BaseEffect):
    """
    shipArmorEMResistancePF2

    Used by:
    Variations of ship: Damavik (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorEmDamageResonance', ship.getModifiedItemAttr('shipBonusPF2'), skill='Precursor Frigate', **kwargs)


class Effect7205(BaseEffect):
    """
    shipArmorKinResistancePF2

    Used by:
    Variations of ship: Damavik (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorKineticDamageResonance', ship.getModifiedItemAttr('shipBonusPF2'), skill='Precursor Frigate', **kwargs)


class Effect7206(BaseEffect):
    """
    shipArmorThermResistancePF2

    Used by:
    Variations of ship: Damavik (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorThermalDamageResonance', ship.getModifiedItemAttr('shipBonusPF2'), skill='Precursor Frigate', **kwargs)


class Effect7207(BaseEffect):
    """
    shipArmorExpResistancePF2

    Used by:
    Variations of ship: Damavik (2 of 2)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('armorExplosiveDamageResonance', ship.getModifiedItemAttr('shipBonusPF2'), skill='Precursor Frigate', **kwargs)


class Effect7209(BaseEffect):
    """
    shipPCTOptimalBonusEliteGunship2

    Used by:
    Ship: Nergal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusGunship2'),
                                      skill='Assault Frigates', **kwargs)


class Effect7210(BaseEffect):
    """
    shipBonusCommandDestroyerRole2DefenderBonus

    Used by:
    Ship: Draugur
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Defender Missiles'),
                                      'moduleReactivationDelay', ship.getModifiedItemAttr('shipBonusRole2'), **kwargs)


class Effect7211(BaseEffect):
    """
    shipDmgMultiMaxEliteHeavyGunship1

    Used by:
    Ship: Ikitursa
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'damageMultiplierBonusMax', ship.getModifiedItemAttr('eliteBonusHeavyGunship1'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect7216(BaseEffect):
    """
    shipDmgMultiMaxEliteGunship1

    Used by:
    Ship: Nergal
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Precursor Weapon'),
                                      'damageMultiplierBonusMax', ship.getModifiedItemAttr('eliteBonusGunship1'),
                                      skill='Assault Frigates', **kwargs)


class Effect7223(BaseEffect):
    """
    systemAgilityBonusPercentItem

    Used by:
    Celestials named like: Triglavian Invasion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('agility', beacon.getModifiedItemAttr('agilityBonus'), stackingPenalties=True, **kwargs)


class Effect7227(BaseEffect):
    """
    systemHullHPBonusPercentItem

    Used by:
    Celestials named like: Triglavian Invasion System Effects (3 of 3)
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('hp', beacon.getModifiedItemAttr('hullHpBonus'), **kwargs)


class Effect7228(BaseEffect):
    """
    shipMediumPrecursorWeaponOptimalEliteHeavyGunship2

    Used by:
    Ship: Ikitursa
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Precursor Weapon'),
                                      'maxRange', ship.getModifiedItemAttr('eliteBonusHeavyGunship2'),
                                      skill='Heavy Assault Cruisers', **kwargs)


class Effect7230(BaseEffect):
    """
    shipBonusDroneTrackingGC2

    Used by:
    Ship: Vexor Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill('Drones'),
                                     'trackingSpeed', ship.getModifiedItemAttr('shipBonusGC2'),
                                     skill='Gallente Cruiser', **kwargs)


class Effect7231(BaseEffect):
    """
    shipBonusArmorRepAmountGC3

    Used by:
    Ship: Vexor Navy Issue
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Repair Systems'),
                                      'armorDamageAmount', ship.getModifiedItemAttr('shipBonusGC3'),
                                      skill='Gallente Cruiser', **kwargs)


class Effect7232(BaseEffect):
    """
    modifyDamageMultiplierBonusMax

    Used by:
    Implants named like: Grade Mimesis (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.group.name == 'Precursor Weapon', 'damageMultiplierBonusMax',
            implant.getModifiedItemAttr('damageMultiplierBonusMaxModifier'), **kwargs)


class Effect7233(BaseEffect):
    """
    modifyDamageMultiplierBonusPerCycle

    Used by:
    Implants named like: Grade Mimesis (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.group.name == 'Precursor Weapon', 'damageMultiplierBonusPerCycle',
            implant.getModifiedItemAttr('damageMultiplierBonusPerCycleModifier'), **kwargs)


class Effect7234(BaseEffect):
    """
    implantSetMimesis

    Used by:
    Implants named like: Grade Mimesis (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(
            lambda imp: imp.item.group.name == 'Cyberimplant', 'damageMultiplierBonusMaxModifier',
            implant.getModifiedItemAttr('setBonusMimesis'), **kwargs)
        fit.appliedImplants.filteredItemMultiply(
            lambda imp: imp.item.group.name == 'Cyberimplant', 'damageMultiplierBonusPerCycleModifier',
            implant.getModifiedItemAttr('setBonusMimesis'), **kwargs)


class Effect7237(BaseEffect):
    """
    systemWarpSpeed

    Used by:
    Celestial: Dazh Liminality Locus
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('warpSpeedMultiplier', beacon.getModifiedItemAttr('warpSpeedBonus'),
                               stackingPenalties=True, **kwargs)


class Effect7238(BaseEffect):
    """
    shipBonusDreadnoughtPC1DamageMultMax

    Used by:
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Precursor Weapon'), 'damageMultiplier',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtPC1'), skill='Precursor Dreadnought', **kwargs)


class Effect7239(BaseEffect):
    """
    shipBonusDreadnoughtPC2ArmorResists

    Used by:
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        for type in ('Em', 'Explosive', 'Kinetic', 'Thermal'):
            fit.ship.boostItemAttr('armor{0}DamageResonance'.format(type), src.getModifiedItemAttr('shipBonusDreadnoughtPC2'),
                                   skill='Precursor Dreadnought', **kwargs)


class Effect7240(BaseEffect):
    """
    shipBonusDreadnoughtPC3WeaponSpeed

    Used by:
    Ship: Zirnitra
    """

    type = 'passive'

    @staticmethod
    def handler(fit, src, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Precursor Weapon'), 'speed',
                                      src.getModifiedItemAttr('shipBonusDreadnoughtPC3'), skill='Precursor Dreadnought', **kwargs)


class Effect7242(BaseEffect):
    """
    capitalPrecursorTurretDmgBonusRequiredSkill

    Used by:
    Skill: Capital Precursor Weapon
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Capital Precursor Weapon'),
                                      'damageMultiplier', container.getModifiedItemAttr('damageMultiplierBonus') * level, **kwargs)


class Effect7247(BaseEffect):
    """
    shipBonusHAMHMLAoeVelocityMC

    Used by:
    Ship: Bellicose
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(lambda mod: (mod.charge.requiresSkill('Heavy Missiles') or
                                                     mod.charge.requiresSkill('Heavy Assault Missiles')),
                                        'aoeVelocity', ship.getModifiedItemAttr('shipBonusMC'),
                                        skill='Minmatar Cruiser', **kwargs)


class Effect7248(BaseEffect):
    """
    shipPBonusROFMF

    Used by:
    Ship: Rifter
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Projectile Turret'),
                                      'speed', ship.getModifiedItemAttr('shipBonusMF'), skill='Minmatar Frigate', **kwargs)


class Effect8011(BaseEffect):
    """
    shieldHpBonusPostPercentHpLocationShip

    Used by:
    Implants named like: grade Nirvana (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        fit.ship.boostItemAttr('shieldCapacity', container.getModifiedItemAttr('shieldHpBonus'), **kwargs)


class Effect8013(BaseEffect):
    """
    setBonusNirvana

    Used by:
    Implants named like: grade Nirvana (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(lambda target: target.item.requiresSkill('Cybernetics'),
                                                 'shieldHpBonus', implant.getModifiedItemAttr('ImplantSetNirvana') or 1, **kwargs)


class Effect8017(BaseEffect):
    """
    saviorSetBonus

    Used by:
    Implants named like: grade Savior (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.appliedImplants.filteredItemMultiply(
            lambda implant: implant.item.requiresSkill('Cybernetics'),
            'remoteRepDurationBonus', implant.getModifiedItemAttr('implantSetSavior'), **kwargs)


class Effect8018(BaseEffect):
    """
    subcapRemoteArmorShieldRepDurationBonus

    Used by:
    Implants named like: grade Savior (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Remote Armor Repair Systems'),
                                      'duration', implant.getModifiedItemAttr('remoteRepDurationBonus'), **kwargs)


class Effect8021(BaseEffect):
    """
    hydraSetBonus

    Used by:
    Implants named like: grade Hydra (18 of 18)
    """

    runTime = 'early'
    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        for attr in ('hydraDroneTrackingBonus', 'hydraDroneRangeBonus', 'hydraMissileFlightTimeBonus', 'hydraMissileExplosionVelocityBonus'):
            fit.appliedImplants.filteredItemMultiply(
                lambda implant: implant.item.requiresSkill('Cybernetics'),
                attr, implant.getModifiedItemAttr('implantSetHydra'), **kwargs)


class Effect8023(BaseEffect):
    """
    hydraDroneTrackingEffect

    Used by:
    Implants named like: grade Hydra (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.drones.filteredItemBoost(
            lambda drone: drone.item.requiresSkill('Drones'),
            'trackingSpeed', implant.getModifiedItemAttr('hydraDroneTrackingBonus'), **kwargs)


class Effect8024(BaseEffect):
    """
    hydraDroneRangeEffect

    Used by:
    Implants named like: grade Hydra (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        for attr in ('maxRange', 'falloff'):
            fit.drones.filteredItemBoost(
                lambda drone: drone.item.requiresSkill('Drones'),
                attr, implant.getModifiedItemAttr('hydraDroneRangeBonus'), **kwargs)


class Effect8025(BaseEffect):
    """
    hydraMissileFlightTimeEffect

    Used by:
    Implants named like: grade Hydra (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
            'explosionDelay', implant.getModifiedItemAttr('hydraMissileFlightTimeBonus'), **kwargs)


class Effect8026(BaseEffect):
    """
    hydraMissileExplosionVelocityEffect

    Used by:
    Implants named like: grade Hydra (15 of 18)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredChargeBoost(
            lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
            'aoeVelocity', implant.getModifiedItemAttr('hydraMissileExplosionVelocityBonus'), **kwargs)


class Effect8029(BaseEffect):
    """
    roleBonus7CapBoosterGroupRestriction

    Used by:
    Ships from group: Force Auxiliary (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for attr in ('maxGroupOnline', 'maxGroupFitted'):
            fit.modules.filteredItemForce(
                lambda mod: mod.item.group.name == 'Capacitor Booster',
                attr, ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)


class Effect8031(BaseEffect):
    """
    systemMaxTargets

    Used by:
    Celestial: Dazh Liminality Locus
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.ship.multiplyItemAttr('maxLockedTargets', beacon.getModifiedItemAttr('maxLockedTargetsMultiplier'), **kwargs)


class Effect8032(BaseEffect):
    """
    systemWarpScrambleStrengthBonus

    Used by:
    Celestial: Federal Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemIncrease(
            lambda mod: mod.item.group.name == 'Warp Scrambler',
            'warpScrambleStrength', beacon.getModifiedItemAttr('warpScrambleStrengthBonus'), **kwargs)


class Effect8033(BaseEffect):
    """
    systemEcmRangeMultiplier

    Used by:
    Celestial: State Stellar Observatory
    """

    runTime = 'early'
    type = ('projected', 'passive')

    @staticmethod
    def handler(fit, beacon, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(
            lambda mod: mod.item.group.name == 'ECM', 'maxRange',
            beacon.getModifiedItemAttr('ecmRangeBonus'), stackingPenalties=True, **kwargs)


class Effect8034(BaseEffect):
    """
    smallUpwellWeaponDmgBonusRequiredSkill

    Used by:
    Skill: Small Vorton Projector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Vorton Projector'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8035(BaseEffect):
    """
    mediumUpwellWeaponDmgBonusRequiredSkill

    Used by:
    Skill: Medium Vorton Projector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Vorton Projector'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8036(BaseEffect):
    """
    largeUpwellWeaponDmgBonusRequiredSkill

    Used by:
    Skill: Large Vorton Projector
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Vorton Projector'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8037(BaseEffect):
    """
    ChainLightning

    Used by:
    Modules from group: Vorton Projector (15 of 15)
    """

    type = 'active'


class Effect8039(BaseEffect):
    """
    upwellSkillaoeVelocityaoeCloudSizeBonus

    Used by:
    Implants named like: EDENCOM Vorton Booster GU (3 of 3)
    Skill: Vorton Arc Guidance
    """

    type = 'passive'

    @staticmethod
    def handler(fit, container, context, projectionRange, **kwargs):
        level = container.level if 'skill' in context else 1
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'aoeVelocity', container.getModifiedItemAttr('aoeVelocityBonus') * level, **kwargs)
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'aoeCloudSize', container.getModifiedItemAttr('aoeCloudSizeBonus') * level, **kwargs)


class Effect8041(BaseEffect):
    """
    upwellSkillDamageMuliplierBonus

    Used by:
    Skill: Vorton Power Amplification
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Vorton Projector',
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8042(BaseEffect):
    """
    upwellSkillSpeedBonus

    Used by:
    Skill: Vorton Projector Operation
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'speed', skill.getModifiedItemAttr('turretSpeeBonus') * skill.level, **kwargs)


class Effect8044(BaseEffect):
    """
    smallVortonProjectorSkillDmgBonus

    Used by:
    Skill: Small Vorton Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Small Vorton Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8045(BaseEffect):
    """
    mediumVortonProjectorSkillDmgBonus

    Used by:
    Skill: Medium Vorton Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Vorton Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8046(BaseEffect):
    """
    largeVortonProjectorSkillDmgBonus

    Used by:
    Skill: Large Vorton Specialization
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Vorton Specialization'),
                                      'damageMultiplier', skill.getModifiedItemAttr('damageMultiplierBonus') * skill.level, **kwargs)


class Effect8047(BaseEffect):
    """
    shipBonusUF1shieldResistance

    Used by:
    Ship: Skybreaker
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('shield%sDamageResonance' % type.capitalize(),
                                   ship.getModifiedItemAttr('shipBonusUF1'),
                                   skill='EDENCOM Frigate', **kwargs)


class Effect8048(BaseEffect):
    """
    shipBonusUF2damage

    Used by:
    Ship: Skybreaker
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Small Vorton Projector'), 'damageMultiplier',
            ship.getModifiedItemAttr('shipBonusUF2'), skill='EDENCOM Frigate', **kwargs)


class Effect8052(BaseEffect):
    """
    shipBonusUC2ShieldResistance

    Used by:
    Ship: Stormbringer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        for type in ('kinetic', 'thermal', 'explosive', 'em'):
            fit.ship.boostItemAttr('shield%sDamageResonance' % type.capitalize(),
                                   ship.getModifiedItemAttr('shipBonusUC2'),
                                   skill='EDENCOM Cruiser', **kwargs)


class Effect8053(BaseEffect):
    """
    shipBonusUC1maxRange

    Used by:
    Ship: Stormbringer
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Medium Vorton Projector'), 'maxRange',
            ship.getModifiedItemAttr('shipBonusUC1'), skill='EDENCOM Cruiser', **kwargs)


class Effect8054(BaseEffect):
    """
    shipBonusUB1upwellDamage

    Used by:
    Ship: Thunderchild
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Large Vorton Projector'), 'damageMultiplier',
            ship.getModifiedItemAttr('shipBonusUB1'), skill='EDENCOM Battleship', **kwargs)


class Effect8056(BaseEffect):
    """
    shipBonusUB2upwellROF

    Used by:
    Ship: Thunderchild
    """

    type = 'passive'

    @staticmethod
    def handler(fit, ship, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(
            lambda mod: mod.item.requiresSkill('Large Vorton Projector'), 'speed',
            ship.getModifiedItemAttr('shipBonusUB2'), skill='EDENCOM Battleship', **kwargs)


class Effect8057(BaseEffect):
    """
    vortonWeaponDamageSpeedMultiply

    Used by:
    Modules from group: Vorton Projector Upgrade (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Vorton Projector',
                                         'damageMultiplier', module.getModifiedItemAttr('damageMultiplier'),
                                         stackingPenalties=True, **kwargs)
        fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == 'Vorton Projector',
                                         'speed', module.getModifiedItemAttr('speedMultiplier'),
                                         stackingPenalties=True, **kwargs)


class Effect8062(BaseEffect):
    """
    ammoAOEvelocityMultiplier

    Used by:
    Charges from group: Advanced Condenser Pack (6 of 6)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, module, context, projectionRange, **kwargs):
        module.multiplyItemAttr('aoeVelocity', module.getModifiedChargeAttr('aoeVelocityBonus') or 0, **kwargs)


class Effect8064(BaseEffect):
    """
    vortonProjectorOptimalRangeBonus

    Used by:
    Implants named like: EDENCOM Vorton Booster RA (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'maxRange', implant.getModifiedItemAttr('rangeSkillBonus'), **kwargs)


class Effect8065(BaseEffect):
    """
    vortonProjectorSkillRangeBonus

    Used by:
    Skill: Vorton Arc Extension
    """

    type = 'passive'

    @staticmethod
    def handler(fit, skill, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'maxRange', skill.getModifiedItemAttr('rangeSkillBonus') * skill.level, **kwargs)


class Effect8066(BaseEffect):
    """
    vortonProjectorDamageBonus

    Used by:
    Implants named like: EDENCOM Vorton Booster DA (3 of 3)
    """

    type = 'passive'

    @staticmethod
    def handler(fit, implant, context, projectionRange, **kwargs):
        fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
                                      'damageMultiplier', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)
