redesigned ButtonListener as AgentButtonListener
created CombinationAgentButtonListener
removed unnecessary usings
updated comments
fixed interrupt port id lookup logic
fixed interrupt port not firing on initial press