别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过别通过
楔子
作者:宁九儿
更新时间:2018/4/5 9:34:01
字数:81972