function _breedWith(uint40 _momId, uint40 _dadId) internal returns (uint40)
    {
        
        Cutie storage dad = cuties[_dadId];
        Cutie storage mom = cuties[_momId];

        
        _triggerCooldown(_dadId, dad);
        _triggerCooldown(_momId, mom);

        
        delete sireAllowedToAddress[_momId];
        delete sireAllowedToAddress[_dadId];

        
        require(mom.birthTime != 0);

        
        uint16 parentGen = mom.generation;
        if (dad.generation > mom.generation) {
            parentGen = dad.generation;
        }

        
        uint256 childGenes = geneMixer.mixGenes(mom.genes, dad.genes);

        
        address owner = cutieIndexToOwner[_momId];
        uint40 cutieId = _createCutie(_momId, _dadId, parentGen + 1, childGenes, owner, mom.cooldownEndTime);

        
        return cutieId;
    }