m2

ByteArray.js

(function(){

var acme = {}; if (this.acme == null) this.acme = acme;

/// ---------------------- ///
/// !!! acme.ByteArray !!! ///
/// ---------------------- ///
acme.ByteArray = function ByteArray(n) {

    if (!(this instanceof ByteArray)) return new ByteArray(n);

    var len = n >>> 0;
    var bytes = [];

    var accessor = function ByteArray(index, value) {
        var i = index >>> 0;
        if (i === index) {
            if (arguments.length >= 2) {
                var ii = i >>> 2;          // i / 4
                var shift = (i & 3) << 3;  // i % 4 * 8
                bytes[ii] ^= ((bytes[ii] >>> shift ^ value) & 0xFF) << shift;
                if (i >= len) len = i + 1;
            }
            else if (i < len) {
                return bytes[i >>> 2] >>> ((i & 3) << 3) & 0xFF;
            }
        }
    };

    // len property. (Couldn't overwrite Function#length.)
    accessor.__defineGetter__('len', function() { return len; });
    accessor.__defineSetter__('len', function(value) {
        var l = value >>> 0;
        if (l === value) {
            len = value;
            bytes.length = (len >> 2) + 1; // ((len & 3 === 0) ? 0 : 1);
        }
    });

    // object's appearance.
    if ('__proto__' in accessor) accessor.__proto__ = this; // for instanceof operator.
    accessor.toString = function toString() { return '[function ByteArray]'; };

    return accessor;
};

})()


include tests.

