| var Buffer = require('buffer').Buffer | 
|   | 
| module.exports = function (buf) { | 
|     // If the buffer is backed by a Uint8Array, a faster version will work | 
|     if (buf instanceof Uint8Array) { | 
|         // If the buffer isn't a subarray, return the underlying ArrayBuffer | 
|         if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { | 
|             return buf.buffer | 
|         } else if (typeof buf.buffer.slice === 'function') { | 
|             // Otherwise we need to get a proper copy | 
|             return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) | 
|         } | 
|     } | 
|   | 
|     if (Buffer.isBuffer(buf)) { | 
|         // This is the slow version that will work with any Buffer | 
|         // implementation (even in old browsers) | 
|         var arrayCopy = new Uint8Array(buf.length) | 
|         var len = buf.length | 
|         for (var i = 0; i < len; i++) { | 
|             arrayCopy[i] = buf[i] | 
|         } | 
|         return arrayCopy.buffer | 
|     } else { | 
|         throw new Error('Argument must be a Buffer') | 
|     } | 
| } |