code: def evaluate(self, global_state: GlobalState, post=False) -> List[GlobalState]:
          
          # Generalize some ops
          log.debug("Evaluating {}".format(self.op_code))
          op = self.op_code.lower()
          if self.op_code.startswith("PUSH"):
              op = "push"
          elif self.op_code.startswith("DUP"):
              op = "dup"
          elif self.op_code.startswith("SWAP"):
              op = "swap"
          elif self.op_code.startswith("LOG"):
              op = "log"
  
          instruction_mutator = (
              getattr(self, op + "_", None)
              if not post
              else getattr(self, op + "_" + "post", None)
          )
  
          if instruction_mutator is None:
              raise NotImplementedError
  
          if self.iprof is None:
              result = instruction_mutator(global_state)
          else:
              start_time = datetime.now()
              result = instruction_mutator(global_state)
              end_time = datetime.now()
              self.iprof.record(op, start_time, end_time)
  
          return result
docs: Performs the mutation for this instruction.
  
          :param global_state:
          :param post:
          :return: