Add jsbench
[c11concurrency-benchmarks.git] / jsbench-2013.1 / amazon / firefox / urm.js
1 /* Replayable replacements for global functions */
2
3 /***************************************************************
4  * BEGIN STABLE.JS
5  **************************************************************/
6 //! stable.js 0.1.3, https://github.com/Two-Screen/stable
7 //! © 2012 Stéphan Kochen, Angry Bytes. MIT licensed.
8 (function() {
9
10 // A stable array sort, because `Array#sort()` is not guaranteed stable.
11 // This is an implementation of merge sort, without recursion.
12
13 var stable = function(arr, comp) {
14     if (typeof(comp) !== 'function') {
15         comp = function(a, b) {
16             a = String(a);
17             b = String(b);
18             if (a < b) return -1;
19             if (a > b) return 1;
20             return 0;
21         };
22     }
23
24     var len = arr.length;
25
26     if (len <= 1) return arr;
27
28     // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.
29     // Chunks are the size of the left or right hand in merge sort.
30     // Stop when the left-hand covers all of the array.
31     var oarr = arr;
32     for (var chk = 1; chk < len; chk *= 2) {
33         arr = pass(arr, comp, chk);
34     }
35     for (var i = 0; i < len; i++) {
36         oarr[i] = arr[i];
37     }
38     return oarr;
39 };
40
41 // Run a single pass with the given chunk size. Returns a new array.
42 var pass = function(arr, comp, chk) {
43     var len = arr.length;
44     // Output, and position.
45     var result = new Array(len);
46     var i = 0;
47     // Step size / double chunk size.
48     var dbl = chk * 2;
49     // Bounds of the left and right chunks.
50     var l, r, e;
51     // Iterators over the left and right chunk.
52     var li, ri;
53
54     // Iterate over pairs of chunks.
55     for (l = 0; l < len; l += dbl) {
56         r = l + chk;
57         e = r + chk;
58         if (r > len) r = len;
59         if (e > len) e = len;
60
61         // Iterate both chunks in parallel.
62         li = l;
63         ri = r;
64         while (true) {
65             // Compare the chunks.
66             if (li < r && ri < e) {
67                 // This works for a regular `sort()` compatible comparator,
68                 // but also for a simple comparator like: `a > b`
69                 if (comp(arr[li], arr[ri]) <= 0) {
70                     result[i++] = arr[li++];
71                 }
72                 else {
73                     result[i++] = arr[ri++];
74                 }
75             }
76             // Nothing to compare, just flush what's left.
77             else if (li < r) {
78                 result[i++] = arr[li++];
79             }
80             else if (ri < e) {
81                 result[i++] = arr[ri++];
82             }
83             // Both iterators are at the chunk ends.
84             else {
85                 break;
86             }
87         }
88     }
89
90     return result;
91 };
92
93 var arrsort = function(comp) {
94     return stable(this, comp);
95 };
96
97 if (Object.defineProperty) {
98     Object.defineProperty(Array.prototype, "sort", {
99         configurable: true, writable: true, enumerable: false,
100         value: arrsort
101     });
102 } else {
103     Array.prototype.sort = arrsort;
104 }
105
106 })();
107 /***************************************************************
108  * END STABLE.JS
109  **************************************************************/
110
111 /*
112  * In a generated replay, this file is partially common, boilerplate code
113  * included in every replay, and partially generated replay code. The following
114  * header applies to the boilerplate code. A comment indicating "Auto-generated
115  * below this comment" marks the separation between these two parts.
116  *
117  * Copyright (C) 2011, 2012 Purdue University
118  * Written by Gregor Richards
119  * All rights reserved.
120  * 
121  * Redistribution and use in source and binary forms, with or without
122  * modification, are permitted provided that the following conditions are met:
123  * 
124  * 1. Redistributions of source code must retain the above copyright notice,
125  *    this list of conditions and the following disclaimer.
126  * 2. Redistributions in binary form must reproduce the above copyright notice,
127  *    this list of conditions and the following disclaimer in the documentation
128  *    and/or other materials provided with the distribution.
129  * 
130  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
131  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
132  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
133  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
134  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
135  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
136  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
137  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
138  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
139  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
140  * POSSIBILITY OF SUCH DAMAGE.
141  */
142
143 (function() {
144     // global eval alias
145     var geval = eval;
146
147     // detect if we're in a browser or not
148     var inbrowser = false;
149     var inharness = false;
150     var finished = false;
151     if (typeof window !== "undefined" && "document" in window) {
152         inbrowser = true;
153         if (window.parent && "JSBNG_handleResult" in window.parent) {
154             inharness = true;
155         }
156     } else if (typeof global !== "undefined") {
157         window = global;
158         window.top = window;
159     } else {
160         window = (function() { return this; })();
161         window.top = window;
162     }
163
164     if ("console" in window) {
165         window.JSBNG_Console = window.console;
166     }
167
168     var callpath = [];
169
170     // Workaround for bound functions as events
171     delete Function.prototype.bind;
172
173     // global state
174     var JSBNG_Replay = window.top.JSBNG_Replay = {
175         push: function(arr, fun) {
176             arr.push(fun);
177             return fun;
178         },
179
180         path: function(str) {
181             verifyPath(str);
182         },
183
184         forInKeys: function(of) {
185             var keys = [];
186             for (var k in of)
187                 keys.push(k);
188             return keys.sort();
189         }
190     };
191
192     // the actual replay runner
193     function onload() {
194         try {
195             delete window.onload;
196         } catch (ex) {}
197
198         var jr = JSBNG_Replay$;
199         var cb = function() {
200             var end = new Date().getTime();
201             finished = true;
202
203             var msg = "Time: " + (end - st) + "ms";
204     
205             if (inharness) {
206                 window.parent.JSBNG_handleResult({error:false, time:(end - st)});
207             } else if (inbrowser) {
208                 var res = document.createElement("div");
209     
210                 res.style.position = "fixed";
211                 res.style.left = "1em";
212                 res.style.top = "1em";
213                 res.style.width = "35em";
214                 res.style.height = "5em";
215                 res.style.padding = "1em";
216                 res.style.backgroundColor = "white";
217                 res.style.color = "black";
218                 res.appendChild(document.createTextNode(msg));
219     
220                 document.body.appendChild(res);
221             } else if (typeof console !== "undefined") {
222                 console.log(msg);
223             } else if (typeof print !== "undefined") {
224                 // hopefully not the browser print() function :)
225                 print(msg);
226             }
227         };
228
229         // force it to JIT
230         jr(false);
231
232         // then time it
233         var st = new Date().getTime();
234         while (jr !== null) {
235             jr = jr(true, cb);
236         }
237     }
238
239     // add a frame at replay time
240     function iframe(pageid) {
241         var iw;
242         if (inbrowser) {
243             // represent the iframe as an iframe (of course)
244             var iframe = document.createElement("iframe");
245             iframe.style.display = "none";
246             document.body.appendChild(iframe);
247             iw = iframe.contentWindow;
248             iw.document.write("<script type=\"text/javascript\">var JSBNG_Replay_geval = eval;</script>");
249             iw.document.close();
250         } else {
251             // no general way, just lie and do horrible things
252             var topwin = window;
253             (function() {
254                 var window = {};
255                 window.window = window;
256                 window.top = topwin;
257                 window.JSBNG_Replay_geval = function(str) {
258                     eval(str);
259                 }
260                 iw = window;
261             })();
262         }
263         return iw;
264     }
265
266     // called at the end of the replay stuff
267     function finalize() {
268         if (inbrowser) {
269             setTimeout(onload, 0);
270         } else {
271             onload();
272         }
273     }
274
275     // verify this recorded value and this replayed value are close enough
276     function verify(rep, rec) {
277         if (rec !== rep &&
278             (rep === rep || rec === rec) /* NaN test */) {
279             // FIXME?
280             if (typeof rec === "function" && typeof rep === "function") {
281                 return true;
282             }
283             if (typeof rec !== "object" || rec === null ||
284                 !(("__JSBNG_unknown_" + typeof(rep)) in rec)) {
285                 return false;
286             }
287         }
288         return true;
289     }
290
291     // general message
292     var firstMessage = true;
293     function replayMessage(msg) {
294         if (inbrowser) {
295             if (firstMessage)
296                 document.open();
297             firstMessage = false;
298             document.write(msg);
299         } else {
300             console.log(msg);
301         }
302     }
303
304     // complain when there's an error
305     function verificationError(msg) {
306         if (finished) return;
307         if (inharness) {
308             window.parent.JSBNG_handleResult({error:true, msg: msg});
309         } else replayMessage(msg);
310         throw new Error();
311     }
312
313     // to verify a set
314     function verifySet(objstr, obj, prop, gvalstr, gval) {
315         if (/^on/.test(prop)) {
316             // these aren't instrumented compatibly
317             return;
318         }
319
320         if (!verify(obj[prop], gval)) {
321             var bval = obj[prop];
322             var msg = "Verification failure! " + objstr + "." + prop + " is not " + gvalstr + ", it's " + bval + "!";
323             verificationError(msg);
324         }
325     }
326
327     // to verify a call or new
328     function verifyCall(iscall, func, cthis, cargs) {
329         var ok = true;
330         var callArgs = func.callArgs[func.inst];
331         iscall = iscall ? 1 : 0;
332         if (cargs.length !== callArgs.length - 1) {
333             ok = false;
334         } else {
335             if (iscall && !verify(cthis, callArgs[0])) ok = false;
336             for (var i = 0; i < cargs.length; i++) {
337                 if (!verify(cargs[i], callArgs[i+1])) ok = false;
338             }
339         }
340         if (!ok) {
341             var msg = "Call verification failure!";
342             verificationError(msg);
343         }
344
345         return func.returns[func.inst++];
346     }
347
348     // to verify the callpath
349     function verifyPath(func) {
350         var real = callpath.shift();
351         if (real !== func) {
352             var msg = "Call path verification failure! Expected " + real + ", found " + func;
353             verificationError(msg);
354         }
355     }
356
357     // figure out how to define getters
358     var defineGetter;
359     if (Object.defineProperty) {
360         var odp = Object.defineProperty;
361         defineGetter = function(obj, prop, getter, setter) {
362             if (typeof setter === "undefined") setter = function(){};
363             odp(obj, prop, {"enumerable": true, "configurable": true, "get": getter, "set": setter});
364         };
365     } else if (Object.prototype.__defineGetter__) {
366         var opdg = Object.prototype.__defineGetter__;
367         var opds = Object.prototype.__defineSetter__;
368         defineGetter = function(obj, prop, getter, setter) {
369             if (typeof setter === "undefined") setter = function(){};
370             opdg.call(obj, prop, getter);
371             opds.call(obj, prop, setter);
372         };
373     } else {
374         defineGetter = function() {
375             verificationError("This replay requires getters for correct behavior, and your JS engine appears to be incapable of defining getters. Sorry!");
376         };
377     }
378
379     var defineRegetter = function(obj, prop, getter, setter) {
380         defineGetter(obj, prop, function() {
381             return getter.call(this, prop);
382         }, function(val) {
383             // once it's set by the client, it's claimed
384             setter.call(this, prop, val);
385             Object.defineProperty(obj, prop, {
386                 "enumerable": true, "configurable": true, "writable": true,
387                 "value": val
388             });
389         });
390     }
391
392     // for calling events
393     var fpc = Function.prototype.call;
394
395 // resist the urge, don't put a })(); here!
396 /******************************************************************************
397  * Auto-generated below this comment
398  *****************************************************************************/
399 var ow881945950 = window;
400 var f881945950_0;
401 var o0;
402 var f881945950_7;
403 var f881945950_16;
404 var f881945950_17;
405 var o1;
406 var o2;
407 var o3;
408 var f881945950_65;
409 var f881945950_393;
410 var f881945950_395;
411 var f881945950_397;
412 var o4;
413 var o5;
414 var f881945950_406;
415 var o6;
416 var o7;
417 var o8;
418 var f881945950_413;
419 var f881945950_414;
420 var f881945950_415;
421 var f881945950_423;
422 var f881945950_427;
423 var f881945950_439;
424 var f881945950_443;
425 JSBNG_Replay.s6642b77f01f4d49ef240b29032e6da4372359178_0 = [];
426 JSBNG_Replay.sdaedc82b47673ce6de4c0b9c01978bd63c2c50e4_1 = [];
427 JSBNG_Replay.sdaedc82b47673ce6de4c0b9c01978bd63c2c50e4_2 = [];
428 JSBNG_Replay.s6642b77f01f4d49ef240b29032e6da4372359178_1 = [];
429 JSBNG_Replay.sd77f26a2825b7813fef421f4fc64cccaae936b24_7 = [];
430 // 1
431 // record generated by JSBench  at 2013-07-10T17:55:49.619Z
432 // 2
433 // 3
434 f881945950_0 = function() { return f881945950_0.returns[f881945950_0.inst++]; };
435 f881945950_0.returns = [];
436 f881945950_0.inst = 0;
437 // 4
438 ow881945950.JSBNG__Date = f881945950_0;
439 // 5
440 o0 = {};
441 // 6
442 ow881945950.JSBNG__document = o0;
443 // 17
444 f881945950_7 = function() { return f881945950_7.returns[f881945950_7.inst++]; };
445 f881945950_7.returns = [];
446 f881945950_7.inst = 0;
447 // 18
448 ow881945950.JSBNG__addEventListener = f881945950_7;
449 // 19
450 ow881945950.JSBNG__top = ow881945950;
451 // 28
452 ow881945950.JSBNG__scrollX = 0;
453 // 29
454 ow881945950.JSBNG__scrollY = 0;
455 // 38
456 f881945950_16 = function() { return f881945950_16.returns[f881945950_16.inst++]; };
457 f881945950_16.returns = [];
458 f881945950_16.inst = 0;
459 // 39
460 ow881945950.JSBNG__setTimeout = f881945950_16;
461 // 40
462 f881945950_17 = function() { return f881945950_17.returns[f881945950_17.inst++]; };
463 f881945950_17.returns = [];
464 f881945950_17.inst = 0;
465 // 41
466 ow881945950.JSBNG__setInterval = f881945950_17;
467 // 60
468 ow881945950.JSBNG__frames = ow881945950;
469 // 63
470 ow881945950.JSBNG__self = ow881945950;
471 // 70
472 ow881945950.JSBNG__content = ow881945950;
473 // 81
474 ow881945950.JSBNG__closed = false;
475 // 84
476 ow881945950.JSBNG__pkcs11 = null;
477 // 87
478 ow881945950.JSBNG__opener = null;
479 // 88
480 ow881945950.JSBNG__defaultStatus = "";
481 // 89
482 o1 = {};
483 // 90
484 ow881945950.JSBNG__location = o1;
485 // 91
486 ow881945950.JSBNG__innerWidth = 994;
487 // 92
488 ow881945950.JSBNG__innerHeight = 603;
489 // 93
490 ow881945950.JSBNG__outerWidth = 994;
491 // 94
492 ow881945950.JSBNG__outerHeight = 690;
493 // 95
494 ow881945950.JSBNG__screenX = 24;
495 // 96
496 ow881945950.JSBNG__screenY = 28;
497 // 97
498 ow881945950.JSBNG__mozInnerScreenX = 0;
499 // 98
500 ow881945950.JSBNG__mozInnerScreenY = 0;
501 // 99
502 ow881945950.JSBNG__pageXOffset = 0;
503 // 100
504 ow881945950.JSBNG__pageYOffset = 0;
505 // 101
506 ow881945950.JSBNG__scrollMaxX = 0;
507 // 102
508 ow881945950.JSBNG__scrollMaxY = 0;
509 // 103
510 ow881945950.JSBNG__fullScreen = false;
511 // 136
512 ow881945950.JSBNG__frameElement = null;
513 // 141
514 ow881945950.JSBNG__mozPaintCount = 0;
515 // 144
516 ow881945950.JSBNG__mozAnimationStartTime = 1373479177771;
517 // 145
518 o2 = {};
519 // 146
520 ow881945950.JSBNG__mozIndexedDB = o2;
521 // 151
522 o3 = {};
523 // 152
524 ow881945950.JSBNG__performance = o3;
525 // 155
526 ow881945950.JSBNG__devicePixelRatio = 1;
527 // 160
528 f881945950_65 = function() { return f881945950_65.returns[f881945950_65.inst++]; };
529 f881945950_65.returns = [];
530 f881945950_65.inst = 0;
531 // 161
532 ow881945950.JSBNG__Image = f881945950_65;
533 // 166
534 ow881945950.JSBNG__name = "uaMatch";
535 // 173
536 ow881945950.JSBNG__status = "";
537 // 176
538 ow881945950.JSBNG__Components = undefined;
539 // 771
540 ow881945950.JSBNG__indexedDB = o2;
541 // undefined
542 o2 = null;
543 // 804
544 ow881945950.JSBNG__onerror = null;
545 // 809
546 // 0
547 JSBNG_Replay$ = function(real, cb) { if (!real) return;
548 // 811
549 o2 = {};
550 // 812
551 f881945950_0.returns.push(o2);
552 // undefined
553 o2 = null;
554 // 810
555 geval("var ue_t0 = ((ue_t0 || +new JSBNG__Date()));");
556 // 814
557 o2 = {};
558 // 815
559 f881945950_0.returns.push(o2);
560 // undefined
561 o2 = null;
562 // 816
563 o2 = {};
564 // 817
565 f881945950_0.returns.push(o2);
566 // undefined
567 o2 = null;
568 // 818
569 o2 = {};
570 // 819
571 f881945950_0.returns.push(o2);
572 // undefined
573 o2 = null;
574 // 820
575 o2 = {};
576 // 821
577 f881945950_0.returns.push(o2);
578 // undefined
579 o2 = null;
580 // 822
581 o2 = {};
582 // 823
583 f881945950_0.returns.push(o2);
584 // undefined
585 o2 = null;
586 // 824
587 ow881945950.JSBNG__onJSBNG__stop = undefined;
588 // 825
589 f881945950_393 = function() { return f881945950_393.returns[f881945950_393.inst++]; };
590 f881945950_393.returns = [];
591 f881945950_393.inst = 0;
592 // 826
593 ow881945950.JSBNG__onbeforeunload = f881945950_393;
594 // 827
595 o0.webkitHidden = void 0;
596 // 828
597 o0.oHidden = void 0;
598 // 829
599 o0.msHidden = void 0;
600 // 830
601 o0.mozHidden = false;
602 // 831
603 o0.mozVisibilityState = "visible";
604 // 832
605 o2 = {};
606 // 833
607 f881945950_0.returns.push(o2);
608 // undefined
609 o2 = null;
610 // 834
611 f881945950_395 = function() { return f881945950_395.returns[f881945950_395.inst++]; };
612 f881945950_395.returns = [];
613 f881945950_395.inst = 0;
614 // 835
615 o0.JSBNG__addEventListener = f881945950_395;
616 // 836
617 f881945950_395.returns.push(undefined);
618 // 837
619 f881945950_7.returns.push(undefined);
620 // 838
621 o2 = {};
622 // 839
623 f881945950_0.returns.push(o2);
624 // 840
625 f881945950_397 = function() { return f881945950_397.returns[f881945950_397.inst++]; };
626 f881945950_397.returns = [];
627 f881945950_397.inst = 0;
628 // 841
629 o2.getTime = f881945950_397;
630 // undefined
631 o2 = null;
632 // 842
633 f881945950_397.returns.push(1373479177880);
634 // 843
635 o2 = {};
636 // 844
637 f881945950_0.returns.push(o2);
638 // undefined
639 o2 = null;
640 // 845
641 o2 = {};
642 // 846
643 f881945950_0.returns.push(o2);
644 // undefined
645 o2 = null;
646 // 847
647 o2 = {};
648 // 848
649 f881945950_0.returns.push(o2);
650 // undefined
651 o2 = null;
652 // 813
653 geval("var ue_csm = window;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(d) {\n    var a = {\n        ec: 0,\n        pec: 0,\n        ts: 0,\n        erl: [],\n        mxe: 50,\n        startTimer: function() {\n            a.ts++;\n            JSBNG__setInterval(function() {\n                ((((d.ue && ((a.pec < a.ec)))) && d.uex(\"at\")));\n                a.pec = a.ec;\n            }, 10000);\n        }\n    };\n    function c(e) {\n        if (((a.ec > a.mxe))) {\n            return;\n        }\n    ;\n    ;\n        a.ec++;\n        if (d.ue_jserrv2) {\n            e.pageURL = ((\"\" + ((window.JSBNG__location ? window.JSBNG__location.href : \"\"))));\n        }\n    ;\n    ;\n        a.erl.push(e);\n    };\n;\n    function b(h, g, e) {\n        var f = {\n            m: h,\n            f: g,\n            l: e,\n            fromOnError: 1,\n            args: arguments\n        };\n        d.ueLogError(f);\n        return false;\n    };\n;\n    b.skipTrace = 1;\n    c.skipTrace = 1;\n    d.ueLogError = c;\n    d.ue_err = a;\n    window.JSBNG__onerror = b;\n})(ue_csm);\nue_csm.ue_hoe = +new JSBNG__Date();\nvar ue_id = \"0M4YTA6K9C1VFV7TYXNC\", ue_sid = \"176-5336870-9447366\", ue_mid = \"ATVPDKIKX0DER\", ue_sn = \"www.amazon.com\", ue_url = \"/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1/uedata/unsticky/176-5336870-9447366/Detail/ntpoffrw\", ue_furl = \"fls-na.amazon.com\", ue_pr = 0, ue_navtiming = 1, ue_log_idx = 0, ue_log_f = 0, ue_fcsn = 1, ue_ctb0tf = 1, ue_fst = 0, ue_fna = 1, ue_swi = 1, ue_swm = 4, ue_onbful = 0, ue_jserrv2 = 3;\nif (!window.ue_csm) {\n    var ue_csm = window;\n}\n;\n;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date));\nfunction ue_viz() {\n    (function(d, j, g) {\n        var b, l, e, a, c = [\"\",\"moz\",\"ms\",\"o\",\"webkit\",], k = 0, f = 20, h = \"JSBNG__addEventListener\", i = \"JSBNG__attachEvent\";\n        while ((((b = c.pop()) && !k))) {\n            l = ((((b ? ((b + \"H\")) : \"h\")) + \"idden\"));\n            if (k = ((typeof j[l] == \"boolean\"))) {\n                e = ((b + \"visibilitychange\"));\n                a = ((b + \"VisibilityState\"));\n            }\n        ;\n        ;\n        };\n    ;\n        {\n            function m(q) {\n                if (((d.ue.viz.length < f))) {\n                    var p = q.type, n = q.originalEvent;\n                    if (!((((/^focus./.test(p) && n)) && ((((n.toElement || n.fromElement)) || n.relatedTarget))))) {\n                        var r = ((j[a] || ((((((p == \"JSBNG__blur\")) || ((p == \"focusout\")))) ? \"hidden\" : \"visible\")))), o = ((+new JSBNG__Date - d.ue.t0));\n                        d.ue.viz.push(((((r + \":\")) + o)));\n                        ((((((ue.iel && ((ue.iel.length > 0)))) && ((r == \"visible\")))) && uex(\"at\")));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            };\n            ((window.top.JSBNG_Replay.sd77f26a2825b7813fef421f4fc64cccaae936b24_7.push)((m)));\n        };\n    ;\n        m({\n        });\n        if (k) {\n            j[h](e, m, 0);\n        }\n    ;\n    ;\n    })(ue_csm, JSBNG__document, window);\n};\n;\nue_csm.ue_hoe = +new JSBNG__Date;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(e, h) {\n    e.ueinit = ((((e.ueinit || 0)) + 1));\n    e.ue = {\n        t0: ((h.aPageStart || e.ue_t0)),\n        id: e.ue_id,\n        url: e.ue_url,\n        a: \"\",\n        b: \"\",\n        h: {\n        },\n        r: {\n            ld: 0,\n            oe: 0,\n            ul: 0\n        },\n        s: 1,\n        t: {\n        },\n        sc: {\n        },\n        iel: [],\n        ielf: [],\n        fc_idx: {\n        },\n        viz: [],\n        v: 30\n    };\n    e.ue.tagC = function() {\n        var j = [];\n        return function(k) {\n            if (k) {\n                j.push(k);\n            }\n        ;\n        ;\n            return j.slice(0);\n        };\n    };\n    e.ue.tag = e.ue.tagC();\n    e.ue.ifr = ((((((h.JSBNG__top !== h.JSBNG__self)) || (h.JSBNG__frameElement))) ? 1 : 0));\n    function c(l, o, q, n) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uet\",\n                en: l,\n                s: o,\n                so: q,\n                to: n\n            }, \"csm\");\n        }\n    ;\n    ;\n        var p = ((n || (new JSBNG__Date()).getTime()));\n        var j = ((!o && ((typeof q != \"undefined\"))));\n        if (j) {\n            return;\n        }\n    ;\n    ;\n        if (l) {\n            var m = ((o ? ((d(\"t\", o) || d(\"t\", o, {\n            }))) : e.ue.t));\n            m[l] = p;\n            {\n                var fin0keys = ((window.top.JSBNG_Replay.forInKeys)((q))), fin0i = (0);\n                var k;\n                for (; (fin0i < fin0keys.length); (fin0i++)) {\n                    ((k) = (fin0keys[fin0i]));\n                    {\n                        d(k, o, q[k]);\n                    };\n                };\n            };\n        ;\n        }\n    ;\n    ;\n        return p;\n    };\n;\n    function d(k, l, m) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"ues\",\n                k: k,\n                s: l,\n                v: m\n            }, \"csm\");\n        }\n    ;\n    ;\n        var n, j;\n        if (k) {\n            n = j = e.ue;\n            if (((l && ((l != n.id))))) {\n                j = n.sc[l];\n                if (!j) {\n                    j = {\n                    };\n                    ((m ? (n.sc[l] = j) : j));\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            n = ((m ? (j[k] = m) : j[k]));\n        }\n    ;\n    ;\n        return n;\n    };\n;\n    function g(n, o, m, k, j) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"ueh\",\n                ek: n\n            }, \"csm\");\n        }\n    ;\n    ;\n        var l = ((\"JSBNG__on\" + m));\n        var p = o[l];\n        if (((typeof (p) == \"function\"))) {\n            if (n) {\n                e.ue.h[n] = p;\n            }\n        ;\n        ;\n        }\n         else {\n            p = function() {\n            \n            };\n        }\n    ;\n    ;\n        o[l] = ((j ? function(q) {\n            k(q);\n            p(q);\n        } : function(q) {\n            p(q);\n            k(q);\n        }));\n        o[l].isUeh = 1;\n    };\n;\n    function b(s, m, r) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uex\",\n                en: s,\n                s: m,\n                so: r\n            }, \"csm\");\n        }\n    ;\n    ;\n        function l(P, N) {\n            var L = [P,], G = 0, M = {\n            };\n            if (N) {\n                L.push(\"m=1\");\n                M[N] = 1;\n            }\n             else {\n                M = e.ue.sc;\n            }\n        ;\n        ;\n            var E;\n            {\n                var fin1keys = ((window.top.JSBNG_Replay.forInKeys)((M))), fin1i = (0);\n                var F;\n                for (; (fin1i < fin1keys.length); (fin1i++)) {\n                    ((F) = (fin1keys[fin1i]));\n                    {\n                        var H = d(\"wb\", F), K = ((d(\"t\", F) || {\n                        })), J = ((d(\"t0\", F) || e.ue.t0));\n                        if (((N || ((H == 2))))) {\n                            var O = ((H ? G++ : \"\"));\n                            L.push(((((((\"sc\" + O)) + \"=\")) + F)));\n                            {\n                                var fin2keys = ((window.top.JSBNG_Replay.forInKeys)((K))), fin2i = (0);\n                                var I;\n                                for (; (fin2i < fin2keys.length); (fin2i++)) {\n                                    ((I) = (fin2keys[fin2i]));\n                                    {\n                                        if (((((I.length <= 3)) && K[I]))) {\n                                            L.push(((((((I + O)) + \"=\")) + ((K[I] - J)))));\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                            L.push(((((((\"t\" + O)) + \"=\")) + K[s])));\n                            if (((d(\"ctb\", F) || d(\"wb\", F)))) {\n                                E = 1;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n            if (((!n && E))) {\n                L.push(\"ctb=1\");\n            }\n        ;\n        ;\n            return L.join(\"&\");\n        };\n    ;\n        function v(H, F, J, E) {\n            if (!H) {\n                return;\n            }\n        ;\n        ;\n            var I = new JSBNG__Image();\n            var G = function() {\n                if (!e.ue.b) {\n                    return;\n                }\n            ;\n            ;\n                var L = e.ue.b;\n                e.ue.b = \"\";\n                v(L, F, J, 1);\n            };\n            if (((e.ue.b && !e.ue_swi))) {\n                I.JSBNG__onload = G;\n            }\n        ;\n        ;\n            var K = ((((((!E || !e.ue.log)) || !window.amznJQ)) || ((window.amznJQ && window.amznJQ.isMock))));\n            if (K) {\n                e.ue.iel.push(I);\n                I.src = H;\n            }\n        ;\n        ;\n            if (((e.ue.log && ((((J || E)) || e.ue_ctb0tf))))) {\n                e.ue.log(H, \"uedata\", {\n                    n: 1\n                });\n                e.ue.ielf.push(H);\n            }\n        ;\n        ;\n            if (((e.ue_err && !e.ue_err.ts))) {\n                e.ue_err.startTimer();\n            }\n        ;\n        ;\n            if (e.ue_swi) {\n                G();\n            }\n        ;\n        ;\n        };\n    ;\n        function B(E) {\n            if (!ue.collected) {\n                var G = E.timing;\n                if (G) {\n                    e.ue.t.na_ = G.navigationStart;\n                    e.ue.t.ul_ = G.unloadEventStart;\n                    e.ue.t._ul = G.unloadEventEnd;\n                    e.ue.t.rd_ = G.redirectStart;\n                    e.ue.t._rd = G.redirectEnd;\n                    e.ue.t.fe_ = G.fetchStart;\n                    e.ue.t.lk_ = G.domainLookupStart;\n                    e.ue.t._lk = G.domainLookupEnd;\n                    e.ue.t.co_ = G.connectStart;\n                    e.ue.t._co = G.connectEnd;\n                    e.ue.t.sc_ = G.secureConnectionStart;\n                    e.ue.t.rq_ = G.requestStart;\n                    e.ue.t.rs_ = G.responseStart;\n                    e.ue.t._rs = G.responseEnd;\n                    e.ue.t.dl_ = G.domLoading;\n                    e.ue.t.di_ = G.domInteractive;\n                    e.ue.t.de_ = G.domContentLoadedEventStart;\n                    e.ue.t._de = G.domContentLoadedEventEnd;\n                    e.ue.t._dc = G.domComplete;\n                    e.ue.t.ld_ = G.loadEventStart;\n                    e.ue.t._ld = G.loadEventEnd;\n                }\n            ;\n            ;\n                var F = E.navigation;\n                if (F) {\n                    e.ue.t.ty = ((F.type + e.ue.t0));\n                    e.ue.t.rc = ((F.redirectCount + e.ue.t0));\n                    if (e.ue.tag) {\n                        e.ue.tag(((F.redirectCount ? \"redirect\" : \"nonredirect\")));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                e.ue.collected = 1;\n            }\n        ;\n        ;\n        };\n    ;\n        var D = ((!m && ((typeof r != \"undefined\"))));\n        if (D) {\n            return;\n        }\n    ;\n    ;\n        {\n            var fin3keys = ((window.top.JSBNG_Replay.forInKeys)((r))), fin3i = (0);\n            var j;\n            for (; (fin3i < fin3keys.length); (fin3i++)) {\n                ((j) = (fin3keys[fin3i]));\n                {\n                    d(j, m, r[j]);\n                };\n            };\n        };\n    ;\n        c(\"pc\", m, r);\n        var x = ((d(\"id\", m) || e.ue.id));\n        var p = ((((((((((((e.ue.url + \"?\")) + s)) + \"&v=\")) + e.ue.v)) + \"&id=\")) + x));\n        var n = ((d(\"ctb\", m) || d(\"wb\", m)));\n        if (n) {\n            p += ((\"&ctb=\" + n));\n        }\n    ;\n    ;\n        if (((e.ueinit > 1))) {\n            p += ((\"&ic=\" + e.ueinit));\n        }\n    ;\n    ;\n        var A = ((h.JSBNG__performance || h.JSBNG__webkitPerformance));\n        var y = e.ue.bfini;\n        var q = ((((A && A.navigation)) && ((A.navigation.type == 2))));\n        var o = ((((m && ((m != x)))) && d(\"ctb\", m)));\n        if (!o) {\n            if (((y && ((y > 1))))) {\n                p += ((\"&bft=\" + ((y - 1))));\n                p += \"&bfform=1\";\n            }\n             else {\n                if (q) {\n                    p += \"&bft=1\";\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (q) {\n                p += \"&bfnt=1\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        if (((((e.ue._fi && ((s == \"at\")))) && ((!m || ((m == x))))))) {\n            p += e.ue._fi();\n        }\n    ;\n    ;\n        var k;\n        if (((((((s == \"ld\")) || ((s == \"ul\")))) && ((!m || ((m == x))))))) {\n            if (((s == \"ld\"))) {\n                if (((h.JSBNG__onbeforeunload && h.JSBNG__onbeforeunload.isUeh))) {\n                    h.JSBNG__onbeforeunload = null;\n                }\n            ;\n            ;\n                ue.r.ul = e.ue_onbful;\n                if (((e.ue_onbful == 3))) {\n                    ue.detach(\"beforeunload\", e.onUl);\n                }\n            ;\n            ;\n                if (((JSBNG__document.ue_backdetect && JSBNG__document.ue_backdetect.ue_back))) {\n                    JSBNG__document.ue_backdetect.ue_back.value++;\n                }\n            ;\n            ;\n                if (e._uess) {\n                    k = e._uess();\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (((((e.ue_navtiming && A)) && A.timing))) {\n                d(\"ctb\", x, \"1\");\n                if (((e.ue_navtiming == 1))) {\n                    e.ue.t.tc = A.timing.navigationStart;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (A) {\n                B(A);\n            }\n        ;\n        ;\n            if (((e.ue_hob && e.ue_hoe))) {\n                e.ue.t.hob = e.ue_hob;\n                e.ue.t.hoe = e.ue_hoe;\n            }\n        ;\n        ;\n            if (e.ue.ifr) {\n                p += \"&ifr=1\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        c(s, m, r);\n        var w = ((((((s == \"ld\")) && m)) && d(\"wb\", m)));\n        if (w) {\n            d(\"wb\", m, 2);\n        }\n    ;\n    ;\n        var z = 1;\n        {\n            var fin4keys = ((window.top.JSBNG_Replay.forInKeys)((e.ue.sc))), fin4i = (0);\n            var u;\n            for (; (fin4i < fin4keys.length); (fin4i++)) {\n                ((u) = (fin4keys[fin4i]));\n                {\n                    if (((d(\"wb\", u) == 1))) {\n                        z = 0;\n                        break;\n                    }\n                ;\n                ;\n                };\n            };\n        };\n    ;\n        if (w) {\n            if (((!e.ue.s && ((e.ue_swi || ((z && !e.ue_swi))))))) {\n                p = l(p, null);\n            }\n             else {\n                return;\n            }\n        ;\n        ;\n        }\n         else {\n            if (((((z && !e.ue_swi)) || e.ue_swi))) {\n                var C = l(p, null);\n                if (((C != p))) {\n                    e.ue.b = C;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (k) {\n                p += k;\n            }\n        ;\n        ;\n            p = l(p, ((m || e.ue.id)));\n        }\n    ;\n    ;\n        if (((e.ue.b || w))) {\n            {\n                var fin5keys = ((window.top.JSBNG_Replay.forInKeys)((e.ue.sc))), fin5i = (0);\n                var u;\n                for (; (fin5i < fin5keys.length); (fin5i++)) {\n                    ((u) = (fin5keys[fin5i]));\n                    {\n                        if (((d(\"wb\", u) == 2))) {\n                            delete e.ue.sc[u];\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n        }\n    ;\n    ;\n        var t = 0;\n        if (!w) {\n            e.ue.s = 0;\n            if (((e.ue_err && ((e.ue_err.ec > 0))))) {\n                if (((e.ue_jserrv2 == 3))) {\n                    if (((e.ue_err.pec < e.ue_err.ec))) {\n                        e.ue_err.pec = e.ue_err.ec;\n                        p += ((\"&ec=\" + e.ue_err.ec));\n                    }\n                ;\n                ;\n                }\n                 else {\n                    p += ((\"&ec=\" + e.ue_err.ec));\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            t = d(\"ctb\", m);\n            d(\"t\", m, {\n            });\n        }\n    ;\n    ;\n        if (((!window.amznJQ && e.ue.tag))) {\n            e.ue.tag(\"noAmznJQ\");\n        }\n    ;\n    ;\n        if (((((p && e.ue.tag)) && ((e.ue.tag().length > 0))))) {\n            p += ((\"&csmtags=\" + e.ue.tag().join(\"|\")));\n            e.ue.tag = e.ue.tagC();\n        }\n    ;\n    ;\n        if (((((p && e.ue.viz)) && ((e.ue.viz.length > 0))))) {\n            p += ((\"&viz=\" + e.ue.viz.join(\"|\")));\n            e.ue.viz = [];\n        }\n    ;\n    ;\n        e.ue.a = p;\n        v(p, s, t, w);\n    };\n;\n    function a(j, k, l) {\n        l = ((l || h));\n        if (l.JSBNG__addEventListener) {\n            l.JSBNG__addEventListener(j, k, false);\n        }\n         else {\n            if (l.JSBNG__attachEvent) {\n                l.JSBNG__attachEvent(((\"JSBNG__on\" + j)), k);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    ue.attach = a;\n    function i(j, k, l) {\n        l = ((l || h));\n        if (l.JSBNG__removeEventListener) {\n            l.JSBNG__removeEventListener(j, k);\n        }\n         else {\n            if (l.JSBNG__detachEvent) {\n                l.JSBNG__detachEvent(((\"JSBNG__on\" + j)), k);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    ue.detach = i;\n    function f() {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uei\"\n            }, \"csm\");\n        }\n    ;\n    ;\n        var l = e.ue.r;\n        function k(n) {\n            return function() {\n                if (!l[n]) {\n                    l[n] = 1;\n                    b(n);\n                }\n            ;\n            ;\n            };\n        };\n    ;\n        e.onLd = k(\"ld\");\n        e.onLdEnd = k(\"ld\");\n        e.onUl = k(\"ul\");\n        var j = {\n            beforeunload: e.onUl,\n            JSBNG__stop: function() {\n                b(\"os\");\n            }\n        };\n        {\n            var fin6keys = ((window.top.JSBNG_Replay.forInKeys)((j))), fin6i = (0);\n            var m;\n            for (; (fin6i < fin6keys.length); (fin6i++)) {\n                ((m) = (fin6keys[fin6i]));\n                {\n                    g(0, window, m, j[m]);\n                };\n            };\n        };\n    ;\n        ((e.ue_viz && ue_viz()));\n        ue.attach(\"load\", e.onLd);\n        if (((e.ue_onbful == 3))) {\n            ue.attach(\"beforeunload\", e.onUl);\n        }\n    ;\n    ;\n        e.ue._uep = function() {\n            new JSBNG__Image().src = ((((e.ue_md ? e.ue_md : \"http://uedata.amazon.com/uedata/?tp=\")) + (+new JSBNG__Date)));\n        };\n        if (((e.ue_pr && ((((e.ue_pr == 2)) || ((e.ue_pr == 4))))))) {\n            e.ue._uep();\n        }\n    ;\n    ;\n        c(\"ue\");\n    };\n;\n    ue.reset = function(k, j) {\n        if (!k) {\n            return;\n        }\n    ;\n    ;\n        ((e.ue_cel && e.ue_cel.reset()));\n        e.ue.t0 = +new JSBNG__Date();\n        e.ue.rid = k;\n        e.ue.id = k;\n        e.ue.fc_idx = {\n        };\n        e.ue.viz = [];\n    };\n    e.uei = f;\n    e.ueh = g;\n    e.ues = d;\n    e.uet = c;\n    e.uex = b;\n    f();\n})(ue_csm, window);\nue_csm.ue_hoe = +new JSBNG__Date();\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(b) {\n    var a = b.ue;\n    a.rid = b.ue_id;\n    a.sid = b.ue_sid;\n    a.mid = b.ue_mid;\n    a.furl = b.ue_furl;\n    a.sn = b.ue_sn;\n    a.lr = [];\n    a.log = function(e, d, c) {\n        if (((a.lr.length == 500))) {\n            return;\n        }\n    ;\n    ;\n        a.lr.push([\"l\",e,d,c,a.d(),a.rid,]);\n    };\n    a.d = function(c) {\n        return ((+new JSBNG__Date - ((c ? 0 : a.t0))));\n    };\n})(ue_csm);\nue_csm.ue_hoe = +new JSBNG__Date();");
654 // 850
655 o2 = {};
656 // 851
657 f881945950_65.returns.push(o2);
658 // 852
659 // 853
660 // undefined
661 o2 = null;
662 // 849
663 geval("var imaget0;\n(function() {\n    var i = new JSBNG__Image;\n    i.JSBNG__onload = function() {\n        imaget0 = new JSBNG__Date().getTime();\n    };\n    i.src = \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\";\n})();");
664 // 854
665 geval("var amznJQ, jQueryPatchIPadOffset = false;\n(function() {\n    function f(x) {\n        return function() {\n            x.push(arguments);\n        };\n    };\n;\n    function ch(y) {\n        return String.fromCharCode(y);\n    };\n;\n    var a = [], c = [], cs = [], d = [], l = [], o = [], s = [], p = [], t = [];\n    amznJQ = {\n        _timesliceJS: false,\n        _a: a,\n        _c: c,\n        _cs: cs,\n        _d: d,\n        _l: l,\n        _o: o,\n        _s: s,\n        _pl: p,\n        addLogical: f(l),\n        addStyle: f(s),\n        addPL: f(p),\n        available: f(a),\n        chars: {\n            EOL: ch(10),\n            SQUOTE: ch(39),\n            DQUOTE: ch(34),\n            BACKSLASH: ch(92),\n            YEN: ch(165)\n        },\n        completedStage: f(cs),\n        declareAvailable: f(d),\n        onCompletion: f(c),\n        onReady: f(o),\n        strings: {\n        }\n    };\n}());");
666 // 855
667 geval("function amz_js_PopWin(url, JSBNG__name, options) {\n    var ContextWindow = window.open(url, JSBNG__name, options);\n    ContextWindow.JSBNG__focus();\n    return false;\n};\n;");
668 // 856
669 geval("function showElement(id) {\n    var elm = JSBNG__document.getElementById(id);\n    if (elm) {\n        elm.style.visibility = \"visible\";\n        if (((elm.getAttribute(\"JSBNG__name\") == \"heroQuickPromoDiv\"))) {\n            elm.style.display = \"block\";\n        }\n    ;\n    ;\n    }\n;\n;\n};\n;\nfunction hideElement(id) {\n    var elm = JSBNG__document.getElementById(id);\n    if (elm) {\n        elm.style.visibility = \"hidden\";\n        if (((elm.getAttribute(\"JSBNG__name\") == \"heroQuickPromoDiv\"))) {\n            elm.style.display = \"none\";\n        }\n    ;\n    ;\n    }\n;\n;\n};\n;\nfunction showHideElement(h_id, div_id) {\n    var hiddenTag = JSBNG__document.getElementById(h_id);\n    if (hiddenTag) {\n        showElement(div_id);\n    }\n     else {\n        hideElement(div_id);\n    }\n;\n;\n};\n;\nwindow.isBowserFeatureCleanup = 1;\nvar touchDeviceDetected = false;\nvar CSMReqs = {\n    af: {\n        c: 2,\n        e: \"amznJQ.AboveTheFold\",\n        p: \"atf\"\n    },\n    cf: {\n        c: 2,\n        e: \"amznJQ.criticalFeature\",\n        p: \"cf\"\n    }\n};\nfunction setCSMReq(a) {\n    a = a.toLowerCase();\n    var b = CSMReqs[a];\n    if (((b && ((--b.c == 0))))) {\n        if (((typeof uet == \"function\"))) {\n            uet(a);\n        }\n    ;\n    ;\n    ;\n        if (b.e) {\n            amznJQ.completedStage(b.e);\n        }\n    ;\n    ;\n    ;\n        if (((typeof P != \"undefined\"))) {\n            P.register(b.p);\n        }\n    ;\n    ;\n    ;\n    }\n;\n;\n};\n;");
670 // 857
671 geval("var gbEnableTwisterJS = 0;\nvar isTwisterPage = 0;");
672 // 858
673 geval("if (window.amznJQ) {\n    amznJQ.addLogical(\"csm-base\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csm-base/csm-base-min-2486485847._V1_.js\",]);\n    amznJQ.available(\"csm-base\", function() {\n    \n    });\n}\n;\n;");
674 // 859
675 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"navbarJS-jQuery\", function() {\n    \n    });\n    amznJQ.available(\"finderFitsJS\", function() {\n    \n    });\n    amznJQ.available(\"twister\", function() {\n    \n    });\n    amznJQ.available(\"swfjs\", function() {\n    \n    });\n});");
676 // 860
677 geval("(function(d) {\n    var e = function(d) {\n        function b(f, c, b) {\n            f[b] = function() {\n                a._replay.push(c.concat({\n                    m: b,\n                    a: [].slice.call(arguments)\n                }));\n            };\n        };\n    ;\n        var a = {\n        };\n        a._sourceName = d;\n        a._replay = [];\n        a.getNow = function(a, b) {\n            return b;\n        };\n        a.when = function() {\n            var a = [{\n                m: \"when\",\n                a: [].slice.call(arguments)\n            },], c = {\n            };\n            b(c, a, \"run\");\n            b(c, a, \"declare\");\n            b(c, a, \"publish\");\n            b(c, a, \"build\");\n            return c;\n        };\n        b(a, [], \"declare\");\n        b(a, [], \"build\");\n        b(a, [], \"publish\");\n        b(a, [], \"importEvent\");\n        e._shims.push(a);\n        return a;\n    };\n    e._shims = [];\n    if (!d.$Nav) {\n        d.$Nav = e(\"rcx-nav\");\n    }\n;\n;\n    if (!d.$Nav.make) {\n        d.$Nav.make = e;\n    }\n;\n;\n})(window);\nwindow.$Nav.when(\"exposeSBD.enable\", \"img.horz\", \"img.vert\", \"img.spin\", \"$popover\", \"btf.full\").run(function(d, e, j, b) {\n    function a(a) {\n        switch (typeof a) {\n          case \"boolean\":\n            h = a;\n            i = !0;\n            break;\n          case \"function\":\n            g = a;\n            c++;\n            break;\n          default:\n            c++;\n        };\n    ;\n        ((((i && ((c > 2)))) && g(h)));\n    };\n;\n    function f(a, b) {\n        var c = new JSBNG__Image;\n        if (b) {\n            c.JSBNG__onload = b;\n        }\n    ;\n    ;\n        c.src = a;\n        return c;\n    };\n;\n    var c = 0, g, h, i = !1;\n    f(e, ((d && a)));\n    f(j, ((d && a)));\n    window.$Nav.declare(\"protectExposeSBD\", a);\n    window.$Nav.declare(\"preloadSpinner\", function() {\n        f(b);\n    });\n});\n((window.amznJQ && amznJQ.available(\"navbarJS-beacon\", function() {\n\n})));\nwindow._navbarSpriteUrl = \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V397411194_.png\";\n$Nav.importEvent(\"navbarJS-beacon\");\n$Nav.importEvent(\"NavAuiJS\");\n$Nav.declare(\"exposeSBD.enable\", false);\n$Nav.declare(\"img.spin\", \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif\");\n$Nav.when(\"$\").run(function($) {\n    var ie6 = (($.browser.msie && ((parseInt($.browser.version) <= 6))));\n    $Nav.declare(\"img.horz\", ((ie6 ? \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-h._V155961234_.png\" : \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-h-v2._V137157005_.png\")));\n    $Nav.declare(\"img.vert\", ((ie6 ? \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-v._V155961234_.png\" : \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-v-v2._V137157005_.png\")));\n});");
678 // 862
679 o2 = {};
680 // 863
681 f881945950_0.returns.push(o2);
682 // 864
683 o2.getTime = f881945950_397;
684 // undefined
685 o2 = null;
686 // 865
687 f881945950_397.returns.push(1373479178159);
688 // 861
689 geval("window.Navbar = function(options) {\n    options = ((options || {\n    }));\n    this._loadedCount = 0;\n    this._hasUedata = ((typeof uet == \"function\"));\n    this._finishLoadQuota = ((options[\"finishLoadQuota\"] || 2));\n    this._startedLoading = false;\n    this._btfFlyoutContents = [];\n    this._saFlyoutHorizOffset = -16;\n    this._saMaskHorizOffset = -17;\n    this._sbd_config = {\n        major_delay: 300,\n        minor_delay: 100,\n        target_slop: 25\n    };\n    ((window.$Nav && $Nav.declare(\"config.sbd\", this._sbd_config)));\n    this.addToBtfFlyoutContents = function(JSBNG__content, callback) {\n        this._btfFlyoutContents.push({\n            JSBNG__content: JSBNG__content,\n            callback: callback\n        });\n    };\n    this.getBtfFlyoutContents = function() {\n        return this._btfFlyoutContents;\n    };\n    this.loading = function() {\n        if (((!this._startedLoading && this._isReportingEvents()))) {\n            uet(\"ns\");\n        }\n    ;\n    ;\n        this._startedLoading = true;\n    };\n    this.componentLoaded = function() {\n        this._loadedCount++;\n        if (((((this._startedLoading && this._isReportingEvents())) && ((this._loadedCount == this._finishLoadQuota))))) {\n            uet(\"ne\");\n        }\n    ;\n    ;\n    };\n    this._isReportingEvents = function() {\n        return this._hasUedata;\n    };\n    this.browsepromos = {\n    };\n    this.issPromos = [];\n    var le = {\n    };\n    this.logEv = function(d, o) {\n    \n    };\n    ((window.$Nav && $Nav.declare(\"logEvent\", this.logEv)));\n};\nwindow._navbar = new Navbar({\n    finishLoadQuota: 1\n});\n_navbar.loading();\n((window.$Nav && $Nav.declare(\"config.lightningDeals\", ((window._navbar._lightningDealsData || {\n})))));\n((window.$Nav && $Nav.declare(\"config.swmStyleData\", ((window._navbar._swmStyleData || {\n})))));\n_navbar._ajaxProximity = [141,7,60,150,];\n((window.$Nav && $Nav.declare(\"config.ajaxProximity\", window._navbar._ajaxProximity)));");
690 // 867
691 o2 = {};
692 // 868
693 f881945950_0.returns.push(o2);
694 // 869
695 o2.getTime = f881945950_397;
696 // 870
697 f881945950_397.returns.push(1373479178221);
698 // 871
699 o4 = {};
700 // 872
701 f881945950_65.returns.push(o4);
702 // 873
703 // 874
704 // 866
705 geval("_navbar.dynamicMenuUrl = \"/gp/navigation/ajax/dynamicmenu.html\";\n((window.$Nav && $Nav.declare(\"config.dynamicMenuUrl\", _navbar.dynamicMenuUrl)));\n_navbar.dismissNotificationUrl = \"/gp/navigation/ajax/dismissnotification.html\";\n((window.$Nav && $Nav.declare(\"config.dismissNotificationUrl\", _navbar.dismissNotificationUrl)));\n_navbar.dynamicMenus = true;\n((window.$Nav && $Nav.declare(\"config.enableDynamicMenus\", true)));\n_navbar.recordEvUrl = \"/gp/navigation/ajax/recordevent.html\";\n_navbar.recordEvInterval = 60000;\n_navbar.sid = \"176-5336870-9447366\";\n_navbar.rid = \"0M4YTA6K9C1VFV7TYXNC\";\n((window.$Nav && $Nav.declare(\"config.recordEvUrl\", _navbar.recordEvUrl)));\n((window.$Nav && $Nav.declare(\"config.recordEvInterval\", 60000)));\n((window.$Nav && $Nav.declare(\"config.sessionId\", _navbar.sid)));\n((window.$Nav && $Nav.declare(\"config.requestId\", _navbar.rid)));\n_navbar.readyOnATF = false;\n((window.$Nav && $Nav.declare(\"config.readyOnATF\", _navbar.readyOnATF)));\n_navbar.dynamicMenuArgs = {\n    isPrime: 0,\n    primeMenuWidth: 310\n};\n((window.$Nav && $Nav.declare(\"config.dynamicMenuArgs\", ((_navbar.dynamicMenuArgs || {\n})))));\n((window.$Nav && $Nav.declare(\"config.signOutText\", _navbar.signOutText)));\n((window.$Nav && $Nav.declare(\"config.yourAccountPrimeURL\", _navbar.yourAccountPrimer)));\nif (((window.amznJQ && amznJQ.available))) {\n    amznJQ.available(\"jQuery\", function() {\n        if (!jQuery.isArray) {\n            jQuery.isArray = function(o) {\n                return ((Object.prototype.toString.call(o) === \"[object Array]\"));\n            };\n        }\n    ;\n    ;\n    });\n}\n;\n;\nif (((typeof uet == \"function\"))) {\n    uet(\"bb\", \"iss-init-pc\", {\n        wb: 1\n    });\n}\n;\n;\nif (((!window.$SearchJS && window.$Nav))) {\n    window.$SearchJS = $Nav.make();\n}\n;\n;\nif (window.$SearchJS) {\n    var iss, issHost = \"completion.amazon.com/search/complete\", issMktid = \"1\", issSearchAliases = [\"aps\",\"stripbooks\",\"popular\",\"apparel\",\"electronics\",\"sporting\",\"garden\",\"videogames\",\"toys-and-games\",\"jewelry\",\"digital-text\",\"digital-music\",\"watches\",\"grocery\",\"hpc\",\"instant-video\",\"baby-products\",\"office-products\",\"software\",\"magazines\",\"tools\",\"automotive\",\"misc\",\"industrial\",\"mi\",\"pet-supplies\",\"digital-music-track\",\"digital-music-album\",\"mobile\",\"mobile-apps\",\"movies-tv\",\"music-artist\",\"music-album\",\"music-song\",\"stripbooks-spanish\",\"electronics-accessories\",\"photo\",\"audio-video\",\"computers\",\"furniture\",\"kitchen\",\"audiobooks\",\"beauty\",\"shoes\",\"arts-crafts\",\"appliances\",\"gift-cards\",\"pets\",\"outdoor\",\"lawngarden\",\"collectibles\",\"financial\",\"wine\",], updateISSCompletion = function() {\n        iss.updateAutoCompletion();\n    };\n    $SearchJS.importEvent(\"search-js-autocomplete-lib\");\n    $SearchJS.when(\"search-js-autocomplete-lib\").run(function() {\n        $SearchJS.importEvent(\"search-csl\");\n        $SearchJS.when(\"search-csl\").run(function(searchCSL) {\n            if (!searchCSL) {\n                searchCSL = jQuery.searchCSL;\n            }\n        ;\n        ;\n            searchCSL.init(\"Detail\", \"0M4YTA6K9C1VFV7TYXNC\");\n            var ctw = [function() {\n                var searchSelect = jQuery(\"select.searchSelect\"), nodeRegEx = new RegExp(/node=\\d+/i);\n                return function() {\n                    var currDropdownSel = searchSelect.children();\n                    return ((((currDropdownSel.attr(\"data-root-alias\") || nodeRegEx.test(currDropdownSel.attr(\"value\")))) ? \"16458\" : undefined));\n                };\n            }(),];\n            iss = new AutoComplete({\n                src: issHost,\n                mkt: issMktid,\n                aliases: issSearchAliases,\n                fb: 1,\n                dd: \"select.searchSelect\",\n                dupElim: 0,\n                deptText: \"in {department}\",\n                sugText: \"Search suggestions\",\n                sc: 1,\n                ime: 0,\n                imeEnh: 0,\n                imeSpacing: 0,\n                isNavInline: 1,\n                iac: 0,\n                scs: 0,\n                np: 4,\n                doCTW: function(e) {\n                    for (var i = 0; ((i < ctw.length)); i++) {\n                        searchCSL.addWlt(((ctw[i].call ? ctw[i](e) : ctw[i])));\n                    };\n                ;\n                }\n            });\n            $SearchJS.publish(\"search-js-autocomplete\", iss);\n            if (((((typeof uet == \"function\")) && ((typeof uex == \"function\"))))) {\n                uet(\"be\", \"iss-init-pc\", {\n                    wb: 1\n                });\n                uex(\"ld\", \"iss-init-pc\", {\n                    wb: 1\n                });\n            }\n        ;\n        ;\n        });\n    });\n}\n;\n;\n((window.amznJQ && amznJQ.declareAvailable(\"navbarInline\")));\n((window.$Nav && $Nav.declare(\"nav.inline\")));\n((window.amznJQ && amznJQ.available(\"jQuery\", function() {\n    amznJQ.available(\"navbarJS-beacon\", function() {\n    \n    });\n})));\n_navbar._endSpriteImage = new JSBNG__Image();\n_navbar._endSpriteImage.JSBNG__onload = function() {\n    _navbar.componentLoaded();\n};\n_navbar._endSpriteImage.src = window._navbarSpriteUrl;\n((window.$Nav && $Nav.declare(\"config.autoFocus\", false)));\n((window.$Nav && $Nav.declare(\"config.responsiveGW\", !!window._navbar.responsivegw)));\n((window.$Nav && $Nav.when(\"$\", \"flyout.JSBNG__content\").run(function(jQuery) {\n    jQuery(\"#nav_amabotandroid\").parent().html(\"Get CSG-Crazy Ball\\ufffdfree today\");\n})));\n_navbar.browsepromos[\"android\"] = {\n    destination: \"/gp/product/ref=nav_sap_mas_13_07_10?ie=UTF8&ASIN=B00AVFO41K\",\n    productTitle2: \"(List Price: $0.99)\",\n    button: \"Learn more\",\n    price: \"FREE\",\n    productTitle: \"CSG-Crazy Ball - Power Match5\",\n    headline: \"Free App of the Day\",\n    image: \"http://ecx.images-amazon.com/images/I/71ws-s180zL._SS100_.png\"\n};\n_navbar.browsepromos[\"audible\"] = {\n    width: 479,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-19\",\n    height: 470,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/Audible/en_US/images/creative/amazon/beacon/ADBLECRE_2309_Beacon_Headphones_mystery_thehit._V382182717_.png\"\n};\n_navbar.browsepromos[\"automotive-industrial\"] = {\n    width: 479,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/BISS/stores/homepage/flyouts/julyGNO._V381261427_.png\"\n};\n_navbar.browsepromos[\"books\"] = {\n    width: 495,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/books/flyout/books_botysf_flyout_kids-2._V380040471_.png\"\n};\n_navbar.browsepromos[\"clothing-shoes-jewelry\"] = {\n    width: 460,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-20\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2013/GATEWAY/BTS1/FLYOUTS/FO_watch._V381438784_.png\"\n};\n_navbar.browsepromos[\"cloud-drive\"] = {\n    width: 480,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/digital/adrive/images/gno/iOs_GNO1._V385462964_.jpg\"\n};\n_navbar.browsepromos[\"digital-games-software\"] = {\n    width: 518,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-19\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/digital-video-games/flyout/0610-dvg-civ-flyout-b._V382016459_.png\"\n};\n_navbar.browsepromos[\"electronics-computers\"] = {\n    width: 498,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 228,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/camera-photo/flyout/7-1_-confidential-canon_GNO._V379604226_.png\"\n};\n_navbar.browsepromos[\"grocery-health-beauty\"] = {\n    width: 496,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 471,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/wine/flyout/0702_wine_international_flyout.v2._V379935612_.png\"\n};\n_navbar.browsepromos[\"home-garden-tools\"] = {\n    width: 492,\n    promoType: \"wide\",\n    vertOffset: 0,\n    horizOffset: 0,\n    height: 287,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/home/flyout/7-9_furniture-photo-shoot_flyout._V379916182_.png\"\n};\n_navbar.browsepromos[\"instant-video\"] = {\n    width: 500,\n    promoType: \"wide\",\n    vertOffset: \"-10\",\n    horizOffset: \"-20\",\n    height: 495,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/digital/video/merch/UnderTheDome/AIV_GNO-Flyout_UTDPostLaunchV2._V381606810_.png\"\n};\n_navbar.browsepromos[\"kindle\"] = {\n    width: 440,\n    promoType: \"wide\",\n    vertOffset: \"-35\",\n    horizOffset: \"28\",\n    height: 151,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/merch/browse/gno-family-440x151._V389693769_.png\"\n};\n_navbar.browsepromos[\"movies-music-games\"] = {\n    width: 524,\n    promoType: \"wide\",\n    vertOffset: \"-25\",\n    horizOffset: \"-21\",\n    height: 493,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/movies-tv/flyout/0628b-bsf-movie-n-music-flyout._V380036698_.png\"\n};\n_navbar.browsepromos[\"mp3\"] = {\n    width: 520,\n    promoType: \"wide\",\n    vertOffset: \"-20\",\n    horizOffset: \"-21\",\n    height: 492,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/digital/music/mp3/flyout/JayZ_Flyout_1._V380151426_.png\"\n};\n_navbar.browsepromos[\"sports-outdoors\"] = {\n    width: 500,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-20\",\n    height: 487,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/sports-outdoors/flyout/sgfitness._V382533691_.png\"\n};\n_navbar.browsepromos[\"toys-kids-baby\"] = {\n    width: 479,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 395,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/babyregistry/2013sweepstakes/flyout/baby_2013sweeps_flyout._V381448744_.jpg\"\n};\n((window.$Nav && $Nav.declare(\"config.browsePromos\", window._navbar.browsepromos)));\n((window.amznJQ && amznJQ.declareAvailable(\"navbarPromosContent\")));");
706 // 877
707 o5 = {};
708 // 878
709 f881945950_65.returns.push(o5);
710 // 879
711 // 875
712 geval("(function() {\n    var availableWidth = ((((window.JSBNG__innerWidth || JSBNG__document.body.offsetWidth)) - 1));\n;\n    var widths = [1280,];\n    var imageHashMain = [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",];\n    var imageObj = new JSBNG__Image();\n    var sz = 0;\n    for (; ((((sz < widths.length)) && ((availableWidth >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    imageObj.src = imageHashMain[sz];\n})();");
713 // 880
714 geval("function eba5e792808f98ffad2199c25c3f252962a7697cd(JSBNG__event) {\n;\n    if (((typeof measureATFDiff == \"function\"))) {\n        measureATFDiff(new JSBNG__Date().getTime(), 0);\n    }\n;\n;\n;\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"af\");\n        setCSMReq(\"cf\");\n    }\n     else if (((typeof uet == \"function\"))) {\n        uet(\"af\");\n        uet(\"cf\");\n        amznJQ.completedStage(\"amznJQ.AboveTheFold\");\n    }\n    \n;\n;\n};\n;");
715 // 881
716 geval("function e5209abad2ea9a8e8a3d19b988fd4501696abff96(JSBNG__event) {\n    return false;\n};\n;");
717 // 883
718 f881945950_406 = function() { return f881945950_406.returns[f881945950_406.inst++]; };
719 f881945950_406.returns = [];
720 f881945950_406.inst = 0;
721 // 884
722 o0.getElementById = f881945950_406;
723 // 885
724 o6 = {};
725 // 886
726 f881945950_406.returns.push(o6);
727 // 889
728 o7 = {};
729 // 890
730 f881945950_406.returns.push(o7);
731 // 891
732 o7.className = "size0 bottom-thumbs main-image-widget-for-dp standard";
733 // 892
734 // 893
735 // 894
736 // 895
737 o8 = {};
738 // 896
739 o6.style = o8;
740 // 897
741 // 882
742 geval("var colorImages = {\n    initial: [{\n        large: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL.jpg\",\n        landing: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",],\n        hiRes: \"http://ecx.images-amazon.com/images/I/814biaGJWaL._SL1500_.jpg\",\n        thumb: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._SS30_.jpg\",\n        main: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",]\n    },]\n};\n(function(doc) {\n    var mi = doc.getElementById(\"main-image\");\n    var w = ((window.JSBNG__innerWidth || doc.body.offsetWidth));\n    w--;\n    var widths = [1280,];\n    var sz = 0;\n    for (; ((((sz < 1)) && ((w >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    if (((sz || 1))) {\n        var miw = doc.getElementById(\"main-image-widget\");\n        miw.className = miw.className.replace(/size[0-9]+/, ((\"size\" + sz)));\n        if (((sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n         else if (((!sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n        \n    ;\n    ;\n        amznJQ.onCompletion(\"amznJQ.AboveTheFold\", function() {\n            var src = colorImages.initial[0].main[sz];\n            var img = new JSBNG__Image();\n            img.JSBNG__onload = function() {\n                var clone = mi.cloneNode(true);\n                clone.src = src;\n                clone.removeAttribute(\"width\");\n                clone.removeAttribute(\"height\");\n                clone.removeAttribute(\"JSBNG__onload\");\n                mi.parentNode.replaceChild(clone, mi);\n                mi = clone;\n                amznJQ.declareAvailable(\"ImageBlockATF\");\n            };\n            img.src = src;\n        });\n    }\n     else {\n        amznJQ.declareAvailable(\"ImageBlockATF\");\n    }\n;\n;\n    mi.style.display = \"inline\";\n})(JSBNG__document);");
743 // 898
744 geval("function ea61dd9757a317a235aa0212a7a482613abe637a5(JSBNG__event) {\n    if (((typeof (SitbReader) != \"undefined\"))) {\n        SitbReader.LightboxActions.openReader(\"sib_dp_ptu\");\n        return false;\n    }\n;\n;\n};\n;");
745 // 899
746 geval("var legacyOnSelectedQuantityChange = function() {\n    if (((jQuery(\"#pricePlusShippingQty\").length > 0))) {\n        jQuery.ajax({\n            url: \"/gp/product/du/quantity-sip-update.html\",\n            data: {\n                qt: jQuery(\"#quantityDropdownDiv select\").val(),\n                a: jQuery(\"#ASIN\").val(),\n                me: jQuery(\"#merchantID\").val()\n            },\n            dataType: \"html\",\n            success: function(sipHtml) {\n                jQuery(\"#pricePlusShippingQty\").html(sipHtml);\n            }\n        });\n    }\n;\n;\n};\namznJQ.onReady(\"jQuery\", function() {\n    jQuery(\"#quantityDropdownDiv select\").change(legacyOnSelectedQuantityChange);\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"quantityDropDownJS\", function() {\n            var qdd = new jQuery.fn.quantityDropDown();\n            qdd.setPopoverContent(\"\\u003Cstrong\\u003EWe're sorry.  This item is limited to %d per customer.\\u003C/strong\\u003E\", \"\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe strive to provide customers with great prices, and sometimes that means we limit quantity to ensure that the majority of customers have an opportunity to order products that have very low prices or a limited supply.\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe may also adjust quantity in checkout if you have recently purchased this item.\");\n        });\n    });\n});");
747 // 900
748 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"bbopCheckBoxJS\", function() {\n        var bbopJS = new jQuery.fn.bbopCheckBox();\n        bbopJS.initialize(1, 0, \"To get FREE Two-Day Shipping on this item, proceed to checkout using &quot;Add to Cart&quot;\");\n    });\n});");
749 // 901
750 geval("var gbSecure1Click = true;\nif (((((typeof (gbSecure1Click) != \"undefined\")) && gbSecure1Click))) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickBuyButton\").click(function() {\n            var hbbAction = jQuery(\"#handleBuy\").attr(\"action\").replace(\"http:\", \"https:\");\n            jQuery(\"#handleBuy\").attr(\"action\", hbbAction);\n            return true;\n        });\n    });\n}\n;\n;");
751 // 902
752 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
753 // 904
754 o2 = {};
755 // 905
756 f881945950_0.returns.push(o2);
757 // 906
758 o2.getTime = f881945950_397;
759 // undefined
760 o2 = null;
761 // 907
762 f881945950_397.returns.push(1373479178221);
763 // 908
764 o4 = {};
765 // 909
766 f881945950_65.returns.push(o4);
767 // 910
768 // 911
769 // undefined
770 o4 = null;
771 // 903
772 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
773 // 914
774 o5 = {};
775 // 915
776 f881945950_65.returns.push(o5);
777 // 916
778 // undefined
779 o5 = null;
780 // 912
781 geval("(function() {\n    var availableWidth = ((((window.JSBNG__innerWidth || JSBNG__document.body.offsetWidth)) - 1));\n;\n    var widths = [1280,];\n    var imageHashMain = [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",];\n    var imageObj = new JSBNG__Image();\n    var sz = 0;\n    for (; ((((sz < widths.length)) && ((availableWidth >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    imageObj.src = imageHashMain[sz];\n})();");
782 // 917
783 geval("function eba5e792808f98ffad2199c25c3f252962a7697cd(JSBNG__event) {\n;\n    if (((typeof measureATFDiff == \"function\"))) {\n        measureATFDiff(new JSBNG__Date().getTime(), 0);\n    }\n;\n;\n;\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"af\");\n        setCSMReq(\"cf\");\n    }\n     else if (((typeof uet == \"function\"))) {\n        uet(\"af\");\n        uet(\"cf\");\n        amznJQ.completedStage(\"amznJQ.AboveTheFold\");\n    }\n    \n;\n;\n};\n;");
784 // 918
785 geval("function e5209abad2ea9a8e8a3d19b988fd4501696abff96(JSBNG__event) {\n    return false;\n};\n;");
786 // 920
787 f881945950_406 = function() { return f881945950_406.returns[f881945950_406.inst++]; };
788 f881945950_406.returns = [];
789 f881945950_406.inst = 0;
790 // 922
791 o6 = {};
792 // 923
793 f881945950_406.returns.push(o6);
794 // 926
795 o7 = {};
796 // 927
797 f881945950_406.returns.push(o7);
798 // 928
799 o7.className = "size0 bottom-thumbs main-image-widget-for-dp standard";
800 // 929
801 // undefined
802 o7 = null;
803 // 930
804 // 931
805 // 932
806 o8 = {};
807 // 933
808 o6.style = o8;
809 // undefined
810 o6 = null;
811 // 934
812 // undefined
813 o8 = null;
814 // 919
815 geval("var colorImages = {\n    initial: [{\n        large: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL.jpg\",\n        landing: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",],\n        hiRes: \"http://ecx.images-amazon.com/images/I/814biaGJWaL._SL1500_.jpg\",\n        thumb: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._SS30_.jpg\",\n        main: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",]\n    },]\n};\n(function(doc) {\n    var mi = doc.getElementById(\"main-image\");\n    var w = ((window.JSBNG__innerWidth || doc.body.offsetWidth));\n    w--;\n    var widths = [1280,];\n    var sz = 0;\n    for (; ((((sz < 1)) && ((w >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    if (((sz || 1))) {\n        var miw = doc.getElementById(\"main-image-widget\");\n        miw.className = miw.className.replace(/size[0-9]+/, ((\"size\" + sz)));\n        if (((sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n         else if (((!sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n        \n    ;\n    ;\n        amznJQ.onCompletion(\"amznJQ.AboveTheFold\", function() {\n            var src = colorImages.initial[0].main[sz];\n            var img = new JSBNG__Image();\n            img.JSBNG__onload = function() {\n                var clone = mi.cloneNode(true);\n                clone.src = src;\n                clone.removeAttribute(\"width\");\n                clone.removeAttribute(\"height\");\n                clone.removeAttribute(\"JSBNG__onload\");\n                mi.parentNode.replaceChild(clone, mi);\n                mi = clone;\n                amznJQ.declareAvailable(\"ImageBlockATF\");\n            };\n            img.src = src;\n        });\n    }\n     else {\n        amznJQ.declareAvailable(\"ImageBlockATF\");\n    }\n;\n;\n    mi.style.display = \"inline\";\n})(JSBNG__document);");
816 // 935
817 geval("function ea61dd9757a317a235aa0212a7a482613abe637a5(JSBNG__event) {\n    if (((typeof (SitbReader) != \"undefined\"))) {\n        SitbReader.LightboxActions.openReader(\"sib_dp_ptu\");\n        return false;\n    }\n;\n;\n};\n;");
818 // 936
819 geval("var legacyOnSelectedQuantityChange = function() {\n    if (((jQuery(\"#pricePlusShippingQty\").length > 0))) {\n        jQuery.ajax({\n            url: \"/gp/product/du/quantity-sip-update.html\",\n            data: {\n                qt: jQuery(\"#quantityDropdownDiv select\").val(),\n                a: jQuery(\"#ASIN\").val(),\n                me: jQuery(\"#merchantID\").val()\n            },\n            dataType: \"html\",\n            success: function(sipHtml) {\n                jQuery(\"#pricePlusShippingQty\").html(sipHtml);\n            }\n        });\n    }\n;\n;\n};\namznJQ.onReady(\"jQuery\", function() {\n    jQuery(\"#quantityDropdownDiv select\").change(legacyOnSelectedQuantityChange);\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"quantityDropDownJS\", function() {\n            var qdd = new jQuery.fn.quantityDropDown();\n            qdd.setPopoverContent(\"\\u003Cstrong\\u003EWe're sorry.  This item is limited to %d per customer.\\u003C/strong\\u003E\", \"\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe strive to provide customers with great prices, and sometimes that means we limit quantity to ensure that the majority of customers have an opportunity to order products that have very low prices or a limited supply.\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe may also adjust quantity in checkout if you have recently purchased this item.\");\n        });\n    });\n});");
820 // 937
821 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"bbopCheckBoxJS\", function() {\n        var bbopJS = new jQuery.fn.bbopCheckBox();\n        bbopJS.initialize(1, 0, \"To get FREE Two-Day Shipping on this item, proceed to checkout using &quot;Add to Cart&quot;\");\n    });\n});");
822 // 938
823 geval("var gbSecure1Click = true;\nif (((((typeof (gbSecure1Click) != \"undefined\")) && gbSecure1Click))) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickBuyButton\").click(function() {\n            var hbbAction = jQuery(\"#handleBuy\").attr(\"action\").replace(\"http:\", \"https:\");\n            jQuery(\"#handleBuy\").attr(\"action\", hbbAction);\n            return true;\n        });\n    });\n}\n;\n;");
824 // 939
825 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
826 // 941
827 o2 = {};
828 // undefined
829 o2 = null;
830 // 940
831 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
832 // 942
833 geval("amznJQ.onReady(\"jQuery\", function() {\n    if (((((((typeof dpLdWidget !== \"undefined\")) && ((typeof dpLdWidget.deal !== \"undefined\")))) && ((typeof dpLdWidget.deal.asins !== \"undefined\"))))) {\n        var dealPriceText;\n        if (((((((typeof Deal !== \"undefined\")) && ((typeof Deal.Price !== \"undefined\")))) && ((typeof dpLdWidget.deal.asins[0] !== \"undefined\"))))) {\n            var dp = dpLdWidget.deal.asins[0].dealPrice;\n            if (((dp.price > 396))) {\n                dealPriceText = Deal.Price.format(dp);\n                jQuery(\"#rbb_bb_trigger .bb_price, #rentalPriceBlockGrid .buyNewOffers .rentPrice\").html(dealPriceText);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    }\n;\n;\n    jQuery(\"#rbbContainer .rbb_section .rbb_header\").click(function(e) {\n        var target = jQuery(e.target);\n        if (!target.hasClass(\"rbb_header\")) {\n            target.parents(\".rbbHeaderLink\").attr(\"href\", \"javascript:void(0);\");\n        }\n    ;\n    ;\n        var t = jQuery(this);\n        var header = ((t.hasClass(\"rbb_header\") ? t : t.parents(\".rbb_header\")));\n        if (header.parents(\".rbb_section\").hasClass(\"selected\")) {\n            return false;\n        }\n    ;\n    ;\n        jQuery(\"#radiobuyboxDivId .bb_radio\").attr(\"checked\", false);\n        header.JSBNG__find(\".bb_radio\").attr(\"checked\", \"checked\");\n        header.parents(\".rbb_section\").removeClass(\"unselected\").addClass(\"selected\");\n        jQuery(\"#radiobuyboxDivId .abbListInput\").attr(\"checked\", false);\n        var bbClicked = jQuery(this).attr(\"id\");\n        var slideMeDown, slideMeUp;\n        jQuery(\"#radiobuyboxDivId .rbb_section\").each(function(i, bb) {\n            if (((jQuery(bb).JSBNG__find(\".rbb_header\")[0].id == bbClicked))) {\n                slideMeDown = jQuery(bb);\n            }\n             else if (jQuery(bb).hasClass(\"selected\")) {\n                slideMeUp = jQuery(bb);\n            }\n            \n        ;\n        ;\n        });\n        slideMeUp.JSBNG__find(\".rbb_content\").slideUp(500, function() {\n            slideMeUp.removeClass(\"selected\").addClass(\"unselected\");\n        });\n        slideMeDown.JSBNG__find(\".rbb_content\").slideDown(500);\n        JSBNG__location.hash = ((\"#selectedObb=\" + header.attr(\"id\")));\n        return true;\n    });\n    var locationHash = JSBNG__location.hash;\n    if (((locationHash.length != 0))) {\n        var selectObb = locationHash.substring(1).split(\"=\")[1];\n        if (((typeof (selectObb) != \"undefined\"))) {\n            var target = jQuery(((\"#\" + selectObb)));\n            if (((target.length != 0))) {\n                target.trigger(\"click\");\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    }\n;\n;\n});");
834 // 943
835 geval("function e0ad247b2845d5a62f8d680c69024109c41a3aba5(JSBNG__event) {\n    return false;\n};\n;");
836 // 944
837 geval("if (((typeof window.amznJQ != \"undefined\"))) {\n    amznJQ.onReady(\"popover\", function() {\n        jQuery(\"#tradeinBuyboxLearnMore\").amazonPopoverTrigger({\n            closeText: \"Close\",\n            width: 580,\n            group: \"tradein\",\n            destination: \"/gp/tradein/popovers/ajax-popover.html?ie=UTF8&name=howToTradeIn\",\n            title: \"How to Trade In\"\n        });\n    });\n}\n;\n;");
838 // 945
839 geval("function ef6ad9c87b00e618dc7a9b5e5140bbc8ba2edd739(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=400\");\n    return false;\n};\n;");
840 // 946
841 geval("function ed3bd13821903ecb97b20e31910662670d650c5cb(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=400\");\n    return false;\n};\n;");
842 // 947
843 geval("function ea6dbd42abc1e9b3dbebd197268ce92a9b0e0b4ad(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=570\");\n    return false;\n};\n;");
844 // 948
845 geval("if (((typeof window.amznJQ != \"undefined\"))) {\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"share-with-friends-js-new\", function() {\n            var popoverParams = {\n                url: \"/gp/pdp/taf/dpPop.html/ref=cm_sw_p_view_dp_geA3rb04T691F?ie=UTF8&contentID=0596517742&contentName=item&contentType=asin&contentURI=%2Fdp%2F0596517742&emailCaptionStrID=&emailCustomMsgStrID=&emailDescStrID=&emailSubjectStrID=&emailTemplate=%2Fgp%2Fpdp%2Fcommon%2Femail%2Fshare-product&forceSprites=1&id=0596517742&imageURL=&isDynamicSWF=0&isEmail=0&learnMoreButton=&merchantID=&parentASIN=0596517742&placementID=dp_geA3rb04T691F&ra=taf&referer=http%253A%252F%252Fwww.amazon.com%252Fgp%252Fproduct%252F0596517742%252Fref%253D&relatedAccounts=amazondeals%2Camazonmp3&suppressPurchaseReqLogin=&titleText=&tt=sh&viaAccount=amazon\",\n                title: \"Share this item via Email\",\n                closeText: \"Close\",\n                isCompact: false\n            };\n            amz_taf_triggers.swftext = popoverParams;\n            amz_taf_generatePopover(\"swftext\", false);\n        });\n    });\n}\n;\n;");
846 // 949
847 geval("amznJQ.onReady(\"bylinePopover\", function() {\n\n});");
848 // 950
849 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (!$this.data(\"init\")) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        jQuery(this).acrPopover();\n    });\n});");
850 // 951
851 geval("function ed2276bf20246f30c68990f23f81d89eadb38c166(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
852 // 952
853 geval("function ecf07c0edda27bc80d526213d7c6929ffbddc8bbc(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
854 // 953
855 geval("function efaf91b69248e7e79f131f7036cba56d101e7bfb6(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
856 // 954
857 geval("function efb799c660c9baca416793b32167d426e04dee131(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
858 // 955
859 geval("function e454b94055c2707a9784ef2ca3e2fe7a272f31974(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=mk_sss_dp_1?ie=UTF8&nodeId=527692&pop-up=1\", \"AmazonHelp\", \"width=550,height=550,resizable=1,scrollbars=1,toolbar=0,status=0\");\n};\n;");
860 // 956
861 geval("amznJQ.declareAvailable(\"gbPriceBlockFields\");");
862 // 958
863 o2 = {};
864 // 959
865 f881945950_0.returns.push(o2);
866 // 960
867 f881945950_413 = function() { return f881945950_413.returns[f881945950_413.inst++]; };
868 f881945950_413.returns = [];
869 f881945950_413.inst = 0;
870 // 961
871 o2.getHours = f881945950_413;
872 // 962
873 f881945950_413.returns.push(13);
874 // 963
875 f881945950_414 = function() { return f881945950_414.returns[f881945950_414.inst++]; };
876 f881945950_414.returns = [];
877 f881945950_414.inst = 0;
878 // 964
879 o2.getMinutes = f881945950_414;
880 // 965
881 f881945950_414.returns.push(59);
882 // 966
883 f881945950_415 = function() { return f881945950_415.returns[f881945950_415.inst++]; };
884 f881945950_415.returns = [];
885 f881945950_415.inst = 0;
886 // 967
887 o2.getSeconds = f881945950_415;
888 // 968
889 f881945950_415.returns.push(38);
890 // 969
891 o4 = {};
892 // 970
893 f881945950_0.returns.push(o4);
894 // 971
895 o4.getHours = f881945950_413;
896 // 972
897 f881945950_413.returns.push(13);
898 // 973
899 o4.getMinutes = f881945950_414;
900 // 974
901 f881945950_414.returns.push(59);
902 // 975
903 o4.getSeconds = f881945950_415;
904 // 976
905 f881945950_415.returns.push(38);
906 // 977
907 o0.layers = void 0;
908 // 978
909 o0.all = void 0;
910 // 981
911 f881945950_406.returns.push(null);
912 // 986
913 f881945950_406.returns.push(null);
914 // 987
915 f881945950_16.returns.push(2);
916 // 957
917 geval("try {\n    var ftCountdownElementIDs = new Array();\n    var ftEntireMessageElementIDs = new Array();\n    var FT_CurrentDisplayMin = new Array();\n    var clientServerTimeDrift;\n    var firstTimeUpdate = false;\n    function ftRegisterCountdownElementID(elementID) {\n        ftCountdownElementIDs[ftCountdownElementIDs.length] = elementID;\n    };\n;\n    function ftRegisterEntireMessageElementID(elementID) {\n        ftEntireMessageElementIDs[ftEntireMessageElementIDs.length] = elementID;\n    };\n;\n    function getTimeRemainingString(hours, minutes) {\n        var hourString = ((((hours == 1)) ? \"hr\" : \"hrs\"));\n        var minuteString = ((((minutes == 1)) ? \"min\" : \"mins\"));\n        if (((hours == 0))) {\n            return ((((minutes + \" \")) + minuteString));\n        }\n    ;\n    ;\n        if (((minutes == 0))) {\n            return ((((hours + \" \")) + hourString));\n        }\n    ;\n    ;\n        return ((((((((((((hours + \" \")) + hourString)) + \" \")) + minutes)) + \" \")) + minuteString));\n        return ((((((((((((hours + \" \")) + hourString)) + \"  \")) + minutes)) + \" \")) + minuteString));\n    };\n;\n    function FT_displayCountdown(forceUpdate) {\n        if (((((!JSBNG__document.layers && !JSBNG__document.all)) && !JSBNG__document.getElementById))) {\n            return;\n        }\n    ;\n    ;\n        FT_showHtmlElement(\"ftShipString\", true, \"inline\");\n        var FT_remainSeconds = ((FT_givenSeconds - FT_actualSeconds));\n        if (((FT_remainSeconds < 1))) {\n            FT_showEntireMessageElement(false);\n        }\n    ;\n    ;\n        var FT_secondsPerDay = ((((24 * 60)) * 60));\n        var FT_daysLong = ((FT_remainSeconds / FT_secondsPerDay));\n        var FT_days = Math.floor(FT_daysLong);\n        var FT_hoursLong = ((((FT_daysLong - FT_days)) * 24));\n        var FT_hours = Math.floor(FT_hoursLong);\n        var FT_minsLong = ((((FT_hoursLong - FT_hours)) * 60));\n        var FT_mins = Math.floor(FT_minsLong);\n        var FT_secsLong = ((((FT_minsLong - FT_mins)) * 60));\n        var FT_secs = Math.floor(FT_secsLong);\n        if (((FT_days > 0))) {\n            FT_hours = ((((FT_days * 24)) + FT_hours));\n        }\n    ;\n    ;\n        window.JSBNG__setTimeout(\"FT_getTime()\", 1000);\n        var ftCountdown = getTimeRemainingString(FT_hours, FT_mins);\n        for (var i = 0; ((i < ftCountdownElementIDs.length)); i++) {\n            var countdownElement = JSBNG__document.getElementById(ftCountdownElementIDs[i]);\n            if (countdownElement) {\n                if (((((((((FT_CurrentDisplayMin[i] != FT_mins)) || forceUpdate)) || ((countdownElement.innerHTML == \"\")))) || firstTimeUpdate))) {\n                    countdownElement.innerHTML = ftCountdown;\n                    FT_CurrentDisplayMin[i] = FT_mins;\n                    firstTimeUpdate = false;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n    };\n;\n    function FT_showEntireMessageElement(shouldShow) {\n        for (var i = 0; ((i < ftEntireMessageElementIDs.length)); i++) {\n            FT_showHtmlElement(ftEntireMessageElementIDs[i], shouldShow);\n        };\n    ;\n    };\n;\n    function FT_showHtmlElement(elementID, shouldShow, displayStyle) {\n        var element = JSBNG__document.getElementById(elementID);\n        if (element) {\n            if (shouldShow) {\n                element.style.display = ((((displayStyle != null)) ? displayStyle : \"\"));\n            }\n             else {\n                element.style.display = \"none\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    function FT_getAndClearCutOffEpochSeconds() {\n        var ftCutOffEpochSecondsElementID = \"ftCutOffEpochSeconds\";\n        var ftServerCurrentEpochSecondsElementID = \"ftServerCurrentEpochSeconds\";\n        if (((((JSBNG__document.layers || JSBNG__document.all)) || JSBNG__document.getElementById))) {\n            if (JSBNG__document.getElementById(ftCutOffEpochSecondsElementID)) {\n                var cutOffEpochSeconds = JSBNG__document.getElementById(ftCutOffEpochSecondsElementID).innerHTML;\n                if (((cutOffEpochSeconds != \"\"))) {\n                    JSBNG__document.getElementById(ftCutOffEpochSecondsElementID).innerHTML = \"\";\n                    if (((((clientServerTimeDrift == null)) && JSBNG__document.getElementById(ftServerCurrentEpochSecondsElementID)))) {\n                        var serverCurrentEpochSeconds = ((JSBNG__document.getElementById(ftServerCurrentEpochSecondsElementID).innerHTML * 1));\n                        clientServerTimeDrift = ((((new JSBNG__Date().getTime() / 1000)) - serverCurrentEpochSeconds));\n                    }\n                ;\n                ;\n                    return ((((((clientServerTimeDrift == null)) ? 0 : clientServerTimeDrift)) + ((cutOffEpochSeconds * 1))));\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        return 0;\n    };\n;\n    function FT_getCountdown(secondsLeft) {\n        var FT_currentTime = new JSBNG__Date();\n        var FT_currentHours = FT_currentTime.getHours();\n        var FT_currentMins = FT_currentTime.getMinutes();\n        var FT_currentSecs = FT_currentTime.getSeconds();\n        FT_givenSeconds = ((((((FT_currentHours * 3600)) + ((FT_currentMins * 60)))) + FT_currentSecs));\n        var FT_secondsFromCat = 18026;\n        if (((secondsLeft != null))) {\n            FT_secondsFromCat = secondsLeft;\n        }\n    ;\n    ;\n        FT_givenSeconds += FT_secondsFromCat;\n        FT_getTime();\n    };\n;\n    function FT_getTime() {\n        var FT_newCurrentTime = new JSBNG__Date();\n        var FT_actualHours = FT_newCurrentTime.getHours();\n        var FT_actualMins = FT_newCurrentTime.getMinutes();\n        var FT_actualSecs = FT_newCurrentTime.getSeconds();\n        FT_actualSeconds = ((((((FT_actualHours * 3600)) + ((FT_actualMins * 60)))) + FT_actualSecs));\n        var cutOffTimeFromPageElement = FT_getAndClearCutOffEpochSeconds();\n        if (cutOffTimeFromPageElement) {\n            var countDownSeconds = ((cutOffTimeFromPageElement - ((FT_newCurrentTime.getTime() / 1000))));\n            if (((countDownSeconds >= 1))) {\n                FT_showEntireMessageElement(true);\n            }\n        ;\n        ;\n            FT_givenSeconds = ((countDownSeconds + FT_actualSeconds));\n        }\n    ;\n    ;\n        FT_displayCountdown();\n    };\n;\n    function onAjaxUpdate_fast_track(asin) {\n        var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\n        var cutOffElems = JSBNG__document.getElementsByName(((\"promise-cutoff-time.\" + asin)));\n        if (((((cutOffElems == null)) || ((cutOffElems.length == 0))))) {\n            return;\n        }\n    ;\n    ;\n        if (((timerDiv && timerDiv.style))) {\n            timerDiv.style.display = \"inline\";\n        }\n    ;\n    ;\n        var cutOffTimeVal = cutOffElems[0].value;\n        var cutOffTime = parseInt(cutOffTimeVal);\n        var currSecs = ((new JSBNG__Date().getTime() / 1000));\n        var secsLeft = ((cutOffTime - currSecs));\n        FT_getCountdown(secsLeft);\n    };\n;\n    FT_getCountdown();\n} catch (JSBNG_ex) {\n\n};");
918 // 988
919 geval("ftRegisterCountdownElementID(\"ftCountdown\");\nftRegisterEntireMessageElementID(\"ftMessage\");");
920 // 989
921 geval("function e75b493e6089a201530187bf51690fe2bbd897fb3(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=ftinfo_dp_?ie=UTF8&nodeId=3510241&pop-up=1\", \"AmazonHelp\", \"width=550,height=600,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
922 // 992
923 o5 = {};
924 // 993
925 f881945950_406.returns.push(o5);
926 // 994
927 o6 = {};
928 // 995
929 o5.style = o6;
930 // 997
931 // 990
932 geval("var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\nif (((timerDiv && timerDiv.style))) {\n    timerDiv.style.display = \"inline\";\n}\n;\n;");
933 // 998
934 geval("if (((typeof measureATFDiff == \"function\"))) {\n    measureATFDiff(0, new JSBNG__Date().getTime());\n}\n;\n;\n;\nif (((typeof setCSMReq == \"function\"))) {\n    setCSMReq(\"af\");\n}\n else if (((typeof uet == \"function\"))) {\n    uet(\"af\");\n}\n\n;\n;");
935 // 999
936 geval("function ee976dbac42452e3152d3a48f703b0a8e017fa4d8(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
937 // 1000
938 geval("function ed771f07937fda9c8dd04b0376cf96f16a586029a(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
939 // 1001
940 geval("amznJQ.available(\"jQuery\", function() {\n    window.sitbWeblab = \"\";\n    if (((typeof (Vellum) == \"undefined\"))) {\n        Vellum = {\n            js: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-js._V383092699_.js\",\n            sj: \"/gp/search-inside/js?locale=en_US&version=201305301526\",\n            css: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-css._V383092698_.css\",\n            pl: function() {\n                Vellum.lj(Vellum.js, Vellum.sj, Vellum.css);\n            },\n            lj: function(u, u2, uc) {\n                if (window.vellumLjDone) {\n                    return;\n                }\n            ;\n            ;\n                window.vellumLjDone = true;\n                var d = JSBNG__document;\n                var s = d.createElement(\"link\");\n                s.type = \"text/css\";\n                s.rel = \"stylesheet\";\n                s.href = uc;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n                s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u2;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            lj2: function(u) {\n                var d = JSBNG__document;\n                var s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            go: function() {\n                sitbLodStart = new JSBNG__Date().getTime();\n                jQuery(\"body\").css(\"overflow\", \"hidden\");\n                var jqw = jQuery(window);\n                var h = jqw.height();\n                var w = jqw.width();\n                var st = jqw.scrollTop();\n                jQuery(\"#vellumShade\").css({\n                    JSBNG__top: st,\n                    height: h,\n                    width: w\n                }).show();\n                var vli = jQuery(\"#vellumLdgIco\");\n                var nl = ((((w / 2)) - ((vli.width() / 2))));\n                var nt = ((((st + ((h / 2)))) - ((vli.height() / 2))));\n                vli.css({\n                    left: nl,\n                    JSBNG__top: nt\n                }).show();\n                JSBNG__setTimeout(\"Vellum.x()\", 20000);\n                Vellum.pl();\n            },\n            x: function() {\n                jQuery(\"#vellumMsgTxt\").html(\"An error occurred while trying to show this book.\");\n                jQuery(\"#vellumMsgHdr\").html(\"Server Timeout\");\n                jQuery(\"#vellumMsg\").show();\n                var reftagImage = new JSBNG__Image();\n                reftagImage.src = \"/gp/search-inside/reftag/ref=rdr_bar_jsto\";\n            },\n            h: function() {\n                jQuery(\"#vellumMsg\").hide();\n                jQuery(\"#vellumShade\").hide();\n                jQuery(\"#vellumLdgIco\").hide();\n                jQuery(\"body\").css(\"overflow\", \"auto\");\n            },\n            cf: function(a) {\n                return function() {\n                    v.mt = a;\n                    v.rg = Array.prototype.slice.call(arguments);\n                    v.go();\n                };\n            },\n            c: function(a) {\n                var v = Vellum;\n                v.mt = \"c\";\n                v.rg = [a,];\n                v.pl();\n            }\n        };\n        var f = \"opqr\".split(\"\");\n        {\n            var fin7keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin7i = (0);\n            var i;\n            for (; (fin7i < fin7keys.length); (fin7i++)) {\n                ((i) = (fin7keys[fin7i]));\n                {\n                    var v = Vellum;\n                    v[f[i]] = v.cf(f[i]);\n                };\n            };\n        };\n    ;\n        sitbAsin = \"0596517742\";\n        SitbReader = {\n            LightboxActions: {\n                openReader: function(r) {\n                    Vellum.o(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToRandomPage: function(r) {\n                    Vellum.r(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToSearchResults: function(q, r) {\n                    Vellum.q(\"0596517742\", q, r);\n                    return false;\n                },\n                openReaderToPage: function(p, t, r) {\n                    Vellum.p(\"0596517742\", p, t, r);\n                    return false;\n                }\n            }\n        };\n    }\n;\n;\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        Vellum.c(\"0596517742\");\n    });\n});");
941 // 1003
942 o7 = {};
943 // 1004
944 f881945950_0.returns.push(o7);
945 // 1005
946 o2 = {};
947 // 1006
948 f881945950_0.returns.push(o2);
949 // 1007
950 f881945950_413 = function() { return f881945950_413.returns[f881945950_413.inst++]; };
951 f881945950_413.returns = [];
952 f881945950_413.inst = 0;
953 // 1008
954 o2.getHours = f881945950_413;
955 // 1009
956 f881945950_413.returns.push(13);
957 // 1010
958 f881945950_414 = function() { return f881945950_414.returns[f881945950_414.inst++]; };
959 f881945950_414.returns = [];
960 f881945950_414.inst = 0;
961 // 1011
962 o2.getMinutes = f881945950_414;
963 // 1012
964 f881945950_414.returns.push(59);
965 // 1013
966 f881945950_415 = function() { return f881945950_415.returns[f881945950_415.inst++]; };
967 f881945950_415.returns = [];
968 f881945950_415.inst = 0;
969 // 1014
970 o2.getSeconds = f881945950_415;
971 // 1015
972 f881945950_415.returns.push(38);
973 // 1016
974 o4 = {};
975 // 1017
976 f881945950_0.returns.push(o4);
977 // 1018
978 o4.getHours = f881945950_413;
979 // 1019
980 f881945950_413.returns.push(13);
981 // 1020
982 o4.getMinutes = f881945950_414;
983 // 1021
984 f881945950_414.returns.push(59);
985 // 1022
986 o4.getSeconds = f881945950_415;
987 // 1023
988 f881945950_415.returns.push(38);
989 // 1028
990 f881945950_406.returns.push(null);
991 // 1033
992 f881945950_406.returns.push(null);
993 // 1034
994 f881945950_16.returns.push(2);
995 // 1002
996 geval("if (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.addLogical(\"twister-media-matrix\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/tmmJS/tmmJS-combined-core-4624._V1_.js\",]);\n    window._tmm_1 = +new JSBNG__Date();\n}\n;\n;");
997 // 1035
998 geval("ftRegisterCountdownElementID(\"ftCountdown\");\nftRegisterEntireMessageElementID(\"ftMessage\");");
999 // 1036
1000 geval("function e75b493e6089a201530187bf51690fe2bbd897fb3(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=ftinfo_dp_?ie=UTF8&nodeId=3510241&pop-up=1\", \"AmazonHelp\", \"width=550,height=600,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1001 // 1039
1002 o5 = {};
1003 // 1040
1004 f881945950_406.returns.push(o5);
1005 // 1041
1006 o6 = {};
1007 // 1042
1008 o5.style = o6;
1009 // 1044
1010 // 1037
1011 geval("var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\nif (((timerDiv && timerDiv.style))) {\n    timerDiv.style.display = \"inline\";\n}\n;\n;");
1012 // 1045
1013 geval("try {\n    if (((typeof measureATFDiff == \"function\"))) {\n        measureATFDiff(0, new JSBNG__Date().getTime());\n    }\n;\n;\n;\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"af\");\n    }\n     else if (((typeof uet == \"function\"))) {\n        uet(\"af\");\n    }\n    \n;\n;\n} catch (JSBNG_ex) {\n\n};");
1014 // 1046
1015 geval("function ee976dbac42452e3152d3a48f703b0a8e017fa4d8(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
1016 // 1047
1017 geval("function ed771f07937fda9c8dd04b0376cf96f16a586029a(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
1018 // 1048
1019 geval("amznJQ.available(\"jQuery\", function() {\n    window.sitbWeblab = \"\";\n    if (((typeof (Vellum) == \"undefined\"))) {\n        Vellum = {\n            js: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-js._V383092699_.js\",\n            sj: \"/gp/search-inside/js?locale=en_US&version=201305301526\",\n            css: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-css._V383092698_.css\",\n            pl: function() {\n                Vellum.lj(Vellum.js, Vellum.sj, Vellum.css);\n            },\n            lj: function(u, u2, uc) {\n                if (window.vellumLjDone) {\n                    return;\n                }\n            ;\n            ;\n                window.vellumLjDone = true;\n                var d = JSBNG__document;\n                var s = d.createElement(\"link\");\n                s.type = \"text/css\";\n                s.rel = \"stylesheet\";\n                s.href = uc;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n                s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u2;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            lj2: function(u) {\n                var d = JSBNG__document;\n                var s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            go: function() {\n                sitbLodStart = new JSBNG__Date().getTime();\n                jQuery(\"body\").css(\"overflow\", \"hidden\");\n                var jqw = jQuery(window);\n                var h = jqw.height();\n                var w = jqw.width();\n                var st = jqw.scrollTop();\n                jQuery(\"#vellumShade\").css({\n                    JSBNG__top: st,\n                    height: h,\n                    width: w\n                }).show();\n                var vli = jQuery(\"#vellumLdgIco\");\n                var nl = ((((w / 2)) - ((vli.width() / 2))));\n                var nt = ((((st + ((h / 2)))) - ((vli.height() / 2))));\n                vli.css({\n                    left: nl,\n                    JSBNG__top: nt\n                }).show();\n                JSBNG__setTimeout(\"Vellum.x()\", 20000);\n                Vellum.pl();\n            },\n            x: function() {\n                jQuery(\"#vellumMsgTxt\").html(\"An error occurred while trying to show this book.\");\n                jQuery(\"#vellumMsgHdr\").html(\"Server Timeout\");\n                jQuery(\"#vellumMsg\").show();\n                var reftagImage = new JSBNG__Image();\n                reftagImage.src = \"/gp/search-inside/reftag/ref=rdr_bar_jsto\";\n            },\n            h: function() {\n                jQuery(\"#vellumMsg\").hide();\n                jQuery(\"#vellumShade\").hide();\n                jQuery(\"#vellumLdgIco\").hide();\n                jQuery(\"body\").css(\"overflow\", \"auto\");\n            },\n            cf: function(a) {\n                return function() {\n                    v.mt = a;\n                    v.rg = Array.prototype.slice.call(arguments);\n                    v.go();\n                };\n            },\n            c: function(a) {\n                var v = Vellum;\n                v.mt = \"c\";\n                v.rg = [a,];\n                v.pl();\n            }\n        };\n        var f = \"opqr\".split(\"\");\n        {\n            var fin8keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin8i = (0);\n            var i;\n            for (; (fin8i < fin8keys.length); (fin8i++)) {\n                ((i) = (fin8keys[fin8i]));\n                {\n                    var v = Vellum;\n                    v[f[i]] = v.cf(f[i]);\n                };\n            };\n        };\n    ;\n        sitbAsin = \"0596517742\";\n        SitbReader = {\n            LightboxActions: {\n                openReader: function(r) {\n                    Vellum.o(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToRandomPage: function(r) {\n                    Vellum.r(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToSearchResults: function(q, r) {\n                    Vellum.q(\"0596517742\", q, r);\n                    return false;\n                },\n                openReaderToPage: function(p, t, r) {\n                    Vellum.p(\"0596517742\", p, t, r);\n                    return false;\n                }\n            }\n        };\n    }\n;\n;\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        Vellum.c(\"0596517742\");\n    });\n});");
1020 // 1050
1021 o7 = {};
1022 // 1051
1023 f881945950_0.returns.push(o7);
1024 // 1052
1025 o8 = {};
1026 // 1053
1027 o2 = {};
1028 // 1054
1029 f881945950_0.returns.push(o2);
1030 // 1055
1031 f881945950_413 = function() { return f881945950_413.returns[f881945950_413.inst++]; };
1032 f881945950_413.returns = [];
1033 f881945950_413.inst = 0;
1034 // 1056
1035 o2.getHours = f881945950_413;
1036 // 1057
1037 f881945950_413.returns.push(13);
1038 // 1058
1039 f881945950_414 = function() { return f881945950_414.returns[f881945950_414.inst++]; };
1040 f881945950_414.returns = [];
1041 f881945950_414.inst = 0;
1042 // 1059
1043 o2.getMinutes = f881945950_414;
1044 // 1060
1045 f881945950_414.returns.push(59);
1046 // 1061
1047 f881945950_415 = function() { return f881945950_415.returns[f881945950_415.inst++]; };
1048 f881945950_415.returns = [];
1049 f881945950_415.inst = 0;
1050 // 1062
1051 o2.getSeconds = f881945950_415;
1052 // undefined
1053 o2 = null;
1054 // 1063
1055 f881945950_415.returns.push(38);
1056 // 1064
1057 o4 = {};
1058 // 1065
1059 f881945950_0.returns.push(o4);
1060 // 1066
1061 o4.getHours = f881945950_413;
1062 // 1067
1063 f881945950_413.returns.push(13);
1064 // 1068
1065 o4.getMinutes = f881945950_414;
1066 // 1069
1067 f881945950_414.returns.push(59);
1068 // 1070
1069 o4.getSeconds = f881945950_415;
1070 // undefined
1071 o4 = null;
1072 // 1071
1073 f881945950_415.returns.push(38);
1074 // 1076
1075 f881945950_406.returns.push(null);
1076 // 1081
1077 f881945950_406.returns.push(null);
1078 // 1082
1079 f881945950_16.returns.push(2);
1080 // 1049
1081 geval("if (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.addLogical(\"twister-media-matrix\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/tmmJS/tmmJS-combined-core-4624._V1_.js\",]);\n    window._tmm_1 = +new JSBNG__Date();\n}\n;\n;");
1082 // 1083
1083 geval("ftRegisterCountdownElementID(\"ftCountdown\");\nftRegisterEntireMessageElementID(\"ftMessage\");");
1084 // 1084
1085 geval("function e75b493e6089a201530187bf51690fe2bbd897fb3(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=ftinfo_dp_?ie=UTF8&nodeId=3510241&pop-up=1\", \"AmazonHelp\", \"width=550,height=600,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1086 // 1087
1087 o5 = {};
1088 // 1088
1089 f881945950_406.returns.push(o5);
1090 // 1089
1091 o6 = {};
1092 // 1090
1093 o5.style = o6;
1094 // undefined
1095 o5 = null;
1096 // 1092
1097 // undefined
1098 o6 = null;
1099 // 1085
1100 geval("var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\nif (((timerDiv && timerDiv.style))) {\n    timerDiv.style.display = \"inline\";\n}\n;\n;");
1101 // 1093
1102 geval("if (((typeof measureATFDiff == \"function\"))) {\n    measureATFDiff(0, new JSBNG__Date().getTime());\n}\n;\n;\n;\nif (((typeof setCSMReq == \"function\"))) {\n    setCSMReq(\"af\");\n}\n else if (((typeof uet == \"function\"))) {\n    uet(\"af\");\n}\n\n;\n;");
1103 // 1094
1104 geval("function ee976dbac42452e3152d3a48f703b0a8e017fa4d8(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
1105 // 1095
1106 geval("function ed771f07937fda9c8dd04b0376cf96f16a586029a(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
1107 // 1096
1108 geval("amznJQ.available(\"jQuery\", function() {\n    window.sitbWeblab = \"\";\n    if (((typeof (Vellum) == \"undefined\"))) {\n        Vellum = {\n            js: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-js._V383092699_.js\",\n            sj: \"/gp/search-inside/js?locale=en_US&version=201305301526\",\n            css: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-css._V383092698_.css\",\n            pl: function() {\n                Vellum.lj(Vellum.js, Vellum.sj, Vellum.css);\n            },\n            lj: function(u, u2, uc) {\n                if (window.vellumLjDone) {\n                    return;\n                }\n            ;\n            ;\n                window.vellumLjDone = true;\n                var d = JSBNG__document;\n                var s = d.createElement(\"link\");\n                s.type = \"text/css\";\n                s.rel = \"stylesheet\";\n                s.href = uc;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n                s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u2;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            lj2: function(u) {\n                var d = JSBNG__document;\n                var s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            go: function() {\n                sitbLodStart = new JSBNG__Date().getTime();\n                jQuery(\"body\").css(\"overflow\", \"hidden\");\n                var jqw = jQuery(window);\n                var h = jqw.height();\n                var w = jqw.width();\n                var st = jqw.scrollTop();\n                jQuery(\"#vellumShade\").css({\n                    JSBNG__top: st,\n                    height: h,\n                    width: w\n                }).show();\n                var vli = jQuery(\"#vellumLdgIco\");\n                var nl = ((((w / 2)) - ((vli.width() / 2))));\n                var nt = ((((st + ((h / 2)))) - ((vli.height() / 2))));\n                vli.css({\n                    left: nl,\n                    JSBNG__top: nt\n                }).show();\n                JSBNG__setTimeout(\"Vellum.x()\", 20000);\n                Vellum.pl();\n            },\n            x: function() {\n                jQuery(\"#vellumMsgTxt\").html(\"An error occurred while trying to show this book.\");\n                jQuery(\"#vellumMsgHdr\").html(\"Server Timeout\");\n                jQuery(\"#vellumMsg\").show();\n                var reftagImage = new JSBNG__Image();\n                reftagImage.src = \"/gp/search-inside/reftag/ref=rdr_bar_jsto\";\n            },\n            h: function() {\n                jQuery(\"#vellumMsg\").hide();\n                jQuery(\"#vellumShade\").hide();\n                jQuery(\"#vellumLdgIco\").hide();\n                jQuery(\"body\").css(\"overflow\", \"auto\");\n            },\n            cf: function(a) {\n                return function() {\n                    v.mt = a;\n                    v.rg = Array.prototype.slice.call(arguments);\n                    v.go();\n                };\n            },\n            c: function(a) {\n                var v = Vellum;\n                v.mt = \"c\";\n                v.rg = [a,];\n                v.pl();\n            }\n        };\n        var f = \"opqr\".split(\"\");\n        {\n            var fin9keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin9i = (0);\n            var i;\n            for (; (fin9i < fin9keys.length); (fin9i++)) {\n                ((i) = (fin9keys[fin9i]));\n                {\n                    var v = Vellum;\n                    v[f[i]] = v.cf(f[i]);\n                };\n            };\n        };\n    ;\n        sitbAsin = \"0596517742\";\n        SitbReader = {\n            LightboxActions: {\n                openReader: function(r) {\n                    Vellum.o(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToRandomPage: function(r) {\n                    Vellum.r(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToSearchResults: function(q, r) {\n                    Vellum.q(\"0596517742\", q, r);\n                    return false;\n                },\n                openReaderToPage: function(p, t, r) {\n                    Vellum.p(\"0596517742\", p, t, r);\n                    return false;\n                }\n            }\n        };\n    }\n;\n;\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        Vellum.c(\"0596517742\");\n    });\n});");
1109 // 1098
1110 o7 = {};
1111 // 1099
1112 f881945950_0.returns.push(o7);
1113 // undefined
1114 o7 = null;
1115 // 1100
1116 o8 = {};
1117 // undefined
1118 o8 = null;
1119 // 1101
1120 o2 = {};
1121 // undefined
1122 o2 = null;
1123 // 1097
1124 geval("if (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.addLogical(\"twister-media-matrix\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/tmmJS/tmmJS-combined-core-4624._V1_.js\",]);\n    window._tmm_1 = +new JSBNG__Date();\n}\n;\n;");
1125 // 1103
1126 o2 = {};
1127 // 1104
1128 f881945950_0.returns.push(o2);
1129 // undefined
1130 o2 = null;
1131 // 1102
1132 geval("window._tmm_3 = +new JSBNG__Date();\nif (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"twister-media-matrix\", function() {\n            window._tmm_2 = +new JSBNG__Date();\n            TwisterMediaMatrix.initialize({\n                kindle_meta_binding: {\n                    n: \"1\",\n                    start: \"1\"\n                },\n                paperback_meta_binding: {\n                    n: \"4\",\n                    start: \"1\"\n                },\n                other_meta_binding: {\n                    n: \"1\",\n                    start: \"1\"\n                }\n            }, \"3\", \"books\", \"0596517742\", \"B00279BLLE\", \"book_display_on_website\", \"Loading...\", \"Error. Please try again.\", \"http://g-ecx.images-amazon.com/images/G/01/x-locale/twister/tiny-snake._V192199047_.gif\", false, \"1-1\", \"1373479157\");\n        });\n    });\n}\n;\n;\nvar disableWinnerPopup;");
1133 // 1105
1134 geval("function e51d7970767549cda27023a52a400a94280d471f5(JSBNG__event) {\n    amz_expandPostBodyDescription(\"PS\", [\"psGradient\",\"psPlaceHolder\",]);\n    return false;\n};\n;");
1135 // 1106
1136 geval("function e5c5178e859fbed387086d382315ddf2817c1731d(JSBNG__event) {\n    amz_collapsePostBodyDescription(\"PS\", [\"psGradient\",\"psPlaceHolder\",]);\n    return false;\n};\n;");
1137 // 1107
1138 geval("function amz_expandPostBodyDescription(id, objects) {\n    amznJQ.onReady(\"jQuery\", function() {\n        for (var i = 0; ((i < objects.length)); i++) {\n            jQuery(((\"#\" + objects[i]))).hide();\n        };\n    ;\n        jQuery(((\"#outer_postBody\" + id))).animate({\n            height: jQuery(((\"#postBody\" + id))).height()\n        }, 500);\n        jQuery(((\"#expand\" + id))).hide();\n        jQuery(((\"#collapse\" + id))).show();\n        jQuery.ajax({\n            url: \"/gp/product/utility/ajax/impression-tracking.html\",\n            data: {\n                a: \"0596517742\",\n                ref: \"dp_pd_showmore_b\"\n            }\n        });\n    });\n};\n;\nfunction amz_collapsePostBodyDescription(id, objects) {\n    amznJQ.onReady(\"jQuery\", function() {\n        for (var i = 0; ((i < objects.length)); i++) {\n            jQuery(((\"#\" + objects[i]))).show();\n        };\n    ;\n        jQuery(((\"#outer_postBody\" + id))).animate({\n            height: 200\n        }, 500);\n        jQuery(((\"#collapse\" + id))).hide();\n        jQuery(((\"#expand\" + id))).show();\n        jQuery.ajax({\n            url: \"/gp/product/utility/ajax/impression-tracking.html\",\n            data: {\n                a: \"0596517742\",\n                ref: \"dp_pd_showless_b\"\n            }\n        });\n    });\n};\n;\namznJQ.onReady(\"jQuery\", function() {\n    var psTotalHeight = jQuery(\"#postBodyPS\").height();\n    if (((psTotalHeight > 200))) {\n        jQuery(\"#outer_postBodyPS\").css(\"display\", \"block\").css(\"height\", 200);\n        jQuery(\"#psPlaceHolder\").css(\"display\", \"block\");\n        jQuery(\"#expandPS\").css(\"display\", \"block\");\n        jQuery(\"#psGradient\").css(\"display\", \"block\");\n    }\n     else {\n        jQuery(\"#outer_postBodyPS\").css(\"height\", \"auto\");\n        jQuery(\"#psGradient\").hide();\n        jQuery(\"#psPlaceHolder\").hide();\n    }\n;\n;\n});");
1139 // 1108
1140 geval("function ef2d35c5b582d6058ac633b57d69c8b9ac542ebec(JSBNG__event) {\n    return false;\n};\n;");
1141 // 1109
1142 geval("function ecf51729fd790a7ea3ccc34e61cae1ad6542b3ab2(JSBNG__event) {\n    return false;\n};\n;");
1143 // 1110
1144 geval("function edd8e3d0178c67cf94e61d6831fdd582864ee9797(JSBNG__event) {\n    return false;\n};\n;");
1145 // 1112
1146 f881945950_423 = function() { return f881945950_423.returns[f881945950_423.inst++]; };
1147 f881945950_423.returns = [];
1148 f881945950_423.inst = 0;
1149 // 1113
1150 o0.createElement = f881945950_423;
1151 // 1114
1152 o2 = {};
1153 // 1115
1154 f881945950_423.returns.push(o2);
1155 // 1116
1156 // 1117
1157 o4 = {};
1158 // 1118
1159 o0.body = o4;
1160 // 1119
1161 o5 = {};
1162 // 1120
1163 o4.childNodes = o5;
1164 // 1121
1165 o5.length = 2;
1166 // 1123
1167 f881945950_427 = function() { return f881945950_427.returns[f881945950_427.inst++]; };
1168 f881945950_427.returns = [];
1169 f881945950_427.inst = 0;
1170 // 1124
1171 o4.insertBefore = f881945950_427;
1172 // undefined
1173 o4 = null;
1174 // 1127
1175 o4 = {};
1176 // 1128
1177 o5["0"] = o4;
1178 // undefined
1179 o5 = null;
1180 // undefined
1181 o4 = null;
1182 // 1129
1183 f881945950_427.returns.push(o2);
1184 // undefined
1185 o2 = null;
1186 // 1111
1187 geval("window.AmazonPopoverImages = {\n    snake: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif\",\n    btnClose: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/btn_close._V192188154_.gif\",\n    closeTan: \"http://g-ecx.images-amazon.com/images/G/01/nav2/images/close-tan-sm._V192185930_.gif\",\n    closeTanDown: \"http://g-ecx.images-amazon.com/images/G/01/nav2/images/close-tan-sm-dn._V192185961_.gif\",\n    loadingBar: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/loading-bar-small._V192188123_.gif\",\n    pixel: \"http://g-ecx.images-amazon.com/images/G/01/icons/blank-pixel._V192192429_.gif\"\n};\nvar container = JSBNG__document.createElement(\"DIV\");\ncontainer.id = \"ap_container\";\nif (JSBNG__document.body.childNodes.length) {\n    JSBNG__document.body.insertBefore(container, JSBNG__document.body.childNodes[0]);\n}\n else {\n    JSBNG__document.body.appendChild(container);\n}\n;\n;");
1188 // 1131
1189 o2 = {};
1190 // 1132
1191 o0.head = o2;
1192 // 1134
1193 o4 = {};
1194 // 1135
1195 f881945950_423.returns.push(o4);
1196 // 1136
1197 // 1137
1198 // 1138
1199 o2.insertBefore = f881945950_427;
1200 // 1139
1201 o5 = {};
1202 // 1140
1203 o2.firstChild = o5;
1204 // undefined
1205 o2 = null;
1206 // undefined
1207 o5 = null;
1208 // 1141
1209 f881945950_427.returns.push(o4);
1210 // undefined
1211 o4 = null;
1212 // 1130
1213 geval("(function() {\n    var h = ((((JSBNG__document.head || JSBNG__document.getElementsByTagName(\"head\")[0])) || JSBNG__document.documentElement));\n    var s = JSBNG__document.createElement(\"script\");\n    s.async = \"async\";\n    s.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.2.6-beacon/site-wide-11198044143._V1_.js\";\n    h.insertBefore(s, h.firstChild);\n})();");
1214 // 1142
1215 geval("amznJQ.addLogical(\"popover\", []);\namznJQ.addLogical(\"navbarCSSUS-beacon\", []);\namznJQ.addLogical(\"search-js-autocomplete\", []);\namznJQ.addLogical(\"navbarJS-beacon\", []);\namznJQ.addLogical(\"LBHUCCSS-US\", []);\namznJQ.addLogical(\"CustomerPopover\", [\"http://z-ecx.images-amazon.com/images/G/01/x-locale/communities/profile/customer-popover/script-13-min._V224617671_.js\",]);\namznJQ.addLogical(\"amazonShoveler\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/amazonShoveler/amazonShoveler-1466453065._V1_.js\",]);\namznJQ.addLogical(\"dpCSS\", []);\namznJQ.addLogical(\"discussionsCSS\", []);\namznJQ.addLogical(\"bxgyCSS\", []);\namznJQ.addLogical(\"simCSS\", []);\namznJQ.addLogical(\"condProbCSS\", []);\namznJQ.addLogical(\"ciuAnnotations\", []);\namznJQ.addLogical(\"cmuAnnotations\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/cmuAnnotations/cmuAnnotations-cmuAnnotations-55262._V1_.js\",]);\namznJQ.addLogical(\"dpProductImage\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/dpProductImage/dpProductImage-2900646310._V1_.js\",]);\namznJQ.addLogical(\"search-csl\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-csl/search-csl-2400229912._V1_.js\",]);\namznJQ.addLogical(\"AmazonHistory\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/AmazonHistory/AmazonHistory-61973207._V1_.js\",]);\namznJQ.addLogical(\"AmazonCountdown\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/AmazonCountdownMerged/AmazonCountdownMerged-27059._V1_.js\",]);\namznJQ.addLogical(\"bylinePopover\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/bylinePopover/bylinePopover-1310866238._V1_.js\",]);\namznJQ.addLogical(\"simsJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/simsJSMerged/simsMerged-8063003390._V1_.js\",]);\namznJQ.addLogical(\"callOnVisible\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/callOnVisible/callOnVisible-3144292562._V1_.js\",]);\namznJQ.addLogical(\"p13nlogger\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/p13nlogger/p13nlogger-1808340331._V1_.js\",]);\namznJQ.addLogical(\"lazyLoadLib\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/lazyLoadLib/lazyLoadLib-lazyLoadLib-60357._V1_.js\",]);\namznJQ.addLogical(\"immersiveView\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/immersiveView/immersiveView-990982538._V1_.js\",]);\namznJQ.addLogical(\"imageBlock\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/imageBlock/imageBlock-1812119340._V1_.js\",]);\namznJQ.addLogical(\"quantityDropDownJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/quantityDropDownJSMerged/quantityDropDownJSMerged-63734._V1_.js\",]);\namznJQ.addLogical(\"bbopCheckBoxJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/bbopCheckBoxJSMerged/bbopCheckBoxJSMerged-33025._V1_.js\",]);\namznJQ.addLogical(\"share-with-friends-js-new\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/share-with-friends-js-new/share-with-friends-js-new-4128511603._V1_.js\",]);");
1216 // 1143
1217 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (!$this.data(\"init\")) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        jQuery(this).acrPopover();\n    });\n});");
1218 // 1144
1219 geval("function e4a4bcedba65b380893f77d4dd29526130ee3b4d1(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1220 // 1145
1221 geval("function edeb92174417d8dc1c0e6f67c4ca60200f797789e(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1222 // 1146
1223 geval("function ed89eaa1f3ad51711a79f8d9d280a54d2800bbe33(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1224 // 1147
1225 geval("function e6347802676af907c8a2f7c8d51ebf8ecb4cc78ea(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1226 // 1148
1227 geval("var DEFAULT_RENDERING_TIME = 123;\namznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0M4YTA6K9C1VFV7TYXNC_775_1_community_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"What product features are missing?\",\n        destination: \"/gp/lwcf/light-weight-form.html?asin=0596517742&root=283155\",\n        showOnHover: false,\n        draggable: true,\n        width: 650,\n        paddingBottom: 0,\n        onHide: function() {\n            logCloseWidgetEvent(DEFAULT_RENDERING_TIME);\n            cleanupSearchResults();\n        }\n    });\n});");
1228 // 1149
1229 geval("amznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0M4YTA6K9C1VFV7TYXNC_774_1_hmd_pricing_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"Tell Us About a Lower Price\",\n        destination: \"/gp/pdp/pf/pricingFeedbackForm.html/ref=sr_1_1_pfdpb?ie=UTF8&ASIN=0596517742&PREFIX=ns_0M4YTA6K9C1VFV7TYXNC_774_2_&from=product-detail&keywords=javascript%20the%20good%20parts&originalURI=%2Fgp%2Fproduct%2F0596517742&qid=1373479157&s=books&sr=1-1&storeID=books\",\n        showOnHover: false,\n        draggable: true\n    });\n});");
1230 // 1150
1231 geval("amznJQ.onReady(\"lazyLoadLib\", function() {\n    jQuery(\"#books-entity-teaser\").lazyLoadContent({\n        url: \"/gp/product/features/entity-teaser/books-entity-teaser-ajax.html?ASIN=0596517742\",\n        metrics: true,\n        JSBNG__name: \"books-entity-teaser\",\n        cache: true\n    });\n});");
1232 // 1151
1233 geval("function e1e1dc54f9e2961eab4a6b364613e62cd51b69355(JSBNG__event) {\n    return amz_js_PopWin(this.href, \"AmazonHelp\", \"width=340,height=340,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1234 // 1152
1235 geval("var paCusRevAllURL = \"http://product-ads-portal.amazon.com/gp/synd/?asin=0596517742&pAsin=&gl=14&sq=javascript%20the%20good%20parts&sa=&se=Amazon&noo=&pt=Detail&spt=Glance&sn=customer-reviews-top&pRID=0M4YTA6K9C1VFV7TYXNC&ts=1373479174&h=0BA9078DD844F27758A20C195D68A922B6040AC2\";");
1236 // 1154
1237 o2 = {};
1238 // 1155
1239 f881945950_0.returns.push(o2);
1240 // 1156
1241 o2.getTime = f881945950_397;
1242 // 1157
1243 f881945950_397.returns.push(1373479178512);
1244 // 1153
1245 geval("try {\n    (function(w, d, e, o) {\n        var i = \"DAcrt\";\n        if (w.uDA = ((((w.ues && w.uet)) && w.uex))) {\n            ues(\"wb\", i, 1);\n            uet(\"bb\", i, {\n                wb: 1\n            });\n        }\n    ;\n    ;\n        var methodToBind = \"amznJQ.onCompletion\";\n        if (((((!w.amznJQ && ((methodToBind == \"amznJQ.onCompletion\")))) && ((typeof (P) != \"undefined\"))))) {\n            P.when(\"amznJQ.criticalFeature\").execute(function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1527499158._V381226140_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0M4YTA6K9C1VFV7TYXNC;arid=d9da736c99a54c90a1096fec27fb2394;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=d9da736c99a54c90a1096fec27fb2394;s=i0;s=i1;s=i3;s=i4;s=i5;s=i6;s=i7;s=i8;s=i9;s=m1;s=m4;s=u4;s=u13;s=u10;s=u2;z=153;z=180;z=173;z=141;s=3072;s=32;s=3172a;s=3172;s=3;s=12;s=67;s=142;s=150;s=622;s=762;s=833;s=921;s=1009;s=1046;s=1324;s=3101;s=3102;s=3103;s=3174;s=3175;s=3176;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0M4YTA6K9C1VFV7TYXNC\",\n                    q: \"N4215\"\n                });\n            });\n        }\n         else {\n            amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1527499158._V381226140_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0M4YTA6K9C1VFV7TYXNC;arid=d9da736c99a54c90a1096fec27fb2394;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=d9da736c99a54c90a1096fec27fb2394;s=i0;s=i1;s=i3;s=i4;s=i5;s=i6;s=i7;s=i8;s=i9;s=m1;s=m4;s=u4;s=u13;s=u10;s=u2;z=153;z=180;z=173;z=141;s=3072;s=32;s=3172a;s=3172;s=3;s=12;s=67;s=142;s=150;s=622;s=762;s=833;s=921;s=1009;s=1046;s=1324;s=3101;s=3102;s=3103;s=3174;s=3175;s=3176;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0M4YTA6K9C1VFV7TYXNC\",\n                    q: \"N4215\"\n                });\n            });\n        }\n    ;\n    ;\n    })(window, JSBNG__document);\n} catch (JSBNG_ex) {\n\n};");
1246 // 1159
1247 o4 = {};
1248 // 1160
1249 f881945950_0.returns.push(o4);
1250 // 1158
1251 geval("if (((typeof setCSMReq == \"function\"))) {\n    setCSMReq(\"cf\");\n}\n else {\n    if (((typeof uet == \"function\"))) {\n        uet(\"cf\");\n    }\n;\n;\n    amznJQ.completedStage(\"amznJQ.criticalFeature\");\n}\n;\n;");
1252 // 1161
1253 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (!$this.data(\"init\")) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        jQuery(this).acrPopover();\n    });\n});");
1254 // 1162
1255 geval("function e4a4bcedba65b380893f77d4dd29526130ee3b4d1(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1256 // 1163
1257 geval("function edeb92174417d8dc1c0e6f67c4ca60200f797789e(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1258 // 1164
1259 geval("function ed89eaa1f3ad51711a79f8d9d280a54d2800bbe33(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1260 // 1165
1261 geval("function e6347802676af907c8a2f7c8d51ebf8ecb4cc78ea(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1262 // 1166
1263 geval("var DEFAULT_RENDERING_TIME = 123;\namznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0M4YTA6K9C1VFV7TYXNC_775_1_community_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"What product features are missing?\",\n        destination: \"/gp/lwcf/light-weight-form.html?asin=0596517742&root=283155\",\n        showOnHover: false,\n        draggable: true,\n        width: 650,\n        paddingBottom: 0,\n        onHide: function() {\n            logCloseWidgetEvent(DEFAULT_RENDERING_TIME);\n            cleanupSearchResults();\n        }\n    });\n});");
1264 // 1167
1265 geval("amznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0M4YTA6K9C1VFV7TYXNC_774_1_hmd_pricing_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"Tell Us About a Lower Price\",\n        destination: \"/gp/pdp/pf/pricingFeedbackForm.html/ref=sr_1_1_pfdpb?ie=UTF8&ASIN=0596517742&PREFIX=ns_0M4YTA6K9C1VFV7TYXNC_774_2_&from=product-detail&keywords=javascript%20the%20good%20parts&originalURI=%2Fgp%2Fproduct%2F0596517742&qid=1373479157&s=books&sr=1-1&storeID=books\",\n        showOnHover: false,\n        draggable: true\n    });\n});");
1266 // 1168
1267 geval("amznJQ.onReady(\"lazyLoadLib\", function() {\n    jQuery(\"#books-entity-teaser\").lazyLoadContent({\n        url: \"/gp/product/features/entity-teaser/books-entity-teaser-ajax.html?ASIN=0596517742\",\n        metrics: true,\n        JSBNG__name: \"books-entity-teaser\",\n        cache: true\n    });\n});");
1268 // 1169
1269 geval("function e1e1dc54f9e2961eab4a6b364613e62cd51b69355(JSBNG__event) {\n    return amz_js_PopWin(this.href, \"AmazonHelp\", \"width=340,height=340,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1270 // 1170
1271 geval("var paCusRevAllURL = \"http://product-ads-portal.amazon.com/gp/synd/?asin=0596517742&pAsin=&gl=14&sq=javascript%20the%20good%20parts&sa=&se=Amazon&noo=&pt=Detail&spt=Glance&sn=customer-reviews-top&pRID=0M4YTA6K9C1VFV7TYXNC&ts=1373479174&h=0BA9078DD844F27758A20C195D68A922B6040AC2\";");
1272 // 1172
1273 o2 = {};
1274 // 1173
1275 f881945950_0.returns.push(o2);
1276 // 1174
1277 o2.getTime = f881945950_397;
1278 // undefined
1279 o2 = null;
1280 // 1175
1281 f881945950_397.returns.push(1373479178512);
1282 // 1171
1283 geval("try {\n    (function(w, d, e, o) {\n        var i = \"DAcrt\";\n        if (w.uDA = ((((w.ues && w.uet)) && w.uex))) {\n            ues(\"wb\", i, 1);\n            uet(\"bb\", i, {\n                wb: 1\n            });\n        }\n    ;\n    ;\n        var methodToBind = \"amznJQ.onCompletion\";\n        if (((((!w.amznJQ && ((methodToBind == \"amznJQ.onCompletion\")))) && ((typeof (P) != \"undefined\"))))) {\n            P.when(\"amznJQ.criticalFeature\").execute(function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1527499158._V381226140_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0M4YTA6K9C1VFV7TYXNC;arid=d9da736c99a54c90a1096fec27fb2394;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=d9da736c99a54c90a1096fec27fb2394;s=i0;s=i1;s=i3;s=i4;s=i5;s=i6;s=i7;s=i8;s=i9;s=m1;s=m4;s=u4;s=u13;s=u10;s=u2;z=153;z=180;z=173;z=141;s=3072;s=32;s=3172a;s=3172;s=3;s=12;s=67;s=142;s=150;s=622;s=762;s=833;s=921;s=1009;s=1046;s=1324;s=3101;s=3102;s=3103;s=3174;s=3175;s=3176;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0M4YTA6K9C1VFV7TYXNC\",\n                    q: \"N4215\"\n                });\n            });\n        }\n         else {\n            amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1527499158._V381226140_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0M4YTA6K9C1VFV7TYXNC;arid=d9da736c99a54c90a1096fec27fb2394;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=d9da736c99a54c90a1096fec27fb2394;s=i0;s=i1;s=i3;s=i4;s=i5;s=i6;s=i7;s=i8;s=i9;s=m1;s=m4;s=u4;s=u13;s=u10;s=u2;z=153;z=180;z=173;z=141;s=3072;s=32;s=3172a;s=3172;s=3;s=12;s=67;s=142;s=150;s=622;s=762;s=833;s=921;s=1009;s=1046;s=1324;s=3101;s=3102;s=3103;s=3174;s=3175;s=3176;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0M4YTA6K9C1VFV7TYXNC\",\n                    q: \"N4215\"\n                });\n            });\n        }\n    ;\n    ;\n    })(window, JSBNG__document);\n} catch (JSNBG_ex) {\n\n};");
1284 // 1177
1285 o4 = {};
1286 // 1178
1287 f881945950_0.returns.push(o4);
1288 // 1176
1289 geval("try {\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"cf\");\n    }\n     else {\n        if (((typeof uet == \"function\"))) {\n            uet(\"cf\");\n        }\n    ;\n    ;\n        amznJQ.completedStage(\"amznJQ.criticalFeature\");\n    }\n;\n;\n} catch (JSBNG_ex) {\n\n};");
1290 // 1180
1291 o4.getTime = f881945950_397;
1292 // undefined
1293 o4 = null;
1294 // 1181
1295 f881945950_397.returns.push(1373479178517);
1296 // 1179
1297 geval("try {\n    (function() {\n        var initJQuery = function() {\n            var jQuery126PatchDelay = 13;\n            var _jQuery = window.jQuery, _$ = window.$;\n            var jQuery = window.jQuery = window.$ = function(selector, context) {\n                return new jQuery.fn.init(selector, context);\n            };\n            var quickExpr = /^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/, isSimple = /^.[^:#\\[\\.]*$/, undefined;\n            jQuery.fn = jQuery.prototype = {\n                init: function(selector, context) {\n                    selector = ((selector || JSBNG__document));\n                    if (selector.nodeType) {\n                        this[0] = selector;\n                        this.length = 1;\n                        return this;\n                    }\n                ;\n                ;\n                    if (((typeof selector == \"string\"))) {\n                        var match = quickExpr.exec(selector);\n                        if (((match && ((match[1] || !context))))) {\n                            if (match[1]) {\n                                selector = jQuery.clean([match[1],], context);\n                            }\n                             else {\n                                var elem = JSBNG__document.getElementById(match[3]);\n                                if (elem) {\n                                    if (((elem.id != match[3]))) {\n                                        return jQuery().JSBNG__find(selector);\n                                    }\n                                ;\n                                ;\n                                    return jQuery(elem);\n                                }\n                            ;\n                            ;\n                                selector = [];\n                            }\n                        ;\n                        ;\n                        }\n                         else {\n                            return jQuery(context).JSBNG__find(selector);\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (jQuery.isFunction(selector)) {\n                            return jQuery(JSBNG__document)[((jQuery.fn.ready ? \"ready\" : \"load\"))](selector);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this.setArray(jQuery.makeArray(selector));\n                },\n                jquery: \"1.2.6\",\n                size: function() {\n                    return this.length;\n                },\n                length: 0,\n                get: function(num) {\n                    return ((((num == undefined)) ? jQuery.makeArray(this) : this[num]));\n                },\n                pushStack: function(elems) {\n                    var ret = jQuery(elems);\n                    ret.prevObject = this;\n                    return ret;\n                },\n                setArray: function(elems) {\n                    this.length = 0;\n                    Array.prototype.push.apply(this, elems);\n                    return this;\n                },\n                each: function(callback, args) {\n                    return jQuery.each(this, callback, args);\n                },\n                index: function(elem) {\n                    var ret = -1;\n                    return jQuery.inArray(((((elem && elem.jquery)) ? elem[0] : elem)), this);\n                },\n                attr: function(JSBNG__name, value, type) {\n                    var options = JSBNG__name;\n                    if (((JSBNG__name.constructor == String))) {\n                        if (((value === undefined))) {\n                            return ((this[0] && jQuery[((type || \"attr\"))](this[0], JSBNG__name)));\n                        }\n                         else {\n                            options = {\n                            };\n                            options[JSBNG__name] = value;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this.each(function(i) {\n                        {\n                            var fin10keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin10i = (0);\n                            (0);\n                            for (; (fin10i < fin10keys.length); (fin10i++)) {\n                                ((name) = (fin10keys[fin10i]));\n                                {\n                                    jQuery.attr(((type ? this.style : this)), JSBNG__name, jQuery.prop(this, options[JSBNG__name], type, i, JSBNG__name));\n                                };\n                            };\n                        };\n                    ;\n                    });\n                },\n                css: function(key, value) {\n                    if (((((((key == \"width\")) || ((key == \"height\")))) && ((parseFloat(value) < 0))))) {\n                        value = undefined;\n                    }\n                ;\n                ;\n                    return this.attr(key, value, \"curCSS\");\n                },\n                text: function(text) {\n                    if (((((typeof text != \"object\")) && ((text != null))))) {\n                        return this.empty().append(((((this[0] && this[0].ownerDocument)) || JSBNG__document)).createTextNode(text));\n                    }\n                ;\n                ;\n                    var ret = \"\";\n                    jQuery.each(((text || this)), function() {\n                        jQuery.each(this.childNodes, function() {\n                            if (((this.nodeType != 8))) {\n                                ret += ((((this.nodeType != 1)) ? this.nodeValue : jQuery.fn.text([this,])));\n                            }\n                        ;\n                        ;\n                        });\n                    });\n                    return ret;\n                },\n                wrapAll: function(html) {\n                    if (this[0]) {\n                        jQuery(html, this[0].ownerDocument).clone().insertBefore(this[0]).map(function() {\n                            var elem = this;\n                            while (elem.firstChild) {\n                                elem = elem.firstChild;\n                            };\n                        ;\n                            return elem;\n                        }).append(this);\n                    }\n                ;\n                ;\n                    return this;\n                },\n                wrapInner: function(html) {\n                    return this.each(function() {\n                        jQuery(this).contents().wrapAll(html);\n                    });\n                },\n                wrap: function(html) {\n                    return this.each(function() {\n                        jQuery(this).wrapAll(html);\n                    });\n                },\n                append: function() {\n                    return this.domManip(arguments, true, false, function(elem) {\n                        if (((this.nodeType == 1))) {\n                            this.appendChild(elem);\n                        }\n                    ;\n                    ;\n                    });\n                },\n                prepend: function() {\n                    return this.domManip(arguments, true, true, function(elem) {\n                        if (((this.nodeType == 1))) {\n                            this.insertBefore(elem, this.firstChild);\n                        }\n                    ;\n                    ;\n                    });\n                },\n                before: function() {\n                    return this.domManip(arguments, false, false, function(elem) {\n                        this.parentNode.insertBefore(elem, this);\n                    });\n                },\n                after: function() {\n                    return this.domManip(arguments, false, true, function(elem) {\n                        this.parentNode.insertBefore(elem, this.nextSibling);\n                    });\n                },\n                end: function() {\n                    return ((this.prevObject || jQuery([])));\n                },\n                JSBNG__find: function(selector) {\n                    var elems = jQuery.map(this, function(elem) {\n                        return jQuery.JSBNG__find(selector, elem);\n                    });\n                    return this.pushStack(((((/[^+>] [^+>]/.test(selector) || ((selector.indexOf(\"..\") > -1)))) ? jQuery.unique(elems) : elems)));\n                },\n                clone: function(events) {\n                    var ret = this.map(function() {\n                        if (((jQuery.browser.msie && !jQuery.isXMLDoc(this)))) {\n                            var clone = this.cloneNode(true), container = JSBNG__document.createElement(\"div\");\n                            container.appendChild(clone);\n                            return jQuery.clean([container.innerHTML,])[0];\n                        }\n                         else {\n                            return this.cloneNode(true);\n                        }\n                    ;\n                    ;\n                    });\n                    var clone = ret.JSBNG__find(\"*\").andSelf().each(function() {\n                        if (((this[expando] != undefined))) {\n                            this[expando] = null;\n                        }\n                    ;\n                    ;\n                    });\n                    if (((events === true))) {\n                        this.JSBNG__find(\"*\").andSelf().each(function(i) {\n                            if (((this.nodeType == 3))) {\n                                return;\n                            }\n                        ;\n                        ;\n                            var events = jQuery.data(this, \"events\");\n                            {\n                                var fin11keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin11i = (0);\n                                var type;\n                                for (; (fin11i < fin11keys.length); (fin11i++)) {\n                                    ((type) = (fin11keys[fin11i]));\n                                    {\n                                        {\n                                            var fin12keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin12i = (0);\n                                            var handler;\n                                            for (; (fin12i < fin12keys.length); (fin12i++)) {\n                                                ((handler) = (fin12keys[fin12i]));\n                                                {\n                                                    jQuery.JSBNG__event.add(clone[i], type, events[type][handler], events[type][handler].data);\n                                                };\n                                            };\n                                        };\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        });\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                filter: function(selector) {\n                    return this.pushStack(((((jQuery.isFunction(selector) && jQuery.grep(this, function(elem, i) {\n                        return selector.call(elem, i);\n                    }))) || jQuery.multiFilter(selector, this))));\n                },\n                not: function(selector) {\n                    if (((selector.constructor == String))) {\n                        if (isSimple.test(selector)) {\n                            return this.pushStack(jQuery.multiFilter(selector, this, true));\n                        }\n                         else {\n                            selector = jQuery.multiFilter(selector, this);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    var isArrayLike = ((((selector.length && ((selector[((selector.length - 1))] !== undefined)))) && !selector.nodeType));\n                    return this.filter(function() {\n                        return ((isArrayLike ? ((jQuery.inArray(this, selector) < 0)) : ((this != selector))));\n                    });\n                },\n                add: function(selector) {\n                    return this.pushStack(jQuery.unique(jQuery.merge(this.get(), ((((typeof selector == \"string\")) ? jQuery(selector) : jQuery.makeArray(selector))))));\n                },\n                is: function(selector) {\n                    return ((!!selector && ((jQuery.multiFilter(selector, this).length > 0))));\n                },\n                hasClass: function(selector) {\n                    return this.is(((\".\" + selector)));\n                },\n                val: function(value) {\n                    if (((value == undefined))) {\n                        if (this.length) {\n                            var elem = this[0];\n                            if (jQuery.nodeName(elem, \"select\")) {\n                                var index = elem.selectedIndex, values = [], options = elem.options, one = ((elem.type == \"select-one\"));\n                                if (((index < 0))) {\n                                    return null;\n                                }\n                            ;\n                            ;\n                                for (var i = ((one ? index : 0)), max = ((one ? ((index + 1)) : options.length)); ((i < max)); i++) {\n                                    var option = options[i];\n                                    if (option.selected) {\n                                        value = ((((jQuery.browser.msie && !option.attributes.value.specified)) ? option.text : option.value));\n                                        if (one) {\n                                            return value;\n                                        }\n                                    ;\n                                    ;\n                                        values.push(value);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                return values;\n                            }\n                             else {\n                                return ((this[0].value || \"\")).replace(/\\r/g, \"\");\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        return undefined;\n                    }\n                ;\n                ;\n                    if (((value.constructor == Number))) {\n                        value += \"\";\n                    }\n                ;\n                ;\n                    return this.each(function() {\n                        if (((this.nodeType != 1))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((((value.constructor == Array)) && /radio|checkbox/.test(this.type)))) {\n                            this.checked = ((((jQuery.inArray(this.value, value) >= 0)) || ((jQuery.inArray(this.JSBNG__name, value) >= 0))));\n                        }\n                         else {\n                            if (jQuery.nodeName(this, \"select\")) {\n                                var values = jQuery.makeArray(value);\n                                jQuery(\"option\", this).each(function() {\n                                    this.selected = ((((jQuery.inArray(this.value, values) >= 0)) || ((jQuery.inArray(this.text, values) >= 0))));\n                                });\n                                if (!values.length) {\n                                    this.selectedIndex = -1;\n                                }\n                            ;\n                            ;\n                            }\n                             else {\n                                this.value = value;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    });\n                },\n                html: function(value) {\n                    return ((((value == undefined)) ? ((this[0] ? this[0].innerHTML : null)) : this.empty().append(value)));\n                },\n                replaceWith: function(value) {\n                    return this.after(value).remove();\n                },\n                eq: function(i) {\n                    return this.slice(i, ((i + 1)));\n                },\n                slice: function() {\n                    return this.pushStack(Array.prototype.slice.apply(this, arguments));\n                },\n                map: function(callback) {\n                    return this.pushStack(jQuery.map(this, function(elem, i) {\n                        return callback.call(elem, i, elem);\n                    }));\n                },\n                andSelf: function() {\n                    return this.add(this.prevObject);\n                },\n                data: function(key, value) {\n                    var parts = key.split(\".\");\n                    parts[1] = ((parts[1] ? ((\".\" + parts[1])) : \"\"));\n                    if (((value === undefined))) {\n                        var data = this.triggerHandler(((((\"getData\" + parts[1])) + \"!\")), [parts[0],]);\n                        if (((((data === undefined)) && this.length))) {\n                            data = jQuery.data(this[0], key);\n                        }\n                    ;\n                    ;\n                        return ((((((data === undefined)) && parts[1])) ? this.data(parts[0]) : data));\n                    }\n                     else {\n                        return this.trigger(((((\"setData\" + parts[1])) + \"!\")), [parts[0],value,]).each(function() {\n                            jQuery.data(this, key, value);\n                        });\n                    }\n                ;\n                ;\n                },\n                removeData: function(key) {\n                    return this.each(function() {\n                        jQuery.removeData(this, key);\n                    });\n                },\n                domManip: function(args, table, reverse, callback) {\n                    var clone = ((this.length > 1)), elems;\n                    return this.each(function() {\n                        if (!elems) {\n                            elems = jQuery.clean(args, this.ownerDocument);\n                            if (reverse) {\n                                elems.reverse();\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        var obj = this;\n                        if (((((table && jQuery.nodeName(this, \"table\"))) && jQuery.nodeName(elems[0], \"tr\")))) {\n                            obj = ((this.getElementsByTagName(\"tbody\")[0] || this.appendChild(this.ownerDocument.createElement(\"tbody\"))));\n                        }\n                    ;\n                    ;\n                        var scripts = jQuery([]);\n                        jQuery.each(elems, function() {\n                            var elem = ((clone ? jQuery(this).clone(true)[0] : this));\n                            if (jQuery.nodeName(elem, \"script\")) {\n                                scripts = scripts.add(elem);\n                            }\n                             else {\n                                if (((elem.nodeType == 1))) {\n                                    scripts = scripts.add(jQuery(\"script\", elem).remove());\n                                }\n                            ;\n                            ;\n                                callback.call(obj, elem);\n                            }\n                        ;\n                        ;\n                        });\n                        scripts.each(evalScript);\n                    });\n                }\n            };\n            jQuery.fn.init.prototype = jQuery.fn;\n            function evalScript(i, elem) {\n                if (elem.src) {\n                    jQuery.ajax({\n                        url: elem.src,\n                        async: false,\n                        dataType: \"script\"\n                    });\n                }\n                 else {\n                    jQuery.globalEval(((((((elem.text || elem.textContent)) || elem.innerHTML)) || \"\")));\n                }\n            ;\n            ;\n                if (elem.parentNode) {\n                    elem.parentNode.removeChild(elem);\n                }\n            ;\n            ;\n            };\n        ;\n            function now() {\n                return +new JSBNG__Date;\n            };\n        ;\n            jQuery.extend = jQuery.fn.extend = function() {\n                var target = ((arguments[0] || {\n                })), i = 1, length = arguments.length, deep = false, options;\n                if (((target.constructor == Boolean))) {\n                    deep = target;\n                    target = ((arguments[1] || {\n                    }));\n                    i = 2;\n                }\n            ;\n            ;\n                if (((((typeof target != \"object\")) && ((typeof target != \"function\"))))) {\n                    target = {\n                    };\n                }\n            ;\n            ;\n                if (((length == i))) {\n                    target = this;\n                    --i;\n                }\n            ;\n            ;\n                for (; ((i < length)); i++) {\n                    if ((((options = arguments[i]) != null))) {\n                        {\n                            var fin13keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin13i = (0);\n                            var JSBNG__name;\n                            for (; (fin13i < fin13keys.length); (fin13i++)) {\n                                ((name) = (fin13keys[fin13i]));\n                                {\n                                    var src = target[JSBNG__name], copy = options[JSBNG__name];\n                                    if (((target === copy))) {\n                                        continue;\n                                    }\n                                ;\n                                ;\n                                    if (((((((deep && copy)) && ((typeof copy == \"object\")))) && !copy.nodeType))) {\n                                        target[JSBNG__name] = jQuery.extend(deep, ((src || ((((copy.length != null)) ? [] : {\n                                        })))), copy);\n                                    }\n                                     else {\n                                        if (((copy !== undefined))) {\n                                            target[JSBNG__name] = copy;\n                                        }\n                                    ;\n                                    ;\n                                    }\n                                ;\n                                ;\n                                };\n                            };\n                        };\n                    ;\n                    }\n                ;\n                ;\n                };\n            ;\n                return target;\n            };\n            var expando = ((\"jQuery\" + now())), uuid = 0, windowData = {\n            }, exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, defaultView = ((JSBNG__document.defaultView || {\n            }));\n            jQuery.extend({\n                noConflict: function(deep) {\n                    window.$ = _$;\n                    if (deep) {\n                        window.jQuery = _jQuery;\n                    }\n                ;\n                ;\n                    return jQuery;\n                },\n                isFunction: function(fn) {\n                    return ((((((((!!fn && ((typeof fn != \"string\")))) && !fn.nodeName)) && ((fn.constructor != Array)))) && /^[\\s[]?function/.test(((fn + \"\")))));\n                },\n                isXMLDoc: function(elem) {\n                    return ((((elem.documentElement && !elem.body)) || ((((elem.tagName && elem.ownerDocument)) && !elem.ownerDocument.body))));\n                },\n                globalEval: function(data) {\n                    data = jQuery.trim(data);\n                    if (data) {\n                        var head = ((JSBNG__document.getElementsByTagName(\"head\")[0] || JSBNG__document.documentElement)), script = JSBNG__document.createElement(\"script\");\n                        script.type = \"text/javascript\";\n                        if (jQuery.browser.msie) {\n                            script.text = data;\n                        }\n                         else {\n                            script.appendChild(JSBNG__document.createTextNode(data));\n                        }\n                    ;\n                    ;\n                        head.insertBefore(script, head.firstChild);\n                        head.removeChild(script);\n                    }\n                ;\n                ;\n                },\n                nodeName: function(elem, JSBNG__name) {\n                    return ((elem.nodeName && ((elem.nodeName.toUpperCase() == JSBNG__name.toUpperCase()))));\n                },\n                cache: {\n                },\n                data: function(elem, JSBNG__name, data) {\n                    elem = ((((elem == window)) ? windowData : elem));\n                    var id = elem[expando];\n                    if (!id) {\n                        id = elem[expando] = ++uuid;\n                    }\n                ;\n                ;\n                    if (((JSBNG__name && !jQuery.cache[id]))) {\n                        jQuery.cache[id] = {\n                        };\n                    }\n                ;\n                ;\n                    if (((data !== undefined))) {\n                        jQuery.cache[id][JSBNG__name] = data;\n                    }\n                ;\n                ;\n                    return ((JSBNG__name ? jQuery.cache[id][JSBNG__name] : id));\n                },\n                removeData: function(elem, JSBNG__name) {\n                    elem = ((((elem == window)) ? windowData : elem));\n                    var id = elem[expando];\n                    if (JSBNG__name) {\n                        if (jQuery.cache[id]) {\n                            delete jQuery.cache[id][JSBNG__name];\n                            JSBNG__name = \"\";\n                            {\n                                var fin14keys = ((window.top.JSBNG_Replay.forInKeys)((jQuery.cache[id]))), fin14i = (0);\n                                (0);\n                                for (; (fin14i < fin14keys.length); (fin14i++)) {\n                                    ((name) = (fin14keys[fin14i]));\n                                    {\n                                        break;\n                                    };\n                                };\n                            };\n                        ;\n                            if (!JSBNG__name) {\n                                jQuery.removeData(elem);\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        try {\n                            delete elem[expando];\n                        } catch (e) {\n                            if (elem.removeAttribute) {\n                                elem.removeAttribute(expando);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        delete jQuery.cache[id];\n                    }\n                ;\n                ;\n                },\n                each: function(object, callback, args) {\n                    var JSBNG__name, i = 0, length = object.length;\n                    if (args) {\n                        if (((length == undefined))) {\n                            {\n                                var fin15keys = ((window.top.JSBNG_Replay.forInKeys)((object))), fin15i = (0);\n                                (0);\n                                for (; (fin15i < fin15keys.length); (fin15i++)) {\n                                    ((name) = (fin15keys[fin15i]));\n                                    {\n                                        if (((callback.apply(object[JSBNG__name], args) === false))) {\n                                            break;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            for (; ((i < length)); ) {\n                                if (((callback.apply(object[i++], args) === false))) {\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (((length == undefined))) {\n                            {\n                                var fin16keys = ((window.top.JSBNG_Replay.forInKeys)((object))), fin16i = (0);\n                                (0);\n                                for (; (fin16i < fin16keys.length); (fin16i++)) {\n                                    ((name) = (fin16keys[fin16i]));\n                                    {\n                                        if (((callback.call(object[JSBNG__name], JSBNG__name, object[JSBNG__name]) === false))) {\n                                            break;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            for (var value = object[0]; ((((i < length)) && ((callback.call(value, i, value) !== false)))); value = object[++i]) {\n                            \n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return object;\n                },\n                prop: function(elem, value, type, i, JSBNG__name) {\n                    if (jQuery.isFunction(value)) {\n                        value = value.call(elem, i);\n                    }\n                ;\n                ;\n                    return ((((((((value && ((value.constructor == Number)))) && ((type == \"curCSS\")))) && !exclude.test(JSBNG__name))) ? ((value + \"px\")) : value));\n                },\n                className: {\n                    add: function(elem, classNames) {\n                        jQuery.each(((classNames || \"\")).split(/\\s+/), function(i, className) {\n                            if (((((elem.nodeType == 1)) && !jQuery.className.has(elem.className, className)))) {\n                                elem.className += ((((elem.className ? \" \" : \"\")) + className));\n                            }\n                        ;\n                        ;\n                        });\n                    },\n                    remove: function(elem, classNames) {\n                        if (((elem.nodeType == 1))) {\n                            elem.className = ((((classNames != undefined)) ? jQuery.grep(elem.className.split(/\\s+/), function(className) {\n                                return !jQuery.className.has(classNames, className);\n                            }).join(\" \") : \"\"));\n                        }\n                    ;\n                    ;\n                    },\n                    has: function(elem, className) {\n                        return ((jQuery.inArray(className, ((elem.className || elem)).toString().split(/\\s+/)) > -1));\n                    }\n                },\n                swap: function(elem, options, callback) {\n                    var old = {\n                    };\n                    {\n                        var fin17keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin17i = (0);\n                        var JSBNG__name;\n                        for (; (fin17i < fin17keys.length); (fin17i++)) {\n                            ((name) = (fin17keys[fin17i]));\n                            {\n                                old[JSBNG__name] = elem.style[JSBNG__name];\n                                elem.style[JSBNG__name] = options[JSBNG__name];\n                            };\n                        };\n                    };\n                ;\n                    callback.call(elem);\n                    {\n                        var fin18keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin18i = (0);\n                        var JSBNG__name;\n                        for (; (fin18i < fin18keys.length); (fin18i++)) {\n                            ((name) = (fin18keys[fin18i]));\n                            {\n                                elem.style[JSBNG__name] = old[JSBNG__name];\n                            };\n                        };\n                    };\n                ;\n                },\n                css: function(elem, JSBNG__name, force) {\n                    if (((((JSBNG__name == \"width\")) || ((JSBNG__name == \"height\"))))) {\n                        var val, props = {\n                            position: \"absolute\",\n                            visibility: \"hidden\",\n                            display: \"block\"\n                        }, which = ((((JSBNG__name == \"width\")) ? [\"Left\",\"Right\",] : [\"Top\",\"Bottom\",]));\n                        function getWH() {\n                            val = ((((JSBNG__name == \"width\")) ? elem.offsetWidth : elem.offsetHeight));\n                            var padding = 0, border = 0;\n                            jQuery.each(which, function() {\n                                padding += ((parseFloat(jQuery.curCSS(elem, ((\"padding\" + this)), true)) || 0));\n                                border += ((parseFloat(jQuery.curCSS(elem, ((((\"border\" + this)) + \"Width\")), true)) || 0));\n                            });\n                            val -= Math.round(((padding + border)));\n                        };\n                    ;\n                        if (jQuery(elem).is(\":visible\")) {\n                            getWH();\n                        }\n                         else {\n                            jQuery.swap(elem, props, getWH);\n                        }\n                    ;\n                    ;\n                        return Math.max(0, val);\n                    }\n                ;\n                ;\n                    return jQuery.curCSS(elem, JSBNG__name, force);\n                },\n                curCSS: function(elem, JSBNG__name, force) {\n                    var ret, style = elem.style;\n                    function color(elem) {\n                        if (!jQuery.browser.safari) {\n                            return false;\n                        }\n                    ;\n                    ;\n                        var ret = defaultView.JSBNG__getComputedStyle(elem, null);\n                        return ((!ret || ((ret.getPropertyValue(\"color\") == \"\"))));\n                    };\n                ;\n                    if (((((JSBNG__name == \"opacity\")) && jQuery.browser.msie))) {\n                        ret = jQuery.attr(style, \"opacity\");\n                        return ((((ret == \"\")) ? \"1\" : ret));\n                    }\n                ;\n                ;\n                    if (((jQuery.browser.JSBNG__opera && ((JSBNG__name == \"display\"))))) {\n                        var save = style.outline;\n                        style.outline = \"0 solid black\";\n                        style.outline = save;\n                    }\n                ;\n                ;\n                    if (JSBNG__name.match(/float/i)) {\n                        JSBNG__name = styleFloat;\n                    }\n                ;\n                ;\n                    if (((((!force && style)) && style[JSBNG__name]))) {\n                        ret = style[JSBNG__name];\n                    }\n                     else {\n                        if (defaultView.JSBNG__getComputedStyle) {\n                            if (JSBNG__name.match(/float/i)) {\n                                JSBNG__name = \"float\";\n                            }\n                        ;\n                        ;\n                            JSBNG__name = JSBNG__name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n                            var computedStyle = defaultView.JSBNG__getComputedStyle(elem, null);\n                            if (((computedStyle && !color(elem)))) {\n                                ret = computedStyle.getPropertyValue(JSBNG__name);\n                            }\n                             else {\n                                var swap = [], stack = [], a = elem, i = 0;\n                                for (; ((a && color(a))); a = a.parentNode) {\n                                    stack.unshift(a);\n                                };\n                            ;\n                                for (; ((i < stack.length)); i++) {\n                                    if (color(stack[i])) {\n                                        swap[i] = stack[i].style.display;\n                                        stack[i].style.display = \"block\";\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                ret = ((((((JSBNG__name == \"display\")) && ((swap[((stack.length - 1))] != null)))) ? \"none\" : ((((computedStyle && computedStyle.getPropertyValue(JSBNG__name))) || \"\"))));\n                                for (i = 0; ((i < swap.length)); i++) {\n                                    if (((swap[i] != null))) {\n                                        stack[i].style.display = swap[i];\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                            }\n                        ;\n                        ;\n                            if (((((JSBNG__name == \"opacity\")) && ((ret == \"\"))))) {\n                                ret = \"1\";\n                            }\n                        ;\n                        ;\n                        }\n                         else {\n                            if (elem.currentStyle) {\n                                var camelCase = JSBNG__name.replace(/\\-(\\w)/g, function(all, letter) {\n                                    return letter.toUpperCase();\n                                });\n                                ret = ((elem.currentStyle[JSBNG__name] || elem.currentStyle[camelCase]));\n                                if (((!/^\\d+(px)?$/i.test(ret) && /^\\d/.test(ret)))) {\n                                    var left = style.left, rsLeft = elem.runtimeStyle.left;\n                                    elem.runtimeStyle.left = elem.currentStyle.left;\n                                    style.left = ((ret || 0));\n                                    ret = ((style.pixelLeft + \"px\"));\n                                    style.left = left;\n                                    elem.runtimeStyle.left = rsLeft;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                clean: function(elems, context) {\n                    var ret = [];\n                    context = ((context || JSBNG__document));\n                    if (((typeof context.createElement == \"undefined\"))) {\n                        context = ((((context.ownerDocument || ((context[0] && context[0].ownerDocument)))) || JSBNG__document));\n                    }\n                ;\n                ;\n                    jQuery.each(elems, function(i, elem) {\n                        if (!elem) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((elem.constructor == Number))) {\n                            elem += \"\";\n                        }\n                    ;\n                    ;\n                        if (((typeof elem == \"string\"))) {\n                            elem = elem.replace(/(<(\\w+)[^>]*?)\\/>/g, function(all, front, tag) {\n                                return ((tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : ((((((front + \"\\u003E\\u003C/\")) + tag)) + \"\\u003E\"))));\n                            });\n                            var tags = jQuery.trim(elem).toLowerCase(), div = context.createElement(\"div\");\n                            var wrap = ((((((((((((((((!tags.indexOf(\"\\u003Copt\") && [1,\"\\u003Cselect multiple='multiple'\\u003E\",\"\\u003C/select\\u003E\",])) || ((!tags.indexOf(\"\\u003Cleg\") && [1,\"\\u003Cfieldset\\u003E\",\"\\u003C/fieldset\\u003E\",])))) || ((tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [1,\"\\u003Ctable\\u003E\",\"\\u003C/table\\u003E\",])))) || ((!tags.indexOf(\"\\u003Ctr\") && [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\",\"\\u003C/tbody\\u003E\\u003C/table\\u003E\",])))) || ((((!tags.indexOf(\"\\u003Ctd\") || !tags.indexOf(\"\\u003Cth\"))) && [3,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\",\"\\u003C/tr\\u003E\\u003C/tbody\\u003E\\u003C/table\\u003E\",])))) || ((!tags.indexOf(\"\\u003Ccol\") && [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003C/tbody\\u003E\\u003Ccolgroup\\u003E\",\"\\u003C/colgroup\\u003E\\u003C/table\\u003E\",])))) || ((jQuery.browser.msie && [1,\"div\\u003Cdiv\\u003E\",\"\\u003C/div\\u003E\",])))) || [0,\"\",\"\",]));\n                            div.innerHTML = ((((wrap[1] + elem)) + wrap[2]));\n                            while (wrap[0]--) {\n                                div = div.lastChild;\n                            };\n                        ;\n                            if (jQuery.browser.msie) {\n                                var tbody = ((((!tags.indexOf(\"\\u003Ctable\") && ((tags.indexOf(\"\\u003Ctbody\") < 0)))) ? ((div.firstChild && div.firstChild.childNodes)) : ((((((wrap[1] == \"\\u003Ctable\\u003E\")) && ((tags.indexOf(\"\\u003Ctbody\") < 0)))) ? div.childNodes : []))));\n                                for (var j = ((tbody.length - 1)); ((j >= 0)); --j) {\n                                    if (((jQuery.nodeName(tbody[j], \"tbody\") && !tbody[j].childNodes.length))) {\n                                        tbody[j].parentNode.removeChild(tbody[j]);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                if (/^\\s/.test(elem)) {\n                                    div.insertBefore(context.createTextNode(elem.match(/^\\s*/)[0]), div.firstChild);\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                            elem = jQuery.makeArray(div.childNodes);\n                        }\n                    ;\n                    ;\n                        if (((((elem.length === 0)) && ((!jQuery.nodeName(elem, \"form\") && !jQuery.nodeName(elem, \"select\")))))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((((((elem[0] == undefined)) || jQuery.nodeName(elem, \"form\"))) || elem.options))) {\n                            ret.push(elem);\n                        }\n                         else {\n                            ret = jQuery.merge(ret, elem);\n                        }\n                    ;\n                    ;\n                    });\n                    return ret;\n                },\n                attr: function(elem, JSBNG__name, value) {\n                    if (((((!elem || ((elem.nodeType == 3)))) || ((elem.nodeType == 8))))) {\n                        return undefined;\n                    }\n                ;\n                ;\n                    var notxml = !jQuery.isXMLDoc(elem), set = ((value !== undefined)), msie = jQuery.browser.msie;\n                    JSBNG__name = ((((notxml && jQuery.props[JSBNG__name])) || JSBNG__name));\n                    if (elem.tagName) {\n                        var special = /href|src|style/.test(JSBNG__name);\n                        if (((((JSBNG__name == \"selected\")) && jQuery.browser.safari))) {\n                            elem.parentNode.selectedIndex;\n                        }\n                    ;\n                    ;\n                        if (((((((JSBNG__name in elem)) && notxml)) && !special))) {\n                            if (set) {\n                                if (((((((JSBNG__name == \"type\")) && jQuery.nodeName(elem, \"input\"))) && elem.parentNode))) {\n                                    throw \"type property can't be changed\";\n                                }\n                            ;\n                            ;\n                                elem[JSBNG__name] = value;\n                            }\n                        ;\n                        ;\n                            if (((jQuery.nodeName(elem, \"form\") && elem.getAttributeNode(JSBNG__name)))) {\n                                return elem.getAttributeNode(JSBNG__name).nodeValue;\n                            }\n                        ;\n                        ;\n                            return elem[JSBNG__name];\n                        }\n                    ;\n                    ;\n                        if (((((msie && notxml)) && ((JSBNG__name == \"style\"))))) {\n                            return jQuery.attr(elem.style, \"cssText\", value);\n                        }\n                    ;\n                    ;\n                        if (set) {\n                            elem.setAttribute(JSBNG__name, ((\"\" + value)));\n                        }\n                    ;\n                    ;\n                        var attr = ((((((msie && notxml)) && special)) ? elem.getAttribute(JSBNG__name, 2) : elem.getAttribute(JSBNG__name)));\n                        return ((((attr === null)) ? undefined : attr));\n                    }\n                ;\n                ;\n                    if (((msie && ((JSBNG__name == \"opacity\"))))) {\n                        if (set) {\n                            elem.zoom = 1;\n                            elem.filter = ((((elem.filter || \"\")).replace(/alpha\\([^)]*\\)/, \"\") + ((((((parseInt(value) + \"\")) == \"NaN\")) ? \"\" : ((((\"alpha(opacity=\" + ((value * 100)))) + \")\"))))));\n                        }\n                    ;\n                    ;\n                        return ((((elem.filter && ((elem.filter.indexOf(\"opacity=\") >= 0)))) ? ((((parseFloat(elem.filter.match(/opacity=([^)]*)/)[1]) / 100)) + \"\")) : \"\"));\n                    }\n                ;\n                ;\n                    JSBNG__name = JSBNG__name.replace(/-([a-z])/gi, function(all, letter) {\n                        return letter.toUpperCase();\n                    });\n                    if (set) {\n                        elem[JSBNG__name] = value;\n                    }\n                ;\n                ;\n                    return elem[JSBNG__name];\n                },\n                trim: function(text) {\n                    return ((text || \"\")).replace(/^\\s+|\\s+$/g, \"\");\n                },\n                makeArray: function(array) {\n                    var ret = [];\n                    if (((array != null))) {\n                        var i = array.length;\n                        if (((((((((i == null)) || array.split)) || array.JSBNG__setInterval)) || array.call))) {\n                            ret[0] = array;\n                        }\n                         else {\n                            while (i) {\n                                ret[--i] = array[i];\n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                inArray: function(elem, array) {\n                    for (var i = 0, length = array.length; ((i < length)); i++) {\n                        if (((array[i] === elem))) {\n                            return i;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return -1;\n                },\n                merge: function(first, second) {\n                    var i = 0, elem, pos = first.length;\n                    if (jQuery.browser.msie) {\n                        while (elem = second[i++]) {\n                            if (((elem.nodeType != 8))) {\n                                first[pos++] = elem;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    }\n                     else {\n                        while (elem = second[i++]) {\n                            first[pos++] = elem;\n                        };\n                    ;\n                    }\n                ;\n                ;\n                    return first;\n                },\n                unique: function(array) {\n                    var ret = [], done = {\n                    };\n                    try {\n                        for (var i = 0, length = array.length; ((i < length)); i++) {\n                            var id = jQuery.data(array[i]);\n                            if (!done[id]) {\n                                done[id] = true;\n                                ret.push(array[i]);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    } catch (e) {\n                        ret = array;\n                    };\n                ;\n                    return ret;\n                },\n                grep: function(elems, callback, inv) {\n                    var ret = [];\n                    for (var i = 0, length = elems.length; ((i < length)); i++) {\n                        if (((!inv != !callback(elems[i], i)))) {\n                            ret.push(elems[i]);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return ret;\n                },\n                map: function(elems, callback) {\n                    var ret = [];\n                    for (var i = 0, length = elems.length; ((i < length)); i++) {\n                        var value = callback(elems[i], i);\n                        if (((value != null))) {\n                            ret[ret.length] = value;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return ret.concat.apply([], ret);\n                }\n            });\n            var userAgent = JSBNG__navigator.userAgent.toLowerCase();\n            jQuery.browser = {\n                version: ((userAgent.match(/.+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/) || []))[1],\n                safari: /webkit/.test(userAgent),\n                JSBNG__opera: /opera/.test(userAgent),\n                msie: ((/msie/.test(userAgent) && !/opera/.test(userAgent))),\n                mozilla: ((/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)))\n            };\n            var styleFloat = ((jQuery.browser.msie ? \"styleFloat\" : \"cssFloat\"));\n            jQuery.extend({\n                boxModel: ((!jQuery.browser.msie || ((JSBNG__document.compatMode == \"CSS1Compat\")))),\n                props: {\n                    \"for\": \"htmlFor\",\n                    class: \"className\",\n                    float: styleFloat,\n                    cssFloat: styleFloat,\n                    styleFloat: styleFloat,\n                    readonly: \"readOnly\",\n                    maxlength: \"maxLength\",\n                    cellspacing: \"cellSpacing\"\n                }\n            });\n            jQuery.each({\n                parent: function(elem) {\n                    return elem.parentNode;\n                },\n                parents: function(elem) {\n                    return jQuery.dir(elem, \"parentNode\");\n                },\n                next: function(elem) {\n                    return jQuery.nth(elem, 2, \"nextSibling\");\n                },\n                prev: function(elem) {\n                    return jQuery.nth(elem, 2, \"previousSibling\");\n                },\n                nextAll: function(elem) {\n                    return jQuery.dir(elem, \"nextSibling\");\n                },\n                prevAll: function(elem) {\n                    return jQuery.dir(elem, \"previousSibling\");\n                },\n                siblings: function(elem) {\n                    return jQuery.sibling(elem.parentNode.firstChild, elem);\n                },\n                children: function(elem) {\n                    return jQuery.sibling(elem.firstChild);\n                },\n                contents: function(elem) {\n                    return ((jQuery.nodeName(elem, \"div\") ? ((elem.contentDocument || elem.contentWindow.JSBNG__document)) : jQuery.makeArray(elem.childNodes)));\n                }\n            }, function(JSBNG__name, fn) {\n                jQuery.fn[JSBNG__name] = function(selector) {\n                    var ret = jQuery.map(this, fn);\n                    if (((selector && ((typeof selector == \"string\"))))) {\n                        ret = jQuery.multiFilter(selector, ret);\n                    }\n                ;\n                ;\n                    return this.pushStack(jQuery.unique(ret));\n                };\n            });\n            jQuery.each({\n                appendTo: \"append\",\n                prependTo: \"prepend\",\n                insertBefore: \"before\",\n                insertAfter: \"after\",\n                replaceAll: \"replaceWith\"\n            }, function(JSBNG__name, original) {\n                jQuery.fn[JSBNG__name] = function() {\n                    var args = arguments;\n                    return this.each(function() {\n                        for (var i = 0, length = args.length; ((i < length)); i++) {\n                            jQuery(args[i])[original](this);\n                        };\n                    ;\n                    });\n                };\n            });\n            jQuery.each({\n                removeAttr: function(JSBNG__name) {\n                    jQuery.attr(this, JSBNG__name, \"\");\n                    if (((this.nodeType == 1))) {\n                        this.removeAttribute(JSBNG__name);\n                    }\n                ;\n                ;\n                },\n                addClass: function(classNames) {\n                    jQuery.className.add(this, classNames);\n                },\n                removeClass: function(classNames) {\n                    jQuery.className.remove(this, classNames);\n                },\n                toggleClass: function(classNames) {\n                    jQuery.className[((jQuery.className.has(this, classNames) ? \"remove\" : \"add\"))](this, classNames);\n                },\n                remove: function(selector) {\n                    if (((!selector || jQuery.filter(selector, [this,]).r.length))) {\n                        jQuery(\"*\", this).add(this).each(function() {\n                            jQuery.JSBNG__event.remove(this);\n                            jQuery.removeData(this);\n                        });\n                        if (this.parentNode) {\n                            this.parentNode.removeChild(this);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                },\n                empty: function() {\n                    jQuery(\"\\u003E*\", this).remove();\n                    while (this.firstChild) {\n                        this.removeChild(this.firstChild);\n                    };\n                ;\n                }\n            }, function(JSBNG__name, fn) {\n                jQuery.fn[JSBNG__name] = function() {\n                    return this.each(fn, arguments);\n                };\n            });\n            jQuery.each([\"Height\",\"Width\",], function(i, JSBNG__name) {\n                var type = JSBNG__name.toLowerCase();\n                jQuery.fn[type] = function(size) {\n                    return ((((this[0] == window)) ? ((((((((jQuery.browser.JSBNG__opera && JSBNG__document.body[((\"client\" + JSBNG__name))])) || ((jQuery.browser.safari && window[((\"JSBNG__inner\" + JSBNG__name))])))) || ((((JSBNG__document.compatMode == \"CSS1Compat\")) && JSBNG__document.documentElement[((\"client\" + JSBNG__name))])))) || JSBNG__document.body[((\"client\" + JSBNG__name))])) : ((((this[0] == JSBNG__document)) ? Math.max(Math.max(JSBNG__document.body[((\"JSBNG__scroll\" + JSBNG__name))], JSBNG__document.documentElement[((\"JSBNG__scroll\" + JSBNG__name))]), Math.max(JSBNG__document.body[((\"offset\" + JSBNG__name))], JSBNG__document.documentElement[((\"offset\" + JSBNG__name))])) : ((((size == undefined)) ? ((this.length ? jQuery.css(this[0], type) : null)) : this.css(type, ((((size.constructor == String)) ? size : ((size + \"px\")))))))))));\n                };\n            });\n            function num(elem, prop) {\n                return ((((elem[0] && parseInt(jQuery.curCSS(elem[0], prop, true), 10))) || 0));\n            };\n        ;\n            var chars = ((((jQuery.browser.safari && ((parseInt(jQuery.browser.version) < 417)))) ? \"(?:[\\\\w*_-]|\\\\\\\\.)\" : \"(?:[\\\\w\\u0128-\\uffff*_-]|\\\\\\\\.)\")), quickChild = new RegExp(((((\"^\\u003E\\\\s*(\" + chars)) + \"+)\"))), quickID = new RegExp(((((((((\"^(\" + chars)) + \"+)(#)(\")) + chars)) + \"+)\"))), quickClass = new RegExp(((((\"^([#.]?)(\" + chars)) + \"*)\")));\n            jQuery.extend({\n                expr: {\n                    \"\": function(a, i, m) {\n                        return ((((m[2] == \"*\")) || jQuery.nodeName(a, m[2])));\n                    },\n                    \"#\": function(a, i, m) {\n                        return ((a.getAttribute(\"id\") == m[2]));\n                    },\n                    \":\": {\n                        lt: function(a, i, m) {\n                            return ((i < ((m[3] - 0))));\n                        },\n                        gt: function(a, i, m) {\n                            return ((i > ((m[3] - 0))));\n                        },\n                        nth: function(a, i, m) {\n                            return ((((m[3] - 0)) == i));\n                        },\n                        eq: function(a, i, m) {\n                            return ((((m[3] - 0)) == i));\n                        },\n                        first: function(a, i) {\n                            return ((i == 0));\n                        },\n                        last: function(a, i, m, r) {\n                            return ((i == ((r.length - 1))));\n                        },\n                        even: function(a, i) {\n                            return ((((i % 2)) == 0));\n                        },\n                        odd: function(a, i) {\n                            return ((i % 2));\n                        },\n                        \"first-child\": function(a) {\n                            return ((a.parentNode.getElementsByTagName(\"*\")[0] == a));\n                        },\n                        \"last-child\": function(a) {\n                            return ((jQuery.nth(a.parentNode.lastChild, 1, \"previousSibling\") == a));\n                        },\n                        \"only-child\": function(a) {\n                            return !jQuery.nth(a.parentNode.lastChild, 2, \"previousSibling\");\n                        },\n                        parent: function(a) {\n                            return a.firstChild;\n                        },\n                        empty: function(a) {\n                            return !a.firstChild;\n                        },\n                        contains: function(a, i, m) {\n                            return ((((((((a.textContent || a.innerText)) || jQuery(a).text())) || \"\")).indexOf(m[3]) >= 0));\n                        },\n                        visible: function(a) {\n                            return ((((((\"hidden\" != a.type)) && ((jQuery.css(a, \"display\") != \"none\")))) && ((jQuery.css(a, \"visibility\") != \"hidden\"))));\n                        },\n                        hidden: function(a) {\n                            return ((((((\"hidden\" == a.type)) || ((jQuery.css(a, \"display\") == \"none\")))) || ((jQuery.css(a, \"visibility\") == \"hidden\"))));\n                        },\n                        enabled: function(a) {\n                            return !a.disabled;\n                        },\n                        disabled: function(a) {\n                            return a.disabled;\n                        },\n                        checked: function(a) {\n                            return a.checked;\n                        },\n                        selected: function(a) {\n                            return ((a.selected || jQuery.attr(a, \"selected\")));\n                        },\n                        text: function(a) {\n                            return ((\"text\" == a.type));\n                        },\n                        radio: function(a) {\n                            return ((\"radio\" == a.type));\n                        },\n                        checkbox: function(a) {\n                            return ((\"checkbox\" == a.type));\n                        },\n                        file: function(a) {\n                            return ((\"file\" == a.type));\n                        },\n                        password: function(a) {\n                            return ((\"password\" == a.type));\n                        },\n                        submit: function(a) {\n                            return ((\"submit\" == a.type));\n                        },\n                        image: function(a) {\n                            return ((\"image\" == a.type));\n                        },\n                        reset: function(a) {\n                            return ((\"reset\" == a.type));\n                        },\n                        button: function(a) {\n                            return ((((\"button\" == a.type)) || jQuery.nodeName(a, \"button\")));\n                        },\n                        input: function(a) {\n                            return /input|select|textarea|button/i.test(a.nodeName);\n                        },\n                        has: function(a, i, m) {\n                            return jQuery.JSBNG__find(m[3], a).length;\n                        },\n                        header: function(a) {\n                            return /h\\d/i.test(a.nodeName);\n                        },\n                        animated: function(a) {\n                            return jQuery.grep(jQuery.timers, function(fn) {\n                                return ((a == fn.elem));\n                            }).length;\n                        }\n                    }\n                },\n                parse: [/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *('?\"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\(\"?'?(.*?(\\(.*?\\))?[^(]*?)\"?'?\\)/,new RegExp(((((\"^([:.#]*)(\" + chars)) + \"+)\"))),],\n                multiFilter: function(expr, elems, not) {\n                    var old, cur = [];\n                    while (((expr && ((expr != old))))) {\n                        old = expr;\n                        var f = jQuery.filter(expr, elems, not);\n                        expr = f.t.replace(/^\\s*,\\s*/, \"\");\n                        cur = ((not ? elems = f.r : jQuery.merge(cur, f.r)));\n                    };\n                ;\n                    return cur;\n                },\n                JSBNG__find: function(t, context) {\n                    if (((typeof t != \"string\"))) {\n                        return [t,];\n                    }\n                ;\n                ;\n                    if (((((context && ((context.nodeType != 1)))) && ((context.nodeType != 9))))) {\n                        return [];\n                    }\n                ;\n                ;\n                    context = ((context || JSBNG__document));\n                    var ret = [context,], done = [], last, nodeName;\n                    while (((t && ((last != t))))) {\n                        var r = [];\n                        last = t;\n                        t = jQuery.trim(t);\n                        var foundToken = false, re = quickChild, m = re.exec(t);\n                        if (m) {\n                            nodeName = m[1].toUpperCase();\n                            for (var i = 0; ret[i]; i++) {\n                                for (var c = ret[i].firstChild; c; c = c.nextSibling) {\n                                    if (((((c.nodeType == 1)) && ((((nodeName == \"*\")) || ((c.nodeName.toUpperCase() == nodeName))))))) {\n                                        r.push(c);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                            };\n                        ;\n                            ret = r;\n                            t = t.replace(re, \"\");\n                            if (((t.indexOf(\" \") == 0))) {\n                                continue;\n                            }\n                        ;\n                        ;\n                            foundToken = true;\n                        }\n                         else {\n                            re = /^([>+~])\\s*(\\w*)/i;\n                            if ((((m = re.exec(t)) != null))) {\n                                r = [];\n                                var merge = {\n                                };\n                                nodeName = m[2].toUpperCase();\n                                m = m[1];\n                                for (var j = 0, rl = ret.length; ((j < rl)); j++) {\n                                    var n = ((((((m == \"~\")) || ((m == \"+\")))) ? ret[j].nextSibling : ret[j].firstChild));\n                                    for (; n; n = n.nextSibling) {\n                                        if (((n.nodeType == 1))) {\n                                            var id = jQuery.data(n);\n                                            if (((((m == \"~\")) && merge[id]))) {\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                            if (((!nodeName || ((n.nodeName.toUpperCase() == nodeName))))) {\n                                                if (((m == \"~\"))) {\n                                                    merge[id] = true;\n                                                }\n                                            ;\n                                            ;\n                                                r.push(n);\n                                            }\n                                        ;\n                                        ;\n                                            if (((m == \"+\"))) {\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                ;\n                                };\n                            ;\n                                ret = r;\n                                t = jQuery.trim(t.replace(re, \"\"));\n                                foundToken = true;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (((t && !foundToken))) {\n                            if (!t.indexOf(\",\")) {\n                                if (((context == ret[0]))) {\n                                    ret.shift();\n                                }\n                            ;\n                            ;\n                                done = jQuery.merge(done, ret);\n                                r = ret = [context,];\n                                t = ((\" \" + t.substr(1, t.length)));\n                            }\n                             else {\n                                var re2 = quickID;\n                                var m = re2.exec(t);\n                                if (m) {\n                                    m = [0,m[2],m[3],m[1],];\n                                }\n                                 else {\n                                    re2 = quickClass;\n                                    m = re2.exec(t);\n                                }\n                            ;\n                            ;\n                                m[2] = m[2].replace(/\\\\/g, \"\");\n                                var elem = ret[((ret.length - 1))];\n                                if (((((((((m[1] == \"#\")) && elem)) && elem.getElementById)) && !jQuery.isXMLDoc(elem)))) {\n                                    var oid = elem.getElementById(m[2]);\n                                    if (((((((((jQuery.browser.msie || jQuery.browser.JSBNG__opera)) && oid)) && ((typeof oid.id == \"string\")))) && ((oid.id != m[2]))))) {\n                                        oid = jQuery(((((\"[@id=\\\"\" + m[2])) + \"\\\"]\")), elem)[0];\n                                    }\n                                ;\n                                ;\n                                    ret = r = ((((oid && ((!m[3] || jQuery.nodeName(oid, m[3]))))) ? [oid,] : []));\n                                }\n                                 else {\n                                    for (var i = 0; ret[i]; i++) {\n                                        var tag = ((((((m[1] == \"#\")) && m[3])) ? m[3] : ((((((m[1] != \"\")) || ((m[0] == \"\")))) ? \"*\" : m[2]))));\n                                        if (((((tag == \"*\")) && ((ret[i].nodeName.toLowerCase() == \"object\"))))) {\n                                            tag = \"param\";\n                                        }\n                                    ;\n                                    ;\n                                        r = jQuery.merge(r, ret[i].getElementsByTagName(tag));\n                                    };\n                                ;\n                                    if (((m[1] == \".\"))) {\n                                        r = jQuery.classFilter(r, m[2]);\n                                    }\n                                ;\n                                ;\n                                    if (((m[1] == \"#\"))) {\n                                        var tmp = [];\n                                        for (var i = 0; r[i]; i++) {\n                                            if (((r[i].getAttribute(\"id\") == m[2]))) {\n                                                tmp = [r[i],];\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                        };\n                                    ;\n                                        r = tmp;\n                                    }\n                                ;\n                                ;\n                                    ret = r;\n                                }\n                            ;\n                            ;\n                                t = t.replace(re2, \"\");\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (t) {\n                            var val = jQuery.filter(t, r);\n                            ret = r = val.r;\n                            t = jQuery.trim(val.t);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    if (t) {\n                        ret = [];\n                    }\n                ;\n                ;\n                    if (((ret && ((context == ret[0]))))) {\n                        ret.shift();\n                    }\n                ;\n                ;\n                    done = jQuery.merge(done, ret);\n                    return done;\n                },\n                classFilter: function(r, m, not) {\n                    m = ((((\" \" + m)) + \" \"));\n                    var tmp = [];\n                    for (var i = 0; r[i]; i++) {\n                        var pass = ((((((\" \" + r[i].className)) + \" \")).indexOf(m) >= 0));\n                        if (((((!not && pass)) || ((not && !pass))))) {\n                            tmp.push(r[i]);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return tmp;\n                },\n                filter: function(t, r, not) {\n                    var last;\n                    while (((t && ((t != last))))) {\n                        last = t;\n                        var p = jQuery.parse, m;\n                        for (var i = 0; p[i]; i++) {\n                            m = p[i].exec(t);\n                            if (m) {\n                                t = t.substring(m[0].length);\n                                m[2] = m[2].replace(/\\\\/g, \"\");\n                                break;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        if (!m) {\n                            break;\n                        }\n                    ;\n                    ;\n                        if (((((m[1] == \":\")) && ((m[2] == \"not\"))))) {\n                            r = ((isSimple.test(m[3]) ? jQuery.filter(m[3], r, true).r : jQuery(r).not(m[3])));\n                        }\n                         else {\n                            if (((m[1] == \".\"))) {\n                                r = jQuery.classFilter(r, m[2], not);\n                            }\n                             else {\n                                if (((m[1] == \"[\"))) {\n                                    var tmp = [], type = m[3];\n                                    for (var i = 0, rl = r.length; ((i < rl)); i++) {\n                                        var a = r[i], z = a[((jQuery.props[m[2]] || m[2]))];\n                                        if (((((z == null)) || /href|src|selected/.test(m[2])))) {\n                                            z = ((jQuery.attr(a, m[2]) || \"\"));\n                                        }\n                                    ;\n                                    ;\n                                        if (((((((((((((((((type == \"\")) && !!z)) || ((((type == \"=\")) && ((z == m[5])))))) || ((((type == \"!=\")) && ((z != m[5])))))) || ((((((type == \"^=\")) && z)) && !z.indexOf(m[5]))))) || ((((type == \"$=\")) && ((z.substr(((z.length - m[5].length))) == m[5])))))) || ((((((type == \"*=\")) || ((type == \"~=\")))) && ((z.indexOf(m[5]) >= 0)))))) ^ not))) {\n                                            tmp.push(a);\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                ;\n                                    r = tmp;\n                                }\n                                 else {\n                                    if (((((m[1] == \":\")) && ((m[2] == \"nth-child\"))))) {\n                                        var merge = {\n                                        }, tmp = [], test = /(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(((((((((((m[3] == \"even\")) && \"2n\")) || ((((m[3] == \"odd\")) && \"2n+1\")))) || ((!/\\D/.test(m[3]) && ((\"0n+\" + m[3])))))) || m[3]))), first = ((((test[1] + ((test[2] || 1)))) - 0)), last = ((test[3] - 0));\n                                        for (var i = 0, rl = r.length; ((i < rl)); i++) {\n                                            var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);\n                                            if (!merge[id]) {\n                                                var c = 1;\n                                                for (var n = parentNode.firstChild; n; n = n.nextSibling) {\n                                                    if (((n.nodeType == 1))) {\n                                                        n.nodeIndex = c++;\n                                                    }\n                                                ;\n                                                ;\n                                                };\n                                            ;\n                                                merge[id] = true;\n                                            }\n                                        ;\n                                        ;\n                                            var add = false;\n                                            if (((first == 0))) {\n                                                if (((node.nodeIndex == last))) {\n                                                    add = true;\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                             else {\n                                                if (((((((((node.nodeIndex - last)) % first)) == 0)) && ((((((node.nodeIndex - last)) / first)) >= 0))))) {\n                                                    add = true;\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                        ;\n                                        ;\n                                            if (((add ^ not))) {\n                                                tmp.push(node);\n                                            }\n                                        ;\n                                        ;\n                                        };\n                                    ;\n                                        r = tmp;\n                                    }\n                                     else {\n                                        var fn = jQuery.expr[m[1]];\n                                        if (((typeof fn == \"object\"))) {\n                                            fn = fn[m[2]];\n                                        }\n                                    ;\n                                    ;\n                                        if (((typeof fn == \"string\"))) {\n                                            fn = eval(((((\"false||function(a,i){return \" + fn)) + \";}\")));\n                                        }\n                                    ;\n                                    ;\n                                        r = jQuery.grep(r, function(elem, i) {\n                                            return fn(elem, i, m, r);\n                                        }, not);\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return {\n                        r: r,\n                        t: t\n                    };\n                },\n                dir: function(elem, dir) {\n                    var matched = [], cur = elem[dir];\n                    while (((cur && ((cur != JSBNG__document))))) {\n                        if (((cur.nodeType == 1))) {\n                            matched.push(cur);\n                        }\n                    ;\n                    ;\n                        cur = cur[dir];\n                    };\n                ;\n                    return matched;\n                },\n                nth: function(cur, result, dir, elem) {\n                    result = ((result || 1));\n                    var num = 0;\n                    for (; cur; cur = cur[dir]) {\n                        if (((((cur.nodeType == 1)) && ((++num == result))))) {\n                            break;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return cur;\n                },\n                sibling: function(n, elem) {\n                    var r = [];\n                    for (; n; n = n.nextSibling) {\n                        if (((((n.nodeType == 1)) && ((n != elem))))) {\n                            r.push(n);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return r;\n                }\n            });\n            jQuery.JSBNG__event = {\n                add: function(elem, types, handler, data) {\n                    if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                        return;\n                    }\n                ;\n                ;\n                    if (((jQuery.browser.msie && elem.JSBNG__setInterval))) {\n                        elem = window;\n                    }\n                ;\n                ;\n                    if (!handler.guid) {\n                        handler.guid = this.guid++;\n                    }\n                ;\n                ;\n                    if (((data != undefined))) {\n                        var fn = handler;\n                        handler = this.proxy(fn, function() {\n                            return fn.apply(this, arguments);\n                        });\n                        handler.data = data;\n                    }\n                ;\n                ;\n                    var events = ((jQuery.data(elem, \"events\") || jQuery.data(elem, \"events\", {\n                    }))), handle = ((jQuery.data(elem, \"handle\") || jQuery.data(elem, \"handle\", function() {\n                        if (((((typeof jQuery != \"undefined\")) && !jQuery.JSBNG__event.triggered))) {\n                            return jQuery.JSBNG__event.handle.apply(arguments.callee.elem, arguments);\n                        }\n                    ;\n                    ;\n                    })));\n                    handle.elem = elem;\n                    jQuery.each(types.split(/\\s+/), function(index, type) {\n                        var parts = type.split(\".\");\n                        type = parts[0];\n                        handler.type = parts[1];\n                        var handlers = events[type];\n                        if (!handlers) {\n                            handlers = events[type] = {\n                            };\n                            if (((!jQuery.JSBNG__event.special[type] || ((jQuery.JSBNG__event.special[type].setup.call(elem) === false))))) {\n                                if (elem.JSBNG__addEventListener) {\n                                    elem.JSBNG__addEventListener(type, handle, false);\n                                }\n                                 else {\n                                    if (elem.JSBNG__attachEvent) {\n                                        elem.JSBNG__attachEvent(((\"JSBNG__on\" + type)), handle);\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        handlers[handler.guid] = handler;\n                        jQuery.JSBNG__event.global[type] = true;\n                    });\n                    elem = null;\n                },\n                guid: 1,\n                global: {\n                },\n                remove: function(elem, types, handler) {\n                    if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                        return;\n                    }\n                ;\n                ;\n                    var events = jQuery.data(elem, \"events\"), ret, index;\n                    if (events) {\n                        if (((((types == undefined)) || ((((typeof types == \"string\")) && ((types.charAt(0) == \".\"))))))) {\n                            {\n                                var fin19keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin19i = (0);\n                                var type;\n                                for (; (fin19i < fin19keys.length); (fin19i++)) {\n                                    ((type) = (fin19keys[fin19i]));\n                                    {\n                                        this.remove(elem, ((type + ((types || \"\")))));\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            if (types.type) {\n                                handler = types.handler;\n                                types = types.type;\n                            }\n                        ;\n                        ;\n                            jQuery.each(types.split(/\\s+/), function(index, type) {\n                                var parts = type.split(\".\");\n                                type = parts[0];\n                                if (events[type]) {\n                                    if (handler) {\n                                        delete events[type][handler.guid];\n                                    }\n                                     else {\n                                        {\n                                            var fin20keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin20i = (0);\n                                            (0);\n                                            for (; (fin20i < fin20keys.length); (fin20i++)) {\n                                                ((handler) = (fin20keys[fin20i]));\n                                                {\n                                                    if (((!parts[1] || ((events[type][handler].type == parts[1]))))) {\n                                                        delete events[type][handler];\n                                                    }\n                                                ;\n                                                ;\n                                                };\n                                            };\n                                        };\n                                    ;\n                                    }\n                                ;\n                                ;\n                                    {\n                                        var fin21keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin21i = (0);\n                                        (0);\n                                        for (; (fin21i < fin21keys.length); (fin21i++)) {\n                                            ((ret) = (fin21keys[fin21i]));\n                                            {\n                                                break;\n                                            };\n                                        };\n                                    };\n                                ;\n                                    if (!ret) {\n                                        if (((!jQuery.JSBNG__event.special[type] || ((jQuery.JSBNG__event.special[type].teardown.call(elem) === false))))) {\n                                            if (elem.JSBNG__removeEventListener) {\n                                                elem.JSBNG__removeEventListener(type, jQuery.data(elem, \"handle\"), false);\n                                            }\n                                             else {\n                                                if (elem.JSBNG__detachEvent) {\n                                                    elem.JSBNG__detachEvent(((\"JSBNG__on\" + type)), jQuery.data(elem, \"handle\"));\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                        ;\n                                        ;\n                                        }\n                                    ;\n                                    ;\n                                        ret = null;\n                                        delete events[type];\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            });\n                        }\n                    ;\n                    ;\n                        {\n                            var fin22keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin22i = (0);\n                            (0);\n                            for (; (fin22i < fin22keys.length); (fin22i++)) {\n                                ((ret) = (fin22keys[fin22i]));\n                                {\n                                    break;\n                                };\n                            };\n                        };\n                    ;\n                        if (!ret) {\n                            var handle = jQuery.data(elem, \"handle\");\n                            if (handle) {\n                                handle.elem = null;\n                            }\n                        ;\n                        ;\n                            jQuery.removeData(elem, \"events\");\n                            jQuery.removeData(elem, \"handle\");\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                },\n                trigger: function(type, data, elem, donative, extra) {\n                    data = jQuery.makeArray(data);\n                    if (((type.indexOf(\"!\") >= 0))) {\n                        type = type.slice(0, -1);\n                        var exclusive = true;\n                    }\n                ;\n                ;\n                    if (!elem) {\n                        if (this.global[type]) {\n                            jQuery(\"*\").add([window,JSBNG__document,]).trigger(type, data);\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                            return undefined;\n                        }\n                    ;\n                    ;\n                        var val, ret, fn = jQuery.isFunction(((elem[type] || null))), JSBNG__event = ((!data[0] || !data[0].preventDefault));\n                        if (JSBNG__event) {\n                            data.unshift({\n                                type: type,\n                                target: elem,\n                                preventDefault: function() {\n                                \n                                },\n                                stopPropagation: function() {\n                                \n                                },\n                                timeStamp: now()\n                            });\n                            data[0][expando] = true;\n                        }\n                    ;\n                    ;\n                        data[0].type = type;\n                        if (exclusive) {\n                            data[0].exclusive = true;\n                        }\n                    ;\n                    ;\n                        var handle = jQuery.data(elem, \"handle\");\n                        if (handle) {\n                            val = handle.apply(elem, data);\n                        }\n                    ;\n                    ;\n                        if (((((((!fn || ((jQuery.nodeName(elem, \"a\") && ((type == \"click\")))))) && elem[((\"JSBNG__on\" + type))])) && ((elem[((\"JSBNG__on\" + type))].apply(elem, data) === false))))) {\n                            val = false;\n                        }\n                    ;\n                    ;\n                        if (JSBNG__event) {\n                            data.shift();\n                        }\n                    ;\n                    ;\n                        if (((extra && jQuery.isFunction(extra)))) {\n                            ret = extra.apply(elem, ((((val == null)) ? data : data.concat(val))));\n                            if (((ret !== undefined))) {\n                                val = ret;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (((((((fn && ((donative !== false)))) && ((val !== false)))) && !((jQuery.nodeName(elem, \"a\") && ((type == \"click\"))))))) {\n                            this.triggered = true;\n                            try {\n                                elem[type]();\n                            } catch (e) {\n                            \n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                        this.triggered = false;\n                    }\n                ;\n                ;\n                    return val;\n                },\n                handle: function(JSBNG__event) {\n                    var val, ret, namespace, all, handlers;\n                    JSBNG__event = arguments[0] = jQuery.JSBNG__event.fix(((JSBNG__event || window.JSBNG__event)));\n                    namespace = JSBNG__event.type.split(\".\");\n                    JSBNG__event.type = namespace[0];\n                    namespace = namespace[1];\n                    all = ((!namespace && !JSBNG__event.exclusive));\n                    handlers = ((jQuery.data(this, \"events\") || {\n                    }))[JSBNG__event.type];\n                    {\n                        var fin23keys = ((window.top.JSBNG_Replay.forInKeys)((handlers))), fin23i = (0);\n                        var j;\n                        for (; (fin23i < fin23keys.length); (fin23i++)) {\n                            ((j) = (fin23keys[fin23i]));\n                            {\n                                var handler = handlers[j];\n                                if (((all || ((handler.type == namespace))))) {\n                                    JSBNG__event.handler = handler;\n                                    JSBNG__event.data = handler.data;\n                                    ret = handler.apply(this, arguments);\n                                    if (((val !== false))) {\n                                        val = ret;\n                                    }\n                                ;\n                                ;\n                                    if (((ret === false))) {\n                                        JSBNG__event.preventDefault();\n                                        JSBNG__event.stopPropagation();\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    return val;\n                },\n                fix: function(JSBNG__event) {\n                    if (((JSBNG__event[expando] == true))) {\n                        return JSBNG__event;\n                    }\n                ;\n                ;\n                    var originalEvent = JSBNG__event;\n   &nbs