interface ICookMigrator {
    // Perform LP token migration from UniswapV2 to ChickenFarm.
    // Take the current LP token address and return the new LP token address.
    // Migrator should have full access to the caller's LP token.
    // Return the new LP token address.
    //
    // XXX Migrator must have allowance access to UniswapV2 LP tokens.
    // ChickenFarm must mint EXACTLY the same amount of ChickenFarm LP tokens or
    // else something bad will happen. Traditional UniswapV2 does not
    // do that so be careful!
    function migrate(IERC20 token) external returns (IERC20);
}
// An interface for a future component of the CHKN system, allowing migration
// from one type of LP token to another. Migration moves liquidity from an exchange
// contract to another, e.g. for a swap version update. All users keep their
// staked liquidity and can deposit or withdraw the new type of token
// (kept in the same pool / pid) afterwards.
function migrate(IERC20 token) external returns (IERC20);

// Perform LP token migration from UniswapV2 to ChickenFarm.
// Take the current LP token address and return the new LP token address.
// Migrator should have full access to the caller's LP token.
// Return the new LP token address.
//
// XXX Migrator must have allowance access to UniswapV2 LP tokens.
// ChickenFarm must mint EXACTLY the same amount of ChickenFarm LP tokens or
// else something bad will happen. Traditional UniswapV2 does not
// do that so be careful!