(function(){

var acme = {}; if (this.acme == null) this.acme = acme;

/// ---------------------- ///
/// !!! acme.ByteArray !!! ///
/// ---------------------- ///
acme.ByteArray = function ByteArray(n) {

    if (!(this instanceof ByteArray)) return new ByteArray(n);

    var len = n >>> 0;
    var bytes = [];

    var accessor = function ByteArray(index, value) {
        var i = index >>> 0;
        if (i === index) {
            if (arguments.length >= 2) {
                var ii = i >>> 2;          // i / 4
                var shift = (i & 3) << 3;  // i % 4 * 8
                bytes[ii] ^= ((bytes[ii] >>> shift ^ value) & 0xFF) << shift;
                if (i >= len) len = i + 1;
            }
            else if (i < len) {
                return bytes[i >>> 2] >>> ((i & 3) << 3) & 0xFF;
            }
        }
    };

    // len property. (Couldn't overwrite Function#length.)
    accessor.__defineGetter__('len', function() { return len; });
    accessor.__defineSetter__('len', function(value) {
        var l = value >>> 0;
        if (l === value) {
            len = value;
            bytes.length = (len >> 2) + 1; // ((len & 3 === 0) ? 0 : 1);
        }
    });

    // util.
    accessor.dump = function dump() {
        var buf = [], digit = (len >>> 2 << 2).toString().length;
        buf.push('--- start dump byte array ---');
        for (var i= 0, l = bytes.length - 1; i < l; i++) {
            buf.push('[' + pad(i << 2, digit, ' ') + '] ' + pad((bytes[i] >>> 0).toString(2), 32, '0').replace(/[01]{8}(?=[01])/g, '$& '));
        }
        if (len & 3) {
            var v = bytes[bytes.length - 1], spad8 = pad('', 8, ' ');
            var last = spad8 + ' ' +
                       (len % 4 >= 3 ? pad((v >>> 16 & 0xFF).toString(2), 8, '0') : spad8) + ' ' +
                       (len % 4 >= 2 ? pad((v >>>  8 & 0xFF).toString(2), 8, '0') : spad8) + ' ' +
                       (               pad((v        & 0xFF).toString(2), 8, '0'));
            buf.push('[' + pad(i << 2, digit, ' ') + '] ' + last);
        }
        buf.push('--- end   dump byte array ---');
        return buf.join('\n');
        function pad(v, n, c) {
            return (new Array(n + 1).join(c) + v).slice(-n);
        }
    };

    // object's appearance.
    if ('__proto__' in accessor) accessor.__proto__ = this; // for instanceof operator.
    accessor.toString = function toString() { return '[function ByteArray]'; };

    return accessor;
};

// Assert
acme.eq = function akume_iku(expected, actual, message) {
   if (expected !== actual) {
       throw new acme.AkumeError((message ? (message + '\t') : '') + 'not equal.\nexpected:[' + expected + ']\tactual:[' + actual + ']', "data:audio/ogg;base64,T2dnUwACAAAAAAAAAADPEAAAAAAAAIgkckMBHgF2b3JiaXMAAAAAASJWAAD%2F%2F%2F%2F%2FgD4AAP%2F%2F%2F%2F%2BqAU9nZ1MAAAAAAAAAAAAAzxAAAAEAAABQS0rPDC3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FMQN2b3JiaXMdAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAwOTA3MDkAAAAAAQV2b3JiaXMWQkNWAQAIAACAIAoZxoDQkFUAABAAAEKIRsZQp5QEl4KFEEfEUIeQ81Bq6SB4SmHJmPQUaxBCCN97z7333nsgNGQVAAAEAEAYBQ5i4DEJQgihGMUJUZwpCEIIYTkJlnIeOglC9yCEEC7n3nLuvfceCA1ZBQAAAgAwCCGEEEIIIYQQQgoppRRSiimmmGLKMcccc8wxyCCDDDropJNOMqmkk44yyaij1FpKLcUUU2y5xVhrrTXn3GtQyhhjjDHGGGOMMcYYY4wxxghCQ1YBACAAAIRBBhlkEEIIIYUUUoopphxzzDHHgNCQVQAAIACAAAAAAEeRFMmRHMmRJEmyJEvSJM%2FyLM%2FyLE8TNVFTRVV1Vdu1fduXfdt3ddm3fdl2dVmXZVl3bVuXdVfXdV3XdV3XdV3XdV3XdV3XdSA0ZBUAIAEAoCM5jiM5jiM5kiMpkgKEhqwCAGQAAAQA4CiO4jiSIzmWY0mWpEma5Vme5WmeJmqiB4SGrAIAAAEABAAAAAAAoCiK4iiOI0mWpWma56meKIqmqqqiaaqqqpqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZpAaMgqAEACAEDHcRzHURzHcRzJkSQJCA1ZBQDIAAAIAMBQFEeRHMuxJM3SLM%2FyNNEzPVeUTd3UVRsIDVkFAAACAAgAAAAAAMDxHM%2FxHE%2FyJM%2FyHM%2FxJE%2FSNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TgNCQlQAAEAAAghzTDpIkEIIKkmcQcxCTZhSCCpLrGJQUk4ecgoqR5yRjBpELSheZiiA0ZEUAEAUAABiDGEPMIeeclE5S5JyT0klpIISWOkqdpdJqiTGjVGpLtTYQOkohtYxSibW02lErtZbYCgAACHAAAAiwEAoNWREARAEAEMYgpZBSiDHmIHMQMcagY5AZxhiEzDkFHXMUUqkcdNRBSQ1jzDkGoYIOUukcVQ5CSR11AgAAAhwAAAIshEJDVgQAcQIABknSNEvTPM%2FSPM%2FzRFFVPVFUVUv0TNMzTVX1TFNVTdWUXVE1ZdnyRNP0TFNVPdNUVdFUZdc0Vdf1VNWWTVfVZdFVddu1Zd92ZVm4PVWVbVF1bd1UXVlXZdn2Xdm2fUkUVVVUVdf1VNV1VdfVbdN1dd1TVdk1XVeWTde1ZdeVbV2VZeHXVFWWTde1ZdN1ZduVXd1WZVm3Rdf1dVWWhd%2BUZd%2BXbV33Zd1WhtF1bV%2BVZd03ZVn4ZVsWdlfXfWESRVX1VFV2RVV1XdN1bV11XdvWVFN2Tde1ZVN1ZVmVZd13XVnXNVWVZVOWbdt0XVlWZdnXXVnWbdF1dd2UZeFXXVnXXd02jtm2fWF0Xd03ZVn3VVnWfVnXhWHWbV%2FXVFX3Tdn1hdOVdWH3fWOYdV04Ptf1fVW2hWOVZePXhV9Ybl0Xfs91fV21ZWNYZdsYdt83htn3jWPVbWOYbd3o6jph%2BIXhuH3jqNq20NVtYXl126gbP%2BE2fqOmqr5uuq7xm7Ls67JuC8Pt%2B8rxua7vq7Js%2FKpsC7%2Bt68qx%2Bz7lc11fWGVZGFZbFoZZ14VlF4alauvK8Oq%2Bcby2rgy3LzR%2BXxmqtm0sr24Lw%2Bzbwm8Lv3Hsxs4YAAAw4AAAEGBCGSg0ZEUAECcAYJEkz7MsSxQtyxJF0RRVVRRFVbU0zTQ1zTNNTfNM0zRN1RVNU3UtTTNNzdNMU%2FM00zRV01VN05RN0TRd11RN2xVVVZZVV5Zl1XV1WTRNVxZV05VNU3Vl1XVdWXVdWZY0zTQ1zzNNzfNM01RNVzZN1XUtz1NNzRNN1xNFVVVNVXVNVZVdzfNM1RM91fREUVVN15RVU1Vl2VRNWzZNVZZNV7VlV5VdWXZl2zZVVZZN1XRl03Vd23Vd23VlV9glTTNNzfNMU%2FM81TRN1XVNVXVly%2FNU0xNFVdU80VRVVXVd01Rd2fI8U%2FVEUVU1UVNN03VlWVVNWRVV05ZVVdVl01Rl2ZVl23ZV15VNVXVlU3Vl2VRN2XVd2ebKqqx6pinLpqrasqmqsivbtq27rqvbomrKrmmqsq2qqu7Krq37sizbsqiqrmu6qiybqirbsizruizbwq66rm2bqivrrizTZdV2fdu36arr2r4qu77uyrKtu7ary7pt%2B75nmrJsqqZsm6oqy7Ls2rYty74wmqZrm65qy6bqyrbrurouy7Jti6Ypy6bqurapmrIsy7Lty7Js26or67Jry7bvurJsy7Yt7LIrzL7qyrbuyrYtrK5q27Jv%2B2xd1VUBAAADDgAAASaUgUJDVgIAUQAAgDGMMQahUco55yA0SjnnHITMOQghpJI5ByGEkjLnIJSSUuYchFJSCiGUklJrIYRSUmqtAACAAgcAgAAbNCUWByg0ZCUAkAoAYHAcTTNN15VlY1gsSxRVVZZt2xgWyxJFVZVl2xaOTRRVVZZtW9fRRFFVZdm2dV85TlWVZdv2deHIVFVZtm1d941UWbZtXReGSqos27at%2B0Yl2bZ13RiOo5Js27rv%2B8axxBeGwrJUwld%2B4agEAgDAExwAgApsWB3hpGgssNCQlQBABgAAYJBSRimljFJKKaUYU0oxJgAAYMABACDAhDJQaMiKACAKAABwzjnnnHPOOeecc84555xzzjnnnGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGBMAsBPhALATYSEUGrISAAgHAAAQUghKSqWUUkrknJNSSimllFIiByGUUkoppZQSSSellFJKKaWUxkEppZRSSimlhFJKKaWUUkopJZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKQUAmDw4AEAl2DjDStJZ4WhwoSErAYDcAABAKeYYk1BCKiGVEEIolWMQOiclpNRaCSm0EirooHWOQkottVZSKiVlEkIIoYQSSmmllNRKySCEEkIpIYSUSiklhJZBCSmUUFJKJbXQUiklgxBCaSWkVlJrKZRUUgalpBJKSqm01lIqKbUOSkultNZaKymFVFpKHZSSWkqllNZaKK211jpJpbSQWkuttVZaKaV0llIqJbXWWmqtpZRaCaW00kprpZTUWkuttVRSay21llpLrbWWWiullJRaaq211lpqqaTUUgqllFZKCqmlllorqbQQQksllVZaaa2llFIqoZRUUmqppNZaSqGVFkorJZWUWiqppJRSS6mEUkpIqYRWUkutpZZaKqm01FJLraRSWioppVIAANCBAwBAgBGVFmKnGVcegSMKGSagAAAAEABgIEJmAoECKDCQAQAHCAlSAEBhgaF0oQtCiCBdBFk8cOHEjSduOKFDCwQAAAAAAAcAfAAAHAxARERzDQ4PEBESExQVFgAAAAAAAAAAAAAAAAJPZ2dTAAAAlgAAAAAAAM8QAAACAAAAGtUfekwBAQEBAQEBAQEBQDs9RkVGREdCQzg%2FOTs0PEA8Q0JAQjo9Ozw7Oz09Qz5AQDs9QUE%2FQEE%2BPUI%2FQT5COkREPjw%2BPD49OkI0O0E6PUZHAAAAAAAAAAAAADJFx%2ByDEnNGuon5VA7cX1kfV%2B7t%2BOnC9PW904tzU1%2BZ8mSsTMlEeko68KkO3BB754VgH9hzxAI49hHH%2F4cpxQFGQ6PPYtHlap0m5lM58NV9Ol4Wut1WFW6qiiTXczp94ffj%2BAW4dw1V244KLl%2FGCwKJUEhCZ7DDr1jyCDpDzWY9mP0V1k1WrQTUIItyhnOq6rM%2FvyYilm248vuqcRL%2B%2FYbzEcpMwnES6c8DaWIei7E34FP8fU78CgAyVbmwQ7xfrSBusj3ltBju%2FOq0Ou7ci3uzOvbebGfzPM%2FzPG%2F68c3fYBxZsli4kGcAy4GGDTOi%2FzQIlIYeoC6AbcdgYAEAOlOFtZD7tRuFJr4%2BgKZBmpxh6xLlmCU51if%2F1bcdp7RMa6fmHd5m1THGzDZ3pDUUfRrNhjTrAouzXcKVo1DXPRZSpfEBRlMTf1TwGxZOQ%2FWKDwkAqOWcoTKAmZpUFZ6ndpPvYg%2FlFl9WuTsLnWlomDDK8LTkn5g%2B0bTJlaQrZ7QGYI4rYrI1lJcCAE5d%2FXxUrK%2FeOCWjon8WkBLodeAcWFaztl0bKWJm7Zl1Z0RDfbu0Tk9siHtIVC5AK4pRdJqS6nXQfLtOMPGXeXu982I2WlexOpbTtz%2FghbcyeQaoE14%2BlRZDs4t1Lb9NSun2Z%2B3sYE0U04Ar5iiatCil%2FiY66tQzdDIsaSBOWPUJekbo7%2BZ7eN1EAgBeXXT1yOEQ18Uf9a34BAnQlivUKQfm9M%2Fa9inhy77JI9zK%2BubCqvwzhcn%2F5YMYWFGyw%2BDiWOBA30hBepQbpI%2FRuxpOd5NV%2F56qy59BHHmdHYBGEyXIGW7n3SGN5Kzf%2FW%2BuA3yijTQAYovLCuOrqRlaQAXO8GWhDsyAvaoa1zXkqjOzegEARnHyolSpt3UVcwKvlGolgDqx0VA58DbpDYK3iy8JD8H%2BU%2BB5dQOy4FsK9vUYAGw%2BcC404FkSiABeX7g%2B5hAM3c2FZcz%2FBACUL9VaGKqbtuvnFiamtQaY%2BxcxN60SYb9uEPauA7%2FnCVYBDGK%2F868lZwCglFdDBwB2bVAfa6ie4zBvnbjJHyBAP2NoYJjVxNq2Kce8fwAwApiDC7RCwT6wLT0THh00210arEilzX5WBwByZXhy7EO0p6%2BEOLn8hwEom0s5Q36wJEcOMzsIwJEAgONyAnaYU0%2Bw224ce3etMcFUtRi4KUt3ur8AAG5ldOs448X7cgl2qvcDgPUxWzlQi0oAT1%2BoWZD%2FAV5tA6tPJq1J2DBwCSQswWxgopXVrAByYXhy7G2%2Bq0PiME%2F6BAB0NeaVA2sOgP3fUnTmcwM04ZEAXHml4m6uBkVpZdcN204UgiTdStLL5Km5tQJiV%2FXBsbyw%2FnUT3x9T2ScA0JYlJwXYsxww852%2FzXF%2FQuvZCINLG8YvnoH9gnmVobmSxnxCFn3lfUpQck0%2BEywnRnXb06i2qF5PAczcxCkBeGJwObDuqbHmgZtp28PtxAJ%2Fq36wDlidtTgxCKTe9gACGvSU2NwUngP%2BBtYCQkeHDnzKea%2FFmRp1rDGeiglAInA5EF272vZAneeTR9ZqKwZcdRC7%2B%2Brjcr0BG9Harg%2F%2BKAqKgfyZsGSGzqhTbOUtCk5NvYvVl6q315tNeSYs%2BWcSgG7ldDGBbN1UC7y53Qbg6QpPprg%2B4lYaUI1BvEn%2F%2BdCBqtxKAsFjPvQEwTiXzFyCBlZV%2BIHzKk58LqaaSpRNOqkB8EJxyAU8CY53T%2BrwRLoYt%2FIAQe%2BTcAS32ze4xQHGGwIMr1SgkJOPAP3iG9NKRQBWV3H16OOXen%2FTNf7RegHTAOsiZ8jymDHLPaOq%2BgCAPqvYasB5dBDYjA%2FAuw3k84YaH2gv%2FPCuOMG23rTVab2X1gBSU5PieDdc1RBdZ2ftXDnD%2BLU7YhipGtB9PBqAmvq6WQ2sQEN%2BfdHBUMB1M8BAVeuBMqpJWU1yCygAPjX54BC6XKPBfiVVWwMG6lrlwP8e4b3NL8fxe6NFZpX6myyncQWlqttYun0Hhxr4oQAkZolOmQwkQtiMCi47RZVNdr2immLOr15U4JL33WZMxf5zE%2FpEVWKk3dF4QKHteT2vWaTB3iABrnpo2NXwe9TAUKDPVtAAQjHV1vEtdr1jVFZ1VpsJDFBMDjTrgpnJYTX503JPrbWdacsC4GPYUhMKVuobNkrZYWCwQMF%2BXcXpZdEJTk%2FbuX98v6%2Ba8YaMytxTOUO%2BSOgarXG9P4CGUXnRaSnI%2BjZ9Z1OCEpNr9k6QWh2SuaVblR7%2BwrSpAABGSYfqMn6uuritGrXplAd0TzCvHKg%2BAU0H4qYURV%2Fk4jGeCU1LyaQ6dOClOrqup%2Bugoulgv1HCFfjzAD5BB33%2F%2Fr714vxFtb4BesDicuCXWjDLDcbqQ1B3nRLoHqmEDX0YY4Pu6MyoWhnDLMDcjGnsyJI2YvDiyQwuMdOD8suuHM46Za5WACJAUYFjYV1Z%2Fv8lIdEL6wvD0NN%2F1QULs3NR%2FErSR0mWSivWDZRRmEcptBXdzi48Ojl2Wp25WiPrJE%2BRgAWYJRe4P8%2FaZ%2BlN%2F39Jr%2Fzss6LpMiFneX0pi86cPzyzC%2FN5JKDpkLZr3cCmQV9Edp8vSpnxBTY%2Fppcwmm%2FQpPlUzvD5K%2FOg%2FFwsnD1XxSyyx%2BEK7%2BeZd2H5TZyvWefRhTFoO7YLxuB4tDGaK1p8XKWozgQAOkHN%2ByCUXEET1VaHDIBUDixNkba1edb%2BS9u6dKi%2FBbzgzFQxCN2%2FfUudYTOTbwkvOtH6lUJnpDBzFg3xsldbIkJDg%2FYHwhU06dzUuAQoyoHbTzTHui3nkq8z8aSQORhdDN0yLWSiOTK6UzJiN2rTddg%2FqXYBBK77JpeQoxTzhwA6Q6X0xmj1Cpp0igDgSOVAY5Yly8dxy%2B7RREha1Fx7RvJtA5EKk5i5hKyDNzH7DCyiUAV6U3DsKvLtVTpDXYwoXi%2Bg0TlaQB4U5YBz2nnuE9vtjDp%2FfGmiF9ikxu1SKUWkcJn8BA3MUGjTSKRZT5oIE%2FxkIv5GS6o2QUPh6UHgxZa5UfXkBobpV93lczfz58d0vT1HqPXCbm3rJLTsb4HcpgUlGx0TLvPn1gfLuMmh2Qh2RXPWfYw2AD5tW3Xr4ub9bZvtLuLcHADI5glc6eyS1OWi4t%2Fedirlc8ANcOXzGaxUVgFnkCh42o%2FvKroL%2BNDwh1JMrhrXW0ACXm%2B9%2BriG6YYCop7fkjoBCFirJQDWNeC4B7NkjbGU1bvuK3DbKbkHjHwl0LB67ScF%2F2EmkODcJQhHNSwG2lQGamFTfzyDs%2FIVSseOrAeQCYYGoLonIE3HzLwDsKtmasqtQT2Se4ii2o8VmAMjgbetm7YJmEs4m4J6MY0X5NfOAE5RW71jh3Z1cPmcibwDGvC2FKDSEzD3BW4juKkbPWkdlTuX4o4vxXYyFQxgi7YQsyMoNHdZxdSDs0YyJrcY6cQHRlOHJsef8Lp05O9IfwwAbF450D73SAAqy6WugGTDwiPUJtjhSHmi2S6GZTdt7UXzaT3WUQCuP1P1iJ4XzwFGVRd6%2FenruczYNso%2BBQCQtQage6BpmgaOJrH0WYnUjIb2xqdUMP5cP3QidSTFVqCXQENmp6QeViuC3B4FQksH0%2Bp80vXbEuGzJDBAMQNwP1QdT%2FdlnyXVyySUw4iyrcyl9qPuWl00kqC7W4NmE9CJikqmXoKpWXZqqfrGny4FNjO9w%2FHVr5odeCeeBQYAV87QVhzW%2B7pMVK4lT3ucu93ZnF6v7B6Y3zxMbjaaWGsTbJDJQ9C7%2B6ObHw9D%2FpUANjuy7%2F816OmrCuQqpVrHDKBKOTD5NM0%2F7d%2FSSmORe%2Feu8DxYi3OL1xwmyKoldhL42jQdozUK1iS6S6XbhSu0eRdCN6Rf7XnbK1gPewKpNgZCAq2c4UhL67H7dfpIoZaOceHfZyXHvHEHP%2F7UOvjUD1b2lAA4q1wA%2BPzrP38CAEo707p%2FfH8uk08tFThFgA1QxS0M801aV%2B8vBJr7h5%2BDSGGF%2F8mHtgax0BZzIWCYWJBb35pQBxLnj8Qc7HUhqjIkAEZJh%2Bpq%2BF2uuGpDekvlDB9l2eb8795QrPfKBwuAK8bmQyg%2FVZ5CmTZg6BoMTYDAuSRvUCDq0l%2FkEgAyMdsr3vW%2B%2BnWozqTOKuACtMkZ7o95zsO5r4uBa9bZg20B2dfeRaKbBDnWZj%2BnGNYEi%2FoXQ0lTu2sAWULRG6HjT28uAT43vdXqtG%2BYsQUC5zgHQPLkDM4n9%2FyWxcKztAlaojEESpBrTjb7RNyPjCX7PZ85FalC71WNF3gIJnBqpxhL4ioVJdcAOjXFQZ%2Bvhsu3DXD6kAC0BuBIbX92gKWp%2BpK%2BzG06aVfHVq6kWXK%2B9uY4SMcsXG3zsBiIgjRjEae5i7f3HAFCOXS7VQ39FcTnCMCBohw4PpjmbFLeRM91N01lMhY7pUnEYCOaeHHIDZuFDyR2httAB5j4x2QG05Fc3AVKP0mviCZOX1UxjaoX5cDvR9WbhReX6%2BrHPHSIlJ19Vq4tu35hocjR7QTyew04k8vh9PHoeGDMVNVdxFz0I0JDpY84rS6giS2VFsPL%2B9X1zv30eHad%2Bk674cWG0M4NlYGAYetoNhUHBRzsm6iWowF57%2BleFpIp9PsEAEI3aKU%2B3ZdXhFCjcxwMILUAYalsmjd%2F9%2B8f6zrCvLuH29CHQVY%2B0MrXgdvI1%2BEqPlVUKDxAWhD%2BfPDl%2Fv8BQjfVanV%2By%2Bt3hRYZeSsSDlzy15mGgq8LdWXfZjStSjNAcahPmeRcJE7gSmyyjQVbKc5zFswyjzTVKAaTAkpXF2zvdLsvL1UjLZr2Vg7cf9C9Yvqr6ni4Yuf8AgA855OeAoOGSBr6LRmahCsK4BeXgcRR5%2BGwtFdeW9v6%2BJN%2FdqNvL8lVrX01T%2BCzOAyJaQpd43jUKwkAOq7P44UAwKbtguJWVteSgKnNZYsJNwXY1eL8zaXY0UAbWRx2ZRN%2F%2FDb3TncEM3viMCIegFUFuP8SwC3jEvBzqBSwtFUH8NmZAAQA%2FoDdNFQUWO5zLo4AbmUTffxh694NV1ZktPcR5ICrOc318zSw8zwaAOzcegKwbAQGVz3BfZut6%2BDHtoG5FeAWeOTfCu9eRwFSU3h69Dbd%2FALTIVj2KQFAW4gpZ%2BjuMzezd1gmq8sDVtZbBMDfEiKcZ%2B2l18DWBmmyEIBfJ1zLGrBdAlpfynINAD43cHCk10K%2FGILJOk%2BFAIBmLSkMufqyttqvLV7fIMAH1%2FUI5%2FaBMi6wXcAOCbYyEpmLA8BRneexAgBCM%2FjmoyLu8SAT4Qg%2BeN8mOPA2CeEM7VuG63pTtNEfhwD2dlzXPwCx73VW8iak%2FT0H9pPfbgD3%2FSuRvwQASm%2F8psPQJJ6XQ6YvwSmdcxCAbjoYMXRrqPOeCSr6e%2FUWBzzwBMD9SbwzD5UE%2B30Hj1QviHhgDjTYtDTwCDYybJajeh4AAFZzciv7%2FiLPdKQlXaJffB4MKDoBUIEQJoblGJV%2B%2F3bBl%2B8A9F2DZEnIwwD2P4LVBdjKwGrjg9tvgBNyOziNATD2uvJzyAQAT2dnUwAAAB4BAAAAAADPEAAAAwAAAOzm%2F1ZEPTo0QUVCPkRCQDk%2FOkJCSEQ5QUBCPjcxNDNANzg5PDk%2FPT08Pzs9Rjo7NTU2NTlDSEc%2FOkM6Ozw9PT4%2BOj8%2FQzU3Pj5uX%2BLgfHkv7q%2BziNR4Kp8A8FK5hpyh60HdW1QGNHBziQDAWcULNSCBymAzLi8FGACbjQk%2FNwLDTxm3eAkAXlWxfzyb11s%2FOBjt8xkAsGwNDF0eAObY79UBgOdydQHXmwcAbIakXwNolY65Jxo30IVJgA%2FczFSdAHJjfXn8YcuuLjioX%2Flr97RMDny%2BZyXgdQKA4RcAYKolYAzAGMyT7QDACLhWNZHTpTgfqwFiXdPi2Fu58Y2ZstKfgAawlBZDdqUZ%2BkqqYx5V6rDAdjymgKVXkIG67sq%2BpsNCKl1fQqBp%2FNQzFCCoHskbtusDAFZdW73jQLmqFTpLfwIwvObGGPpnmYj2StL3i28NexgEEsVGgjrtwr5sCDAvaLodV9o5OH1GT8NW9tl4bwqZEKln2HsFAE5ZB72jYrt6AKw5Z0KC5MnlDJWlZDaWFNs8k4evJAq14tV1D%2FGgr6Z3NvGcuMqddIftkInA7JxNpcyJnr990TcCAGZbdf%2B4BkXnC2cr8gkARFEObLcYW5bIryvOboRhGBLMt1Vhg0mXygYOM5U9NOGp2%2FNEAWCEbdQ9ycwI4%2B8sVnP1auvFxaJPoreEN%2BvkAMhGFh4xHH1WjVTWtc5NnCdijfQB%2BFVZVvxAAks%2BngOMx2tDFuAgLPWQagx2AD2B7i1tAgA2O1sr5fwztUuV0K3%2Bhk7tDAA4p3KGJnmzuma5H1%2BCT2CWy8IRdhsVbJI0Y7MGEDbvSYDeGXvnuk5KOCG8JSUKHQA%2BP9JWw22SC2ap%2BhvXALz6G5u3z106fTzd3mbWvfusLGf7pPRtl2bcSzVKg6CvGjCGVSZAgy8FzbFU7F33Rp4CPj%2FKF1NDfQHZ86kcuHN0i2dbrM%2FddR1U5SudLm5kGtlUo8BbrTZJ5AeTmy2Qw4AOxJqPiZVnsrMcQkGdTxilvkAT1ZPLgUsv0Vmf116oS%2BeK9f15U2RtbVg6WNVdCZLWdVTp20g9rVSxUydIhcQrRqm0qwzt1YYGLkMuepPQB2jyauNoMCCVA%2FlEs97PNE%2B2tKojOtgJKxmUaq87KIdZpwQm%2B6dDuwaBYQDMLjrEm6XuAUI%2FoV%2BEQV4uWGUXOrcDpENywoHjX0u7L9v3e%2B%2F7RLJDd7LcdiCsCyEM7KWJ1UAb%2FMbrkJ0WA0Qr6krI%2BIILK%2FqGODY97JPuSeYwkyb0GTrXDYAnklMEILse0W1p0ttnhyUZs4aC%2BVvCVtmAMkwdoFsAU3H%2FPvgK%2F86yWEVdm6AObIVBAU5%2F4ibnV5zA5NA%2F0rs8J9AmrIosThV8%2B7Q12W2LmOq%2BKwQXK8ZGWPYIwl%2FZBPacB76q1ZvfJgfQgC9MYcnuOUACUB%2FfzI8EAF51cNMxS2BTNzNs%2BafrcQDrZ1UXUhja0xWN3%2FZS%2B7kWAOjsC4HO61JLAJIW%2FgDMcl2AxaIkBX6chsKzAJAJMJyX7RoAZl344NiHyOocaluWeQCgKkOjDcD3gTGsx3kHgJ1HAOvPhR672gJOJYHxhwJGgG09%2BTobBsKn%2BnILcnto9dib8%2B9qvk1O%2BwHAyxQ9HwJwLyrW6jD5sQKgDwzg%2BwTuGfYeqAJ9fOHaQwLG0kAaGAWGKOA8oeUx4oYAMDJifXBwBFZrqJuLde4qTgAB3VKYbJDZppbtSHsk1ix18D9gYGPCIxaw8vliIMqZAHoClpeAvqge5%2FJVhxaTMfANWlnypmOOorxEs%2BJEpvsTAHSpVqCogVnTmDcSzPKrDBZknB3GJiBMU7kAyrjLARssT3hvLuKhyWZxvXgxagcw62IRUlGr%2BXiHtQUvQauW5HkDgEprAu%2BSAKPevPlLXXZA%2BEisoOGuu%2FYGOuOyP4leNq7rYO2NcKA9ulqxyCi%2BXA1iW7Y%2BPhvtffkKBnH2AwBrm8uB9wVVqPYf1XZqIPBoBvATNoF5ZNAHywDxb%2FXAwXn%2B6VMswkkrdmc1P37bw7p%2BBSXZpHgBANiCAgUA1Big%2FgwA4KOWATtHKsCYKcAwBFXAzhAghhcEAGplE3z83bq1r6tPtleLs0muDIO%2F930WjTcvBgAwVIK7GqAmgPfFggKOBmrAbaqxUdjBBQA6PTketT3K61ExMi%2B9mphAxW%2FuTlu8ub0Bljou4MdBXYh%2F4wLGXQM8Ak5%2FQ9UcNq%2F8ehQqP6LeA4X0F6uymlRtDCMByeVAHrXWny7mFmtIloFNToXtOuYBU5Fza%2BBm6UxDPbUJ9VQBBg6ENLdymSjIRd8bOjlx%2B6j4Jy9XjCe9Ujlw7vdhLuTB8OLcZtesRALGqc8HsOepnb4PWGUICg5cwAKtaRWA%2Bv7XIzZHhyfp%2BjOuV%2BTyP2rAEzQ3gWVacEVXZLjeXwkAhj1ZwJCrYKsVmxTYC7WcisECJF7r3DR%2BbAUANj%2BHtzzqd9UVVYgkTw%2FAEsS4AidMsp6xRtqwVUADkf9MVIK12nGaAIpJVtZwQKFWn0pblmVkZRAAPj%2BHtjP9pl6%2BLI2kxB%2BATJilMpx%2FbT1Vb7a26oP1GQBaLMh4VALFVPYbwA0vmG%2FSQfuAWjAt1FcWQS8AQkcH2z7tJt9flXFcnftSDvzfmR7WcLCv6t0cQ1IBAIDJHgbAeGlk8r1wezdsg64D7kMzWv5VA2BlQkMHq1b5mOfvnVqkcn0FoHxCCQqsv1JDiVvf1oBDmmZndaTyqx4QMtsMGBcoVhm7DrU6zgNNE7kZsyNLwI0BQj2rq%2FHlub2Dl5I8FRLQNmCmCSwdMOetmhXP59Zn6ndwoY7M9YiNv%2B4o8TsJr9gwvZsTph2uZ%2BzAPXYDGjo51YX9XYD6IiwheW4CiINITaCNJtDk3RLz9XtLggX7lmRK5h5RD7uxNRiKTrUoxsB6VAKPElrJ4G02AmpCP6hfdpP1tfakyc%2FV4Qne4JrA7z4z65lVBWebOcMUaHZd9qpUn7a5d9AmsF3BBHCJwgbn7REChkJtSQI%2BRQn3Z6hcQXM5FQYDiVQO%2FKfU8%2B1bqnSLNl3SLcTu6rTHZyYGSWmfJlV0v4t5WSgUa5j8XzoV7QgKuS55jwA%2BQRUugpvfs32yNfmpEAAHRQOQf5PUtVtv3h2rZJxbWT%2BI%2FVWnhDLw7%2FPVAelWBcoCwH4d4MD9Vp49A0ZL29P%2B9BXE93XQqUayzw0A8CZB4PjnrfV%2B72dhXHnwQjdKJ9pliLE4g3z3%2BQneEJjYSns%2BNBFYqbBfBwBOa%2Fqm8%2FGY3lcb2iOpRdLJCADaWMqBbkmVWlZYJ0ugxcoTPQD%2Bhi%2Bbgf7bPDPAXyy6KbB4hKH4fq3xdRu7HNNOIFGUDiMAcmnupj9f2%2Bw%2BzoJ4%2Fpl%2FAYDyCQDGCM0B48gwB6rpAEDTAt%2F1AD6JCB5w%2BYEb5MHyUOA%2FZG%2Fkt7AkKn5p7sbvLxvjZOuuZnEBgDoAwDkBQCCEAKRSmmxNE1RfBoAKAPAUwMiAAySBQeCngK7YINOKC9KwqEcEem3q4K%2Frljd11V2ZRg8A3rcTAARC4IBFJUsDjv8LABFoAFwElAMPfFOgAy9griBh1G%2FjlwF6ae7g9%2B8b77zuTZXpli4A0CQAOFuQAykBYHn2BACRAMAnwCMvgCowkgATHDw%2FqEhMPNCJAXZpZnLe3Y2dr%2F6ouGQ9AKC4GTigAYCnTaDBzXMNADcHM3Ae4cBuAt9BHwAWUuBC8zYYt1tvAGJXRX18N9dbFARDyYqcAACviQVYXwCQReAfOcBmBR88SXUBNl1FxzQ5J%2FUacIzsiK6WuO0Dbl9Te%2FzdyC3igqqOXGacreXAdMbVJC52H0UApPVcWQPAKTdJzUF0kNKAzfQG3EaY9WOYODm72L4PZlmr%2Fpgu3KJwiGxTvZicYSd9U%2FmZzuaeUtdzajWEkHW9fqjXsYjlEKWdrKIAuashNlunVQCvhO8lRCsu2R81v24lAF6TmR7mvqVcfHgLWih7EAGseionHmsd7n0rqfPXN5cngLr2dCQB%2BI%2BuYVXmiI6wAa3TKEt2SoHgdua%2FI06Lh8dMagjApwTOAW6X2VfroZR6Ce9f0uQPBFBbUE6Mc1j3Cer2pH9VAq7P18sT3Or2gMu7tyaUtD4B9sHXLcP4D99bo4gxcJtnHUATIYC8u5sASkmTraJ2lt8nLf%2FyFWH1ohyYf9tV0ZVJ9ysXq29dR%2BC2CIoE4K3wA8%2BTah8SBwjSxLRBR%2FVgcshv8MYq9TsBNj%2BxOAIOo11rkK6dPkscgFQOOKKm3rZLqOtePwCo%2BssnFgEsJrKr2kUBkaDzqEHBScQJcuN6m0pBATIz5FB6ma%2FPGJaeTGcBKQF1WoBolvvRdv%2BnjWXG6j4tC7ZDbH4FsV%2F1EihTxbCY%2BnwHwMX48HsOCxrAH6PQAl%2B4%2FzIuM5Otw5xc1ZtVqnFL5cDj%2Fzvnd%2Ff1tmoTf0nHXGeFMWXZ55tUKUVRhykIJvQDCmQftGAjxVCHJY0COkmHiuKaNydX04jsQznwfqK49c9LHFepG%2FunCgAzr3VChnmkz%2BiaSgFgUrlPG8aDXk5Je5%2F90lLNxgFCT4dt%2FbIv0VcNDnF6H1qAx%2BVVvI19uolo8K4E1LGDW0gSI%2Brbzj6LMatw4LOO67at4JRC74yxAVvNegY2QwfVcbl2rRcnkAztrQnspS6PDefPV9EJ%2FXsBED101t3Sixn4pdVxbZY%2Bo5NT9wyqWiAaiGBRK%2BJcqqYHRjd669hbvWUuFqh0tREgA5BmAv3RLtE83WUSsF8JM0vjQ505bNTGQBl25hUEgsyAwnSrB0ydsIa0NXOPADpBpO8Xg3J826Llx7kAJAmaWwBfadiyM%2Bvv69Ti6wboq4Q%2BjNZNC04Y17jQQdUVzkAvAx4YRisUzYHWPUARPj0o11E0XyC%2FelEO3P0xTHGdzh1WVnHOsXFow26aMBKaFkfgo4W4egnofT8TfQWpjoYFHp1kmm0Qd0Ed%2BwFCObmf5n6bwPHG9VFWtYUGAAupHEj915EVxXaBKGYocQr0lPsY5IqVQgD78FYF%2BOS4yoojOoJYN0gGVlUrsR4VNa7%2FXCS3wpMEYA1BHhiWBoAv26j5f8YVWBnB%2Fn6Xk2KOz3wwPsEQ3xEmaAHGlV%2FfK3BqLnF%2BjiYAZlnTfjPT1Kb%2FuZFB4AUABexhaoa6AmDNMwBTRQCG%2ByYA08UaQN%2FMM3wBqybAjSxgeSAZDmbAyuJnIoDffAEAYl8T30Shzf%2B%2B0h9F97KPA9BWDE2G%2FlgA0m3LAHa6fMkEPnY9i%2FpyrYuwNtyqo9jFL6YeXKIP12ITbzgrPg2rUK0BAGphelK%2FfvvJfCtU%2F8RNnADAS2lbYCkAy5I%2FwHMrATPHfFY6WBTgt7D7tzzQqSEmGz0Ng9EBdmXQ%2F%2BfL23xdNql21uoHAL2C3eZABACOLgPAYwaAvVAD4Oc1AT7A1xI2wO8qYO57wUoB%2BOLWDmpbMD3vaLgNdNmQx2IuAFBGADA8AAKCMYY1B8CtTwBo8wAAANBnFSsBvgKuyw%2FmSoClRoCZwMFbAXPNgzYAYllk63yN7Q7DifAvMfsTAPTV2LsLkJ1AFa73BgDD5wyAfnmTAJjGXlUH8K1B2xOYjQK7AeAVlg9U3gDJmwhPZ2dTAARvKwEAAAAAAM8QAAAEAAAAawnXBwc9Ojo4QEQ%2BWl8wPa%2BhOKcX01FP8oAMsBIOABhoAa4vukjTpTbw7QCUBwEEuBkBAFsRMAw8OJNHDAVnZImAWIUak%2FwSAUpVfPUcBTnnV0Mg%2FSAMyAJtAAyUM7x34v4uy4K5BQDaHgErEgojgBGgAw9c8LQ1PENBnfgbKsXTDQBCRXb1yDIb4erQtyf4GUAN3gylBTxfGH37W6DrxoEGZyPAHJcF6J5Pg8IHcIDNDYECLoNEXyUV2NQIPjtUH73sWytKeQtq5YoRA8MrR53Gh3jlRR0xYYJb%2FMi6jil68uD5%2ByxAFHY1doChAENNCrZ5MQE%2BQ2Phf2iaL9Do3AYuAFI5Q90jpbZ2%2BTc5h8xbPhRjmIY0W1k8vtaVfTd9gXKc%2Bv23ScICAbqnoW5tIrFqpQYAOjuu70%2B5fgXw3T7XBwJHKi2Gr03cquuf%2F36kJlfyU0j7ehZbmKzmvIp3uxWGDqS%2FAEmJBQoML94GD7M1RLhpIf%2FjowAqPW01dtlGX4hVRng%2BU1oMv7y6Cqbp5rffGOvzVSzasFw0Lz8Cy4D1uODNAy4JuHGHAewRQIB5FViLfZMJAA%3D%3D");
   }
};
acme.AkumeError = function AkumeError(message, src) {
    this.message = message;
    this.src = src;
};
acme.AkumeError.prototype = new Error();
acme.AkumeError.prototype.constructor = acme.AkumeError;


// Test
try {

    acme.eq('[function ByteArray]', acme.ByteArray(0).toString(), 'object name');
    acme.eq('[function ByteArray]', new acme.ByteArray(0).toString(), 'new object name');

    if ({}.__proto__) { // modern browser (include Opera 10.50)
        acme.eq(true, acme.ByteArray(0) instanceof acme.ByteArray, 'instanceof acme.ByteArray');
        acme.eq(true, new acme.ByteArray(0) instanceof acme.ByteArray, 'new instanceof acme.ByteArray');
    }

    var bytes = new acme.ByteArray(10);

    acme.eq(10, bytes.len, 'init length');
    acme.eq(  0, bytes(0), 'init value.');
    acme.eq(undefined, bytes(512), 'out of range');

    bytes.len = 12;
    acme.eq(12, bytes.len, 'expand length');
    acme.eq(0, bytes(11), 'expand in range');
    acme.eq(undefined, bytes(12), 'expand out of range');

    bytes.len = 6;
    acme.eq(6, bytes.len, 'shrink length');
    acme.eq(undefined, bytes(11), 'shrink out of range');

    bytes(0, 0x01);
    bytes(1, 0x02);
    bytes(2, 0x03);
    bytes(3, 0x04);
    bytes(4, 0x05);
    acme.eq(0x01, bytes(0), 'set value1');
    acme.eq(0x02, bytes(1), 'set value2');
    acme.eq(0x03, bytes(2), 'set value3');
    acme.eq(0x04, bytes(3), 'set value4');
    acme.eq(0x05, bytes(4), 'set value5');

    bytes(0, 0xF2);
    bytes(1, 0xE3);
    bytes(2, 0xD4);
    bytes(3, 0xC5);
    bytes(4, 0xB6);
    acme.eq(0xF2, bytes(0), 'overwrite value1');
    acme.eq(0xE3, bytes(1), 'overwrite value2');
    acme.eq(0xD4, bytes(2), 'overwrite value3');
    acme.eq(0xC5, bytes(3), 'overwrite value4');
    acme.eq(0xB6, bytes(4), 'overwrite value5');

    bytes(77, 200);
    acme.eq(78, bytes.len, 'expand length by value');
    acme.eq(200, bytes(77), 'expand length by value set value');

    bytes(29, 256);
    acme.eq(0, bytes(28), 'byte size over1 before');
    acme.eq(0, bytes(29), 'byte size over1 target');
    acme.eq(0, bytes(30), 'byte size over1 after');
    bytes(29, 300);
    acme.eq(0, bytes(28), 'byte size over2 before');
    acme.eq(44, bytes(29), 'byte size over2 target');
    acme.eq(0, bytes(30), 'byte size over2 after');

    alert("done!");
}
catch(e) {
    if (e instanceof acme.AkumeError) {
        var audio = document.createElement('audio'); 
        audio.setAttribute('src', e.src);
        audio.play();
    }
    setTimeout(function() {
        if (bytes) alert(e + '\n\n' + bytes.dump())
    }, 100);
}

})()

