def execute_raw(life, section, identifier, break_on_true=False, break_on_false=True, debug=False, dialog=[], **kwargs):
	_broke_on_false = 0
	
	if debug and not dialog:
		print 'Grabbing raw: %s, %s' % (section, identifier)
	
	if dialog:
		_raw = dialog
	else:
		_raw = get_raw(life, section, identifier)
	
	if not _raw:
		logging.warning('Cannot grab raw for %s: %s, %s' % (life['raw_name'], section, identifier))
	
	for rule_group in _raw:
		if debug:
			print 'Function group:', rule_group
		
		for rule in rule_group:
			if rule['string']:
				return rule['string'].lower()
			
			_func_args = {}
			for value in rule['values']:
				if 'key' in value:
					_func_args[value['key']] = value['value']
			
			if rule['no_args']:
				if _func_args:
					_func = rule['function'](**_func_args)
				else:
					_func = rule['function']()
			elif rule['self_call']:
				if _func_args:
					_func = rule['function'](life, **_func_args)
				else:
					_func = rule['function'](life)
			else:
				try:
					_func = rule['function'](life, **kwargs)
				except Exception as e:
					logging.critical('Function \'%s\' got invalid argument.' % rule['function'])
					print rule
					import traceback
					traceback.print_exc()
					sys.exit(1)
			
			if debug:
				print 'Function:', _func
				print 'Function arguments:', _func_args
			
			if rule['true'] == '*' or _func == rule['true']:
				for value in rule['values']:
					if 'flag' in value:
						brain.knows_alife_by_id(life, kwargs['life_id'])[value['flag']] += value['value']
				
				if break_on_true:
					if _func:
						return _func
					
					return True
			else:
				if break_on_false:
					_broke_on_false += 1
					break
	
	if break_on_true:
		return False
	
	if break_on_false and _broke_on_false==len(get_raw(life, section, identifier)):
		return False
	
	return True
break_on_false is defaulted to True because the majority of situations in which this
dataset/ETHPy150Open flags/Reactor-3/life.py/execute_raw