anchor.diff:      if (_currentState == null) _currentState = val;
     }
   
  +  get upState => _upState;
  +
     set downState(DisplayObject val) {
       _downState = val;
       _setSizeForState(val);
     }
   
  +  get downState => _downState == null ? _upState : _downState;
  +
     set overState(DisplayObject val) {
       _overState = val;
       _setSizeForState(val);
     }
   
  +  get overState => _overState == null ? _upState : _overState;
  +
     set hitTestState(DisplayObject val) {
       _hitTestState = val;
       _setSizeForState(val);
     }
  +
  +  get hitTestState => _hitTestState == null ? _upState : _hitTestState;
   
     set enabled(bool val) {
       useHandCursor = val;
  
positive.code:   void _mouseEventHandler(MouseEvent event) {
      if (_enabled == false) return;
      if (event.type == MouseEvent.MOUSE_OUT || event.type == MouseEvent.CLICK) {
        _currentState = _upState;
      } else {
        _currentState = event.buttonDown ? _downState : _overState;
      }
      if (event.type == MouseEvent.CLICK) dispatchEvent(new Event(PRESSED));
    }
  
negative.code:   }
  
    DisplayObject hitTestInput(num localX, num localY) {
      if (hitTestState != null) {
        var state = hitTestState;
        Matrix matrix = state.transformationMatrix;
        num deltaX = localX - matrix.tx;
        num deltaY = localY - matrix.ty;
        num childX = (matrix.d * deltaX - matrix.c * deltaY) / matrix.det;
        num childY = (matrix.a * deltaY - matrix.b * deltaX) / matrix.det;
        if (state.hitTestInput(childX, childY) != null) return this;
      }
      return null;
    }
  