module.exports = realpath
							 | 
						|
								realpath.realpath = realpath
							 | 
						|
								realpath.sync = realpathSync
							 | 
						|
								realpath.realpathSync = realpathSync
							 | 
						|
								realpath.monkeypatch = monkeypatch
							 | 
						|
								realpath.unmonkeypatch = unmonkeypatch
							 | 
						|
								
							 | 
						|
								var fs = require('fs')
							 | 
						|
								var origRealpath = fs.realpath
							 | 
						|
								var origRealpathSync = fs.realpathSync
							 | 
						|
								
							 | 
						|
								var version = process.version
							 | 
						|
								var ok = /^v[0-5]\./.test(version)
							 | 
						|
								var old = require('./old.js')
							 | 
						|
								
							 | 
						|
								function newError (er) {
							 | 
						|
								  return er && er.syscall === 'realpath' && (
							 | 
						|
								    er.code === 'ELOOP' ||
							 | 
						|
								    er.code === 'ENOMEM' ||
							 | 
						|
								    er.code === 'ENAMETOOLONG'
							 | 
						|
								  )
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function realpath (p, cache, cb) {
							 | 
						|
								  if (ok) {
							 | 
						|
								    return origRealpath(p, cache, cb)
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  if (typeof cache === 'function') {
							 | 
						|
								    cb = cache
							 | 
						|
								    cache = null
							 | 
						|
								  }
							 | 
						|
								  origRealpath(p, cache, function (er, result) {
							 | 
						|
								    if (newError(er)) {
							 | 
						|
								      old.realpath(p, cache, cb)
							 | 
						|
								    } else {
							 | 
						|
								      cb(er, result)
							 | 
						|
								    }
							 | 
						|
								  })
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function realpathSync (p, cache) {
							 | 
						|
								  if (ok) {
							 | 
						|
								    return origRealpathSync(p, cache)
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  try {
							 | 
						|
								    return origRealpathSync(p, cache)
							 | 
						|
								  } catch (er) {
							 | 
						|
								    if (newError(er)) {
							 | 
						|
								      return old.realpathSync(p, cache)
							 | 
						|
								    } else {
							 | 
						|
								      throw er
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function monkeypatch () {
							 | 
						|
								  fs.realpath = realpath
							 | 
						|
								  fs.realpathSync = realpathSync
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function unmonkeypatch () {
							 | 
						|
								  fs.realpath = origRealpath
							 | 
						|
								  fs.realpathSync = origRealpathSync
							 | 
						|
								}
							 |