<?php
/**
 * Copyright (c) 2005, 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Denis Roy (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="midcolumn">
  <h1>Copyright Agent</h1>
  <p>We respect the intellectual property rights of others, and require that the
    people who use the Site do the same. We also maintain a policy under which
    the Web Site use privileges of users who are repeat infringers of
    intellectual property rights are terminated in appropriate circumstances. If
    you believe that your work has been copied in a way that constitutes
    copyright infringement, please forward the following information to
    Eclipse's Copyright Agent, designated as such pursuant to the Digital
    Millennium Copyright Act, 17 U.S.C. &#167; 512(c)(2), named below:</p>

  <ul>
    <li>Your address, telephone number, and email address;</li>
    <li>A description of the copyrighted work that you claim has been infringed;
    </li>
    <li>A description of where the alleged infringing material is located;</li>
    <li>A statement by you that you have a good faith belief that the disputed
      use is not authorized by the copyright owner, its agent, or the law;</li>
    <li>An electronic or physical signature of the person authorized to act on
      behalf of the owner of the copyright interest; and</li>
    <li>A statement by you, made under penalty of perjury, that the above
      information in your Notice is accurate and that you are the copyright
      owner or authorized to act on the copyright owner's behalf.</li>
  </ul>

  <h3>Copyright Agent:</h3>
  <p>Manager, Intellectual Property<br/>
  Eclipse Foundation, Inc.<br/>
  2934 Baseline Rd Suite 202<br/>
  Ottawa, Ontario<br/>
  Canada<br/>
  K2H 8T5<br/>
  <br />
  Phone: +1.613.224.9461<br/>
  Fax: +1.212.918.1619<br/>
  Email: license@eclipse.org
  </p>
  <br />
</div>
<div id="rightcolumn">
  <div class="sideitem">
    <h6>Related Links</h6>
    <ul>
      <li><a href="index.php">Legal resources</a></li>
      <li><a href="guidetolegaldoc.php">Guide to legal documents</a></li>
    </ul>
  </div>
</div>