http://gist.github.com/336373


bookmarklet:

javascript:(function(){var acme = {}; if (this.acme == null) this.acme = acme;acme.ByteArray = function ByteArray(n) {if (!(this instanceof ByteArray)) return new ByteArray(n);var len = n >>> 0;var bytes = [];var accessor = function ByteArray(index, value) {var i = index >>> 0;if (i === index) {if (arguments.length >= 2) {var ii = i >>> 2;var shift = (i & 3) << 3;bytes[ii] ^= ((bytes[ii] >>> shift ^ value) & 0xFF) << shift;if (i >= len) len = i + 1;}else if (i < len) {return bytes[i >>> 2] >>> ((i & 3) << 3) & 0xFF;}}};accessor.__defineGetter__('len', function() { return len; });accessor.__defineSetter__('len', function(value) {var l = value >>> 0;if (l === value) {len = value;bytes.length = (len >> 2) + 1;}});accessor.dump = function dump() {var buf = [], digit = (len >>> 2 << 2).toString().length;buf.push('--- start dump byte array ---');for (var i= 0, l = bytes.length - 1; i < l; i++) {buf.push('[' + pad(i << 2, digit, ' ') + '] ' + pad((bytes[i] >>> 0).toString(2), 32, '0').replace(/[01]{8}(?=[01])/g, '$& '));}if (len & 3) {var v = bytes[bytes.length - 1], spad8 = pad('', 8, ' ');var last = spad8 + ' ' +(len % 4 >= 3 ? pad((v >>> 16 & 0xFF).toString(2), 8, '0') : spad8) + ' ' +(len % 4 >= 2 ? pad((v >>>  8 & 0xFF).toString(2), 8, '0') : spad8) + ' ' +(               pad((v        & 0xFF).toString(2), 8, '0'));buf.push('[' + pad(i << 2, digit, ' ') + '] ' + last);}buf.push('--- end   dump byte array ---');return buf.join('\n');function pad(v, n, c) {return (new Array(n + 1).join(c) + v).slice(-n);}};if ('__proto__' in accessor) accessor.__proto__ = this;accessor.toString = function toString() { return '[function ByteArray]'; };return accessor;};acme.eq = function akume_iku(expected, actual, message) {if (expected !== actual) {throw new acme.AkumeError((message ? (message + '\t') : '') + 'not equal.\nexpected:[' + expected + ']\tactual:[' + actual + ']', "data:audio/ogg;base64,T2dnUwACAAAAAAAAAADPEAAAAAAAAIgkckMBHgF2b3JiaXMAAAAAASJWAAD%2F%2F%2F%2F%2FgD4AAP%2F%2F%2F%2F%2BqAU9nZ1MAAAAAAAAAAAAAzxAAAAEAAABQS0rPDC3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FMQN2b3JiaXMdAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAwOTA3MDkAAAAAAQV2b3JiaXMWQkNWAQAIAACAIAoZxoDQkFUAABAAAEKIRsZQp5QEl4KFEEfEUIeQ81Bq6SB4SmHJmPQUaxBCCN97z7333nsgNGQVAAAEAEAYBQ5i4DEJQgihGMUJUZwpCEIIYTkJlnIeOglC9yCEEC7n3nLuvfceCA1ZBQAAAgAwCCGEEEIIIYQQQgoppRRSiimmmGLKMcccc8wxyCCDDDropJNOMqmkk44yyaij1FpKLcUUU2y5xVhrrTXn3GtQyhhjjDHGGGOMMcYYY4wxxghCQ1YBACAAAIRBBhlkEEIIIYUUUoopphxzzDHHgNCQVQAAIACAAAAAAEeRFMmRHMmRJEmyJEvSJM%2FyLM%2FyLE8TNVFTRVV1Vdu1fduXfdt3ddm3fdl2dVmXZVl3bVuXdVfXdV3XdV3XdV3XdV3XdV3XdSA0ZBUAIAEAoCM5jiM5jiM5kiMpkgKEhqwCAGQAAAQA4CiO4jiSIzmWY0mWpEma5Vme5WmeJmqiB4SGrAIAAAEABAAAAAAAoCiK4iiOI0mWpWma56meKIqmqqqiaaqqqpqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZqmaZpAaMgqAEACAEDHcRzHURzHcRzJkSQJCA1ZBQDIAAAIAMBQFEeRHMuxJM3SLM%2FyNNEzPVeUTd3UVRsIDVkFAAACAAgAAAAAAMDxHM%2FxHE%2FyJM%2FyHM%2FxJE%2FSNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TNE3TgNCQlQAAEAAAghzTDpIkEIIKkmcQcxCTZhSCCpLrGJQUk4ecgoqR5yRjBpELSheZiiA0ZEUAEAUAABiDGEPMIeeclE5S5JyT0klpIISWOkqdpdJqiTGjVGpLtTYQOkohtYxSibW02lErtZbYCgAACHAAAAiwEAoNWREARAEAEMYgpZBSiDHmIHMQMcagY5AZxhiEzDkFHXMUUqkcdNRBSQ1jzDkGoYIOUukcVQ5CSR11AgAAAhwAAAIshEJDVgQAcQIABknSNEvTPM%2FSPM%2FzRFFVPVFUVUv0TNMzTVX1TFNVTdWUXVE1ZdnyRNP0TFNVPdNUVdFUZdc0Vdf1VNWWTVfVZdFVddu1Zd92ZVm4PVWVbVF1bd1UXVlXZdn2Xdm2fUkUVVVUVdf1VNV1VdfVbdN1dd1TVdk1XVeWTde1ZdeVbV2VZeHXVFWWTde1ZdN1ZduVXd1WZVm3Rdf1dVWWhd%2BUZd%2BXbV33Zd1WhtF1bV%2BVZd03ZVn4ZVsWdlfXfWESRVX1VFV2RVV1XdN1bV11XdvWVFN2Tde1ZVN1ZVmVZd13XVnXNVWVZVOWbdt0XVlWZdnXXVnWbdF1dd2UZeFXXVnXXd02jtm2fWF0Xd03ZVn3VVnWfVnXhWHWbV%2FXVFX3Tdn1hdOVdWH3fWOYdV04Ptf1fVW2hWOVZePXhV9Ybl0Xfs91fV21ZWNYZdsYdt83htn3jWPVbWOYbd3o6jph%2BIXhuH3jqNq20NVtYXl126gbP%2BE2fqOmqr5uuq7xm7Ls67JuC8Pt%2B8rxua7vq7Js%2FKpsC7%2Bt68qx%2Bz7lc11fWGVZGFZbFoZZ14VlF4alauvK8Oq%2Bcby2rgy3LzR%2BXxmqtm0sr24Lw%2Bzbwm8Lv3Hsxs4YAAAw4AAAEGBCGSg0ZEUAECcAYJEkz7MsSxQtyxJF0RRVVRRFVbU0zTQ1zTNNTfNM0zRN1RVNU3UtTTNNzdNMU%2FM00zRV01VN05RN0TRd11RN2xVVVZZVV5Zl1XV1WTRNVxZV05VNU3Vl1XVdWXVdWZY0zTQ1zzNNzfNM01RNVzZN1XUtz1NNzRNN1xNFVVVNVXVNVZVdzfNM1RM91fREUVVN15RVU1Vl2VRNWzZNVZZNV7VlV5VdWXZl2zZVVZZN1XRl03Vd23Vd23VlV9glTTNNzfNMU%2FM81TRN1XVNVXVly%2FNU0xNFVdU80VRVVXVd01Rd2fI8U%2FVEUVU1UVNN03VlWVVNWRVV05ZVVdVl01Rl2ZVl23ZV15VNVXVlU3Vl2VRN2XVd2ebKqqx6pinLpqrasqmqsivbtq27rqvbomrKrmmqsq2qqu7Krq37sizbsqiqrmu6qiybqirbsizruizbwq66rm2bqivrrizTZdV2fdu36arr2r4qu77uyrKtu7ary7pt%2B75nmrJsqqZsm6oqy7Ls2rYty74wmqZrm65qy6bqyrbrurouy7Jti6Ypy6bqurapmrIsy7Lty7Js26or67Jry7bvurJsy7Yt7LIrzL7qyrbuyrYtrK5q27Jv%2B2xd1VUBAAADDgAAASaUgUJDVgIAUQAAgDGMMQahUco55yA0SjnnHITMOQghpJI5ByGEkjLnIJSSUuYchFJSCiGUklJrIYRSUmqtAACAAgcAgAAbNCUWByg0ZCUAkAoAYHAcTTNN15VlY1gsSxRVVZZt2xgWyxJFVZVl2xaOTRRVVZZtW9fRRFFVZdm2dV85TlWVZdv2deHIVFVZtm1d941UWbZtXReGSqos27at%2B0Yl2bZ13RiOo5Js27rv%2B8axxBeGwrJUwld%2B4agEAgDAExwAgApsWB3hpGgssNCQlQBABgAAYJBSRimljFJKKaUYU0oxJgAAYMABACDAhDJQaMiKACAKAABwzjnnnHPOOeecc84555xzzjnnnGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGBMAsBPhALATYSEUGrISAAgHAAAQUghKSqWUUkrknJNSSimllFIiByGUUkoppZQSSSellFJKKaWUxkEppZRSSimlhFJKKaWUUkopJZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKQUAmDw4AEAl2DjDStJZ4WhwoSErAYDcAABAKeYYk1BCKiGVEEIolWMQOiclpNRaCSm0EirooHWOQkottVZSKiVlEkIIoYQSSmmllNRKySCEEkIpIYSUSiklhJZBCSmUUFJKJbXQUiklgxBCaSWkVlJrKZRUUgalpBJKSqm01lIqKbUOSkultNZaKymFVFpKHZSSWkqllNZaKK211jpJpbSQWkuttVZaKaV0llIqJbXWWmqtpZRaCaW00kprpZTUWkuttVRSay21llpLrbWWWiullJRaaq211lpqqaTUUgqllFZKCqmlllorqbQQQksllVZaaa2llFIqoZRUUmqppNZaSqGVFkorJZWUWiqppJRSS6mEUkpIqYRWUkutpZZaKqm01FJLraRSWioppVIAANCBAwBAgBGVFmKnGVcegSMKGSagAAAAEABgIEJmAoECKDCQAQAHCAlSAEBhgaF0oQtCiCBdBFk8cOHEjSduOKFDCwQAAAAAAAcAfAAAHAxARERzDQ4PEBESExQVFgAAAAAAAAAAAAAAAAJPZ2dTAAAAlgAAAAAAAM8QAAACAAAAGtUfekwBAQEBAQEBAQEBQDs9RkVGREdCQzg%2FOTs0PEA8Q0JAQjo9Ozw7Oz09Qz5AQDs9QUE%2FQEE%2BPUI%2FQT5COkREPjw%2BPD49OkI0O0E6PUZHAAAAAAAAAAAAADJFx%2ByDEnNGuon5VA7cX1kfV%2B7t%2BOnC9PW904tzU1%2BZ8mSsTMlEeko68KkO3BB754VgH9hzxAI49hHH%2F4cpxQFGQ6PPYtHlap0m5lM58NV9Ol4Wut1WFW6qiiTXczp94ffj%2BAW4dw1V244KLl%2FGCwKJUEhCZ7DDr1jyCDpDzWY9mP0V1k1WrQTUIItyhnOq6rM%2FvyYilm248vuqcRL%2B%2FYbzEcpMwnES6c8DaWIei7E34FP8fU78CgAyVbmwQ7xfrSBusj3ltBju%2FOq0Ou7ci3uzOvbebGfzPM%2FzPG%2F68c3fYBxZsli4kGcAy4GGDTOi%2FzQIlIYeoC6AbcdgYAEAOlOFtZD7tRuFJr4%2BgKZBmpxh6xLlmCU51if%2F1bcdp7RMa6fmHd5m1THGzDZ3pDUUfRrNhjTrAouzXcKVo1DXPRZSpfEBRlMTf1TwGxZOQ%2FWKDwkAqOWcoTKAmZpUFZ6ndpPvYg%2FlFl9WuTsLnWlomDDK8LTkn5g%2B0bTJlaQrZ7QGYI4rYrI1lJcCAE5d%2FXxUrK%2FeOCWjon8WkBLodeAcWFaztl0bKWJm7Zl1Z0RDfbu0Tk9siHtIVC5AK4pRdJqS6nXQfLtOMPGXeXu982I2WlexOpbTtz%2FghbcyeQaoE14%2BlRZDs4t1Lb9NSun2Z%2B3sYE0U04Ar5iiatCil%2FiY66tQzdDIsaSBOWPUJekbo7%2BZ7eN1EAgBeXXT1yOEQ18Uf9a34BAnQlivUKQfm9M%2Fa9inhy77JI9zK%2BubCqvwzhcn%2F5YMYWFGyw%2BDiWOBA30hBepQbpI%2FRuxpOd5NV%2F56qy59BHHmdHYBGEyXIGW7n3SGN5Kzf%2FW%2BuA3yijTQAYovLCuOrqRlaQAXO8GWhDsyAvaoa1zXkqjOzegEARnHyolSpt3UVcwKvlGolgDqx0VA58DbpDYK3iy8JD8H%2BU%2BB5dQOy4FsK9vUYAGw%2BcC404FkSiABeX7g%2B5hAM3c2FZcz%2FBACUL9VaGKqbtuvnFiamtQaY%2BxcxN60SYb9uEPauA7%2FnCVYBDGK%2F868lZwCglFdDBwB2bVAfa6ie4zBvnbjJHyBAP2NoYJjVxNq2Kce8fwAwApiDC7RCwT6wLT0THh00210arEilzX5WBwByZXhy7EO0p6%2BEOLn8hwEom0s5Q36wJEcOMzsIwJEAgONyAnaYU0%2Bw224ce3etMcFUtRi4KUt3ur8AAG5ldOs448X7cgl2qvcDgPUxWzlQi0oAT1%2BoWZD%2FAV5tA6tPJq1J2DBwCSQswWxgopXVrAByYXhy7G2%2Bq0PiME%2F6BAB0NeaVA2sOgP3fUnTmcwM04ZEAXHml4m6uBkVpZdcN204UgiTdStLL5Km5tQJiV%2FXBsbyw%2FnUT3x9T2ScA0JYlJwXYsxww852%2FzXF%2FQuvZCINLG8YvnoH9gnmVobmSxnxCFn3lfUpQck0%2BEywnRnXb06i2qF5PAczcxCkBeGJwObDuqbHmgZtp28PtxAJ%2Fq36wDlidtTgxCKTe9gACGvSU2NwUngP%2BBtYCQkeHDnzKea%2FFmRp1rDGeiglAInA5EF272vZAneeTR9ZqKwZcdRC7%2B%2Brjcr0BG9Harg%2F%2BKAqKgfyZsGSGzqhTbOUtCk5NvYvVl6q315tNeSYs%2BWcSgG7ldDGBbN1UC7y53Qbg6QpPprg%2B4lYaUI1BvEn%2F%2BdCBqtxKAsFjPvQEwTiXzFyCBlZV%2BIHzKk58LqaaSpRNOqkB8EJxyAU8CY53T%2BrwRLoYt%2FIAQe%2BTcAS32ze4xQHGGwIMr1SgkJOPAP3iG9NKRQBWV3H16OOXen%2FTNf7RegHTAOsiZ8jymDHLPaOq%2BgCAPqvYasB5dBDYjA%2FAuw3k84YaH2gv%2FPCuOMG23rTVab2X1gBSU5PieDdc1RBdZ2ftXDnD%2BLU7YhipGtB9PBqAmvq6WQ2sQEN%2BfdHBUMB1M8BAVeuBMqpJWU1yCygAPjX54BC6XKPBfiVVWwMG6lrlwP8e4b3NL8fxe6NFZpX6myyncQWlqttYun0Hhxr4oQAkZolOmQwkQtiMCi47RZVNdr2immLOr15U4JL33WZMxf5zE%2FpEVWKk3dF4QKHteT2vWaTB3iABrnpo2NXwe9TAUKDPVtAAQjHV1vEtdr1jVFZ1VpsJDFBMDjTrgpnJYTX503JPrbWdacsC4GPYUhMKVuobNkrZYWCwQMF%2BXcXpZdEJTk%2FbuX98v6%2Ba8YaMytxTOUO%2BSOgarXG9P4CGUXnRaSnI%2BjZ9Z1OCEpNr9k6QWh2SuaVblR7%2BwrSpAABGSYfqMn6uuritGrXplAd0TzCvHKg%2BAU0H4qYURV%2Fk4jGeCU1LyaQ6dOClOrqup%2Bugoulgv1HCFfjzAD5BB33%2F%2Fr714vxFtb4BesDicuCXWjDLDcbqQ1B3nRLoHqmEDX0YY4Pu6MyoWhnDLMDcjGnsyJI2YvDiyQwuMdOD8suuHM46Za5WACJAUYFjYV1Z%2Fv8lIdEL6wvD0NN%2F1QULs3NR%2FErSR0mWSivWDZRRmEcptBXdzi48Ojl2Wp25WiPrJE%2BRgAWYJRe4P8%2FaZ%2BlN%2F39Jr%2Fzss6LpMiFneX0pi86cPzyzC%2FN5JKDpkLZr3cCmQV9Edp8vSpnxBTY%2Fppcwmm%2FQpPlUzvD5K%2FOg%2FFwsnD1XxSyyx%2BEK7%2BeZd2H5TZyvWefRhTFoO7YLxuB4tDGaK1p8XKWozgQAOkHN%2ByCUXEET1VaHDIBUDixNkba1edb%2BS9u6dKi%2FBbzgzFQxCN2%2FfUudYTOTbwkvOtH6lUJnpDBzFg3xsldbIkJDg%2FYHwhU06dzUuAQoyoHbTzTHui3nkq8z8aSQORhdDN0yLWSiOTK6UzJiN2rTddg%2FqXYBBK77JpeQoxTzhwA6Q6X0xmj1Cpp0igDgSOVAY5Yly8dxy%2B7RREha1Fx7RvJtA5EKk5i5hKyDNzH7DCyiUAV6U3DsKvLtVTpDXYwoXi%2Bg0TlaQB4U5YBz2nnuE9vtjDp%2FfGmiF9ikxu1SKUWkcJn8BA3MUGjTSKRZT5oIE%2FxkIv5GS6o2QUPh6UHgxZa5UfXkBobpV93lczfz58d0vT1HqPXCbm3rJLTsb4HcpgUlGx0TLvPn1gfLuMmh2Qh2RXPWfYw2AD5tW3Xr4ub9bZvtLuLcHADI5glc6eyS1OWi4t%2Fedirlc8ANcOXzGaxUVgFnkCh42o%2FvKroL%2BNDwh1JMrhrXW0ACXm%2B9%2BriG6YYCop7fkjoBCFirJQDWNeC4B7NkjbGU1bvuK3DbKbkHjHwl0LB67ScF%2F2EmkODcJQhHNSwG2lQGamFTfzyDs%2FIVSseOrAeQCYYGoLonIE3HzLwDsKtmasqtQT2Se4ii2o8VmAMjgbetm7YJmEs4m4J6MY0X5NfOAE5RW71jh3Z1cPmcibwDGvC2FKDSEzD3BW4juKkbPWkdlTuX4o4vxXYyFQxgi7YQsyMoNHdZxdSDs0YyJrcY6cQHRlOHJsef8Lp05O9IfwwAbF450D73SAAqy6WugGTDwiPUJtjhSHmi2S6GZTdt7UXzaT3WUQCuP1P1iJ4XzwFGVRd6%2FenruczYNso%2BBQCQtQage6BpmgaOJrH0WYnUjIb2xqdUMP5cP3QidSTFVqCXQENmp6QeViuC3B4FQksH0%2Bp80vXbEuGzJDBAMQNwP1QdT%2FdlnyXVyySUw4iyrcyl9qPuWl00kqC7W4NmE9CJikqmXoKpWXZqqfrGny4FNjO9w%2FHVr5odeCeeBQYAV87QVhzW%2B7pMVK4lT3ucu93ZnF6v7B6Y3zxMbjaaWGsTbJDJQ9C7%2B6ObHw9D%2FpUANjuy7%2F816OmrCuQqpVrHDKBKOTD5NM0%2F7d%2FSSmORe%2Feu8DxYi3OL1xwmyKoldhL42jQdozUK1iS6S6XbhSu0eRdCN6Rf7XnbK1gPewKpNgZCAq2c4UhL67H7dfpIoZaOceHfZyXHvHEHP%2F7UOvjUD1b2lAA4q1wA%2BPzrP38CAEo707p%2FfH8uk08tFThFgA1QxS0M801aV%2B8vBJr7h5%2BDSGGF%2F8mHtgax0BZzIWCYWJBb35pQBxLnj8Qc7HUhqjIkAEZJh%2Bpq%2BF2uuGpDekvlDB9l2eb8795QrPfKBwuAK8bmQyg%2FVZ5CmTZg6BoMTYDAuSRvUCDq0l%2FkEgAyMdsr3vW%2B%2BnWozqTOKuACtMkZ7o95zsO5r4uBa9bZg20B2dfeRaKbBDnWZj%2BnGNYEi%2FoXQ0lTu2sAWULRG6HjT28uAT43vdXqtG%2BYsQUC5zgHQPLkDM4n9%2FyWxcKztAlaojEESpBrTjb7RNyPjCX7PZ85FalC71WNF3gIJnBqpxhL4ioVJdcAOjXFQZ%2Bvhsu3DXD6kAC0BuBIbX92gKWp%2BpK%2BzG06aVfHVq6kWXK%2B9uY4SMcsXG3zsBiIgjRjEae5i7f3HAFCOXS7VQ39FcTnCMCBohw4PpjmbFLeRM91N01lMhY7pUnEYCOaeHHIDZuFDyR2httAB5j4x2QG05Fc3AVKP0mviCZOX1UxjaoX5cDvR9WbhReX6%2BrHPHSIlJ19Vq4tu35hocjR7QTyew04k8vh9PHoeGDMVNVdxFz0I0JDpY84rS6giS2VFsPL%2B9X1zv30eHad%2Bk674cWG0M4NlYGAYetoNhUHBRzsm6iWowF57%2BleFpIp9PsEAEI3aKU%2B3ZdXhFCjcxwMILUAYalsmjd%2F9%2B8f6zrCvLuH29CHQVY%2B0MrXgdvI1%2BEqPlVUKDxAWhD%2BfPDl%2Fv8BQjfVanV%2By%2Bt3hRYZeSsSDlzy15mGgq8LdWXfZjStSjNAcahPmeRcJE7gSmyyjQVbKc5zFswyjzTVKAaTAkpXF2zvdLsvL1UjLZr2Vg7cf9C9Yvqr6ni4Yuf8AgA855OeAoOGSBr6LRmahCsK4BeXgcRR5%2BGwtFdeW9v6%2BJN%2FdqNvL8lVrX01T%2BCzOAyJaQpd43jUKwkAOq7P44UAwKbtguJWVteSgKnNZYsJNwXY1eL8zaXY0UAbWRx2ZRN%2F%2FDb3TncEM3viMCIegFUFuP8SwC3jEvBzqBSwtFUH8NmZAAQA%2FoDdNFQUWO5zLo4AbmUTffxh694NV1ZktPcR5ICrOc318zSw8zwaAOzcegKwbAQGVz3BfZut6%2BDHtoG5FeAWeOTfCu9eRwFSU3h69Dbd%2FALTIVj2KQFAW4gpZ%2BjuMzezd1gmq8sDVtZbBMDfEiKcZ%2B2l18DWBmmyEIBfJ1zLGrBdAlpfynINAD43cHCk10K%2FGILJOk%2BFAIBmLSkMufqyttqvLV7fIMAH1%2FUI5%2FaBMi6wXcAOCbYyEpmLA8BRneexAgBCM%2FjmoyLu8SAT4Qg%2BeN8mOPA2CeEM7VuG63pTtNEfhwD2dlzXPwCx73VW8iak%2FT0H9pPfbgD3%2FSuRvwQASm%2F8psPQJJ6XQ6YvwSmdcxCAbjoYMXRrqPOeCSr6e%2FUWBzzwBMD9SbwzD5UE%2B30Hj1QviHhgDjTYtDTwCDYybJajeh4AAFZzciv7%2FiLPdKQlXaJffB4MKDoBUIEQJoblGJV%2B%2F3bBl%2B8A9F2DZEnIwwD2P4LVBdjKwGrjg9tvgBNyOziNATD2uvJzyAQAT2dnUwAAAB4BAAAAAADPEAAAAwAAAOzm%2F1ZEPTo0QUVCPkRCQDk%2FOkJCSEQ5QUBCPjcxNDNANzg5PDk%2FPT08Pzs9Rjo7NTU2NTlDSEc%2FOkM6Ozw9PT4%2BOj8%2FQzU3Pj5uX%2BLgfHkv7q%2BziNR4Kp8A8FK5hpyh60HdW1QGNHBziQDAWcULNSCBymAzLi8FGACbjQk%2FNwLDTxm3eAkAXlWxfzyb11s%2FOBjt8xkAsGwNDF0eAObY79UBgOdydQHXmwcAbIakXwNolY65Jxo30IVJgA%2FczFSdAHJjfXn8YcuuLjioX%2Flr97RMDny%2BZyXgdQKA4RcAYKolYAzAGMyT7QDACLhWNZHTpTgfqwFiXdPi2Fu58Y2ZstKfgAawlBZDdqUZ%2BkqqYx5V6rDAdjymgKVXkIG67sq%2BpsNCKl1fQqBp%2FNQzFCCoHskbtusDAFZdW73jQLmqFTpLfwIwvObGGPpnmYj2StL3i28NexgEEsVGgjrtwr5sCDAvaLodV9o5OH1GT8NW9tl4bwqZEKln2HsFAE5ZB72jYrt6AKw5Z0KC5MnlDJWlZDaWFNs8k4evJAq14tV1D%2FGgr6Z3NvGcuMqddIftkInA7JxNpcyJnr990TcCAGZbdf%2B4BkXnC2cr8gkARFEObLcYW5bIryvOboRhGBLMt1Vhg0mXygYOM5U9NOGp2%2FNEAWCEbdQ9ycwI4%2B8sVnP1auvFxaJPoreEN%2BvkAMhGFh4xHH1WjVTWtc5NnCdijfQB%2BFVZVvxAAks%2BngOMx2tDFuAgLPWQagx2AD2B7i1tAgA2O1sr5fwztUuV0K3%2Bhk7tDAA4p3KGJnmzuma5H1%2BCT2CWy8IRdhsVbJI0Y7MGEDbvSYDeGXvnuk5KOCG8JSUKHQA%2BP9JWw22SC2ap%2BhvXALz6G5u3z106fTzd3mbWvfusLGf7pPRtl2bcSzVKg6CvGjCGVSZAgy8FzbFU7F33Rp4CPj%2FKF1NDfQHZ86kcuHN0i2dbrM%2FddR1U5SudLm5kGtlUo8BbrTZJ5AeTmy2Qw4AOxJqPiZVnsrMcQkGdTxilvkAT1ZPLgUsv0Vmf116oS%2BeK9f15U2RtbVg6WNVdCZLWdVTp20g9rVSxUydIhcQrRqm0qwzt1YYGLkMuepPQB2jyauNoMCCVA%2FlEs97PNE%2B2tKojOtgJKxmUaq87KIdZpwQm%2B6dDuwaBYQDMLjrEm6XuAUI%2FoV%2BEQV4uWGUXOrcDpENywoHjX0u7L9v3e%2B%2F7RLJDd7LcdiCsCyEM7KWJ1UAb%2FMbrkJ0WA0Qr6krI%2BIILK%2FqGODY97JPuSeYwkyb0GTrXDYAnklMEILse0W1p0ttnhyUZs4aC%2BVvCVtmAMkwdoFsAU3H%2FPvgK%2F86yWEVdm6AObIVBAU5%2F4ibnV5zA5NA%2F0rs8J9AmrIosThV8%2B7Q12W2LmOq%2BKwQXK8ZGWPYIwl%2FZBPacB76q1ZvfJgfQgC9MYcnuOUACUB%2FfzI8EAF51cNMxS2BTNzNs%2BafrcQDrZ1UXUhja0xWN3%2FZS%2B7kWAOjsC4HO61JLAJIW%2FgDMcl2AxaIkBX6chsKzAJAJMJyX7RoAZl344NiHyOocaluWeQCgKkOjDcD3gTGsx3kHgJ1HAOvPhR672gJOJYHxhwJGgG09%2BTobBsKn%2BnILcnto9dib8%2B9qvk1O%2BwHAyxQ9HwJwLyrW6jD5sQKgDwzg%2BwTuGfYeqAJ9fOHaQwLG0kAaGAWGKOA8oeUx4oYAMDJifXBwBFZrqJuLde4qTgAB3VKYbJDZppbtSHsk1ix18D9gYGPCIxaw8vliIMqZAHoClpeAvqge5%2FJVhxaTMfANWlnypmOOorxEs%2BJEpvsTAHSpVqCogVnTmDcSzPKrDBZknB3GJiBMU7kAyrjLARssT3hvLuKhyWZxvXgxagcw62IRUlGr%2BXiHtQUvQauW5HkDgEprAu%2BSAKPevPlLXXZA%2BEisoOGuu%2FYGOuOyP4leNq7rYO2NcKA9ulqxyCi%2BXA1iW7Y%2BPhvtffkKBnH2AwBrm8uB9wVVqPYf1XZqIPBoBvATNoF5ZNAHywDxb%2FXAwXn%2B6VMswkkrdmc1P37bw7p%2BBSXZpHgBANiCAgUA1Big%2FgwA4KOWATtHKsCYKcAwBFXAzhAghhcEAGplE3z83bq1r6tPtleLs0muDIO%2F930WjTcvBgAwVIK7GqAmgPfFggKOBmrAbaqxUdjBBQA6PTketT3K61ExMi%2B9mphAxW%2FuTlu8ub0Bljou4MdBXYh%2F4wLGXQM8Ak5%2FQ9UcNq%2F8ehQqP6LeA4X0F6uymlRtDCMByeVAHrXWny7mFmtIloFNToXtOuYBU5Fza%2BBm6UxDPbUJ9VQBBg6ENLdymSjIRd8bOjlx%2B6j4Jy9XjCe9Ujlw7vdhLuTB8OLcZtesRALGqc8HsOepnb4PWGUICg5cwAKtaRWA%2Bv7XIzZHhyfp%2BjOuV%2BTyP2rAEzQ3gWVacEVXZLjeXwkAhj1ZwJCrYKsVmxTYC7WcisECJF7r3DR%2BbAUANj%2BHtzzqd9UVVYgkTw%2FAEsS4AidMsp6xRtqwVUADkf9MVIK12nGaAIpJVtZwQKFWn0pblmVkZRAAPj%2BHtjP9pl6%2BLI2kxB%2BATJilMpx%2FbT1Vb7a26oP1GQBaLMh4VALFVPYbwA0vmG%2FSQfuAWjAt1FcWQS8AQkcH2z7tJt9flXFcnftSDvzfmR7WcLCv6t0cQ1IBAIDJHgbAeGlk8r1wezdsg64D7kMzWv5VA2BlQkMHq1b5mOfvnVqkcn0FoHxCCQqsv1JDiVvf1oBDmmZndaTyqx4QMtsMGBcoVhm7DrU6zgNNE7kZsyNLwI0BQj2rq%2FHlub2Dl5I8FRLQNmCmCSwdMOetmhXP59Zn6ndwoY7M9YiNv%2B4o8TsJr9gwvZsTph2uZ%2BzAPXYDGjo51YX9XYD6IiwheW4CiINITaCNJtDk3RLz9XtLggX7lmRK5h5RD7uxNRiKTrUoxsB6VAKPElrJ4G02AmpCP6hfdpP1tfakyc%2FV4Qne4JrA7z4z65lVBWebOcMUaHZd9qpUn7a5d9AmsF3BBHCJwgbn7REChkJtSQI%2BRQn3Z6hcQXM5FQYDiVQO%2FKfU8%2B1bqnSLNl3SLcTu6rTHZyYGSWmfJlV0v4t5WSgUa5j8XzoV7QgKuS55jwA%2BQRUugpvfs32yNfmpEAAHRQOQf5PUtVtv3h2rZJxbWT%2BI%2FVWnhDLw7%2FPVAelWBcoCwH4d4MD9Vp49A0ZL29P%2B9BXE93XQqUayzw0A8CZB4PjnrfV%2B72dhXHnwQjdKJ9pliLE4g3z3%2BQneEJjYSns%2BNBFYqbBfBwBOa%2Fqm8%2FGY3lcb2iOpRdLJCADaWMqBbkmVWlZYJ0ugxcoTPQD%2Bhi%2Bbgf7bPDPAXyy6KbB4hKH4fq3xdRu7HNNOIFGUDiMAcmnupj9f2%2Bw%2BzoJ4%2Fpl%2FAYDyCQDGCM0B48gwB6rpAEDTAt%2F1AD6JCB5w%2BYEb5MHyUOA%2FZG%2Fkt7AkKn5p7sbvLxvjZOuuZnEBgDoAwDkBQCCEAKRSmmxNE1RfBoAKAPAUwMiAAySBQeCngK7YINOKC9KwqEcEem3q4K%2Frljd11V2ZRg8A3rcTAARC4IBFJUsDjv8LABFoAFwElAMPfFOgAy9griBh1G%2FjlwF6ae7g9%2B8b77zuTZXpli4A0CQAOFuQAykBYHn2BACRAMAnwCMvgCowkgATHDw%2FqEhMPNCJAXZpZnLe3Y2dr%2F6ouGQ9AKC4GTigAYCnTaDBzXMNADcHM3Ae4cBuAt9BHwAWUuBC8zYYt1tvAGJXRX18N9dbFARDyYqcAACviQVYXwCQReAfOcBmBR88SXUBNl1FxzQ5J%2FUacIzsiK6WuO0Dbl9Te%2FzdyC3igqqOXGacreXAdMbVJC52H0UApPVcWQPAKTdJzUF0kNKAzfQG3EaY9WOYODm72L4PZlmr%2Fpgu3KJwiGxTvZicYSd9U%2FmZzuaeUtdzajWEkHW9fqjXsYjlEKWdrKIAuashNlunVQCvhO8lRCsu2R81v24lAF6TmR7mvqVcfHgLWih7EAGseionHmsd7n0rqfPXN5cngLr2dCQB%2BI%2BuYVXmiI6wAa3TKEt2SoHgdua%2FI06Lh8dMagjApwTOAW6X2VfroZR6Ce9f0uQPBFBbUE6Mc1j3Cer2pH9VAq7P18sT3Or2gMu7tyaUtD4B9sHXLcP4D99bo4gxcJtnHUATIYC8u5sASkmTraJ2lt8nLf%2FyFWH1ohyYf9tV0ZVJ9ysXq29dR%2BC2CIoE4K3wA8%2BTah8SBwjSxLRBR%2FVgcshv8MYq9TsBNj%2BxOAIOo11rkK6dPkscgFQOOKKm3rZLqOtePwCo%2BssnFgEsJrKr2kUBkaDzqEHBScQJcuN6m0pBATIz5FB6ma%2FPGJaeTGcBKQF1WoBolvvRdv%2BnjWXG6j4tC7ZDbH4FsV%2F1EihTxbCY%2BnwHwMX48HsOCxrAH6PQAl%2B4%2FzIuM5Otw5xc1ZtVqnFL5cDj%2Fzvnd%2Ff1tmoTf0nHXGeFMWXZ55tUKUVRhykIJvQDCmQftGAjxVCHJY0COkmHiuKaNydX04jsQznwfqK49c9LHFepG%2FunCgAzr3VChnmkz%2BiaSgFgUrlPG8aDXk5Je5%2F90lLNxgFCT4dt%2FbIv0VcNDnF6H1qAx%2BVVvI19uolo8K4E1LGDW0gSI%2Brbzj6LMatw4LOO67at4JRC74yxAVvNegY2QwfVcbl2rRcnkAztrQnspS6PDefPV9EJ%2FXsBED101t3Sixn4pdVxbZY%2Bo5NT9wyqWiAaiGBRK%2BJcqqYHRjd669hbvWUuFqh0tREgA5BmAv3RLtE83WUSsF8JM0vjQ505bNTGQBl25hUEgsyAwnSrB0ydsIa0NXOPADpBpO8Xg3J826Llx7kAJAmaWwBfadiyM%2Bvv69Ti6wboq4Q%2BjNZNC04Y17jQQdUVzkAvAx4YRisUzYHWPUARPj0o11E0XyC%2FelEO3P0xTHGdzh1WVnHOsXFow26aMBKaFkfgo4W4egnofT8TfQWpjoYFHp1kmm0Qd0Ed%2BwFCObmf5n6bwPHG9VFWtYUGAAupHEj915EVxXaBKGYocQr0lPsY5IqVQgD78FYF%2BOS4yoojOoJYN0gGVlUrsR4VNa7%2FXCS3wpMEYA1BHhiWBoAv26j5f8YVWBnB%2Fn6Xk2KOz3wwPsEQ3xEmaAHGlV%2FfK3BqLnF%2BjiYAZlnTfjPT1Kb%2FuZFB4AUABexhaoa6AmDNMwBTRQCG%2ByYA08UaQN%2FMM3wBqybAjSxgeSAZDmbAyuJnIoDffAEAYl8T30Shzf%2B%2B0h9F97KPA9BWDE2G%2FlgA0m3LAHa6fMkEPnY9i%2FpyrYuwNtyqo9jFL6YeXKIP12ITbzgrPg2rUK0BAGphelK%2FfvvJfCtU%2F8RNnADAS2lbYCkAy5I%2FwHMrATPHfFY6WBTgt7D7tzzQqSEmGz0Ng9EBdmXQ%2F%2BfL23xdNql21uoHAL2C3eZABACOLgPAYwaAvVAD4Oc1AT7A1xI2wO8qYO57wUoB%2BOLWDmpbMD3vaLgNdNmQx2IuAFBGADA8AAKCMYY1B8CtTwBo8wAAANBnFSsBvgKuyw%2FmSoClRoCZwMFbAXPNgzYAYllk63yN7Q7DifAvMfsTAPTV2LsLkJ1AFa73BgDD5wyAfnmTAJjGXlUH8K1B2xOYjQK7AeAVlg9U3gDJmwhPZ2dTAARvKwEAAAAAAM8QAAAEAAAAawnXBwc9Ojo4QEQ%2BWl8wPa%2BhOKcX01FP8oAMsBIOABhoAa4vukjTpTbw7QCUBwEEuBkBAFsRMAw8OJNHDAVnZImAWIUak%2FwSAUpVfPUcBTnnV0Mg%2FSAMyAJtAAyUM7x34v4uy4K5BQDaHgErEgojgBGgAw9c8LQ1PENBnfgbKsXTDQBCRXb1yDIb4erQtyf4GUAN3gylBTxfGH37W6DrxoEGZyPAHJcF6J5Pg8IHcIDNDYECLoNEXyUV2NQIPjtUH73sWytKeQtq5YoRA8MrR53Gh3jlRR0xYYJb%2FMi6jil68uD5%2ByxAFHY1doChAENNCrZ5MQE%2BQ2Phf2iaL9Do3AYuAFI5Q90jpbZ2%2BTc5h8xbPhRjmIY0W1k8vtaVfTd9gXKc%2Bv23ScICAbqnoW5tIrFqpQYAOjuu70%2B5fgXw3T7XBwJHKi2Gr03cquuf%2F36kJlfyU0j7ehZbmKzmvIp3uxWGDqS%2FAEmJBQoML94GD7M1RLhpIf%2FjowAqPW01dtlGX4hVRng%2BU1oMv7y6Cqbp5rffGOvzVSzasFw0Lz8Cy4D1uODNAy4JuHGHAewRQIB5FViLfZMJAA%3D%3D");}};acme.AkumeError = function AkumeError(message, src) {this.message = message;this.src = src;};acme.AkumeError.prototype = new Error();acme.AkumeError.prototype.constructor = acme.AkumeError;try {acme.eq('[function ByteArray]', acme.ByteArray(0).toString(), 'object name');acme.eq('[function ByteArray]', new acme.ByteArray(0).toString(), 'new object name');if ({}.__proto__) {acme.eq(true, acme.ByteArray(0) instanceof acme.ByteArray, 'instanceof acme.ByteArray');acme.eq(true, new acme.ByteArray(0) instanceof acme.ByteArray, 'new instanceof acme.ByteArray');}var bytes = new acme.ByteArray(10);acme.eq(10, bytes.len, 'init length');acme.eq(  0, bytes(0), 'init value.');acme.eq(undefined, bytes(512), 'out of range');bytes.len = 12;acme.eq(12, bytes.len, 'expand length');acme.eq(0, bytes(11), 'expand in range');acme.eq(undefined, bytes(12), 'expand out of range');bytes.len = 6;acme.eq(6, bytes.len, 'shrink length');acme.eq(undefined, bytes(11), 'shrink out of range');bytes(0, 0x01);bytes(1, 0x02);bytes(2, 0x03);bytes(3, 0x04);bytes(4, 0x05);acme.eq(0x01, bytes(0), 'set value1');acme.eq(0x02, bytes(1), 'set value2');acme.eq(0x03, bytes(2), 'set value3');acme.eq(0x04, bytes(3), 'set value4');acme.eq(0x05, bytes(4), 'set value5');bytes(0, 0xF2);bytes(1, 0xE3);bytes(2, 0xD4);bytes(3, 0xC5);bytes(4, 0xB6);acme.eq(0xF2, bytes(0), 'overwrite value1');acme.eq(0xE3, bytes(1), 'overwrite value2');acme.eq(0xD4, bytes(2), 'overwrite value3');acme.eq(0xC5, bytes(3), 'overwrite value4');acme.eq(0xB6, bytes(4), 'overwrite value5');bytes(77, 200);acme.eq(78, bytes.len, 'expand length by value');acme.eq(200, bytes(77), 'expand length by value set value');bytes(29, 256);acme.eq(0, bytes(28), 'byte size over1 before');acme.eq(0, bytes(29), 'byte size over1 target');acme.eq(0, bytes(30), 'byte size over1 after');bytes(29, 300);acme.eq(0, bytes(28), 'byte size over2 before');acme.eq(44, bytes(29), 'byte size over2 target');acme.eq(0, bytes(30), 'byte size over2 after');alert("done!");}catch(e) {if (e instanceof acme.AkumeError) {var audio = document.createElement('audio');audio.setAttribute('src', e.src);audio.play();}setTimeout(function() {if (bytes) alert(e + '\n\n' + bytes.dump())}, 100);}})()

とっても楽しかったです。


<参考>