code: def process(self, new_state=None):
          
          if new_state is None:
              new_state = set(self.buttons_pressed)
          old_state = self._state
          self._state = new_state
  
          state_diff = new_state.symmetric_difference(old_state)
          for button in state_diff:
              handler = getattr(self, 'on_' + button)
  
              if handler is not None:
                  handler(button in new_state)
  
          if self.on_change is not None and state_diff:
              self.on_change([(button, button in new_state) for button in state_diff])
docs: Check for currenly pressed buttons. If the new state differs from the
          old state, call the appropriate button event handlers.