myspace Mafia Wars Autoplayer

By coco loco Last update Oct 4, 2009 — Installed 2,296 times.

There are 1 previous version of this script.

the source is over 100KB, syntax highlighting in the browser is too slow

the source is over 100KB, syntax highlighting in the browser is too slow

// ==UserScript==
// @name    myspace Mafia Wars Autoplayer
// @namespace   mafiawars
// @description   autoplayer for the mafia wars game I modified code from Blannies Vampire Wars 
// @include   http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx/*
// @include   http://www.myspace.com/common/error.html
// @version 0.9.18
// @contributor StevenD
// @contributor CharlesD
// @contributor Eric Ortego
// @contributor Jeremy
// @contributor Liquidor
// @contributor AK17710N
// @contributor Fragger
// @contributor <x51>
// @contributor CyB
// @contributor int1
// @contributor Janos112
// @contributor int2str
// @contributor Doonce
// @contributor Eric Layne
// @contributor Tanlis
// @contributor Cam
// @contributor vmzildjian
// @contributor Scrotal
// ==/UserScript==


var SCRIPT = {
  url: 'http://userscripts.org/scripts/source/43573.user.js',
  version: '0.9.18',
  build: '720',
  name: 'inthemafia',
  appID: 'app10979261223',
  ajaxPage: 'inner2',
  presentationurl: 'http://userscripts.org/scripts/show/43573',
  controller: '/remote/html_server.php?&xw_controller=',
  action: '&xw_action=',
  city: '&xw_city=',
  opponent: '&opponent_id=',
  user: '&user_id='
};

// Register debugOnOff with Greasemonkey
GM_registerMenuCommand('FB Mafia Wars Autoplayer - Turn Debugging Log On/Off', debugOnOff);
GM_registerMenuCommand('FB Mafia Wars Autoplayer - Log Filtering On/Off', logFilterOnOff);
GM_registerMenuCommand('FB Mafia Wars Autoplayer - Clear Saved Values', function() { 

clearSettings(); loadHome(); });
GM_registerMenuCommand('FB Mafia Wars Autoplayer - Display Stats Window', function() { 

toggleStats(); });

// Handle myspace error pages.
if (location.href.indexOf('error') != -1) {
  var delay = 30;
  var p = document.createElement('p');
  var wait = function() {
    if (!delay) return back();
    p.innerHTML = 'You will automatically return to the previous page in ' +
                  delay-- + ' seconds.';
    window.setTimeout(wait, 1000);
  }
  document.body.appendChild(p);
  wait();
  return;
}

customizeLayout();

//create data uris for mini icon usage
var searchIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACLElEQVR42mNkgIJ12/cacLCzlT

IwMtkwMzNx/Pnz58qfP3/n+Ls5LGfAAxhBxMZdBxKFBflnqirKs4oKCTAwMjIyfP' +
                    

'/xk+HmvYcMj54+X/n9x4/oCD+Pv1gNWLVlp6GYiMhJQ20NVm4uDoTMfwaGf///MZy5fIPh9Zs3tf5uji1YDdi67/BSaUnJKD

UFGQYmJiaw7SDd//79Z/j77x/Di9fvGO4+ePTh4+fP4mE+br8wDNh+4OhDTRVlOU' +
                    

'F+XgYOdlaIAUDbQZp//vrN8OrtB4b3Hz8yPHzy1BhowDkMA3YePPZCR0NNnJebk4GdlRXsiv9A+PfvP4Yv374zfPryjeHdhw

+gsLAK9nQ+js0Lewy1NZ15ebgYWFlYGFiYmcDO//P3L8M3YEB+/faD4eHTp3+ePH' +
                    

'8pFuXv+R7DAGD0hasoyK1QlkeEwf//EBf8+PWL4e37jwy37z9Y7uNsF4UvGherKcnHyEtLMjAzM4MNALng5Zt3DM9fvWa4/+

BhSWyIfy9OAxav28LEy81VwsvDUyolLioCcsW7Dx9/vf/4adWLl6+vXzt/qmXz+r' +
                    

'WHGJmYfG7evPkFwwAYmL96IwsTI6MG0BXsQFfcjg3y+QQSNzO3OMzLL2Dz9OH9o0A/ety4ceMLVgNwAR1tbT5efv4dXDx8lk

8fPTgKFPIEGvKZaAMghmgBDRHAMIRoA3AZQpIBUEN4gYbsBBny8O7tvSQbAA0TXg' +
                    '4u7g2fP33YBwCb9/irlkMH+QAAAABJRU5ErkJgggo=' +
                    '" />';

var lootbagIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQAIQfALq3nMG8k8TAmbSvfMnFoTg3LYmEWhMSDaumeM7Lqrm0hNXStXl2Vnp4ab

65jaeha4+Nery2irexgmhnW9HNrsvIpdjVurGrd9fUuktKQcK9otPQsrOwkiAfHG' +
                    

'poSv///yH5BAEAAB8ALAAAAAAQABAAAAWB4CeOk1Y0UHeMrHgAUZU4Wds2gcKo9thxl0ePNUlUKoPVEGLZYDaBZK9gsTwJgc

ig11h4KQSHQiJscSjoRFgi2bIOsoRxPXCPDoQ4QSAeXFp4BIICAQ5tfywFAouEDh' +
                    'FtBm8Bk4xZCgoPSh8ZARcKk4UKjgiaHyoFDAaqBh4MpCIhADs=' +
                    '" />';

var tabSelectedImage = '<img src="' +
                    

'data:image/gif;base64,R0lGODdhZAAyAOMQACIODyUQESYTFCkWGCwZHTMgJDckKDAdIDooLT4sMUw6QEY0OkEvNVJBSF

lIUGFQWSwAAAAAZAAyAAAE/hAAIQMFwYa5+c6fxklChplT1YGq5GlgOXpnd6FsCm' +
                    

'7CRfEyUa/ymwRlwxPxc3G5hJcBxsgEtjDHZ6W1I9lqR9s3xvReU1oyRjr7ZbIzFNopm7OSnVnNuDVjr3VXeSVvJngudRaAKz

eGPlM4Pk1FkSSPgk1TiJYkKoycdp+ac00iKJRBpmNYZUqjeqhlIjqsf655aIZqXU' +
                    

'mlJryXe4qjhE9fKj+SnZ62g79uMcEsw3K+rThOz33at2HNK9nX4DVqddC/QmNdw75nudMr6tPSoutMA+vBP/jzy3Y3jcL5Sy

Rq0hOAgvKka2OsFUNm7BracsIMD71W1iZqMvcGiZgQ/iE8egG5DMcpZxjFjNzzjp' +
                    

'kmVRLwWarCZ82UHjTxMHIYr1giSTkD1hr2ElnKTrs4Ii1ki+CmPkQGPkrqp5qWNjw+1HTmiWfWqK5+0imI5Aaieiq3KQsFFo

+UkF/RtGtG8eTKSjXnEj0mLG0scrdMXcL2dE7YVEiHCsU1hJqPKrKUEnlsRuHan1' +
                    

'p7xYuclh1lrUPfTuKmaINMLDJ7xTwLNhIhC1E+NovCemLsrEFjOgKShJ+R1yUu71wT0lJZ3UCs5B0kRUDq21QmyByAhN+b5z

F7sIHNY7sJ6h9OB/CNU7ppkdGdLwEgczx18+zZkE89oD14C+/VD3sffbxp+dWV/l' +
                    

'cfcvCpxx5QxOkWn3bOZVCfc28RoIF24zknIQAEvEcdIc51OMuG7uHTYH/UPThgABIG16GHdYDYYA8HlDBAhiLWWKKE7lVAAI

QWUlDfeTN2BJ4AF/4YogU7rnEAbPXd6CCATAZXpIozYpChjCVuuGOTP9aXIZLBze' +
                    

'jjjkRukKR7Mh6AT5D4+eglPlcSCWGT4xEgwZkP1kkBkRuKGZ+Z1BGwI4qE7HhAAU0uiaGWTcrpp6Axgdeon0HG16igJQxKqH

ZJQvrnBBlOsCR+oYpJo4VSEHDAgWp6iSifGWC6qIxXUirTqTOKKMCrud6Y6qqz1n' +
                    

'njng1maCcAB5B5paAW/iRrLKYzFiChtDOquiMBBaQ5ZqbLqolitnxK4aqhKTpb7ZYxsjeooGRKi+KgB6gJawDOEllAjPFScG

iu8eJzL3XJ6lurtwOMKiaRgtaH6HhLQhjvtfcKkC+yJhLc8IxqWouiARYGjK1ziL' +
                    

'Lr8b+7tiqtoYhimG0A1L6baIiq7kuAAc5m+O8AIQs6cgkts2sBrzRK6yyiOCeLM9HmnoxxvwUQrbTS+77LM7MRD2CAzkY7G6

+aTdeXdMJRY1pnARsgGrDVhy5pAMcAUCvo1bty7BwCquL8LNwFyM3roRIeYIDX/f' +
                    

'pNHQJc/00313fvmHcPe7u7tapX+41oAQkI2rQB/ohivuPV0uaNr+dWSysA59jSLDHbN9+boeloq1oA4QQQDrrmo2NbOr6ot0

rzz1jPiHm8a8OOAM0IIDBj5clePnPe9xZ/vLXKv454D2tHbEACPcCObQLSYv678w' +
                    

'Qgj23e2BJud8ccB4BAtggkQF0Cw0t/79o0U57h8F4y4Dr9h1Y+AP7/S94B1oczBkjPe9jSn9XwRwD9HYp/9vvf3wKIrQGGDH

b9m1nx/LaAwyXgah9sGgP8FryrYc6A4cNcAUZIv+HNzH0B4N6M1ne9AySgcgIYHv' +
                    

'AYQDgDIACFIVwhCX1oQhjKMHY+fN/8EpAsHhYPcwogIuZ+mKwFhIx7CGiA/hRfN0ICWPF49/KbAXOYABQN74OxW0CGOigtBC

wgAVEc3hS7+MXwhdEAY2zf0QqgRgF0MHYKiNcTDRBFEVavfX+D4/8KUMgVHvKDA1' +
                    

'CkAAyYrOL1kHv3YsDabGjF2MHvUI3U5BQhKUlKxq54mfyd5uAnu0DeUAGVU4AD36hJJ5IQlgSQpapoiccNElJNVGxgAlDIAD

UOoJOU++IrYznLYfayh4H8Xxd5yMRjGu+TwhyhAijHxzeuUAFWXMAC1PTGH3aTew' +
                    

'wAZzfJub7XKYBuCNjm2ooJTwVQx5uR3Cb3xIlOdYqTnU2LZz1fGM+8RTF2DUgmG8G5tijeMAEdtKEC/rR4AIYS8no3jCgc1Q

RLEG5QoIjyJh61mEtwrs+iDs0o4TY6gI6GD5XxtOEB2GgAcTJyeD9cgCYVIM8Onh' +
                    

'R++tQpIXuKSliuL52JrKY4cZlO5zTAhQ2wog+LuVOi/vSoUYxkNd/5wagyr5wTXZsDrlfTD7bvnRUNZPgcgMg3+hCOhONpsr

aZwHcOgAEkZaQmZ5rQXDYgigYY6wfdeta4qpWu3zQeXlP5TqkKtHg81aYmCfDUDi' +
                    

'4AlwlwgE4rOtnKuhGzDdgRLJsGS/gF9qkBkCUUOxpPWXL2ap69bOUSEFoBjJaRNyweRXUZ2G0W4KmQde0CHEA5B6CxAZoM7g

iH/lvc4xpwpH+baLzAObMDNOABNFOAAxSALeC2drnEzaxz84bX6DZgupREoxvfCM' +
                    

'enBhaLshzsO73ogEi+150MkC/dhlufsUqLoZRLaADSqb/A8rO9wzMufvVL3/5qDsC0zZZOw/fUQ411qA3gXgMSat0nmpSRE9

Uwh4FLSDYu4LwtDe0AMkwzvOoPAQ54gOwuzNMM/3bEHjYxiieaIRYfwMUnVq0DHH' +
                    

'AoGRsQnDs1LmVxqQAjM1Ko2q3cX2Np2hMzUbsZoqcX/yrUIRfZnEgmpJKnnMsqZ7iiDsjyH0mKV51eNsOUpahxPxhi+sJ5wz

SbMyHhPNwYOYCOqs3sNfPaVeZi1hnPB9BznfssgD9XMdBsjeQIGfCABaxNxmdFLp' +
                    

'qbFtWr8bR47dUmcX9r6ZISbrgIAAAcs4VcHp540gao9KVBPVFRc7rUn54pW1W9TQG02o0NiAAAOw==' +
                    '" />';

var playIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC+0lEQVR42l1TSU9TURT+Xt9UaI

HWAqUMJY2tSIwS41QEjXFhTFy54B/wF9iUhAUJxAQTt0RJkJUxLli6c6ELNcTEKV' +
                    

'GCYShWfNRHh1faN7aeexkinuTm3pt77ne+851zBPxnW1tbCVmSxxVVuU3XRKPRAK0N0zRf2ba9kEwmN/71F44O2WxWlCRpGj

5x4sPXVXk9m0OlWuVvweZmJOLduDiYclzbmnNddyqVSnnHAD+3t0VFUV9ktT/336' +
                    

'x8RGtLEKqiwOfz0WsD9XoDpmWhXNnH6OUhREPBZWIzxkA4gKZpM7/+FDMrn78hEg5BlmVIokgABwQZgOu5sG0HeqGIKxcGEQ

6os4lEYlLY2dlJSIq6+vL1e7k9HIaqKvyzKAogLQ4B6nBcD7bjwLJs5PcKuDNyya' +
                    

'ntVwYEXddn1nO7Gb1ooCXQTAAyOVl49vw5boyO4kwySYkKTEh4Xp1SsWHsVxEJtaA7HJwVjLLx9tPaZjrQ5Kdsma+AKok3//

gJP/f39+N6Oo1otJPfD6uCas3E2XjXO8EwjN9ffmSjHadCqJkWahTdILGWlpag+p' +
                    

'sQaGmjyC66OtsxfO0q2iMRNFGa+b0iBuJdGgFUfn/fzEXDbUEuFqNXKpex+HQJ/qZmBFpD8FwXsc4IRobTiB0yKZQMnO7u0I

RKpfJ2bVtL+xWZq65QBaq1Kh48fASBysg0uHVzFD2xGC+pRZWoNw72eEfonVAsFm' +
                    

'f0cjVTpsgqfVZkCY5jY35hEffu3sHQ+XNcPIdY2I7LK8F2JnhAwqyQz+cTlOvq6lZOZgAyAYhEkTURY8PMozK6ngeXgdCybB

epvi7HKJcGeKcUCoUZ061ncprOGRz0gY/netRIRyCMQQ/pIXjObCwWm+Qeu5omqn' +
                    

'7/i5rt3s/t6jy66PsHoNHgzcRSYZ9FeMuWaY71xePe8TAxEFlRpiVZmdBLhlwy9nn3MZMlEW3BAMKtAceq1eZsx57q7e31Tk

zjkTFNaBbGaTKPx5lsg4aHjzPRPjHOfwGdsIJvkkplkQAAAABJRU5ErkJgggo=' +
                    '" />';

var infoIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADPUlEQVR42l3Te2wMQRwH8O++aT

V1WjmttueupSIedWiaqJL7QyQETdoQJyIIEsQrErlS0Wg9KooQkYq/LogSCeKt8Q' +
                    

'wSjcQj+INzrfbu2nu0d1drd293ze4FZZJNdnZmPzO/38yPwn/N5/PbOY5dJwiCS9N1u64DFHSfKIrtsqycmzChxDd0PvX7xe

/3MzTNNiRF7PK2dXDPX/kQjSbNsVGjMjG73IEVNWUKz6aaNVWtLy0dr/4BOju7GJ' +
                    

'7n224/+VZ9/OxjWMgP3DAO+u9VyIsiKeiPDmLr+irMK8+7JstyrYGYQE8g2HjnWaen5fxT5FizkaJpVDpt2La83ASOnm7HK3

8ErKYhHBzAtjWVqHKObhpf4qijurt77AmJ/rx4y0UuZ8xIKAwNjaYwf+Y47HNXmE' +
                    

'B9yz087IyCUTVwBIkE+nGlpVYRKKmUCofDjQe8bzztb/xghwsAAUCArEwBedkZJhDoSyChpACNxKKqUEUZrrIibK2e2ETF4/

EX5Z5bFRkCC8gyARhIZKJragFOrp1tAjsO3ca9njgEhnRSGiDwEKUUHu11vaRiA/' +
                    

'GgY/t1q91hhdY/gO+RQYQHFbjnlMC7ea4JrG+4idYPQeRm8CjIyQRtyYbvSxAfDy0IpYGdN6w2xxh86fuBRKTf3Ka7shjejZ

Vp4MAttH7qI6ExyMrNRnFuJvxfA/h4kADJZPKFs/5uRYIbhkDSCIGEQm6P25kP7+' +
                    

'oZaeDwfbR+F83cIKUiL4tHliziuWceCSEWa/Rc+eA52xGERtFmDozHPbMA3pXT0kDzwzRATsDYHa1r2OC0om5hcRPV29tnj0

jU52n773Myy5nbBLkH7lmF8K6angaOPEBr1480oKngFQUde1zKCOpnqXmRItFY46' +
                    

'XXQc+my28BlgBkJ0vL8nGiZooJ7D7zFBe7CUBWBjnOU8umYsmkkU2FBfl1JhAKhRheENouvA5Vb7/6DrJx3hQ1pFR0My886R

4jaM1kyzVJkmpttiL1TzEZCMvxDb2ivuvko2/czfdBdMVEc6zQMhyLJluxucqmWF' +
                    

'i1OaXI9UVFhX+LaWgzcmKUM8dxLkXV7cY3htJ9pJTbJVk+NzY/759y/gUON2pDlqRajwAAAABJRU5ErkJgggo=' +
                    '" />';

var attackIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhDQANANU/AKJRAP/LNP/dNP/KIv2uAMmHAOyXAP/pfP/eQ7VkAfisAEA8LOWNAP+9Ck

gkDeejAIhIA92OAP/ODmtEDf/EAf+9ADErHF02Df/PE/y3ALVrAGMyCv/mhk9LLy' +
                    

'ccFhsYGf/TJaeRO9PCav/fYqeWLP/UE//hRv+0DvC6QqeDDrWiHPecAP/GCtGeAoVXCvDcXKebSdOwWLF3CP/ic//sdvWnAI

RuDWMtB3toDXYuAnU/CqJgAm9KDXBZDXtrLf///yH5BAEAAD8ALAAAAAANAA0AAA' +
                    

'Z3wJ+wAxP+FiqjkkY6vnBK48HkEwl6xo4UIUCUbEJLaMbhjEASTBrd+qUGgQGLQs8UIB6hb9Co+CsPOx9CCzEBDRmJCg8FPE

coJzU1BAQ1ERo7Gi4yExc8BgYMEQk3Dg4bSisJEAkADlFCDDkfF66wFgl5PzqoQk' +
                    'EAOwo=' +
                    '" />';

var influenceIcon = '<img src="' + 
                    

'data:image/gif;base64,R0lGODlhEAAQAOZiAOPt8dDg5sLU2gwODlhbXCstLbTJ0VhcXa66vtLg5ePu80dLTNXj6cra3s

vZ38DT2snX28vW2ubv8sfX3ePt8LHEzNbk8SMnKFRdYLnIztPh6A8PENvj5rTGzX' +
                    

'J7ftnn7ODs9rvP1tzp797q7+rx9MbV2dLd5JqrsdTh5xkcHNLh5+Tx9Nbh5s3b3t3q7qe5wWxydIaPk5KYmdvl6NTj6cXX3X

uGiu709svc4+Pv82BqbcLV3CgrLMHT2d3q9NDc4NHh7d7r8Mzb4Ts9PuXs78LQ0z' +
                    

'g/Qu33+cfP0uDr7rnK0N3o6q25vtbk6NHh5/D3+tPg5d3o7dfl7eTs79Tj5dbl6g0ODg8PDwsMDeTv89fm61FXWOHt7tfj59

He43uFicfY3bjM1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
                    

'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGIALAAAAAAQABAAAA

d9gGKCg4SFhoeIiYqLRkVgEw1hVAJSAUoLglZfNUsUFgYCXCsgJEktHlg6TT8RHE' +
                    

'APKCMvJllHUzMYAzE9XV4+OwBOGVFBTwAygzYaATQqCh8SDgk3MIVbVSFCIi4sJ0QEhwcQUAxaFUhDiTwlOTgdBYsXCEwpi4

IbV/b6+4EAOw==' +
                    '" />';

var closeButtonIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAAlwSFlzAA

ALEwAACxMBAJqcGAAAA2lJREFUOMu9VF9oW1UY/917zv3XJC7p0j4YFTTS2RJwrB' +
                    

'AGe9hgT0P6KlTX+DBh6WAi00otDhZlXcKwBspo+9i8+DSHvraQMlYznViVjuYhbWY3blNzk9zk3mubP/deH0buGoJuE/SDD8

453+/8zvedc74f8B8Y8zTAuXNnjxeLlUy1quPQITf6+nzs0TePvHrxg8tbz0WamJ' +
                    

'4KLqd/zDWbLbAsC4ZhwLKsE7csC5SyOH0qTD759Kr1j6Tl4n3mw0tfvLb9sJAjhIBSCkopCCEghDg40zRhmiZarRYCL/qHk1

/Gai/0vp5rx8lB0sJuJbj9sJDjOA6iKEIURfA8D57n0T6EEAKO45y5pv15/s7qD1' +
                    

'+vrf32qM3j1HQ9/lnP79s7OUEQIEmSQ0gpBcMwYJjHRbXHlFLwPA9RFFFUqpmvZmLHuzK1wTUIoRBFEYIgoF6vIxwOY3BwEC

srK8jn81AUBW63GyMjI9B1HYZhgGVZsCyL/AP5/Ww2G3MyTc5ccds2IAgCbNvG7u' +
                    

'4uNjc3kclkMDo6WolGo7BtG5IkIZFIYGhoCEtLS5BlGfV63bnzuRvXRCfTQOAl6Mb+ZcuyUCwWUSqVYFkWFEXB1taWNDU1hW

w2i0gkgmAwiEgkgr29Pei6jmazCUEQwPM8Go3mt3fv3pMpABQVtW6aJsrlMnRd7/' +
                    

'gey8vLWFxcRDwerwDA2NiYr1arOXFVVfE4sQBUVbsHgGEBoNFoQlVVGIbhlHLQ0+k0PB6PD4BvZ2enK65pGiqVCpot68nrM4

wNTdOcRzrofr8fs7OzmJ+fhyzLSKVSXRhBEKDrOjhKnpD2+b3HKKWQJKnLk8kkCo' +
                    

'UCUqkUpqenEQgEMDk52YXjOA79/d6TAEABIBwO/bp+P4eenp6OdhwfH8fAwACi0ShcLhdkWcbc3BwmJiawsbGB1dXVjvs/dv

SN7502fZS/I7z97sS+1+sDx3EOKBQKwTAM5PP5js2hUAgAsL6+7qxRSnDz5jdMR+' +
                    

'8nZ65wK7d/abhcrn8ld2+dOeF95+yFapegfPzRRY9a3asdFI9nsYWFhQ4e2iF5iet2PH71sFLSS+1ef5q98nL/8DPp6Xe3Fr

mf1nINy7L/lowQFrHY58xzK//t9C32wfYf4XJZy+jGPtwuEb29nuHIe+d/xv9tfw' +
                    'FATFKTqjXpOQAAAABJRU5ErkJggg==' +
                    '" />';

var updateGoodIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADaElEQVR42lWTX2gcVRTGvzv/di

bZmezOrLObmNrGVttKpLKWKGit+NLaB4sU8tAiRPDBFhUf+iBRKiKhvolQoQUtTf' +
                    

'8kuytRWzRUCqVYaggl2+oiphZTXKPtNknTpMnu/Llzx7MRH3Lh4zAP3++ee843DHSGhkuFqVr9BYbYA2N+QpM8x1R8XU94kq

ZT1b2krvkJRfF8HvkiijwWR35jaWmQNQFfnhkZO1SafjZmEiAxhFYSjZ6tMJgAEx' +
                    

'ECHkDwEHJI4hHUiGPgGRPJxemDK4Avhr79vXCdPyboKwaDLMtofXoLJElCJGLUI4G7YYT7AYfwSVQ/zSsQ1V/eXgEcOX129p

sbzCEHdFmCSsp0b0TC0CHiGB4Blghwm4z1kANBhE+eUnG3MrafDRdL0m0pFZybjG' +
                    

'S1ebMiQVNkuOsfgZm2/uuAzA/IPEO3/+OH8BshjvYYqJYvv9kE2FejzNzx6x6ycoyMocHUVeTW5JDrdNEg81w9wEw9xPSyjx

sk7oX4cWcqrl678kYTsOFSmL15fIrBqS/DSahIkpxMCu1r22mAAvfJcK8RoEZ1iq' +
                    

'qgemVHMvrr14nX2VDxq57vvNz4cE1H29IismS2mpBWA+lcBhIEnnMDLPgT8MI5xMwm2Gb0dYL/OVl5jRWKpZeH5t3R72cUaI

GHtKIglVBgaCpSTht6n5jDscmjELRShYbLaaCm3IL3N+0V83/c6WWFQnHfpXup0+' +
                    

'M1AZ/eu1Bv7lxAp430vdiB0fAIHB1IqYBKMelp34bnH34JBy4exscb+/rZ1yMj74Rh+FlM64qoYU3TEEsKtQuI9Q8wPn8Wds

JBLDzYRgZv5T/Cqd9GcPXOOWzLvPozK5fLXRSFrUIINwiCbOD73Zzz3SRpYc0tCs' +
                    

'9F9G4+hgu3ziCf245lruFUpR9dbRy28srsSpD+Pz+cP/+453mXVU11FVkB1i7i2uwAut092LmhfyVUAz/tgywmaB4m8g99UF

4FKJWK76mKethqs5BOpeFkbZSqB+g5N7EltxeR1I3K3/30v4GG/CR2dR56dxVg8M' +
                    

'SJdclk61jatnN22obR0gLZCnBh+kMKUgVcyFBYBDeZx/aOg6OMa7tXAZrn5OCgbVnWftM0dxiG8ShjTDOSiZqcWRTL4WyHqb

lVS2k/yUPxeVfHJv4vpD6OQ8IRFmYAAAAASUVORK5CYIIK' +
                    '" />';

var pausedMessageImage = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAAAaCAYAAACuJFCeAAAAAXNSR0IArs4c6QAAFUBJREFUeN

rtXHmUVcWd/uq+1/2abuimabohNIoedfQ4J4K4EI2OC1lm0FEmBh0wEkVFMo7GYH' +
                    

'I8QYUwrSGbtAnJETWEwTVEyWQCRGMSgyK7oiBi3Gh6ofd+3f2Wfsu9t77549V9r+59972GYDLnIHVOnV5q+9VXv6/qV1W/ug

LHw7CB5EIAVQAqAAQA2ABiAPoAdAohnjuO0vHgozezAIwHUANgJIAgAAvAEICoEO' +
                    

'KHokjhs1WhcgClSvEEAAnABJAAEBdC7PyYhD1XKXiZEhRK2KRq5/WjrP881Z8RAEKqjQAAQ0Wh/R5UfS5XZSrVzzKVbioC9g

JoB9AqhHjhGFemswCMUmMUAlCi4afrkVQTlKnGbkgI8donkHz/AuAEABMAjFXYBQ' +
                    

'EQQApAHEA8WKDwNABjAIxWBR1SCAVuWlUwSPKfhBCvHqWwFwGoVqtMuRpcqEEcUu1c9NcOJMmLtf44RCpVfTI8MaBiqco3Qs

k0Qv0Pqv9l6ncHzGNZmaaoWXyMmozKNRI6uEEpl0PAlJqkoyRnCCF+9wnjYLXCa6' +
                    

'xGwFJtYUkBSAYLFB4LYJwCvUopnwO2A24MQL9KO9rgzBKj1QyrK3ocwMBRtuPUryuQTsCAh4RBbRUMqVgKIc7xaOZaTdGO5V

Cl8KtTGI7SJrGARkAo/bDU2A0BiADoJ3mdEGLtJ4iAtSqOhRDXefTmTYWRlUdA0z' +
                    

'Q/b9t2bSAQGAegFnPmfA7PPvtpV6avfGU/nnxyq2PSkbxJCLH6KIQ9UZF9NIRY4BF2pRrw8qOsfyyAaghxa8FcZWUSNTVpTJ

0ax2239eGKK5KKiI655Q1jlKKZx7gyVaoZvRZC3F8wVyhko6YmhbPOGsAttxzANd' +
                    

'e0AogqAleSvFUI8fgnhIDjFQHHFFgdJQCZtwe0LOtaIcSJhmFMkKnUOGPChC8hHC5zZaqpSaGj408oKRkAEAYQFkIsITlfKa

RU5og3CJ89VqVa+aoBjIIQV3sI+L9qEPvVShhRM2tazbZ6W0Jb0Zz6q1TdGRNXiC' +
                    

'sOG8Jbb43iscci2VleiDqPbLvUQUw3gB6FRUztfSwlHzX5+LewED2/UzMFKYR4juSXtb2aE+kxGbNmkdq37dJM0H9X+5mJEO

LOw5Zszpw2PP30HjVmg9r4xVRbJgDbtm3pKKRt2zIUCv3KsqxZgUBA+Mit69Jfg4' +
                    

'+zT3WiLYT4H9XPf/Oxhrx1OXhJIcSvVblrlUVQofS5RlmQdQBqIMR5Hr3pceRwdaKnp+eKMWPGTAQwyTCMCXjiiTPx1a+e59

utX/7yPVx33SEN3JgyxcwiBNT3WSXKrKxQK2lmlRPiAo+w25xTI9VGXGvHIaC3DX' +
                    

'0PV6HqHgVgJIQ431N/CwADpimweXMIN95YjdbW3Gr36KNxzJ9vZYZcVHnKvqf6P6BiVMmX9iHg35KE8NQvPT+FjxLrSuiYjA

nVh4gi4StKwW5SVsSJEGKeB4OPFH4GXn01hBtvHIu2tpxl1djYhLvuala4OPgMKQ' +
                    

'JaUkrbMAxbSqnLQ8MwIKU0DMMQzs8jJF4hjLwTj65D+hmA4dOWi4AatiVqm+Ic2jmT/mg16Z/uwSziO4tYljVLCHGyQ0B+8Y

sXiZdeGgsAmDTJhBACBw9mwL3yyijWr29SYDqkcBSvGAGFRkD9oKMMQAhCnOER9i' +
                    

'/azJxQP3UFL0TAoM9BSghC/IOn/l4X2Bs3luDKK0dm0889V2LXrqQiYLmnbJtzGqxhkNQmh/8vAurk060D4aNIlnZiGVOTaR

jAoBBigyLgAgCTFAHneDBo107IgfXrS3DVVdXZ9MmTk3jrrQ8945dyxlBm2OWMo5' +
                    

'RS0iEgACGlzK6Azv8+RnxsjfTeBaIYAaUPaUMaCR0iVqhFZaIHs+yZQdDH1q8CUMWOjjHYtKkmm3LDDSkIIdDQkCnz0ksj0d

tbjbFjy1Rj6aziCXGhp8HNWQUQ4rOetP0ASiDEab6w5RNyT7ad7dvL8NBD47FjRy' +
                    

'W6u0Mggbq6NC64IIq77+7GtGmWRvRS7XTVtXNxAX3ppW7Q333XKLD/gyJ2ZrXdvr0aTz5Zji1bynHgQBnicQMjRkjU1ydw2W

X9WLy4DRMmmACIyZOnYO/e3Go6b14rVq06kP170aKJWLbslOzfZ5wRxbvv7na1vH' +
                    

'fvCPzwh/XYsmU0OjvLYFkCtbUpXHJJGEuWtOD00xMeAgJCfM6D5Xo0NNTjiSdOQmtrJdLpAKS8TxEkpeUManthb9CvqAQuv9

yd+sEHIQCV2L59NJ5+egQ2bx6BAwdCDj6Gg8/997egvj5lGAZJOqavMAKByz0yv6' +
                    

'L155KCaQDws5/VYc2a8Xj//ZGIxYIIhWycdNIQLrxwAHPnduLiiyO+W5g9e8rxox+diC1bqn2wbVbYugmYTpdg8eIT8cwzde

jqKkV9vYVbb03gnnv8zgcCeeS2LGumbdsLbdteIaX8DR944AABEiANg2xqGmBTU4' +
                    

'SGwez/GxujJNtJtpBsIvkhyfez6U4k31XxLz5pbSQ78v5fKJIHSX7ExsYuBoOyYL5gUPLhh3uz9ZM9JMM+9cVdMRYbcqVXVJ

BkimTKp2yEZJhk97Byjxtn8sCBD0i+w7VrW1xpEyakSb6TjRdfHHWlNza2u9JXrm' +
                    

'xjKFS47yNHWtyw4QDJvST3ZKM33+zZ7T59WkLya2pf4xDhTpIPkXzeJ3+Y5CDJKMkoYzG37OXlkmTPsPjU1aX50Ud/kVK+re

TeK6V826e9HA7F0u6/v/MwdGkPybdc8ZFHWg4D2480XPeSfIdXXx3xzT9vXtqnXd' +
                    

'OJOgHn2rb9Hdu2/1tK+Qd55plxp4C85BJTKVuMl15qZSs6+2yLZD/JPpLdJDvzyCSEQ7JDJA/5CNOn6oiQjPqkx1TagBrsHm

7aFHZNBJ/+dJpNTV1sbu7iWWelXRPHq68OqrIZ+fPrH1IxQ8CNGxOu9HPPtUkmSS' +
                    

'YLlM3IN326yeeei7Cjo5em2cW2ti4uWOBu74YbYiTbaNttPOMM98Bs3txNso2JxCGWlUltwCUHB9tItpJs5datXQwEcuXq6y

3u3t3Jzs5DPP/8nIxVVTZbW9tINqtJ66CvMv3kJ/vZ2/sCySdJNpL8Nsmb1YGEQ8' +
                    

'A7FAHX+WAwkB07MpaH3znnWCQHOH26yeefj7Kjo28YfFpcMV+XWrMxX5Zc2vjxlitt3boeJpNtbG09xFWrejltWtKFDXmQW7

a0+2Dbwc7OtiLYtvCpp/pcbU2ebLG5Ocrm5jinTLF95LScmLu8se07bdtulFKuk9' +
                    

'u3v+kqsHp1XCnaENescSvO3r1DagAcRe93pQcCDsnCBVagqFL+IZIJn/SERpAoyQivusotw4YN0Wz9Gza4SXz11aaSPdOG/w

oYo2lG+MorMU6a5AbssceSRcomlXxxbaLI4TA0NODKP3GinZVz9Wq38t1xR4JkmC' +
                    

'++GPHMoEmSvdk4c6Z7JV61KppN27TJ3d5ddw2piTEzOXrlf/jhJinln0mus237UZL/Zdv27SRnkfyCRsD/IPmjIivgAE1zkK

+8Ei+AX0SLOj79Pvj0uGK+LuWwyJcll1ZS4k5bvjzGffv6mU73etrozsaZM5NHiG' +
                    

'0PyV5On+7Wx40bHX1N8He/Sw9LQMuybjZNc6llWaullL+Xt9zSlc08apRkLBbJEjAWS7CyUhfE1BQwlreKZUCLFFnhcuTzX2

WSmqJnOlZb6zYRwuFY1gQKh2Me00Zqq1zisE1dgJw/f4i23ZtdoYvJ9tprSc6ebf' +
                    

'LUUyXLyzOztTd/SQmzOJlmjCedJDXlk7TtGL/5TfeA7dwZ1xR3kHV17r63tubS4vFBV9qZZ9pZZSf78uTp7HyD5Au2ba+xbf

t7ytS8luR0jyfMbSR/QPJXR4TfbbcladsDJAe5eXOcs2ebPOUUexh8BqWUg1LKTJ' +
                    

'8K61KkwJYgE88+2/KVKRQiL7rI5Jo1cYVNLh45tpm0MWO8+pjI6nM47Ld1STsx40uVSt1rWdZPpZTrZDK5WdbUmIcNcl2dZD

qt76NiPqBFsyZKYQIWWwETLlMxGHTnsayYS7HzBzUnX7G+hEKSEyemOXPmIDdubF' +
                    

'V72ma1z+0paL4+80zKZRIX33fkBmfFCtNjhqY4eXJuBZk61c5Oao5iefteLGb2X4NZ8z1fllellM/btv1j27a/WcQV7WaS3y

X57LD4nXCCyS99KcYXX+zJ7r2ffjp2BPhECpLMrUvRAtZUJm7bFue4cbJoW0uXul' +
                    

'fnI8c2s6joZmtGH3OLimkmik3cwaGhoQYhRJWUcgyAkWLt2nFGX1/wsA93u7sFNm4UmDnT8k2XMncEHIn45bCHOVq2847vq6

uJnp5cmWiUGD2a6nd3XdXV9K0jp13NmjtZUrvHNDRXtBGa76fr7AqAwNKlIdVP5+' +
                    

'4rhQULLJSUAMFghY8zQibefDPR0AB0dzundkHs3WtojgCm50ohv+/FwtCQ8Byd5+UQQkRI9kcike4iNZla9OL3gXad4VxBBV

ynz9/5zmgPPgksWGAqfCqLXJwX0yVR9NL9M5+x8dFHcfz2twFs2RLAe+8Z2L49gF' +
                    

'gsV27lyhIsXpwsqFeHhy1RVUWEw159lOp3owCeAEAjGAzWGoYxxjCMUQDKxFNP1bqyvvxyD8gOkJ0gu0B2o6mpD4ZW7y9+Ed

CuIUyEQvoAAYODmbumN97wU4K0duyddtWbAT3tqhtIY9o0tyJs3cps2tat7jYyeV' +
                    

'M+R+tOiChvli4AhwC0AGhWP9uUl0tY3Y95Q6bOAwfcQs+fn0BZmYn9+2XRy+ARI4A777Q15wYD6ggeI0cS11/v3Jelszidf3

7ac8zfD7JPi2EVM3/ruOWvbHEpZRTAQHV19ROHQcBC+PUrnDqQeR3SrvAMA4igqS' +
                    

'ngwSeOsrI09u+3C+hDLpaW0qVLAwNmEV0yXbGiIo3ZsxP46U9j+MMfBrF//wDcnieGK//555vDYKvH3qyMU6Z49VFm07Zt8+

tj9k7U0JyTS9DeXoo//zl3P3XyyWlcdtmAuqCNKU+GKE46aRAXX5xzQH7xxRJ0d6' +
                    

'fUpfwQTjnFLdDPfy7Q15fC/feH/OYSLcZRW+sW+I9/tD15Eli4cBBCm6gWLQqhuTmN1tY07r03t1IZBrBwYb/mLOD3aiGslO

cQgIMAPgTwgfp5UJGwSymZv+zjxrllXrsWCIfTWLiwtMCKnrskv/12icrK/FzXXp' +
                    

'vGqFEJ7aI/Mwbf+EbY1fc5c8qxa5cJ00wgEkli504Ty5YZmDx5lAe3ofwrVhE1DCNiGEZkmPne1JwhvKFfw69ZYdas/s6QsL

bW9HhRAeFwEgsX+jnYJ1zx1FPdltWqVQb6+pIFdClX7rzzRmLFCgP79plIJBKIx5' +
                    

'N44QX36lpfb2l6Ec/D9vrrK7Brl6Vha2HZsoDCNtfWTTdFXfUuWhRCS0sKLS0pLFrkJ2c8O6aWZT1rWdY6KeUGed9977ls1W

9/u5XkTpI7SG5XcQfJXXz88SZX3gcf7CC5j+Q7bGxs97Wbb7jBbx/ytop7Sb7N+f' +
                    

'N7iuwPcvc83/9+OwOBwjZ+ICD5gx8c0u7C3iL5pk+dz5F8hOTSAvufpSr9uQL3SG/zgQf87zFnzYoUODWMZE/JyCS/9a38A4

MdO7rUHnQfyd0kd6mxeJ3LlrUU7XuurX0K2z0kd/uk/5jkt9TDURTZA/4rydtJLv' +
                    

'Op4xmFz3c9ZR4kuZLkc7z33nd95bvmmv4C+rA3G5cvbzsCXSp8R+iNhkE+8khL3j3g977XdpjYuuWcMWPAN9+cOX5yvknyDZ

KvC8uyHhdClAAoFaeeOkM0NVVljFODeP/9l8UppyQ0typnDxPE0FApxo+/HNFoxj' +
                    

'vitNNieP/917P7uSVL6rFqVT26uspQV5fEjTe2o6GhDYGA13vhZZftnkgEcM89k7BhQx3a20cglTK0vO53h1u2VGD58nps31

6F3t5Q1lF82rRB3H13Ky66KOrxdCCE+IKn/RXKkbpLCPGYj/LNz3q2C/GfnsQ/Zd' +
                    

'2XGhrq8eijmf6OHZvGl7/cg4ce6kAo5HXE7UDuKVTG5enllwOYPj2kuW+l8dZbBzTLY0itQsy62W3dOhrLl5+InTur0d0dgm

UZqKw0cfLJQ7jggkHMmdODCy+Mudyu8vu+FIfxoJjk5wDUA/gUhFjmSWxUq2CvEO' +
                    

'IR/eQ0+xwHqMZ9952F1atPQ3d3OWpqUrjmmk40Nh5EKHRpUX0ABJYsOQGrVk08DF3K6ce2bRV45pmx2Lq1Ck1NFRgcDCIQIG

pq0pgyJYI77mjFjBn9vp4wW7dWorFxInbsGO2L7ezZ3fjsZ6MuOVMpA4sWTcKzz3' +
                    

'4KPT0hjBuXwty5HWhoaEUw6JXz9w6nhG3bDdqGuUQphqH87qicZU21waZSuBItBop4rB+pz6LQXjTodR2p57ufQ7Ke5jwqHl

J7ux4A3UKI9X6zv/Jqr0XusxTeF/XCR/aAdhih+whWaIc6mToaGkJYvDhHwIcf7s' +
                    

'DXv96szON+tc9KKdmDRbD3YkXPIYzudB1R9Xch81mN14oQ8ALl3V+rHIzLkfs0R1zJ2CeE+I1W5krkHqM6D6GLvaTH30Afht

M7qfnrQhs3w6fNQvrlJ+fhjIMNwAqSbBZClBiGUSKlLDEMQ39gKQ3DcAbNFEI8qh' +
                    

'xz8wj7VxLQz2vfGKYzR1K39HEMd9IcB2TnqVNfoXNeBVZSkXWE5v8Y8Hlp4P20hXOK6vjZjgZgQ0oiHC7Dpk0BrFhRoj31sj

BvXpt2MNQlhFiklPprmpN56REQUHc+dvod10g4OAyuUTXWUk1azqc5LEVm56mRvr' +
                    

'/cQPLzKv+AZ+IyChDw49aHj+M1RLFJYjg5UcAB3BkHUwCAaZr/rMzQIIBAIBAQtm0jEAhkveV1E0V976K0yCyMAkIM925tls

+MdzhvwIrVLYUQz5O8xpPHedk/BCAmhNhdZAWYityj4GKrn5eEQaWsI+E8aHUeae' +
                    

'7ZU4spU07Na2zVqg8xb94HADrVQcYhIcRKTZYZw6yAxZTO1lZ/51MaUSHE28NqLvmPyH1TR/86gvPNnjcLlLsQuW/9lBaR+e

PUh2LXGnlk8HkPOJyMRyqn3wpoCSHWH83bquPhSKdfsgHApwCMw+7dE3DOOVMz7z' +
                    

'FCxOmnJ3D33a2YO/egdqrYou+rjodjLwSPQ/B3De3ZmXLqVAlyALnv3zgfoMruy9TP4+E4AY+Hjyl0aearrfZPpYqUzgeowt

re79fHITu2w3ET9O9vhs5RZqj3U3UOAfsU+dYcR+vYD/8HshtVUk4+/YMAAAAASU' +
                    'VORK5CYII=' +
                    '" />';

var experienceIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQAOZyAAABAQBAUAARFQAFBgAUGQANEHvl/wMJCwBIWwBLXgAZIABLXQArNAUOED

/Z/0Ta/wAbIgBDVAArNSnX/wB5lwBedUrb/xHQ/wB4lgYQEwA3RQTC8gCEpgCy3h' +
                    

'PE8Ifm/wBgeBZ+lYbn/wAvOyhSXAC/7wBfdwCPsyU6QFOSogAiKinU/wDG+ABbcgAGCCTT/wTO/wGbwkDZ/3nk/wDC8gMFBV

/h/znY/wARFjHV/16Pmyx2iAAKDAAKDQBJWwAICgBmfxU4QAEDBEfK6gCiywA7SQ' +
                    

'BngRFEUQ3P/yXE6SE8QgB0kgOjyy7X/xjR/yg7QB0uMhxCSxU9RxtvhAI6SA7Q/3nM4QBuigB6mRc4QAo3QQBiewA0QQKfx0

nb/wB3lQUSFQBlfwGgyAONsAACAwCWvSk7QAAqNRrR/QTB8RvO+1Pc/wIJCwjQ/x' +
                    

'rL+AA8SwidwgCFqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAHIALAAAAAAQABAAAA

eagHKCg3INGYSIiCQ7iY1yKUNCjoQ1VhZUk4NQIl5jiWBRSihPZjozD25HWUFaRQ' +
                    

'QHUzI2Bh8GazkvTRMeXRUFgiNMajcOK05IG2UgKogFSywXVTAlJwg4jnBtNB1EWFyObElpcVcYFGE8jVJoHAEMPkZfGo0hMQ

ECcgILQCYAiGRiEvQY9ONNCwiIJGxxkehMBH+DFAxwRGBiIAA7Cg==' +
                    '" />';

var badIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADW0lEQVR42l2TW2gUVxzGv7Nz2y

S7m2xMNpusuWxq3EKLfSsJjVDEtlgLIuQiWJGKF4qlVFpL2bRpDN2l1FYRxZcGBL' +
                    

'VaDaIkD5XapIJIQl+KNj4ktFm7ZrOX7H1mNzszOzM9O9G09j8cGGbO9zvn+18I/hfhUMjLctxBXhC2EV33GoYBg5BQaXV1Wl

Xksc7NvtB/95NnL08eP2ZYhhnlCtLxJ1cucisz9yGnk+Y/oX4DGnt64dmzVy1yws' +
                    

'myrg9v8vm0dcBSOMzwPD8u3bm9e+HcaVid9WAF6zrdoKssl1DKpNF19CNwW1+/qShKfwVi7kksLweKUz/7F8+fQbWrCbzNDr

0g/QugBIvNBkUSUUjE0fn+hyA9vcGOrq4hEo1EvNaCNP9g3yBnc7vhenMH3O/ux9' +
                    

'8jn0NZ/GvNwgub0P7lV4hcuoDknduQYjG8dOGyKrKcj6SSyUD67Hf+/G+zqKpvQNf578E6alEW84gOD4EQguYTATB2O7WQwd

yh/SBFCY5Xu1H13pEgEfP5mfDAO91cTTU1SlDV2UkFQSpwQKMQQh8LFcvZLB4e+w' +
                    

'C1mRTA0K2FIlwXx2eJmM3Gwm+91uTwbYQmGdCTUTDtLWg59yO9SZ1poSJ+cHgPGmPLsDQ0w1JDIC4swT0xFScSBSxRQM2LHm

jpRWh5CcLmLXB/ew3MU4CSyyL+ySDUhYf0mx2M0wtpPgLX5DQFSNJMvO/tbsYiQp' +
                    

'ejsG55Ga7R62BsTvNkmgLwtXXUTgaxLwag/DEHi9AMTbej7vKNWZLNZALymW/84sQlMM02tF65T0+pN8Vzn/ajpVGD67MbNC

dOlHNp/DnQCzYhwr5rH4xDR4NkJZHwVou5+ejgGxwsMux9e+E46MfcMeo5/7tpgW' +
                    

'17BU0nruHR6a9hnfwBLHi4rv6k5nirz+yVbCoVwK8T/pUALRtnYJVeuUbP0O552kk6TSTrBEnmwNAGbhgKQO7eHnS3tg6tdW

I8xgiCMG7cvbU7dWoEel41QZVymUFFhkrLaeOw4eMRqD07bpbkUn9re4e2PkwVCM' +
                    

'9xo7yUOl6cHOOK935BORZZs+D2oHrrdlh3HlCLguOkopaHN7a1ac9N47NI0pxUxpmubdDK3sogGBYmRIdnWpXlMbfH89w4/w

Ni4WxKCJsyDQAAAABJRU5ErkJgggo=' +
                    '" />';

var pauseIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADEUlEQVR42l1TW08TQRg92+7sFl

qwFZCL0LBCRV8Eg1wMmhiMGmOMQYNPxsSEv+ALJjyQwIt/wcTE+EYUTLwbeUADCK' +
                    

'J4SbRyL1ZYytLSLe1eW2cHIeqXTHY3O3PmnO87h8N/tbS0JBGedAmi0E4/pVwuB7oWNE0bNgzjTm1t7cLf+7mdl0gk4uZ5vh

cu982pr2EyH4kilU6zf778fEjBChw9HDItQ79tWVZPKBSydwF+Li+7BUEciMjrHW' +
                    

'8mp1FY4IMoCHC5XPRvDtlsDpquI5nawolj9Sj1+wYpm04HhAHIstz3az3RPfn5G4oCfhBCwLvdFGCboANg2RYMw4QST6DpyG

EEvGK/JEm3uJWVFYkXxPCzkXekOBCAKAoQCA+epwCc6w9AFqZlwzBN6LqB2EYcZ9' +
                    

'sazcxWqo5TFKVvPrrWrSRUFHjzKQDB95k5/FqV0dLYwFROfJhGWUkxDh0MUSkG1K00ivwFqAj4+jk1qY59mlls9eZ5qFq6ne

MwOvEeM3MLOHf6FGvSi+ER1FRXoa21GX+mgnRGw6Fg2Tinqurql9lIaclePzKajg' +
                    

'xt1tvRcczOzePC+bOMwdPnL3FAqsbJtuPwiCLyqMzYRgJ1wTKZAqRWvy9GSwN7fKxZDr1Xr4cRDv/AlcsdrAcPBodQR+mfOd

3OZDos45sqaipKZC6VSo3NLMutHoGwrgt0Ao8eP8HUx2ncuH6NAdy9dx+NDfW4dP' +
                    

'ECdDqJLJXgPIMl/nEukUj0Kcl0d5LeLNLDzgTGJyaZhKuXL7G+DDwcQm1NDVqam9gkDNNiTLw8+rlYLCaJnrxweClKHABCAQ

j1gNtZru0x2nSMlm2DOhAGXbphIVRVZqrJzTrmlHg83qdZ2e6orGx7gAG4mNYdI+' +
                    

'2AOAz27ysCZ5v95eXlt9iONVl2ix7PQMawOqJrCrOwc/suQC7HzGTbWXbYDXtQ17TOqmDQ3g2TA0IEoZcnwk1lUyWb6hZzn1

OEunKPz4tAodfUM5nbhmn0VFZW2v+kcaecntAsdNFk7saZ1gIND4szpf1PnH8DjE' +
                    'h/b2bB2sAAAAAASUVORK5CYIIK' +
                    '" />';

var defenseIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhDQANANU/AFFzrH2m60V0ukhrpazH/CQ0TYuv8U19yVeK3Cc7Wl+Q4F2O3S1MfFCAzB

gdJRsjMjtinj9loVp4r22a52aFvzlPdIGYwk2AzneUzVN/x2iDt8ja/ZS29mOAtT' +
                    

'9dj9Pi/jFShI6hxHef6G2Nx0VdiDlLaePs/rrR/SxEaaWwxYCh4lWH1198slqJ1mN5oqLA93uSv05ihUJkm0JusF+IyzRdm2

2b6DdfnGWV5HSg7YKq9Hul8Iiv+K/J/M3e/v///yH5BAEAAD8ALAAAAAANAA0AAA' +
                    

'Z4wJTp4ysaiwRMaHPqOZ9OlcZC4PCu2OuoA3txdOAwmMJycQy7tHonkkhiBkNuTs/hAKRSIDCx+f0TNAAVDjiGh4YKAAMFPx

4tCwqSCgsZAzI/Pw8HDSsInw0REQmZPygzAgcXAhAQDKWZCTezswwOsJkPDDUgja' +
                    'VBADsK' +
                    '" />';

var staminaIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQANU/ANVbbJmZmkVHRikpKVV5Wq2fnux4itCxt8fIx76WnBYWFjU1NYyNjaVweJ

OSlNxqdysVF3t6fgcGBnR0daOhp76/vnZze7lcZOaMmq6Bh7KtrpN8hIJCSaCXmI' +
                    

'GFi6qurmVjYm1jZGhpapOLjHRoa1EpLnJvdt9KUeyQoZ+foLKJkeBpfE5QUO/w8FRJTOJTXpSVmudVZNHR0sdkb91wfICAgI

R0d7t3g2VeZamnq7NWXPJugGRWXH9BR4BfXAAAACH5BAEAAD8ALAAAAAAQABAAAA' +
                    

'aJwJ9wSCwaj0OJUFBTiByBQIohWAxSFeEA8SFUWjJExOKBRSZCBYlAGBU6HQvFQclFhJtXiMVAaDQmA0UDADsJAiA8LjgBCk

UJJzE+IgsiCgMTSkMDNAYABJcDCgQOmkI2KwYNggsCLI5FGQ8oKrCmRTcPGAe3Rw' +
                    '0XM7xIQyU9HDrDQxDLvcnOQkEAOwo=' +
                    '" />';

var huhIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADW0lEQVR42l2Te0xTVxzHv+f2Pn

iMlQpLAaXY8oxhg5FIXNjQNHGSOTFN6EzmH8THZqJuzixspnUs0wGLxkf2yIIxZn' +
                    

'843IaOTM3mNCE4fCaii84QTKAWJrTYUqBl13tv7707PUaHO8lJzuv3Ob/vL78vwf9GIBB0CgK/WZIkt2GaTtMECMyALMu9qq

odLSsrCcx/T54sgsGgheP4PQkZLce7B4TL1wOYmkqwuwULMlFX68LbTdWayCf3G7' +
                    

'reWl5eqj8FjI6OWURR7P7tj/uew50XYaMBQpoA88kvdKEpGqan5rDj3XqsqM3vUVXVm4IwwPhEqO3cpVHfoWP9yLFbsajAhu

Y1VSh15MDCEYwEo+jquYl7oRlEwjP4YOOrqK95ob20xOUnDx6MO+MKN9T43gkhJy' +
                    

'8bz2dn4MSnjbBlpT1TG01LYlNLN4YTjxCdmMbJQ15NIko5iUQibZ8fv+XrvRUEny6huaES76+tZkF7v+lFPEPCvg11bP9913

Uc7L8HXVbhrnZgh6einczOzl6t9f26LEPiAVXFYpp+cUE2JN6Cb3++iXc8L6NjfS' +
                    

'0DfHXkIr67Mw5IImQlib5P3NdIbGY25Np52u502WFMz+Dv6BwicxpAtfs9VdjrrQEhBAN/jsF74AKstEaczYrAcAiDXzSEHw

M+PGMvcuVh+OE/iEenAV1HXUUe+v2vs+BzfUN4q/MK4oKArFwrinMzERyZwGAHBS' +
                    

'QSias1rb8viwtpmEiogIVKod3TvHQhWt+oYKmv/OgXjGRksqyQ1JGfJSJLlXHZt4JKiMXafCfv+joHQjAIRwEWNpeX5uIVh5

UBjp0fwiRHzw2DZceZBrbU2OFfXdxOJicfOqMKGar67IKg8gL9hT7kOHQ0LsGulS' +
                    

'UMULXlR9wW0x8DDB2ipmFgt1t7jjwqZ40UnYq1/XAj5Nv2022AVh80k49XlWHra04GaNh1GoO8RKVRAO2Hr9e9hLVLstsLFx

X4GSAcDltESeruuhH27Dx1B6qRchCZZxWT1UWk24NNL6Kp0tajKIq3qMihPzVTCs' +
                    

'IL4p5J2Wz5su++cPavEMZiMrsrtKXjzUo7ttcXaTZe35/U1FaHo/A/M80fqZqk7CwIglvTTabBQswAtXKvoqpHFxbkP2Pnfw

FXFV5DkrUSVwAAAABJRU5ErkJgggo=' +
                    '" />';

var updateBadIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADcElEQVR42lWSa2gcVRiG3zO3ne

nOTHZ2N3uRxrZaK8WAVWsqSKOIEItoqAWlrYKiQiJWiwhKQPFSafWHIlhRsKUp7W' +
                    

'Z3a2yUukR/haYlaYtrNVTSC0HXxbCXpJt2L3M949mIP/LBy8vAvM855/s+AlapkWx6rtTsJfBNEGIFJM6MaIIlywGTk2Tmsq

nKkhUQBNNyPYt6nkl8z2rV68OkDTh0fHTq3WzxAZ9wAEfg6CpaPZuhEApCPdiuDe' +
                    

'o64B0m14Poufhoiwb1RvHNZcA3qbEr6YvuHZR9+SDgeR7B++4Gx3HwqI+mR1F2PNRsF9RiYv7ZvQJo4fc9y4Avjn1fPXmZRF

gCMs9BZIp234mAIoP6PkwGqDPAPAs2HRewPRzYJKI8MzVIRjJZbp4L2T/MerzYPl' +
                    

'ngIAk8YrffCs3Q/7sBC99k4Qo7/R/LgdVy8FWPgkJ+cqANCF/woguHL5qI8z6iigRNFpHoSiCxOoYWCy80bVSaDooNC5eZXN

PB6cdCfuHXsy+1AesnnPjVw3MEkWYDkYAIlSkSDSG5JskaSFFjgcWWjRLzOeaU+d' +
                    

'k+1fv70i8vkFTmRM8pM3FupCSjo34DcRbW25CgAiMRBQeKRwwLG66cQXCpjLIWw8+xe7BrDXH/mp15jqQz2W2p67HcjxUBkm

3CEASEAgIUSUQo0oGh6DyErz8GRyk41lzKGupLEjpfeZ3OVipPk3Q6s3tiMXTsXI' +
                    

'nCYu9darZnTiGziQw8mMRDx99H8vEnlgFL4zmEt+9Aq1ZD9cxp6K/uHSLfjY6+5jjO5z4bl8cuLDG6zwlgz8T9jQr8sTQi25

5E58uDaJyfRrBnC65+sh/e9CSkHTt/I/l8fh1bhc2U0pht23Hbsrpd1+1n4u669g' +
                    

'f86Rzc4p/o/PAg1K19KOdGUT/wFsTVa+H19leXF+n/+ml8fINpmpOiJMYEXsDGagnOoX3o2P0sjOeHUJ04iejDT6H65RDq34

4hMPBOfgUgm828LQrifr1DhxEykDBCsAafgdK7FTfZNIQLKQQffRGLhRrkSzOQ3/' +
                    

't07wrA8JEja1U1OGWEw4mwEYayahUijetofLAHznwR4NlPbJPFrnUIvrEvZyta/wpAu44OD4d1XR/UNK1PUZTbCCGSKgml5M

I16i9UbuGj8QK6Nh51PP9gvHuT+y+285cc/rnNdQAAAABJRU5ErkJgggo=' +
                    '" />';

var processIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADhklEQVR42nVTbWxTZRQ+7/3qvb

e77W1X0q7r1i0q/KCMtQsdDscSidkH1GEd/tAtmkwHw0Wz6B+dwcQsmiEyBzMm6D' +
                    

'aSZcHIDGNCXIjRoWFKYjrBNoyW6Uqh7b3Yfdkv6Mf13RINBjnJ++PkPec55zznOQgeYoPHjzkZhjHlcjlf58FX5x8Wh+53Ro

Y+30aSVJei5Ns1Wu14SWlpc8DvfyORSJzZYNhwKJ6I97zQ2hb+X4B33n6rwPV0c2' +
                    

'izzSae+3qyWxTFequ1rGFu7loPRdNVDE27s9nsd7v3uHY9ADB4bKBJpWI9Gq2mbe8z7sOyJClrf3lFgbvptBJbjEEmk1XuyF

JNKpnMEASZf7619dd1gP6PjphqduzwcxwPweDCdG3tThduFTL3MoAIjI+h1nzMRU' +
                    

'aW5EmSJPYmk0lPNBKpfrljv4I+7Our2FKxZczuqLKp1WqQZRlEUQs3AjckRVH8hQZDFUWS/BpINBoFgiDgr5XVc6HQzbau11

5fRgP9R0VB0NBGk2nCbrfXkBQFsx7P+UQi3vJsy770xUs/WAp1+kscz5XeXpZASW' +
                    

'UvRhflAyvR2K2O9v1xNH76yyWj0Sjq9YXAcRyw+F29csXR0Ng4uzbj996Z7rPhmb6pm5fprJIHhqCgqaQa6tCmKddTuxvR2Y

kzS7hNTLoIQoEAPB7j+tw1xxO1O2d/CvyyZ8D/1WQwEUICA0BjSgx8EVQUVoJPDu' +
                    

'SfM9btQp8MHhdxIl1WXjZhNJpqdHo95kE6n7ybbIlwsQsnAiO1Fp4FgaaAxtUPVvbArfgSvHv5feh89KVv0MnhoQpzcfGYim

VtLMuCxVICeOcQjoQlH/pZH0l9Sz9u6YTphdPgND8JjqIGeG/mTShRx8DINEloZG' +
                    

'jIhKv7EVqXxLTZXOyiMQDCbP+WnobfV4bBtfEIiKwVCmgtDHsH4M7KKeAZFh4ROhfWs8ZGR5vwnj2CRmgrMpsP8xyviDoR5f

kMnPS6QUUqsG/zCUjmNPDFVTdwVA4yigbc5Z9+9q+UP+jtLXBu3x4iSEKMhMPdOp' +
                    

'2ufpuzusG3egF+DPUCgQgAwooFdR1Hs1BXeuhPPVHueOCYsO67UqlUOz6e8Uq7vfmP4PyocRNnD6xO2ZbTIdCxZbBRW++hFP

WLj5m3ev8DcL993H/USVGUSaVifK90HJiXF29vRYiwZHP3gkUGq/efuL8BeLNcQJ' +
                    'E3FaMAAAAASUVORK5CYIIK' +
                    '" />';

var energyPackIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhGAAYAOZ/AFcqAO96APLpzPXHMv3012g2AIZRAvniksS3nue6RHZCAPvoqfjXa9KdAO

9pAPO+EbCJKePXw51oAbGVZS8oD2FbR/767NurF/bSXe+UAPPELdOsQ++HANC/q6' +
                    

'2PTQwIAufEV3JbErF8AOW9N49hIfTBG/bZeNvEiubTl/TEJvzsu/DLUtW9cKVyAaJ3MLiEAtq5VfXcjcZ4MbyJAOKtAdmlAO

65Dd2oAPn4+PXLP/K/FSUUAO2+ItaiAPLu6+u2CXRoP+PJeOfJZvzwysqVAO/JS6' +
                    

'NuBEUdAP745v39/f778LWAAOvm4at2APDFQfG8EOaxBMSRAPXy8O9fAKRyDjcyIbSBC////++kALOEGtvMt+izBuK2MOXbt+

3iyZ5uG/n39t+tDPHPX+3ALfCjDLOlduvGTcCNAPbhnMueD1hKHd3AZNVNAMKFI+' +
                    

'OyD++6AOXPhr+njN3SybiGDO/IAI1gAP734fC+Gs+gH6J8AO+sAOPATevSf+Pa0uG0IQAAACH5BAEAAH8ALAAAAAAYABgAAA

f/gH+Cg38fVUBlKHATQFUfhJCDHxURFkqXFkgEC2tqj5GCFAgWFpsYAzkmC0NDBx' +
                    

'AUoFUCSUMrbjc9uTU1F2sofH6whBQCSjE8NTNNEszNLTMsQls7kghKB3c3SxFX3d7eJ0FOeZ8VBAQDP0Qu3Q5T71NsOBEvCS

ZpAIVdFgw6NEtxrshwQPAdDikkXoQxwaWFITsEcthoIEFKkgABHGTEkeSIgRc3Vp' +
                    

'gRsQOInQUpoMyYkEQGB4wBuiWZ6aXHGDEiAHiwYOJJjRZyrmTgQPQlxita5tS4w2BJgT0WMEyEcKVNhqtDiV5BYIQIFB0YRC

gYYYfBxBNXcKhNgPVKHCMN7KA8KVHESAEIBA7woEFEQoEkOLBgIZNkQpMGW57oSM' +
                    

'GlzpEQKlSkuyH2ihM9V8B4ENHjx5MHDzRcMLCDAgMVGPy96MDkzRUfLqx0/vyghAYrBT58SHMATYobTXzQucLExYwbnkE/SD

EawCMAI9BgAN6tz5czN2zQrs2jBQBqhepsiJHgTJIIVKLQ0A5aRwkeuI98+rOjxY' +
                    

'YgMNJEabD+gfsSKcBXgHOQ7FBHFjAIAYITGqSQwgADiGYEAARGskMBBkCwAQhiiFEEF3hQoQAA8oEiyAc7AFCAAga0OCCFO8

xnYiEoHkHhETHKOEggADsK' +
                    '" />';

var energyIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhDQANANU/AEs+IPfHHj0zIPesHveqHmhPIPfCHvfAHi8uIfexHve4HktEIPe9HvfEHv

e7HveoHvfFHiAiIWhZIPeuHiAgIS8wIdqfHqGBH/fWHvfiHve6HlpWIMyYH/fJHv' +
                    

'e3HsyXH+nGHr6SH/fbHj05IOmfHoV0H/ezHlpEIFpPIK+hH/fMHve0Hsy0H9q0HmhUIKGSH6GWH/fKHvfUHvevHtqqHve5Hv

fPHvepHvfIHve+Hve2HoV9Hz0xIGhYIEs9IP///yH5BAEAAD8ALAAAAAANAA0AAA' +
                    

'ZgwJ+wMCDcHg8ST8i0JGaT4okpdCl0K1OiQBXSGA6NggMA+ATCXsNwOIBrng/61+oEIOtDLkRhLhYoMTh3F11CJTY2KhKGPw

gYMiAjjT8vIiwIlBUZKRGUPzA7n0Iboz9BADsK' +
                    '" />';

var killedMobsterIcon = '<img src="' +
                    

'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofH

h0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgND' +
                    

'RgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAoACkDASIAAhEBA

xEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEA' +
                    

'wUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdIS

UpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp' +
                    

'6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA

AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhc' +
                    

'RMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3e

Hl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0' +
                    

'tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDy3UJ501CVUmkVRjADEDoKtGzvRawSR3UssspH7lFYt

gqGzn0AZc9PvDrzirfrnUJfXj+QrXgvotRN1CYB9mWKWVo/PchGEeE4BA4IQcg9K' +
                    

'VCnF0oaLZfkelmWKrrG1kpu3PLq+7GI8EIaGaeISC35kaSRx5pPTKEj5Qc9DyMVD9kuWhkki1BJSkZl2L5oLKCMkblAOM5PP

QGn6LbiXXtNjPR7uJT/AN9itbRZ/tiGW/u1Kw3aSMZ5wCYpEdZgNxycqqDAyelbe' +
                    

'ygvsr7ji+t4j/n5L72c7DNOZ4w0zkFhkFvetms5reGK+228zTQq42SsmwsM9SvOD7Vo15GaRUZRsrH3nCFWpUo1eeTeq3d+h

j3kJkvZAAxLEKAvUkgDjHetOx02K1S5srfyxPIqpeTKNywruDCMYyXclRkDJ4IHR' +
                    

'jW7o2reF9HP2i+057zUR02Qlth56l2CdMfdH61oTeJLeC2trm00qRtKmkw6i62CFud0flooAO0kj5sEYI6HbpRxddxUKdFuy

Wrsk/Q+QzKnD67Wbl9uX/pTMyx8P6g95p93oum3KXMMu5oL90iZihDLJtbHysOCB' +
                    

'nBU8nINXJ/h1ew6lJCZ/Lt2JaEQQPOyx5ON5+VQcYzgmkl12806/sbhrqyXTblXVZbC1KTJHkoWHmZcEEkgAlSVIyRms+f7T

dXN1oPiDUJJpPM3W93POzokmOCST/qpBjntlW6bgduXH1Hq4xX3v/I4b0V0bLM+g' +
                    

'aBp9vIbjUma9WPMcUl3Hy+BgGOPLA5J6nHHpWNStot1YW4neGEQ7whkhnjlUMQSASjHBIU9fQ0lcGPpTpyjzz5mz7zg+SlRq

2VtV+RSlgke4dgmVOMHI9K2tEW2FlqNvfXTW6TCIEBSxkRWLsFwCA/ChS2B8zZI7' +
                    

'lFOGZVYwUElp6/5nVX4TwderOtKcrybb1XV3/lKV9PLqF287xLGCAqRKcrGgGFQewAA/U8mrv8AaaNb2yzaRZ3E9vCIRPO8h

LKCduVV1HAIXkHhRRRV/wBq1v5V+P8AmY/6nYH+ef3x/wDkSObVLy4t2tiLeG2Zl' +
                    'YxW9vHErEZwTtUFsZPUnrVaiiuTEYqWIacklbsezleU0ctjKFFt82utv0SP/9kK' +
                    '" />';

var goodIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADA0lEQVR42o2TWWgTURSG/8nMnU

lsNTFNTNN0IVpbu6i0GFD0xQ2xD4pCq2JBpa2CBVFwI2KqYgISX3wRtSrqq2ARBL' +
                    

'F1AZG2UrTigxIJxEbSNm3aLE06yUwm42TEuDyIBwYu95zz3bPMT+EvC4x9tROG6eQ4blNOztnVSxkBPs2/FAThdk11TeD3eO

rnYSw4Rmto+lJCw5+6/vEReREcQTgVU32WBQZsrnLgSMNOUScw3pwkuWqX10oFQP' +
                    

'BbkGZZ9mHf+OtdF4buoKTIAC1hf+FlIC0ImFGAPes6sL3E0adU05qHqCHjkxPux5NvnBdH7sKmN0FLA1XFZnjXn1XzDz7vQS

qbREZ5MxSPwOU4hK2GZs9ye/U5KjQesicY3rfpSTdZYTBjMQF0tIzKhVZ4NnhVwN' +
                    

'6n3WAQVyAUolnAF5tG/7ZropbX1FKRmYj7qq/X+X5yFKU6gmJCKRXQsBbbcHKNWwV0DByDnsTBSxKSIjDBi2i2NKG7Yp+Hmk

skhk4O719r4BagiLVBx+jAagj0rB4HGo+rgPODHpg4AWIui4Q4j5QQQlxIw9PUO0' +
                    

'zF52KTZwZbLE2mJdjTcAt6zox/2dfEBHo/dGFqPgb3mkdhFeB622JpNJrQVn8Ti7jS/wIkhChcTX1hKplMDnlH29cayBQ04K

ChGOVjUVq8Grvrfszg8tBpGJlPyMn5NiRIcgaxrBkn6pUWorGo+2nontMfuaGsXS' +
                    

'q8ZNTZcdTRr56PDuxAGfe54JNkGtWmI9hobPNQ09NTdpHlfTdH2wmNCVDUvwGy8lMJshWHV90X5ZSyxvzlbHTW7Z8fcT7zO5

WAuAoxaCvQvurBjy286YKF9avJOUqP7cvcKNc0emxl5edUQDgcpjkt9zDIv9s1EL' +
                    

'iCZCagzEEulJxPlJUGi1g7tiw9jTLNyr50Ot1aWVklFcSUh7AsuZQj6VOfZgbIl9lXSGRCqm8hZ0ONcSPqFm8WczzjFQXBVV

5R+UtMv1t+JoSQToYhipwlVc6UTAUEUVDlbLWW/SHn7/7NSUl252Y9AAAAAElFTk' +
                    'SuQmCCCg==' +
                    '" />';

var mafiaHatIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhGAASANU/AKysrDg4OJSUlIuLi1tbW3Jycnx9fUtMTK0nMqKiokJCQqhqcMbGxhUVFU

0gJKWlpWI0OCQjI5tGTk0PFF5JSpdmamxsbGZlZYgtNJ+fn4aGhpmZmYKCgol5ew' +
                    

'cHB7Ozsra2tlFRUJiLjGpqamBgYFVWVj0mJ4+QkFtTU1NUVGBiYk1HSJqjom5vb5ZbX6+vr2dnZzYHC7hLVDEwMXh1daipqW

xeX28XHkdHR5h/gbYgLL+/v6Gnp5KYmJycnAAAACH5BAEAAD8ALAAAAAAYABIAAA' +
                    

'b/wJ9w+PMYj0gjcSk0BjSPR+2x4ZQiDSWz2CgwHhyaRuADgD6jiGf7a4QYvgKB0OIIEi+AQNHYehoDH3IlKhoJDwIGJCVXWU

R/DRkgBmIbCYkXITglIzAKWFwNBAkMDC8PlwYtJJoKIQQHKhcBHhERAiAAOyAvCS' +
                    

'cGFiQErQopBzgHIQ0RPr2SLzUZA6oXJAcKAQErJZowEQUAGWR5Dz6/BTAEOAEzMw4owy0zAuInIlIJG9MFFyXrMyYmhChxwE

AAAQJO9HCxgAeLHtNaqCihAOAEE/5IaMDBgcMAARV0yFiQowMNGxQgTJgQw0SIYh' +
                    

'kIBLCgysAAFwh0IECA4cbKVYs4UgQgUcPCnxEcWhCAYaCDCwkYMECAQAEeDgUaABBY0+bCAA2ZShBQoUIYQQUFAZyYscTDDA

sINaCDcQFGAQ0ZXmhQwHVLgwCcWhQYPKJEgD5MggAAOwo=' +
                    '" />';

var plussignIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQALMPAO3r6wxTAGmvZqjQppHFj4O8gANoAACCAJ3JmkqiRzCXLQB3ABGOEl6pWv

38/P///yH5BAEAAA8ALAAAAAAQABAAAART8MlJqwUuO2CpG0ghON30hQ1ZPmeRqB' +
                    

'SmDYTwahxbEDxRNIyDcKFyCI7HBGPBNBiKiigjuHAaAoGi8NDEerMSWcaJ1Wwsjmt5xfrCOg43W3xmsyMAOwo=' +
                    '" />';

var cashIcon =    '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQAKU/AHS3k3W0OxIbEtW8BTN7S9XquYnDlVKSNFObXEpzVmelcPXkAXCNXpzUpW

yoRPbbAChtEcfFJqm9c7jaimOXe5iiGWyqiVaHboe3Y4i9k0h4YGWTaK3Wd0V5Ey' +
                    

'dCJZzKbDxkIluPc+Lxz6nUb2JbD+zMA5XCXJG9cj+MW3rAmnCxhVB/Zk+bckBTSN7bAsrDBMa/E9XDD1NcLkt2J6u5PMrlqG

OOaIS7V6TObKjIf22NC4K6TmOHKJ6rQfLPAP///yH5BAEAAD8ALAAAAAAQABAAAA' +
                    

'aMwJ9wSCwaj8hkUXBgMARKUKAm+mB4HZnxEJiIODkJBLKggTxDAgKzM/U6EFdE8rmdZp7VikCoDHQvc14FIwcEIYgrMAsPFQ

44BQUcDgo2CRQUFzAPCwkoCA4mAQgNCT8CHhoxPg8bFhYsCAoNBlBDJAMlCgC8AA' +
                    'YZaEYCLRQAKSkZG0qnCQAqtsvRSUEAOw==" />';

var cashCubaIcon = '<img 

src="data:image/gif;base64,R0lGODlhEAALANU/AMa6tcCbk7lpirKkmxRvU+Tc1ChYKlclM8zDuiu1J+LSzFmYYxX1AH

QzUnBsbB0XF9PGu8Jcje3i3t/X0NrMxLt1puvh2Av1AfHP4eq508psmPPm49qKtdZ3qY1ebu3j2bQ7cBjVBWaHZ9RvpbNce7t

Tf9e/uuDOygLeCMm2q9C0rguNMDCLOlFKSmpTVJiYmKtids5soJtFXcaAoOWoyFWYV4x5egTKBRzsA9LCwdLKxtjGwpI0TuTV

0ahEaAAAACH5BAEAAD8ALAAAAAAQAAsAAAaFwN/vwfN4HsKk8ncA0TAaQYNgWP5kIA6mM3sRCJfF4ZBMqWYlweKLqlU06YYLM

aEMWKHVTVTRZkYwFBATEwgJFwwOPjEZGR0CPRMABQWGDBcAEAEkEREnGzo/DgAACQwMOZQTJgobEi1KBiE4Oxa2FhISNlZDAw

UWHx8SALxKDggWCkg/QQA7" width="16" height="11"/>'

var cashMoscowIcon = '<img 

src="data:image/gif;base64,R0lGODlhEAAQANU6ACkFBt4aIvFCSdoaIaITGV8LDvNhZq8VG/mtsPbbAChtEekbI8AXHf

FITvvIyu8oL/JRV7kWHNwaIfXkAca/E/AwOOcbI8fFJvA4P5iiGfJNU/A0O/NZX/aBhX0PE/V2e9W8Be8tNPFGTL0WHcrDBPL

PAPNbYeAaIt7bAoMPFIgQFeQbIveanUV5E/JYXmJbD7MVG+zMA22NC9XDD+8kLM0YH4EPE5IRFvA5QJ6rQQAAAAAAAAAAAAAA

AAAAAAAAACH5BAEAADoALAAAAAAQABAAAAaMQJ1wSCwaj8hkERAZDABKT4Dl0GwIKZsxEvg4DKaGQjFZeQpDQmBDw+RaCtSlo

QmJbgUGg0DIgGQkc14ILhEETgMMFBMJGRIQCAgGEg8nBwsLNRQJEwcjARIYAQEdBzoABTAzJQkWFRUDAQ8dBlBDLyAxDwK8Ag

YcaEYAKgsCEBAcFkqnBwI4tsvRSUEAOw==" width="16" height="11"/>'

var healthIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQAMQfAKkAE4oAELYAFawAFJEAEYYAD////7UAFZcAEZIAEaAAEp0AEo4AELIAFb

AAFJsAErkAFZoAEpQAEbEAFJgAEq4AFKsAFIwAEKQAE7gAFaYAE6MAE7sAFbsAFr' +
                    

'wAFgAAACH5BAEAAB8ALAAAAAAQABAAAAVm4CeOZGkaaGqShsdlgrGOBiQcjTx/Bu4MOlbKMKlYAEOdoZM5/ACajWJBVUIOkw

EAM41QEAiloFHZKh4ISYJAUDotmjMiwbgEAsrhYs5IniISDHg7PBQJFwVBKwYIBA' +
                    'GJhEmKhCshADsK' +
                    '" />';

var foundIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADC0lEQVR42o2SbUhTYRSAz3vvdj

c3l7p0OXXmQsnhRzBLi/IrI1KhlFBJg0ApRCItK8u0EjQViuhHQT9TIpH8kaFUwq' +
                    

'IgI1MpDcNMxT40m86Vus9739vRZmi/fOHhwOE9z3k/DoF1rvPpGQnaqYmGX6y09Grfu4GVPFlPcUnFFTlxOY+oZqefka9jIe

LCfKq30zFVNTB0b43gQsOtTRh0iByRICylNNDlsPtJZTIXIcwX+6x5gFgt+d6fh0' +
                    

'zXXrzsJ57CIs9pzMg0MrOUF0URqCBE2G2LAQqltxkIkbmdziRWwvZcrz7X8u8KKEjEkOUpnET4pe6iSP0FQYhlGNZMCBF4t2

uSd7uH5V6KucbK0z2rBTkYNiNBSAfixu4W7K5zOuzpcoWyEwUah90Ww8nkHxiGGW' +
                    

'm8WNa9WpCKIRbZhXQiFAWz2NGIm92cTDaLOQPD0mGFUvmaERl5RXFh72pBtkegRVqxWEmpsID3Peqr9u2NMujzxpmpuHnRxv

lJVN+2KnQteMGazB1prhVBHobtSAjyBAVSkVJOLufCohK3pDUOPzBSQkHCMsALFF' +
                    

'SsAs5E5pgUhDuwImAwFHskUyigLMsI2+Mi9zXONO3eiJ/qKwWQ4q54bSLsCd4LJaZ6qIsuPPf/HOzHEIpIOU6i1e9Rlff87l

CoZRtBpA5Qe/nDSWMNNH9sg7c/2iHRP/v9sqD8St0m/C4dy3kxWLks0wT4SIMTbM' +
                    

'+tLpM013AXusbvgzEwGRZ5DpoHK0Hvw4NacnBmWXCs6HiFxfwz7nH7o9zVJ+oaefipf7o2IlpzGA6EVy59DdR1F+B49uF7qM

AYUPV3EnfG7wgODAvPDNKFtd65UW8tq67lQjfr1DvjI2teLVw94XCPwLbAfBCYaB' +
                    

'j8XokDCeDFxUBGyOWyNW9QWnEpS0bEm59GRy/qDbHdyUlxC4ZoTZvpa22K2TYIPGVBQgTQeBshOehsJ+G5Q2sEaSlJvvbFxT

dW69ypoZGxp0u57+ZxjmGh1OKaKJh3moNVnObLBom2iXfT2/qgSP4PU3k9tCVxAe' +
                    '4AAAAASUVORK5CYIIK' +
                    '" />';

var warningIcon = '<img src="' +
                    

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACgUlEQVR42pWST0gUURzHv29n/7

S7rpuhlroW/kFdobQ8qBgdxItWB6NDkVAdukREWdShEr3YHyiicwQlJRJJEP2hOo' +
                    

'Vmapq1qbEuaWq7Cu6s6+7OjLuz7zU7I1aYZXP5vWHm++Hzvu8R/OURJ15YGZWZJXePsNo/ZLUPYc9jS0ykQ0yWKKen2+1bG8

T/AoS+tLf4J4UmeVFEaqaueX3Z8ZY1AxZGbm+e9y2OJttDFqoAeB+N2NMNRWm7mq' +
                    

'bXBOAHb7YHJkMHHPnzYDEJYwNMsdA/yKi7deifgOCnqzu9I+E3jnyeuH0S5KiEApsE9wBYdpGlKrO+rWdVwMLHZl2El/pEPl

iWlRfAjYdALCbiTG0QnveA2Wbqs9qNFVkHn7A/Avjes0fH+4N3nBVz0FEB1zoAWQ' +
                    

'GcqwtCDkvoeUZQXLnh8JZjb++tAPi7T9v8EwG3ycRvSncEwaR5NN8NKR2EcGmvABbX4duoEYJg86bnpBXmnugP/waYfXnkyt

d+//mSqilQYQosGsHlTgPMBuBkjWIcJ6CyDl3PzXCWp7XmN7ouLANmnzbkTrrmhr' +
                    

'McnnW2pO8AUwKUoMtDYOKAsgxOMSCqBT/DYdxtlnJKHMV5p96Nq4CJttrO6aGx+m2VXk0nUREjGJll6rooRa8aJABMJhjoNs

JRkPrIefHzfuLt2F3teuV5XVrpJWYrU7NY6rixnVPn9X3QwgokARLDBIO9RuYsz6' +
                    

'4mrtaSD8Kct7Rwx6KyHy3JmFZNnFDVRBfVa2GasNBg7mEOJmvyIBlqyuOn3ZGUFVeK/TqJOjU7srRFICPTwBPf/ZokvSV5I8

D9PJPlMFH7VN/p0poSDRKniIYCMz8A9QcpP1oZxJMAAAAASUVORK5CYIIK' +
                    '" />';

var chickenIcon = '<img src="' +
                    

'data:image/gif;base64,R0lGODdhEAAQAMYAAAQCBKSKBHQCBEQ2FNTKDEwCBDQyTCQaBIyKvHxiDMzOzExOTBwaNCQCBF

w+BPTmBHx6fPS+BDQmBExKfLy+BCQmJKSm3Hx+BAwOHMyaBKQCBExKHDwmDDQyZB' +
                    

'waHPTy9FxaXPz+BKSWBDQyPPzKBGQCBJyavIRuDExOZCQmNCQWFGROBPzyBMQCBDw+ZBweHAwKDLSKBEwyBFQCBHxmBNze3F

RSVDQCBGQ+DPzmBHx+fFxajLy+vJxyBBQSFLQCBBwaJPz+/PzWBJyazCwqRDw+dA' +
                    

'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
                    

'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAAAHi4AAgoMAL4

SHiDclM4iNGi0FjYcwLT+SkyUCMJeDJhUNE4Obgh6EFiguRRg6hoQeNUEQPgg7qz' +
                    

'wKhzpBuhUGGx48t4QwNrsfCyI5AwoKpYQ+IDogEiE5MT6XEgEPIUIRGT0Ho4QEFxQsJD0OOByNEisJJwkyHtiIIxYmLhISHk

QdHeyJYkCwYMFBgQAAOw==" />';

var hideIcon =    '<img src="' +
                    

'data:image/gif;base64,R0lGODlhEAAQANU/AP////8zM/f39+3t7YCAgOXl5fX19fT09BkZGdPT0xUVFbS0tMvLy4eHh/

9LS/v7++Hh4aAVEtvb2/j4+M9NTKQWFMcuLDw8PMMcGkpKSrq6uqQVFKkXFawYFs' +
                    

'YcGqAUEqcmI5GRkf7+/qenp6+vr/Pz87u7uwMDA/9ra/5ycmNjY2lpaf5HR8gdGs3Nzf+Hh8AbGtLS0vr6+psUEdjY2NnZ2d

JOTP/b26MWE+fn56cWFL0bGKsXFa4YFp0UEgAAACH5BAEAAD8ALAAAAAAQABAAAA' +
                    

'aYwJ9wSCwaA8ikkRhoeTyYwFKoQNkoFpiUqFCNCoJwgbCTIhDCDOAhAAAMgwQhREgwSD+FyO2G1wYCEwYQDEIPfAIDEoAAMm

8JQhp8BTk0A3wAAgVCDm4CBAQml3wHmz8BNwApAT08BAUHsS4EQw0ADQEdOjgRLG' +
                    'dFFwAxATwVID5bRSclAA4cGx8zyUULAC9JSFMrAAtTQkEAOw==" />';

var redBgImage =    '<img src="' +
                    'data:image/gif;base64,' +
                    

'R0lGODlhZAAyALMAACIODyUQESYTFCkWGCwZHTMgJDckKDAdIDooLT4sMUw6QEY0OkEvNVJBSFlIUGFQWSH5BAAAAAAALAAA

AABkADIAQAT/sC3EWBNFJYDcOoiiEMbSFIWjHJaGII9RxgwrURamcR4okiaUyuYK' +
                    

'jUqn1KqVeMVmNYbJ0FQMDonEwKBgFBAJxRexMGQUBikDYTaREI2BoEsILxbX7Lb7DY/LZ2kLCRlgYi+AIoJrBiEFd2ZkCAEC

BgcEcgQFVwgFJCgElwmYLwcFZgaahAShCAICCQYCpjKvmpyeZp6ipAi0p5+7db0H' +
                    

'ja0yB7SYBwIAAQMDAACsAAKYr9YBlATbBALQ4M6Y1dfglNDS1NaZ39De3wTOB+AFzNzb3fDO6OuvA97OnDWrNlBAAGmUEBqs

dlDbQYHSXgWk9DAhwYgPJw60+CqjRYoM/52B5PjQYMWSKKVVU1nwpEKWCDOKxEgz' +
                    

'IsyQDp8dHLgSp0M5DYNqQ8iy4cKZF0dKPBgt6VGVRQW6dGq02c6SVhdSstpzqUMpGBoQKjHilANoHgiEKJOAgYJOCRw0aqAh

wR25BNwyCFBA7KkFZQ2cHZB2LRW3cOVqKayALeICcefWvYOAhKVTNcZUNsXgm4Yt' +
                    

'TU6lQcGlHpjKjxIUS2MKsqUXmwt0HvCZSicZXk4doq3FtujcXGSUOvBWLZ5vBQyy4vavACVP1i6xGrDpyqblxTDVu2Runjvm

mp7Ho27vlvVvpryFWk5dDvT1clIFWI9wQNWITeXss/pMGrqt+p3jX/80OglUUFML' +
                    

'6feNSd80BI1VAfYHwH8KQuPgTUiRJNVQBfHUElQZ8TQURDiZtNNLUm14IolamURUTy+O2GJDPYE0Y0Ai8hQQUjeuOBRFRtG4

UZAYNmMcA/8MkYAEjYRRhwIN1KGCIGKs8UA9DsglBZQLHJnkCkuWYciTUcaFxpay' +
                    

'wTBCGGVOiaaVWGrJZTENvJCFGJApYI1YT04wQZRpLCECG2GIEWgAcMgFhh957jmKHZIA6hYLCzjwaGORkjCpW2+98FYbnbwV

CwHFhdDJF3gccMcjfNi1AGQZaAHZAp5VRgYDMhSi1lsokHHFqoB54Wqadv36arCz' +
                    

'vkrIEm21ooX/KQl8w0Zl1CXwzKiNyGAJcKOk+RquyTRiTRZYRKKdtQNgywYy3GriRSrZskvaKFRcQsZrbLBiSSjJzFePHNS9

YoY1qWByi71bbALCN5ZckQw0lvg7D3ICJ0fCdAerJUclFhfcXDUyBGBKMZnMo4kt' +
                    

'rGwTzSyZYByKcvZ4go47r3jyzCXwcLNONfOIFx3GzmlyDXusMDOfN//YckA6/+j0jTgGLRh1fvbNB/CDBvVMjkHmPEOgN+d0

ZPXTXpNzdTYDalMOUGz/Y98sHemHokRO8YdgVnS7WCBILLZkIjYi3b2UV3enqI3d' +
                    

'KoU4VVcfznQ4iiMmXlPkBb0EZED2RdQ4/+Wa17SjQzHZJFJQG5VO0+OQjyhjTKRbrvePH+GN+kc8BgVi6CUSWXuGp8s0lVac

4w58iJrndFXqk4vY+eEOKY8U8iGRuKNXHjlP/U0WAaBFB7G41SULDsyS1pJoZOEA' +
                    

'nWXStYAUDXhBglgDcB/o9wyEf8D4dFERF/p1NIB/+fszQAPS1xj2MeB9FqgBFeJAALpcQQKoQsMLGmCKAUKGLmgQjGke4IDK

JLAYS/qHAw8AQTJIEA4VPAH5DgGYRqCwLyrEoAwcYBo+qUY2KyChFQSIK9kAKi6E' +
                    

'6AGnYHMCUg3BAA+gYCoAkwwH8tAMFiABEFPwgSGyIYpUsBQVWTCoCf+iQAF44RRr+oKkELgvA6EQgQ+aQAW2CEYGUCqLBIrh

lly0L3580MQIiLOCELDRLraxVBr76II2UuGNAhTVq8yABeJ0wk5StAJxVEOGLMQi' +
                    

'g4CJ4BHaZ4ZifeEtIABDJK+gARAMIgvBIQudSllJVGKShYPoS2WC4yssUCAUayAlvnDFALtcwi1P0kNqPPGIf6zPXc1iAQJ0

GUpe+jIva8pgM9PwTGCGgVxiCGW3rPEqFKTLFbKxBLS0Q7/bZEsDE9CErwiQzkNW' +
                    

'JgBNwAC4xkmdcoqGDXWCDDlxaU42GAo2BywXIS4BAu34YhfL3MIy61APbdUjL5jI1j/chwoQyGb/E19IDwggttCBOvSXmFDo

PzyKDNOcAgzfiOdDTyYyA0DDFCBjRjGISQJrnOIKjNxMJwjq0lm4NBTVgWklZGoG' +
                    

'oclCEy6dKVFpetSbngIUDKXOZZwhs24841+suE4ooOHNZEjHZMnQlxxMcTTnWIM5WL1FVrmqsLD+Q61bpc51TMHVoplnGdcQ

mX2ucLWlzUKm73kYUHrWnre+AxPaIOzE/uHXl1nnZiYjD88Aq55QaCNpDrOqRPrh' +
                    

'tnPEAwCXmNDaypEcro12HysrB2L1cdbLIk1mL31aaN3WDvVEg7aJbcY/zHaOzFmDaV4DhzX8AZ5wLEhte+1ZO3YSj/nYIrVA

/xnuM0Ia3Ae940EWgsdBrnFcfygkbFKjCDcmdLbMbWU/wQXQdxcEFPXqY2x77Yhy' +
                    

'mHK1y0qNQimaEN5cR6AAEa4i5iXbiPx7lI0V7hkmQrBA+rvfyy5PQVGRHoJSMru7Ne8oMqoITxD0YAwTKHrA8xBTdLcTHf2O

SD66z/NgZGLhnc5FjgPdSGo0pNHBpHrC07Dk6pY8qGC4xtFLCOWEouMXLQUisYtR' +
                    

'VPgmo6yo+McigbHi8ttkwx05c1QxUH1Cx7clB294NznK9aDiZeL5xMzZA7PohOzkHWPYzMPjEO5gt7rELe5DxqPxhkYnZyQn

WHU+sZ5QwvwhGNfII9mj8FOX+UNnQvNZRfwx8p07F+Q65+12EV705ITEks1xOimR' +
                    'E12G8GwiPU8oSD/ysZ3nhmofla7Vps4J74b0O9ZF2XU5+duqbcwjW8/OyYP+9Z5BLI0IAAA7' +
                    '" />';

var mwLogoSmall =   '<img src="' +
                    'data:image/jpeg;base64,' +
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAWgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQIB

AQECAgIBAQICAgICAgICAgMCAwMDAwIDAwQEBAQEAwUFBQUFBQcHBwcHCAgICAgI' +
                    

'CAgICAEBAQECAgIFAwMFBwUEBQcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI/8AA

EQgAUADAAwERAAIRAQMRAf/EAK0AAAICAgMBAQAAAAAAAAAAAAcIBgkEBQECAwoA' +
                    

'AQAABwEBAQAAAAAAAAAAAAABAgMEBQYHAAgJEAABBAIBAwIEBAQDBgcAAAACAQMEBQYHEQASCCETMUEiFFFhFQlxMiMWgVIk

kaFCJRcYsdFiM2M0JhEAAQMCBAQDBgUBBwUAAAAAAQACAxEEITESBUFRYQZxEwfw' +
                    

'gZGxIjKhwdHhFGLxcoKyM0MVQlJTFgj/2gAMAwEAAhEDEQA/AEP/AHV9h5t5O5BqnSWsplXe7N2/KyDK3ayXkFDRw5F9lNic

evhLOvpsKIDyiLbbDZvIRkogCKRCK+M/TGxfue7ee/i4k+LiXH4NFF6D7vnbZWJj' +
                    

'bwAA8Gig+JNUuulvEX9z3x81wzlTuo28Kw+prhtMpiv51gP6S6VLWPSEsWjG4c4UGI/uvRz5bLsXhEVURNi7/wDS9u4P1xAE

k1NMDXkakVGdOIKona3extWaJOApjj8M6H5qsssb8qf3M90ZpR6yh/8AU/MGBbtc' +
                    

'7lybqjpHpjTtgxVtpGC7mwxJgH5LTYNtKSopCqoicdW/sDsSDa4g5wo4+8ivM8XHifcFXu6e5pL1+lpq0fA/t/apzt/9t7y+

8aNfWef7n1fX65wvHVhNSZk3MsGKQ69PeNiOzFiRrh2TKecVpwvaYaM+wDNUQAMk' +
                    

'2KG8i+1pVCkhfmUlwyEHlO706fa03omX8cfFbyE8rLfIaXQGuHs+nYoyw9fkk6qrI8dJROIy2si5lRGVedRl0wZE1cIG3DQV

Bs1FvNcsZ9xSjInOyTiN/tG/uJwm3ZVl48rFhM8e89/dmDF9REgCAoFyqkRkqCAo' +
                    

'iqRKgoiqqJ0h/wAjFzSn8V/JCWo0TkdO0zb5fLrdc17jQk6/czQGUoKHd/8ATie/JTn0/mbFPz6F943xQNgK0dxnvjphrqxS

v7XbV8Cr21UJn9Og9yfBO1gpT7ifmhNL+XTd92TklWwhE/WOF+UvkoU/DtE6jp9Z' +
                    

'x7SHKSvenyaajs7FhqOTzzUWRkMxiRLc9kDP2G3TLtQi7O1CVG8smGKWjjoUvm7/ANq39xzCcYyjZW0NPpQ65xevn20/JJue

69KONZWwynPPIEa9cV01bDkG20IjVRAEIyFFYulBKchtFJfHP9pvza2lglfmcXSy' +
                    

'ZHp3KayHkeKZHCzfBFim3MhhJE3QC6VxpSZXhwHAE2yBQcQTEkRe1mjYTqxCTlaTki3qr9t/yLznN891jrjAK6flOmpkGBn+

NLmmD8QptpEO1YBl525FuQntJw97JH7DqE072OcB0+besBrkE2dC4lMbnfgn5HeN' +
                    

'mBWed7UxOkxaiqpcGBNmv51gL86RYWSorUWDXQ7p6ZLdQF91wI7LhNtcumgtopdOYruN5oDikXQuaKlAWbeLCaj1sde019XV

T4c9PQEgSoTsSa4/+hlyvCsFwX4KhevRwuJQtV9RHtL4l8uPXjoxKCgXsLimIii9' +
                    

'qfA1/L8OuoiuKsS8Edku6tj7lvqTu/uKREoI0yTHa96UGPuXA/fICdwqgK+kRXVT1UU4+aouV+sL7kbK/wAnxPUAio9uCtXZ

McTtwaH+7xoaK06d5sbeg6kzjZ2MYUr8PDrSvqJmF2E37KXchPcVlxuNIFqQDT5t' +
                    

'8nHYeVPcRCJSFe1C8ibbvjJJQx8oaKVcQCQK5Amlac6A0W33OwltuZWtqQcASATTl7YqUePHkT4uZri+2cX25YHgexqwJtxX

01s3Jg28MoaLKHgDIPeRrsVO5tS+lEXn06p26dm3pkkmLfNjcfpdGdYHQgYjliFe' +
                    

'dk7psxbsiJ8t4GLXDST1ByPxV3X7bH7i+lN94FV1VblDUe4gwAmRIVgH6eF/WMJ7b8+AUwgZdbbRFV4O9DAfqIe1ULrT+37e

52tgbNpBBpQHGvyr0wPRVTeLu33Fx8upwJrTCnz99KL4Xdkx1ostzWI1FagtN2k3' +
                    

'9NjMm26wkVyQTrKtGyRATatkKgQqqKnHHXuPbJxLbMeDWrR8l5huWFkhbyJQwatZAuCSr3J80/BOnlE3SJ3GY5Vs/IcDrLS0

lTrSXdVI22Qvfag8TDMoRaREjA2iqHdynonqnWQ9venQ224L2aQymAFcK55kq97t' +
                    

'3YbuINdUuriTTH4K/DM9u4Rp39xPPM8yWpjzcUxbbuQN7BplbFW5mOy8ik1l1GJF9FF6E++BIvx56s6g0q2Ba4q/EDWPm/j1

083aZFabMHT+J5MHb7VhSYTNl3V+6IqnKg89+hvAvKJ2r8+U4kb2YOY0JvAyhKiG' +
                    

'2amz2t4N4rT4BRSsjvz3e6wOOV0d2Q88P9iIYukDCKvaCkqdy+g8r6onPSdjTXijXH2pWKjxKyiG2E3auwcf1PXiilJgyJg2

tqIoiKqJFq/dbEvX+V59tUX0XhepZ12wdUy8lN/iV/pzWvhZvLH9aZdOzFyXsjXB' +
                    

'5LezBix23SZx3MgbBpmN7nYH1r3ITrnPp8PnFXspeQncDAK0Vg1NO8Ya+88XsvvzxbVN3rLItcMY9RUntQcsz2TkmDYTk0Zy

1fluFFZhNXM6wKRZyeFajorDDT5iICz0pxVIl5k648OKbFNheRVBfbg2D/a2wiw7' +
                    

'bev8mhQsZhjml+F1efbV/aw0rUaIFS+D7TnuuD3sqKkhF2uoJhkQknx8lVxO8urukaKBpjWWN6ZiccBasQgubvj5EUy0EwEv

xUGR6XMpoihiFlBvDaMHZuD7aXYVva7HwK4rbvE8glTX3noNlWTAnxXmFcJUBW3W' +
                    

'xVO1E4/Drg4OwPFcW0V/ecytdXPkb55aOxSDEjYZvrCtnnqqICNx2UYsKD/qviwhwnAArkOGAoicIi8J1G8UuhdtWVj2sqzQ

mmIzsaVK0prLC4U2W19Yfq13AXOLFBI0FVEZ92+icoioifBPh1zjUrgmM2bcYnXz' +
                    

'fOzPm2iNnyAyXVlliIOL/pW4uaYy5s69FkV9OQmlDRVT8P4dKvdVgCIMygJ5RSKY8i8ZdaxZJs0WptbV9paUja9rA5LnNtNy

WRJ7E9PddrnK1oiX1UWQT4CnUjtcQNSU1vX8Ev8AdzIz81pYoK0KcIic88+nU+Ao' +
                    

'5dslqbOxoosuugP2KUzbjto4yy46keOhgCuuqCL2AhGIqS8JyqJ806AOQ0Qn9ky+p1eCL5/Bf8E6Piiru60+Edx1qOZsNqgn

IQSIBJfgilxwi+vw65Fomi8LLtup3/gkCxnhX0uaPOUl0+ZdqC1PDtaPn8W5AtOD' +
                    

'8fUU9F+HUVvNsJrctOXsD+CXtZdEgI4JtfH7PG5lrubB9g4zZZDCxyTY32j8oaF6FFG8kx/0pxH23zEzYBt10EJO7lUT6U9F

6+fXdwsNrJMJ1EihA99PDqfBerO35Lm8ZSQU4ivLCv6qwnV2j6DeepN3+Luxac6j' +
                    

'H85xaQzT77i1ddY2WGWLXtPFPbSf7JONkDKi+DT7ZKJFwvPHVJ9PO6ha7oyVzC/EkgECp5mvAK09y9vOnsHwghuAxIrToOpU

0xTw4/X9sal8N/J3ZuJZfVeO+s8zjePGOVsiyxKzzGfnNWXsy3Zc1G5MiK2xFCMz' +
                    

'HZUmWuD5IyXhNVsN+EU7baNtGSv1Oe9oq6taBtBSoOIcaEkCnFUq72asRle7U+NmkNa44UzrjlTCg96p6/7cfK7yUyDK8w1/

423UiohvSVfg01PPZpK0I6mX2cR2eRdyNIKi22rpucIieq9e1bK8sLC2a0yAAjMn' +
                    

'PBebZIJ7iUuawnHgCaJKXlfizJUKUwcOZDMmpMV0VBwHALtISEkRUVFThUXqysc1wqDUFRzhRLtrHxz3dZ3OM5QWCP0NLFnw

ZDM25ejUv3IhLaXiMFq5HJ7nn0UEVPz6j33LaUSzYymU3NjmwvJHzY8/sG1lMgu3' +
                    

'GvbXdmcyoU159tZ1PhM+wuZzERWGne6UUZoyaAuBJR4Uk6rCmCtPsHaLnm/jGKRNCxZlPP8AGPT1rsDyll3zAwo9vktMzCgX

NlCKBInq67MYZhNCTyNIRNjygqqr0JKCiyvELJaLLdE47A2HtuLpfWbG33J2ws6l' +
                    

'vONGNNGw5p2XHi+01JMpTrQELAi04SmqcAS8CqkWaJIK4J38g/cG8wWvGDdG/fHTyxu6TWek5tLW12GydC4ZRYDPK4uQgfpt

Jaz7e9mmcJqQLgtvxgbRkUQlacNoHCOaRmjhJB5NbfzXang1TbrzH7FzL9rZBhdt' +
                    

'm1jCgM162Fo7Z7NqPdP7dE57Y9M2Cfmil8SJV4uJC4BGTJtuzdm6/wDHnwM2Jvz9Rn7JxXAzmyK3XNFjzdZQO4rFzKixxLKC

8btnPnynIEZbGS223F9oiJHBcc4FhIxXEKMbj8pqjzc0ngGk2MtudbeJmntl4BUR' +
                    

'c3zq7kXGQi1Posqcsr+0cJ2UCPrGZ7WYrKuKKALYm5yKDzM1xKKjfnD5Q1ejNrZt4obkn4lpvxzixxo6BdJ4jHwhmHIuo9cx

Ww7m6nXFkb7bUsSAn4494hy6jbjnJ89hGa4FVzeTeyb7fdDoPyQ2O1BTauy6rIP7' +
                    

'4ymvrolb+pPUeTy4UN1xuKIAroMKDHfwq+222P8AKCJ07sxVJyBTy/3u1gnkB4L+RmXQpX9lycW19Ly6HCYZlSZ1br6yka4s

GwZddjtuOyYmP8ECuCi9/wAURem0wo8ozckINyb8c25ubfG2cKp7RNf2t7OtICOQ' +
                    

'iD9EoJ1j9tWtzUinIajCAuNMAiuKPPaKEqqnSSMmT2n5k4dtXx18I9I4HU2kTaWqoV5X7puZcOLHh3tvYXItUhRHmJT7r4xa

4Go3LjbaogIiIvPpy5XLf9c8A0xty9ofH3eU668itw3M3G7/AB7AtT1exsmgU2HP' +
                    

'R8CoKd9/LbmkrYyFFoPvHQYV8jWQCvI2rDSo40vLcMgki5oPVD3NfI7aG1dweUniD5Obbp821/omFk8uVsyvwepgS4T2K2UM

ktY8KoRg1dBvvEmhdVVE3G0dVs1Ugt5nMeCEaRgLaFGLX/kTq7RWf7x8cNc6tpcV' +
                    

'xjQMKSnkJtfLaV/N8hurqoySFjDD1bX1dpUtDEGwnMOg24//AC8miNqKg4ea5fK6pRWRNYFvK3O9qeQUHyMuvK2Ljmx2/Bew

tpmBTH8ep4FHd5diUuWzLo2kFlpJkZyOJTJUERVXGI7ZPioCi9JxTvZWhzQvia7N' +
                    

'eGI/uT+WlpidttTI/KzDfH7UGP3FdQwqqxxR+XRLZWEWROi1TEXG6e3s+z7aI4ROkSIIj/7iEooqYBJ6o5IAS7+TsvB9SeQO

E7unvYFG2Zn2u8dzTXOJUBi9hmX5jYy5NcN5CGKjLEaCDTDc9xt4mlOX3NKAl7oN' +
                    

'vpL+RtsQKF+Qqae3sElZtsheMFyS2E/cWipA6eJ/VRDU+/MmznOaGBuipHGKsO+tyDNmAEwiMyk7QektNd5Gy2SoROtqSoiq

qoXCdeJu/uyYLSfMtLyTpdkT0dz6Feyu0bM7taGawe24ZGKHTTU0dW54eCus0VYx' +
                    

'4eYv6gzzMq7CbPKIwli16+rT9PeVQoy80/CcV1tmSMx9xEcBHOe0O3+VVLrDbfbfIeWuPGh4Urz6HnyVgnui76DgfnTl1HIo

DeYG6Me3H5Q3GC+XmHrgcHRddWVWI7PgyYVm7jxXEU5sSRMg03sMz4rxNo4UVOVZ' +
                    

'TuT3FTlV3+3buTNuN9AGuikBhdQantoKlzBSmH4LG7/+E+//AIk9WPYRI01oDXg/HimD8JtVeQOQ7t1TtPKdyxtpaHpCcax3

MK27WHW1kyGSNCCVZDGICbEh9sEbVtPgqr1kdnCZ5WO10AdiXOJcB7+IWiRudFG8' +
                    

'EBwLcA0Chr0HBBX98vwQpKq6Y8sdGVIToNi+5G3tGrmO0G5rpI6xbuMtDwCPERNvkn0oXYv/ABKvXsr0l7yjbO7b3yB7c2H5

t/MDx6Lz36hdsvETbtsZYcnj5O/I+5fO/dQajH7SNK3Bu6qoL6U+0rFYc9y2unHU' +
                    

'cTgQYhe8SEprx9aoiL8etlLQAs0GJQ30dsi+03+4p5o7HAiek4h/1THLWlRF+5q52Q/o1uySEipw9ElPAX5EvUSBinZXfx2x

jIPG3BvP/Bfuyj3Gdxdk6tnyUACWVT4Nidxk1u33EnKCUuPVnynxRE+S9cAuUE8S' +
                    

'Y+tJ3jHYS9x41LzTWGtc6uMxyzCa+atbMu2qnE4cMIKTBRTZbccmCTqh2mQCQAbREjoKRvLcQgITEb3zut8tvBfZ24sys7HW

1friK3O8SfFPEUr4GvsTx6nz3HMMsJV0RNjIs7aT/capHMGmwbQHnFUUdBkUzU4o' +
                    

'UOt01KNfs8ePFz7yEcq5wVomeE5T/wDX79TnlF5+DSf7U67guRCj4jRj5reHkN6w+3uLjBPGd2vYbjs8OOz9T4rK4N5zkk4J

z1QUTnjp9C0eUSikYpaPCHE8fyfRO65+Z1Uq7wbXuT0mWZdTQ3G2JM6JjOAZtblE' +
                    

'bddE0bV9Ge1T45ROeFReFRrDIWmoQuFQjvuPaS+WHiZsTLnxsdSaf1+xcf8AbF41Y26y1jkD+07nF49lbZPKMRdtLB9rKBBh

UARBxXXE7EIhcI4k4lClByGdJheOfh2gUH6689W5z+nx/ZOQnKZjIQl9sUVF9fx6' +
                    

'eWUmknCqSlXXfzGRZB4o6IyfIq84VxgOYZlj77Zg2Cs01tW015VBw19IoUlu0JB/j0ldFxdU8UMWSYX9v5qsY8YvMjEbSqi2

Nh5a1krX+MvSWu4472J4xabNaKOX/C85dVdIxzwv0OEnz6bgJRJv4OwK6+8tfH5M' +
                    

'laSXimJ5DFyXL4prwDlPigHk08SX/KsaA4i/l0C5WyYt5F1WrcnpPHHTsWbqTa2e4mGc+UHmUisWmXlT2evWtn2FdikQ/Yag

Pq085FaeNxTV1Ac7wURMF5JHH6eASbWAYpZcWxzH9deXfnDrjXlvZHgOPYRnwYtL' +
                    

'upbc23kV7zcSWAzpLQNg9JND/rGIoJHyqIicJ0WH7wjPyKNBZLkc7zX/AHWKsHxnS0iZOct1T4B37bbeNPkqKiL/ADONj6oi

+ny6KxwDqlG0F2AzTBYxtnfvk75cWWd3uKY/Ko6ih2lNxjxWrEtqnFGMUt8et7zK' +
                    

'6qrGuakSktLeOUj/AJgXuSXZatOPOF2AiPIRC5hFcfbHwQXNvNGQSMPbBRPB9z0vi5gec7L1vQwfJ/w22FY0lL5B+POx6lmD

m2LS30l/pTzVvXtFDljy28MWzh8cH2fcQ4rhtF03fG+J3JJte14QG8h2cWyDceJb' +
                    

'S1lDLEsM21hGM32F6+fRmQmMV4A/SOVjTgjwbQS6+Q8BqquELqK6bjve4cdeyOc/UVVt7j0YZhEDXVzCgFGespTEaWyPY4y8

L7bTqf5gdYEuxfyVFTqLvbGC5iMczQ9pwocQoDat9vttuWz2Uj4pm4hzDQjxpmOY' +
                    

'NQUwWVWkzPdaxsKq81fj01BM+9oKgHhlt1kt5RR11lIyqaNmnPuAKDx6kgqvKLRNt7FtNqv/AOVDGJWEaXMdQkNOZaTgaf8A

aeGRXoOL1zf3JaCz3giG4BBbcsGlpIwAmYMq/wDkbkRUtpWibV+W5/hew4OeG8t5' +
                    

'lOHWEWac+c3+pxDlQ3BdYV9HkIXB9EVEP5dblt9pYfxBFA1rI3DIANzzw+eCzq7upjOXSO1vBzrqrTkamvQgo76N8gN41ucU

VbrFyU3ld3LRmiqamW9AJyRINfpHlxQTu59e7gVT+blOsf33/wCe9in+qNz4XDiD' +
                    

'UeJB4q9bT6n7nbmho8ciP0V82kf3T2a5iZg29cXZ2lNOt/Tra2qHqSbXSm5cVG5LDjtc+cOQ4AmoG439KknzVO5fK2/7fP27

ubna2SCM0Dm1+JAqAeBxOK9mdmdhX3cu1tJaYvMGIfngaUyrTiOi+QnSWl6PbW8t' +
                    

'X4TfbQo9QVkn3pt3nl6xbSIEOLXizNd/p0kOc+bziIoMgoCBOEiG42KqY/Q14+nAVXgEZpzKHQtA/wCSPlVs3MvKzSWF03k/

X7Ljw61M6kWsvHZmWyX7mAEqPDqlcdAZANx3VbHkUJXOOB7VhmtIcliVOLA9SbFr' +
                    

'nLOs3Vj+IWjuscplZi/mxWeKra7V2ljLWvbWPGNyBKbcbZZqI1mbquI2omrYGTqqKLvhLQcM0Ach94/eP2tcQ8avIzT2wfNH

TWNZRkMGwla1nxsmuLmLbTrOHGgvQHxqad92Kbf2bRtukKtr3l3KPanLcNKNVabG' +
                    

'qLAMN8MtleG+f760ouf58+L+nNo00vKrqTGRu9q76xr8gum2lg1tc7+mj9oDcUjOUok8rbQ+6nBjqLqrS5rpquvvCbXmoWvK

fV/6rj1nTpLA8ls0qAZpbTN7H7hub+lqwauJlICjYl3oSGqoicclXVWKGZY/i3lt' +
                    

'4uTqrYuKbHh1VFqWHk+waJ2fcwMb/tOjr8UlNSpJQhVr2Fq1d7mANPZMCRe5SFHsUpERaAk3E6q8F08fde0uiNL77wbM/JLX

EI9psvQa5+Ha3NoIHZYVk+Kob4wqoyBpl+5ZJ0kQlRtTIRJQ7VZhpRyQsrVN7g2r' +
                    

'vEPdnh9sDb+n7ew3As53UO0ahMkyG7pbadMoJk6NYWbbQxaynlN4+yBK3HN4pCtkX9AHDb4NK6qh02QmFaI0Bg2IbAwrPM31

qxmUK2WmkneEwxYXI30eQiTI7LKI4Mh1tOQNRJrle3uHlza1qkZjgtbX14bs8XNo' +
                    

'4Znu/cXos7vs2w+fhePZVaWla9XRscqb1mVKFWq96GEV4b1GhaaP3FcDlQEQRTVvWHBFgcmK8ccF1hrOL4T45ZeReuZMvXOx

cjyLZsmHa3VlEjty3aOWzIlfZVZqUU4lIsdEAScRwiEhETQukYGYGvJKSOyQV8ef' +
                    

'F3CtWbE2nkVv5U6ir6q7wzPqPA/dy2ZJlRpN/SSqhhuQ0xWEXe9GkOMIQ+guGJEqAhKiLGkEVRy4URApMboo/khrby8xnd+l

5OLU+IYvT5bqfZk3LWDbGt1rDwK6i2FPRxGpU5o/aecjpCfcF4CbRU71cZE80bmu' +
                    

'KCNwcFKbjB9H5b5SeS/kThXkxr6BpffOOZgOB47bz5eNZXVSLKq9+HXy6JYj4suDLjDE4bkOMoJI4LpNp3dJsNHVR3Rk4Lyf

1/gVB5Febe52/K7WB4huOBl8jAa9i+uX7iYB5VBymFEciDUCQyJbFerQCS9qPEKG' +
                    

'SDyaJkJaIEOC9dd7caxHZddllDmEjX8wINzBpdixIC2LlJMuKOVVxZ5w+w1kMR35AOvsiBkbQmIgZKgqVjCSpq8AMRXPlhtr

y48nsFTRO0N5eNOA6/rL1L3JpWNzsexibZXLLCx/u58c2Etkd7VVTaSK2RLwhtqo' +
                    

'iiKvccjwVda5uYSi57s7CRyTXGLa+yks8xzUOGU2KP5+MSZBh3c+NLm20uRCj2LbMkIoPWBMMk+2Dhi2jhAHf2CwuHYqC3iE

SYBS+r2fWuNCrrwiXpyi/wDn0gFUTZPCl1PuqDik9uzrzV2aXLcUB4JBcUVX3CQv' +
                    

'RUbFFJE+aonXVRH7a5+BWRgR7My7IFyaQ97GKTSc/UMeabFY5MOoveTqcKrjhd3cRkqqpfl0LS4GoKGV0MAAb9wyP6IiYdRj

iG3MPZmXjtBBj3Fc/EyiMLb70aP94BA+2JkIkQInPBKicp6+nV5t5xNFj4FWu0u/' +
                    

'MjD28fmg1i1jkuT5JkrmKXk3AawbixPHsZCYCfpjJznUaik6IgLispw33KnC8c8dZLf9obXO9xlha/VXMcOSul16590WxaIr

p8emlA36R+CWB7KssnU1jSBmbkSkuVbO1xOn/wCU1shWxMAF8Ya97/ajipw44SLz' +
                    

'yqc9a5/FaRnVQBlJ6Kd4ZcTG8Cy2IVHAZiY2zG+ytWIMaPII3nfbRlx5oB9xU7eeV+pE556ViiAOSMCaIP12dWjOR19mUaNa

OVMuPMhxpjSSoxOw3UdbQ2nEVDDlOCFU4IVVF9F6T1AuShw4pm8yqcrzKqtNpS8O' +
                    

'o6jJc6bW5q66ur4UaM6EpEJtYNbXOArbCiKoCI0IIqcKvPxWfG3SSKVQBxril5iawyvM8mp4UXGWW482SJXEQ5bDI+y05w6h

o0Rm2hqKp2J9aJ8vn1GSOOmhpUo5HJOP5AZFi+PDGh7rtY2T5HHZYXE/HzGoEWlo' +
                    

'qKGjApHCSgIagPYgknu97p896ind3dN2RNaUlqKU4945e2Bw8FoKnXFe8nZ2VcIClECpx9UiZ7pIv5t9nSzWojnKBP0FndPr

Y2zrtlMc9Tkvmbziqq8r6nyvRxCEUyLfVWGMRv6xtByXooqPCrz/AIdKCIBEMhTH' +
                    

'aQqaSLZv0MnGTmy78lD9Va7VCNH7fqLjjnnn59CYhmhD1CcwxJvHM5l1c+O1KGI+hNOcg4JtGXoSqCqnqnxTpdrQQk6kFTmJ

QVFcTkqNBbFHOeFQUT+Pr0IYF2pYLtNj06WpHWMsvc+h9icH/H8+h8tvJFLjVZcj' +
                    

'F4NlEeiuRGfXtFt5RRUBRXkV9Pl+P5dEnhD2EJa3mLHhynukdCLszZeNYjaVyMVkp9v9TsRBCQYqHwXtkiEikXwH8/j8Oqdv

VybOIkj6uHX9le9lt2XsoA+3j0H68k7WQeJdBTTL5uXqqFCocZbkvPWD/ar6NNl2' +
                    

'sJ3tumRm6voiFwqfFeOoQdzxtYK/U6oBGRFVP/8ArD3vJAoyhIPA0Q5yLRFVKpH7qpgP4McSIUiG08rzvvgzwouK0ad4AS+i

GhL/AA6sVveMecDiOqrt3bOjGINOqrU8p26yx8ld7WUSGDcC1yi2mVY9qJ/pJshZ' +
                    

'kdU4RPQmnRVPy6Q3Jx893ifb4LN4y5rQOSB7SIzyLSI2ny46YI6zG5jzf8jiiqJ8efy66qLpCyY9m8LrRumqoC888/7ehBQO

YCFZf41bwq6mkm0kpgHZEtkm2wXhVXkflz0q0ql71tzg4FY1ZBtribbPtR3n265w' +
                    

'5UY2g90mG0PvQ0b55JBX0IR9VThURVHtJ/YXpidjiDmpPbtxZCaE4H5odRHaGXv7baUGd0dDiuT5FbyqK1kuSGo5MTJrkpv2

wcFtR4VztRHEH4cKidN7nSZDTJG3IgsBALqBcal0PS4zUEGVYe7muZZC+69juNRn' +
                    

'UIIlZHZ99HZBD7YoRdpKq9wp2p+adXlkRrhkrq0VURyaPluw5yYZi9QxCq4Jqh4ZjEN+4lIap9SuBU+62B9vzkvtl8OU4VF6

B9wzIGvhijNY4lTOl/b93VcwX7Gsx2FSNMD3k9k1ign6LyqlFoUdBsV+Ke5KJU5T' +
                    

'lBVF5bND3CooPFLGNYOe+JmzNYYwOU7Lm2+e4K0jYSZONPBCxqL/APFMWD3vKKEaohLwnr8fXrjbFxq91UUigwC0uAZvUa4q

M62jQUEGBC1zCiRcMpgaQ2JGSXjjrEByQsg3HHgjsxn5CiRKhKCIvx6CcNaKAIhG' +
                    

'CUuLU22VyZ+R2dg5eXdxIdkW0991XX3pDxq4444RqqkRESqqr8V6bsaknFEmkw4mjacktg3wn0qaovrx6enTlookSVNoFQ2K

8OL3GK8rx+XSoCKSibB1rOvoLj9eDbntILikhcl2coiqooiqvx45/HopdRdRFvGc' +
                    

'NkVlRMx6taKqmze1yVcyEVrvZa+owRVT6UX19V6KSK1QhA1cJtc82HApa90Icm5eRt5815BpGxVxwvinPaIqqfj0leXrbeB0

hxp7BLWlqZpQwcU7Wy9Tav11RYwMG/YzCqkNxzu7Ft9CaN1xBbNBdaVFQ0X0QRVO' +
                    

'VT4L1mw7ovTcipw5AcPfjgtDi7cszbnDHgSfYJWts4VD17np0dZZ/q1NKjR51RNXtVxY8kVVBc7URO8CEhVUROeOeE5461Bk

gNRnT+1ZvLEWmijUYzabXhORJfn+HStUknY8L8rhQs8dxl5pwbjIDZOpsRcT22Ri' +
                    

'NvPuh2Ki8k4iIiKipx69UvvixdLah4/28fjQK9+n+4shu/LcP9TD4AnHxVhO4bN2xhy4tXeSIWWznFjXR8R0hPsvCntMGckh

4QeE5JPRFX1XrObERvmAcNRcaGmfRade+ZHA5zTpawYfnh1QByO+lM4XepkcpAhU' +
                    

'sNivnSCBFfbMTQyiB7a8ESuJxzzwiL8eOr527sgjDgM3GhPQHBUfuPf/ADWtcaENGA6kY/iqWPKyIzZZrUbDgxPtI2Ywmo1r

HReRZtKZhqCYIq8KolGSOYqvxVST5L1J71CGzVGRH4rKjXUSeKVz5evy6iKrl+/J' +
                    

'OuqhXKKiKi/JOuqgUkx+/l08xiTGeVk2zFWyRVRRUV5RU4/PrmnFIXEIe0gqxfS+4K9ifFsnzbZYktE5KUv5WnQH/UAvr8FH

606VBVLvrA0o3muNsYVS4xmrWwKKsjWuG5s6yFswb8ePFZdlNdzbilIZkM+26qKn' +
                    

'JgqIXHqnPQEUR7C5c+PyyaOb7dEKpLWPyYtrY7ls5OzMtjvR0LCjv1iQYDctTVpJVRTI36+4PBIbxKimArzyKrd4WteaPxP4

LTXPIChth5NZfpyfiUrVFLX4ncy8ecj2qnHN6LBddspTDjMSA8ax2UBGA57myLvR' +
                    

'S55XpKVxZJ9OCBshQE2Du7dW1hUc/wBnXGSR3fVah2Y63XinPP0RGFBgf8A6SoXZpNz+a/ai3PtjRN81kGs8ylUDi/Ta0vf9

xVWMdfQ482E/3MSGTT6SBwFThfl1zQW5Lg9HjdLuH2WBWFnrapZosU2k9judOYqC' +
                    

'n20U2IlpittVsqfKrHjz3Uejoq8oxIbRfVF6EuLijvdUVSzUr70EvdZc7eE+tPkv5dLsCbEopYyNjkc5itq4Ts2fI4RuK0JG

qrzxyn4ev49IX+4wWkJlmcGMGZJoEra2ks7wyMFzjwCtEx39vHZMXWLWfbGmTMSy' +
                    

'LKYzi6i1fErjsMgyeUg8gaRlcYGHAHjl+fKNtlseV5JU7VyG79XazgxNa2ChOp5Ic8DixoqQP6iMcgFfLfsWkZ1uJkyo2hDf

7xyJ6Bc6ht4/29xlGPSa5TjsrUWFT7jD7zU2E6rD7feyqgva4CoiivaScKnovWr2' +
                    

'F+y6gbKz7XgEVwzVIubV0MpY7NpoUPNg5JaSr6ylOWCuNOOi2MUFRBQBTtX4ceiL+PT1owTV2aHWGWbFFtrEbM1NIr0tpp9B

URIVkF7KEikioiKSp3en8vPUdvlsZbRzRnSvwxT/AGmcRXLXHKtPjgmG2kzrqoYr' +
                    

'osDF7C8OFcSrG6mBGdQYrstOG25DpCQk/wAIjiIJKKJ8eFVesuhMjm62nEigyWoEMa7SRlTn+CWncWRMZFf4cy2x7c2qpWG7

Zw17n1efkvSkVwvn3A4Jony7utO2WRzoWuIIJGPjzWcb8Gi4c0YgH2HuUUiB7xCJ' +
                    

'co2PCc9TQKg6JqPGDXeWZztbGWsLiOOP0TyTpsoXAY7GIqiR9puKiKS8oiInzVOmO6tL7Z7B9zmkDxIUltLxHcskd9rXNJ8K

qwnb2T3dcFnjtjRRihHJQ0sRbVmSro+n9QeFVD4XhU/3dYlYbQ6aUxF5jeMSKY+I' +
                    

'K3q+3dsUImDBIw4A1w8Cly3qMqDg+H1bkA6cbl6TIcry+LiMMAoqS8IvKIZFxx6p6/LratukaBprisT3jU/HhXgkfmantN4g

OqcaRg8uyJ8XsOR4waE7aEw+TLKuHwgJIAzY5VURCMSX0HpTcrUSMwzVefTTU8FW' +
                    

'za1lrR2VjS3da/TXNNIdi3FRKZNiVFlMOK06y605wQGBIqEip8eqe6MtcQcCEiFgdyqq9FohRgqqHG6HTVrtu7qnMksWL8KO

qx9xw2a8VGMxYFJkORjFxPRSb7FXgu70/lXqQtLdpbqKT0udIGg0qnq09+2JuPyP' +
                    

'8YG/KDAUhYvaZDLc/tPTryuG5ZwQNQWTFdNe9ptxRVWhMSThF+rjhesr7n9TLTbtx8gsLmDBzmnEE8A3iAM1qOy+mFze2JlY

4B+bQRgR/e4HkkPta3YelcnkY5m2Ny8atYTnbLqprJALnYqipNl6iaKnKdwqqcLx' +
                    

'1ctn3y0v4RLbvD29Mx4jMHoVnW+dvz2knlzsLHdePgcimL1fvClaontdZa397j80VGokkSIrcd4ufZJV/lNokRQX8UTqXB4K

m3+2O1eY3glF1JeUGPZqL2fNzpeH3jD8XKPsTBLBBIhlsPMm76e41KZZd9fj28fP' +
                    

'q1xHS6qvuvmi7uTVlzVu0121YMZPj+Ro7MwzL4/YsW3hvF7ioJJx7b7ZqvvMHwQGpcp8+nrmiQVGaB7Uuzkd9mQYPNGy416E

0QqJCv4Kip0kAkCV7IzwiuFwIl/N0LggBRb1zFyPOren13CgnKro6WUGc4gqDcNm' +
                    

'z9p4nnjNUREZkRmXFT0/lVPxVAcAAnAH0qD0IV/3TSWYvrXJ9UxY4oTggi+q+qFwifFVQSVE9e1fh1F7zuL7a2MjAC4ZAmg+

KX260bNMGONB8V9LvjJSeKHjZrSHsbD5VZf5pBjsO5XtjIWWJFTj0p5lHhZq4Jqf' +
                    

'6hKIV7mnj5b44VBVPVPIO+913F7PqmJklGQI+hh5NZjqd1dh0W7bfscVvFpjGmM8j9Turnf9LegSC+Xf7hmVbWkX2Eafk2bY

XyKuRZVJkg7e3nK9guzH5BC2y18mmlXsH/hElTqR2Ts99w/+RemkdcdROJ/qIz/u' +
                    

'jAJrf762FvlW4q/hQZeA4eJxSd6B8efJB9bg4eA24pcOC/DgQwflqZKicuKUX3BLvReeefXrb7H1J2S1j0CXURwa1x+QWdXP

aO5TO1FmmvMgfmnzwvwJ8uskebdLS+Rgw4ncrhwHGULlfVVKaTAinx9eV/h06l9U' +
                    

'bU/6UUr/APAR/mom7OzZh98kbf8AED8qrrP8edgav2DjGMbB1umP3NxYsC5NkWsCxlxK1h4VddYGC6TTZuonaButqQKqKKd3

Cp21d9219eNtnEse7JpFK14Vx+FRVI7h21c28BmaA5jc3A1p7sPjREzPsJz9bG0w' +
                    

'SjalXEO2tCexemFr3nSjA4SssOGqEvMQT7DIvgKcqqoqL077h7Vnh3Hy4m/TIatplT9lLdvdywyWAkmdR0Yo6vP9/wBkB9k4

VDl57atVMWPbV1SzAgTLR4EZakvxILMeQ4Bui24go8BiCjxyKJx6dW6/uI7Z/lih' +
                    

'0AA9SAK/j0VEtILm6JkAIDiSK5AE4fgtK3rKGERHGAcN5HAUfbJz7dUJfUeHA7/4L3/Dpud6FPpFfH9lMw7C7/cdTw/dOV4w

5VVay2xh5P8AbBqLEXqua6q8C0kweANfyR0RVV/j0wjuHPk1OOal7y1a2DQwYBOj' +
                    

'n2Qjl/kBh1dR1TFhIqUAJMx4R/T5KtCciR7/AD6uKjSdrKj6oXqnw6ib64abyMCmuhr4KwbJtrhs88zgTHUBuOTudOXNIt5b

y49vtBzGID5hX44b32znevcpkfKFz8iElVEX8uepLWQcFCQRDRjjVKJg8uTS7AjO' +
                    

'FFNJP2mRR48ntH2XX/7cng2v9MhIVM1EeET4r6KnpxPR34kbpOarG6bWYmOc04fqq1c22VbbMYqbTL/dtsyr2mYp5m897k2w

rY7AMRWp5KKK+9HAEAJBL3kCIJ93CL1XZpi8CufNQYjoSFBIsWTOlRYMJgpU2c60' +
                    

'xCignc46++4LTYCifEiIkRE/PpuM0Ypp88hwbnH9GeH2NWaNXrlm9L3XLYRH0hWTsonJiErakLqxmxERUVUS9keF9ejdwbvF

tm3vmfkwE+J5fHDwUv2ztjry7AGTjSvTiVcVi37kGu6iA1qvQQWGF4bp6BV4lr6+' +
                    

'mLFOREjQmW2rC3dcFe0jQQJlgU5FVRVXjlOvMk/plvF1J/JpV0oLjVwBBdU08ae4Bbxc+pu22jPJrRrKAYE4DihdvPySstxY

GNPZ4ZT5JjUidMWvyW3pK4rUISgoi6Hsj2+4aqiqRovHqievr1cvTH0vurS/bNdE' +
                    

'NaBg1pNSf6iKAge+qpXePqvaX0RtYAXOJpUjIZ4DgVW1kGpMQsXVcgRVo33vq9yGfYya/Lho0NsU/IBHr0pLtERywWUkBJ97

FjAlOQbBhW3WV7TExUSFUXheUJP93SgTo5o1663PlWtoU+kgsw8rwu2JHLnBLeOk' +
                    

'utedREFHmx5QmXkROEcbIS/HlOjaqZLg4hFaJneuMxOI5D8fpQ2JercdiecmCpIvwEpbXIj/AOnleh1Su5fBH1DktLD1ccKx

kZ3eLE19ixPq5WE4azRjp3ejUUHU7pMgePTgVEV+pURPgOqnUoNIGah2W7MWNSys' +
                    

'L1/CLE8OmGv6rLIkK4uF55IpkhFJeDX6ibQlRVX6iPhOC5lEc4lCiM97Kg42StECorZJ8UVP/H+HRbi1ZNGWOyIogimdG8Ob

mFxd59lYV1Vh9G1KNqE0QQnJLpPsxWydN1EZEl7VQSMlBTRe1F4TrNYuwm/y3SSU' +
                    

'NTwFK+PLrTNXF/dDvIDGYeONPD8q5KW6k/UMTdtbIZSzcgWTV2hSy4cP3quZ76InehdyfWqki+ionC9O+9doDbCjR9IwIphQ

imXikO29wrdVJxPxwV4eO/uuN4rg9PQ215mVi9UM/ahEjXEagrUjsGTTCD9oiEqe' +
                    

'0g8/Dj4deerfYt6c3Qxzi3DIkfgAtTmv9vB1EAHqAfmUN7b91z+4H3Y9Lr6FZvJwgy7ezuMgcTleEXtN0wX/AGdSA9Ot2lxc

K+JJ/wAxTI907fHkT7qD5BZen8r8ivJPO9i3eLU9diDWR1aY8/kIQm4caDHlRHIk' +
                    

'k4kYERFfcYMgRxzlRReUTu4VL/2b6RuhnZdyn6mGtGjM8K8AB0+KrW+d+Mmidbx/a7ifxp4q4am1/LwXDjk39ir81qIrd9cd

v+tmo0PcbQf5AIk/qEnqS+nKInr6a2i61UL8RGK9B18TwWP7lBT6W4OeadT08Oap' +
                    

'WyLIa5nZxxZUdArXZrva8SJ/QkOGQoQfgi93H5dZTOXSSPdxJJWpW4EbGt5AD4Ip2UT7dpW1E1LuDscBUQiVOeOFPlE/NV6L

GaBLPChVi0URkZNfIL78DQ23F5IG3Gy7hUFJE+C/l/h04YCkXPqKFGYd7XLVDjuT' +
                    

'RpMeNl1TcBOt3xHtIpDI+jftivCNEnp2p8UXqreTN/yOIwrWvTktTZfWLe3aA4lujT/VWur86oP2E+4ym+k5XYkgWc90ne5B

HgVVVL0RUVPiq/Lq1FZa0ELRXFyzHs4FxKZB+Tjz7ElUaaFv3vt3ReVte1OOTQe1' +
                    

'ePx6UhfpcDyKQvofNic3mFTbnONO4VmmXYg76ljNlMhCXxQ2o75A2afkYdpJ+S9IzNLXkHms8a6oUp1BeY9jGWrk9xK+0u8b

jPTsDJ4DOAd5HBSijLVoDMRQlQ2yREFHBHvVB56Ws3ta+ruCJO1zmENwqhnSz8nx' +
                    

'nJLnIPvCi2VrF9pyaLrLxkEhUcNW3WiJQVO1E7hVC+Pw56bbzbQ3dGyDUAa04VGSlbK7dZRhsJpgRXP2qiviEMqligxqCK/q

ORG3JsiT1IWCL+k2q/H6vUy/w6FxJUFdSaquOQy8easfyGXCg4QxXsEitw4oRQVP' +
                    'UfceDgl/wVen23xkzNpwVd2tpddV8fkgPENwDWM+Kq0S+hf5VX5p1b1c1//Z' +
                    '" />';

var mwapLogo2 =     '<img src="' +
                    'data:image/jpeg;base64,' +
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABAMDAwMDBAMDBAYE

AwQGBwUEBAUHCAYGBwYGCAoICQkJCQgKCgwMDAwMCgwMDQ0MDBERERERFBQUFBQU' +
                    

'FBQUFAEEBQUIBwgPCgoPFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AA

EQgAUAJYAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkK' +
                    

'CwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWx

QiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRF' +
                    

'RqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ

2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNh' +
                    

'IgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU

5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo' +
                    

'+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A42X/AM6Z3gk8IY/ikz8uaBq3m3W7Py7ocKz6pfMy

wRu6QpSNGkdmeRlUBVVmNT8t8rzamOKPFJni00s0uGI+xkOu/lP558v67p/ly6s4' +
                    

'ZtX1T0/qkFrdW8/97L6KmQrJSMFv2pKL13+FqY8e0sRBO+zfLszKCBtumHmf8kvzH8oaPNr2q2Nu+m2xjWd7W6t7iRPWkWJP

3aOXNXdV+EHrjj7SwzkI7i0ZOzc0ImWxruVPK35JfmN5u0S28waVZ2y6bd8/qzXN' +
                    

'3BBI6xuULcHfkByUgcgK0r0ocGTtLDCRib2Tj7NzTiJCt2Fazp2q+XNWu9D1u2ez1SxkMNzbuASrjwKkhgRurKSGG4JGZuHL

HLHiidnDzY54pcMhv7kIt0f8xltfi2ri/FKi3X+dMa/FsuL8Uy7S/IfnLV/LT+bd' +
                    

'P05ptFWYWyOHjE0slQG9KEsHdVr8TKpA3/lamvnrcUcnATu7CGjySx8YG32q03kDznBqlnoY0/19dvYEuk0u3kimu445aFRN

Cjl424srlXAIU1NKGkYa7FIE2QAznossSBQJKVa5pWt+WNSk0fzBZTafqcSq7206' +
                    

'8W4yCqsOxB8RmVjywyC4m3GyY54zUhSBW698sphf4pVW698Cb/FImzM97dQWVsOdzcyJBCpZUBklYKoLOQo3PViAO+V5JiET

I8g244mchEcyy/zh+XvmzyJa2t55hit44LyQww+hdQTvzCl90Ry1KD7VKDv1GYeL' +
                    

'W48suEXbmZdJkxx4jVLPJ/kjzJ54t7+70AWrwaY6x3ZnvLe3ZC6eoCUkcMF4/tEUO9DsaObW48UuE3a4tJPJHiFUkulwXera

vZ6JZGM39/cC0tw80UcRlNQB6rOEoabEN8X7NSRls88Y4+M8muGGUp8A5px5t8s6' +
                    

'55H1G20vzAsMd3dwNcwpBcw3H7tX4EsImYrv05AV3pWhpDBqoZiRG9mzNp54gDKklW69/wAcyqca1Rbv3/HBSbVFu/f8cFJt

UW79/wAcaTaot37/AI4KTaqt37/jgpNqi3fv+OCk2qLdDx/HBSbVBdDx/HFNqgul' +
                    

'8fxwUm1RblfH8cFJtUW5Hj+OBNqouV8fxxVUFwv83/DYEqi3A/m/4bAlUWdf5v8AhsUqizj+b/hsCqizj+b/AIbAlUEw/m/4

bFKoJv8AK/4bAqoJf8r/AIb+zFK8S/5X/DYEqizf5X/Df2YEqizf5X/D/wBmBKos' +
                    

'3+V/w/8AZgVUE3+V/wAP/ZgSqCb/ACv+H/sxSqLN/lf8P/ZgSqLN/lf8P/ZgSqrMP5v+H/swJVFm/wAr/h/7MCV6zf5X/D/2

YFVVm/y/+H/swJVFn/yv+H/swJVVn/y/+H/swKqLP/l/8P8A2YEqqz/5f/D/ANmB' +
                    

'Kqs/+X/yU/swKqLP/l/8lP7MCVVZ/wDL/wCSn9mBKqs/+X/yU/sxVUW4/wAv/kr/AGYEqq3P+X/yV/syKVZbjwk/5K/2YFVF

uP8AL/5K/wBmBVVbgf78/wCSv9mCkqy3P/Fn/JX+zBSbVVuvGT/kr/ZgpNqy3P8A' +
                    

'xZ/yW/swUm1Vbr/iz/kt/ZkaTast1/xb/wAlv7MFJtWW5/4t/wCS/wDZkaTaqt1/xb/yX/swUlWW6/4t/wCS/wDzbgpNqq3X

/Fv/ACX/AObcjSbVlu6f7t/5L/8ANuCk2qrdD/fv/Tx/zbkaTb8vuf8AnQ52oLxR' +
                    

'iyT8t728s/zI8pTWN1Layy6pa2srQO0fOCeVVkjahFVYbEHqNuhzXdoxBxX3Ox7OkRlodXqn/OTPmPzFpPnvSrLR9XvNLgl0

hZZPqEz2zs/1mZal4yG6bdc1egwQyyIlydl2hnniiDHn7mW+Udc12b/nHjVNYutU' +
                    

'urzVoRO0N/dStPcKY5E40d6k8TuK5h5YiOQgcgXNxSMsYJ5kPNvyD83+b7/81dH03UfMWp32m3MF4ZrK7u5poD6VuzJSN2Kj

idxxGbPtDS48UQY9fN1fZ2qyZZSE+g7qS78+lim/OjVbe4uY7WGUWKSXU/IRxJ9W' +
                    

'j5O3EE0UVOwJ8AcyOz84w6eUvP8AU4naWnObUwj5fpKJtfJP5GXdxHa2/wCb6PPKwSMHRLlASdhu0wA+nH+WJ/zPt/Yn+RYf

z/s/alv5p/lZf/ltrllpsF4usWOpxiSwu44zHI7dGV4Q7lSD0+IgjevUDO0vaMco' +
                    

'lxDh4RfwcDV9mywmPCeLiNcuvzfQ8H5T+cG/Je18hR3VtZeZaCaStyUiTmSWhaWMGjANxbjUe9M5nxIHNxH6eK/hb1QxzGHh

H1cNfGng/ln8sGtfzFg8j6l5ottNuGZhPqOkTzXDRXTB+MSyD0/3hdAG4vt3Nds2' +
                    

'+fNg8EcMNjL3cg6bT4dR45EpixHnz5nkp+f/ACppvlv8xx5a1HzHdXOnxC1XV/MmpRvI8SSAMz0MsjuI42XiCwJPw+Byem1M

MeCUoxrflbHU6aeTURhKV7c66JrZ+UfyQvrmK0tfzaR7iZgkanRrhQSdhUtKAPmT' +
                    

'lf8AK0v5v2/sbR2TH+d9n7Ul/NPyHL+WXmOHRG1BNStrq2W8tLpUMTshYowePk3Eh1I+0aih9hsdHrBqAdqIdbrdIdORvYPk

xCyv7m3vbS5s7iS1u4Jo5ILiFikiOGFGVh0I7ZbrMYlhlfdbXo8pjmjXfXJ9Hf8A' +
                    

'ORsjjyp5TkkcvIWYtI27MTDHUn3Oc32d/fj4/c9L2iawH4felf8AzjU/qaZ5+b2tP+oebD2l/fn4I7NN4B8Xk3kSbl588ox+

Gt2f4TZsNSP8Dj7ouv05/wALl75PRP8AnJacW/5h6U5NP9woHhv9bkoMxOzZCPHI' +
                    

'9A5faMTLgA6lJ4bD8kGVOf5rqkzAco/0LdEqx6rUSEGh22y3+VJfzfx8mv8Ak2P878fNEeffIVn5R0XRPMei63+ntE1n1Al1

9X+plCoVo/gaV3IcFt6CnHfrmVpdf4s+EinH1Oi8KPEDaaeWPyz0rX/IB88y+Zfq' +
                    

'3pmRZ7JLZJFiZZOChpWuIwOSsjmqigbv3oydpcMzEDYHvbsfZ/FASvchKvM+g+Q/LGlRzN53i1HXHTfTrG3S4jWVIzI4M0dw

3wLTj6nDrTapplmPXGc6rb9DDJoxCF3v+llrfkzBp2lWOo+YPNNppZuJvTujKqLB' +
                    

'FFR25JJLLEZG4qPg4Dc0rQVyB7R3OzMaDYbsb82aD5B0GwWXQ/PEWvatK1IdPgtkSqKRzdnFxJxCg/ymp+8T0+tllmI8NMc+

kjjhxWwxbv3za0621Rbr3wUm1Rbr3wUm1UXfvgpNqi3Xv+IwUm1Rbv3/ABGNJtUW' +
                    

'7Pj+IwUm1Vbs+P4jBTK1Rbs+P4jBSbVFuz4/iMFLaql2TsCT8iMaTaqt2f5vxGCk2qLeHx/EYKTaqt4fE/eMFJtUW8/yvxGC

k2qreH+b8RjSbVVvD/MfvGCk2qreH+Y/eMFLaot4f5j94wUm1Vbw/wAx+8Y0m1Vb' +
                    

'w/zH7xkaTaot57/iuNJtVW8/yv8AhlwUm1VbwfzH/glwUm1VbsfzH/glwUm1RbseJ/4JcFJtVW6H8x/4JcFJtVW5H8x/4Jcj

SbVFuR/Mf+CXGk2qrcf5R/4JcFJtVW4H83/DLgpNqi3A/n/4ZcjSqq3H+X/wy/0w' +
                    

'UlVWf/KP/BLgpKqs/wDlH/gl/pgpVVZz/Mf+DT+mBKqsx/mP/Bp/TAlVWY/zH/g0/pgVVWdv5j/waf0wJVVnPdj/AMGn9MFJ

VVnPZz/waf0wUqqtw3dj/wAGn9MFJVVnP85/4NP6YKVVW4b+c/8AIxP6YKTbzf8A' +
                    

'Pz81dZ/KL8vV836JZW+o38t/Dp6xXrsYUE6SNzIiKliDHSnIdchM8MbUbyp8m/8AQ835zgmlpoIB6D6lNt/08ZR4pbvD8y2n

/OdH51KKNa6Cx8fqMw/VcYPEKeDzbb/nOr87CBwttBQg7kWMpr7b3GDjKeBCRf8A' +
                    

'Ob/58RzNK1zpMsbfZgfT14L8irhvvbBxFPCEUv8AznX+eSyFiuiFCABGbB6AjuCJ67+5wcRTT7H/AOcb/wA0vMf5sfljB5u8

0G3j1hr+7s5BZBbeHhblOBCOzkGjb75MbsTs+GzJ/nvnXAvIkfjdkX5dvX8xvJw/' +
                    

'7XVh4/7+XMHXn9yfg5mgH74fF6X/AM5WGn5i6N/2xR/1Fy5hdl/XL3Ob2oPRH3sy8mGv/OMmsH/Iuf8Ak4ma/P8A3sveXYaf

+5j7h9zyn/nHRuX5x6D/AMw9/wD9QzZue1fpj73S9kj1y9yffmlpNl5g/wCckovL' +
                    

'+otIljql3plpcPDT1BHJBGGK8qitPEZj6bPLFppGPO2/VYI5tVGMuXC9B/MDUfy9/LnzjpuhWf5P2+qfXDG1lqCSSIryOyrx

SMrIJCrMoI/DKI5tRlhL1bAbt8sOmwzj6dyduaR/85bzML7y5LGxjZ4JN0JUgMWq' +
                    

'Kof1Zd2VATySBFjh/SGjticoY4yiaIl+gqdyg/6FUtjyfeYOTzepPNuprWntmLGEfzPDW3FX2uZKcvyvFe/Bd/B5h+QwjT8y

9CjjUKonUgCvUyKSfxze9qY4w04ERQv9bz3ZOSU9SZSNnh8/J6d5z8u2XmX/AJyY' +
                    

'h07UlEunyTWL3VuwJWWKCCJ2jNCNnHwnNZgzyw6WRjzMq+x2uo08c2riJchG/tZB5u8w/l/+X35iWnlSy/KGHUJ3a2NrqUTy

DmbmgBihdXD8WJX7XUeOU+JqMuKUjK4jm3+FpsOWMRGpHlzYj/zljJ6fnrQz46Sf' +
                    

'H/lpk8Mzexvrl7nA7cNQh7y8OsrjleWy16yxjv8AzjN9qh+5n/VPd3PPaOX76H9Yd/e+vPz68p+ZvM3knQH8t6Xcaq9gVa5h

s42mmVZY0VSI0q7bjfiDTqds5Hs+cYZgZGhv9z2naMJTwERFnb70p/5xz8reY9F0' +
                    

'3znZ63ps+nahem2WCyu43t7j+5lUFo5QrAMT8JOxw9oTjPMTE2NkdmwlDCBIUd3lfljyB598vfmD5futb8t6lZafYa3bG5vZ

rScWwC3AWol4FGBJAUqx5dq1zP1GfGdIIg71HZ1+nw5BqzIx2uW+7JP+coZBH+Yu' +
                    

'hKekmkpH/wAHeOtformN2fMwjkkOgcvtCAnLHE9ZM4/MtfIn5SW+j29v+WcXma3ljWFtUnne3YywrT94yoyNI4UuQFUeGQw5

tTmJEZM82HTYQDKP3lCfntfpe/lr5Wv00saIkkwI0lRQW1Ep6dAFpxp4DIdnf38f' +
                    

'j9zPtE1gl8PvY15XuUT/AJxm82hlZzcalcRqEFaGtu1T4Ci4NX/jB96dIb049zxqSf1YnjD8S6lQ1K0qKVods66cOKJHe8lD

LwkHu976Dj/OmPXfKNhaa9+Wt35jvAUFxwBjsTLGpVpYJF5uAW6KdwKg5yw02aEr' +
                    

'iR8w9QdThnGpA/IoL83NF8u2/kry15n0jy8PLV/eTSR3mnhmYgMv2ZOVTyVk+HpsTUV6X6HVZJZRGRsFq1umxwxGURRDxlbv

3zoqef4vxuqrde+CmXF+N1Rbv3wUni/G6ot174KTxfjdVF1740y4lRbr3wUniVFu' +
                    

'vfBSeJUW698FJ4lVLknpgpPEw/zP+afl/wAr6j+jLhZ729Va3EdoFb0TsQH5Mu5BrtmDm1kMUuE7nyczFpZ5BxDYMduvzr8o

X8P1e70rUpISQxVeKbjpUpKpzGlr8UtiC5EdFkjuCE00/wDOzQ7uRLTTtH1e6mUA' +
                    

'LDDCsz0GwqBIT9JycddA7CMmJ0cxuZBn2leYP0jZJeT2d3pruSDa3sRjmWhoCQOQ36jfM2E+IXRHvcWQo1YPuTUXRHUn8Msp

jxKi3Xv+rBSeJUW79/1YKTxKq3fv+rBSbVVu/f8AVgpNqi3Z8f1Y0m1Rbz3/AFYK' +
                    

'Taqt37/qwUtqq3fv+rBSbYx+ZHnW48leUZvMFqqvcpPFbxrInqKTKT1AZfDxzHz5PDhbbihxzp4BJ/zkb5+klZ/rUEUXL4Io

rKH7NT1MjOa9M1f52f4DsfysfwUysv8AnJHzdBpU7Sy2dxqjXVLaO4t2ULalSeTm' +
                    

'IBag0G2EayVdLYnSxvrSby/85G64tzKINR0qS0MDNAfqV4ri4CLRXqPsluX2e2TOrN9PkxGm9/zUm/5yR80oun/6Zo5Z2Yal

xtbusa+pQFAaV+Dfqd8j+bltyZflh5sy/K789L3zX5jbQdeu7NpbtiulRWVtNGzB' +
                    

'Fd29RpAVHwqO4y7DqOOVFhkw8MbD3Jbw+J/4XM7hcW1Vb0+J/wCFwcKeJVW8Pif+FwcKeJVW8Pif+FwcKeJVW8Pif+EwcKeJ

VW8Pif8AhMHCniVlvT4n/hMjwptVW9bxP/CYOFNqq3reJ/4TBwptWW+bxP8AwmDh' +
                    

'Tast8fE/8Jg4U2rLfHxP/CZHhW27nV7XT+P6QuobMuCyC4lghLAdSodhWntgISJKtprFteR+rZ3MdzDWnqQPDKtfCqEiuCk2

i1vT7/dHg4U2rLe/P7o8HCtvCv8AnMuVpfyPiY1p+nrHjUKNvSuP5cozD0s8f1/B' +
                    

'+fOYLluxV2KuxV2Kv0b/AOcI7nj+SIQ/sa1fj4fTPVYTvy375fAbNcju+Vat/mc6gF5cxVbLUNS0rULPVtKnFtqenzx3VnOV

WUJNEeStwcFTQ70IplWbGMseHkzw5Dilxc0w80ecPNnnXUodX836kNSvraD6rDKs' +
                    

'ENtxh5mTiRCqqdyTWld8r02lGEkg3bZqdScwAIqvNl+gXf58XPlJ/LnlrT9QufJlyGVreDSPWjkWQ1NJzGXNadVfMXJo8ZmS

Z1ZcjHrMggAIXQQGk+V/zl8jalF5p0Xy9q2l6hZJKqXkmmSTqiSrxclZI2X7NRuM' +
                    

'y9RDHnAHFVe5w9PPJgJPDdsX1/zV5m8y65J5l1vUGfzIWjP1+BFtZEktwFQhYwFDKBTp8++Tx6KMcZgTYLDJrZyyjIBRDK9Q

/Pn84dVsRpmoeapXsOJV4IYo7USKylCsrW4jZ1IJ5Kxocoj2VAcyfk3S7WmeUR8/' +
                    

'2JB5r/MTzf54Fqvmm+hvFsRwsxFbRWvpp/IBCqgqPcZl6TQjBIyBJ27nC1mvOoiIkAb3zXv+ZXnN/KieR2v4T5VjFFsfq0Qa

tSeXqgeoWqf5qe1MgOzQMvicR53ybD2mTi8PhHKuflSnpY89eS/0f540yzutNtyy' +
                    

'mw1ee0L2kjMCV4NKhRvs1FPD55l6nFDUR8Piog24Wlyz00vE4bBFKGr+efNeueZY/Oeo6jXzTC8UkOpQxRwsskC8UYIgCggb

bAfflMOzoDEcZN2bvub59pzOYZAKoVXeyXVPz7/N/WYVttR80TG3QHjDbItkjFip' +
                    

'+MWvpcwCuwetO3fKI9jwF3I/JyJdtTNVED4sd82effNnny/t9S83X66he2sJt4JUgitqRFi/EiEKDuTvSuZuj0I05JBu/Jwd

br5akAEVXmkazkGoYqRuCCQQfEEdM2MoiQIPIusjIxII5h6Dp/58/m/pmmQaPZeZ' +
                    

'+FjbRC3gD2drJKsaiij1Gj5VA2BrmgPYsL2kfk9EO3J1vEfNIPKvn/zr5Iu7i/8AK2tPZXd5GIbxpI47mOQK3IH05lZFap6q

vt0y/L2TjmI0SKFe9x8PbGSBlYBs3z5JldfmV+Y3mPzFp2uXeqi+80WrwRaTPHaQ' +
                    

'q6vFMZIlWKJVVz6jVAKmp8crHZEIxIMjv1rk2HtmcpxIiNul8/sTHznZfnP5sn/T3nvStUuG0+2aL662mPYrDbqxkJZoo0UB

TVuR3HjktNpMOOxxiXEK6frY6rWZ8vCeDh4DfX9Trb88vzgt9Kg0WPzhcJp0Cxov' +
                    

'oxxQXJSKnEG4iVZewqeW/fIR7GgDZkSPczl25MxoRAPv/YlusfmR538x6Va6Fr2qx3mkWbc7aD0I43RvH1VHNie/Nmrlun7L

GHIJiRNeTTqe15ZsZgYgX5n9ShZ+efNth5buvJ9lqccXlq8leeaya3ikYyy0q/qM' +
                    

'OddhQVp7YMvZYyZDPiO/l+1OHtc48YhwjYd5/UlYu9vhZa9uRJH0gUP45tZwJBA2+DqYZQCCd/iXoV/+fX5sX1jFpdv5jGk6

XAESC20mL6n6cMZXjFGysWVaKFpX7O2aWPY8RIEyJ+H7Xey7bkYkAAfH9jFtR83e' +
                    

'aNetdOsNf1h7+w0kOLC3KJEqPJXnIxQAu5qd2Pf5Uv0/ZscM+OyT7mjUdqSzQ4KAHv8A2IRbv3H3nNnwuuGTz+1UW79/xwcL

IZPP7VVbv3/HBwsvE8/tVFu/f8cHCy8Tz+1UW798HCy4x3/aqrd++DhZcf4tUW7H' +
                    

'jg4U8aqt2PHBwsuNu7uiNG1SValo7WdhQ0NRExFD2ynNtE+4t+E3Ie8PBdK06CzuY720lnlkl4oJJKOCHYGtAoP7HjnMQgAb

D0k5kii3+m/WuY9KsYvW1CUtCjM/BFm4cASGU1oanr2weJZ4RzXw6HEeSfeT/LGk' +
                    

'6tHa6jcebL3TNfvrSW+ufQdIljiWcxDnIXBFTQhT9GZGDDGVEzIkRf2tObNKNgQBiDX2MvsidLU2UH5n3HEVk5TW0VyRsCR6

knM9N+Ncyo+nYZfscY+rfw/tTa2nvLiRYYPzFjmuI/jaO4srVFZQRUEnhsa02bLY' +
                    

'k3/efYGuQFf3f2lmYugGK8lJABPEhhRhUHbsR0zY1bg3SvBK0rFU3IBb7sBCRJAadrsF9eanaxSq72E6wyKpqVLRK1GFBTfl

lcZCRI7i2SBAB702+twW1tLqF9Ktvp1spkubiT4URF6knwwyIiLKI3I0Hivm38+r' +
                    

'+TUzpvlaIWmjwzcJNRjCTXVwitQmESK0aBh9nkrH9WaTNriZVHk7fFoxVy5sqg/PWzjgHq6FO3pKA5MxeUkDflxtgOXjTMka

vb6T+Pg4/wCW3+ofj4qVz/zkLp4hHDyzfMH+yyuuxB7gxjI/nf6JZDSf0gyvyb+Y' +
                    

'mn+bkliW3l07VYKvLptwD6qw1ULJXiooxbMvDmGTaqPc0ZcZhvdjvS7893ZvyrnYGga/tCRTqObbfhmPrh+7+IbdGf3nwfKG

c87tH2dvM9uZRLGkXKlGRZHJ+kVpkwNmJKskEpcKLhBy/aECVB7eH68NItX9O6bp' +
                    

'c8wNqm2hP4sa4d0Mw/JyOa2/MvQ/UP7pXmKn0owSwt5AKkGozI0o/ehp1B/dl9erd/50Gb+nUWqrd/58RgpPEqrd/wCfEYKX

iVFu/wDPiMHCniQ3mHzPoXk/R4te8z6gmn6XLKtukxhkmJlcMQvGJWO4U5VknGAs' +
                    

'tkAZGgwa/wD+ci/yrsLiOCPU7q9B5erLbWLlI6Db+8KciT/LmKdXjDeMEy1D/wA5L/lMUDy3moqf99/o74vv9QjB+bx/gMvA

msk/5yj/ACoik4oNYmj7yJZQgfc0wOROrh5p/LzdoX/OUH5Y3Noh12a/sb/4/UVL' +
                    

'H1Iqc24cSkjmvDjy964I6qHVJwT6Jof+clvyfCMy6veFh9lG02YV+kVyX5nGjwZs48oee9C88aR+nPLkrz6d6z2/OWAwt6kV

Cw4tv+0MvhITFhrkDE0WW6ZMk97FFIvJGrVSopspOExY8T4n/wCcnvNt75j/ADZv' +
                    

'fL+sRRNpnlhjp+miAi3f0p0jmJldxICQzHfiNs1GeVzo9HPwxqNjqlv5Tfnpr35V6TcaJp+j2uq6VcTSahIsjsksbOI4iS6B

qACMbFe+DHlMBVMpwEi+sfz1/Nif8ovK3l/WdK0mDVbzXZGiH1uR44ogkKyluMVC' +
                    

'1eVKchmZmycA5OLijxEvE/K3/OW/nXXfNOj6Lc6FpMFnqd/bWcjRC4Mkcc8ixsVLSEEipIrlEdQSQKDkHEALt7L/AM5bzCT/

AJx/YgV/3KaevQChV5B/DLNQKi04frfnrmuc52KuxV2KuxV94/8AOHmv6dp35X2+' +
                    

'i3t7bwapqOr38mmWEjxC5uEVIgzRRswdwCrfZHY5mYapx8nN4QYs3YLqjBr08lbAwer/APOOHlXSPNP5q6faa5brd2Nlb3Go

fVZQGiklt1Hph1OxUM3Kh60ynPMiGyceMcW70z84P+ckPzD8pfmDrHlTy2bC00rR' +
                    

'3S2j9W3E8jn0kcsxZgBu1AqgUGU4dPCUQTe7ZPJIGgxby/8A85Yfmq2uadFqMmnXdjNcww3FuLUQs0csiq3F0aqmh2OWy0mO

urWM07Tb/nL3yfomnebvLmuafbLbXWurNDqgiARZXt5IwspAFOZWSjHvQYdFkPCQ' +
                    

'ejXqsYJBYR/zkP8AlR5Z/K3WdC0/yzJdyQalZy3Nwb2VZWDpKEHEqiUFMyNNnlkBvo4+o04iRTznyL5fs/Mnnby95e1FpFsN

U1C3s7loWCyCKaQK3EkGhodtsysmThiSOgcaGHikAfvej+ffy5/LL8vvzni8pa7d' +
                    

'6jD5BSziuLy5RxNfCSaF2XiUj6cwo+x0yjFnyTxcQA4mzJp8cMlEnhfQHnSy/JiT8ifKlr5h1HVYvy1jktjot3ApN87BJvT9

VfTNKgvX4B2zX4jl8aRiBxdXPyxxHEBInhfLX5m2H5I2unWDflVqWq32pNOw1FNU' +
                    

'Uoi2/D4SlYk35e+bjBLMSfEAA8nTaiGED0Ekst8i/kT5Yt/JcX5m/nLrknl/yrd8Tpdha0N5dK9Sjbq5HMAlERCxX4iQMqy6

uXHwYhxHq2YtHEQ48poJppvl3/nEnzleR6BpGqa75c1S5YRWV/fkfV3lbZQxkDqK' +
                    

'n+Yp88icmrgLIEgzGPSzNAkF5b+ZP5U67+V3nCHyzrpWe0u2STTtRhqsdzbNJwLAGpVh0ZT0PiKHM7BqI5ocQcHPppYp8Je6

+fvyd/5xr/LK9stO836v5htrq/hNzbLARcAxq3AklLfbcdM1uHVanKCYiOzsc2l0' +
                    

'+I+on8fBItF/Ln/nGHz1qMPlryj5w1ux8x3tY9P+vwj0pJqEhaPCgJNPs81J7b5bPPqsY4pRFNUdPpsh4YyNvGvNvlnzH+U/

nqbRbyVU1rRLiK5s7yEco3AKzQTIGB2Io1GG3Q5scU45sdjkXW5ccsOSuofT/wCW' +
                    

'/wCYPnD8wvyF/NDUvOGptqV7aW93b28rRxxcYjY8ytIlQdTXfNLnwQxajGIiv7XdYM08unmZGzv9z43V2oN86KnnHtvlSw/5

xln8u6Y/mzWdfh80NAp1WCzjZoEnqahCIG2pTuc1mSWqEjwxjXR2uOOl4RxSlbLf' +
                    

'L/5d/wDOM/nrVYPK/lTzJ5gt/MF8HFi11CRGXRC9DzgUHYE05CvjlE8+pxjilGNBvhg02Q8MZStin5f/AJOWt/8AnZfflV5z

uJWh0+O6Mtxp8gjaQwxrJE6l1agZWBKkZkZtVWAZIDnXNxsGlvOccydu4vOPO+l2' +
                    

'3lzzn5g0CwaRrHS9QubO2MrhpDHBKyLyIAqaDfbMzDLigJHqO5ws0eCZiDyPe9H/AOcefyz8u/mnq+vWHmSW7jh0yyjurc2c

qxMXeQoeRZHqKZh67PLCAYgbnuc3QaeOYkSJ280F+S35UH81PMOp213fvpvl3RI/' +
                    

'X1K5jo85VmZUSMMKAnixLHoB0yWr1HgxFCyWOk0xzSNkgDzZT9V/5xHjZo/8ReY5OBKmVYn4tTuP9HGxyi9X/Ni5FaQfxSWe

afys8hav+W2qfmf+Tmv3eq6boLONX07Ul4ShIgrScCUjIZVYPQghl6GuVw1koz4M' +
                    

'kRv3NmTRxlDjxyO3ek/5N6P+TH5h2th5Z8xazqumfmPqlxPDZw2y1tSqgtF8TROnIgHYsPow59TkgbiBwrg0+OYqUjxMt8ye

R/8AnG38v9bbyf5v82+YJfM9vHE12LZB6fKZBIoASBlBKnlx5Gg75Xj1OfJvGMWe' +
                    

'TT4MX1Sk8o88v5Gtde9L8vL28vfLf1eI+vqXw3H1klvUFCifCBxptmzwiZj+8AB8nW5ZwEvRKx5ljy3f+V+OW8P4pr8Tz+1V

W79/xwcP4pl4nn9qvNc+poWuR1/48Z2rWv8AupxmLqY1jPuP3ObpJ3Me8PIkupUh' +
                    

'RnQw8eFYASVWgYAchx6jvTOYvZ6it2GQ3M9rfpdW7mO4il5RyClQeXXfMAEg2HNIBFF6R5ih08anPBZWcNpb2JktLf0Fp+5Q

yH7RJJqd+ubPMBxUBVbOuxE8Nk3e6ASIeihqprE/Ku/SFen35XTZa25ggkMgJHwx' +
                    

'1FF2qZFHY4JAJBLNvKPmaeG+TRbmjwyBvRnIpIChchWY7sKDivhm00eY3wF1mrxbcYeo29zFpscEswMt9e1Sys0IDysqGQqp

YgA8VJJYgDNhkmBs4WOJO7CNHg13SPMOq3l9o8Fnaa3Mkz+heRXMsUyrQ+puuxqS' +
                    

'AoqPfMPTiYmbiPV525ecxMBUvp+Cl+eepz2vkjS7GCiw6jcqJ2FQ1Ioy4AoQKEn4q5R2lIiAHeW/s8AyvuDyHyPpMet3ctvK

pY2yiWFlbhwYupLHb4gOIPGvyp1zA0OEZZEHo5usynHEHvewxW8UUvqNGEKAN6yu' +
                    

'wBduXL4STQfEetevtnUiIBedMiQxV/PcsXrxtBFK619CaKWsX2QQTuSR8XYjNcdeRYofNzxowa3Z55I1u31P15ojSVVCSxn7

QIYgGnYNSozLjlGWNhxZYzjNFF/nWwP5SSk9WurRh9Mp/hmt1/8Adn3hz9Ef3g9z' +
                    

'5VznHeqkMLStUJzUEcgGVTT2JwgIJWOoDMAvEAn4a1p7V74pW0HhgVm/5QMsf5jaG+wo81Pn6EmZmj/vouNqj+7L61W6/wA6

Z0vC6HiVVuv86YOFPEqLckg0BNAWNFJ2G5O2AhIki2kig06LVry6gtLGZlWKWcsg' +
                    

'YvutNj9rtlcpRjuWYBPJ5d+emu6L5u/LqDQvK+o2+saxYagt1eWdmxaSOC2ilMrlWANE5ry8K5rNXOM41E3u5+niYyuWz5i0

nSrjVpDFa27TMimRysscYWMMoJ+MduWakC3YyNPX/wDlW/5Uh7mNNWvLh7fkiKt7' +
                    

'aReo7IXi+J0KqrUoWPQ7dcy/Cx97h+Lk7mKfoP8ALhESS4fUIgYbWaRRPzI+svwZQRaUPp/aY/tD7NTlXDBu4p+X4+LC9esr

XTtYu7OxlE9lE/8Ao8oLNWNgGFS6RmorQ1Rd+2UyFFuibG6XZFk+q/8AnHrzR5X0' +
                    

'T8uvq+teYNL0u5bUbpxb311HDNxKx0bgxrQ02NM22lyQjDc9XX54SM9g9Uv/AM5PJOh6YbjylfW3mvzJLHOFt7CQyxW5iiLh

5ggL8GYLGvAFnZgoy2eeP8O7SMcuuz4q/MLzEPOPnrW/Ms8tG1KYTOwiaMCQRIrI' +
                    

'IyeQVWUqvL4qCp3zUZJcUiXZQFRASyH9EJbP62p3DXAkFvHDHb8o/qjMGd+TyrQ13WPjuepGDbvTv3PpTzlruk/m/wCQND8x

+fNfj0byrpElwLPTNItF+vCNXFsJ5TPcS8nZVUeitBVgeVKnMyfrjxE7OHEmEuED' +
                    

'dKY/yt8mpDoXnvyjqEFrpVg1vPDdO8t3zuLaUcmunXgoYuvxCKLivuN8RhG0gVOc2YkM1/MLzu/5wflXdeTdBaxkuVu7aRLr

144IpLu2md5VVnkIZDE8ZQgBuVQQKjJTJyDakRIhKzb41zXOwdirsVcDQg0rTsem' +
                    

'KvXfy48l6j5n0aPULbS9CuIprx7dDfwzGSsXp81JjYALRxTqa1zLxYzIXQcTLkETVlkOraB5i8paJc6+dL8v20OjsCHtLadr

lBKWQ8OUi0Vv2iGFRk5QMRdBrjMSNWd1cx5suJgYtenkuJiYvbP+cU04/m0h/wC1' +
                    

'Xe/8y8pzn0KI09M/Mb/nIe28n+d9a8tP5I0/U206YRG/mkVZJaxq/JgYG3+Kn2jlUMPEAbKlj1j/AM5S2l1fWlqPy80yMzzx

QiQSpVfUcLyH+j9q1yz8v/SKL8kf/wA5i8Y9Q8kO5+CNrxmPsskBJ/DDpDsWGQXT' +
                    

'X/OVHlLzJ5tvvKmv+WNLudZ0j6hJGbnT4zcgGWQSoSIwTRlNQ1KYdLMRsFjlhxU8i/LL8vvPFh+Y/lO9vfLWqW9nb6raSzzy

2cyRxosoJZmKAADuTmVkyxMDuOTTHERIFOf+crY+X5wXZ/7V1j/xBsGkNY/iUZ4X' +
                    

'Jn/nPQtX8y/84reRLTy9Yz6rcwPaSSw2UZnkVIxcRsSqAmisQDttlWOYjnkTsynAyxAB806r5D846RYy32raBqNhYpRXurq1

lhiUueKgu6gCp2GbOOaJOxDgSwSHR9Kfm75f1T84vyi8jeaPy/jbU7fQoDBqWjWt' +
                    

'Gmif0I4npH3eJoivEb8WqNs12nmMOSQl16uXqMZywBj0fO3lz8qvPvm7VY9F0fQb36zIwSWa4ge3ggBNC8skiqFC9fHwzay1

EICyQ6waWcjQBe1/85S6ppv6X8geSYLxdQ1ryzAiatcggsryfV0VXP8AO3pGQr1F' +
                    

'RXMHQA1KVUJOXrRZjHqGX/8AOUf5U+f/AMwvMfl6+8n6M+qWtlp8kF1IksMQSRpi4WkrqTtvtlWg1GPFEiRqyy1+nnlI4Rbz

z8pP+cdfzW0j8xPL2va/ow0nRtHvI7+8u7i4gYcLc8+KrG7Ek0p4DqTmXqNdiOMi' +
                    

'JslxNNosscgMhQHuYz+f14v5j/nRqv8AgeKXXfRggtF+oI1wZHs4gszRiMEsimo5Dbbwy/RDwsI49ve06397mPBu9W/JHyr5

n0v8hvzO0nUtGvrPVL5Ln6lZT28kc83Kx4D00ZQWq22w65g6rJGWoxkEUP1ubpcU' +
                    

'44Jgg2f1Pl/UvKHmfQEtpvMejX+kWdxIsK3F7bSwKT1YKZFFSFqaZu45YS+kguklhnH6gQH2f5/vfMv5P6H5a0v8lfI1prGi

XFtyu9VSze+kZwF4F/QIYmQH1PUckHoM53CI55SOWZB7rp6LMZYYgYo2Pclf5afm' +
                    

'x+dvmDz1o2i+avJMel6DdySLe366TdWxiRYnZT6sjFVqwA38cnqNPghAmMrPvYYM+eUwJRoe5jVv5l0fyv8A85jazfa5cpZ2

NyWsRdTMFiSW4sYRHzY7AFhxqelcuOOU9GAB+LaBkENYb/GzGfzP/wCcdfzXv/Pu' +
                    

'v6zoWjDVtI1a9nv7O7triBQY7lzIFZZHUhhWnh4HL9PrsIxgSNEDzaNTocpyExFgnyekf84x/ld59/L/AFvzJeecNGfTLa90

+OG1keWGQPIkpYrSJ2IoN98w+0NRjyiIgbouZ2fp8mIy4xVjyY7/AM4eXFqdY896' +
                    

'bIyvdXNvDJHalgHlijkmWTj06c1BPauXdqDaBauzDvMKF7ZflXaSyWVx/wA49eZzJGSkgT6y4qppsySkEe4OQlLKR/exZCOI

H+6l9qQ/mH+YOraZ+Wmo+Rfy+/KzUvIvkq8q2t6hfQz82SQqGBZlovMhULvIxp8I' +
                    

'pgw4AZiU5iRXNnkIGMIGIYF/zjt5U8wTfmp5N8xW2jXsugwalSXVEgle1TgjBuUoBQUJ3qcyNYYjHIdacbRiZyA9PcjP+cq/

y08/ea/zp1i90Dyzf3enO1m0erW9nczx1S0iUgGIFWFRxNATmnlAzhCiBXm7yGQY' +
                    

'5zsHfy8nletahF5WsEt57KWG8tmeO9juneOVLlah4irhyKMDsTt0zbDVjFCyL956/a6uWj8WdA1fcBy+xMkbkivuOQDUJXuK

5txuL/W6Qij/AGKgr4/iMfx1T+OiYwwhtB1qR2oHtJ467bD0mJ/XmJqfoI8i7DRj' +
                    

'1A+YeOQq4RQSRwRGKsSpIQOT2oe4zkw9YWIt/etvQczv4b5hdXM6M9n9JZGBBZt6ncAgK+42+nNiacANCoi5gEExsF+Lb+7X

7NR75FKq/P8AffCAAlRvvQSL7YSoTDQppl8zWZDqWYsuzAA8zID1B8emZmkJ8UOF' +
                    

'qx+6L2HzPdfV7rSwZTCIJoZ+Sox6TIhUFASOalk8DXfbM7MaIcTCNi881y6lh1Oea2n9CNbe+uFk3BaV5Y/TagB+JOTb9t8x

BKpnetpOVKNwG3UO/Oi4F35I8qXINec7/E3WohofxGV9om4RPm2aAVIjyYF+XuqW' +
                    

'GmTagb4ugmiVFkQkUG9RRTXkSRxbtlPZ2WMDLi6hv12OUwKZnq3mjT30tE0+cPMVAaKZBJ8IFDzMnUih3HU5tc2qhwek7+br

cWnlx+oMAjYJxMiCWJGDOpLKXUcKioO1fbNKDX49ztju9A8ga2Yb+5iZpZLObjFF' +
                    

'HXksLGWQgBeRJBFBVRt1NBm10mSyR0+7cus1WOgD1+/kzv8AOST1fyiLAdLizB+iUjI9oD92feGWhNzHufLmc279l+h6Vpl9

p6RS2KS3ssTsk7PLy5MJ6MFQgfCYlG+2ZUIRI5b/ANrRKRB5pVpGnwTXy2d3ApLQ' +
                    

'81YlwOdQu4qKip3p9GVwiLos5HZrzFp8WnTQRwrGY5VeRJYhItQJXj4lZGJ2KdffBkjRWBtOPyq5/wDKwNFEaGRzJKAqip/u

ZNwPbMjRf30fx0aNX/dF9ZaDaLql6YJSVjRebAbFqECnt1zp5bB56JsvMtY/O7SP' +
                    

'8SXfljyzo8d2it9U03UriaWL1r7mFIYAGkZNUQ0+1StFNRp5a710BbtY6P02SnX5ffmvot/FqU/mO9stL1OC2nNtYQzNcGVY

4JHlYsFIXjw2GWQ1YmDxUCwlpjEirL538xed/Meq30yjWbttLWb1rS0E8n1aI0IB' +
                    

'jQmgpyahp3zSzySJ57O1jjAHJkflbSNauPJVzPBr2h2OlyyyxzQ3l3HDel3UVRgXWQBuNV4qa5OAPDzDXOQ4uRWflDeaVFf6

hDfJIJ/qU7RSR20E56L1Z43dKEVqDgwkWucGhTO7zUvKkeoRI8d5cLM8R9b9FwBV' +
                    

'5REGnC32IahoTQj4vfLyY3+xoAlX7UkGoyW9lbCTR5WK2Hl/g6TRUYQ3zUem5/e/ZUdup2yF7cu5nW/PqfuYV+YkN1qX5jal

ClmbK6v7mBYbJ5Fco06RqgLrRdycpy7zLfi2gGIXEEtrcS20w4zQO0Uq9aPGxVhX' +
                    

'5jKi2g2iJI44tMtpkRfVuXnSVyAxpEYyvEn7P2j064eiOqGimmgbnBI8T9OUbFGp16qR4YErCSSSTUnck9a4EuxV9G+U9D02

/wDyd8mGeO2e5n19DLBcIhaa3XUkWT42YAAJUFaEsNs2EIg44+/9LrpyIyS936Gf' +
                    

'+d4vL+meS2lsbexgm0/T5Gt7SNkikaO3kLMFEZCLxAqf3e4bxNcvyUIuPjsy370dYQ/l/rF7pGmaVeafcWtvcai95FpjwSRL

Heeoyet6KgLU8evUjvSuSHAaA80HjAJN9Hh+pf8AON/mS3+vTWWqWZtrZPVhNyJY' +
                    

'Q6hwrVcpRQCdiRQ5hHSy73NGqj3PINW0u/0PU7vRtVhNtqVjK9vdQNSqSIaEbdcxSCDRcuJBFhCZFk7FXsfkXz9o3kz8u4ZZ

ytzraaleS2GnIQXLcLVleX+WOq9epptXtmY8ghDztw8mMzn5Uw7W/wA0vOWv2V7p' +
                    

'd5dxRaTf8RPZQQRpGERuSqDQtRSf5vnlMssiK6N0cMYm+r1zhm0tjwu4ZLiRwpx5Y80eYPJmqfpryzeGw1QRvALhUSQ+nJTk

KSKw3oO2Jo7FiYobXNY1TzLq11rut3Bu9VvWEl1clVQuwULWiAAbAdBko0BQY8KB' +
                    

'haS3mjuITxmhdZI2pWjoQwO/gRk7Y8LIvN/n7zj59a0bzbqbak1j6n1QvHFHw9WnOnpota8R1wQEY8mJijPLX5rfmR5PsRpn

l3zFdWmmp/d2jcJokr14LMr8R7LTCYQlzCOEp1/0MJ+cv/U0zf8AIi2/6pYPBx9y' +
                    

'KLB/NHmXX/OWrNrnmW8N/qrxpC1wyIhMcQoopGqjavhl8KiKDWY2mvlX8zvzB8kWr2HlfX7mwsHYubQcJYQ7dWVJVcKT340w

ShCfMIohEeZ/zg/Mjzdo8uheZtfe90edkeW3kigQM0TBkNUjU7EV65LHihE3Ebtc' +
                    

'zQ3OyTeVPOvm/wAiXj3vlTVp9Mllp60cZDQy06epE4KNT3XLJxjP6hbEAx5M11X/AJyP/OXVrNrKTzALSNxxeWyt4beYg+Ei

ryH+xplcdNiB5JMp97y2JpJdThvLuVpJXuEmuJ5TzdmMgZmZmqSe5JzM4tnFOPe3' +
                    

'0H/zkj+bQvdd0Ob8uvOE36OjsZRftpN1LFEJhKSPUClfi4/hmDo8PpPHH5tmqy8JFE/B866j+beq6vavaap54vbyykFJLee/

mkjYeDIWII+YzIjn08dwYtEsOeWxEl/k/wA6ax5R1iHXvKN7Lp+qCNoba9EClWjm' +
                    

'X4gnqoVIKjwzIlPHlHDIWD793HjinjPFE0fhs9CP/ORP53k/8pXOT/zDWn/VLIjSYP5o+1Tnzfzj9jzX83fz3/MzXp9P0nzF

rP6V0+2Bu4YZ4YVKXDBo+XKJFP2T0OavU5hpclYwBYdjpMP5rHeQk0WN+W/+ckfz' +
                    

'z8o2RsdA85XltpjE+jaSCK5hhqa8YVuEkMajsq7ZpZ5JSJkeru4YYxiIgcmcWH/OUH/OQN3Cksnnq+VJmEayJZ6eyhiR4wDs

ffMzFgEhe+/uUwHckqeYvMP5gXt35i80XovdeupXF7eemkfqGA+ipKIAAeKDoM6b' +
                    

'RT/cjyJHyLx2vxVnkPd3dz3zyTB5FXyvp8l5/wA5B3Hlq9MYW80VLlkjtJ96wisyioA6AbZr82rjxn93E0ebnYtLLgHrkLHJ

n/l/80fy1/K/S9b1K1/NG+/M7W7mH0LLTvVeeKN1qQRu6oCSOblumwGUCJ1JAjGM' +
                    

'AG4n8uCZSMiXypoeravpGtW+raPdzWGqRyc47m1f0pF5H4gGUg0I6jOjnGMo0dw87jMoysWD8Hpdx+f/AOdKPwi823cMSfCo

a3tn50J6FoDU7V65p5abFf0j7XcjNkI+o/Ykfmb85fzN826Bc6H5g80T3mh36ql3' +
                    

'ZyQ2w9RUpKN0hQijBe+MIYoESEQxl4swYmR+xJIPzq/Mn8pPLKaV5X8wTWmkpcFxZRw25HOcqztWaMvuPxyrWTxR9coWfe2a

TDll6Izoe5kjf85GfnlHpMWrHznII7i59GCMwWg/dksKsTD9r4egyJx4eDi4Bue8' +
                    

'sx43Hw8Z2HcHiXmnzBd+bLm8vNWVLjULmup3sqyqs095MxldqKAACZG7Zh5ZiYquQc3FGUDe/P7Fv+M7yymjtp7l7aGS2jA9

ejGNFBFE5RH49vidjU5MauUTRkQK/HRhLTCQJELN/jryVk88iNJZ5II7hQCZFU8T' +
                    

'GK1V1FE5ch1Xt2y8doyAs7uOez4E1XDf4809s/OVhD5e1GDXporKS9gIsIgJCZPWtlY1KhwKFwMtnrYygeP0kjbn3LDRShMc

HqAO/LvYDqus6JbvcPYTfXZ3leMD0gsZh4sBIHAT4jXpwFNvlmmyZIC63dxDHM89' +
                    

'mNpBCs0F26vdWJKyXKxfu2B+1JEGNaED9qmYgAu+YcmzVcizK281pB5hhvrXSnbTpUEDQPLyflJQHnK8TDYbN8P05mjPU7Ed

nDOG4UTu1rusTGQW66fp3psGneayDRxxhlMfpMw5UPw7b0rjlyHlQ+CccOtn4ofT' +
                    

'9Tsrq6t7WayWK6vZoIwRK4pDMy8jxKfbU03LfEOgyEZgkCubKUCBd8mWpYaXp9za38cfKaCWOVeZJWqD1aEADapzOhGMZA/j

vcOZlIUzbzbcyXQ0u6kKIxCO6BvhqLpAtO5+yemZOc3R/HNowirH45MO1X1F1Isf' +
                    

'hdbO4PMMCDSVd69/kcw5/V8HLhy+LzbzZrms6hqN3pl/fTXFhYXlytnbSNWOIeqy/CO222a7NklKRBOwJc7FCIAIG5CaeX4I

F0u3laMF5GPI8ASQHk2Jpv8AZGZ2niOAH8dXEzyPGQm/CIj93EASQFPELvxTx92O' +
                    

'ZVDoPxs49lUlhtxKwaNeAagBA7Ow7f6owkC0AmmkdYkX0v3ZRfUTieNHMasSPpNcQaCkWmfnDztcaj+XU3liW0lmlgngnn1N

5V4BZLmb04+FORNIz0OY+rzmUDGvi3abCIyEvsePZpnavRfKF2lhYgj1DNd2LQ0j' +
                    

'lKUUy3G5WnEiq/ZY0JzPwmh7x+txcgs/FL/K9r9Y8yW0NJay2E70k4u3JSxAUVoBUUHh1yvELn8Gcz6fil3miKE3dorS+nSC

QFWBJFLqbavw13r2yGUbj8dSyhyZF+W9sqomq2Nmw1yzvoY7TU47iSJ0W4DoaKrU' +
                    

'qKUqR+1l2njtYG982rMeh5UzWbzLc+Tzp3mm31e4sfMV3bSNqMV+81/FI7ok3oiOYsFLN0ZemZcp8AErIPnu44xiVihXyeVQ

mxj876dc6fcPfWsmoW07TrGY+UkkyyOqL1+EmgzW7cYrfdzd+A33Ify0rPrd0kKh' +
                    

'3NnqnAN0oLKcmo+WRhz+f3Jny+SQDcCnTKmxWjnKRtH6UcgYEAuvJlr3U9jthRT0X8m9VmttavdOS8NhHcWN273IeGMDhHUK

ecZLVPbn9GZGA704+eO1vYE1q+/SlrbfWLe+uHltZDMl1BMxWKJkHxApU0NGHp0H' +
                    

'Svjl8Rtw+EU8M1QRzwxi3o8P1KzMzj938Zm4uF5Ox7024+wAzBLnBD3sCaf+YOnREv6cV3p7Eyu0r05xndmJP0VxO00g3ApD

5gAGv6sB0F9dD/ks+Vy5lsjyDrmOmh6bLyWjT3i8a/EOIgNSPA12xPIKOZS7IsnY' +
                    

'q7FXrPl7VtH8r/lfp+pa3oEfmK31TVL+2ijmuDALd4IoiGX0wWqeVd/CozKiRGFkXZcSUTLJQNUFW5g8r+ZdI0OS31e00C9a

E3F3bPdvcsJLi8eCNZDOD8dG5N4JVmpthPDIDekAyiTtaY+XtG/LfyvZXCa0Ztfj' +
                    

'nFzNJcadq/1RfRsyYyPQiozO6yExhvtoT9n4hkoxhEb7/FjKU5Hbb4JvZ6nqGkeYJkbzUR5daV2ltrf0PrEsFpGLpoGumE3q

KVlVebAmdgVHxDJAkHnsxIBHLf8AH48kn1nVfKXmDXSlzJbRTtffWLy7v4A9xfPq' +
                    

'shZYZZ7cx8reFQAW+EpWldsjIxkfx1ZREoj8dFIaX+UupS3E1haQJP6ZdbETXkMUTIeHWd6kFhXjzLBW5UNKYKxnkm8g5vMv

Nsmmz6uLjSrdLOzmghk+pxqqCGTjSRPhJBowPxdxQnwzGnV7OVC63SLIM1yBS6hz' +
                    

'xQkBmAqQK7mmKvou01LTb+R4bO6imnjAaWFXq6A9OS9Rm1PpJieYYQlGcRIciimCKKswUdKk0/XhBJSQBzWn0/51/wCCGS3Y

WO9sKG3Ug/I1yVrQPJ3DDaOFplVRViFHiTQZIG2JAHNjetea7bRI5LieEz26sI4h' +
                    

'CfiZj7nYDY5dmAxYxM3fc4GLP4mYwFUOqa6bqFrqenW2pQ1jgulDIslAwJqKGhIrtkIS4xYcqXDHmVC81mysXIuOXphljVkB

ctIxoFAHXL5x4IcRcSOeMshgOnVSj8yeX5Egk+vxItwaRCQ8CaV3IP2Rsd2yk5Yi' +
                    

'rPNyYjiuujCPPeqX1rPaC0vJIY5PVbkh+0AV4/gcHaGWeMR4TV9zgaLFDLKZmOKjtfxX+RvMVvY6beSa3ePxe5SOBpS0lGaN

mO5rQbZi6TNUTxHq7HNEXsN65MlvPOOgWNwLa7maOQosoIQuvF9xute2+bHJnx4z' +
                    

'Rl083Bx8WQWImrroiLPzJot+Ha2lYqjKvJ42TkWpuvKhIFd8MM0ZAkdGU4iJAPMq188FxayiB1kqkiHga7lSO2ZWOQlGVdzr

9VHhlH3vJtO8s6gur2VnqEHpRzNWsgJjcIOTLUdyBnOYtJMZIxkObusurgccpRPJ' +
                    

'6Pe2Wn6RZS31tbqJIOJTnJIq/aUCp5Hb6M6LJjhiiZAcvMugxTnlkIE7S8gwK/8AOWq/pKW5tpoyjIYgIw3phG3IAYA8gf2q

VzRZdfk4yQfL8frd5DQYxARO6AhisZI5Lyb6yLgledJFapkoQSzCu/vlERAjiN37' +
                    

'3PqtglVy6PIRHz9Jahebcj89tt8xZkE7MmV+UIGlhkubmO1ltoGqsl5JJH6QjFSYwoo331zZ6MWLNUO88vc63WZCCBEyB8qZ

np1jDZvLc2mlLDM1ebR3MqtLRmo9FB+11Fc2uOAiSRGj/WO7qMszPaUr/wA0MO86' +
                    

'WVvp956JsGt4Jh9ZklV3mDTtUN8b0r1H05qtbAQlXDQ59+7t9DIzjfFdbd2ytoWqT+W7SGCA2IuLk/DPLFKzn1grBC4UUFGU

0yWDKcMQBw2eu/VjmxRzEkiVDzDJdY1i/wBG80aLZQRxLFfektzGV5BXZ+D8Dse+' +
                    

'xzaajV5IZIR6S5/N1Wn0mOeOcuseXyZBO8izT1kUBZmozHYDk5+j3yyR3PvYRGw9ymj/ALtGVwzAMAFYFa+n7ntkL2/Hczrd

jP5kc/0EPjDKZlJ8a0FMwO0P7v4udofr+DK2vCPKlpIssVmJXMJYxchT94vwCuzm' +
                    

'leXjmcZfuR0/BcMR/enq8TlnurkR8ZFMygB5FNGkP7HQkVCj29985okyegAEb7vuVZILxVa4kiklT1gkjP8AvWT4gRR6mjE7

HJGMuddWsTiTV717kRe8mi1F1uZJfjQlnRyQnE/uzyoAV6V6+G2WT5S3asfOGwH4' +
                    

'5q3m31Cti0khlrFHxJHEAfVrc7DanXwGDUdPx0Dfg6/jqWNZhuUiaodPNeJmSYBCSeYQqSQBWnGo8OuT6MeqeeVIJJ5hxd41

JdXkQOw3aE0YR0bcV6EHL8As/jyaMxpnl5dXNl5sdm0821qtvqQjNxJMsEqiMFZC' +
                    

'WJKrtsF2HbNhKRGTlW0nCiAcfPuYak0o8zaVDNSMfXyCvIvRRcAKgpyIpvTfMG/3g9/6XMr0H3foZjqutaPZlLS9uUhuPTVj

GUZ2AaGgNFQ0zNlljE7n8U4kccpDZNtb1iIWmiXcMgWBoYpI5WFfVjnvGZSirRjQ' +
                    

'CrfD9GWZMm0T+ObCENyPxyYX5xv7htdgt9Hv5dRiMHK6ktIJAvpzMGeLgRUgEU99sws8jx1E25WIDhsimAztI88rzAiZnZpA

woQxJJqO2+YB5uaOTMfLpJ0mCgfZyPh3FeUh8M22m+gfjvdbn+srr/XrC3ikETev' +
                    

'OCVESmtGVUBLbDaqnHJqIgbblYYZE77JbD5qll5LcKsJb7DqvMCvLqCR3bMb83Jv/LBRe7ubm5IF/PwaigxsoWvEbKgPhttl

ZyyJ5ltGOIHJANd3cy/U7pvWWV1qzU9ZeJJABJAX7RND4nKTInm2CIHJCzQpFGnX' +
                    

'1WJJ+JGXjTb7JJr88iQyZn5ceBLOImSNXW2BZXQOzsZLgKgoOhHUNtmVjqvx5tE+aA8u+k9/eySRApBDIAIyISEB5EVC0/D2

yGPmWU+SK8wvaHUlC2zyS+k4dWYSEf6VMak/DuQexyWSr/HeiF0y78qLv0dGuEIB' +
                    

'B1G3QjnRlEjgVIp0GZOkNR+LRnG/wSn81JGng06dZFaBzGV+ItLUwL/eV6nbY0yvVGwGeDqwDR2/3L6aCxCC7gJFdh+9WpzB

jzDky5FX0eE3Ovw2iXX1P6zLJB9ZDcQolDJQk7UavE17HCOaJclDVxMupXCXHo+s' +
                    

'pUMbZQkOyLTioAA267dcEuaY8kVoumNew3t0sskX1WP7URoTzB2PsQN8MRaJGmR/lRqek6Z5huZtRvl04y6fdQwXMvpGESMA

QrCTYlgOK+++WYSAd+5rzAkbd70L/EunL5hsbybzJZ3HpyQBYIZligYCM8eXFdir' +
                    

'fCx7/PL+IXzcfgPDyYnqumalNbQSQhXh/RVjMxV41URy3HABuIU/bNPi398qkD9jbEj7Uk80afd6Z+YcNneqBcw3FgJih5qG

b02HxDbpkJips4G4JNrWn31/5l14WNtLcmG9u5JRChkKIJ2BYhQaDfrkZAmRZxIE' +
                    

'RaH1GyvrLTrCK+gNs/qXRWGUMk4FYgS0bAECoop70PhgIICQQTsleQZuxV2KqjXNy9vHaPNI1rEzPFAXYxo705Mqk0BagqR1

w2inv/k/Q9GufIWmSXulxTs9pZzo8GnQS3MjtqksUrNcNGWI4gKys3TM6ERwDb7P' +
                    

'NwJyPGaP2+SjrVlH5btY7+00lUuWOtoCtklu3CKdUAJSNXp6b/ZLUA9sEhw713pieLa+5dZxXdvJ9RGmW0N1cNfC2imQTW6I

1rHNC4orenxO6kEcT0puMI9yD7000jy1bWuoxNcWv6QvLwaRBNDcxo0USF6SxwM0' +
                    

'jgxnkOatSp7E5KMd/kxlOx80zi03SNW0p7G7tYp+EXqzxSBpIQVeVq/vOXNqp8TKD0C1oBkqBDGyDb5888WUNhrcUNtaR2lu

1hYzRLBvHIJbdHMo+FftEmu3XMDIKLsMZsMcytsdiqdaJdrpWrwah6/ptAS/PiH3' +
                    

'II3Fd61y7EY8XqNBryGQj6ACXoV75y0/VNPWN45IriNuTqwqTxBBNO1eubjTTjCZPT7XWawnLjjGt7+DzO+vr03cojuJTEjl

ohzZuKnp322OazLmnxmpGr23czFhhwC4i632V7LXdetplMN9cFVZXeJZXAah6Gh6' +
                    

'HpkBmmZAkmVNvhRjEiPpvuTRfPGtCWWWNzAzn7SD41BG61YNWvWtK5lz10pbEUHFx6MQPEDvXPvV/wDH+oyLDDcN61vHTn6n

xOx7tUcd/bJw1/CQQGGTRGcaMj5KJ1i31ef6tMAxkJ4zXChYVQVYVFSfbJnUxzSo' +
                    

'/M8moaaWGNj5DmsmjktSba01OcwxlI/RikVYzzHIlCXpwBNKnISBjtGZobbH7t+TKJ4t5QG++4+/bmgLlr22b6qJpmgQhkVZ

hIoJ71VyK75jzlOPps177/S5EIwl6qF+6v0IdEsrgvFNcNHIoKwtKpIKn9lqE0oa' +
                    

'kfPKqhLYmve3EzjuBfuTnU7nTNYTS4LnUFjNrEY7icAklvh3Apv0zOzTx5RAGXIblwcMJ4jMiPM7BKDLbW1o1g5W4iM/r+tB

IVbZSiijJ4Gp2zC4oxjw8xd7H9jmcJlLi5Gq3H7UPJLaOjs8UzzsPhlllrSnT9nf' +
                    

'78qMonob97aIyHUV7maWGqaJb2cH+lRPPHAoMRG9eIqKkDvm6x5sUYjcXTpsmHKZHY1ai3nCC0upLaJY/qDKOUiCQuWK/sUY

DYgDtXKhrYwkQK4fi3S0kskQZE8XwRzeZNMnhe4ttRMmoW0Lz28c8CIqyKhBAZqf' +
                    

'arSlTmQdXCQsS9QFiw4w0k4mjH0k0aKzXvNNteeW3t1aGa5uAkcwjkBp0dvh+FhuKZHU6wSw1sSWem0hjmveg87YgmoAUeAr

/HNAXfJ2i2CxATCUT1jUcaUBUA7ECnQ5nAQA3u9mKTT8fWk4ElOR4ltjSvfMKXMs' +
                    

'kwsNYvtNt1iSj2ruzpG1CvIAqTQg+OX480oCujRkwxmb6povm/V4ODKVRG+M8Pgc8mYncb0Fdt/45kfm8gaDo4FBaxrEWqfV

41j9J0Qwzz7sZFD8lNCx6e1MpzZhOh8C3YsXh3Rtk5Gn6slmbW0Rr6K1M9xeyiR1' +
                    

'kMEfw8FikjoSIujIK7ZnnhyVQ3q79w8iO5144oXZ2vl7/eD3urq3mm+03WS8aTW8clxbcbdokrFMAQ5EhJNdxTG555Rn3bjb

z961DBGUOh2O/l7mVwT3FzaRXs1uoa4AlcrLU/ErVPA7AVO2Z4kTESI5+bgmIBoH' +
                    

'l5L47hmCglhGVJjboXLR9N9sRJeFi3nyZJtDQqW5LcUPKvSg8e2YGtN4/i5+jFT+DLLqO6i8n6ekMavN9cBKMCAVMsp7kde+

ZsgRhFd/63DjRzG+79TxiaFVtbaQW4jaQmjCQuXoaGqkUFDt1znSPSDTvIyuRF8v' +
                    

'JEkoxnmuCbd1nBVBKKq3IcqIBvSnXJ95O27XvsBvt3fpQ2otKLmVHYlGIcbuQ23wt8e9SDkMl224QOEFDPLLIFEkjOEFEDMW

AHgK9MrJJbaC3AlWEMhtGuK/uhKsdK7cipPT5DJVtbG96TzyzBDMQ0sojVGf1O5V' +
                    

'CYjz7dOJ2qK+OX4QD+Pc05TTOZtU0efVr1pQq20lvfn66oRq1CbkSxAh5KFAtfvzPM4mR9x/HJwhCQiPgwTVL+GfUzf6PcSK

1mTIs1yylncNy/dihJFa0Dds185AyuJ5OdCJAqXVOdK8j+Z/Nc8eqLMptJoFljvb' +
                    

'iRnVkB9L0S0S1DChqtKUy6GnyZTxdGieohjFdUy1zQ/OWkBbSzga7jtUjC6lauyFYrPdVoxHp+nUciv9csyY8sdhvXX3NePL

jnuTV9Pe1BafmdriXMBmmhSUK18VkWCSRivwoW2O6nlQfDTERzzsfNTLBCj8mJ3/' +
                    

'AJQ1jTYRLqHpQXDUKWskgWZq9wGoCKb1rmLLBKI3cuOeMjsyLQ9KnitLe3SeAvIBKkRercuLMalag0Jpmz0+M8IAIcDNkHES

QWEXDPbX9z6bUKyyofAjkQQR3B7jNRPaR97s47xDVpFBM7LP6lApf91w2C7n7ZH4' +
                    

'ZEAFkUfLpzpJCmnyvcxGRiqgjknp9WZQaCvVTX265Mx7mN96uuj3VrBW7tZFtGkq9zxZwY6GpUKCBQb7kdMlwEDcI4gUvuI9

ISI+jLcG5Ut+7kRAhGxU8g1dx7DKyIshb0zy/oWgappyXdi19JA8IjpBplxPGsyM' +
                    

'7svqJUFl9Tjse2bDHCMhYv5FxJykDvXzSzRvKuvQ6ldRX+l3pt5YmSGVLWcAqq0Q14Gh26HK4YpWbB+TOU41sUJ5in0lbWS8

tFkluYJFhDMqW6iF5ro8QsfTcDqtchkMasfjmygDaF8q+dbXy3ZywPppu5ZblLnn' +
                    

'63pcREwZR9k1ocGLOIDle6cmMyPNZ5n85Pr2jaVp31E2psQ6eqz+osgI4tQEDiRTrgy5uOIFclhj4STbFvU428XCiypIXDh/

iGwp8NKilOtcx+jco+/fIpdiqK0zkdSs1XieU8Q4vvGauBRh3Xxwjmg8ns2nrp8U' +
                    

'V19at7JJ2keCQW9vbxwSRAhk+B0atSKVzMFOEbWSSC4v7kmwt3mtBCls3pR+ojOpKUeNQeII2p06Y9U9GOPb6cyqktkOYtbJ

3kTjvIZ6sxoteLLWvxVr3yug2WXpN5q3kbUPJ0/lnUJrPT9X+sQ6hp9472yuklrK' +
                    

'SqytJMJVDIOG4NQageOQTExo83GEZiVjk8s84XXlJdRs9Y0G+t5rt9Sur29jtorhGNq90rwK5esbOFVnbi37QHUZjTMbsd7l

QEqo9yUfmP5ot/OPnTVfMFmhSyuZW+q8l9N2hBJVnWpAYg/EAchlnxSJZ4ocEQGL' +
                    

'ZU2uxV2KuxV7p5X8z6Npvk3R4rrWbE3UdhFENNd2SWN11YyD1DyC/ZPOg3AFTtmbCYERv+LcGcCZHbr+hGeZ9d8uXqB5vMgj

pLrcKzWV1HcMyzurxt6cjD7W6oagU6HJTkD172MIyHTuQVzrXledpHl1a0nIlnnW' +
                    

'NNSeFPTawSNIyojX4iVIqh2brkTKPf8Ab5MhGXd9nmjNK8w+SoLxEXUQqW8elK8st4rxesjx1cN6gBCAMZF3HtkhKN/JEoyr

l3pTr/mrR4/Ll9PoeoRwazJHMS1tcqeSnUwvBY9mAaDegFOHXISmK25/tZRgeLcb' +
                    

'fsedeeHt5dZt5rW6iuoH07TypgPwxlbZFMZFTRlKnkPHMfJz+DkY+XxLtO/L3z3q0MdzpnlrUrq3lXnFLHaylGTiH5BiACCD

se/bEY5nkCpywHMhEj8q/wAzGFR5R1an/MJL/TJeDPuKPGh/ODGXhnc1K8dqHfKW' +
                    

'5GtcODyERWvWrA7nw6ZknP5OMMHmrWF6tm0v1izS5jmFGV26CnaoPXJ4dRGBNx4gWGbTynVS4SG575mb/QLWGxiUUAQBpPi6

nmQT8sE9Tv6IiI+35phptvXIyP2fJAMkxlMteTMatU9fnXMQm+blgVyUTby7mg39' +
                    

'8VXRwSqakD78VVCCmxXc9gKnAlSMrAkcOnthQs9QBuRQcqeJH04q4zVAHAUHhXtiq5JDU8Y1JJqSf7cVVyvwhylWbcgb0p4Y

EqYddy6GgFRUbfhhQ4PbHizD4j9rY/wxVzXCqFWEDj3LDocVU3kBQqQhNeqihxVS' +
                    

'IPQ9cVRAnFaBatyUiSpDCgAoKH2yziQpFXZ6uDVmoSeta7/ryPVKtdgRqltvygeVWBFDu236snPbbutC93lkt0tkjVgFElYy

GIp1rQbHxyRJIqlUIIZJZkijqJGNFO9fw3yuMSTQVnPlPUtK0mLUrbVbj6u9xYpb' +
                    

'qoRy5KCXkR8NOjCh9822lyQxiQkauNfe6vVYpzMTEXRv7lCfX49GW2j0C4W+ISW3ljnjkRlDy812rSnblXfK5Z/DoQN8xv72

Qw8dnIK6/YpS+aPMthaxWs+nxRxcEjWTg9WVD8IJV6dT9OROpyxFGKxw4ZkkSS9f' +
                    

'OGqwI1uIYUAUoylWqKih6nY5T+amNqDf+Wgd7Qep+Y9Q1W0WyuOC2yNzVUB67U6n2yrJnlMUeTbjwRgbHNlbfmhI2mxae+nt

KYmLCd7lg5HxcR8KDoDT5DM89onh4a+1whoPVxX9jBpLlGCCOBE4sWJb42Yn+Ynr' +
                    

'TNWZeTsBDzX2d3BbXXrzWiXNvvW1dmVSe3xDfbJQmIysix3McmMyjQlR73aheQ3s/rQ2kdoD9pIyzVY9SSxJ3xyTEjYFLixm

AoyMkJlTc7FV4mkEBt6/ui4kI/ygCo/A4b2pFb23DO8HqcP92IUPXavfbwpiDSkW' +
                    

'qG9naL0m+Kg3c1Lfa5bmu+574eIo4QoBmUEKxWuxoSOop+o4GTJdO8wSCKVJoGOnw8ZLn6qyQOU4CFE4uHUrzPLoTXfbMmOX

5OLLF8151v1b22VY7t7OKOKa4iu54pXdYlLSOvqoU+JOgKn6cfE3HOl8PY8rUrnV' +
                    

'Lua4R0Cxzxfv4IDwEqrUMlWjVQ7MhpQ7hdtgaYDMkpEAAtnkj1ldLmeWJYbWOQXau8Vuqn1pJAiKBSpWlOKUriTx15KBwX5o

I3jaJqskmmPC5RfT9WMiaJuSAMVNFrX5ZGMzjlcWZgMkaklbsZHaRvtOSx+ZNTlJ' +
                    

'NtoFLoWiSQNNH60Y3MfLhX6QDiFT2DzS1tEIbexjiQdArED9WXDLXINZhfVn+mXkqeW7TXL29trOxuuShGk3DBnUqVryJota

BczYy9AkSAHHkPVQYTqtz5bee31HTGRbyOeJ2hWN442VWBNQaAUpvQ98xJmF2G+I' +
                    

'lyL1q0/Ny8uV53P6IsYKExpaXYViSd+S/WIqdPfNkNWTzofH9rhnAPNXvfzFlvND1xtO1OKK/tLCW6tXt7kPIJEZACF+szV6

91yR1FxlR3rv/agYaIsdXjXmPzRNr9nYpeMZtQWFfrdyQgMkgkkNW47k8WA3p8s1' +
                    

'WTLxgXzc6EOEpXZX66ai8rS2u5HdJ0eUCQoFVhw2O1a1IPgMrjLh6BkRaLi1CzuZ7Sa60n1UhMZujCu8/EEMXIAqXJBO+SEg

SLCKI6r/ADLdaLfTqdC0ibSUUkzW0jGQVNSDUiq7U+Hp4YchiT6RSwBHM2x+oJoD' +
                    

'uegyhsVo7S6m2ht5ZDXjREZviJpTYda4aRaNXTdY0yeG8udOuoVgdZqzQSotInFSaqNgRQ4aI6IsHqyOfzzNDcTBrVpS8nqg

s7xceVCRxdCd6da98s8RqGNVg/MGaCeS9fRVFtcNAGCSOikQBtgxRgS1SemHxPJf' +
                    

'C81ml+fpIL1fUtIv0Y9j+jL2OY+tWD6wswmRTx/eoyhlC9/bEZN1OPZMdXt/yt13Vb3UJfMmrWPxbQjTUvfgU8Q3qi5UGu2S

lwE3Z+TGJyAVQ+aXHRPypAYjzjqjGnwL+hQoJ9z9ab9WR4cfefky4sn80fNqLy/+' +
                    

'XAjSW8806nDE4+F10mGQMfYLe8wP9ZRg4Yd5+X7V4p9w+f7EbZ6f+TlpBM9zr2paleCpt0k057WDboH9Kdn38QckBj7z8kE5

D0HzQ8fmXyCL4zp+X0d1CgCm3j1O/wDQNK/EAfjqf8o/Rg44X9P2lPBOvq+wIfUI' +
                    

'9G80XwTyz5UOkvMvGGztNQkuXjdSAZJ1uFYrHv1+Ae+A1I7Cki4jc38F8P5R/mDOYxFpBYTM8cLGaFVd41DMAWcbgEY+DPuR

48O9m+m/kFdfVtKGtai9jfX0Mktyi20FzBavz4COWX1w3xJR0KowrtscvGn5WWk6' +
                    

'nnQSXz3+UGteX7q3XRjL5kdhxcWMHMpHCoKl44izAFCDX6K5DJhMeW7PHnEuezCH8nebUeh0O9qUEtVt5GUIyh6lgCBQHep2

75RwS7m/xI96gNWvbu3FlDZwOBAYn9CCjuqhT6rhNmdApo5G1WPU1xsleEBOLHyN' +
                    

'5y1nT0nsdHh+ryN6izeta28rLxAoVkmQ8duX2eu+SGORHJgckQdyqr+VHn6SKSVNJRoYhWWRb2xKoDtViJ6D6cPgz7l8aHe9

h0H8wf8AnIHQNFs9Fi0nSHsrC1W3s5bua0V/Rt04L8S3iqxAXw3PXMuOTLEVQ/Hx' +
                    'cOWLDI3Z/HwUb788/wA9fWVI9FsLVYgolEcSTczQVbm07D4u3HbAdRl7kjT4u8v/2Q==' +
                    '" />';
                    
var generalTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' +                 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAIoAAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAAICAAMEBggDBwIFBQAAAAABEQIhMQNBURIEYXEi0pMFgZGhsTITVBXBQlLw0SMzFCQ0YnLh

8aJTc4Ky4mNEEQEBAQADAQEBAQAAAAAAAAAAAREhMUECUYES/9oADAMBAAIRAxEA' +
                    

'PwD8z9180+t5jxb94fdfNPreY8W/ePLAgw09X3XzT63mPFv3h9180+t5jxb948sCAPV9180+t5jxb94n3XzT67mPFv3jzQYv

bhhZyB7V5r5r9bzHi37xfuvmn1vMeLfvHkjaIA9X3XzT63mPFv3h9180+t5jxb94' +
                    

'8sCAPV9180+t5jxb94z9181eXO8wlv8Am37x54JZON29gel+beaLBc7zDf8A5b94x9281T/zuYdty1bwv+o80YYdmu17WYd0

lFF6Sj2fdvNa425/mJ3fNv3jH3fzb67mPFv3jxw831lom3gsd+4o9v3bzZZ8/wAx' +
                    

'O752p3iPzjzb63mPFv3jypbVjvswsWTTHr+7ebfXcx41+8T7v5t9dzHjX7x5UmvTBIxS9A0x615v5t9dzHjX7wXm/m2P99zG

X/ev3jxRgzSWL6fxKY9a8382j/O5jP8A71+8T7v5th/fcx41+8eWuXpMbUB7vu/m' +
                    

'2P8Afcx41+8Reb+bfXcx41+8eVr4jKzA9r8382n/ADuY8a/eL9282j/O5jxb948cdplJpj1vzfzbH++5jxb94fd/NoX99zHi

37x47ZCIgD1vzfzbD++5jxb94v3fzaf87mPFv3jxRiaBj1fd/Np/zuY8W/eJ9382' +
                    

'+u5jxr948kZ9BEsUij2/d/No/wA7mPFv3h9382w/vuY8a/ePGsYXpEYt7gY9i8382xf9dzHi37w+7ebfXcx41+8eVLAjXtwJ

pj1rzfzb67mN/wDNv3g/N/Npj+u5jxb948lVtCU2GmPZ9282n/O5jxb94PzfzaUv' +
                    

'67mPFv3jyJZiMeoauPXbzbzbZz3MeLfvB+b+bKv+dzHi37x5HmhZDUx6fu/m313MeNfvGl5t5s1/ncx42p3jxJdlm4hC0kep

eb+bYf33MY//AHX7xF5v5t9dzHi37x4hsKPZ9482+u5jxb94Lzjzb67mPG1O8ePh' +
                    

'cJ7yBHvfm/mr/wD3cxP/AJdTvD7x5tk+e5hP/wAt+8eJ45LrCcqH6GFev7v5t9dzHjaneNPzbzbB/wBdzHjX7x4Xh+KKm1ll

uA9lfN/Nn/8Av5hdPztTvFt5x5q4jnuYW/8Ai6nePHg8dpIl47doHr+7+bLPnuZ8' +
                    

'XU7xfu/m313M+NfvHicziHhtwA9n3fzb6/mPG1O8Pu/m313MeNfvHjj1bwB7Pu/m313MeNqd4fd/NvruY8a/ePEAj3Pzfzac

Oe5jxr94n3fzb67mPGv3jxp4kA9v3fzb67mPG1O8PvHm313M+Nqd48QA9v3fzb67' +
                    

'mPG1O8T7v5t9dzHjanePGCj2fePNvruY8bU7w+8ebfXcx42p3jxgD2/ePNo/zuY8a/eKvN/NvruY8a/ePCJZB7/u/m313MeL

fvE+7+bfXcx4t+8eKWQK933jzb67mPFv3geJKAB7IEGoEGVZgQagQBk8+u02oN69' +
                    

'2nwr0nnLEevTh0RqDyVs6OUe1YpPfiSjMCDUCArMGbNJxE22I6GLVSUtwtq2sDjbFx8T2JfChFav9d/YjpwWts4K/wDVH4E4

E+xVYL4nve4DnWrs5eby/eVpfBXL8zOllwqF8TzZzajsLPaNEtbYvQWldorSbdW0' +
                    

'6xhgNHOywf7dJm6iehz6zq0YusOte4QZ4c11+0i/K96j1Glse+GZtXswtjaAsQ36DEYr9tpt5TtgsKExoxtshHa6v3m0u1YK

uf7bRpiLMGlWCwTVYiQ8zcEgaMxhgIwNQIGjEZ9JYxk00ILoxEFjA1AgaJBl59X4' +
                    

'm4HCNEShEqsDUCCaIRLPrNwIAxHa9BWpTLGJYGjEcNSWc4JYst3+VZmeF8NXvyKjNo2e03ZqIW0lqutuFksnPSVFlxHp9JrT

qrK3ogw64e86Vb0otGeaCs6bWNXtyOZtw7YbWSyizXSEX4qztrn1GcmWrh9DwYeP' +
                    

'WUTpRdnRt6GZKnHU8wNfGo/MvaZLOEbsmW3a7W/MgytwgMrh45PaUZLsIAAAAAFAgAAAAIAAAVYY+ohpKMWFVIFUsEV7YEGo

EGRmCXfBR23G4DSeDA+fqX47cUR0GDtr04LwlCeRyg3EQ9OhqLDTax2M856+WouD' +
                    

'i4Yb27yVXWBBqBBkZgiopl4s3AgDneUsM3ggqqld282lLl+hGbvf8K2b3uA42bnBdu2FVuW8ipw9lY2ebOvDwzZ/HbN7kK0l

Tk37gqVrC3SRbHvj8Tq1ic6qIXR+JBGoxece4l6Sv22m+GfamEuzG2AOFVhXpTXq' +
                    

'NOst9aZuFHU/eGsOtDRwjtpM2kow2DUWNbLadOGC2jHDi2WDUCCDMEg1AgKzAg1AgDMCDUCAMwINQSAJAg1AgDMA1AgDMCDU

CAMwWCgDMGb2jBZlvaMFizF6utVLl2xLEapVcUWzawZ0tWsuXhiYqqulbJ9qspmG' +
                    

'59rYGtR8S4trM0fFeXuOqUUUY4HDJwWDSi2oq7G5Zg1pPtr0+4yio1pqbpen1E1FFnueRvQ/mdSYvjTpq/ZbEejidMHRtZp4

mDSwlbH+ApGQVoRhPoKIXeiZFexgJ3EK1DIAAAEBQEQFAAhQBAUAQoAFXRiy4LNy' +
                    

'zKnI0luxJVipt5AsW3givoQINAyMwINADx85+T0k0ElrtdGBeczpjvwMaN0tZNuE8JfUa8GKpfKvvlfie6i7FepHz08Gt59H

Sx06PoQosCDQMjMCDQAw5yWb2kVVg/yrJGnmlvz6g/cBzdZeOWb/AARUpu9ywRVO' +
                    

'b2KX+CNVnhU57QMxizFVs/3e86JYvr/BGa4u3Q2gEQSMTWZlNWeGz/kBjDFbiJYV9KNpRe07cvUVrKArk1KXQ0ag3EKCQQZg

QaIBkQagkAQhqBAGYEGoIBAUQBAWABIEFAEBqBAEMXsqqNryNXsqrp2GNOnzHazc' +
                    

'RiWDmlClfFMNbi6r+Doqv3i6a1bJY4x7S6ynUaWVFHqRpDTWD9TJSs55nTRVXW0vZj+8w3wqF8TeLRP1UvaKqi62YeCfQXU/

mW6G4JsgqFHw2T3T7iItc5I8yjpp4O3So9bgjbTtVqJUfijVE3KWcr1KTN1/Ee6f' +
                    

'YyejmjajB9LIquXhln6DSlKr3Nv1QWhanaWxN4GUnLpt/E6NzZV3NfuGouHWT3wyaJwT2Xns95z6Dvq4qtq7ThbFzvEKgKWH

lt2lRkoIABQ16gBCkKAAAAAAAVZ7wLWrfQjolXeRf7f29JqU8DFrRCBQQe4ABAAj' +
                    

'tWqmzSXSB4OZsrarjZh6jidNW7vdt+gwbiB7eTbem08k8DxHq5TVSnTcLamKPWADCgAAjwx27Bsj1lI0/wBtwBTGObzEJegr

cKQAjPpMpRPWaAGTCok7R+bH0nQgEghSEEIaIFQhQBAUgEBQBCFAEBQBAUAAAAM2' +
                    

'sqrEraSk897NsSCXs256cDroPtQ8uFf+5HKMG9qZvSz4tiSXsn8DXgzRzrKz38T9GJpuXL/Pi/eYSijs9uC/E7OKWdnlVJJd

MCo5uy45pk1kSqm9K7JS9uJnim/E9rN6K/i1nf8AiUcm5be8bBtLs9JRJwgAAdtC' +
                    

'y4oe1YC3xcOyyUe5GdNWTrZbW0us6cLjSbzTj0Zoze1LVS1YWV6+39kZqnatf/UvYb1EvmLpT9xdFTp16JJ4M1rNlZ7VK6xr

pRO1bTpXY+te0aleKtp3YDeRiyXyt0Q0ccJbyWzA9DU6Uf6fwOetHCktolHKibeG' +
                    

'w7fL+Ks9PWSnDRw2sNvWdU6tymsoLaOb06Ksxi8pOFlDPVevElDhbTmnVTXBztQlHAs4Nby2q69K2NGTSAK3jhsIAAARAAUC

rFkNVSbh+gg6LBLZJqPXvJMQnmVSn0GGiEsgVwsWAPaAZ1LrTo7PZsCMa2vXSUZ2' +
                    

'eSPBe9rubORazvZ2tmyG5EAAUAAB20uZvSFbtU9qPdW9bqauUfLN6WrbStxLLat5mwfSBK2VqqyyZTKgAAAAAAAICkAhCgDI

KQioCgDIKQCAoAgAAAAAAABMinHVvOCGDOpeX0HPP8S237JZ10qdp1zlL3Sa6gxq' +
                    

'Z9drNdWRrRTdbda91itKNJfqbTfW4N6dOGq6X+8W8DlqLtKiyqjOrbivO/H2GteOPDOMTk8/UWIh1TjWlb+Je85HS9LK1Vta

SFHMuz0m9XPobfvj8CQuCdstewujNVLhiqm1VvaRqluF4kdLLHoTA7Uw0Z/S5Om1' +
                    

'LZJnQadGun8DoqwYqsai7VX1+41VKlccltLbZ1mb6au5s3C2EGPnUSivaZztr2cwok630K2iMN5qujSuyXvZeB5v4l97gzDm

Np7OFRGS6CfLpERhuL/ox4wdb9lvhrHScjUqAACCcdW4AgFCIVZoAAWAqRhIiMy5' +
                    

'Yby2cpTn+AEdXXBkWaRXkF2bL1gdZUdrL9sw7Kqxc7jF9ScFkStU3mZz9UbtbHYtgN1Vc0BvmD6B4OZ1HfUddlcPSe3UvwUt

ZYwfMLEAAaQAAAAAAAB6+U1G503klKPUfM0rumpWyUtbOs+mYqgAIAAAAAAQoAhC' +
                    

'gCEZQBkFIRQhQBAUkAQFAEBQBAU56l+CvS8gMaupHZWe04p4hTZxm2bukrKtfyrE10Mw2qpZuTrTC8vb2V1w0Z00uzZ5Y++D

XEnW1lkryvSKGou3VbrNR12LqWtWldj/AByNV4XFtqces5a7VuFrJ4J9TJORhLir' +
                    

'ezeKS9pNSrTe6Wl6CJuGtjzDbtboluDSOmnROkvbZI6Xn51Vnt6i0rCpXpn2G+Ht8W5QZ1XniaNt4Jr9vaY4W6rc8fbB3WnN

a1zwl+k0tPBJ4RPtZdGflTezawWXqg18uZ6Ul7TqQgzWqq3G00UhBGp9AKABCgCB' +
                    

'lM2tw1dnsA82rP5s9i2HItrOzl5sV37sfUdOog9parB23YLrJGS3m+Bqyq9hKObTWYSbcI3wuzn9WK6EjSUKNrzGmOUbQat/

yMlFSER1bSpKCtLOSaMv2EkCCglJeoTgMQJBU4aIFmBt4MCz9oIr1822tLDa0meE' +
                    

'9XO/k9J5SzpkABQAAAAAAAAPp6TnTq88EfMPpaP8qnUjNGwAZUAAAAAAAAIUAZBQBCFAEBSEEBQBAUgUIUAZs1VNvYeZfxL8

Vslj6DV7fMtwrCqzFuzppLO2L6iiaSxteMFl1sUq72xw4k37TTTrWmmvis8Tdn8t' +
                    

'pxhVNL1IDDU1hYQ+H14h17Lqvhs6qTSo+Ht48Vk36jb+F9Ev1Ac9W3BV1WdsuhQed/CuiUXUtxuXmZSmEakRqjScRLe/I1p0

7cbY9+Z1ry9Vdy5SyR1VK1iFltJaq8Kw6MigGRG0mlvyKc9RxqUUZnQAAAAAAEKR' +
                    

'tLNx1gAOKn6l6yPU0lnZe8CnDmbQlXa8RbU03MO0f6cPaeduX7pNSIhZwggRoaq0rJvYW1pbc5mYecZ5DhfWTgWXnOeY43tx

nMvy3xcK6vVmX5eT6cRwcueZUkV1heifWTEoS0RtiGzUKMMXvAyDUSnClmQAnAhV' +
                    

'i4CBUOFpw8Q94Vc8ARADvzd62tVVcuspnnDmcc9oEQABQAAAAAAAAPfy109KqbXFu25ngPTyujZ2Wq8KqY6dhKPYADCgAAAA

AAAAAAEKAIQXuqKXMdAVq2UpygAAAEKG0lLyQEBKXV68STS6TQEOOtZv+HXN5ncy' +
                    

'0lLSxYHnrp7E54nE9CzO3At271I1WsZ55FCsOqd+LcS6wm3wysDoRqVBBm3xVTzmTjq3srcFfT7zu12p3Hns27u7wm1fV+yL

BxsobW5nq09Kr010rEltOvzUozxc9GZ2rVVqqrJFtFABlAAAcdSy+bRTiszseLWs' +
                    

'/mTlGR20NW1nbieCLnGq7kx2FARMZ6CgADhqWjB6sdEL8DV9RcPwtrLHA4K9m4oq16v3iKOLQm7WWxwFWE2knGbzfqYm9U27

Tu4WonpI+K2E4vZ1FGbW4klCRg76VJbTWGcsr0nWjldPp3F2DjWrs49J6KaOyziV' +
                    

'LN6dFp16XmyylVtvpM2jPDpxlMdmvTsN1olC2V3Gay3xNR+lbkakgwqKXDn/AOWIhLPdBpLhTja5Ji3jlsYHPVo4lZYHJqP3

HbWsq1jNvI8zez1moEsqJHqKnGKzNIYPoRHEoMmyQDzGPqIaWL9ARrPF7jHUbrVu' +
                    

'jazMqrby6yKgNWUOFiwXR25xJXq1m1iec9POfHXqPMJ0gACgAAAAAAAAfQ5b+RX0+8+ee/lX/Br0T7zNHYAGVAAAAAAAAAAA

ADAHn1dJLt0fDdYwtpvU1tOixct5JHk1L3tFoaX5WWDpp8zbii56a2rZTVyfNbbc' +
                    

'vM78vq8Ca3xAsHtPNzVn2arJ5npPJrWT1p/QvaSDvptY0SwpCNnHQlVx+J9pvrO4EI021uNCAIAAAAAzf4Y34I5Xo3ilm5nf

CwO4aWHQBlKbOz6kaDaSbeSOP9Tp9IwdgeS3NXfwpI5/P1f1Fyi697fNsk3COfHb' +
                    

'9T9Ys3Zy8WyGsAJtZABF47/qfrNLV1F+ZmAMV30NS9tRJ2lHovx5V9LPJo2VdRO2CPVbUTwVkukzex59RW4uG1pSI9JtpVlv

M9FeFKFZO2818Kjbv6yarz301SFm2/cZppu0ucZxXRtOt12nazyySOlE/itEvYti' +
                    

'GhWVh63vI5dnh2a+82lg42iqVapbiDlw31NSPyVzOjpxOMq19rNhtFEhIPhDjYRkDCDnqanBWdryJq6vAoSls42Tjiu5s8kW

QYbbcvNkSkGqVVrQ8s2aRp0nDJI5vDo3dR2vw1TjCdhxbnIQqEKQ0gbX5WlMGTrp' +
                    

'RPUvxJeli6birTznI1CicpJpfC282zTWMmL2rm6z/pr7QXUayYL4N858deo8x15jVrq2TqmoW05Gp0yAAoAAAAAAAAHv5X+S

utngPXy+vp001WzhozR6gE00msnigZUAAAAAADNtXTq4tZJgaM31FRS59Bla+k3C' +
                    

'scuZ1IUJ4PKAJbnF+WvrONtfUs3Lwew5Ha/L3rVWz3rcayDiJZp1SrLeO4yUAnDlABHv0NXjp01zPDZu1m3m2a0tT5dpMZuS

SK+hRqmmnLsozMrXb1ISlNSji9aiqqqspCaWsuFwlhO6TKvQtSzyqdE5UnnvVvT4' +
                    

'aNr3m+XtxaanNYMI6gEAAjYkDQIAJqfBbqZ80+jd9i3Uz5xr5AAFAAAAAAAAAAAD6CSiVnB8891Xguoz9CfKm3Fd47Ethsy2

kpewlLOylqJyMq2CACyyAACA531eHBKWBnVpimvS2cVvYl2tNsTVK8VofTJvoa0a' +
                    

'py3DLqPh1JWcYCtYph8X4pmLVs23JPRi0zi5InDN2hKFtOZqdIoACB00nFbM5icIF5WNq9qqFkS2o30GQMho23mAAgACgAAA

AAAAAAAAAA+npfyqf7V7jR86mtq0wVsNzxNf1WtvXqM4r3g8i51xjTHrPTpXepRW' +
                    

'a4Z2EwaABBjV03qJJW4VtOVuXrWrdU7W6T0HPV16aeDxe5AeO2heq4mjkel85f8ASoOFrcTmEuo1NEVo/wCJv51ojbET0HMF

wVwyAAAAEAAANUcNTltRkqicctoV7aVx4qudkM7JYZQcdFcLdW5y4XvqdzAjIG0s' +
                    

'ygZaBoQBAUgGb/BbqZ84+jf4LdTPnGvkoACoAAKAACkKQAAAB7E8EeM9cqtU30GfrxYxa9bNLZ0HRW6IWxHnpCm1slkbWool

+olg7cQk5K1v+JpNb5INSJMnO2pZzwrBZsSDepqQoTxPO23iFji8X0lVZXROJuTE' +
                    

'K7trOqUQnmjmsMd8m1jqPoJValRKwTklmksM3iWIUbDF8FvbJBybljZ1jNmrZI2jLAAQAAAAFAAEAAFAAAAAAAAAAAAAANae

nbUtw1zMnr5LK/oJRa8nRfFZvdGB6QDKgBCDlr6vBXD4nkee1U406Pis/itvO+tp' +
                    

'W1Gmngtg0NHgm1vifuKOeroOKVopiZfqOVtC9XETGZ69fU+XXOG8jxvW1Me1nmJow6tZrPIhXa1s3MZCVCUek0ICpN47EQAA

AgAAoszrZadUrVeLyW7rOQGD06fNKqStXBYJozfmr2lV7K9pwLVcUomQJe87aGte' +
                    

'r4fiRh6b4FdZZPoZNP40L0PoJypy6zRhPBKZNGRSFAGNT4LdTPmn0tT4LdTPmmvkAAVAABQAAUgAAABA6PU4tPheaiDmBihv

TVbNq2zEwVTOG0UatZW2vqLWl28MI3m6KspLhndmzrBjVcr2hcObWZz7Vli/Qbul' +
                    

'Vr9TZFEJ7J27SzoZhNuTbXDVVnrM2awSyRU+07RtAiTdojrOqpDb3mFaG3GY47EujpB57uWbdrbzky/MKqWDe4PpHRs2h7/U

aRAAEC1aUyQAAAAABQAAAAAAAAAAAAAAAQD08mu3Z7lB5i1rxOFnsS2ij6hJJVcN' +
                    

'K1eaSQZhVJB5/wCo/jcL+HL0npAhZSUvA5W5jSptl9B5NXWtqPHBbEWQdOa1KXdVVzwzL6zzgGgAARa3tRzVwLW4nOTeZAAA

K0sIfWFQ1avCqt7VJkAAABVG0Vs6Oa5kAF47RE4PYQHWmq6PtVVl0gY4bpSd66ur' +
                    

'RVdu1R7dx209bS1exEPczqq1S4UsNxkStq2U1copmmnXTnhyeMGiDN/gt1M+afSv8FupnzTXyAAKgAAoAAAACAAAAAAFmC1S

Ct1fDkb+bY54LEy22ZzVW1uKzsOJYGRBrEb3BYEUrqKRVBAQSzMoPHAsGkMI6WQM' +
                    

'AAAVAAAAAAAAAAAAAAABAABQAAAAADvyiT1G3sUo4Hflf5lv9v4ol6Htkm0hL24KO2cGFeTUVVzGyJUnXVsrJ24+wsqrazy2

s7WdnmyqtruEjWCvivil0JI2uXu04WK2Hp0qVpVZNradZW8mjxV5XUbU4GtTS0NL' +
                    

'4m2/0m9bmYmunms2eNtty8WWbQw2AAqAACgAAAAABiwALVpWXFipxIAPUuXpertRzuOv9PXjq86pQ0eTR1HS2DhPM9D1bJTJ

m8DlfSjX4FgnjU9Wlqcde1hauFjx6mra1laXKJW7d23+Ycj221arLEy9euxHnBFx' +
                    

'1vrTVpLNHjOzyOJr5SgAKAAAAACkEgAAAgACgXIgIoAAgVEAVqRJABZJPrAAJAABBCsgAAFQAAAAAAAAAAAAEAABQABAAFAA

ADem2nhhgYNUzJeljrxW3slrWdWmyGbPAzisG6ZSYN1eEGqkbkxazyRpuFJisbcz' +
                    

'MVYSr0swauZNRAABAAAAAAAAFra1ZhtTnBJ3gAAOsro1jsYVDfzG1BgDBSrDEIEVutpKYWBeJkwVnI3JgsSgAKAAAAAIAAAA

AAAKAAIAAKAAAFRARWoZCq0C2/eQQkgFAABAAFAAAAAAAAAAAAAAABAAAAAAAAAN' +
                    

'6Tqm3bYsOswBVdFqdBL6nEoiDBSZBCjAFF4nEEEgA23mIK4gtWoIMFjIFkoYYyZNODIgtKu9lWubNWrwtrcSlrV+FtPoNPFE

pGGiGowJVTJdEjCRBqqwYUQNMZNcXZ4fURkgAAUCJsAACgAAABCgACAAAAEAAUAA' +
                    

'AAAAAEAAAAAAAgABIAAAAAAAAAAAAAAUAAAAAAAEAAAAAUAAQAAACAApBJV0hSAwukQAAIBQiFQAAYgAQsMABDNqq4J2kozJ

FmCbSjQxIADCIXYBNpQwBAUAAAAAIAAAAABAAFAAAAAQAAAAAFQKlgT0hUBQBAUY' +
                    

'AQFkYAQQWCoDIK8xggCQLKIBAAEAAAAAAAFAAAAAQAAAABQAAAAEAABVDwCDAPA0lJllVoIL2BZqISMiRgBhBlAmAL6AGw3W

6VeF5bzAIOny8M8zk8zavC3sy8xNKsdJPSMgUCFIBZEiABAABTVY2mQgN4bidnPY' +
                    

'Z4mRuSYaricCAFQABQAAAAAEXAgIpIAACQAjdXKgwAFACgQFgNYAQFQAIegAC8DalLANNZ4F4+zw+sznmTkPSIAKBNpZxI3L

AbSwt4WY6QICgCAAqAAAAAgAAoAAAAAAAAAAgAINhQCQAKQAAAA6wCoCFHtABEZS' +
                    

'AUEAAFDcgJKukyWQL2d+JGQAAAAAAQABQAAAAAAAAABAAAAAAAAFCkKo2yBdkELK6SJ4gJAbxIBQEAAIAKAE4AEN8SacmEAW

ZppIztAGgSQBAAVAAAAAAABAABQAAAAAAAAABFWCwSSyBlgMAAAARYIWQEASQCkK' +
                    

'iMCgFrWZxiAIlLEFcr0mq8HAnZS5JoylgVJSlvLxaW4q4M0iaq/LW9+o51XE4bg7VsmOLSWTRNo4WUPeQ3qNWcowbiAAAAAA

AAgAIYACAAAAAABQFTxlEeIAABAABQAAAABdhJAAFSnIYEArUEBp1hSBkAAAAABY' +
                    

'AEABUAAAAAAAEAAAAAAAAAAAAAAAAUYACAACgAAIYgAVEYRXkBUnGEYlSeJU7YQsDatj8Bm1XFzOOwSoiC7XKLgtjKjIThYM

0+GMM9xmVuAqtFXXeZNO1f0mUUAGAgBIkKG1GxGa/EjpxV3kpHIGqtcTF3ORdGQ8' +
                    

'QiwBAywQACgCAFW0CAAIFrWSFQVbLIyVwQCobSADomngqpdJl26ERNoMmDbaeKSWEwYbkYraaVauMXO1DoHV1Ss4asZbnYdu

B2rn8OWBxsocCUT0DEuBqlVZ8MwUYB3+T/q9hzvp8NkljJNhjAAKgAAoACoAAAAA' +
                    

'AAAAAgAAAACgACAVECCqCkYEBQBEUIANoAAELsEAJeU4EYAFlxmXif6mHXhwlPqMgWek6adL2UpcRzNUtddmtmk9iJRv5Go/

yxI/pr717f3E4rzHHbOMyW46qeJ+snP6Nf09t69pPkW3+8LjanifrM2dk4ljn9GX' +
                    

'VrpCTNcKiTKW00LwP/iZK5ymSABAQbkAAAjVWlmJrJkDF1tukYGcG1uIBg6diCTXf6DAJhqtz0CGvSQFAAAAAAAGAAFwGABB

kwAApABeJ72RyAAKm05RAB0+ZqRmZ4rSnOJkDAaebQAAAAIAAoAAAAAAAAAAAAAA' +
                    

'AAAAgAAK0QAAAACAAAAAQoIAQBU4yApFmJYTfrABNrIhYAvE9447bWZEAa4nsZG5xbIALLiJIb0lLeEwiOIeBBkAuDW4oNLY

QSAKlJbVdc1mZTNP4fSBnAskReoCAAAbVU95iGjpRkonAhwFs2mVE2qy6E4UdHkR' +
                    

'ZDTGHVbCcJq5gsReEgBQAAAAAAAAKlJABY6SQAAEAAAAAgDaAAIUqAAAAAAACAACgAAAAAAAgAAAAAoAAAAAAAAAaSAyDcBL

EmmMFg1b4iDREVgASCQaBRkABAAAAAAAAAFgQFQIsACAABJtWSXSYAASwAB0o8Dm' +
                    

'BYN32GAAAAAAAIAAAIACgAAA1VTJVRTA0YBp1gyAAAQWYCzAUAAQAAAAFAAEAAAAAUAAAAAAAAAAQAAFAAAAAA0mpMgDXEgr

YmQMNeiltKL8ecdk4yZBMNaBmWJLg0CSJIIACoAAAAUKgAA0sgECKpkpkRFwGG8g' +
                    

'KAACAAChqtOKegydNNwm9wvRE+WyKj4lXeaeotkmqY2T6jO1WLV4TLZ11L0baabawTOJYlACwuGZx3FEAEgBIliQAAA0p2FV

mniiVtEld0T+Cu+GK9JhuXJbWTrBkQAAUFmgFmgAABUAAAAAAAAAAAABAAAAAAAA' +
                    

'AEABQCRLAASJAAsoYAQFwELeBAWOkQBAdK6GpZTVT6TFqWq4smhogAAAAIAAAAAAACgAAsiSACyQAAAAgAAAAAQaWCanMyJC

qlKktbRlizJZQFcttvaSGXiQmvSQZBVw7ZHZ6Sgk2OFlTSW0vFXpHJwxDBvir0+o' +
                    

'y42AQAAAAAAGAADAYAFmCpYgCAgKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACArNZMrvZ5tsgASxIACRgAAwAAAQAAh

iAAAEiQAAAEKAICgAAAAAAAAoAAAQpAKQACkAAoAAAAAQoAhSFAAAC1zApnuBPV8' +
                    

'ZABUAAAAAApABQQAUEAFBABQQAUEAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA

AAAEKAUAAQWuYFfiA9XxkAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAUEAFB' +
                    

'ABQQAUEAFAAAAAAQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWuYIswT1UBQVEBSAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAUEAFBABQQAUEAFBABQAAAAAAAAAAAA' +
                    

'AAAAAAAAAAAAAAWYCzBAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAFAAAAAQoAAgAAoAAAACAAAAB/9k=' +
                    '" />';

var energyTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' + 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAIIAAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAAICAAQCCAUDBAICAwEAAAABEQIhMUESUQNhcdKTBFQFFYGRIjIToUJSscEjFOFi8DPR8XKC

EQEBAQEAAgIDAAAAAAAAAAAAAREhMUFRYYECEv/aAAwDAQACEQMRAD8A/I+7+ree' +
                    

'8R31+0Pd/VvPeI77mdo8cEZFez3j1bz3iO+5naHu/q3nvE99zO0eMFHs939W894nvuZ2i+7+ree8T33M7R4oLBB7Pd/VvPeI

77mdoe7+ree8R33M7R4wB7Pd/VvPeI77mdonu/q3nvE99zO0eQgHt939W894jvuZ' +
                    

'2h7v6t57xHfX7R4oNQB6/d/VvPeI77mdoe7+ree8R33M7R44LAHr939W894jvuZ2h7v6t57xHfX7R5IJDA9nu/q3nvEd9ftD

3f1bz3iO+v2jxwWAPX7v6t57xHfX7Q939W894jvr9o8kCAPX7v6t57xHfX7Q939W' +
                    

'894jvr9o8kCAPX7v6t57xHfX7Q939W894nvr9o8kCAPX7v6t57xHfcztD3f1bz3iO+v2jyQIA9fu/q3nvEd9ftD3f1bz3iO+

v2jyQIA9fu/q3nvEd9ftD3f1bz3iO+v2jyQIA9fu/q3nvEd9ftD3f1bz3iO+v2jy' +
                    

'QIA9fu/q3nvEd9ftD3f1bz3iO+v2jyQIA9fu/q3nvEd9ftD3f1bz3iO+v2jxwWAPX7v6t57xHfX7Q939W894jvr9o8cFgD1+

7+ree8R31+0Pd/VvPeI76/aPJBIA9nu/q3nvEd9ftD3f1bz3iO+v2jxiAPZ7v6t5' +
                    

'7xHfX7Q939W894jvr9o8YgD2e7+ree8R31+0Pd/VvPeI76/aPHAgD2e7+ree8R31+0Pd/VvPeI76/aPHAgD2e7+ree8R31+0

Pd/VvPeI76/aPHAA9nu/q3nvEd9ftD3f1bz3iO+v2jx4DAD2e7+ree8R33M7Q939' +
                    

'W894jvuZ2jxkA9vu/q3nvEd9zO0Pd/VvPeI76/aPEAPb7v6t57xHfX7Q939W894jvr9o8QQHt939W894jvr9oe7+ree8R31+

0eOBAHs939W894jvr9oe7+ree8R31+0eOAB7Pd/VvPeI76/aHu/q3nvEd9ftHikS' +
                    

'B7fd/VvPeI76/aHu/q3nvEd9ftHikFHt939W894jvr9oe7+ree8R31+0eIgR7vd/VvP+I76/aHvHq3nvEd9ftHhAHu939W89

4jvr9oe7+ree8R31+0eMQRXs939W894jvr9oe7+ree8R33M7R44DA9fu/q3nvEd9' +
                    

'zO0Dxgo28EYOlkZgyuJBYKkIGmJAg1AgaMwINQIGjLRINsmAEgqQlEYFwLBlZo6wBiBBuBAGIEG4EAYgQbgQBiBBuBAGIEG4

EAYgQbgQBiBBuBAGIEG4EAYgQbgQBhiDTqIGjMCDUCBozAg1AgaMwINQIGjMCDUC' +
                    

'BoxgMBZYkgBIksCAMyxiWBBRIBqCQDEgQWADEEFAEEFAEgtUC0WYCBBuBBNGIJZYHSCWWA0cgWC7S6mMgrRAAAAAQIA2lgiw

WqwRYJqsQRrE6QZssQMwBIKOloZIEMQzKmBJRdrG0CSJLAwAziDUom5ASC7RuG5l' +
                    

'6EBoksqyAiWKO8HNLFHaCDMCDUCCDMCDcEgDMCDUFgDECDcCCjECDcElcSDMCC7qcSPmVKECDP5VoiPmPRAbgQc/yWJutxBj

rAg4uTtRfSgEEg3BMCDm2kyO9ResuUYgo1+RcCb3wMgo1vZNzkg1QHaCwagQZHKy' +
                    

'xMm7LEzBRAWCYAIAkjYAsEkSUAPqeSNKl30AZgQb/E9WPx11bJoxgTA6/jp0j8deA2DlJvlqS/iq8marWMBoQINYcRhxIMwS

ywOkGbLADilidNpKr6jrBdHF0U5jbVajmVxk5lHSKEmhgDBvdTgTeuBkDEdq4pMs' +
                    

'Fp9iNQZViDF0doOfMRRxBpoF0xrdA3CyxMkVdzJL4gFAAAAC7XwAgNbLcCQ1miaIarkQ1UUVZo7nBZnoSwIJgYfMquk1zFNT

ztQB0/L0D8z4HMFHopbcpNGOSvo+J0ggxZOMDg3fVnqawON6gcsXqILBYGjMCDVV' +
                    

'iWyGjEA0lLEMaJtJB1gn47DRzjA78tfQjP43B1ooqkBiylwZ2nS2aIQY24M5bZOzaiDFViXRh1gyd7qsY5GP8RZRzCTk6buX

oh+SulRv0OqRYKsgZHO6lHDE9TRxaxLKOYNNEgogKQoheoGk4XWBN3M0eBN9/wCT' +
                    

'NVl/TXFvQr5SX33S6FiEZ/LfiX8ttUmP8C0tYqty24XLw6xz4FrzKvB4GrNVzx6Ea/By7KVNTD5F64p7jPFZfMtooI9zzYTU

w1D1TNQUZgsFgEFrZrpRt5SjmaWGAEovrO0HPl1mzeiOsoDjdYsxzKwlB6PpeaI6' +
                    

'UshKPGD0W8P/AAc9DONq2q4soNajIKCj0UX0I2Tl/YjRzVmDHMR1OfN0KOTWANNYAaI8zJp5mSiAoACNdASwF38MCbmZBcTW

9zKuYzAGK3gyoxXM2iUU9KyR5j0rJGQtkcLI72yOVgOUA2ktSwtC6rXJ+1nWDHLy' +
                    

'OhERnOyxOjOdsQM7Fm2NtOJHVLMbaoKv0LFMbqdYSTcQVpLECb66Ib28qjqADdbgTddnRZGNQJ9fE68v7c56TkdeX9oRoyzR

ztatfucPggM15e6zenE2uUk8zH56JRVFXOT4Aa5lZXE8zWJ662VlgeW2F7LpLBIE' +
                    

'AMqvSsikWSKZRDks2dmcl9zCs3UHM63tKMQ7KUiwZK1gMZhlsioyIwkCcIA9HJr/AI5/kR+HTeDH5a0SUy0sUP8AYX8SdBeH

XE2uXSuZz/2OK+I30eMjo6buGRqeBx/Jy1r8DVeZSzaWD6SDV6V5ih56PU80ulnW' +
                    

'2MHqSxjieK7m7fSWDqoeKyByTaco6VsrdYsNaGCARFd19NOs5uxm17sw7PgMRvcFcwmmWP0KrqrM1vTUWxRxTXEsrNEGeby6

1i1cnocjpzXkjmbnhHq5f/rRozyv/WjRgDnzdDoc+boBnQF0AVh5mTVszJoAUgQI' +
                    

'04RYemBmyjWShC1t8i/T0syWMJ+ARZrw/UTT+L+ZIhwVVATXSTdWnqZ2oqpXpJcVo9NftR5zvT7UZFsc7G7GXkBhDcVZMwkF

duU5TOhy5Op1CI8jnbM6s5XwAw5byLFnoN9uAm4USsnLK02Z+t6iLasDWzixtXEz' +
                    

't4sbUBua8SO1AqKDMKcgLvotDrSHWVgcfgdeXjUI0eO07nOcnsOPM5ad1Za5lg4qlnIdH/wdfxP8ix+HQHy/8jhpToNHFO1X

wNTv/wD0/wBTXN5cLAzy01fpKOleS39zjoL+CutmbTSTbaRj8lOJno6qqSiSNIx+' +
                    

'anSPy0eUgakxgmZtZLXMyrKcxitWShijhYFq6vNhbE3VuODA5uXaEWyssGX6U1iavEcWUcQahLG2C/Vkd3lVbV+pUSHwLtsY

bb1IXDW4tog92qMS+Jd9uIxNWQN7G5a1XwCtV5l6ZOVwZzZv6HxX6jZP2tMIwVKz' +
                    

'eBHKcPAs4RoUdK2UfU0mVWr/ACOJcIM4uuj2v9yM46YmAXDW1ZrQSmoTjjJiWWX1jE1qKlreFDWHFGJWqLg9YGK1dqzW2WoM

7bcGdq8zaklCSWg/O/5L5E36HTlYctJ5mjg+e/5foP8AYfWTKO5jmVtaIWRz/wBi' +
                    

'/BGv9l/xGUNtuAH+yv4gZRzsQrakKtnlVsqoQ6rk3ecVNLkV/daQjgLqInM6xS3NVcqr9WY5ye920Yg5HSsOrnNOTAKNYNyz

USsDKNrIlCvLdnGvFnRcm/FE5e6ava1xZ3IOK5NuKO1VCgSCA6yTauJRIGFy0tSf' +
                    

'hXFnQAYXKSybLsf8maAGdn/ZjZ0miSBl0ejDpbiakjulmBFRzmR1tEQbbaUwSrs5bULQDGy3ARZaHYmIGJM7XJ1DSegHJVZ0

oorBHSrGxrJgbMv+mRP8i6SbnrUDlZNqLYS53HSqSSjLSxztd0eGT46D8tmohFG7' +
                    

'Y2SiZzRytVq7hG5ao7LOTlaW4l9AgOvShtX8kZghRuK/yEU/kZgqQBqnFskLQ3C1NJUGjCwQiWdfoiIC2ynGRNVr6OXWIniS

l6ZpQc73l5GVZrIYhzdzvNv/AOTBt2eazLyqpy7ZIvocgaiZehCoggFRRAVogAsE' +
                    

'KBXea7XjwfAyAANNNQnm8TKcNPgaau2rNfdqQLLaZN3c2MiCAoKIAwALPH5gEBYZgZAAAAAAA9yrVZJIlubWil/BHntzXxLX

lz9XM+Ff/kznyor35j6EateFEhtZJQuBys5HkZefSd6WXMrji8rLj0nAVs62VkXB' +
                    

'q9HR8a6MwetRZJ/teh5rJTh9uQlETOtK2u9qwWpzhdQrzLVeGgHtShQhD4yeX/Y5nEf7F+gmUer4EPN/s36C/n5nFDKPRK4g

835+ZxRfzXcZKBg9AxJy27VVra8DZBj6tF8yzb+P6o0AMzb+P6mXWz4fqdABz2W4' +
                    

'V/URb+K+ZqyeDQrZW61mBj/J/H9RHMnKPidQBx/y8A3zeB2AHGeZ/Fjdfg1+p2AHB3vxfyLXmN5tfE6vIynjFs2Bn8nSvmi7

3wnqN7a8ETZR6IDm+an+2TNVTmXxSXQtTs6J4S0uBK8utcVnxAxzclVZGIUQ8jV/' +
                    

'vZlt6YhXO1YIjbn4mHgzURrDQ1NohsyrLqNTXSSKjbbCU6hKXiRq1XngBuGsXJKurztt6w5gw8V0gbdaN/8AsRlqi/c31GbZ

4Da4KjW9JOFnxCs/xvHanglxNJKtW3jOhHfluiq6udCDDf0JcMzJWoIaAqWBCgWM' +
                    

'DMG0VVkmjmDq+W2sM3kzGx1s62zRdGIBW+GRCoHotXmOitOEZHnPZa9YhWWUdDM/sR5AHmyFFKjJqqbcVUsCwZ1PVTkpfdj0

HHmw+bhELgSVWHmA+IKF9OoyatoZERQCFFB1pyL2xf0rpzBNgzVJfVZ4/tQbtM7p' +
                    

'kkVa6TMR1BWnaeghMuoSMNUgAG6czbV1eKZ0fKSo4fSjgevl7b0T4YNEo82eJlqceGZWnWzq80wnD6NSjINWrGKyZkqAAAG6

xtnVMyb5UO0NSmSq61VWvtT1Mvb/ABXzEw8MsjnaxmRW5XD9RK4M5SWS4mumHAqf' +
                    

'QcpY3MYO2/DDd8ybsZxnrOSs0XcMHVWlxLnrKnOTscZnHUqtZPPMmDrv/wC1hvf8mcW3qSRg7b3/ACY3/wDZnGRJcHffb+TF

rNrFnDc+IljB3/Jbix+a3H+hxTaD4kwdvy24v9DW6zwlx8DzHTlvFCwdbKYa1WZh' +
                    

'5G7uK16jk7EVJxOi5e5HKTVLNMov4rSbrWvHE6pz8SbKkRhJaYm3VNHG6VHNcnmFbiwHMyS/Qwjdk7ZL4j8erwKrnZY9ZauV

i8shfoJVpZl9I3mp+bMWrqduTRvF4JZGVWb2o8pwIObSShPFmDpzaKl4WRPx3tDW' +
                    

'M6lgwDsvDX1aRzvS1HFvgy6iJnStsYzMVq7OEenlUpXJzbVkqt1rCxzOd4tzF/1zN8y6pXpeRxXHV5mRjm8va9yyenA5HrTl

Rnxk425NljX6kalHI7Plf4lbV4s5NPgdN72qLOGosmWjk3IAKy3Wk55adJ35eGFV' +
                    

'CM8urvRTpqLxRRubs/6GL1pvmc5VW2uNv6HnRIKUVKVBGnXM2kbXB5cCarz2csh1vymvqriuHA5Goy6VtsW5KbPJvQ3XxDn6

qp9JxIMHurfcphoHjVr0f0uATFZAzBpAAACkAFOnJvts1pY5Ag6c2ytzJXDEw8ya' +
                    

'mnVKitONtAJOrNLa1liYAG4XAbUZTssFkJfEKuTN8vDmLgznmbX7XwZKK08VwZzcnbmKLW6cfmc7YsQYxLiClRkFAEKQFFkS

QAUAEUAARCkKBRJAFU1y39SMGqfchR25mSfw+RzhvA6XiMphv+pzbcQ3C4GYqOEo' +
                    

'ri9WVJ4cSQus1bmW2wkqzqs4KjSu1g9DrW2489U4l/A3VwyVXTmKUc+WqrGylnbM4NOrhkR13yYs2SrI5lqfgFZtiXGzVYx1

LAq1W26JtoUemspQ9DNaKrdnjZ4ybBEcLpWvut9qy6TdJWERV5LgbdU2p0yJo22B' +
                    

'TlznRxRvFv5G73VaO2cHkxs5ediwd9laNVSbb1eRqrrSrb04GK1u1tbmujNXTrWE8XoQYtZ2e5/AaSZ3Qo4CrTZVdata68TS

yk5O2Zd+BB1lamLU5dsHg+KMbpKrRnkEcb8p0xzrozNds/VMdB6b4YWU11RxdFW6' +
                    

'1o3M9BqVMas7RVRFUpVf7sw5bl48TV7brt6f2JErgFSUgnOPyMpcTUwBrdGCNbow/U5LBSVMYOiu5wM3qn9ShcSFUZPXAgxt

X8kVJVacptaGYxN8uszZ5V/qaGLOWCpJtzM6LiAjIAKgAAAACgAAINv5AAAIAGiN' +
                    

'ER25fLd1OSJ4VxR0X2mr8i1X9K3JivK5j0jrJaRq+afGq/Q46HfmraqJ54o5OuuggwCwVVkoyDe1iF/9DTGIEHTZZ5L5mlS3

BE0xxgNHfb0pE211tI/oxygQdop0sTy+A0cIEHfdy9KpjdX+CQ0cYfAh3mv8akaX' +
                    

'BDTHEHVpCKjTHItcze1EVWho6czL4/2Rz04HS/29UP8AQ5skVUhBEyyBZbzEwzIA7V5jgzzLLBmPqJHEYKrYm8HEaanOGbWQ

oqejwYr966yOGofwZeXLuk81qQejUpzxXMnR4GpxYRo48y257VjXK3E3b7HOGGaO' +
                    

'NL32u19FgwMczNUXxYti4WSyJRO12+GLKsUaHqlJdCWJwbd3u+RL2Tjl1y/czaX/AAZGNmP9RZqtOl5HR7ap2awPPazvaX8C

zo1XIy3DaKiXzkvsWjNPDqOacRB1nDElG1DrD+ZzWH0v7XkKva8GXmLVBWEozzEh' +
                    

'4pMw3JcRSagIoskkSANJlaaU/M55G63aFhrLzkdGhbRJAg/peDxQGal5gAQrIylAAEAAAAAUEgAAAAN8vmOjXAwAPY7utd2a

4jl81XwyZw5XNdPpeNdUV12P8nKe6qz6DGK78xLZj8DjSGmrZI3bmvcl8eszZKj3' +
                    

'pTV/oBlrGP0CS4ZDcm5/UbqpqOIVvasHGYe5ZYnWK6tFmmjIjl9TQXLtmzsnwRQOP4m84NLlJHQAY/GpzCpVaI2AM7VokZaq

s4NwhCA5/wCP/wAQin8X8jqSOkDGyj/azL5FdDpt6RFtGByXIxxwD5LX2uWdYuiT' +
                    

'zOCYHGysk5TObPXut/Ezbbb7qv5FHmyB1fL5f8mn0lXKrON5Q0cQq2O9uVTKq+MnN0suI0YhiHxNECpGJUNSpAU6cn7m+Bzg

68mIZEaeOJlYJt5vA3m88Cwm5gDnzZVFqsrRmcufbKqySPRZwmzxXcssGuX+7qDw' +
                    

'X9CVeL6iZl9jXLzk6yc64Jsm4lDmW3WjRGQsymgF8k9ALY16iDKOiZhFyFI28DUzVmE8INLB/wBiK5P7YMm7KLNZGcF0moyh

dCAoFkkACtENJp5kaIGklVbRujDiSrSeOKLa9rYaaIDIAKNWwajLQy8QAAHWEEAb' +
                    

'ry72+1YcSvk8xftnqJquYHQ8AUC4Bf8AkljqIM4AvwHwAgAKBU2ssJzIANTjJ35V0/otk8jzvIqbTT1WRLFd3VttJQlgSnKd

m5+1alvzElGrxcHakbVGUGRFyqcJNpJZElGXZvL/AOyDYM1c54NZmgAAAAAAAAAA' +
                    

'AAAAAAAAAE214FAGdleA2xk2aAGXTpM/j6joAOX4/wDqugmyP2/qdgBwdOtFpsqocnYAcnXcm8ksU0YVlVpq8rVM7wc/w8tO

X1gTnWwhHl1k6c20txloc0agLUskDKNL7ERmv2pEaIBCkZRQtURE1AtTTrCM1OiW' +
                    

'GJKMpm51MRATIq81TVW+DOR3S3J145HDLAsZoEAaFIUQQQ1mjJQICsFCMJBXjtQIMno5PLTW+y//ACjny6Vbm7hLTidt7bnJ

ZLqJasZ5tKy+ZKnWpituVONIT/Q6WStm0cHi8cOoQdqJpu1Zqk/sYd62W6t3Sy0O' +
                    

'FlZOGQYmra1rObOWJIDQACAAEAAAAAAAFIAKdeXzXTDQ5GlWzyRKrry7O1nrJ2SaS4nmW7ltWa/5PTXm0spT6zNgLC+OqK3h

gebm3te01T2otJ2NNYjB6K6lk8q5164aF/2LapDKPTJTz/7C1qX/AGKcGhlHeRJx' +
                    

'XO5b1g0uZR5WRB0BjctGpE/IDYMyxIGgZ3DcBoE3CQKCSJAoAAAAAAAAJayrV2ehy/PRrHBPUDXM5u3BL46HFWbq7vqTK+c5

dbLdX+xi9l9tftWRcGHiQMM0AACNTgg8iaIMKuhlmtDLEAMBhEOtLYQc6uMzolKl' +
                    

'EqxWQS1gxJFVOHKMc1LdK1NSjN8kWeUrAANMhU9DWxP7WYaazJyr2K0QqtAaWaAAhquYDVvgCcQFXPMqvCgySWngMHT8kppr

PUw+Adm1DjrIJE0zABQCAAokgAoCQIoAAABQKkuBdteBP68EHZrQg0q1TmDcnKrt' +
                    

'nEmk6T9SdX0cSYNNiiTUL71o9TSWDcK1dWg60f3YPigKqX6JJam2ZtLtmZfKaU1+pL5mKPMDpOEaEaXACSKy6om01mIfAujG

0bWbh8CY8C6jEMfUbA0Tffiy/m5nEYCEPwKufddJfzv+JmENqJwbXPWqNfmp0nHa' +
                    

'htHB6FzOW9Sq1f5I82wm1jIPXjo0XHgeOLIs3WTYwevESeVczmrU1+fmIYPTIk868RbWsl/2E8NuLGUW3NzwmcjkrpNvanOS

NNNcvd/I5tcRB1pzLv6VHxOV01Zp/oaexLBy9DOn9ywZYZGDSLAAIAICjaIwGRWQ' +
                    

'wCoG03XBkptyefEWo645riT6G90mSVYJiqSzmCmWWFQBKTadUo+ZUYTaN7nHFamXWciKUyC/S+hjIjxBQNV4mTcfT1slIzxB

G56gBSFIUAAEAAFAAAWBoyEwKBIIKQFCoXDUjIEa3uIWCMgFFlrIqu9cTIIOtc93' +
                    

'LcPgdK3VphRfWnE8+TN7t/RdZMlivRVJ4qVxnNMzeib4N/IzS7twXMrp/JG8LVhZaPp4GRyAxeDzWbJJVWfkVpqMc9SbnsgP

JAXa92zXjoRJtuM65h5oasBjt3aajFYvJ5PQLJh/ascgGKwaAbcp6l3PfOoElcC4' +
                    

'CrxajB8QmtrlY5pgIXER0hxsTj6tWHthQ88wEMQytRZVTmRD3bVmQQDGRPxAFQwfQxj1AWPmXZuwSXWKqXGp2SSUIIlaJVSe

O3I48/l1rV3WDPQebn33KFkmWeRxRWRZBmhlgMFQkAAAABUysyjRFiMhejU3WiSm' +
                    

'3yGon43tTTkqs0otlwG21frrjUxMk8q09qf0kkhZKEiq3Z5ImY3PLRBFcdRk1vnNSR7dGBBLAKgAAKlroaf2wI+mESzyRGmQ

AVAAAAAEAAFAAAAAQkskAVZ6BPQSWJZAbkAFQAAUAAAAAdJbW5YWR1raVvX2PCy6' +
                    

'eJ504cm6WVb5fTbAzYrpzK65NZ/2MTJ0h7XXCa4WfQzjlgyQa/aHkgvt6w8kFP3IqzZP3ILNgFkxoFkw/tAPNF/cR5ofuAqz

YWTIs2FkwL+0PJE/aV5IA80XHcR5ofuAtW1ZxwFXhZcSLMV1YGlDr0rQTOZlfaUg' +
                    

'7ctYTqV3+XE57oSRje8V8wjrzOZFcM3qeeJUBuX0FWBRnrzMs1Z4mWaggAKyAoCoAAHQjquWkvrfwOdbOrlG2yXSNp1TwUEa

aTX7liuoxKmfmJc5z0kxSt3k1hrBl1a6tGV5yhOHRwKjKZWRjpKNLIkDQhAgCQVE' +
                    

'AKBCoAK3VmXi5CljBEVAWECpiAAAAAgAAAQAUAAAABAAAAAFVRjiQFWYEK3OmRYGvQsyCf1IX/xDWQIVYqA/0IUdquVW8L6f

pa4mLqLQxy/udYncoRbZdWBn2qVeDXHUryRiTbyQov7gs2P3BZsiiyYeSC+0PJAH' +
                    

'mi/uI810F/cBFqVZBa/oRfaA/aV6B/amHoAf3IfuH7lAX3AFmwsmFqFkwC+0BfaAM2bkXrZRK+IusC15rwTyKhRO1oOq5PSc

6R+aFk8j1Yko8nNrttHQc2dvEfeuo4M1AABWVVmsiABQDMqrxAhZ0DwwIAEgAJAA' +
                    

'A1oZNV4EpE0Ia4owUoAAgUhQKkICNdZGkyUcSdIeYbwgACyAMgAqAACAAAAAKAAAAAAACAAChqqxRlG064JrLUlIkr6rfIh0

tT6U05po+kfitCw+BNVzXzLhhwLdVVsMuBE4ZRCFZCoGm+GHBGSyQDac1XQczVXp' +
                    

'OWSFWN/uC1NKjbnKupZ5VTKsJNqINLl2eBv8vLXEfm5fAdRPxOcS/i1Zfzcs0r8p6k6MLlfMmzOFgdoq4hyHUDi6KIfyDpjj

itDptjEjVowCuTq5TEQzpiT+oHNakWR02zJh1jAoaAEAHNqGdAknW0liM/aq3WPE' +
                    

'9iaaTWTyPErJSnk8zfL5z5eDxr/QWC+InfjwOLO3OvW7TrlBxLEoAQqKAVdQBWZsJJojMtMxLIzUuII+kqIACoABADS+Rk0i

VYrzOZ1aOYhUABUCgAOBrEiNEaZZDpxXE5tNOGJUoACoAhQDAAAAAAAFAAAAAAAA' +
                    

'CkKAiAIwKQa5d4+l5W0LLerZzKn19SJilmtDJXZkkqNNysNMzJZw6yAAC4LPPgUFWXi4XE3vrX7VjxZzbkEwad7WzZkApq4D

DpIALhxGJABpXdTrTntZ4o4SXB9BMNe2nMrfLPVG4Pn41O1PEOueKM2K9DqRUFOZ' +
                    

'W+WfA2QY2VMumubOhLJ6ZgcbV+ncsYOUnaYcpdaOVsejgWKgnC3SZmA8dSovL2u0WxTWHWYag0rbXKz4mZKi6EKsiFAgARSp

tGTVYTl4hVbcQNyEWs8iOtloTgrIyYoYg0CAKgECBWgggQdOByeDZpMXzniItYAB' +
                    

'WVAAFRoyjRK0EvnPEpL6EnkrAANMhSFAAAAAABCkAAAAUgAoIUAXgyGkpTXxIo1pqiGnLSjXP4GViAIJBRW0+hkHUAKRFYb0

WXEgZdZACoAhQAIAKAAAAAAAAnHVwGDACqrOrwwPRy/EaX+Z5p4jIlg9zq3ingT6' +
                    

'kefl851UZo6PmtKa4rgZxVu1E5PU4NqegvM5rvCaSSOZZDVkrSnDFGRMFTQAFQWQGgCoAAgVLEhqreUwKRW282JBCNDXBkKS

CoAAAAACKQSBZNfdVrhiYLVwyDIK1DBUAAB05f43O9tcIOn4+S8rwcFkUzWnb8Ff' +
                    

'5o5cyrpba3JCWLCoACsgLgRhQABAAAQFAEAAAAACkKANUe2yeizMlCttbbOqeDxqycum6z6MzVfrrt/dXGvSuBK2alpY6mVY

ahshtVmlrap4mZWpUQqWunEYa4LhxI3P9kUG/kAQIoAAgAAFAAAAAAAAAAAAAAAB' +
                    

'U3xMgCggApAAKCACgLIBUAARUpNfTGDxLy1KZLJE3qo7NkkZCSiySQAAIUAAQIFIAKEQoFfEhXMEC0AARamjNczRK1CDNjWJ

LZIQrIAKy7fnrb76J9JjmfjlOmuaMpEaJigAKgAWq3WSykCQDpblcyukroOYUAAA' +
                    

'ABAAgFBCgWWnKwayN2at9dcLfuX9zmVTn+pFJlRxJBp2WnxZkAQoKiFAAAACAFAAAKAAIAAAAAAAAEAAAAAAAAAAAADUfSuk

hq2VeowItADdFjLyQRX9CS11Duv4icWzMRijLS7+hGW5K8SFQABRCkKEAAFAgALB' +
                    

'UgsikVGZNGBEqgEKirMrlYoizK7dBFXdazmzmNSPIhq2QGAUFRURlWQehF9IACoAADVeZev2uDf55++qsjkCZFdo5N8ntfDQ

j8PdKaxZdByLW1q5NrqGA01moJD4HV8+7UNJvRwYdp/cx0SGIXEkLiWFxKJgM8i4' +
                    

'dZJAuC6SNgAAAEAAAAAAgNquEv4IDBStLQgUAAAAgFIChEBSAUEKAIUAQFAEBSAAAAKQtcwNXMG7ZGCRaHWNtY45mafd1GmK

Rl5EbZYbEJZsKyCtohUCFARCkKAAAUAKBUCFIoZNGREoAQqKAVtaIKhXkQ0QjIAK' +
                    

'gmG5AAAAAAAAAAAAAAAAIAKQACkAAoIAKDdKVdW24KuXTiybFxzCTeR1S5S0b6zW5PTDSBpjmqfN5Gti1ch2XAkqOBOqnMSU

JcMTBrmfcZLPCAAKAjCQVJ/MCILFlrm54MJYSBAVLV5ImoAhQEAQoAAAAABAUgA1' +
                    

'XVmTSyFWK/tRg3b7UYJCulMmGzKeECRhpLIHIKAAAAACFIAigAKoAIKCFQUMvM0ZeYiUABUBiChSAAQQBgqALDIFwBAEUFrV

N44I6X5SqlinP9CauOQEEKigACAoAgAAAAAAUCAFAqKZTZrdxIpDGJJIBqSSQDDV' +
                    

'ZACgUhQIVToQtWBvBNtZsqfLai1fijH9S9ZlVtXak091HkzOWSzN1sk3V41eaOeMxmAhY49RCuPiQ0gAAgAAIUhQBDVVVuLO

FxK64/RLXEDBv9pNluBSVYW+1Iwbs8DAhVIUhUaT0YdeBkqcBSBBqUMCCEK+BkpQ' +
                    

'ABFKRFCgAIBSFChl5mjLzEShACopSJSWAsUYEKRWQAVloAY8SNMwCgqYis6uUadk3LRMCwiCq6Twqiu/LdXNYtxRhpaCBw6g

EF2uJKIAQIAAAAAAKQAAUAAAAIAKAAAACqOAGhBGEVqcSFGhOBARQNuQSWmEIENC' +
                    

'WCgAAgAABCkAo+IHwChr+5nEtXipIRbmDdszMLiIUBVt4NkKiAAAWSFAdJCkAAACggAoIAKWTIC61KI8yAJoAAN1yBK5MpGl

AgEGAWqlg1qYoAIoAAIUACzxUsTOhABSEKAjHAkAASBBrFDDhiExgGgUxAIARCgA' +
                    

'AAAAAAAAQoAFQ1IUii1q/gQr46hxEgQSAVAEKAkYAAAAAAAVAUgRRiQuAAhQAmcxgAFQoARAUgAAAUhQBAAAAAAAAAAAAAAA

Aarqa6zCNY9DJViyg2mJrqoJOBFWr216wZbBcGgdFWm1N2x4Gdr0xJowDTTWagmO' +
                    

'gAhQAIahkAggsMQBAWBBRAWBtYEwKqzliXbGqGCc7sVwJoy6xmhHA2rRjMvgyZ4yNGYazRINtdJNpdMYgG1WegkMamMgsCCm

IBDAQAAApAFVjLqYReh5P9CKy18gXGvUw1qsUVGSggRQAlIAABQAACABAAACkKAA' +
                    

'AAABQhQEQAACgAQAAAAAAAAAAAAAAAGqxqXDRkqG8SL6a2vMjWEk3W4kxAAAo3gNcGBiZVpWer+AdqvGIXQZEIDr+NwnKaDp

FoUOdDn+nAs4RLnRkFdYzeP9CNYTJJbeL+JWqpZtv9AEKM4Ltw+m0vgSF/yEm2lX' +
                    

'MKQlm/kJWOHUa/G1nZfAyAT+HQG282QAXamxHRBIZcQIyYmoBRnEYlIEGMdS9RIXEBiQv9QAicn8CNOcUUqs10gYdfgSGdne

tomY16TLVG3H0/qXTHMG2vk9TMIamIiyhDIBpPR4rgHR50xX6oyanGZjpAz1jA27' +
                    

'N5xbpM4cAJgAUon9SggAhSBAAAAABQAAAAUAAAAAQFIEUEKBAAAAAAAAAAAAAAAAbrkGpFcjUKFDxI0xBHJuGToGmMgAqOgL

gQw0dRCjQohRACAWGWPQBIUUPNwyurX/AAQLdV/Swi9EjDQqdXO/Dq1G1ftfwZFZ' +
                    

'KVqGt2BOPABgUhZAYxIEsSBIECfiGBI6SdBS4fIoyCtExCAEgACx0gCQXDL9QHiBI6Q6tDETGQGYQg6bpzI61bwcDTGCSbdW

plZZsmGUY8SoyCwSGUAQBAAAAAAAAFBCgAAFAAAAAQIUBUKQoRAAAAAAAAAAAAAA' +
                    

'AAbWSKZrkUjSkAAjBAVHXEjAMNAAKAAADQAAUACGq7/25gEGq78eGsh7YU/cAQYeeGQAKGnSOsAA+gIABjoOIAAAAGZ1ALEU

ABQtdus/AACPXP4kACAwAAuMaxqXCFuzAAy9s4SZx1AKHWTAAJUABUAAAAAAAAUA' +
                    'AAAAAAAABUAARSAAAAAAAAAACgACAAarkygEaikYAGQAVH//2Q==' +
                    '" />';

var staminaTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' + 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAHwAAAMBAQEBAAAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAAICAQMCAgoCAQUBAQEAAAABEQIhMRIDQVFhBXGB0SIyE5MEVBWRQqGxUtIjRMFiFBEBAQEA

AwADAQAAAAAAAAAAAAERITFBUQISYf/aAAwDAQACEQMRAD8A+S/c+b/nfcfVv7Q/' +
                    

'c+b/AJ33H1b+04oCCK7f3Pm/533H1b+0P3Pm7/8Ad9x9W/tOHBSA7f3Pm/533H1b+0P3Pm/533H1b+04oCAO39z5v+dz/Uv7

Q/c+b/nfcfVv7TigIA7P3Pm/533H1b+0P3Pm/wCd9x9W/tOKAA7f3Pm/533H1b+0' +
                    

'P3Pm/wCd9x9W/tOGBwB3fufN/wA77j6t/aH7nzf87n+pf2nCAHd+583/ADuf6l/aL9z5v+d9x9W/tOKAgDt/c+b/AJ33H1b+

0P3Pm/533H1b+04ZCQO/9z5v+d9x9W/tD915v+dz/Uv7Tz5HgDu/deb/AJ3P9S/t' +
                    

'D915v+d9x9W/tOKEJoDv/c+b/nfcfVv7Q/c+b/nfcfUv7TgTKA7f3Pm/533H1L+0P3Pm/wCdz/Uv7TigIA7f3Xm/53P9S/tD

9z5v+dz/AFb+04YCAO39z5v+d9x9W/tD9z5v+d9x9W/tOKAA7f3Pm/533H1b+0P3' +
                    

'Pm/533H1b+04hwB2fufN/wA77j6l/aH7nzf87n+rf2nFAQB2/uvN/wA7n+pf2h+583/O+4+rf2nFAQB2/uvN/wA7n+pf2j/c

+b/nc/1b+04YHAHb+583/O5/qX9ov3Pm/wCd9x9W/tOIIA7v3Xm/53P9S/tF+583' +
                    

'/O+4+rf2nHAoA7v3Pm/533H1b+0X7nzf877j6t/acYoA7f3Pm/533H1b+0P3Pm/533H1b+04oADu/deb/nc/1L+0P3Pm/wCd

z/Uv7ThGB2/ufN/zuf6l/aH7rzf87n+pf2nFAQB2/ufN/wA7n+pf2i/c+b/nfcfV' +
                    

'v7TigAO39z5v+d9x9W/tF+583/O+4+rf2nHAQB2/ufN/zvuPq39ov3Hm/wCd9x9W/wDyOOAaA7P3Pm7/APd9x9W/tB+c+b/n

fcfVv/yOIIA7f3Hm3533H1b/APIP3Hm/533H1b/8jhGUdy8583/O+4+rf2h+583/' +
                    

'ADvuPq39pwocEHb+583/ADvuPq39oLzjzdf+77j6t/acUBAHd+583/O+4+rf2i/c+b/nfcfVv7TiQAdn7nzf877j6t/aC858

3X/u+4+rf2nGEAdv7nzf877j6t/aL9z5uv8A3fcfVv7TiDqB2/ufN3/7vuPq39of' +
                    

'uPN/zvuPq3/5HGIDu/c+b/nfcfVv7Q/c+b/nfcfVv7TiCAO39z5v+d9x9W/tA4oAColihmkDaJqsnXsNKNS0hNsaYSQoKnAd

AFAJYGtMjwNEQPaXAQNEQEFQOBozgcFQEDRME2wawZX+L0CCRDAqEMAACkyYAKp1' +
                    

'7ErDGnBTSfpBggcCRaRBMBBUBA0RAQXAoGiYHA4kTUAIEh0UocDRMDgqAgaJgUFOCdyAICBTJSq0AQEDiAhtATADi2j/AJFt

tPgAYBwTtsEMoY0RkE2gNICCd495A4FAbkNNMBQEFQOBohITUuDSIRC7jQbRFhtG' +
                    

'jN1JNoItWMllLElrJCKWGKQ4BoocE0ZLWCoFZNZKrlATA1kYJKQJdcjaLFbQaIgICuWXAEIcC0ZQCgCoAC0hbW0aOJFVTlmd

aZQ6rWRLubNImJeg0Zq2clWyoRfy0NUgaiK8b6heqSNoM72Uw+o0Txy0UokqtUlg' +
                    

'l1acoAagRcDgDMRptFEsKSMbxODoeEc1tSxEgMDSEAwAAAJABjUWxGR7LdiaoXRmiRmk10NapkqjaJo0aYskRmquSoKhhDGi

IFdRUpqFLMbXb9BYLouhTgxVrLJara+ugsDdqoh3b0Nfk1GqJdBsGSpOWwjasI3g' +
                    

'm0DRFa9WWkUkJtLBNEtSxQ0WkEMKlQxwPbIs18UAmhQWoYQBm6jVF2LglPMDRLopE+JPQ1iQQ1Mc7o0Gyy6HRA4L+jHNLKra

WkauqYlxJOUNhhcjSQqw0Llq5kzTaEnA0aaclLJnvY1cZRpBNqtoqtkyoIrlahjN' +
                    

'b0nTUz22TiDWpiqOcGqRltsnMGtXK0JRHJX3SKGrbcqDOkq0MToNonqa2TIaliVTWoXWMFVWJZMpsDNYZqlKFak5Q6PoLUTa

sFJSirBUmqlAU6gBdq5fcVZrqU/i8QtkilEjVYCuAbbCKgIGlgcATArUVtUWAGTr' +
                    

'bRaFKsIuBQBDTAqHIMCRRksAIssHKzXl5P6oxNfUoAANMqquurC1m1DKr8ONSUpcEaSIqygRUwGlOXpb+SIES8jqUPTI4OVN

rQ1rzW0iTNitwdZM1yv/AGMb5LdtvpIKiNSL8la6ZZEcl34A+KCiff5H4Frgqtcl' +
                    

'UcYagt6ShojZXRFJRgmszLNVkggbUja7DSYEaBCeSmlqCQCgTSLgTSkCYBFYDPYBQESE27E7r1eVID29hTOHqL5i6poqqrZS

gEJ0cyS+J7lDHavIsplFpCtXqRW/K9FI3yXXxVGC1oMzXLX0F1tV6MgIHBQgJsjO' +
                    

'9FZwsFuZKSQ0YW4WlhyZurWqOtkuu7Us+xjlTaLXI+ps+OvYPk0bRdhh1aiXgwvdu7aZpytt7a6IxdWtUIVdeSwO90Zlpysl

sI0rveZIta6csdLQa2qrVMiFe1l8IV2ty8C47bW6sdssB7k3HQzuoeOpo64lGdm7' +
                    

'WSEFqVWGZrDOiukWIvxzoJVJZHDTBYwUQUtACoBBnLALOBKXkiqlDWck4epSwwKyAJgUAxAEMTYmxakUahAaApYBqJ9kUlBF

7qmf4A5+WjrZ9UzMt2besihM6RMSNIe0aUDTDpZVedBvWUoJgJjBFKwkAyoBDCAJ' +
                    

'N+Clp3PToRSqdkjfk5FRQiW+GKs4WDnVbclpegLfd+B0VULJnpQkkoEwbfQFLIHErIQkDQAJ3Swyl4C2phsjqBSBtIi1raVX

rCq76gS+VTESUm30hC2ZkbfRFCs28IK1VdclN1jsx4gBFSKASIGJjgQChA2koSBo' +
                    

'T0AG8SEpoldilVIAohtAgANtXqjO/CnlYNWJaZKMVXkXwv1DXK04uoZpDTlBatbaoaCrq3MibTthkW4FE1ZPFVyMg3gZm904

KrPUgcjUQRmS2oAya2uS1FlkG+4msSiiL8KeamDTq4Z1UvOHqTyVV9Cy/KY5zSl2' +
                    

'sGdqurhhXU1Rq6N+8gbc6GtXWITHbbVSzGqnclWWY1t78itZ3ZVKurllzIjR3qC5M6FYmRuHoRU2s9dpNb2s9INYlHO/dsIN

6uWBFb5ADVpSTO1wHJeqbjUmlW1LAr4tAmE5FDSwFFZfFkBKzT8A+Y9xUINqmQKV' +
                    

'sDmRakJWq/Ag1gTTErSOQISc5KmBNplJdwGY8yt2mpsJqSjhagJOi/HufYwtVpmpdQ0xktD3BQ2TIMRYlMBDCGCGlgnrgK1o

ms9UK1L626l8Su37yhLuauLOOxneVKiSSRbJ00BMyBjWhOZKkACBrQl+9oA2401J' +
                    

'pubbbG8KBTCApk28CJbZSeYRRSWBhoBBLqmQ1tso0NYyJqQKWgtxFb5hl4YDkWoCgAbFI5JYBXUomSkwBoQWYkwLE30EghsA

yiW2jToQkuoD3ShV+Ilp1z0FW02wUaPwHt7kuzTyUrogqETZpFLJnyVs/QUFsrAq' +
                    

'2SwxNbURVOzkC713ZWCauywabZRFqNaADru1Mb12s1W6R2q2iy4MFI7WbwzXYq1nqY9TW6grba5NPmbmjOBQxkHZholOGc9b

tGi5EzNlVumZc1eqKpZWLtVNQQc1XkAvXawNf0aurdnKNNFAWuk3IviyZAsKWOuR' +
                    

'4ga8CBWrKEliC5E0Aq0jVyFpWBp9OoARO1S0Jclb4NHlGbaphfE9EUNKtPFvoaKepFaw5eWxuy6gVKEZ7nOEVuhZIKaUQZPi

Sl6oveifmpPRoowdcNroQ+51tVun0bOWMtdjUqJYDEaQDEADbkqnHaz8CYOviptr' +
                    

'nqZtxWi0CFqAPKa7mVQwCvwqddBxkgIkIgYAHpBQhRkTfQBfE/AIzA1gYENJBWEU6zmSdoFDJ2gpQFoAQNgRt94JhjHAAmmB

MRoNW6MBtEMsTQEwNsIBgLUmzgZNu5Q62NUYVabNVboKKkxtZzgtudDPVgaJNozs' +
                    

'tljajJ5VIEpu2pdWiFV1RdUBb0JbbRTAglVXUW1Jlk2XUAB1bCzVay9ehC5SinRtaZCqvo0HzGP5nrAnko2sI5rVdWdit1bG

1WyiykS4jiVu5StXqXycEKaZ8DA1xRd1X+pA1HUt0TU1L0DjvD8DqTTRw6G3FydG' +
                    

'Sz0jTlrKkBtyBlVctJkym1Vg3nLFZSgFSHVPqWc6q62lP1G6mABgsgJYIBrqtQrafSORNLUAvZVUsypr8y3qFZvkt/8Alai3

JuKqUiina132RaSXiZu6Xixze3gBbbRLbegbe4gM3ayehdeStsPDE1klpJ5KNFVq' +
                    

'3gzC9XSzTN9Hh47ByVXJXHxISpWCaeoNKJRIGk0ANZwDUOCgOvitNVJyJHRxykZ+yxuBE9yk0zCh4z3Jc9y9UICVqPItGNuW

ANkruyxMBSmxkxkqMAJy9CFOhpDQuoDQaCGALQZFrqmvXsWniQJYSPUUNADkI7jQ' +
                    

'PIEJtOHoU86BEqDOXV50KLcghymsCaaIATB6AmBKr1E1nUuURZdShusLDJrx2b1Eps46G9cDoCUCsk1kpCspTIJTTQVbmCOK

HKeqLdXVytCjQUhOAwyBoBJwPoBlyJWfVx2Ih9FJV7X6JwZu1vE1BSXIug5t1RCd' +
                    

'1kfzhg0V0tVHpK3Ihc1erKnjfhJA969Jjzcce8tGa7H095BbNHgTgchVbNCYjbK7w8ojQaY7JRKH8VfHfMMDJAM5NdrTTBWO

dfcci1c+kr51baqGZ/NNaxmSnZLUz+FS36DN2l+BFdKtOgzGtoNU5QA0Z8loUdWa' +
                    

'nLy2lsQLN/drotWDce7X1k1s42rqaVSqvEtDrRLL1KkmXqDZA2xSTMgtBgoizGrRhisuq0LA7uGi1aLLszK709BScwM4BzUh

7lozE6viq0zntWHBfrUsSnA7LR9xFxNUUQEscAVDXJdaWZS5rdcmYEyDoX3Ma1KX' +
                    

'3FOqaOUCfmLrqfJS2jKqzkNeGz3bejJfqa6BilBuMqGhoncLcBbExTZhkCG4ZonghptCq2nlFEc795IpWXFRKzlvMGfJabz2

Mm23L1NScRNbv7m3RJIa+57qPQc4F/MTXbXlVtMjlM4lZ1co2XI9srVaozYrbHTU' +
                    

'TUmK5U37yh9zaepMVKq05RSt0Y0ybJNgKyeqEngqdoQnoBmm5yPrAWlDrkClVJYGnkE4FEOSCkORA1gDPjqlds21MeN+8zYt

GbTT9par4/wc/wBxMrsYy1oWfXU13qqQ2zh33/3P+RO1nq2x+TXVfkotX6jG3Kv6' +
                    

'r+TIaL+YaHZvURTgkqUGlVWNWn4aCrSzzBpxPbba1r1JasTXltRw8m1b1vla9UYcySvghNpytRmw1aqtzTJvTay7OYv1epai

6hjVc4yrV2uBOrLqJAAKhtQCq2p6DXiDc+jsRTlvHRDJGRVpmtbQYSUrEwbXtCla' +
                    

'nK3LKveVBNVLLIiqqMlSSkOSKcibFIAMqrzBMMU5Au1SFjBrqjO2RBN9UVTLIs5gqjiS+I20ZF1OSm8STRymZVi1DDo/AtqZ

XbKJpG6Ho8G0JNg2a7EkzKBKCRAMqEAAAzXhq23bojJJtwtTspVVol/Jn7VYEhiT' +
                    

'6DkwpDFORgCE0A5AEJoYnhNgc2He06ZIgb0fiXam2ixnVm0TWjfVFPicELXBrazrVdxdGLUAm05G7N6iKKaTUrD7GnE26x2M

q2jHXobcShN9yXoXuCUKJE12MqvbJEuj8Arey1C1k9QLcWWBVWDOt0maq1WBNkKt' +
                    

'ujNHoZNOQNB2eMEvFQUNEGfHKtk3MbymoNKuS0K9FZR/DOa1LVeUdbQNShLiY4gN78aWUhbZSaUGv0YyNKpMTqhaDsVZLoZl

pk9RCuhfBV1JpSFM5DjtNdobLtPc57GVY3tus2SNppwxG2VJ9OhVbQxcaTtkLKLE' +
                    

'/itrJWRjLThlVtAre9lEipsuoAuzA0h8lHV+BJpy2ltAuJ2purr2JLxyIkZOU4eAkooJFIEUmaVhVMykxUORSABSLqhIacAW

kTddTSuUJqVBkLjcqCbKGKuLF8q0ZfRlbUFioraidpUGkb1W/jjqZ0lWhipyOj8D' +
                    

'T5nG86MzzyFZON3bUy0foN1zU0Jd6WcRr1LN+Bq3xpZ6rQxaru93QXKmtqeqQ1Wu2VqRShIlx0G2Fa2tp0KJSbcLVmq4LN5a

NKcarl6l5WhL9vhMKnHSmmvcbvVGbdu5EvuRW65KPXDDfR4TOdpMUdmXB0pZGzKn' +
                    

'J0f8mrIENCGQMjkcUbHJHO4p6SwYVWnZuDrbq1Bhx7dkPVuUaVXUtC+WpwLkpLSRPJe1bYeOw+O9rPP8jnsQ+G3QFSyeUbu0

E2umpG0c98WZfFqo16mdnNmy+JPdPY1ek9bySNoDCmvEHWrDUIcEGVqdidj1RoxJ' +
                    

'mtBW9q4toapJ5BJRLJi0y3FehA7KSae646FNrQmycSgHeIGmZzNSuOYA1BCbzAEDaOe9LKWng6EyL13VaWpYOdZWWUqyRtcx

BVLOrhmqBqGQaXaZmIlVS0M6EzmSN66E+yqtRPoQuBdTRWCcx/gm0ZfL2N/4Ivqd' +
                    

'NlK9BhyLqWXkSlgdXDyPjyh2qgFyU/sgCtujAc9DOZsdlISwcdV7x2UiB9kTfiV/B9zlvS1Hles7X4Ecr/6mJRySA1V2Ta6a

ok0hrUomowsAAAUykhDIKpK9Bo+5KWBrsZENe8mU81a7CfQi1viAzbliADoyAAAA' +
                    

'AHAG1WuWu2y95dSPltZlQKtnVuMCdpcvUzikdPHFKx1epzpw0zqq1ZSkT7Cb8la+L7Gf/wDQ/wDajOys2205J0LJDXQvuV1r

HoK38N9cM5QH5hrofHXWtpM2jNI1fG1XcmOvQk2joq/dRz1e7HU2UquhKqwkhXzD' +
                    

'LMgMfuHojY5+aXdIs7RSrG3HTUdveUJx3NWk6wYq6ThrKCpiHCafpHSzo4awy9/HbVE2cYTwUF+xLnaG4m9pwhIDalXc/wCD

Ti+CWZUW6yTZ0NRhaCpDJKjBnaZIq0UjOrkpOAHBFsKUs9y3bGP8kNtz70LuIJ3r' +
                    

'u2LdZ5WYInOB7sdn3NYNFa0JuBW5G8dtDNtsUjE1r0L4pOeWjWnLDU6EsV0MWolZPQaZkJDgGuoAY8yaaa6mTbNuZ5nwOc39

UpyAgNJqkaVtgyRrXv0XUzWjdtvpL4k3qo9PUK1WLtZ6Gu4yGkTaitqUmAHM6W43' +
                    

'Ote4TJ0mduJa1/gDF8fVAaLQBow47RbJ0pPVM5+RbeVrxNaWzHfKLflGq7GfNPy3/ktXnplahyNfLt6CRWH2/wATfSCubjrD

ssMjhfvR4F81vdSLe08YIoQ0aUAAEFIqEyAVoZBslgTlMm3I0kJcs6kyir6owsza' +
                    

'7msmDNfVKAAtV3LHxFRAABQyqoktYhEqpuosJF8iwiBOgPU34bNKDnNaY1JeiN3EyzPl43f3q+spawL5yq4smjM3xWNaNuCn

xeJqrK6aq/e6Cqrud3Qu0HHWi1HdqHBL1ItfEE7DooUtYfY2rhQZ8V1EasqVV5y+' +
                    

'y1FFRIRJM8j0rHpBb65s012AtVhNnMq8lrNLLXUvk5nLVfWyuK6ahesvMRTmlYs5bMLKXJpe0szbEVmOQYGkNJtg170IawG7

w16gbcVIrnUuGZ03JeBc2MVRAmsid2ugvmvsA9o0ifmPsHzY1QGd7Pc12IlvAWc2' +
                    

'YjciWmAJSIIYCAoAAANVuqk+5rVySrLYvAzXJDMdtOnDQlMwTW6saR1MjLnrNZ7HOl4nVZOydTlahw9Tf1SiPEAGsKSgquvQ

q1piqFa2MaDXuqerINdzfqwJJzl6dCE4fqkqrxL6mVWl2bRab65IWhQFpyOTGX0x' +
                    

'ZaruVW6cPuAuSuNy9YGng9GAHJyPdyNruNOI8GKtlXIWsrLSOxoaXbTV69dRuzvRzgwTtVYeAl9RiL4GvmQ+ug+f44Mq2dbJ

roaWbs9zF70iBiGgogqAGskDVVBNtq9IXv0RnDYkGlbVsttvUyLVdX/9GuOzL2pV' +
                    

'izku4jNuUSPQMFCGnDkQFRd2re8sPqQiqKXHcLVdXD/kn8UkpskW/iIq4cjnMika2rKRFq7amic1M+R9DMVCHuaUf5FEFqst

o1UaVe5IjlThT/JpxV6dSuWs8b8DPquamLJmvIrT8RmvgZatu489C1Euz6irV2fh' +
                    

'1ZLcm/Hb3Eur0F4gqqVVDwu3tHuSxVQjK1m3P8jd4UIziq3NJtkPnlaZJtaUQakQPLkE2nKACoqRSJAwoBAAD1Hqo7EyxDDX

Rx2xHUvczmVn3LpyOri2hmw1rZ4CtdyKaTUrRiq9uCKm1WnnQHVMu7TQtEBhekPw' +
                    

'IUM6LJWwZ0pN46I1LwiG40BbXq8l8nG5bWglR20ULuNgm1WvEk6K8e1ZMbpKzgspYkAGssqNq1UQS+PJbaUMqUznrTF1dXg1

4+ScMMGd7x8P8l7HSo1Obmqt7aJW++JbXUdoWEJMqM0m3CHZQ47F8Km89Flk3atZ' +
                    

'taGvU8FVL8B2cspLZXxeSOkkU5nHcuf8Ga1H1FVtOEUmR2KRkO9JytTJaNdVmDdMm9JytV/kA477q+KAx4nHJHRgXORDzPgU

lgUZsil0LQow0T0NO5n3EE9TRvBmX/VFqQhokEwLGsuCZDdGhMVouNLUTvSuikyd' +
                    

'rPVhAz5TVvls9CXuT94qqU5C9cbk5Q4ClP4hWpD1wxJl1fRl6DtxJ13cctLUyOpVtRY0Zleiadq6rVElLGRrR71tfqZkCZbE

htQ2gqm3Bq+LdVXr60FabcyTVw62q1Cw10IWbNvRGllx2UaW6Mzo2/d6oinyfEiq' +
                    

'/H6UTy6odHmcjwaNuvvLp/oXi1G1o0RIceHanTVEHP8A1Kp8FiXjBVcUfiaqIVZtBryPKS6EVw59BV/ikXshNyk+vUTBokKJ

AAKgAAAOpquOcmR0aKWSkZ2qkZFXtufgIsACQDQMCWClWSeiKnoRWnHbYnV6dCre' +
                    

'GTJPPga6ozRLnUtKUQ9Cq2aQA00FNurw2OZMLLLT16CDazVWmnhimtcoilaxnUhvoXBo+STF6lLULZWCzgTCiSqUbyQbccx4

FvSRTrOAVUuo/RqRZJJ2blowqLXbwtCUtzgCqfEjfUR0WarxxXBzPKOnkVEl4it8' +
                    

'ulYiZMyq5622v04Y6V3WzossGklJdFtrL65fo6F1E8lpZL0Qm5z3BlDQ65sJaFU7kqrbKroQy6GRSwWskIaxkg57rby/5Av7

hZq+4G/NREpXclNOJWUTZe8yU7VeAq5rt1ckWUMLOUlED+KmdahEFT7qQkpkRUMB' +
                    

'AUMaUkjTjQgbo0EmtLq3u2B8OZTwTflWdcs0VUugbVXVlVtV6EtVnbheWv4M5OtHO6q12tCy/KYFy2jbZzU0d6196uZM4jDy

hxKhC4qnx1vTdTVamMYNON2o46FcnHHvrR6jfELi5dmHoK81vK+F5RkzWrV67G8/' +
                    

'1Ys9EPDCnxSafItGWl2IqobVsdBswFm2VV6f6kW1CtnVjOBq2xWs1nwgfuWytewo6f4IrIr+grpKzSG/gNfCK/pV9wv1E/gr

6R2yRUPuLGg46EsqAYhgAAAAVa7skiQAEpeBtMKYsmbWtWYmSWkYiNnVPoZ2rt6i' +
                    

'USC1GmnrgEUUtTSj6GSfvF0eTNVb1BYYPuZuzkg3TRjyr3p7hu7lNysDoZROiCGh7rV6EOzbya5RUlcalmZtxi9Ki3E1bweh

dVtTnoVd7reCBrcvUTRlvw46ibbrCJ6mlbqq8S4jMdQmZBFFN4G7Esc4RFCTvZV6' +
                    

'dTS9VZRVqEOFWsLDfxMytdvCwuxOxLiYXQQgNMn0NFhQQlLSLJVBXG8wIScWIrV4ZSyTfo+4UeGQTzfDX0gPlyo9YF8Ete8y

Iybqs2a0B8a6OWTRzWQu6NtuLSjF6mpUrTjrNW/UZpe9BVLuuOgm4tI+Q7ceJX8E' +
                    

'Gruuhm3JZpSAAKgK327kjTggpJ210NFVLQy3sN0ksqtXdIVmrJtKF3I2xlmlXWyhY8CKjVY1Q0KIt2Ne3+RRNXBTpuUT6BOs

egqloZBk+Pp1MtGdPK3G5eswu1bPU1KlOeq0BPDJq4c6ltRlfDYCHqAAUClOTbjs' +
                    

'm5b9XYnjrV4Za40r4wS0Y2+O3pCfdgT1YdCjRr/qr4MXQtKeODPJlSjIWHIQ7YWpUQMv5NyGmnDUMuoQwABAMRQ0ABgimrPu

DffIQIBDEOAhoquokh0JWmqyiEslUYOZwZCaJ0WehrsbMuX3fdLBm225YCKg0ySN' +
                    

'E2kRKXiG+wVaG7urU6E1snrhieWZxV5vZufUN/btqU49JNLaJ69zV2eg5gxVEnG5EpQ4Z0zVdIMr3pZ417iUSyq7ae9bVf1E

o17ZJot1m36WVCtZ2csUg9QKEMQyoqq6+osWiSBGK0aJsWhWWBBae7j9AuN+9Hcn' +
                    

'htna+oW92wD5NUvAAvm0gPA23MPPYqqs86ET2DffREG16NrGpxtOXJ0L5jesDfHq08vUsuI5QNbYcNZ/1IeTWmJAuqq9Rt06

IaYzAbEVAAAAAAAaZsFcWM5YSTF1rat7MnNLe90Bcl4iRN98snI6JVqrsybLayeH' +
                    

'Ro0lPD0M9KKucfyJ8VPUS06vwKmV4MDHkqqvDlD47f1ejHenubzPKya7iL5OO1fR0JRvW1eSm1vJgIBOHg3paZnoYFVtCYsV

NlDYh/FK69BFRtR4RDvJVehm6WlwZim2KrUy/wDAvSVStm5RpG3G6txkOdTWVqh7' +
                    

'oURlDw14MwrkAdqtNoR0ZAxAAwEBAwFI3kKEOJEXxpWcNwKQvAvjWS7cVUm10JqmmpWOhnVOy7Bx2VrQuhVmozgz4dWyeC+O

Ve0/1MbXe5zlToze7dW2v7HM5NRKqqTt4GjokmzKuGbO2i7irGAjohPWqkWyj6fw' +
                    

'P0mMCka/Lr0kXy+zGmJT94Lzge3bZByLA9VMtrOiKlxhJEVHogKs/c7u3+iHx4o33/8AgqvdVrqirY93soJ/BkxABpCGlkRd

EnMhDSkcDnsIy0qo2pQqjbIMs1Zs1vruWvUzspyPis1K/goHogC9t0PQAJmQldyJ' +
                    

'Hu8C4mqSTfxQaVb7z4mO5dg3sYavlsmlGq6mYNyC0LmQHUAYAAhiKgAYgAAGmuoCCB4AAAFWQ0IrXjhLXJUpMwljhsliuiU1

D0Jh1zrUmq26nRSIMiE6Xrt6HNaro3V+o7XRarDM70laZRZcRy1cNM6LcdeSu/j1' +
                    

'6o57JzpBfFyPjt4PVGr8wRpqEm3Lt5PfpqtTATkNymVErd1WqJbkdHDzo8MCqlq0MlJqV1QrJ6mVaW2X1HWtEYSwllwdO1TM

hEaMwVy1dMzg1Vaw51ephbhc40Nd6B3Qlox+Tbuivkd7Fb6hvqXamBfb16thb7Zf' +
                    

'1f8AJasnoG5rqTauOe3FevSfQSdbtg5r/E4NS6mJEMcrsUVTkhWTzKNE5VfQZKC6tJeCyZqly9F0Di1ZNnIceLIvieum6mqa

1RztOVJ0r4TLlw8aszFZNBVvcNJvJWj2/wAs0GmUSikZAADa0XhIEWxZC5NB8jWO' +
                    

'6IvoWeCUAkNamka8agjktNmaLCMbuXPV6mZ2tIBAbZBdE2nBBtRRxz3JelhbegaFYXiS4MqaeQtKEWotUDNWB4coVk0yZLg1

tm0rRgKmVHVAT+DIAGbZIBxkTUOAAuiTwyCpVdNerJSHdRpoQX71qt9EQhFMSGIq' +
                    

'GxDABAAAA0IAKhizoCbQ9SKSLV2kTGRxGpKHuxLL4+SMMxbkBhrsVy5TOStmh/NZnFPnq1nozA6qclbLbbqRycELdTK7GpfK

lZ0ttY7U96V8LMyt2Ei4BbVb3pa8Doo+FLCycoTAs0dPI6ynXXqZuYlmlvf41br1' +
                    

'BJNbX1MKxwJj5KOj8OjINxNMJEANVLFIgkGmEiAqae5jmz8RDTa0Iq9vJGhDrddGWuRj+YTn4GUPsKGa7yG5LKYkqcCEEMa1

kFEOdegpCuujnHcz5Untb9ZXHovQHMvcfg5MTtWDtOFoFXDkkcxobxFqybhGqUat' +
                    

'I525CWtGTDXR/aB933ObdbWQ320kn5NVbRvoS3gTbDoawA0IYGyeG+xk1jxQ+OXaOnVFYe/06egz0rIQ2BpkjVKyqspIhZaN

LVjXL7kqwbk0IBEUOYFWzqyqyS0Ua4sjK1GvQKXGGXTknFv5GWImjiwGr466yBNn' +
                    

'asIHtDcuwbma5ThSUZJdW8jq29SnKUkVkNVb8Aa6oaq8YKjd1S49v+Tng3tasQzAn1KBD0EaQDAe1xPQgkBw3oPZfsBIF/Kv

2GuDkfQbDGYF24r1yyAKXJZCtZ2csGoEOAAAFFJitqAWRF8I24uRpw9DE24tqeRe' +
                    

'iI5GnZ7dCDXm49r3LRmQnSABgyjSnJtptamepVbR4mSgp2jQzYrW3LVUaiW+hzDbkRZMSgAAoAAAAAAAAAAYCGQAIaSZWENX

EwarglTuU9hUtWubKZLXy25rZ18CW1WNuO9NVjuSdLd1p7yIfy74+Gw1D4YdfQXf' +
                    

'4XOO5FE6Zs4Um6tV6ZRm9q4XE4A7LcXHbpD8DN/b/wC1/wAmtiOeANXw8naTN1stU0XRIwAIQxAUPQQABrx4q3o+5qqVdfdM

VDpGgldr4TGKNjWoNBvfUTtJeQ6/EsSW7X6pQLjjNmp7E2bs86dh6p72KRegHIDq' +
                    

'8jesEx1Kt37gTEElSSVK0pL1eACu11huGBPRmVBJda2emhaQJFpOM4QotVqVPoKw8vTsZqnCjsiL3lwtAvafQSquJ6CT2hDh

JFVja+5Fn0RQmIANMgurxHQgaJVjXisq2h6M2+ZU5GxySwdL5qrQh876GAD8mrd7' +
                    

'WJmBCLhpsUDBBBEAO2GyQAqfdgkAApMkCjpq1dbbGF6OloZVLQzW9VyV/wD0tDHVVzoHqC1B5ZoARDNK1JuobGmICBgEIBjx

2BiQG0gWChAOWxqEQSBUiAQDEUEl0U5fwolR1NLuKJLqS/Cpd36uwpXoEKRhqlZr' +
                    

'Rj37mt2SAGJra062foRpW0pYOdNavLGr2WjwZxp0SNW8TmfJbuJ3t3H5qa69wbkzk327grsfk10unHbVZM7cH+1kLkaLXKOY

rN8V10JOj5qM77Xlall+UxnAQGg9UUNJNR17k6SXXxH8q2vcmjIILdY1ZLa6F0xp' +
                    

'RpUafcW1f7hS42oUPqQD8AhsG40FPUoti1r6ASkKuHkipEyraiKlIAAqApWjAnqIg0XJZeInZ2ckFTCwMXTC1sR0JkBhpzCJ

GxBKAACgAAAAAEAwARAAAFDAYQRRdy5RI2lCEIlAABQAAANGnHdpmRVXklixry0/' +
                    

'uvWZYnGhvS2IZjyU2W8HoSfAtP3TO+ppVwjO2onZSAQGkA5EADEMQAMQAMGIAGIB5AF4hb/Quiqs29SFyNWconq+IAAKgAAA

Cqp2wskjTa0cAFk04eogcvUAAAAAkYgAY5FIEUMKptwtRG9XspjV9RaJtW1Ky8z0' +
                    

'M3ZvVlTa7glqGIUhpCL41N0mEDdlhk+Js+Jy30J2WfpJsVmA7JLHXqCRQ6i6gAUWeSQArIUdQBAAMBiABjotzgv5anuS1WQG

lqYlGY3UAABQAAAAAAAAAAwBM0SUEtVniNAKiXgIGmAaEhkVLUCjsVdaMgsSiAge' +
                    

'QCEAxFFbcLOXoToVXLVWFlD10IqqWg2aV6wzmynnBrx3glnoFK916oytqdVkrKVqc11kSlSAAaQAAAAAAAAAAAAwAAAim0Ir

pBAhQBVa77QFqurhjUSA3HQIKEAAAAAAAIAAcCAYCgBgQwVW6yRrfMVRnW21yG5k' +
                    

'vaxTaqorr1ZmAFiUFUcWkkCinyXs9QljrRusi2k4UgCWAD6CYSIFAABUAAADAAIq+PEs06SR/Seo93umarXjyjPkrVvGpNeR

rA0pmzHQyaEVGr7EmmaAACgAAAAAAApWehIAabqpCdpwtCBkxdUholFIlU2pUdSI' +
                    

'NEjOyhtCACBDKhCKgQDTiyfYL2VrSlElVvWqa2y31YnV1Sb1YCsnhslOBttvJSSbAK8lqtPoVypYutGD45U9ULjtHuW0ZP7B

EiyXejq4/gkoQDAqEAxAMQwAQxAAwACKBDECt/tolvqaXtTd7yxVf5OXK0HuefEl' +
                    

'nJA9Z0noIGwKAAAIBDAAAAAAAAAQDCkxpSLqWsCkV8rGGZHRRpmN/jZJSpQRmAWpdFN14ZKjSydUkmsambbepdtz1iqfTqRb

GFqSNEoDDHXKh4D3UESxAM0hAMGAgAAGAARWzrPGvSPYlUcxxSTV78GFZrU0u4qT' +
                    

'eu1kWbZrsCfuskaTBqCoQABUAAAAAAAAAAASAAOSlZdyICCYu1tVruLkqpTXUzhg1Zakzns04CGKR+socMThBAALqa8jUKeh

mlNkPkeiJ7BK1LrG4XGpF/YDpSMOSsOUafMqlD1Is6uviSKafzK7f7LQyaYJurlG' +
                    

'l1urvXrL0jMAAqEAxFAADAQwAAAAIoEMaAkY2oYgAAAIAAAAAABDACgFIxAAxF7U1h57EEFL3lHUTmc4YgNKe6RZy5HVtv0h

teR6pIqtnSY1ZK6jrV2skKB2s3IpLtXONA2SNhiVnVg1A9j1E23qAgAYCAoTAkAA' +
                    

'qGAARW7j5WSK2ScpFWf/AFJeJlJmRV35FbCRHWBLUfU1iL0wJw6+gTcAskVADYjTIAAAYgAAAAAAAAGAARVJlWzX0GZpXKju

SqzgYohwPJUAhiAqtknoTZzaQKpWXI/odG16CarORttKF06ibs9SBMAAoCuO+150' +
                    

'eohMC+Sm1ytHoQaUsrLZb1MzsnVw9RPgIAAqAAABgIZAAAgGOYEhsKTcgAAAhgEACGUAgAAAYAAAIgaH4oQ12CrUXxbXozNp

pw9SpjQpPcve/knQy0K3NhakKU5RJe0NYZ0cairt30Oeld1ku5021x0J9liGpzog' +
                    

'qwctgtDKqtGxwc5pdtVjuZSa+qUwDI0igQNyPb2YnVoCQGAQAAIK0taapPoZDbEJCqQNZCqyaWajxJRm0OYrAmD0CkxDYjTN

NCAAGAgAAAAAAGAAAEU0VUlF1WYJVQ9WGUO6iwioAiQDQAjMGnwLxFRZb7Cs5cdi' +
                    

'KQgEUORSABAACCHoaP8A7KyvirqZFUs6uRRIGnJVfHX4WZiUAABQDENAAhiAEUyRkUAIZUAABFIYhlQAAEUAABCAAKAYgArV

zIyBpEU2mSdCrWyT/ki/G0p7ElLEUttbfgV8zBCAthFb2VWxmOrhkwPkc2INuTjx' +
                    

'vWUZFnRSGABDTZUyQUhVgaAYEVAANFQgRSWBMGKqupLclLFWKqW7OhAlkLYNntSkws5YnJSAANIBiGAhgIAAYAIYAQAxDgKa

KmGSU11Io5dU/Agu/wANWQJ0ATGIqNKWSq+5EiWoxgBAAAAAACGIqAAGBfHb+tvh' +
                    

'ZN67XH8CNF/2V2v4loZ65VkAAaQDQgAAAAGDBAyKQABUMBBIAMQwAAEQMQAUAAAAADARSENakVdHttHQ1taFlSjmlyab711y

iWDN4YSDctvuBQAOoMA3W27ZwIAAAGAAhoUFJEqmASgIMxoRSRqoNxW16wSkkauy' +
                    

'SJVZORMtXzlCtl4AnMElxjJBYlABAyoQACAYABFA0+jAUAPaOBK0D1yiBQASxFFKBqSRqzIq7Zp6DI11q14GQiU0LqNCWpQA

NiAAAAAAEEAABQwACKBy05QekIj0AO8WW5a9SCqva/DqO9Iys1eg/ggAAqAAGASI' +
                    

'AIAc4gEpHGJCpAAKgAAAAAAAAGAhgAAAAQA0hDWoUOsFWfuIaJs3HgQQMQzSAbJK6EWEADQAA8IUgMNxMgMDkBADQaJRVsgq

fdaJVFWpyVbajIEMTWqiNCWyq3SWgNqZIpQtssz1NLy0klgiI1LEIAAoQDAqEMAI' +
                    

'AckgDTDQACnKeotBDTAJGkmCgbkC6syKWon1JFIEAFQMBgAgAAAQwCEAAUMYgIpikJB9wEa8dv6vR6EQmiR2NL8cZXrRmdPH

79fFGV6LVetEl8piBDEaQAAdQNKxCQWWBJNZBtmfWkiGI0yAAAAAAAAAAYCGQIBi' +
                    

'KGNakjRFaPuTZtr0A5DJFQMQGmTGtGIERQAAAgGIqAACAAAACinEZADLScdAAChopR01ACUNfMIc9QAQIQAVAIAKhiAAAAAA

GAAAABFA8gAD6oT1YAAgAAB6gAAAAAAAAEXXZ8u0/EZgAnoAACgGgAB118CXqAEV' +
                    

'pw7t6j1l80Tj1gBL2MRABpDCuoAQaZJeoASNIAANMgAAAAAAAAAAYAACAAAYABbkT0ADLSAADTIGgAgAAAoAAAQABUMAAiv/

2Q==' +
                    '" />';

var hitlistTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' + 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAH0AAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAQEAAgAEBAUDBAAGAwAAAAABEQIhMRIDQVFhBNKTVAUVcYEikTJCE6GxIzMUNPBSghEBAQEA

AwEBAQEBAAAAAAAAAAERITFBEgJRYYH/2gAMAwEAAhEDEQA/APyH5j7t9d7n53c+' +
                    

'I/Mfdvrvc/O7nxPEA9v5j7t9d7n53c+I/Mfdvr/c/O7nxPEA9v5j7t9d7n53c+I/MfdvrvcfO7nxPEA9v5f7t9f7n53c+I/M

fdvrvc/O7nxPEA9v5j7t9d7n53c+I/Mfdvr/AHPzu58TxAPb+Y+7fXe5+d3PiPzH' +
                    

'3b673Pzu58TxAPb+Y+7fX+5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b6

73Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673' +
                    

'Pzu58TxAPbPu/wB2+u9z87ufEv5f7t9d7j53c+J45FwivZ+X+7fXe4+dv8R+X+7fXe4+dv8AE8mEwD2fl/u313uPnb/Efl/u

313uPnb/ABPHgwD2fl/u313uPnb/ABH5f7t9d7j52/xPHgwD1/l/u313uPndz4k/' +
                    

'MfdvrvcfO7nxPLhLAez8v92+u9x87ufEn5f7t9d7j53c+J5Eqj2fmPu313ufndz4j8x92+u9z87ufE8QI9v5j7t9f7n53c+I

/Mfdvrvc/O7nxPEA9v5j7t9d7n53c+I/Mfdvrvc/O7nxPEA9v5j7t9d7j53c+I/M' +
                    

'fdvrvc/O7nxPEA9v5f7t9d7n53c+I/L/AHb673Hzu58TxAPb+X+7fX+5+d3PiPy/3b673Pzu58TxAPb+X+7fXe4+d3PiPy/3

b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+X+7fXe5+d3PiPzH3b6' +
                    

'73Pzu58TxAPb+Y+7fXe4+d3PiPzH3b6/3Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673P

zu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu' +
                    

'58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+Y+7fXe5+d3PiPzH3b673Pzu58TxAPb+X+7fXe5+d3PiPzH3b6/wBz87uf

E8aA9v5j7t9d7n53c+I/Mfdvrvc/O7nxPGgPb+Y+7fXe5+d3PiPy/wB2+u9z87uf' +
                    

'E8QD2/l/u313ufndz4l/L/dvrvcfO7nxPEuKivZ+X+7fXe4+dv8AEPJ0gMgAAAAAAAAAAAgKogNTW0GVxW+mGE1cYxTpreA0

xjpMYbYvGg3hrDnrtjnyddbreVSiYMN4MAxgw3gwaMYMN4TCaMYSt2M1Rio1WVSg' +
                    

'AAAIphcAgAIqKoimDAIpgQAAAUEMAAAoIoCCgICghhQAIVAF8CAmBaBiCniKuFwksbnFAwNYoDiGBQIqAAYADCzAIigIKgAA

hrM2R2w5a3FleiRP01GMGHTBhnVc8J0uuDBo8+98P6sPRv2+qevg5bdvfWZs4NSs' +
                    

'2MCjSNTfacq3O9P8p/RyExXom+l8f6tYeVZbOVwmGvThMOM7u858Wv8AdPGf0TKrVZsXr1rN218zkZrLVsZaiUBQRfAX9AQX

KcRQWICC4MCCLgxPEMQWRQxlVXBq4zhcFheaGJhbjwUDE/ZGj0niGJIdLXLhTIYz' +
                    

'IYOPkv8AK+AM44I1i8jpuFTGRcAYFFDEFqouMiimJgkXBEMbkjerOvJ0mGVWQWWeYI8oo0qHIXgCUOS4BPEAQRTCiIqCAKBI

6abXXh4MatyJWo7zFnBcOGts4x113niwrWDDUxeQIzgw1gwDlt2tNvDF8457e32/' +
                    

'xsr04Rdpjx3XbXnMMvext2+3tz1xfOcF+kx4x6Nvbz/Hb9q53s9yeGf04rsTHMWyzmigAAAA0jRViYTDWFwmrjMi4XC4NMZw

Yq8jIMqs/QwDNRrETgIa5yLLQU/ZSevJZ6oIXFxPFcGuc5BMJhrFzbU8qCYXl4l5' +
                    

'iiyZXpiTY6k5CXj6FtLy9UtoKzbxOKWSeqjXBk/ZeM8ATzMrzLPUEtOKzJcZoILn0QRbySTIQG5q666a+TGkdtMcWbWmpr+g

1OQiPCIsmWxFamphNGBqxFEpkqAvEMoIAKAAjWcN3zc2s5jNaaiW/wAseBCzjkVm' +
                    

'b7a3Mrtr7ictp+7hZlFyVHum0s4GXim11uZcOmvf2nOZZv5pr1I5693Tbxx+reWVUTIAmQoGc8+P6ud00v8Aj/RtAc72tPVP

9WvnXRF2mRz/ANcTodEXaYzNYuFATBhQEwoAcGM8Wrf3TBBPPBaepIqJPFnFbvCM' +
                    

'5qwpxjWKniueIEXj5mfGReKKnjxtMepsAmGuNjOVyBiTmf8AypbKs4gTlhrwZ4zwLagvgW8mc1LVwW8kzDn4luqoZLVnT5VP

2AzDK8JyOIJJat5nGccnNBOPkmKtwcFE4k/U9CA66fu762Y/Xm4a121rFVvpmPEM' +
                    

'iDwt6ObUvm6VI3bDqjP8f3WbRMUvHw5pi+a26+ZNtZ6g50auLcorOIKYUQXCAECAtWckWIrUTa+DU5MeNRWaA0yAoIs2215U

QHWd/bxmW53tb6POJ8w2vV1S8rky8qzbacqz8rr0o4/7Np6r/t84fNXXQYnc9F64' +
                    

'mUUTqh1RQEu2Em+TKNDPWl22MG2btGc59TmuIuSVJ/VeAHM/Y4eJwBONTCsqVrh48zikXILKc2VBcFz4mTKKqZvEyk8RFXky

uQVMGb5GRU8V/wCBjNymKI1jgzhc+pxvHPACFQ4XkC3lEi3HKM/so0mZCYt5IBbE' +
                    

'U5CHqSgK3rePJ21u08HHW4dddvFmq3/1PKQTORkeTg3rJWW9MulSHRDojXExfNnVToh06ryJg0Y2kl4Jwa2xllqIiyCwEwy1

ayRKECKNAeKK0l4XKiKxZxRu4sywsZo1OTMb8CkZoApguqx04XilpjjijrdbySa1' +
                    

'dMYkyjt+0ZsmM4TTHNqJh27cnjFtI524ZzXbudvO2ZieibaTXTF5psHPKQFFtKVACAC+J+yKBmhKgLImDNPADC4SKCYa8M3i

mTPCgYJzxgysBIv7pwP0/qgtnHjTBeZxwKWXETDWLJOPEzt6CJrzSzDWs45tM49Q' +
                    

'ZwuP4/uudvSLf7ZM8gZx6kxLlceqTHmBxyY4cizxynDztA8TlwOEKofqhwMwCWLmeSc+GF5A1rxz4Na3HDZzlb6vBKrU2nmJ

1YEwc2tObDWvNqo3ckTmMqtwCeAM782WtmWohFygAioqUJzCA0uZMCVlVqTYq9rt' +
                    

'/wCzbp5L4LrM639WK63+PDxjnbKkEnNprXWZl9GLzNEBFFy6a7OSylhHomKuI5a10lYsVLGNnS4cd7xWA3pzc466RaOsY70/

g6Tk59/adOPNmdjzoDoypxBAwY9RRUwYPFfEDFMLUoICCLMLwZa4CkVPQmQMLnET' +
                    

'iccAZq+CcTHADK5QxQXOUyuKmPVA8DK2cEx6qLlMmPUx6gZ4hj1MeoNeDDfDzZ4JAxUXKcFDJ+vBbE4AS8ShkQi5RMg1kZBV

8F15oTmDpDhlMjKqZiHgCbc2WtmWogGeBkBFRUoQIDaWnguJP1ZVZpwztwvhGZtd' +
                    

'NsxdtmFhXXfadyZ5beLlyM4W3JIjeu3Bm1kMXVQVUCFIg1G5WI1KlaXbbEcc+LvjMc7oRKzNnbt2Oc7drevbsmclwmu9sky8

m+122y1vv/jP3cz8z0oA0gqAKgAoioAACAouTKKgvA4IuRQP2OOAXimQBUyuUA8M' +
                    

'ovDGDHqAcMJj1W/qCHDJ+6zGeYJ4rThnmfuBktTE8wDNRTAi1CoK1c4TimVEOOEX90AAUUnNAHQDLLR48BMqDOyLsixDJkBB

FRQABYtpInBFQXEMeSogYoAAAQAWkSkBszhJWuFZU6mucjGNctTSeFsLiuuMa8De' +
                    

'9OmfHwTSWTHVlz7t6ricozOxyFwdLbOIL0liiC9NXpqaYyq9FJraarKr0VOmiAWWElBF1406aSXPDmDV0vOMtZ3nNcbbeCKz

EXpsTgoueAgC5IhKCiZgCnBDIBeZwLzEMooAiyGL5AimKnFRcmUEFEFAAAAAAFxc' +
                    

'4JPBbOKcc8EVZauWeIYa3zOLOt4+befRFY2ZdbjDHBZUrI1w81xDTGGprbx8F016tsf1ddpJwnCRLSRwvBddc8VsWXhicgSp

wLWVhauUyCpq9VM5QQXHknJZW7rmepquYuOOKdNVMQi4qA1gkvgmVl48UVemt6Te' +
                    

'eC62OmcT0ZtVz33us9a5TPku23Vbf6LLML1ETy4Gf1XJdryFTMS3ks2snCNZz4CM9R1xrMTWTiKl2lJZj1a6Z5HRqcDOZhMr

trMcDpgiW8GurP7HQzYcDWZccVmMueI10zzMGt7/ABNbJxjPR6r0epwrecsbazw5' +
                    

'pZeeSa7WZyf9GbMI6XS+NZulXUwmuZlJcLLZ44AThfRLMc2+iw6bYaYwLjHCpj1VAMZXAIADp2uddeDj27ZnEy11W+DFnLUa

vknTwS7cPFnr9TKN9K4mGOv1S7+BlF0xxW9LEuF6vVcRcanTGc+q59Tka6C6ejMr' +
                    

'UtOVZ21kgu94B4jHA/c4HDKgi3hwRUXXm3m2cmJza4xKsau3BnMJbnit2mEVOGSyY4LnWkktk9RHaazSST9bUa2uZGfBlXPd

i3Eb2vByty1EoA0yAAuEF4UVI3KzgmYiul1m09W+zjb+O3905My5hxz1ThYz/ivT' +
                    

'O1r5L/p7fjDtdyb658ZzjoiOG3t+1ON4Sc3l7kmu9mvGeFe3uzPb2/R4bGoGbEu1vOiKLJODWJi1J1eC/wAsegE04E142eRn

aHVc5wnIdPqt1uOadXLgvWchOrHNMbS8+ZrtJML1TMoGNueTO15NdWuObOl8EUt2' +
                    

'5WYWXbx1NuOMNmjHVxzipbLzljWv920Xb+2g526+C9UWThKztyVFm2rXVr5p4JtjhPNFXayzhU12kmKm3Tyj0e307d1zZLsv

iOU21XhXo29v2trnGP0ce92ddNerW49ENc7rKzdbPVqYv+WGc+d5KLpt4LbPPPmx' +
                    

'mZT1MNWzj6JenExzOfiY8VDh4JhcLiiM1S60xQdO1yrW/LLHb2xng1tvLMYwze2mp/aziU65JjnPNmbwyjfTPGJtJJy5s3aX

xam2vmcidOZyZ6Z5N9U80lzefA5GJJbVmkNed9W8LajPRq1O3OSzDpJlnarl/qg6' +
                    

'2BtHkIDoyooiovVQwC9WPAynghg1mN9uTrl8Jxcno7On/T22vO8kovgl/tNLnW+cZ2ZVy2vgyu3NHSM0AEAAAAb4bThzT9Wc

4a6pef8AVGtWcHScXHk1rti8UsG9d729uqcuVj2yzaSzlXi/5Vvs9z/Xt0bf23lU' +
                    

'HX3G3T2768Hilen3dv8AH/6vKs6Rb5o1OTKjetkmFlmObAYuukwOYmGt68lwxLfBeq8smDXTEkmb5M23OfFZbOPmDc01rN01

8zrvkdXocql1xM5Wa7c5Uu0sw1Npg5ROnbmY3sw3LPCmb5pquf8ALWeherHGcGt/' +
                    

'BqxdGOrbya7fbvdubwkNuD0dnXp0nqmo83d0mlwxNrOVw337ndyanRW5d9uVpevlcunt5zr0YnkzblHLte3mOrf+htt7eWzG

XXbO2vTLhwvtvU3+jlvdM/wZd/8Ax8eLN7Oy7DHHC5bvb2jPTYumIZARbeJnH7og' +
                    

'renG4drOLz65l4O07W+1zlmkLOHFz1mbcu99vvjhtn9XHF02/lMEVrpnkztrjlOC9U8y7TFxTkTXWbfovRM+Sa3Gq9a8jO2u

F6eGZbk3uY1r/bDxEmtz/c6dFkz1VJeLW1nSzqsybWZluBrT+3iA8oDoy0AigZMg' +
                    

'tYb8GSFXTW7bTXze3GOHhI4e2l6rtjhjGfV32vFn9EcO3z2jPduG9OF3rz77dVySclQMLwjaIAABAAwALMIA1jyP1SY/dUVq

Xw/ou06tfVMVrPBlU13zpe1t/wDmudmLirtc31N71fyaZTXmu0xWWtuMyenjKosU' +
                    

'AKgCCi5EyqCocAUVAFMoAuVlt8WVl4g3ZZZm8Hr/AMeHk46dq77TbbhrHpYHzt83a1l7tu52c42wk07G/LDWjPYmNcuqzSSY

nI6ayICIoIZAZsjWUoMXTWs3tRtTRxvaZvbsd2d7iLLRwz0tf7tpyc7zG8Z11nuN' +
                    

'54ul317mrzLrbEs/iyt66y5lavajOl45b5xLqsXt3zZ6bnHi6Z8Gb/fFlqM9NWTfwbpk1cZl3i3qvGxvWtypv+Dl1Wch1uBN

HkAdGWhFRQRQEVAevs63XtT14/1WXNWWTGvhJhi3p2YVnlN/V5+D0b8M/o8zX5Sm' +
                    

'QGkAABZIdXlEDFMUzUAWWJhcKNSxbJZw4YZkwvFlSbYvFuzhmM2dXC8013s4UEs4klxfLxLeK6dzbTbqn9FGGpxljXcxt/1J

/lznrGNeZ4nqGVvNFFAQQUURUAURUAAUMgIZOIgPV2+7yzZMeDfc7+s0uLxeIT5X' +
                    

'S8bkmZyBpHs7G+2048Xd8+dzbWYlws7/AHJ4sfNV7rGcV5p7rfGLM+rf/kzxiZR0sZxXP/yePLgs72lnEyq3ktSb602s6ag5

bd3jiJN96xMXZ2k8mrkE6tmd9rY6JtJhIPOF5jowLIgLFi5vmiINdW3mZuc+LKir' +
                    

'1eZmeSLAb12k825vr6uMal4M2K6dWvmMZDByA4NsinEQBAFb7Ul2ueMkc3TtS3fhyxml6V2zi5XfFkrFXXbhisKbcdL5vM9F

5WPPjjhr8pSHNq6458Ez5Khwn6pJbSS24jV2xOnX96CW+ETBJaKBxAF4NSZ5Q00z' +
                    

'xvKLbeU5MqnEzfInAnPiK3N54zCb6Z/lPEt18eKTEvC8LziBNczhzZ21saks24cm+7JZld5Rns3+7S8tp/x8GNp07WeVwSyX

Pg6TXr1zrm3xn/JRyqN7zHC8LPBgiUXKCioACggYMIvEBFwcgWYk9UQUAAAAAACC' +
                    

'wFkjW2LOSRdv7WVc6N6aXa8DfS63C74jOV6rjmmAVG5vWcAjpO55rd5Y4ifMXS8wVpF4YZUQDCChgMUAMnEBfBqYZjUkSqS8

QxBFYAaZURQBAB17Nx1Xxw5OnZ/vx5peljeZWc2VmzFXOWcV0l6ozJrrbvfDlGZc' +
                    

'Nb3OuQcttrtc1JM3Ea07e29xGtp/r/jON8a1vjLNvTOnX96mut2voa63a4jW1msxANrJwnJgFAF0mdpAdLw1k/qzLV35sMxV

/Vc+TPGtThFEolAXK5jGQw1q2eRLZyuP0ZXIh+pwQDV4HBBRTKAGQAahhJxdJGaq' +
                    

'co5102c1hQBWQAAAAABYiyWitxN74JxiXiziuna36and26tswnb/AI9WWDjdDJkFFycPJAC4EBFwYQyAYXIogZXIIvIMRAyZ

9DCAs5t8GJGsFWLieYYoiuYDTIAAAA32rjuasLLiypR27k41yd+7ztcKkaJWpf6M' +
                    

'LKuI9XVrp2s6+LyXjWpeGPCuna0kl325Tl+qdDNn+vXH+V5uVuW+5bbxYWJRZwmUKoOnZn8rfJzb04a2+aXonZtc1lagqiFo

JQFZABQAQAFAAABAAVvVpzjUrNVdpwc29uTCxKAKgAAAABBXTXTLprphnSt5c7a0' +
                    

'6TWWOHd06f5Tk6zZO5tOi5IPPdtrMeCcQbZRQAyIKKIAqACggLhMKgAAAALG5WOa8UqtZEzRMVgBpgAAAFAAd7c6a1xtdO3c

6WeTnWZ6pkQaRXbubWdvXX0y4O3cxt29bPBm9xY425DwGkAAHWT+EcpM3DtvZrJP' +
                    

'JKsc9mVtQQAUAAAAAAABAAAAAAVY0w1KlWLeTDWzJEoAqAAAAAuslrvO3rUtxZHGbYam1dP9erc00ngzbGnHrxzY22u36O3f

mvTmc3nWf1KplBpFQABQEF4AIABwCgAAKiwwCAAsaZi8UqqJkQZAaZAAAAAAb7Vx' +
                    

't+q7zi5y4srpvc8fNm9tTpzAaQWbWfogDVnCWcmW9eOuGEhQBUa0558ktzcp4CKAKgAKAAAAACAAAAAAoCzW3lARXTX2+958

P1Tuduaf5S30TYYxagKUAEAAAXpopLh113cujZudu30ZuLNa62uuLp2pONcu7dbt' +
                    

'/HkmS1U336r6MoNMqgKBViUAAAAAVAAAFQBUFBFEBYsSKirgMwQYAaQAEAAAAHTeYkmc5mXN0vH9kqxzFqKAAi63Fy1tPJnC

y44I1GRbM8kVAAQAFAAAAHo0navauuP5yZy871aaaTs3uW5zEpHlAUABAACRqTBr' +
                    

'ic16p5I07azTacJx8nLbuWXE4M9dlzOCW3a5vNJDVu+952oYXCiWItqKgAAAA667SOQlmkdrvFm8cDNT5XXbfucOmOILJiAC

gAABQAAAADIAAeACoAAoIACrlkyhreRnIYuoKioAAAAAANTZkBqzPFOmtTbMS2py' +
                    

'vB0zxpmTkyCLlAUa5T1ZKBoAIACgAAAgqAoAAAIAANa69VSOvb4a2pa1GJI3jWTizeHFi7Wpmmt3uaz+2MXa1BcTQBReCAAA

AHAAAAAAAAhkAAAAAAAFQAAAAAAAAAABRAAAAAAAAAACS3hAde3rnWsdzXprc3mm' +
                    

'vTOfi57bXa5Zm6t6QBpkAAAAAFGscDWZqbVBAFQAFWa5OmtaqmrjnijqWTyTTHIbsjv2e1pvpbtPFdTHlG+5r073XyYswo1H

Wf8AbcZWv9l6enwZsWVna54IDSKCIKimVEBQBAAFBAAAAXwQzV4AgAAAAAAAAAAA' +
                    

'AAHgAAAAAAAAAAAAAAAA3f464nO86zrOLVmUqxgaxiJg1MQawimICgmFxknFbfCIJnyScaN6zE6r+wF/jMeLBbmhCgCoACtQ

IIrS5QZUen2t/hf1eV6Pa3htFqOXuZju583LZ6PdzjrXnvJZ4iAKAABkAXgmAABQ' +
                    

'BAAFBFiAAAAGQAMAAAYAAAAAAAAAAAAAAAAAAAAAAAAABrVcpeCWorVrOUDE0AwoGMtYxxqZQW3ExGQUWTNwu18Jyi/2zHjW

EABUAAABWpyEioqqy0io7e1/v2no41vsbY7s9eB4jt7ufwl9Xk8Hs91/2v3jxzkT' +
                    

'oQBpkAAAyKAAAAGQA4KgABwADACoUA8AAAAAUEAAVAAwAAtQCC8EwAAAAAAAAAAAAAuqNckIbcmVMAgpgCRrhP1LZryYp2vS

25QFQb1nTOq8/BNZ43km1zUEtyAqAAAAAALFSchGlVAFqa7dO0vlS8mp0bTjcWck' +
                    

'Hp9zc9nPnY8cenu3Ptpf0eWE6QAaQAAAAAAAFAAAAAADIAGAAAAAAXwQAAADAAuEPAFqLk4AkFwWAmTmE5gYMBkAXmAgAAAA

ALAEUUAMFvklqBoArISZGpwnqKW44RkAABAAAAAAFnIII0oigJhUoPRt/wCrP1ea' +
                    

'PTv/AOrr+rzQiegXmKAAgAAAAAAAKGQAAAAAAAAAAAAAAAABeAgAC8wQyuEBcnqi+CCYBcqJOYvAQQBUAAFiKKAZRRAVAAQA

BZ5pblb5IKACAAAAAAAACoqKKgKqUAd+5/6+jzu/cv8A0O3+7gRKeICgAAAAAIAA' +
                    

'AAACgAgAAAKAABwAAAAAAAAACBkAABUAAABcAIAIACrAQFQAAAABBeSQFABAAAAAAAAAABUUUARQAHXf/s6fu4t7XPb0nllg

iUAUAAAAAAAAABAAAAAAAAAAAAAAUAEABQAAAAAAAADgBRQEAEABQAAAAAQAAAAA' +
                    

'AAAAAAAAAAAAFFQBRANW8sIAAAAAAAAAAAAAAAAAgAAAAAKACAAoAIAAAAACgAgAKAAAAACAAAAAAAAAAoAIAAAAAAAAAAAA

ACgAAAAAgAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAA' +
                    'AAAAAAAAAAAAAAACgAAAAAgAAAKACAAAAAAoAAAAAAAAAIAAAAAAAAACgAgAKACAAAAr/9k=' +
                    '" />';
                    
var propertyTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' +                 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAIcAAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAAICAQMCAwcCBAQEBgMAAAABEQIhMUEDURJhcSKB0TKTVAUVkUKhsRMEwYLSI1JiMzTh8XJj

FETwgyQRAQEBAQEBAQEAAwAAAAAAAAABERJBMSFR0fEC/9oADAMBAAIRAxEAPwD8' +
                    

'1X7t90if/m8/zb/6g/u33T63n+bf/UeJOEZmWTpeX0fyv3NUU/3vPL/92/8AqJX7r9zn/vefH/u3/wBR43/IlXhvqOjl7vyv

3N2X/wDZ/cfNv/qK/uv3Kf8AvOfGv+7f3njmFLMTKb6jo5e78r9z7W//AJnPl4/3' +
                    

'b/6h+V+5/Wc/zb/6jxN6V6ahMdHL2/lfuf1nP82/vL+V+5/Wc/zb+88W0+xCR0cvcvun3P6zn+bf3m19z+5R/wB5z/Nv7zwr

Lg2OjHr/ACf3L6zn+bf3kf3T7lov7zn+bf3nlMzlvYdGPZ+V+5/V8/zb+8lvuv3K' +
                    

'v/3Od/8A7b+88mrI6zoOjHrX3f7i/wD7nP8ANv7za+6fcXp/ec/zL+8+eqtM6V/mOjHs/J/cvrOf5t/ePyf3L6zn+bf3nkA6

Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr' +
                    

'/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr/J/c

vrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6z' +
                    

'n+bf3j8n9y+s5/m3955AOjHr/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf

3j8n9y+s5/m3955AOjHr/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/' +
                    

'J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/J/cv

rOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr/J/cvrOf5t/ePyf3L6zn' +
                    

'+bf3nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr/J/cvrOf5t/ePyf3L6zn+bf3

nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955A' +
                    

'OjHr/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394/J/cvrOf5t/eeQDox6/yf3L6zn+bf3j8n9y+s5/m3955AOjHr

/J/cvrOf5t/ePyf3L6zn+bf3nkA6Mev8n9y+s5/m394PIB0Y8lmK/El0yNMin7mY' +
                    

'dFbNVWi2Rzy4XVnX4V4sUS7H/DX9TLy0izDbII3lpb4LJOhpaT+gCdF0KjJpdAOlFiTZEoUAqDcIxMKEW2qRG8kFQncmwYFW

gtH6Bak1eoG1oUwm58GaKKCACggAoIAKCACggAoIAKCACggAoIAKCACggAoIAKCA' +
                    

'CggAoIAKCACggAoIAKCACggAoIAKCACggAoIAKCACggAoIAKCADxtz7DS+GDL08WVhVqpv5GrObR0C9NTK3b3AtdW3sHp5hY

r4sMgFbwl+oS/REQGlqdKKXPQ57HaqioFAJZ4jqEZnWxFllthREMiiMr2hV36E36' +
                    

'hTqRQQa2f6DqR7bjZFFT1cabG001KMTjO5ate1hGgAUAABm91SJ30MrlbekLc53tW3ImtEjPckmgPUmnlZB5K2dX6XB1XO96

5A7AlLdyzruUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAA' +
                    

'AAAAAAAAAADx62XgaWsma7mvAVSzJtAfQu8AXddEQBZA08VgiJJpEG6qbI6meNQp6mggYs07Q9EbOalJ2xnVAR66yV4WHrsR

Jt4K9c4IqOI0yXMJbEesal6vSAD108g/5YC1WcBTKkCvyDW3sIsvxKtZ9pRsGazL' +
                    

'zg0EDg+Z2bqo7ep2vbtq7dDy01KNWjdESy+hbONsCm5PFZclUYZm+L6e0Jy4WSjdrZTTyjVeay+LK6mEtyAeivIrPCx1Zs86

hVeRXlst5XiEegHNcye2eh0TlSAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkgAAANQA' +
                    

'GAAAAAAAFAAAAAAAAAAAAAB5K6DfyLoiLTO4UzIW7C0bY6IC9F0KsLxZBqBdTSUvtMpHXjUuXsQdNMAAqM3eI6mHHSHuafqt

hxGhltzkiijdw9iqdYkWlKGTEYed0AUTrHQuY1yyZSytdGVxMNaAM5ceAUZZMQlM' +
                    

'bl21ywC3yVTkimPMYjKAqmJ3Npyk2c24qjVn20eYhCI5cvIrpVrnOplVjQzQ6FqsWeC0+EJuYZYS0IMu028DMKZWBaymCGkd

l8HsOStqdVivsOcJzJIqrOQ1BK4heJvlaUD0RLKZ243lr2nA1xqLog9AAKgAAAAA' +
                    

'AAAAAAAAAAAAAAAAAEb2IEy42BnQ0BQYs3oXuWJ3wBoAitLjYCjAADUAxbkSWNQNgibxO5QAAKAAAAAAAAAAA8bZdiPZB7Iq

rtA8Rv5DbzILGAVkSyBpI70UVjfc5UU2X6s7EQFnCbBjky1XqBlQq5WXoyKJzoWz' +
                    

'soqy1lKYlBUeXCc9BZy4ajqKpNvMdApmdQLvhyiZ64Y6tLwgKJlKI1Arn2B42wiKHEfoMN4euwFcJIPpuNdHh7F31lAHrrjc

58900q1c5zBbv0ts4dCxGqLJvYzXQrcKSX6pXfEM0yViJKBhqrmUYWhp1UNrUyai' +
                    

'Or+D2HKUdnocrVr2prXckVa6rzOnJHbDOddUbulEsejDrENM3TMyY2xk3x7ijas9E9NmdTimpfU7EQABQAAAAAAAAAAAAAAA

AADcAGzOdSavJp50IMiYQGHroRUUtdzG38UX4s6VRCi9ytSXidjOhVXLtbRB5zsw' +
                    

'NyseOhHeNDKUtZ0M5loIs27XZ6Eq1KbNKbQtkY3a22YV0q7Wb6GzlLaVUdQgACgAAAAAAAAAAPGtRuENpKBR0XQEVSpENJS0

kB14qwp6mwlCjoAgcprazl42Ol321f6I5SlWHXXRkEeus9Db7q11wzFYnOhWlMVC' +
                    

'npjKyVSlKZLN6MvpxDzuAzhLUKXPVkfa5l5RcYTAKZc6ouZysomIy9XqMQ5eNAKtdIaC1eIhEW+faG4pZz4IDly2VoVdDKUv

yI8Qbqa+RBJoqvDKTDMqyrS46lTeZ0RVVLI2clGJcdSFUNShoyo7M4urSTmZOkt1' +
                    

'k5tuIZIqr4kbupUGF8SOl5jAo4x22iZR0o4ky8Wh6lpqKjpjXc7LRHJxGTVb4W68CK2AmmpQKgAAAAAAAAAAAAAAAAZsnM7G

iNYIMmpxCMlQEYK40RCBDtj9q1JKemg1x1LP7arCKqROG4WrE9zwsIMTpSmu4EJZ' +
                    

'aRtqVqHAxD8QIm9FuW1YSSfq3MrHsNKPitkCJtaGq+n4tzEf+BpJ3eXhAdUCJp5RQgACgAAAAAAADx4iB0HRF3ZVFuwP/Ngg

qOvEsz0OZ6KKKr9WQUAFRz5PU1ReZmztitgkr2bmHsZct6yRWquMtSglL1joG7Vr' +
                    

'DWCLtjOoDPd1gspuUogV7llBS/NgJxDUPqVvWVK2Ylz6tiQ1CmUwLlbSkshSkoXmR9U9divwcMBmMIxyv01XXJtx1yjlyv1R

0Qn0Y3NrQxsjotC0CNKfEpIaesoCyTIETgDLSaJnGcDtdbQ/4CZZUdFpHgYWnVG9' +
                    

'Ec4hYcEitJw5Oln6Zg5NvEo6J+mPAUYeXO4rqI3Y0A7EqonoxKZKqG1sQdq/Cimaae00EAAUAAAAAAAAAAAAAAAlrJeZBkDM

S9wRV2hZZk0nGmrI1BUQTCVa6soThN7hUajAVlVNxkQ0perGjkB2tKW8shUnd91s' +
                    

'JaGQFob7tNglLgsyuyNTOmOgFvDaVf2kNJ1rWdWzKUYA6Ltos5k2jlVKzl6I2rJ6bBGgAAABQAAAAAePVsq0ItGVaFU3KiFI

N0U2S/U7nPiWJ66HQIGeRxXzwaOXI13papakE/2+z/mM0q24LyWq47V5lpVNaw0F' +
                    

'L9y9LySzq0oUMJ27p1gWfdZTgCw1WU9SQnhuIDSTUOUJq051AYSzlNlUJt1ykhMbStwutVqA9LahQ9yzLSahkTbbnD0Lnu9T

0ANuV3Ql1PPdzZvqa5HNsOUjBqRF3OhzWWdCVR4RE5zMmk4eSOO5tfwIBG4RRMFG' +
                    

'VaXOpHDsmaSTb/wMxDiZA29DmpThnRmZloQSVJtfD7DFkpUG9hRj1VTjJXZNxEEVpcMuG/IqN9reZNQ04bnEmatvfQuVlmVd

aaM0Y49zYQABQAAAAAAAAAAAAEAxjc2Y8AGXl76Ihl3ffGyNBVTgrUZ6mXoK9qlT' +
                    

'lABowCCpT6rYRksO7jZB9swtiiPutFVhbi3asLbUS1Mbl7VWrdtWBE4cmX/xPco+KK6oBVJtToLxZyv27mU+htNJeYGTSar7

dTEKuDVa9wHVPYphWnzRvVBAAFAAAAAB440RdSdWPAqqaSl4MrQ68Klz0IOyUJJb' +
                    

'AAINwpexxrZpuzrKe5vkcKN2Zdr0rDWNmQYs1azaNutO2U8nOsSp03NX7cdoVa96UpYInVtu25X31UTglbVShoBiW1psJmFE

MKYXb5iW3lQ0BZspa0CU6OGiOtlGZTD7XOcgFEercSqpvVPCLMYalHK1k8LYDO5A' +
                    

'GbRqhsxQ2ZqjTekT4kU7qGWWRYApGp3gpl2hgRSk/wDAJyzVLRL8RM3kCmYSsoNPKxqYUq0NQxAhppP9TotDDzDNLQUZcOyf

6i1e2yjcOsWUOZ6hvMNeQRum5p6GKas2SqlW1lM61vLho41UW0hG6uLIDqACoAAA' +
                    

'AAAAAAAAAAGZ8DNkV2hS9ehzfJNkiDN03p+ppNRjYWTawZpj09NQrYSrLYI3CkgrYEzptuQC5iFuH21UbskwVL99s9EUQJO7

m2iGuSS47VuAs03jQTGUGlVRuAI1HqeO4tYbzoH6orrBmU9ALaLP/wBOhDa7a16t' +
                    

'6mEoA6V7aKXubXT9Dil3PwOm+HlaoI2BqgAABQAAHjgAqKq7Ho41FF45OFVNkv1PSRAANwm+gHK025Ir+0zyWtirXiWq5Pjr

vqc3Z2tLCt07ZfcITtFdCp07IepK0bUpwQLdyw8h2TqlGSS1aXmCuys5jQBFtahO' +
                    

'fixIi6Up4YXbpYBCVsOUJThJQyJRPbnoa7peVDQBu1U3+04HTklLtmVqctjUQIykKOldDRK6IpmqrpV17nKa3RlaGZUuHBoA

MPDhgy1bWMdQKqzXWCVTnOqCcJFrqUabMzNpNPKhmEos1M4JAslKg2tDGZhqGbWg' +
                    

'oxMtdTVs+wWcuvgS6jKb8gNU+J+RsxT4n5GyUZTcw8mlhrzMrtblOWjTA7AAqAAAAAAAAAAAAADFlmTlb0PGWdrLc5XhZ3eE

RW9Uc1FbRuzVJ7c6mbxV9z12A2AnjIIFXiEsgd0PSUHO5QCTs0pwCEGrNTC2Mljt' +
                    

'WdSAWtZ9VtCNpvAfc4qitKqjcoicZMwlnrkpbRZKukARKWSyl4w0Ddart7mBhNo3RR6noznDWvsLLagDump8HoU50+GN0dE5

QQASgAAAUeMsENBXXhWtvYdSVXbVLoUiBjleFXqbOLm/I+39v+ABvk414HOvia5b' +
                    

'XhVt5l43VOLdCqt+xr06jttWvcngOqd4roS6tXDeGQKW7cxqPibeklV4r2tEVe5xMAHW1Wk3KE0hyshp1bTcwG6tRGQC7lHa

JmXYsWia6I53t6Y66gcwOhTaIQoWoHVAB6GFLNNLCb67kMppuIhmigO7DWgMuriU' +
                    

'00BpVTqpRmqyG4gVKLZ4JVy5NSZS9T28iA3LR02ObUOJk3sKMtNNbolrbMry15lu5QQr8XsOhzr8SOhKrDjuWMzqbMuzTysd

TQHZaLyBK/CihAAAAAAAAAAAAABm7iOhi8RLUwXlslCYmVPUDHH3NtvR6C6TUvYy' +
                    

'pd03hI6NSoCs0cqTRzrb1QtEdBRLNpYyyp2aUgzV2yn7AKUgIKq9zl6BtN4Jl4RWlVRuUROMlrV29VtCB2biqACrScsOsIgE

iPJjLwi2U1XbqtiLAFvKSjVaoicOSpNuX+pmXLT2A0pdpOyw/M4q0I1Ruyc7aAdW' +
                    

'AnKCmc6bBAAAeNHTjrNl0WTEHfirFZ3ZaOgAIM3t21b6HLjXJWLVUovM9KrzY770rmuFoUc7W7758jtWvG6y4k8/EptnQ9F6

1SlCjFaN5q4glnafVlo2leqlaama3i0vMkVbXVklEMio7ZTiBayblDstWvcn5gSY' +
                    

'y8ldq2ahQK2VXlSMWbjEgGrVr3Th7HFtvU68qdFEymcTUQ3AQKIWnxIhqmovwdBKQM2nZSZVq1psszG4Mpp7FAMy7JqIz1NG

HVKIfsEG5/8AJkoZtKemOpqo8Cyb0Ukq9doNyqsys2c5TAky0zZmySt6cKNDWwox' +
                    

'ZJNRgtu5S9jMyzVsyi/xCvxI6nKvxI6marNqt6GjNq+l3Taa22NAdKfCjRjj0fmbCAAAAAAAAAAAAADly2WJ1WRVyvInKq9y

b3RKWnGwVLp2caI2mmsZM8kvT2kphROUPBLOHCNozdpZ3FHKkDZltpqNNyks2lKy' +
                    

'wL5gKWgQJjJa1dvVbQgbs0qooMJpTJWoRlgErXcg07KqipmHEvcC1U2MZ7mntoUWlUT1AvdCgjxWWiLqbtZPC0eoGDp3quhz

hLHQtVLyB2TzK0Zo5pqO3daG6uV4hHDk5m/TXHV7gv8AcUhqy31Br8wYqpcdT0rC' +
                    

'hHHhUueh2M0ADPJbto3vsBy7nbkdkpjTyQ5uTuqqxE5Y4rqspr2mOW3fyY00RZ9G+Gkpyasot2rJpcbhNOGc07T3atEVq1rp

drQpaiUWJe/dGIg1ZcfbK1A5xLhbs1ZXrCbwyVrZv07Bu0+rVAapeqlNEVe5xpuX' +
                    

'vo69sZIqd28QBjlTT7W5g5mrubZ2M7GohsACiG6GDpTQl+EaJKTy4KYs2tsdSKqctvUpFEYKBGSZakuHroSErKHKCK3h59gq

Zaa1XtNVHilk3oZWjnY03BK6sBq0bMOO7SDYozfbQXWrT9hlytU0as5lFQrrU6HJ' +
                    

'a1OpKqN/tnXYpmyT1Ra/CiDpxvVGzHHqzYQAAAAAAAAAAAAAY5Y7ZexzrbMJYOzUprXwPP359K1CulphxqYou15eXsbWhiM9

1noBu0RkxRy3slob18mc59UL2sDoACDKs22owjRl2hpdTRQCfaCEFU2cshq1sQjM' +
                    

'NalFqlM9CWv3OFoRmklVSwMlluK6roTyKnDkDOE4W2xqqmWZaVn36PoADXc+5bDQqWGuu5hTuBtJr1vRanWYaa+FnLu9Paa4

rKydemQOtqqyaejAq5XkAjPGoqvHJoAAceZ5Vfazscaxfkbejf8AIQb7+Ps2wtDz' +
                    

'8adrHTnrWqUKGzPFK9SUl8HV/wBSqh6aE47qszuS/J3KIg3/ALbptKRFYxfk8GL0VWo3FeN2UzBlynDzGCi1/qL1VWBMuXvq

VXtWva15Eq6z6tCDVnRx2rJOx9vemR9vd6dBdWrXLwBxbltgDc2gAQAdVojkdSUg' +
                    

'VPo/YyGO5MmK0tAAAbgic2TLCthuPEnbFmpmCoN4w/YVaGHK1UG1oFXtdtHnozGic6o33JaqSUeX/iRGU1J0M2+PRLGxoVU5

LTVLoSyUTv1M27lqonc1Z7FRFsdTitjsSqzZ1WppRGNCNkp8JB0p8XsOhyr8SOoA' +
                    

'ABAAAAAAAAAAADhezVmoymdzlyOLaaoBVtrJi6bcbFpZvUt5jA9UURC2M2iudxRdqgtknqPQq5RoxW06aI0AcRL2CsmlAecE

SS9gFAAFrCcsjt3PwGuDTSqvEDAh2cdAVW7ZAtqpJGRmzlh4AQnRr9PMypSzqLNp' +
                    

'Sg7Nw9mUVtsWcJb9SbEqksPcC6kpNXK2K4Whm0+wQelPPct9Qc+Kydex+wExHUAAZ5LdtG99jHHxd1ZmOhOVy1X2ljl41M4R

Ry5PjdZmMHbjtWqh/qcKza0vzZ6mqds4cLUUYxfk8ByUrWI3FaOymYM2Vk+15aIq' +
                    

'pclVK0MzmXnc2+VurUZZnjdVb1aQUavyK1YWopWlk51Jydvd6dI2D44r3SQZSnC3JydyUWfkVK37djHI22k9UWfRkALQ0gQp

ALXU6HOmp0JSD0OR0b6mYEGyDIIp3QRQ7Nl7HbR56GVOfAqNXbaSmUFoYk6LQVUd' +
                    

'W9P0MrRyalbkpIRJydDD+LSDZKqXc1ST30K61dW2spYaOdpWqjxNNvSQjK0R2OOx1FVLONVJatNYExvBK628yDa+JHQ5brzO

oAABAAAAAAAAAAADHJonrBszbNWByrZzEYNvQ59/hqdFlSKrnVN27mbalQc7Ntwl' +
                    

'CR1FHOVVwtTZh1i0mk5QopIy/EpGniAKAAAVXZy9AO5qsfxAtoWEZEPcAG4JLZUpYtt1AgXb8LBGspgJWxi6cz1N9sZWjD0k

soiT+L9Sma2bcddCpyA74ajYEayC/iPSAZvaKt76IyOXc3d2Wc49hrl5e6nbEN6l' +
                    

'4bVrM4Zz57K18aJGp9F4a9z8Dd6dkQ9SUrdKaEtazfq2INp8lFpjUlbLv7rGnyp1aShk46VtVzqFOW1bRA46VtWXqc7JJtLR

GnxOtZnzAkS4W+gtW1YTcphd0+nVB2tZ+rYArWrosHOzmzZ1XIlWIOJYiFIUogAA' +
                    

'1Tc2ZpoaM0ZvoZrqatklVDLPg0AQirK3JXfzM2mdMFXwyXEW+qwaWhzls3sKI621SlETwdK2hRMeBikRlSBJlnQw1VW9Ohsl

VOSzdEpmHoWKustbanNvJruaUeARlfCddkctjqtF5CqPBKtPT2lMz635EGmzqcjq' +
                    

'tAAAIAAAAAAAAAAAAADg7Q3jRm6uV0gnI0rZ6Clk9CiXcaasvHPbktoiXscbcjcpYqWTUXkvLhaIV5GsNHMGsia71vV7x5m2

jymq3tXRkv8AyuutXbMmjFeVbqPFGk09DNVQoTTYIBbtTghqtVHcZbTAS0ZdW0aI' +
                    

'7PTRdQERjoDKtmP4mijCbhrdGkRtVclbUwBmIyamsJmbKUKqV2/oUaA0wwQdzlyuWq+06HFJ8l3G/wDJEg7f0qKsvZZZ5Vmx

0uuTjUN4fiZ40pU6GvEdqcqSSaM0i15sb5VRVlJTtBmvE7VmYIHKqpqMdQ+OyXcn' +
                    

'4mIcxq0afJZrtYVmG3Cy2ata8dtjNbdtpiTV7q7UaICVv2N4mQ7S3Y1W1OyHqZqk2k9ALyWo641OB15Uq6bnPdIsQ3KWsBxA

GWQAo6V+EpFoDKpadiVclbh4Fd2XxFYQCIqw+1w14onGk1FlKMSaThKC4heta2iu' +
                    

'hrYw27OWbYoxZ5LVtKUbn0tNSjNKqyhuPEDLbbnc6HO1e20TPidCVUvPZsO2rScw4MWZvuhJeARzWh1Xwo5rQ6V+FCisiaeh

rczaO9RXtkiqdK/CjkdK/CgNAgIKCACggAoIAKCACggAzyNQp0MVdFvEHS0drk8t' +
                    

'mm8aGpNRvk5O7C+E5gGpEAAUAWCACptaEN8VFa6rbRgVcr3ybV6veCW/t7JxVq3hozk004ahmclXXfLwtzSrCyeatrVcpwdH

zN4sv0JzTWzF02jSaaw89A0RXNLc2Ys9i0eDVRbKVAVZU7opnKt4MitGG2nCKp31' +
                    

'DQQdnM7MFrGjAHW7irZypd0eFJrlei9rOvH2diUp7sT4OHNyd7WIg1xcfctYg5P1WbWjZ2ryWphaeJaJerq41Kr3ooj9Sd03

Vn1OvJerphzJFc+OyVpsXlsrNRmDVOOtqS9WcmobS0A3x9rWYk54lx1NW44rMmUn' +
                    

'bCA3elUpRlV7vCCNWTSZfWsrQDFsOOhIeoeppP0sqFV+pLahNkbkeiBalSlmlRpzsXRQVkMqzgqMM3XRFqKEQEVhwbVXZJIy

0jVdU5gtRlpptPVHRpmHm73NsUYdnlbGqWVVlSHSrTaeehK1tavpUxqPwSzTs2sJ' +
                    

'mznmYahnQUXkpTs7kot/Mi47XqnX9Be7de16Fq0ktnGpPBzW50r8KOSnJ0p8KLRokZkpLVpVp0by8oyobpoYNU0YGwQEFBAB

QQAUEAFBABSA4cnJ3YXw/wAyyai8nJPprpuzkAbkxAAFA9HFxcfJx5w08s4HTg+O' +
                    

'JiUSjVv7e6+F9yOTTThqH0O1uS3G7UWfF65OTsrZtlkmqyBuCo7uaunJMyb/AKlbNq6XVbmKevhdd6uUaTUUv0w/aZVHw8d1

3V9M/ocrcHJXafI7f013XWjalGO+yvW9nM4ZZRw01N1u5Sbwenu47yrqI0nWDnb+' +
                    

'3TzR66JjZ6MWUsjtGhb1slDUGIEHQjC0BFJUJgiX7f0LDWGBzcqwNuNWC6mLHfyNJ4bifAvJxdlZmZwYq7VcovJy2ukniAM1

1k9bvTscNaYRw4qd+HhF5OPsazMi/Rrj41ZOTN6qtoTkJ8lVKlJme593c85Irf8A' +
                    

'u0XRGIbwtTd+VWULczWyraWAdrxFiJurlFvZWajYtL1ShgZdnZy9i/1MRBJUzs2a5HVrGoHOte6fAm0G/gp4s5wWIpBkIo3R

Go6YFYjBTKpNvMSt1BQBn+mn8LL2tKA0hnZjRlh6G56qSNVeNAOUmm4wV8dtsoNe' +
                    

'qGi/iMrLOhisd2Op0Yoy7J1ajJribSw4Odk1qmhshn4Ncjb5LSU57nUlEvxWVe+ZRmYSZq79DSNcTarjI38HJG6fCY/dbzN0

0LRolna0TsUy+5Zw0ZVS03IWmrA2ACAAAAAAAAARtJS9A2kpeh573dn4bIsmot+R' +
                    

'2wsIwAdEAAAKQADSbUNYZkEG7K1X6tWYNOzermCbgAHEaiAN8VrK0Vcd2DdH2WtS6lPZHLTK2O/I4tTkj4lklVrvq1W0w1hr

+Bjlq/Uv81f8TfZV2tWPiUowu9UV5bacNMgs1bpd5Twx22Ssk3NHKW0GK9qdq3WP' +
                    

'A6pput09fTYDFOR1u+5yrKUa7eK6n4W+hi9XX/I8eTNdtbN/86leYEfBarlPuX8THg8M3PJWqtMtzVzsRXTo62zZaMDFm1lB

3bfgwK1Tw/YUWJwACK6cdqqsSp3OFn3Wb6s3fj7a90yc66ln9R1pa1NNBe7s5Z6K' +
                    

'uqpqmksnCle9voQbfJXtcPbCOfHVOZLyUVIh6me26UoBZJWwSaJPuUvYS3LZzLINpybtRKsmKptY1ZX3LD3FFrVPDLCraCJW

eUZtKWdSKXt3W8FoDK1NGkIJBQQZhmk7LRgoDve6Kr1fgQkIfg6A5+paMqs/3ExW' +
                    

'wROdCkEjpgnc0+poy8ssGav1G2Z7UIjQqN3dlxtPQlFRpd/sMO1moNVukoZPBlpK7Sytjoc25u2tzoKMuyyhX4S3fpcr2krV

OqzA8GXhs1TR+ZnMtPJqm5aNEtHa856FJNZhkVS11MlXxIg2ACAAAAAAEtZVUsWs' +
                    

'qqWee1nZy/YjUmpat7uz8OhkA2gAAAAAAAAAAKNi1tHtJggAIPUAdVd24nXtnt3OR14HF42soFVujTrWzcOrj2G+1q167Xyv

M5Vou61HqpgvrrSvInLTymZEbadbv/0280a/p1drrdqaku82rdZsprHUtGnWt5zX' +
                    

'D8mBJv21u33T6WmZrZJNP4quUde3N6bW9VTmnF1Z6W18wOkJyk/TyKV5nC6ac6N6+aNukK3b8VHPsJfu0+Lu9SYgyjLw0zfp

7U0/VuiPJRFhwDSahp7ACcnI7JKIHHXucGbx3ONDfHbscxI8Gr8bopmUStrVytGX' +
                    

'kurxC0OtHVUSTTxkg4Wu7OXsdP6le3GsHOq7reGovRV0H4MvQwat0Iss1Erat2wHfua8DNpbFcPJMV0rdLEHOzlydL9vbiJO

In9K0gFoCikmASJA0mmDGhsCgAihGpKNAjMFVrLRkVupVDyUX+p1Q7k3qSCdpPwb' +
                    

'LByhoTbqMNdIJBlXstcmldPDUDKJEhOy3HaPUgK22mi1tWIZnuzpgKGAXxPoaruZ7QpqB0Djtc1nxM963wXubTSfsIpX4UXd

EShQOgHQEBkUEAFBAB57Nt522IW6izIdYyAJSa0wBIghddQQQAFAAAUgAAu5DThp' +
                    

'dSCb4AAAqcNPo5MgD0cjSvW9WnOvsN1WbU2spXtOKqrcLaXqqzSvdKt9UsR5mVbb9FbvWjhmK0X9R0emxvvXdZXXarGG8V5F

+19rAvrrVXmXVtNMnI9VZQ36qwdUps1+3kUrzMv/AKab1o4YEpZPts3r6bINNUa3' +
                    

'43K8jFaLutR6/tZpO9VW6fdOHIHJqLQtNV5A1dxhqLVf8CNQk05kozo/BgMFEWp6acdXVSjz1Um1e9cS15kpBV7r9q0nBb8d

qKW1BOO/ZaWpNcvLW6SX8QMJtZQdnZqTtxx2arxOLc2bAxbUIhUVGgARWbEK9SFR' +
                    

'oABQjKzIKHQ5rU2KRSAEFIxIbAzAgjKioZL3OfAPBMMKqcsLUkZNV3AQGjRCKzlaMd1iypgYegQ7qvVFUTgkEdQNtSjPqWux

JstGO63UYLKGIJ3dUWKtNp+wC5Ql+ZpaGG2nnIV1V6vf9SnGUXyefAmDqDmrvc0r' +
                    

'omDQImmUDjyL1+ZhKTpyQ2uu5g3PjKzGCEAFIWSFAAAAAAAAApCrUCFkPBAAAA7f279TrtZCq+Ljfkc62dbKy1R1vZ/1K3ai

Y9pmq03NKcm9XDJyUXe/+ZTU1Xss7Uq8WUhp9ier43D9hBzra/arJyqZg6LkUvvX' +
                    

'bW6MVivLav7bae0rzx/83G/4AZbwrrWuH/gdEpVq7WXdXzMclE7ytLqV5krayqrJ4pt5gbtFq1u9/TY4aY6Hd3XqV12q+anK

8OLJ/FqvEsEAaa1BRrihWl4HNdu3atEFx2de5aHMnokgA0ga0qZNW0ggyjREUVYo' +
                    

'BHoQZKiFRpFABFRgAAjRABWQAAAAMgoRUG29SFZAKarozKNV0JVaIUhlWWiQ9i2fQiZpklwXuyV4JhhSZKtCRDKiA0iOpojc

AROy3L3vdElFAs0fgOxPRkgkAbqmlHQj8jGZKrW8xg0X1bEVk9cMq8CK5AtsWZDb' +
                    

'IaSnwQS6+xG0upLVFSrWj80Z/prZ+xnWuhppPUzpjzulktDJ6O3o4I6t6pMvRjgDq6V8a/xM/wBN7NMuxMYBWmtUQoDQFQBu

dRgq0DSjxIqQQsDQIh3fq4E96M4nb+3z3Ue6FDtralLdHFjXZat3SritlK3Mcafr' +
                    

'4nvp5o6Wt6Kcm9XkyrlZ2dVK+BxJ0rejtrHcot5i69dq7cileaOVfVxtb1yUdXV9jqs243K8jCivJn4br+Zp1i1XR9tb/wAz

Fu9J0ansevmBv9iby+N58jPJRKza3XdU1W9HbOFZRbzLE1w5fG/4EHF2bSlzGgJZ' +
                    

'Q/DbyBoV8lu3tWEYACAAKKtRbUVIQVaFBQoR6AjAhUQqCKQpAqMBgqKikRSKAEABgATJZAYQ1AgQANV0Mo1XQVY0QAyrFiGm

Q0yqluGLVjKKtfEXmFJPVSZKjO5pFooAIrPaiQ0adG13L9CVclRMrBe4O0MYakCr' +
                    

'UpFqUgjUk7Y0NPCM9wEaYWNTXcmMMoqtXfUdy2ZlosE/But6rU2mmpTODTNKyhTX2olg7A5qy2tHgzUvpPkTFaJCZO5b4LgD

nZuto2JNXqjXKtGcjURbJJqNGQ080T6ODBYioEAF2D6jTUNyAC1U6CAB1unxcqac' +
                    

'zlSardp2rdT3ZheJL+vhrbeuGFbFL9PSyKvfV8acxemxlxTklOa3z7Ga7UuW1XpZSjk6xWd04YHaH/TtT91HKFmm622uosYX

JdNWfqnBe6vbel1271RBmqmtqP4llew01mrq4rdQ46mW0nXkT+LVG+19tqf5qso5' +
                    

'27lh6UcA3f1Rbayh+YGjgADSAAA0sIyivQIgoAChHqUyChoyUJFIAFQAFRSgEVAAADAiWBChqCJwVFkSQICmq6GTS0JVikKQ

istMmTQKiKzRXaVBBAFKtzKUM0txRQARWquFEY6nJeB0pdJQzCE9R0rVOkM5I61r' +
                    

'3KUckJ6NLUpnoaAGXG5oxbUQq9qHaxV9SNuSiqdyrQk7lRBSYKZa3AsEiNMEyi9zKL3X6yTOolMqAd91/wCJe+r1r+hAQa9H

a0n4nI1CJBYICwMQVEA2KAQIAO/Danbbjs4kzxLu7uOddPNGKQrJvTc3evbywsLV' +
                    

'QZVty6U5FrXUl162trrHmF3p2408NTnxJ/Us6Jdua/u8iDNM0tXdZXsOjabpybPDMO1Fyq1NHqjp2YtxrT4qlo52pDst1leQ

reySunMYh9DbmK3a09NjFMWtTa2F/gBrvjurdZtlR1BZ9Nb70cWBB5wAbQC1BUAZ' +
                    

'SLUpFAQACFZAioBAAAAoAAikACgAAFTghpARuSQWxFoBcGQAimlojJpaCrAAhBGRMMGkaJIUvGotVrVQQXcq1Zkq1YVoAEVn

tJDNNwSZRUTua0wJKvEQgGxozsUgpi2pszbUQqVyHhhOA8lQRpamVoVahWiWcIpH' +
                    

'oQRPZhwjKK53KiwtioyioKu4AIAI3ATkA9DJsxuWFBLAKgUgAp15PVx0vusM4nbjvTsfHf8AUlFVs05P8rNpJclqPS6lHLiS

urUeuqOjTdK8q1rqZVytX0eNHDClKt6uMwzpevrf/DyL+Jzppaj/APxoo3PJV24/' +
                    

'i7s58Tna0qriLVw2dXb005N64ZL1XdZLS6leYGqutrOqeLrPmDilNX1QGDAANIFRDQIEKQigAAMgBUUAEAjKRgCohUUAARQA

AAwAhkbAAQFBQNLQwb2JVgQACPUhXqHogjpxQry8GuWHXGTNFNvYL1irZn1XJGlq' +
                    

'RFWpqkaIUEVi2SLUr1IVlp40ImIbJoBoq0Mo0tBVUhSMgQjMdB3dS6FEhovQsyTYDQAIrmV6DtYyVkRSSFoFaA2BAehmpowt

SjZl6miWEKjaZACosEGQAN8bi6nR4ZkEG717eRp6GkrJ2orNLoOX1VpfrhhP4L/5' +
                    

'WRTv5HRYUUazvgza9XyK9U0nqdaJLltR6XRysoq1vR/wA61VLO1Kv02UokWdE/3cbh+w5QnVPo4Ztq1LdtXCsvMDL9N8r02/

kwSzs6qr/ZuAMAA0gaIikIEKQKAECAAKKBIIBGUhShUQoIAAigACBCgCFIVgCCAU' +
                    

'U0ZKRQAAQNAAVNrK1NPkbUNGdiDBDS1IFqEaABFZsQrIWJW24MM09DIhWkVaGTSCqS2hSEGIgrcoNyI9MlREaMlQpGloUiKR

UbgjySwRRohG8lTAIpEUgEhFDcAIIyyAMAaMODSCLsNxDIBACjtS/G+J0th7E4l3' +
                    

'1tTfVGeKO9J6PAtXt5HXaTP+1dWm6V5VrXUci9at+26gyq8iduNPHTUnfyOnbiK774IM01dHudG+7iVv3UZjkurXV6prr5nW

ro7uqfputPEtGGl3eF1HtBexutqrWjwCDgAFqbRoAhFAAECFIUCkKAABBAUhQKQo' +
                    

'AAEADIkAAQAUiWTTQEIWCFFKQpFAABGQ0GsBAhUyPIUC1IVahGgARUDiAyFF2EBaCQIVEKtQKACDBpfCxARRk0iQAiopFqUi

pYybehgsSjQRq2xEBQCsKEsUmxBEUytTZaRl6iMSGE9giRgZKgtAIUPQAJjK2O3P' +
                    

'lV5FujgeiiV+B13WwoK2ePk6+mxpJV5nV6XRy4070tTdZRuzdqU5FrXUyrDr6LV3o59hlKaN71efI7Whcit+26hnKnpu6PR4

ZRp1tS1XVwrbgqTtxOv7uNgDgVEKtDSKQpCKAAIEAKAAACQAElkgAuAQAUEEkFAk' +
                    

'YAEKQoSCoAQAAUpkpBQQZCj1D0RC7QEUhWQKhVqQu4RohSEUZk09DJUrS+Ezk1XQgAu5k1uBQARU3C1I9QtSjUwQjcMSBSkK

QDMGiTBQeURFAAAIAUhQMPU0GpCAbGUaMiJV3G5AUUglgAa40rWh7mQnDTWwG13c' +
                    

'd2k4awara6VuNQ14+JedZrdaWQ7vVS/XDMqf1J4uxp9y3M8tq2dbV+KPUvE3CrytbWMduL13WV5AdU0r1a05FnzBwSlNrVZA

wZNAFSBAAoQAqAAAIoBAAAEABQAAAAAAAAGQAKACCAAooAIAAAgAKAyABQAQXIAC' +
                    

'hAALXQyAEEUADQAIrLG4BQepFqAEaKAFDL1AAqIABQgAAAAAAAR6gCFQAFQAAAAAdrf9Cs6zgwv+m/PABn/Kt8k+j/iK/wDq

46ZAIOfH8TjTM+QAL6eP/9k=' +                    
                    '" />';                 


var aboutTabImage =     '<img src="' +
                    'data:image/jpeg;base64,' +                 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAGQAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEQ0NDQ4NEg4OEhoR

DxEaHxcSEhcfIhcXFxcXIiMbHh0dHhsjIykqLSopIzY2Ozs2NkFBQUFBQUFBQUFB' +
                    

'QUFBQQESEREUFhQYFRUYFxMXExcdFxkZFx0sHR0gHR0sOCgjIyMjKDgyNS0tLTUyPT04OD09QUFBQUFBQUFBQUFBQUFB/8AA

EQgB9AJYAwEiAAIRAQMRAf/EAIYAAQEBAQEBAQAAAAAAAAAAAAABAgMEBQYBAQEB' +
                    

'AQAAAAAAAAAAAAAAAAABAgMQAAICAAUBBQYEBAYDAAMBAAABEQIhMUESA1FhcTITBYEi0pNUFZFCUgSh0TMU8LHBYiM0Q1Mk

coKDRBEBAQEBAQACAwEAAAAAAAAAABEBEiExQVFhgQL/2gAMAwEAAhEDEQA/APzH' +
                    

'3b1T639x82/xF+7eqfW/uPm3+I8ElTHS8vf919U+t/cfNv8AEPu3qn1vP82/8zwyVSOjl7l6r6p9bz/Nv8Q+7ep/W8/zb/zP

FgE8SdHL2/dfVPrP3Hzb/wAx929U+s5/m3/meKWGx0cvW/VvVIX/ANv7jF/+2/xF' +
                    

'fqvqmP8A9v7j5t/iPBPh7y2s3OBeiPb929U3L/7efL/23/mH6v6p9bz/ADb/ABHhTm2PQNjo5e77t6p9bz/Nv8Rfuvqn1vP8

2/xHhkSx0cvd919U+t5/m3+IfdvVPrf3Hzb/ABHiWQHRy9v3X1SP+5+4+bf4gvVv' +
                    

'VPref5t/5ninAJk6OXu+7ep/W8/zb/zH3b1Sf+7z/Nv/ADPG2R4Do5e1+q+p/W86/wD63/mPu3qn1vP82/xHhbwI3hmOiPd9

29U+t/cfNv8AEX7r6p9b+4+bf4jwK2GAl9S9Ee/7t6n9bz/Nv/Mn3b1J/wD+39x8' +
                    

'2/xHi3QYrZyKR9D7t6p9b+4+bf8AmX7r6p9b+4+bf4jwNwROR0R7/u3qf1v7j5t/5j7t6p9bz/Nv/M8MuRI6I933b1T63n+b

f4h929U+t5/m3+I8Mx2hsdHL3fd/VPrOf5t/iJ939U+t5/m3+I8FrxBnexUj6P3b' +
                    

'1T63n+bf4iP1b1T639x82/xHz9z6iWWkfQ+7eqR/3ef5t/iH3f1P63n+bf4j5+IgUj6C9X9T+t/cfNv8Rfu3qn1v7j5t/iPA

sCzgTpeXu+7eqfW/uPm3+IfdvVPrf3Hzb/EeFPESx0cvd929U+t/cfNv8Qfq/qiX' +
                    

'/d5/m3+I8MmHaWKke5er+qfW/uPm3+I0/VfVZw/e/uPm3+I8EfgVtvUvRy9/3X1XZ/3eeZz82/xE+7eqfXfuPm3+I8TcU7zO

STJ0cvd929U+u/cfNv8AEVereqN/979x82/xHh/My18awHRy91vVfVFh/e8/zb/E' +
                    

'V+reqT/3ef5t/wCZ4uSVZkbHS8vb929U+t5/m3/mPu3qn1v7j5t/iPDOhdw6OXt+7eqfW/uPm3+IfdvVPrf3Hzb/ABHhbJI6

Tl9BereqfW8/zb/EZXq3qn1v7j5t/iPCrYETxFI+h929U+t5/m3+IfdvVPrf3Hzb' +
                    

'/EeGWSRVj6H3b1P639x82/xE+6+qfW/uPm3+I8M9hZHRy933b1P639x82/xC3q3qn1v7j5t/iPBLNXeC7x0R6/u3qn1v7j5t

/iNP1b1Tan/ec/zb/EeBSau3WqUjo5e2vqvqjw/vf3Hzb/EafqvqeH/28/zb/wAz' +
                    

'5m7tO6hqrSkUj2fdfU/ref5t/iNU9U9TdV/9nP8ANv8AzPFCyg1TwonRHZ+reqfW/uPm3+Iv3f1T63n+bf8AmeBvFjcWke/7

t6p9bz/Nv/Mj9W9U+t5/m3+I8UpojcZDoj3L1b1T639x82/xA8MzqB0RkJgGG1TW' +
                    

'pZJgCCyXUgw1AsuCSyy+gaAzj7veatMMzjNY6srWcgRTu9hGaXieOhLOpQkqxxZHesYIjsnjp0A0ljgVVZjfZvBCbMk0bahG

UxVt4GkBehJKTUgPIz35FeRIbTnQozKWo3VMI1FerNIu/DBEV2sEkVqvRiOwnis7' +
                    

'rPU1XPFjHQ6WXuUbzYowWUHM9gIIMSkKJfQiRXmiov0KqqDSphMSKtJ9SvklRBn0S1cFBNuhpXeDVciPks3lA9F5MK16nOWd

eXKr1OWkgMAH/mMSg7RiYeBbTOJViu4qNL+m5zwMydbY1eWmBynuIrTl0RYUJMis' +
                    

'2kk8jpSqtO5SyDLddzxQVqq2c9xWkrWhGsFyZaAc+TxTj7TLeJrlzRzthZMuDcElkT6iYArnqSe0EwA0mZWZak1KNTiJ6Igx

ILITnMhcQDZq+KRlmnGTZBqil92Jzs26z2m5qqv3lLMrytsOzfcMGDvx2itU9ZOU' +
                    

'8KyTZfNqo20yyll1HpZK4I5p81lKhJko+TzNtngRWLeJkbwwLfxMhQUhzqWUQAmAACLBJDycAWAzKdWlMt/wLttZ5R2JAMWV

vJYF8qzWKZVwv9K9rAm9zEFmzKuOybbaw6CWyDKma9skunDTYU7q4i2TAVz9iMX8' +
                    

'RVn7CWzLnyLWrt4at9ptcXL0SN8cLjTbwNqsqWSjkuK2t47h5XGs7NnbapY2oXRy20qk64T1CyeJvlyXec1GIGowMjEEB5Iy

8ma0I3gyjmkajAldDWBdDOCqrmC18VYNVdt14ggzWjc9hbqOOhuqeLZjl8NQMYiG' +
                    

'RuCY9Cige92Ejq/wAPNFSI1isWy1rXVAVOicyaV6Pq32IVSjJHTjqlXvIOatMbaNlW6ZXHh2m6TCx0ZpYJdwHHkfJgrKqn+B

iLRmjdl7u62DeXcY0KEOJkxNuptuVtMwmm9V/kMDF64mmlDZmsyaeTGi7Ft7YMpJ' +
                    

'4GnZJKdUFei0bY9GklFYWLzOtMJOCs5UJ4aG15z8KVUQVqbW6msfM9hxfmzDcPqW3Hd2adpcSJ+w5nijnbQ3esVr1gy8i4I3

IyGgKCKTMIApnAizNVzJqAwBR7CAMQoCcAMYK0naX0JoanXoBOTbhVLLNmXX3Fbt' +
                    

'gjcuTf8A4v8A9v8AQqMGmvdTMmmnsXeNHTgtnR65HRYXXU80NOeh6K23OttcmZ1XG87nPUmBb+J95EUMNSzCyJKDAu5voDOA

A0HEMB+FgTjjzKnsPHx+Oq7T2DUAAQYtlbuOWOZ1vlbuOXYFZ/NUWa2ssN2Rm3ha' +
                    

'ALbPsRm3iNLP2IzbMv2O/GpopyOxz4f6aNogalJqyhHPlyXec0dOXJd5xTCtzOeBl4albMziFV4ojyYJHusIysvYVSRGlVLF

2RRpYWqzfHi7vtMTTPdl2FryUqrRNpzIOlPEzPNC2kryNv3aNku7uHZbQMYNEq/y' +
                    

'vNZFI1PeiiwQJyp11GADVGquqzcMy80SMQOivxrq+41XlwitWzFaqTrxrBvqTwZXJdtbapaC3mQlZpJ6l49O86VxriBxs/ch

vdDw7jCnPJM68n9Opx7CiY4knEsw5/EKqnsKjSUe0W1L0I9SKWx29iKn+JJyfYWm' +
                    

'LkDaSWztNUfvNaGdympK3SvqyC3jczVn/wAi7jk7zaYZq1rbk4gCcuVe4w8kjfLMVnLQ5lwMEAIKEyH2AQwKiasImoFKiACy

iSUECS2yRMCvIDLlF3PZGkkY/KyiS+prHZ7TBr8ntCIduHJd5xOvEvdntJvwrN/G' +
                    

'zJbZtkAugnDIYACAd4KNB+Fly0I52sgcXjqes8vF/UqeomgDF7umO2Vqyp7satNBGL28SVscMDk03rB05ONNNt49TltUJzLC

pEWicOottjtEJXiMCPbiigrRmHDchPEPMo7cd3WqSrMvM1vv0SjqzjxVV7NWmEpO' +
                    

'laUdG2tcDOg+W6e7C1dY0NrlrbwpvuKk9sZRlBztx4u1XttMKALyNuqwaU6nNGr2tG3kWOltDEoDWGBG8X0GmZHmBQ52uRkH

MOegHNrBGqVTZnKHmao9Ua34HTYlZYYQa48Fczi4NUhb5MjdO+THMpjoWjSZOXJA' +
                    

'coZIWRXmJUlGYcqMX0NYTisSazkNcQDzWhNS28SGYG6vE6Uskob6nFYHXizJoUspXebq/dyMVwftOlciDlf+nXvOM4yzty+G

tdZOFs8TWA8HBrTEix9hZ7S6KTQStCSQV5I1VIxORpXSGjShQVYcyg57nMxgi+Z7' +
                    

'6ulHYINW8T7zfJ4q9xxd223ESLXvaJ0EHTl8NTkHazUN4EejLmCgMAAAAWY1KsyPMBkAAAAUgCw2oJiTcB0XDZ6pGlxKGndH

GX0EsTUdfK4/1l28KUbmzjLGIn7Hb/gWkkdqRFawjliTEQbeRDMGkFBHQ1LIpIJD' +
                    

'BZAFTD8LNYGbZMDKs6NWWZ6KPkut25Jdx5nkj1cH9NDUW3G2vEzPkVzTafYdQQeW9XVPdWW8rmZ93M9HL/Tt/jU80Lams9S4

pE2IsmJcyNGVFiWRqGUjzCt8Vq1s23pgdK8jiEkcFmdK6k0xt8l4wgy7XlpvVBLD' +
                    

'2Eawb7UQdOVq1X2M4JRkdeSFuXamc0XPgWQNCAa9gcw+4hdH3AY6FruTmuZNEWuD7Sjatuz8S0NUS9/uM3nB5WepaXxdb4Wa

wZkbTaskOb8pVVzLWJnmfvVWgwcsdRBXteeHac2mnDLg3hqG0cwWJWm1KG5GQINb' +
                    

'uw1XlayOYEK6eZbr2jzLdX+JiSSIVbNtyySAUJYkAAAAAAAqyYCyY0IICwIKJoV5IkYFencQCkKFAEytgRZh5hDUAUEIKCFA

DaIkewBBYWgxEsCQtQFOoyANEaNaEAiABRQQpAwBJAG+4WfusBJ2UL8SDGiPVxf0' +
                    

'6nntXSidurg9HEmuNJqGXRsEbSxZLXrVZ+wiMctq7LVnHocY91dxpur43Zxvs8ewwrVVe0qp07iaFbTgk4FQWYeYlAAszuqP

a3BwTaxWZXe7zeY3B6FWKeww09tp7GcZfXI15ttrq8ZJCu3KprOuDOKNcnJWyis5' +
                    

'GE8BmKoZABSpN4Igab7AGyM2dK8lKrKe05KjepdqA6W5a3dVGE4jkrM6/wChhQnV9Gdm8Xo+nUmjiuayUTK/iZtd2WrfUuVW

xWrzT7y+IuaxDqohiZZSK5NQwdGpRjTuNZqRBBq1naOwmIEhldWO8hRYEEKAhdRh' +
                    

'/MEIL7owBAKGQAWSAFFWTAWTBAkgBQ0K9CFehAAAFBEivAKLMmpVmRgaJIAApkAUpABZEkGGoFTBBp0IK3+BBIkoCSECNAyB

CtAygIV2wkj5eRYJpQIY21eDzMqy+Xl6mXazzszflrqVcdXqauJHL2g67EjO1CkY' +
                    

'OicLvMwofUjq0BdSaELoBH2AoywKIIZYxIAgQAAhdRIAGpBAQVGliZRpMmq6UcSkpRjRv+Bqlkp1kzCmdCDNsl3mne1fd8S0

nNGW8u8jfvSUH4TdckYbUYFrliNGhPaTJZYElgayMW/gy7iaDA0BAUGAAgAAAAAD' +
                    

'EBAQpYYhgSGILIlZBRLMRkWSNpgIRYRkoFhZEYAEKABNAVjABqQqzI8wiyQpGFMBJAVKsrqJRkCFalDd2GQIVZEkASrIlkAF

lggAAAAAAPQ1gZ6GsdBH4mGkhN4EjtNP8CNTimgMx1cljow8gugGH4X3lz7w/D7Q' +
                    

'08yiQpJGBXJXWKVc5lGVJXkGveaEAQABEBQBAUFCAXQEUACAqBVGpIII8vaVpSR5e0pQSUCQm3kVKzyRBAb2PV+wi47Z6CjJ

PadNvUbRRyEnTYupNq6ijANxVaj3OpaMCDW6g310QGYEM1vXQm8ehAhob2NzHoLI' +
                    

'hJKEWAMBiFABqBCgQwBSFAYkKVEGcwWyghRUsTLzLisiahFkjKRhUAGhUACwCICwIBEBYAEBQBAUgAAAQABHddhqXn/AllTS

xlOvUw008cjMJF3Izur0cgVpaGl2Ii5I/LJmcZgCWb2R2laRGm6z2m3x3WhRzf8A' +
                    

'oW1ppVdCusWabjCRarVKvqPwJPvPDMS4yLXa7NNxJraocT3gcxibrWrcaiyiyQo5gsiSgEWWRNoCpPIrqNz6B2azIJmElGLL

snGYL5dZxbFGfaJN+XXqx5de1i4Ob6TkV21Onl1SyJFXkkLg5rkayS/Avm36ltSz' +
                    

'eFYC4rvQvies779SbrdWdPJv0L5NtYQuDjLGJ28pa3RFXjmHfAUjliIZ1/4dW2Sa6V9opHOBB0nKKrvGPYhSMQNrOm2zxlYZ

mVGPvZCqmy3Qvl26DCE9xX5afidu4eh5b6ol6bEsU56GW05gg9QABRSrEyWSCgki' +
                    

'WFaCbTwJK1LKIEBYZBJjMCGhtwwJnkAx7yFeCIAWZnU2szBUaRGVECiGgyxGgRQJRJQUAlCV0CAE9gUtwkAAcoYgAMRiABMS

gZABUelcLL5XYjrK6iV1MNOfldw8rB9dDpur1I71WoHB8fIs1vXeRLiXiTq+jO3m' +
                    

'1xjQzbkrasdeoHF7dkrPdl2Hd3q+vccHWsKMJcGrcd6y1aUii8kOzwxgzZOta+9KeS6Gdzc7sW0at4aYAaVFbki2OGhlVcOL

RGhtYc0ZYf6CritugGE3W3vKe4lrp2k2rNXTSnAztmW1AGXhAldA1CRvjaScpPEo' +
                    

'xPYSXoj01dXV2aWYvCwSjWSX9Dgt70w6nT3K+63L6mtzdbJ9DjCVe0fI67qatE8yix1OdlFU1lqK3w2iDo+SmEJ9o86uMUZj

cTd0E/Q6eY8PcUrqR3s8qpGNxNzEGnbkjdojG+3UstqDMFxNXc9WyT1EFgoSpWGB' +
                    

'Vasv3VGhIEECcO0kssCAG54dhCwIQEkFhDApEBcACIipFEQmQZABQAAAAAAgANpz3lT6e0wbmUZ1SWiZjUoEIUaARZmdTazR

l5lRVkQdgwAFJiNAKgAFAABAUgAABAAAAABAAVHq8p/qL5VdW2bbgGGmfKp0L5dO' +
                    

'hoAZVKrJIu1LQJp5aFA8tsMllZ4HS7e1zXN4HK3+dmdbJ2TxyY0c7ra2utTLwrQ1yS2pz2i7T4+NF/A0rTzTlgK2itsJlhVX

mQ+hhZNTqQaraLz2DQzWd+J0j3JGjjbJHXiruq9DlbI3x8uydUy/Q0k1g9Q+1j+4' +
                    

'UKa4nPzOwk0rp+VnP8ofJhED8pYLGC1Rl1xiDpVe6jFtRgkNaEhmlWUm2NvaWjGIx6m9qG1CpGVmhqWMRGIUxepYfU6eWkpI

kSjEdo2o0BRnbUqSkuJUSjCSbYjsNVzfaILRNpYErqMOpBGIZZqXzEkURJkeRXyd' +
                    

'CPGrA5sBg0gAAAAAAAClRAiDUjUjgJw5Io8wM5YKLqZeZrVGHmMTVSARQINAXQAgEAoAAANV472UpYF8nk6CjmDp5NsZgvk/

7kLg5A1eu1pTMmQgAAIACo9limGrREGknC6nNo3qYNM5ulm5NOtnVpOG8mArg7d5' +
                    

'VbBS8zzzzUlRK1eZPPvEQixB4w/9x2ask8cJPNL69pXyXtg2WFa5G2/YZlxWXkR2bzck0LCuzulySnOBlPB44yc4GIhW0/ex

Nz7kHGWi7nkTcWroZNGWXE0IAVA6flOZ0XhJq43ojFsWzU4LuMW1JitLBRIldQnV' +
                    

'KsqWFbGFWQErqSa9Wabdc6wyS5yAkqUFM4FxlSRZgdPKvE7kRVs9UdnG32GEpaJRyacvEQ+ptpYmQG3tG2urYkqAqrR6sjoi

qNTpW1UgObVIwqV8dUk4FonAzucROAFtWuigqy8KM2yOtVggMruOTyZ3SRxsodkM' +
                    

'HJgrIbQAKAIUgFHsKCKY9ABoAKQuQCYAIyCrMy8yrMjzKmiARdZCmIGJAKgAAAAGlaEl0Cv2amAIOyU1t2k2tFq3gjF7aGRL

5qDIBpAAAQB5go95CkMKoACBja6zGNf0s2ArxYRG2HJp8Vkm2slJq+MPKztmbvey' +
                    

'Vq2UysGi0cIcTGHUybzp3aBVwTLUSWRGmsDKQUnHEMEaCCzKyxGJGBkAFQNrwmD08aXkvDqTVxhRCM21KskS5M+VH+Q1SFdN

4JGXlQsYAa5HWzTTbIo6DbaFCzyKsHiQZea7yVzZq2S7zNc2X6HpfhRmrxg1+VGa' +
                    

'r3jIxbxMyzV/EzDKAICjUiSACyQgAHpp4V3HmPTTwruJop5+TxM9J5uXxsYOZCkNIoAAAACghQoFkEEAKQsEFwgjxeAQaAKZ

Rm2ZqcTNsy4miKRZlCjYBNAKAABCgCAADW/CI9pkAIAAAAAJqAwUe54IlXKOD5LP' +
                    

'UbuTtx6GIr0Ip5p5O0TyvqB6FliU8v8Ayf7ixy9LCCX8C/8AyO+1KXEs41pZ/wDG3tbxNeRZ53YHNr3bSsQoVVisTp/b/wC4

f2y/Uy+Dm3WMGZUHf+3r1Y/t6dWPBww6iV1O/wDb8faX+34+0XEcWvckwzrdJVaW' +
                    

'SZyYxdZABpkPTxP/AIX7TzHo4v6TXeT/AF8LjCRLFWhLEVH4am01sfUw/DUAdN721j8pEZk0ngAtkjNc2Wz90lJlj6Hq/KjC

zN/lRmuZkc7+JmGdOTxM5suCAryCgogEMQwCTeWIN8eDt3MxDecgD08fgXccGn0O' +
                    

'/H4ETRo83L42ek8/KlvfcMHIAGkAAAAAABJ9Cw+gBZhBKAFWQQrIGQDgVzAmqJbM00pUGbZlwEUiLgAIUgAoNJIDINwughEo

5lLaCFAhSAAAEAPaAJqACi1sq2TiexnoXPhhWX0PKVOCbhXpXJf9GfaXfyvKn8Tz' +
                    

'qz6nReFT7GSK6b+WHNVgYf7h5bYZtTMaRmZstyxzRBh8zdlbbilA8+/QiUqV/mXa12+0vgefyE8/k/wjS7lJMF0Fz8ETzuXr

/Anm8vU1gZ7YH8IebydWTzL/AKn+JXkcy4mrLKyFZRkABA9HD4H7Tzno4fA/aT/X' +
                    

'wuMLIlv9CrIls/YT7Uf9OveyFf8ATr3syVFEkAVrQtczCN1zJo9H5V3Ga5m/yruMVzMjPJ4mczpyeI5suBAIQo6JGlRdTjIl

iD0KqWpq2WEHlxL7SQemXEyirJHlZ34vChB0OHJ433Hc4cmN/YBxABpADEYgAAAB' +
                    

'cRiFAMeo6gCkSbcJZm1xX6YkGCw4NeXZuBsstUKMdCWWJdRZOciiIppcPI8YgvlNZtIUcyxGZ08tfqHlVf5iXByTEo6+VxrN

sbOLtFxPXKUMDtt4loE6LKqFWOJdr6HTf2IPkYujlEaCTe/Uu6rzSF/Q5yJOn/Hr' +
                    

'X8COtNPwLU9c5EmnCzqFeq/KgMg35vSqA9/B45gpCoqOicpJ6HI0mybi5rtv7Rvie1HGSp4ki1vidErbkbTpv2wY41KsarWO

RMm/It2lNUsTCslWIxOt4V03lGJjzaJKFlqwORDsr8d8LYNucSW45xoi0ctGLVaS' +
                    

'fUQ1KeD6HXl/p07io5RgmC/lRlgQAFQPRwP3Gu8856OHwMn+vhcYSwI/9CrIWz9hFZ/8a7yF/Iu8jKgQpCio3XMwjdSauPT+

VdxhZmk/dXcZrmYGeXxHOEdOXxHJlwGmiGlZxDxRNqfh/AoyUQ+gVX0KEhZou19G' +
                    

'NrUZkFZ14fCcmn0Z14fDjhiTfgdGcb+N9x2k5cmbfUDgADSAAArUJPqTU1HuJ9HBkAUhVE45BQqzZXauVV+JVy2URBBeJLdL

OqaRxfNcnnWJuaOzxcpwiKNcTk+WzJ5lhNK7e4sYHmJHDfYjsywrrbkMO7MSCxK1' +
                    

'uLvMAQrW4bjIEK1uJuMgsK1JJIAlWRIAFkSQBa6K3XEeXV5OH0OZpNkgXpajh65A3yvw1/SsQL4RyQCBUGVECAuiCzGGElTS

eRFa47Qrdpujb5MEY409rZvjb3wmZ37Vvkxfhk5NVwjjafQ6XtZWwf4mN9pmVKGC' +
                    

'QtONkVrK1WlnkmbVruYtVdZ1OVrWlY+HKCjXJW1W3Zy2XlXuU6QYte1vE5N8r/46F/CMJ+6ZNJe4ZGGoAUqCUnbiyzjocquJ

7cDrxJq0Zozq4yiWz9hdCPP2BU/Iu8hqqmvtLHcWjANx3CO4lIwjVSwZUyoA9Kfu' +
                    

'LuMrMwuS0QWrcmReTxHP2nTknBnOYLgsMKQmJA2tz1Zva/1Gas6EE2v9TG1/qZcSgTb2sjUNYyaxMXq3GMAGc+V4o06v9Rzv

jbuLg5sGtst4pFXHP5kvaaqMA6eV/vr+I8pfrr+Ioi/pNdLT/AwdVSK2W9QFxV/9' +
                    

'iJVc8TVE3eqzxNeXVf8AkRrjqqt33K0IDnyObuOpmP4DPEqXuO3VlGUlOJpKs4kWZUnMQBIqyQjrWjbgzelk3hgSjKVcDXJW

lXFceplFZRgFZCoGjK1NaEMZIVgqAYQYVAAECkKAAAAAAXdnOM6ggIoQpCoFRDSB' +
                    

'hEx3CGnioE5Fd3ZzbFkVazteJrj/AKiM1ja+uhvj/qIm/arz+NHFnbm8SMWo6rc8J0GDFauzaWikh14ZmyWDazMWrauepb6j

OjOvKv8Ajp3HLRnfl/pUG/ODmv6bMG14GYGfZqFAKgdqN7U1oclU6Ve1bUpbM6uJ' +
                    

'EIl8Ikqu08kZva1kp0GfKrTI17TFDQ35MUDHoR4EFMLQsohcGkbq11OUucxu7RB15HMRiYSJvfUb+0QdEq9CxXoct7/UN7/U

SaOuGgk573+o3WtrKa2nqhBZE9pydrJw3kNz/UIOsstX1OG59RufUQrrfkiKpe0w' +
                    

'3NpM7n1Kp6lgbZ0Cr2BWulhbAu+/6h6Gx9Bsf6Rv5P1Mb+T9THo1SuFlGaM7H0NUtfdjbRmd/J+pgNj6G428Nm87GU+RuNz7

y8llsrWdz1YHPBLtOkJ8SjOuaOe6u1qJbyYVnVyvaAWco7K9kklEnG2DmuRd79o3' +
                    

'B23XeEwaau8JOD5G1BN6JNG3Ta+pLpYGXdaIOyjDBlmjLIVtEkqC1NaEWpdAMsAFFIxIkCAAIFIUABAAhQAKgRAKgACBUAgH

QIqmcC4kUrkdONPzEycSW1t5zButnilG7roTVTkc2muO3MvInaJwwmC8eFms+rQs' +
                    

'63xVoggnDtS/3ZGnTduTeWhlPy0rPHdmW/JOFNdQOFlCwyN8lY4qR7TfNt8tJdTjZt1SnAufSM4lVLPJFeRqr7S0iLh5OhfK

us0a3dv8Q7LqS6sFRrNokReehZUZl3UUYNyQc3mwdZ4/0F3U/QKMN5RCIn1cHR2p' +
                    

'+gzurPgAxL6mXdnZ2pD92GcEvwLgNsLHM06/jj/AUaVsVJUZghbPF6EkoApAAgQWGBIO1OGazZx0HDx7nutktDvZVjEzujz2

4rWbcoeQ4mVB128faI4f8SSq5eVXW48un6v4HV+StP8AMm7i/S/wLdGFx8UeJyaV' +
                    

'OJasu7j/AEP8B5lP0P8AAnoy68emJPd/SdPMrpR/gPN/2MDnK/SjSraylVUGvN/2sza3I3NMksUBmXXQst+FfwLx8nJbBpNL

Ns6u9Vm13Acq8dm8cEcuRKtoTlI1fkvZysEsjGPQuDVVxtY595dvF1/ijGPQmPQf' +
                    

'0dNvH1/iSOP/AAzGPQY9Cz9jUUJFCY9BiP6i+4X3DOIxAvuF9wziMRBqa9F/EzgMSYgamomvQkMQwLNf8IkroIYhgWV0JK6C

GTECyuhHIxBQAAQAAVUC0rucZvoCDAAKiwVEllxCi0gYyFOAlyQdKUSXvzjkbjjR' +
                    

'xl9RL6kiu+6iTSUJmV5cQ0zlut1Lut1EHZ343CdZjKR5lVlU47rdRvt1EGuW25ZQkZrxppNsvv2T1NUpdKGh9CeXxL8zGzi6

s1st0Gy3RkpE8vh/U5Lt40o3SNj/AEsbX0Yovl1azRtOqW2URccrEnlEGvd6jdTr' +
                    

'JPLD4loBd9CN0epPKM+SUatau14y9DgplHR8TqmzmsniXB0vG5z1t/kZnbdvuyEz4s8Z/Aw3LECzltmTUkwNIAQwB6eHjrs3

PFs2+OrOK5LKtVVRBfNtqsDGq60pslTmc+ZW3KB58YNT3HK3JZtOcsi5mibn1Y3P' +
                    

'qyTLlnXPjtKWGTKOcvqJfVkWaPReqXG+o1HCX1Evqya9p3tyVhVVU3qBySs8pLstq49pqLPN7UZiiztJFNjeVp9odLrSerRY

o8mFWyyYo5jA60SvbbZZG+ThrtmuDRajzkkqcEApACgAAAAAAAAAJgAVprNRI3MW' +
                    

'ta3icwBAAEAAAAAAAAAAAAABNrFYMAACHtw6IN16Iz0seOGWGsz0tvSCR1xHSx51VvI2uK+Z20ygRqidEcfLsPLt0O0AXRx8

u3QeXbodxiKOGy/QbLdDviIYo4ttVSyIndas7qk5l2oUeebrUu/k/Udnx1YXHUUc' +
                    

'd/J1Z0duSEa8tFVUtQOLty9pN3M+p32om1Cji7cvVh35NWzttXaSEKOO+/aWt7apnWEvaSEhRzta8awcz0Ne60eZzJcNas5s

+8yXCO0uBUZBe0jzKACTbhKWda8F3ngSjC5LVWDgjta2bk714Izg35Vez8CXPwPK' +
                    

'koc56EZ6vLamFVz1RytxNfl/AUc0sUerkVVRrI86rGNXiWzbbdsRqsJYo9HJVpPGZ0POniduVxeV0GjnVaLNmt1aKFjbVsim

q3LNmGx8g3OZO4FyNIhVZrFEAHVcjlW1Qty2soaSr0RyTNZkipZRismQ0uhkIAAo' +
                    

'AAAAAAAAAAAAAgAAAAAAAAAAAhlx7u40uK9tPxCsQI7Tt5KXiukNnCs7z3EpHGAdtnC8rR3gUjYkQhJhoxJiWQAKQoFIBARU

WWZxAFllxMyWLaAWWtCyZxEgUKc5JjoIerA1LJLG1d5e4CSwUmADEQJGIBosSQAY' +
                    

'txJ6tP8AgZ/t3+o7YAt0cfIejQfBd6o7SstRD1cCjguC/VB8LUS1jgd/4nPlvRRj7yySF0Rvj4nETYj/AHFtKx3nOj3XXVvM

cje5qZSLELcnI82Z33/UzINQrouXkX5vxOi57xozzgkK9Hm0t46x2ovlJ40croee' +
                    

'WVNpynDQhVtVJ9H0ZW5hG/MrdbeRQ9LGLUdX1q8rIBZz3Eptdluy1Dy7DIw1XE4ZBVbU5LtIVuXGgFdejkyAygaRk1TMmmI8

yM1bMywAAKAAAAAAAAAACAAAAAAAAAAAHSnE7KX7terM1irmynohe9rubP2EV08z' +
                    

'jphxqX+pnO3Je2b9hgCJVEkBRZBAB6h7Tl5uJfN6mJrTpgQw+RDehNGynPzKl31YmjYM76dSb69SQdCylqc91epJoIOjYl6G

d9VqTfWc8QNwyz2GN6y3F3LqBqS96MJ9GWerA0RvopJujUKyeoFl5ME3TiN0gXHo' +
                    

'UzPaWQKCbkJXVAaRHWcySp6dpZU4fiBUo0AJnloBOWfLcM8h6eTkpsabxeiPMb/ymilYgMFQBABQQAUhSAU0rNKM10MFA3Er

3cezUwE2nKwZ031vhfB/qX+pPhXMGrUtXHNaNZGVDzKALtxiRtwmU+wCGqYMkG64' +
                    

'JsmmM2zMlblkKaAAIAAAAAAAAAAAAAAIAKQAAdOOsuX4a4swdLNV41RZvGxNVi1nazZkAqAAAAAAAAO+1R4Rsr0LunMNmPWk

2V6E216FkSPRnYi7KtFksi6M+XULjqUYi7+Q2UGzj7SgUTy6do8ukYOClF0Y8uvU' +
                    

'vldGaAujPl36hU5OqZrAYCjOyzzWRdtuhoEoy1ZaE/5JwqbntI7dpRmb/pI3yao3u/3Glfox/By3W6E3P9J23MjYv6HK1p0G

7kickdYq80XDTLoxf0OG+/Ub7w+jO6gl1uq1kLn4HmhvIsNZnp406VjCdTnz+Jdx' +
                    

'b6jiQpriaVst3YaRg2qWalLA1dLcvd24YojtOBKsYajMhpmSooIUCAACgADVL2rlitavI060spo4etX/AKHMEVcUxBVZPC2K

66m9sLclur1QozWpLPQO3QzmABdrJDKAEMQEAAAAAAAAQFAEBQBAAAAAFDcuQAIA' +
                    

'AAAAAFAgAA6llmQZaWWUgAoxAxIElJAkCgkiQKVGShVEsgzCEvQidpKWGAnqBiCKQSFqWWIb1Kiba9DSSRIBBcC9xkQnmFak

krUiUFlAWUTzF0GDELoEZd28sDF5wbOu1EvVOr6ouaOBaOLLGO0gNo63Slxbc1m2' +
                    

'cpOvHfDaoTf5mHxTZ1TxWb0M/A5ENbLfjhJry2rRd7V1NUYBWkm4xXUgAsIgCEIAgFBABSqzq5ThmQB0d628VceqCqnlb8Tm

WSRa6bbrtHejCvZZF32E0rXsEGd7G9kmrWoG1vInmMeYxNLi7SbR5g80enhsY2Mv' +
                    

'msvmrVD08Z2k2GvMr0HmLoPTxnaNprzK9Cb10Hp4ztG03vQ3roW6eMbRtNbkNyF1PGIIbs00ZKahSFCIAAKikAVQQAbBCmVC

4EAGiyjIILIwIUAWDIA1BIQQAYFTJIAuJUmZGIGmICeAkikASSSorkkMu4SFSGC7' +
                    

'hKCBJLgQCySRgO8CiUv9SYaAK53rD7HkZOtveUHNpo1ms6hpOy1zzMlkou5xt0JjqJJJAYIUqAAAEKAICkAAoAgAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAUgApCgCAAAAANgAjQUgkCgAgoIAKAJAFIAKIIX2EAAAM' +
                    

'C4EkSwBRKJIFAACBiFiAKqyIQmxZjTEio1BMSqXqWIAyDTQgqMwzLqzrJBRx2Mmyx3wJBeiOOy3QbLdDtHQ1tHRHn2WG1nZp

TBdqHRHDaxDOzXYNo6I4QxDO0dgidB0RxgQddo2oUjkDs6rQztRakcwdNiG1Ckcw' +
                    

'dNiGxCkcwb2IbBcIwQ3sGxi4RgG9jJtZaRkGtrG1ipGQWGIYIgLDEAQFgQBAWABAAAAAApABQBIACQBpJAhSNEASUCIuAgEA

DMuAEKmIKmwJiMWIsMtQLt6jBdpHIxZA7yrHBCILLfYBHJFJYLLYEBrJYamcdQEr' +
                    

'vNKs4kVuwYsDTXQzD1RU4QmQo30CU54CcDLc4BGv8SH2MJqIJD7iCy0VWMwyw32AWWwIgKAomjTcYJEdlogl+IRdurwZI7St

okx2gXb7RDgjsWcAJDCqWVMDWADqliRVYbxgbrdQDTWLJCLZzhmJ7AJgIEgKQSCg' +
                    

'CR2CCgIkCO0pJAQIGAkKCBIkCAsiSoDESJAkMbSyQBtRNqKAJtRNpoAZ2jaaAoxtG1GyFoxtQ2GysUjnsJtZ0ApHPawdAKRz

ABUCyQBVkCCgEalIzjqWUsiBiExLYlAXFkyKMNSAlOZZSwRIkuQCOo3dCS33FlLQ' +
                    

'BHXEOETPsNYIDMIueAmRCAJQJ7RjoWAJ3sshtd5EnqAzRILnoWF7QJCWhUw3GGorHtAY5sOSuM9ehI1IqqsrERBZaWSJnmEF

ElkzKKuoFr2klruLgiJTiASjHMsiOpEpxYETjTEsyyNsqQVVWMcytpLImSlsy3IR' +
                    

'asktlVowI3IBdQCFUBpVcEx6BEKTEYgCyQQAKTWDUV7QqEwDakuxxIEHcAEAO4gFwBIAFIAAAAFJIAFIAAkSQoCQQAUAAcwQ

G0USQpBcWCSWEFC5ELHUBJVBO4EFnoI1GAjtAS8ikwQx9gFl6COoQnoQMEIZUiPD' +
                    

'tYDIKX3DvQbAq7CdiGfcXBAWIInoRS+41HQAlGEklzAfRZiY0xAsQHEdpJWoSnNwBarUveZntCxA1m50DwJIl6EUxeJSSJbA

uDZcOsESwyxDiAK8cJCXaSrXQrYRLJTBZWgSwkoGXERqVJQTCTUoCNV6GYl4GrPo' +
                    

'WEkBmJ1Jtc4MtkkWqbxgB72ZG28zUHOzx7gN96yJ7sMb30I3OgGYLDN4JZCV0FGapNdprEyqzjMB1fUA3DQd30GKaeZuGwOW

ZaqXiWyWgUFB1gbW8SzoK5tSQSGZOhh4PqUQFa6LEkMBj0K0wlaMJDdtQICpJlio' +
                    

'GQVqCQwICwxAEBYZCgAkwBzABpAAAUAEFAAULiAQAAAUamsABoOYJpgAAW4q/iAQXEy51AA0jL7QAL3DEAAuzMmOoAFrE4mt

QBoy4kYaZgAX/DLpgABcYIpAIKsyOJAAjmRriAUbcEAIFcjWAAGFm5NYgBUvp1Jp' +
                    

'hIBUX3owMqJxzAAvu6j3ZW0AC4yHuAIHcAAqOZUC26QCoyzSnQABqR+IACkYAFxK5AIqV3aZFeWIARlxOA92QCiuIJoAAxGM

gBVIAEX3gAFf/9k=' +
                    '" />';                 


var mwapLogo =     '<img src="' +
                    'data:image/jpeg;base64,' + 
                    

'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAASwAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAwICAgICAwICAwUD

AwMFBQQDAwQFBgUFBQUFBggGBwcHBwYICAkKCgoJCAwMDAwMDA4ODg4OEBAQEBAQ' +
                    

'EBAQEAEDBAQGBgYMCAgMEg4MDhIUEBAQEBQREBAQEBARERAQEBAQEBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AA

EQgAUAJYAwERAAIRAQMRAf/EALEAAAIDAQEBAQEAAAAAAAAAAAQFAwYHAgEIAAkB' +
                    

'AAIDAQEBAAAAAAAAAAAAAAECAAMEBQYHEAACAQIFAgQFAgQDBQYHAAABAgMRBAAhEgUGMQdBUSITYXEyFAiBI5GhQhWxUiTB

YnIzCfDR4fGCFpLCQ3M0NRcRAAICAQIEAwYEAwcEAwAAAAABEQIDIQQxURIFQRMU' +
                    

'YXGBobHBkSIyFfDRBuHxQlJyIzSCsjM1YqIk/9oADAMBAAIRAxEAPwD41teJ2890IbdfQ1FUg1CmudagUyx4i+5slqz22PaJ

stO3dqIrmR43hDkEsgNclPTKtevxxht3BrxNq2VPEs+2djLeScyvblgw0iOrEAnx' +
                    

'Kn/HGO/c7cJH9Hj5Fqg7E2iowMH7rHPIgAHpnmMZX3C3Mb01ASXsgscpjuLEKtCGfqevxoTnh1v3zJ6agOe0a20Rie10nOig

AChzFcz44L3r5h9PQis+11mZQjAgyVNCQcxkfpFM/DCPfWJ6egTN2vs0QyW8MjMh' +
                    

'qTQUFMvn5Yi3rD6eoCe20M8pMkLFzWmkkLmPEg4tW8a8QenqCXfbl4rfTpEjZBWVqNTpmVORwy3gPTVA4e1k6n9qP0nUWUMx

6nOvxzxH3AHpaoZw9orBovb1yRMR6odfpNPKlMs8VPuFpD6Woztuzn3MaoZKNk39' +
                    

'XzHzwvrnJPT1ILjslBCg+6ldGT1IhNHYMaZZ0zxYu4MHpqjC07P2Mto6vVJk9VNGfp+BoD+mKnvnIfT1Bl7TQe5UqW8UABoK

+eH9YyeRU/XHamxt5QdLSLlpAqFBHTx8MD1zB5FT8e3kChliqp/pXOhr4Yi3jD5F' +
                    

'SG27cv7jyEUU+kkBqgDzr4VxZ6xFfp0MIODSAtG6EJWgoDUDAe7D6aoVHwOGWQhC2qhavyHlhXvGD01Sa07f7fIB7kLSnyAY

Yre8YfT1PJO0cVxdO0duywt5k6h+gGeJ61h8ioFN2iFvqnt1aTVk0a1B8gc+uWD6' +
                    

'5h8ip+t+1VxHkkLl/q9RIqehOWC96TyKjKPtmF/Yu4npkT6tJPyxU97bwJ5CD4u2m1NqLWxjrUDMnI+NfPCesvzJ5KCIO12z

kpHMGoTQE1ND51GD625PIQzg7VcfjnjdwWpl1ND8KeAwvrLk8lDC47X7A6DTbEA5' +
                    

'BqnMfphfVX5k8qoul7RcficyFf3Cvp8hT554b1d+ZFiqeJ262q1GkxZkeBqWHwqaYR7m78SxYqk0XD9oWN2FtrA6V61/jhXn

tzD5aDouIbZKCTCEB8PE+OB5tuZOlHMnC9sVgqwrQ+ORy8cN51uYOhAU3CNpkIY2' +
                    

'wYHwGR/xwy3FuYPLQda9rdpmjad4AsZHQ0rn4ChwPUX5g6Ucz9rtjkoYrMIUICsPpI+IwfUX5i9FTiDtVsqtoEKqxGegZsPM

5nLE9RfmHoQUO1W0Agm2B6VyPyxPU35g8qoLd9qtiYhRBpIOZqw/TLE9VfmFYqiy' +
                    

'ftLsYd2gZ4pMiVOYNPAUBw63dyeTU5h7NJP6ChJNSWJZAAcxhvWWF8moRb9kNoTRrgLMMz6qBj1pQeWA93cnlVDv/wCT7Uax

RxlDSpRTX/HAW7vzA8NSNezFswJVSmnPSa54dby4PJqep2a2xpGj1gvHpMilqsoY' +
                    

'emoHT4VwfWWB5NQyPtRtVqmuRGYUqM8sL6uxFgqdrw/a1rEIRQddWKnmtzLFiqCvwvankCvbgerIg0K/EYnn25jeUidOHbG0

BYW6kr6ZNOZOnKvmKjFfn2niN5SFtxwrbChjt4RHqoch1oMjmcHz7cxvKRXLjtvt' +
                    

'LufdgWMN9WRrU+H6nFq3V14k8ioK/bfZkkWRoKsBRVQkgjzoMH1d+YfIqQRdutniuCI4PbaT6QKgk+PWtcF7u/MnkVINw7Zb

PNGwlTS7NRqnMD4fDBrvLrxI9vUAParjgiKKhaT6QxY5U6EU64t9dk5lb2tRVedo' +
                    

'dohmIXWGXIOSaHx+I8cXLuGSBPR1AZO0O16KKzmRc1o1AB8cWruNyt7SpBL2ns7ZS0yudX9St1U9cv0wf3CwPSVIIO0+3O5m

WOYKRQJXwPiaYZ9xuBbSnIbf/wAt2i3SN1icuE/zZZdP4Yoe/u/EtW1pyI7jtltJ' +
                    

'RHj1R+as1APPM0xFvrjPa0PTwbj+02rXFwooCilj0q5oKVI64Hq8l3CD6eiUjG37f7I/ufawMxajVDBs+uWfiOmKXvMnix1t

qEF12w2iesW4WnutqDKhZgxPh0Iw9d/kXBge0o+KCZuF20GlHtQ0h+lzT0/9q0xW' +
                    

't1bmWeRXkdvw2zUszW/7YU63FAwReuROdBhfU35h8mvIBueCbDLbiOJtek1JVqDT4dACf44srvMqYr29IOTwLbVV5phUspc6

2zov9RHWoGG9ZfgL6aok3DgtrcwRiFDo9Lhjqoynqc6Y1U3lk9Sq21q0LZ+CWzsG' +
                    

'WNWNSyk1Jy8DSnyxct5bmVva1Fs3A7KW5C38RijqW1oQKlsvA5fxxct7ZLRlb2lW9UD3fbuxO3re2sjKqs6muf0tTwIp8cPX

f36oYj2VYlFO3DZ5bQeLpT1MtSa+XQEUx1aZuo52TDBsnD9puknUj9wMGFVzHq6d' +
                    

'KUOPNbi+h6HDXQzb8n15Pw/f9ln2/e7m3tr+2k9myt2kt1iELKCSyN+4WLE1I+GO/wBiWLLjsnRNp8Xr/cea7xbJTImrNJrh

wD73t/z2TsPH3lk5/uStbWUDxbTGZY10G5EFGlSYEn1atRWpxKbnB617fyq8ePwn' +
                    

'hBVfDl9MszyPhw+PvDPx32rup3847u3DpOe3+02GxTQXQkirNdStda10NMZo30LoJC1IqcTuj2+zvXIsSs7KPZp7IJsVm3FH

R5Gkv44iL8fe4nPtk79bfxOffrvcrG7vJtrvIbyWS4WSOMvRlWRm0uCgII+XTGju' +
                    

'e0wW2buqpNKdNCnY7jKtyquzabjU+p+ed9OzvGt6uOKco3y3hvIAFvrfRPOYmPqClrZCA3muqox4nB2vdZaq9KaP3fc9Rk32

3pbptbUX8a7x9ned75Bx/YuQQz7rc6ksbVYZ7ZZWGelWlRRqoMh44Obtm6xUdr00' +
                    

'XuZMe+wZLdNbamFfmHzLmnHec7VxHbdzl2+0W0jvH+zkaJ5ZpZHSruhBICrkOmPT9g2uK+G17VTcxqcLu24yVyKlXCidC0cm

7f2nb7h+8c4j7h3/APeHijSxfdb1jbwXU7qSwjhRqtp1BRoNOtPEc7BunuMtcXk1' +
                    

'6Z16VrC9rNmbB5ON38xz4S9JGf478ivtx4jyLk3POXW+8QbZOjS35dhFbxLDqOszQwnM+WK+7beqy0pixura4c/myzt+ezx2

tkvMePIew/kR2AC/6nkodmbqLO7FF+YixjfZd7/k+a/maP3Pbf5vkzQu3vIOE9zL' +
                    

'F924VucV9BbM0E2mNlZGpUBkfSwr1FRnjm7na5sFunIobN2Dc48qmjkyf8zbTk2wcGseRbDvsu220V9HbXNlZ6oWnkmR2V2l

RwdKBD6adTXwx3/6eWO+Z1tVNxxfh8Dkd4tdY1ato1Fn4nXm48l7R8tu97vri+u4' +
                    

'bq4WCe5mkmdVWyVgFaQmlDn1xd3zFSm6xqqSULgvaVdqyWtgu229fsZb+J3IeTck7w2m071vV7d2j2l6zwT3U0qErFkdLMRU

Y7XfMGKm1brVJyvBHM7XlyWzpNt6PxAPyJ5LyjY++u9bRtW931raQy2axQRXc0aK' +
                    

'Gt4iaKrADM+WLe1YMVtnV2qm9fBc2J3DNkrubJWaWnifYPL+5faztpPabbzfkEdhfXEKyx2xjkuJPb8HZYlZlB8NVK0yx4PB

sNxuE3jrKR6rLu8OKFdwxTYfkT+Pu77jb2FrymNbi6kWGMy21xFGzSGg1PJGqgV8' +
                    

'WNMaLdn3lU26cPaimvcdu3CsPuZ94Ozfbfe/7BzDforO/aJJXs1hmn0pJUozeyjBSRnQmtM8U7ftu5zV6qVlFmbe4cb6bWhi

aT8kewElyNqt+SpcTu6xRpb2d1KJHYgKqFIjqJJoKY0ftG8iejT3r+ZQ+4beYVvk' +
                    

'wrc+/PYjju+z8Z3Tf4Le/gYQzpoldI5KZq0qoUUivqzyORxXTte7vTrrRw/cNbfYa26XbUBtvyf/AB2WQBOTgMTQAWV2a/AU

ixb+zbz/ACfNfzK/3Lb/AOb5M1+EW17bRXNjVlnRZkjYGOTSwqCVIDDrmDmMcOya' +
                    

'cM6qco4k2/8AbACUaoypn8hgDSG2O3a/bJUlBmDSlAOuIBsOl2u2nOl6Ev0Y9afPABIM2zQJLKkbFiciAK0NPM4hJPTtUkAE

WnKnqYGhqfEj44gZGlnsIEKSaCSfpoAaeOHKnYlfb9HoZSAvT5nPwxASK5rP9wsK' +
                    

'MVOanqAfDAHTAruxSZD6ehqqdM/n4Yg6Z7DtSyAIoMdTXSKsvx+WICQ5uNSIAWkAoPSPD9METqIhx2YsagLTMMR1wZJJIvFy

WDS55fSMq/EnEknUHrtUvtiEAhUyVTShJ8qYAJO4bDSwMtSOtR4U86YMgZN9lGGb' +
                    

'QQW8gBkcQUG+2lJVnoDUnTT+HTAGkjawSlWRmzGoefjiDSEW+1x1Sd10IfUFbEA2HXFtZBNS0I86V+fTBETZDHtQCARt6Wzq

PVn8cQPUeR7RqeoyZT1IzqMQjsEvDIoAMdPD54MiwZvxrYeOwc3u9/2+/wDfvr5r' +
                    

'lLhfcrqq2oqR/u6cvKmL7ZLunS+CH6UW++iOllJ/8cZwoQyxF7gxD0tTUDSgIB8/HEksg8l2+5NWGWnof/LEkIJDNPaTmoPs

HJwKVBOWrE4hgNntFKAl9VTkw6YrkIsuNuNCygklqkNSmQpgyMgSfbY4mEki6Wyo' +
                    

'sfQgfOv8sCRjmKxDtLSPQXopZhnT54MhPLjb0UL7wqpIqVApl5eWAmQDnsrNRpgBUN4BV8M6VwybACPt7THRKgoTqyCmtPLP

/Zh0yEH/ALfiuQXI6VpVc6eIB6AYPWQ7udgtHCs1TQZ1z+GIrshG+220KMkSjLIM' +
                    

'SV00Fa1+GJ1MkAkm3zSiBZkRkk+mQekCo8szQjzwZCdx7RbxgIyj1UGpjVjUUHpIoBlgOxAKbjrSXUc8lZEhBKPUnNssly6Y

ZX0JA/sePR+0sKRgRiqvIB5GtBTFLsEnm2MBHjC50yPUahgKxBTeWMivQqFIFfdG' +
                    

'keQNB/icWpkBJ7G4los1JEoah0Hh0zrSmBKCBtxmGWVLmSJWeKtHp0qakAdAMP5jiCQSHalj9YVaqDn8+mZ64XqCCTbYaliA

yEaSueZwVYkAF3slsoFBpYkhQT4n9MWLIwQKZtmtTcxxXo1CQlUBPoPwqcq4tWVx' +
                    

'oDoFm58cjhhLIiIIiSdRB+k+mlfGueLaZnIlsZQ+ZWb2tpFGGjVlZBUOq6g2dRT+qvXHZ2t5Zy9xWEa/wrjz26xzLFragqwI

of1yOOTmvJsxKDFfzhtJbXc+HNKVJktb0+k1pSWPHq/6cX5cnvR5fvbm1fczSNyt' +
                    

'I1/AZZ/bOo7ZbHX4f/sUxzqf+4/6n/2l9v8A1/w+4l/6dEatdc3kcLpjTbWdnNAq6p6n9Mav6mUrH8fsVdkf6/gY32LaG5/K

zY5IWWSKTfLpo3U1VlJlIII8CMdzuCjYWX/xX2OXtH/+te82PuT+R/Lpu+tz2v4H' +
                    

'xzY4THuQ2aK73az995rky+0ZZGUjSpbwoT444W27Vi9Ks2S1uHVo405HVzb+/n+XSteMarxMc5zYct2/8n7Gw5wljDvUe7bM

t4u0I0VmtTAU9tWFR6CK/HHc27xvYPy56em36uPicvN1rdLriZXDh4DP8x+B7Pwb' +
                    

'vGlhtInpuVsl9dyXV1JdTSTTXEqs7PKSRUKPT4Yp7HuL5ds3aNHChRpCLe6Yq0zaeKk+hO6PYjgHa/8AHXmm5cWs2FxeWNo1

xcXUjXM1Vli+lpK6QSxyWmPM7PfZs+9xq70TfDTmdrc7XFi21+lcUjM/xY5HY8H7' +
                    

'CdxucX9h/co9puoH+yYKVlZ0SNFOsFQNbgk0JoMs8dXvOB5t5ionEp6mHt2ZYtvks1MMXcZ7h94++nDebNtO18Ys9u2Pbppd

2LWLQ3H28kMpJgZS3rCxmhNM6Yty7PbbXLjm1229NdJ04iU3WfPS8KqSWun0HX/T' +
                    

'qs5rvlXNFi9WiwtDorQE++1K4q/qZf7dPe/oHsri9vcaf+fNrNb9mrcSII1G7WelB0/5M+YOOR/Ti/8A1P8A0v7HR7w5wfFf

cqn4Q2qT9kebOxoy3lzoHiT9gvTGzv8A/wArH7l/3GftL/2L+/7GNfhHEJu/Vih6' +
                    

'fY35Nf8A7WO53/8A4j96OX2n/kL3MXflbCIfyR5DEDUCawz+dtDi3s//AAq/H6sTuP8AybfD6G6fk9+RO5dseZ23C+L7Bttz

dx2lvcbhuW6Wq3JkEyAxogBUgKBmSf8Ax892rtVc+J3vZpTok4Ovv9+8V1WtVMcW' +
                    

'YV+Ulj3DsuVbG3caLaIby421JrNdiheGH7d5ZCDIHA9da9PCmPQ9oeF47eV1ROvVzOR3BZOtdcTH+EaflvEiXPbiVVAabiu3

O8lBqc1cVY+JoKVxT2Xhl/1ss7lxp/pR96cI4Xs8XGdlvhYW6yCzs3WUW8RcN7KE' +
                    

'MGC1r8cfPM+SzyWUvi/E9firXoWi4I+Jp/xN77cJ7nryDYuORcn2/bNwS/tJ/uLeKK7jWX3VV0lkDqT0YU/jj3y7vtcuDptb

pbUcHoeTfb8+PL1KvUk595b7/wDMDd+Bc1finPO2m1bbNt06R7qlsUluIAwVyUNC' +
                    

'jMAwI9WMNeyVy4uvHlblaTwNT7m6ZOm+NKOJ9abfcNcx215a/TdRpKjkGumXSwNPkceItWHB6mZUlxfYSXfUdWkDL+r9MVwV

9QZaWBEZqKdNdRnTBgWTv7OJwyUIByrXxHTLEDIK1o302orIGq7L/TnhQyG2+1en' +
                    

'3Jf3HpmxJzz+ODArsFomQK0QDqo8R/34YQCmitmkdCSshWoJJwo4tntpJFHsIzCvUCgwGMj2LYbi4Gt/2zkQKjp4ZHEQXZEk

thewiigFVqWoMzliCyiORbyG0jdQBQ5NmTRfDPBDpJxa3sn3BacAoerAnLPrl1wJ' +
                    

'D0jp4lMSSMR0qAD1Hnhis6U+6hCHIj9fnXEkkAzrHXKtcq0J/jWmIEjPsrIXDaT1J/kMAJJ9uzVd/WK+lqZUwRZOZIodC6W6

5EdcgcAKOruRWVIR6ichXwH/AJYkkRza7XOdSu/7bjLwpgkbJX2x4E0LKVNQwAJy' +
                    

'xGidUnUFxMpCy+vwBrT554kgaMt7k947fZ/urPYjqWzikuLy6+ptMbe3pjHSrv6FPzPhntw7d3a9rj+PcRvpUszbbOVbnte9

3b+7W52qHbp5nQKATdI5loD4KXWg8h8cab4k6prxb+Qa2ctPwg2HhnNbTk7S7Rum' +
                    

'mPcI6rVMlkIAY6fI6TqHw+WObfH06+A704FmTZdvtyZI1qzDTrdi5oPmT/LFJOpgN8pCmihRTIjIYg6EF1A7xMqU9R8sFDgw

ury1HtCMSKwAqSQAQc/44kSQZQQq8au5Ols88yKZeGWK2E4ktvSTGrNnk3nXy8MA' +
                    

'Y5+1ZqU8qEdf1wQA0+33Lp+3pBrUEglT8KYgRe+1QlTSJSAamgoKnOvlhpJJ4dtZmVvUCua/LyxJCepaiNmYLpJ8ulOhGeJJ

DqSy1Ufq1KKK9PkPHAkANJtkgj0uxlVs9DhafAdBgyEjex1ZMSrClAPAnLpSmJIT' +
                    

'wWiIpLg66e2jA1pXKuXx+OJJDmztHaNSfUVJXUp1DL4nPEbIN0ijEAKkmnUfEfLCgOJIkZVUNVPM9Scga0xCAku2LcyfSpDC

iyso1U8vMDB6gkc2zuM2HSgFDkQPngySQd7empiKUz+GBIwFNaqwOoEMa0H+9hpI' +
                    

'Df2uSZGCBi+YDDJf5eOD1QECn24iMCdQWUZEEjMeGeB1DpCi4tEJjmaFVGo5ZMVY+VR/PE6h4K1u8cFw0srRtKdJUquRb/tT

rjZRNFTaM/5+um0jt7aD2WqvqelVAGYGkHHZ2S1ls5e64aG/cL22KzPtxRikjEmO' +
                    

'tdTef+zHIy21L68Druj+L/Fu+020Xu/7nebTJtccsUcdksJDCZlY6vdUmo042bHu19qrKtU55nM3mzrnadm1BfJvx241edkV

7Eybnd/2sW8dmN0VIfutMdwtyMqaK1FDl0xSu4WW69RCmZjw4QN6VPB5U6GHb72V' +
                    

'2r8ZOO3fB+227Xu78p7pTW2x7ZFdCCsCrr9+dRCoNEjkYsT0yx3qby29ur5apVxzZx9DnvbrbVdaNu19P7TDewfb7Z+3P5Y7

TxHnF/Lb3W130kG3zRqscc10UJttfuV/bmVqCmdWGO7v89s2xd6LRrX3eP4HL22F' +
                    

'Y90q2fB/3fifWnPfwl4FzHuG3czbt23Pi28ySJeu+2NEyteI+v7lfeVmRyaE0NK5+ePK4O85ceLynVWrw15cjt5e3475OtNp

+wS7h+C3GLnm1r3B3fmW+bnu1tc2l3Jc7g1tMZ5bVkK+4/tg6fQBTwGWLP3zIsbx' +
                    

'1pVJprSfEX9so7q7s2x13u/EbjffHl0HMt53u+2+6tbaO0jgtEhMemOR5NR91WatXPj4Yy7Hu2Ta43StU03Osl+52FM9+qza

LB+SEnC9q7H79tXOprq22SSC3tZrjbo0e5Le7H7ftq40FmYAEmgzJxT23zHuavGk' +
                    

'7TOvAt3nQsL6m49nEzX8Tu0vbzfOwm9wx293e7BzW5uY7mx3OSFpES0ka3RlkgWOjekPUD0sMjjp923eam6T0VqJar26+Ji2

G3x2wNaxZ/QYcW/BfjXE7HcrHjvO+S2NpviNb7nZ2klrCtzCUZVWRhF6gA5yNK5j' +
                    

'C5O+XyQ7Y6trhxBXtlaSldpMu3Yv8V+I/j3um7blxveb7dJt4hit5Yr0QBUETmRSphQZk5Z4x9w7nfdVSsko5GjabKuBtpty

Wju92i473e4tccN5XE/21wfdhngektvcJXRNGTUalqRQ5EGhxg2m6vt8ivTj9TZn' +
                    

'w0zU6bcDENg/6fvbvYNwtp5uS71e2SSrJc7UZIoIbgACqSGEK1GpQ0INPHHeyd/zXX6ap8+Ryqdqxp/qcEN5/wBPPts27XW7

bJyPeNmjmd3gtLZoWECOa+2rsusgdBU1phq/1Bm6UrVqwPtWKZVmjFOU9mOxWz94' +
                    

'dt7bbrPym33m9nsLWO4Eu23MTvOViSd3cl/WRrZaemtAMdrFvd1bbvIlSFPNfA52TbYa5VR9U6cj6o71fh92770bvab/ALrd

3e07paxLbTXm3iKtxEgoglSUMKr4EUNOvhjy+y7tl21XWqTT5+B2tzsceZpuUyn8' +
                    

'u/BLjvM5be95Xz3kO63NlD9vBNdtbS6IVJZUWsfpUVOWNeHvl8Sapjqk+UlOTtlbtdV7Ma9xPwz4j3aTjsm575uFmeO7bBst

ubdIP3YrcsRI4ZT6zqzplija94yYOrpqn1Pq8fEtz9vpliW9FBv+z8ZG0bDa7NbS' +
                    

'M5s4IreOaRQSREgRSQKCuVTjhXt1Wb5s6S0UGIX/AOK2/X99dX9z3c5bHNPKzsIbmGKLU51UREACr4AAUGO1XudaqPJpp7Dn

W2TbnzLFS378CO3cm+x8t3/km9b1LLNC97DfTwyG6KIAwlmC+56tOdDl0FMa133N' +
                    

'WnRWtV7vD4FC7Xjtfqs2zbrW0jtYIYoY9KRRqiKvQKgoFHyAx5t6uTumlNbKWEiChahp8KYWDNJz9rqV/I+A/wDDAgMkIhoo

Kks3RR8cINIbbWdE1Fanq/TOuIkK2dPb5golaDpWmI0RMHmi96QQ10qOtMqnCjI9' +
                    

'WxiZNCgkf1Hx6/HBgEkxgjjCQ0CjINXM4Ip1MkcDa/CnT9cR6EWos3J3qSvpAyKCmZ61wrZZVCyk7gQ0olTXrmevngDkE9iw

K6HpmaqPL9cAKYHebtPtapFGVnWRtL6zTRQV6jPPBSDEjTZ9x2toVk3G8jjdw1Yg' +
                    

'xGS1Pjn0wUhLJ+BI2/8AHUR5IJmopCOhVwwYgEekitKePTBgCTFu473t4kT2QLgFmDkMV9sDMGhXMHEgdJjbb7NLuyivYnoJ

RVog2oHSSMqEdaYgjep+uLMTBViiCvl6/H+GAFHcVhcReqSNZKeJyIwCShpHLHIo' +
                    

'Q+mQf09P54aSuCO4jLrQtStaYAUV7lW4Q7Rx7cbwyi3ZYXWBjl+4ylUp8anDVUuB0j5d3TYUvYdwi/uKIb77NVYKW0pZCuk5

/wBbVJx2qZulrThPzBbHM68Y+RNLs8Um5b1ucd+td3ghgWMrlEYaAGtc64RZfy1r' +
                    

'H6W/mHo/M3PEeceP9t5Bb7vHeRqIzZl1zBrbVVzmcw6GmKLuaxHP5lkG/S30UhWaDSY2zUqcmBzBxywQR3Ultcj9zI5ZYgUK

LiNIXcAAqMwDiDi2/CzjRFHUdTTz88FBRJt9reBfamLpAa+jwz60NMBwRsYf263W' +
                    

'L/TuUJ8Q1BX5YgJZLBtMvt67iYyf5StFC/wxASDEZmGaQiZTRDX6wf5VwjQ6P0dg0z6ZEIIrmD5YAZP0m2aTrFQK5g0JHh/P

EkAHJZMBqjGZrSuIE/faSLQkZrnnnl5YgZIzUBRo6itfjiEBZoFZPWCtDWnX44gT' +
                    

'99qoAJFNQotcEknnsswCgZjqfAYgQmG1kLhlAKmtQcqADwwJASNYP9asfGtQAaYhJO0gSIDX5Vy/niEIpYA1MqD451GAQUXS

tDGMgScyB4Z/HDIdCsxT+0PuSJSQayIvt9TkKVPyrh5XgQgSSS2uVOshGYBszQKc' +
                    

'jliPVBQTvVusFp7sUkepgP2vq1D/ACj54rrqx5KbcXEqXX7sYXVQrEDpApl8sX9KgksQ7hG0QanV8ldGFK+NcssaKiMofNNv

WS6jSRvfSgJAAKhq5ZjpT5Y7G1tC0ObnUm1cK3JCBcRuQV+ok+mnSnzxx88mii0N' +
                    

'f2TdgwiSlApqxPU5V/wxz24A6alxi3YUFwSFUfVXMBaVwU5I6ny32+7vdpuYd/uT93Oa8x2raLPjCtxzg+37heQxyMGzvb5U

cggOfQjeKk+WPZZtpnx7WmLHRt2/NdpfhU4FNxivnte1klX8tdfxZjf5yXnbHet/' +
                    

'2buf2r5ftm5brbSJb3kW23sMtxRGM0E6rGa1jYEE/FfLHZ7JXNWtsWWjS9q/FHP7lbHZq9LJv2P8D7T7Ndy4O+XYzbuc7ZeP

Y7lc232m9yWpjM1tuUFEn0B0dV1GjpqU+lhljym72vp9w6NSlw9q8DtbfP52JWnX' +
                    

'7mF/ht3f7pd3O4XMuOc93iTfrLa7NZ7G1lht4wki3oi1kxRqT6MdnvOxwYcNLY6w2/byMHbt1kvksrOUl9xH+WPeDuz2q7zc

d43xTlNzbbbvBimvLGWCzkiSt37JSLVBrVNI8WY18cP2vZbfPt7WvRSvfy94N9uM' +
                    

'uLLVVs4ZeP8AqE7LuB7M3e5Q7nLa2dpPbh9riSMxXPuXMar7rMpf0fUukjM54w9hsvUpRLa48tDV3RN4Hrw+eou/B7aNz2Xs

Ht/Pd25Xd/2FTu2rjckdsLG39q5YvP7giE9fSTQuVzOXTFnfLK25dFVdWmus8OHI' +
                    

'Ttiawqztprp4fzBO2XeHvD+VnNd7tO32+PwDt/xsp71/aW0U+63skxYRIHnV1QsFZiAKIBT1E4fcbPBscVfMXXkt4T+VfgV4

txk3OR9D6aL8WD9zu7/eX8VOabRJzPepOf8ABN7k9qaW+hgi3S1ZANftzW6RBjpO' +
                    

'pQ4o1Cvp+rB22z2++xvor0XXKYfwZM2fLtrJ2fVV8+KHv5j93Oa9u+33He4fazkclpb7zNbLbaYbaaCW1uLeS4STTPC76iAu

eqlPDFPaNnjy5bY8tZj3zPAs3+e9MavR8Tvgmy/kv3e7T7Hz7ce5bcZudwsY57Gx' +
                    

'2rbrU61AKrcXcjjU7y01lU0qoIAGDnvtMGe1Fj6kn4t/gvcTFXPlxqzvErwX1K9+Lf5M9wt57rbn2E70yRblu1s93Dt29pEk

UrXFjqMkUgiVVdWRSyNpDZUNa5aO59txVwLPh0Wkr3lOz3eR5Xiyavn7jJ++jFfz' +
                    

'r4uASB9/x/p1/wCcuOnsv/W291jJu/8Am1+B9md7+9HbrtRx8tyvkjbBf7pHJHthtYBd3taUMsUGll9BIzcaK5Y8hstnlz2/

JWUuPgvxO9uNxTEvzOJ/E+eu5vcrvRxbtnN3E4ryrljRRRwXMEu+8f2S3tJIJnVQ' +
                    

'XEYEq6g4K+n9M647222+3vm8u1af9NrT/I5ubLlri662t8VU0/8AHPuPzjvj2FXkG5bmds5CtxdWsu52EMKM7W7KySCOSOSM

VDgMNOdDSmOZ3DbY9tuulKawnDNm0zXzYJbh80UT8X/yM7nXfezf+xvfPc1vt1/c' +
                    

'j2K5MEMH+ptau0Y9pUBWaE60JFfT8cdDuXb8K29c+BQvH4/yZi2m6yec8WV6+H8e0Z/k5yv8i+A9w+JWXarfmvE5Vemzg41N

DZOGnVhIFRmiVxCUNHLN6KVLZ4r7bi2uXFd5ax0qZ1/iSzeXz0vXy3xfDT+IJvzG' +
                    

'/JLeOzuw7DsvHbGOHlG+xG6uI7rTcRbaiKquAFOmR9bFVNSvpJzxX2rtldxazs/yr5j77e2w1SqvzP5FCblO5Lw1Nyfvduj8

pa2972IdqK7elwyahCITt/qQE6a6qnr8MaViXmR5C6J56x7+oTr/ACT5r6vdp9DV' +
                    

'vxZ759xu9XBOQbRz20n2bkGxpEF3qC1+0+5t7gOqyIsqGMSxsmdFK5g6euMfc9ni2+SrxuavwmYj7D7LPfLVq6hrxME7U/kT

+UfMu6nJO2/G94O/3pS+tNpl3OO2S221YLkK17O0USFtEYKgUILsPSemO1u9hs8e' +
                    

'CuWy6VpMTL04LU52Dc7i2W1E54xPh7T6i7IcI788S3q/ve73Pk5baXVuqWVgkAi9i5EquZFKoo06KimXyx5fe7ja5KpYcfS0

/kdnb4c1W3e/Ujc43l0hkWlfE5Y5Empoile5WrDMEUNOtcK2OkjhVkH7rgZjJc60' +
                    

'/XACDC/koxUEFTkTQgAeNcDqD0nkl43/ANRz8QMh/LEkkC6fcbgExwvqRugYk0wJH6UDTXU+VRUeNDUYkjQiJJ7hiQqEjPJj

TEkkEV5dPaW8k0isFiUu+mjMQPAV8cREgzjduRW+43izKrK0ZD6dMiksKKNWgUYd' +
                    

'ciT4Y0qrSHgC3RVtAsMupHcCN19ydslOo0Kg51PXywa6kIbRo2vYWGsAEBXrOclFP6wB/HBfAg/3aS1Fq3ue5RJwCxeeuoKe

np/ktVxWpIQ8a3iy2jkEW4xagzao2ylkyfLJWVRX5nBacEalGuxbhA6RzVqXCsGI' +
                    

'PQio8sUSUwTfeAsKtkehy/wxJBADPvO3axSdCRkDlUYg3Swqe5PtiWM1Ug0PXr1xJAkZ33ZvGueNPtlpOFuppIisAABdAGNS

P8oI/li/C11S+A8GLXu38hSNlsox7n38ftqVSv2K6DIDWnT1f72OlW2Px5f/AGFs' +
                    

'reHP5H6fb9+TcN5VY6WzwxrtEYAI99oWqzEZ0L0+rLEVsfTXnP5vdJGrS/kTWG272RZJKDqFqTduNP8A+XrjB/QDV8K/phbW

prHPT3BStp7vmb/HJtU8Y9idXTopU1HTzxx2PqC3EkULmJZB8DkaYAyALuXWQVkr' +
                    

'5mtcsEMHtu9rCutjma0HniEgLj3CdVBkj1KATl/3YAII5bwz0MSka/PwxAwdCe+iX2YqFKV6HM/riSSEDNHPLVZFIr1ODIAq

ymt7fXHds7kCkdCemAQP9v3rZZ4K066HzBp1FcyMCAESGKV3ilUI7fQOtR40rgND' +
                    

'EV7YtXVGeo6dafLCjIDa3fSKDoaVpSmIE7NqjZMKAdajEIcrbBSSTWn05ZfGmIA/RtG197MMasEjDNcFqMhc5KFpnWnnhvAg

0UxJkVFaUDU6jxwoDmSJZwSpAp5df44JCD+2UJJcEeBrU1+OAGRdvF1Y7NAs9+zB' +
                    

'CSsdEZqvQmnpGRoPHD1q7PQklMm5JHc3nsWyCOCPT7pb/mHXnUjoD8K40+TC14g6tRnZ2MAtkms41iiYErGgpUk5mg6EnGe0

zqWpg+5QJbRrIwqHb6K0LH9cSsth4CkW9vMQIwS1BlnUGvXPrh7SuIU5Obna1BVw' +
                    

'QUqAxOTA1+XTFfUOCXmzW5Qe21VkH7iAqaAZjD1sxbMzvltlt73SvbJ7bIKEmhy6nPHY27cHPzDniF1BBFGRcPMkmcUhGrUD

TPL5Ypy1lluO+hp2wbtJ70UXuuY0GnUaEmh8MqZDHPyYx+JXO/8A3A3XY+GR8N4Z' +
                    

'K0vJ+a3CbHskIqro9x6ZJqitFjQnPwJGOl2nbVvleS/6KLqt8PA52/yutOmv6raIvvAOxPajjHFds40/H7C8baoEtpL+5s4J

HuJQv7kjs6EsXYluvyxTl7jny5Hfqal8JGptMdKKsJx7AvmnYntZvvFtx2deMbfD' +
                    

'97bvELqCygjlCyIV1I6oCrA5gg1BGLMO/wA1Lq3U3HtYt9tjtVrpWvsPkD8Oud7z2M7w8p7A8un9m131nghDErGNztQWgda0

oJ4SV+J0Y9p3bGtxtq56eH0fH8H9zzuws8Od4reP1/tGH4g8it+znfDl+y9wbj/2' +
                    

'1c7xZyW9jc31IbeSSO8E9BK9EIdASh1UOB3ir3G1pbF+aH4ceBNhGLPauTSefvK9+a/L9l5V3y4luW1bla7haWscCyXFtcR3

MagXmo63RiBl1qcWdlxXrtrqyaft9wO5Wq8tIaf95v35t8w2XlP45bvJtN3Hd6pd' +
                    

'vk9y3YSQMGvEFYpFJVly8Djgdlx2pu0mo4/Q6vcoe3bXs+oF+JP9s5X+IScHivEkuXG8W99awujT263k8qq0iA6l1KSVqBXw

w3d3bHv+uNNI+Anbkrbbpnn8yhfh/wAwi/Gbl3Ke0veErsEW8ywXey75d/tWFxLb' +
                    

'h4yvvt6QJEYFSTkQVNDjod2x+sx0y4fzRxXj+Bj2T9Ne2PJpPB+B1+XPKB+S/LuN9n+zCx8jntLk3m67vZuJbC2Lp7S+5crV

AqKzFzXyAq2WB2rH6Ols2b8qahJ8X8Bt9b1Fq4sX5ufIZfnjx+Hh/wCPnA+HQSme' +
                    

'PYp9v25Z2FDJ9tYyRa6f7xFcJ2PL5m6vfnL/ABY3c8fRt615NfQvH4/fkh2q2DsPxnZub79Dxnddj2qKGbbdySSGW4hRT7M9

sCp95JY6FdFc6imMe/7dntubWpXqTfFfR8oL9ru8VcNVZw0vH7GJfinxXkHdj8pd' +
                    

'177WtjNacZ2+73G/jvZkKJLJcpJDBAhOTPR9T0+kDPqK9numWmDZLA3Nmkvw4s5+zpbLuXlS/LLFnfq7t7b85ON3t7KsFvBf

bA888rBERFmQszM1AAB1JyxZsE322yXKwu803lfgR/8AUMcXHdrju6J+7YS7aogu' +
                    

'h64ZFFzI/pcVU+lgcvAjE/p//wAFl4z9id3/APJV+Efc078lu8/bbl3Yvddl4lvse9Xc9vbf6exZp/ZRZoSXmCikSilPXTPL

rjj9s2WfHula9YUvj8eHM6m93OK23aq5ceB3+CO+2cXaq322GU3F3Du9xJNYQyjW' +
                    

'EkEQQulcgSDQnI0we/UfqJ8IQO0teRHjLEP5z9v924XyvYe/3C9VnfbdPbpeXEXWOSJw9rMaeTD228/SMa+x7iuSlsF+D/hr

7mTumF1azV4rj9jW/wAe9/vfyB7h3P5I77YtZ7dtVnHsXELGSlI7qWNX3O5Wtf62' +
                    

'9pWH9NfLHL7hVbXEtvVy2+qz9n+Ffc2bV+ffzWtEoX3f2M7/AOoJ2h5Py6TZ+dcatpNxbbYpoL20hUvIYXZXDoozOlqhgM6G

vgcbuw73HjnHZxJR3Ta3uleqmB92O/L7thv/ABHbdk7jblHxrkm2QR2e4Lfo8dvc' +
                    

'NCoQTJKAVBYCrK1CDWlRjFv+zZ6ZHbEuqrcqPA0bXuWK1EruLLmbdxLvZwfn8e9bXwi+XcrTZYLU3O62+dq8tyJP2o2oCWQR

1bw9Qxycu0y4VV5FDc6eOhvx56ZLPpcwfG/4T7nt23/lLzBNxuYrZr6HdLazE8ix' +
                    

'+9O+4RFY01EamahoozOPY96q3sqQpiPoec7e0tzafb9T+ilpbxxD7iXSi9SxyCqPnj54epYFuHLIbaY2u327XqsAUlhdCGZq

+kV6GoxAqnM7m3q1dRGshMqgCSFWDFfDOnkcsVsZVOlvmC6hIKDqnXw+OASAWW/R' +
                    

'AwKgqxzGANAHJuIDFR08hghgAnvBQ+2csxliDQcLcsVozVriEg5+9aNzQ/LEJBFf34ksLla5mN/8MMuJIMzWBZLkMKqxp7g9

VCcxkNWNc6BGvIbaTXAzOKgswFOn8wcJRkFn2zRvBJqpQg516V/4z/hh5IPd+iia' +
                    

'2YFSTJKpqFZR9LdD7h/iNPyxXUCEe3wRtdx+4NLCRdKjUfH/AI8WWegxsUVwiWcKePtpX56RjEyqBXuN3KixGOZlJfSKHLP4

fphkgwLdUnvfVnSnVada0wwRttlzNJb3TySs7QaisbfSSvw8OuFaAzEu8G5bnLuj' +
                    

'7nB7S6LGSQKDcDVJBHLIBRZVGdAK0x1tmqtQ+fs9nsKsjaUoz253bkERuFVIiIZdxijBa6J1Wlus0RP73iWIx0q48bj3Ll4u

H4Gd3v8AXmSrPyn3ZUeGKJA+1oZTJc0YXa1n00mzKEimFjFHF/4uXhw8AzeeHL+0' +
                    

'827dOUywQmSJEWUM9TJdEAruCWtKe91EbasG+PFL1+n+WeXMlb35fXnBt3Ddubb23S2knM6xTLHFnKSoC1ofckcVz8KY4Ga3

VDNyRYlRSD7nh0HjTGYYgdP6Yyc/Lx+eCMcqKNTTQePxxCDDb7hWb7aQUH9JOAxW' +
                    

'gysAJ0Aek0I8sABI7RMKr16GnniEBzIqAkiuISBfNLqly9J8MEMHMO5vBMivKfbU1KA0FcGCQFXe6GVVmtwDIhDBT4jywIIk

FRbpBdKpUjWVBMfQj4VPiMVtDwcSXUYXSWWqnNARUmuFJB0Zoj9QFMyWB6fxxAwc' +
                    

'XKp9tLNHk6Rs6nIqCFJzwy4gKTsTSQbjc3txJMbhZo4rjWUNWk0kVooBUhx0xtutEhJNDkhUGq550FPLzxhGgiVIvcCJUU/q

y8/LAGgzjfe5N/LDPYLBHGTqVZUMiurA0DAg9RjpU26mSlsqMu87nf8A7cl3O4Bq' +
                    

'ysxIB+Fa41dCXgCTlnlWOolYVrqYmhPlX5YhCY883HYJYdoiSO4WMsTLIGLNkDnQ/HC+mrebA8yNCK/3QLcTSMpdWJFKsaVz

yqcGtNAtir+6NFaz/bswpMgGZPUdK1xd0S1PIXqgtdpct/b7eR2oTGpPUnoMxXHI' +
                    

'uvzM1Vvohbu3Iks4WhVwSy+qqVpX/DDUo2yOxl3LN7nedWtWVkORFCvzrQ4722w6anOz2Llsc0ckUNzLMFSQ0RhSla1zoTTG

G6gtqX/ZZbVZgHALD0hVoGyH1DzxjyPQ0pF0sksBNHeRxIJYRr+5kALRqc2IPUdO' +
                    

'gxheTSA9Bbl39YbIi/mAiGmRTShI/wB6tCBTCKwrpqd3e+JLaERaGVVTREp1Fx5iv+GL6MrdT5v76fjVt/djd7fmGyzzbFyK

00NDucSg1MbakEi6gSUP0sCCPjj02w7tbb1dLLqq/A5e62FczVk4svE0DhW3c7s9' +
                    

'mWx7jz2O+XKKkcF5ZWAtiy0CsZA8jgv/AFEqFHwxz8+XE7Timq9rk2YqX6YyNN+4YHZdlEzRvtKAMaamhj0mp6igr4Yp823M

u6FyODBHbs4tNuVkOUiSxLJD6cxpU0HUnwxFf2k6UWzi+4WkW3RBoIrS7kBM8MUa' +
                    

'RE6SdNQvw+OM+RueMoiqiTc7Hj+8p7e62MF5GfqinjSRWHmVcEYFctq8HBHRPRqTva7PZNht/tdls7fboHarRW0SQoT/AMKA

D9cC+W1nNnJK0S4Iyb8nezm79+Nj2Tje37lDttta3qXV9ezhpCkKRSIRHGtNTVcZ' +
                    

'EgeZx1+2dwrtLWu1MqEjBvdo89VVONTQuK9uuGcZ4fx/h11YQ77b7DaxWdtPuEMUjukChfcZSCAT8Mc/Lvclslrpx1OdDTTb

1rRU4woLvFPYiyW3soUtoohpigiURxIPDSq0oP0xmd3Zyyzogrs1tscsrXEu3xSy' +
                    

'sfVJJErE1y6sCaYbzbRxG6ExRz7bdg3fjN2u4WEFwbf2iiPGrKpV1AorCnTF2DNZX0cAtjTWqKbuOycesuM3VvZ7fb20Rhd2

jhhSNSwoQWCAAkfHGqmW7um22B0qq6IVbBFvMWxqnBks7beZpAtrcXcRaBJQ3paR' +
                    

'YijMB5V/li+9qu/+5Lr7BHV9D6YTPd12z8l+Y7PccQ5fuPE9sguY2gud8srW/nvVSRaM8UErrCHp0qaA54trl2WO3XRXfsbU

fjxMTx7my6W6r2qTTuBbXxztxw/aeC8eFNu2a3S3t3FPclYZvIwFBqdyWb4nHK3G' +
                    

'a2bI724tm3FhWOiquCCOQ30d2kAJDoA+oMSNJNKCmKquC5Iq91xjht7NBcbhs9pdSlQfclhjc1+JZScaFnyJQrNCPHV8Uh/Z

Q2VvZfZwQpb2+miwxqFjA+CrQYodm3LGiOAXbbZsdjyktaWkEbhiyssSBgfbBBBp' +
                    

'1wLZLNcQKqjgWe7v6WUy1rVGrSvSlc8Z5JBTLK5kkmtQTT91Ms8vUMMWMZbdcJ/c7igqRrLE+eumEZI0GDXRX11qD/DywhIA

Zr0aiTnXLLxxBoF012dTBDT4V6YIxA9w4o2qg8cEh+W4alT1HShzzwSHL3efpHzz' +
                    

'6fHEARz3ANvKg6FT/hgriQpwQiOSQBToNKmlRXLyxrANd8UXDWpkbU1Grqp5jxIxXUAuuo5A8SLEukMq1OnME08AMOgjTcix

idWRGT3QWC+0cwrDMIoNf+KpwiALLRljuopAq11rQgLUUPywz4BNB+/VkjiJ+lVA' +
                    

'HyXGQMAtzOskBNCQGAAyXrXxOGQrA/dk1V0j+GdMOE4v+QLse1TywxGa4ZXEdsGNGBoCSwB8DkDhq16mKzLuWRX+8wvO8AjE

cD+4kbmQupDqy/RUkg+FMdDC1ViXUorsfGrwXr20uqT3fuJ5LksSqPLGI2qSlM1P' +
                    

'pHwxqeZRPuQnl6joWd5ePJYrCVNqbWUzvUKxK1XS2nOmn1eWM8pKeclnHQ8TZnaxctbNSJnRY1dvcalysuoArmNSDP8Ay4Pm

Rbj/ABAHWUaXxEXMIv5L9ET3pQ/uBvSWKgkLkMs8c3LGkFqDN/3iPZLGXdWiNwqF' +
                    

'ECK1CNThdWQPQHCY69TgjOdsvJN12223J4jbm5jWX7diSU1eBqB/hgXr02aCnKCXBY1Va+Z8qYQIk3XmOwbBM1vul8kNyie6

tqamWRCTQovUioxopgvdSloJa9Vo2VXkvdS0VPZ23ebWAMAZTA4kZPGjSkFNXgVV' +
                    

'TT/PXG3Hs7eNWyl5a84FNj3Na0dZbHeYzCXWaVJ5DMjAZPHVzqUHzByOLbbVvjUnmV8GWOw728Zupkt74rE7kgvHMoSg8auM

hjNbYZEpSD5teZdCZLy2iv7aIrHOgeIO66tLCoOenr16YwusOC5MWXKzRPSTJgQD' +
                    

'6lPX5GmGSGkKsphI2kuKqBTPPPCNEDhFbvo0EOJFD1p0r88B6ATGK7PCbYmoC/00oDX4YWSSBkXMTpBKQ6saRsx8R4HzwrQ6

ZHe75tm0WcqXlxBEZvct0MrhYzLStCCQT1zAw1KWb0QLMqe1XtxNIZn3zbpWRllk' +
                    

'mSP0iJTkGzpTT/Uc+meNlkl4Mrkvdrvm3XxSS1uo51fXQxMGUmMDUAR5VGMFqNcS1OUTi5gSSoYUX+o1oPPPCDGAbjce5czS

OuWtxq6/1GmPQVWhlZ+jvIV9CVLAdDSv6YnSwydB7W9invNwkmgjgilbVFOY1UrE' +
                    

'xBKr1Osg4KlaJJ/AR66lU5nv1qntchs0W4t5rt7EMtwVcsyM4Ol1JooFK9KdMb9vhbmr0cTwMuXKlDWusAkvObae4mrZgKgq

xaeoQH0+o0GRIw62jSWvyJ6hcjjj3L7fddwg2cbbQXs8Rjn98nTnpqF05j9cHNtn' +
                    

'Srt1cFyK6bjqaUcTUAum2jhjch4QAW1eHlTHmb62bOrVaFT5P9zBbzNbgF26Mcwc/Lwxq2ym2oLPQyDeb+Q3WmYeoGjEZ0Pl

0x6jFRQcnNY1zj+1TC3jd7yOVo82XNWz861GWPP5GnwN1C9bNeQwNH9/I2qMABlC' +
                    

'FM61pSg6DwxzclWbastu27jttwvtRNQOFK1XxB6Z/DGRpofUY3V9ElIIiBqWtKimnp4VxEJANd3e5RMIIUVo2RWLe4EZTXp1

xppECNagxlvZIU9wFTpIb/VUplQ9Gz+eHlCwRXctxItzGi1DezWlw6Fgo8Dqqv8A' +
                    

'82GTJBBcGVBcSGlNSAKbop+v1en5f1YKf8QSAWW5Ms9xHFolMkyMmm80awv9QBb0gf5fHDJ8P5AgN2ie4XeazxlUEztr98tU

e0wDaKmgz+j9fDCXa6SQWFr/ANtzKzADM0qKk+WMklkBNru0ckCuvUkj4inUUOA2' +
                    

'DpIzuttcBoxIDl4UOkg4gYJYLieVHuY6FH+ss1SKZHKmXTAhkbQbBItsomLa69VrShPkMGBJkDubkxx3twGobUayPMjPrhlq

GBFyndLG2tm2l7gNcToHMZGmi+5prX/0nF2Kr4kKzeTxX1q1tNKFhkqhoQPSWHx+' +
                    

'GeNNW05A1JxsE1htPtpbXWqOCX3A5zYeNfDx/lhsjduKFSSLrLukd1IsxIJcVBBoKCg88ZOA0HEtyNRGWrTUDI/zxJIQzXeq

NV608qeOeeCSCL7slYVDEKFrRR0+WCSAk3o9lRmVGVOlcz1wpIOrje5BN940jCRO' +
                    

'spzOfp+WJBIB35He3GmszsK6gQxX1HLotPDwOJ0kg4i3grNG4JBBGimRBPjnidJIGMO8Ro7BkeNXOrUGGrzzpTrhIBASN2ie

itK/pFZKAePllhekIOt+kzDSTrNSAaAmgrlnTA6WMeGQySMjIwYDUxbSCB/8WJBJ' +
                    

'IRM0gVUIauWmo1DOnSuJBAe4lnhAVhpJ8a+RwyQSL7yo0llLDMLUfKmDBCQXEemSFnWuljrBJrQeGQwekWSrNMsjSKj66geL

5UPyxpAOd9klDWwj9AFVBq3XL/LiuhBcbhg0dWMhLCo/cyzz6imWHggx3i4f2CxY' +
                    

'lVkUZ+9kKEZalAp/w1GEqiCyC+Md0p1ftF09X7nnn4YdrQhav7jBPMYI2pmQkrMqpQeJJIxm6WNJ2JoWtCksiZyVorq2QHX0

k0xEmB8Tn7y3aNvakDsFICCla9QMNAplr7ndSXck25wT6iKBvdjDLn9JDCmVfDHR' +
                    

'6FGjQsnSbjZAgzxXSZ0akkBoCaA9cR0fNfMHUTJdWcquxFwKGka+5CQw86mlML0v2E6iA7jaqGIguVAFQfdgzzoemH6PavmD

qPYt124yIk4uIq06zwV/2Yjow9RK+5WC6xElzI4FY1Wa29f88sL0P2fMnUF8f5Fc' +
                    

'XG4R2E1nKLGb03JuJY5FUJ6tQjWtSCKYXJjSUzqBWbfAf8h7mcL4ba2iSTSXJYKI7WIJ7qw5gSEyMqkVFOtcVYtpkytxoC+V

U4lQ533c49yNY+PbTbyT6LiJjuDKgt2DRMCqnVrqC4BypkcbcGzvRdVnGnDxKrZq' +
                    

'twjLJw1zu0F1FEsMVlJ6pwSxbS9CqlQTnmCMddOKNNy2ZXraeEDC/wDthATLJ7onKB42Dqq1VFfU2WZKnFNJnTwLbNRqE3Um

33F/FNa3EKwosClBKoLKgAcMD5/zxUupVhpzqFtToyKzWxi3hrqS4haMtKYl91S1' +
                    

'X1aQBXzOGu30RD/ASrXVMo1dO5vELSxtGkeYARRwsPt42AdECnPOuY644722R2cGvzKwDt3H4nucq2m33ExuZXSONHhAUsxy

HpqB/DEe2yVUtBWWrcIf2u5uNEkfocIDWoyyzOMrRacf3eY3CH3GMZqPqyX5Z4PS' +
                    

'QkuuVLZoUnnJZRqVVdgxAyqB44ipJCKXmto2lWlYIpWkpEmsVzJ6eFcsHymRWgoe9cuuUu76O6tYp0gAnMheYBxK4CnTWgbp

qx0seCrSh8Si2VqfYT2HKJo7i+pbQRrZgGYapWDqUqAo8MssLbCoWr1Csj19hZti' +
                    

'37cZryF5LBLS0Alc3nr+lI1J063/AKqkDL+k4y5MVUuMstVnJBH3N41JH7lxummLUVZJHRCaN0YV6EZipwfRZJ0qTz68yk32

62abraRRxe9b3cF1P7nVSyzaFpl4Y6Ncb6G/FNfQod/zJewQnct93NCm17LLOpX2' +
                    

'557aNiS1QTQgGhzGWNax0r+qy+JQ8lnwQJuPJeQ/Yu+5RSQW91/p5EjlRC1EIGpVXV0FT/PFlMOPq/K5a14CWyWjVaFV5H3F

l5Oott7DS+3cG6WcFVYSNkaaFApmaDwrjoYtp5bmvKDFfcdShilL+3cy2xnjht7u' +
                    

'jSM/QrG+oCtPhi90ejjVFasuHgy1cBkN3yrbWjZXjheKOAoKCitlT+OMG8UYbe0vw2m6NjvEcJJ66BCyStQ5E50JA+OPIKk6

nb60VrfjELT2mvVE5KxRRIpUkmpFSeldJ+GNeGjTnwFtdRBknINqvre/l91aCP1z' +
                    

'F2GSmp1Gg6Ux6XBZOpzM6hljtO4e4wXSwCKCJG0jSAzGpGVTlTGN7OsTqP57ktsXLr2RKSCGNHVi4BJHoFRStMYrbapormYp

flFzHu0e52t9NBcsuhTD9JVcwpDEgrn442V266OlpNFLyPqmdTVuIb++7bWLnddI' +
                    

'kSQgaWCF10qQ1AaD9McHcbfovFTpYsnUpY7vd1tzOgae2WqgKZ9bORq8CPnT54qrjaXiM3qDfe2j6XeWwdih0NRyKUrkT4HD

Q/aQTb/vUllcTMntPCyRmdRCHFAgpq1daeHli3HSULZwV3e9/uTEB7orcEmRo1C6' +
                    

'tIFCaU/zZY0Y6KSu1jvj+5+5dILkRyagup5ENKasqkHrU4XLWFoNVyWHdr4i2vJ7KWKKUPqEsTFZFah6k/1EVz8q4zUWqTLG

Vrbt53qK5F3ebtI6SSR+5bqQWpUUDP4imNV60ahVKlPFstcnMLOK1W5aYBGUyBwa' +
                    

'+lQCxzqQKMP44xrA24gt60Dxc7tn13UcHsUkCNQsA6kGhBNcz1ApgvbvgTrRZtr5UIrURsJpTKGkEhUAHUa5CuQp4YoeMLaH

m3b/AGt8sgZtBjI0B6LWhocq5kYqtVoAlvd/C7hOpvESznhvD7ZpqknT2lQDOoUC' +
                    

'QnpmcW1ppMaygN6oqe/7lBuu5T3sk6yQKStvqGSR6i4GXmzHGvHKUIGgtN3YXMirLcxsyIVpWqlqHP4HFsWXgCUeRQFoFlj1

RvF6/QNRIVCKUHgMF21AWWLfY7LbHE0wWTP2TpNFDkEUrUHxxm6ZY4PHy17Vdzn3' +
                    

'W59kMYv7bGUJbS6VdgRXIPln8sO8Ux0/ESYbngATc2QLqG4MKGlQpAH8sOsL5E60GWXKrFpgJLx5QBRVPQ/IgDFdsT5DdSHM

fI9v9tGuLhY5FDCWI1qGr59Dil1ZJR6d/wBtmgakn1AFRTrQjL54ENElEcVzCQlW' +
                    

'9LUNa/7RgOwZJEv7Z5UDtmjAggeWBIJPL3k1tSSD3CqClV8zXI1p8MRVALJOUD2iHUszGmQ6jwJqMOqBIm5UqsZIr0wsKgAo

p05Zj6ScWLHPgDqREeURKTLNeKrMfVVAF6eQXDeU+ROpDjbt6t7+zDQEMvQyBiC1' +
                    

'PECgyOKrUh6jTJ7c7mIYTO5Eca0qxYkioOYy8KVxFWQCN+V24J0bgWLZh9FAR59MaPKfIHUju05RZF4/d3I0cnIr9RNRT6a5

jAeJ8gdSCbe31/vCRVqA2gr6vMdSMI2MM+STiSW3jRwhjqWBFaA0+IwmMALFbzKV' +
                    

'uIWV1VhUhOvjkQxzwXYYKv7i3vQYYSI2eUyOWjagoD19Zrn8vlhK2gAst9naO4MrTxlSc1ZG6j/1dcWvIoANYqe4ilRIueqO

hGryz1VFMVyGQu9+19uNYJnhXP3VNAQchlmcvicBJi9R7HPt0E/uSXiaVI1UPQH4' +
                    

'VxGmGRJvVztN7bbjt8UrvFcmfXKVGSzA1oK50GWLaSmnyBxUC3+6Qx2y2qF/Z0iMOVo/pUDDRLkIptr+PbrOKyjkedbaOiqu

lXOkk5DpX4Yudeq08wJQoIbWeGHdd0v1muH/ALobYjUsapH9vGUAB1+IOeWGvLrW' +
                    

'umk/MStYs3zD72Gx3OWzunnYTbc8kkYyIJeMoTl8Diut3WVzGtWWnyOLy59q2sJp5H020lvcMyqMzFkAamuZPXErMv2yCy4B

V7ua/YzSRSH3pVjiQEgKQrlvqUmgz64rrVzqM0Uble5SXM0ltfohEEeuGJyRrRdN' +
                    

'EB/y0c0Pnjp7ekQ0ZstZOF3iA/dRrBCPZubZYVaEFtDGLVUjqficTy3px4P7g5+9HW62uxpx6TkDhkaQe41ikrRoC70AqB4A

4GO+TzOj5wLfHVV6iXjGxbFf7S92PftWWVohFHOXBC0NakDEz571tGj+AMeKrXL4' +
                    

'gUH9tvdtuL/7RxcQzRwxlpyY2EmqhY6Kj6egxbZ2TSnSORWkmpj5nEdvZQ2cF41uGM08kTN75KKBoNVqpzzzwPMs21PBcidC

Skg5FabDZ2l7JEss8luzBBJJRT6gKEgeR8MNhvks14SPfFVJkHFdl2vcIkvJlaAp' +
                    

'KyFoJiaaSPHIg54fcZb1cezkHFiq9TTJ+S2cFtGkZNdKKh6+AFOuORXC2zoaHu38jtZ5mhMyh4/qByINPj1xL4WkAR8s5FDF

vO128jBS/vgqoK+5qjIWprT0nPPGjBibpZ+4ov8AqRRpeWSR2ahdwd2+zldvU+rU' +
                    

'txTX1rkMvPHTW3XVw8fsZOpxx8PuN973WMXN8El9hFsraSNaEmN2ZKydD9VaYzYqaKVOrHyNy9fAd7YlrLd7vbG4B0m09iMZ

GAPpqdWXWtcZrtpVcc/iWV1b+B+5TfX+57os1gzGO2T2SQuoOVdiTVevXDbfpVNQ' +
                    

'ZOqdChScY3AB3iZianIK1STl0x2FuqGDyLlultTDcWtHasW2zFFJ9SuZQSMj0LMTjnK6af8AqRu6Ya9wH/fZLK2+wgkewaNw

zyxMyMQqn1DT4saV8cW+Wm54lbyQo4FZ5Be3c9tJJHIjyuXZSRRgrrTLUK5DG/DW' +
                    

'qZly2bQFt/G7C7tbe4aYiX2lMkXtAjVmTnXPI0xZk3Dq2o+ZXXFVpOQ//wBmW2j2JrgAoAQvsocmzzNTQ4pW88Y+Y7wKOJZd

q2q12K192F6Mi0ikRAJEaoowoTQ4z5Myu4YK4nXUY20UG7yId0vJdTopqJlo7f1e' +
                    

'l60IxislX9MfgaKqf1MQ7tHabfYya7VoboyJqV5o6FdRAI055Chxpo3Z6aoSNOTM53pVvVeUCq6xSssSgKUJqC2eZp/HHYxO

H/eZ8ldBNtm/G3lD3ReKp1MUYHUR0Ir4YtvingU1ycx1Py9ZnAiutMZzjQrpanQk' +
                    

'keeKq7eOKL/NrzC9v5DalwUnjVlSmmtKkDxJ8ThrY4XALvV+I42/n09rFos7m3RSAXjYEnUR1r8hniq22q3qmNXcOq0gsuz9

6BZWkduFUvqk1TNKoUZggUKnwxky9vrZ8TRXeLkNo++G3lVM14kbaSJ40hLeqmVH' +
                    

'CgfwxjfbX4IuW8p4lI3zuZ/db+e5sL9hDJKFXUuQjC0oV+FOpxtx7JVSTRTbdVb0ZzJ3CGjRNObgxrJQ0RQKj4da4HpF4KBX

uFzIbXuSlnbLMszR+pUZhUuB19FadD8cR7KXEC+pSUpkg7kz3Nto/uTqFH7ccsTe' +
                    

'IPgX6kGmB6JJ/pCtzK/UCWXLRHA9bkDSaaJYwytpHjRzXr1w99vL4C1zacQ+37jPNagm7WIxmmhrfT08tL5jFT2UPh8yxbmV

x+Rzb9zDbztqkX1Bi9I6Lln/AJv4Yj2MoHqPaM4e+W7WdusVpKgUEiNREDkfIsTh' +
                    

'P22r4oD3PtOrLvLZNe29zvLtKcxIi0ogYE0GjpU0rhLdttD6QrdVlSz3cO7Gz3e4Q3VqsgMA9sKgbToObfVSta/ywK9vydLT

gZ7mjtMhMHdTickqyXckwjf/AJ8YVqFgOtBkcV/t2VcBnusfMG3DufxmKZpNi1NQ' +
                    

'am1xmnUEBanri6mxyR+YS26r/hZGneGSJGPuVYGNI4vb9Xt10k6hXMDBt29sFdzHFkc/dRpbiNKGWCMksXU6+laqMsxha7Bp

a8S17msk57mWBuLe4SWRihZXEgXNHpkR8K1wvobw0R7mk8SW27lyS7zc2UkgaCIO' +
                    

'0Q9pAfSVpmB5HC22MUT8SLcTdrwO73uRJbX7AgG3WP3KaADq1hQM8Cmymvtka24qn7AWTu7BNMQwoB19IYZDPw64s/bbQL6y

gTbc7jaBL6S6URuxVVDJUV8KZEYrezcxBYtzWJC5O7ltDGscNzSq01qhH+OE/bm/' +
                    

'Ab1WPmfk7v29VZpyQBmyFloQPDLE/bXyF9Vj5g173biuZQSyUUAdJCTSpqch54evbmgerpzFjdzSZa/dOHUVEUamvStelcXr

t+nAR7uvMNve5rnbrafZ53Wdh+680StrbSBVSQSc+uK6bGLNWKrbjRQOtw59GuzS' +
                    

'31pcpLNHFrZfaBGvRUg/rjNXaW60nwkveZdMhW19zo7IrG8C3HvCizkCMBlFGSgGVPHC32TfsGWZIOHcOK5ZFnhjCs+nUTXI

dCBT+WE9I1wLFmRWdy7h3EHK7HbrK4jFhK1ssoa2TVSRqPnSo+GN2PaJ4nZrXXxM' +
                    

'19w1kST0HG58sgs5rB7K4LMZkWUCJCzLRmNCehJAxmx4G05XgX3ypRDFh767YkrRBZY5AdBZ4xUFTQ+npXF37XkidCl7ygwt

PyD459O4zTSFlIk1wCgocqFDnX+WFfacvhAvrMZ+l7+cTSINE8vUMiLAQv8AAnAX' +
                    

'aszY3rMfMAj78bDJITc+44B9NEK5VJwz7TkCt7iPLjv/ALEJQ0ETqKUIoQVrllUYZdpyAe+xEA787Oz+80ksIBIWNUZsviaj

DftVyeuxEM/e7ZL+SIS3tyiJTWghNGzrnnh12vJXwQvrcTFG5dzeMyM9xHd3utiC' +
                    

'REGSo6f5h4YvpsMvJCvd4vaN7PfbFdviltNxne1uNLJ+851ayAB/mBqaYothfU01qixZ6xoEXW/rb26Iruq56h7zkEUz8c8V

1w6jPOhbbbnb/cNJFdSpKwqKTPWgHzxc8bjgBZkdpNaEGN7mWT+op9w/1HxI1YDq' +
                    

'+XyGWVH6CaxhnS4WaQvG3oYTM3+3EdW1H2IstZJ9xv8Ab7mMhWlaN6a1aeQE0zHU4StGn4fgHzak1luuwWwNteylh9Skz5jL

x1H4YW2O74fQPnVQh5HyfhUl0bW23djK6NDrIaRED0P1moyIoMasO2zJS6lN91je' +
                    

'kkW5b+trZXX2Tquu5hkivmdTGyxxp6QSaHNeuHx4Jank9BbbhQ45g11zb77bW2y5RXQ+wir76Vb3GquYPQ+GHrtIt1L2+Ar3

aag5sOfXmyWbQWbp7R1zOBcIwADBGNWqeuXXrg32iu9foBbzpWn1F1vym6t7S626' +
                    

'6McpmnQlFnUH3FBIFQQa59MXPAm01y5FK3OjT58zk8quGtIre0mRVj92YNJcKwPQORWuQK54b06mX9CPcylH1IJeUXl0ZVvm

SZWCCVBMq1MzBkII86Ydbetf06fDkH1bfEltOZS7UrW9gDFqeWQR++jjWgq9S1en' +
                    

'jnhL7VWcv6C+rjRL5jnZ+Ybju9tdSywrIsKe40obSoUiqgU/zDocZ8m2rRqGWU3VrDaG8mUW11GkSLEFEL+4wIjbM1Pj1Pzx

Q6rVMuWdig7xuN7pnX3Myw0yanZdLFRQ+RGYxd5dVoKtzZnR3AlP9XEroV0Vki0m' +
                    

'hNSNXXrgdEcPqF554ku48g2neop5LeQRyvbrBPEg15RMpqD1H0gUOBXDekJrSZA89LT7gS67hzRSl7aMRM0QGqI0ZngACl6i

rVOLFs01r/EiPdpPRB1tyfcREnqklmmo5zqTrNcyPHPFLwVn2Fy3GnAgk5S6hJyG' +
                    

'0sokAVvVTVQ/4YZbZcAeqXIkbk95BcRavU0UE8jkE5oZg2nPrQP/ACwPT1a+K+hHuNfgys7nu++3ck1pt7maWBow5HpBATqS

3jjdjxY6pN+Jjvkb0SFjb7vlkGh3NWQvkqsdWo1FR18saVipb9JT5rXFE8d1v8iq' +
                    

'23xyPDIKwyBzGGWlTkTlTFLpjX6uJYrt8EMW5xOvHhs3tkXftmMzCjHWXqPXWvTFC2a6+qdC31K6OnxBtt5Tue3o91OWZQCj

fu1OphQVFa9cWW29HovoVLLGpZuPcstpJ7RbuJJ3kUqyM+o0FTQrTLPrnnjBm21k' +
                    

'nGhqx3o4kF3jc7T24LBYxdB3lJupWXOgJFSuR01pi3HS2regt70rCRXbKwT7K7trkRvM1uhN4ArornWPdFT4f7MbLX/MmuE8

PsZUpTT5H//Z' +
                    '" />';
                                        

var running;                    // Is the autoplayer running?
var innerPageElt;               // The currently visible inner page
var cashNYElt;                  // NY cash DOM element
var cashCubaElt;                // Cuba cash DOM element
var cashMoscowElt;              // Moscow cash DOM element
var cash;                       // Cash array of values by city
var healthElt, health;          // Health DOM element and value
var maxHealthElt, maxHealth;    // Maximum health DOM element and value
var energyElt, energy;          // Energy DOM element and value
var maxEnergyElt, maxEnergy;    // Maximum energy DOM element and value
var staminaElt, stamina;        // Stamina DOM element and value
var maxStaminaElt, maxStamina;  // Maximum stamina DOM element and value
var influenceElt, influence;    // influence DOM element and value
var maxInfluenceElt, maxInfluence;  // Maximum stamina DOM element and value
var levelElt, level;            // Level DOM element and value
var curAttack,                  // Attack/Defense DOM element and values
    curDefense;                  
var curExpElt, curExp;          // Experience DOM element and value
var lvlExpElt, lvlExp;          // Level up experience DOM element and value
var energyPackElt, energyPack;  // Is an energy pack waiting?
var ptsToNextLevel;             // Experience to next level up
var mafia;                      // Mafia size
var invites;                    // Number of mafia invitations
var staminaFloor;               // Stamina to reserve for manual play
var staminaCeiling;             // Stamina level to reach to begin spending
var staminaFlag = false;        // Is stamina incremented?
var stats;                      // Skill points
var city;                       // Current city (0=New York, 1=Cuba, 2=Moscow)
var autoStamBurnif;             // Can auto-burn be used now?
var skipStaminaSpend = false;   // Skip stamina actions for now?
var clickAction;                // Action being attempted with click simulation
var clickContext;               // Context for clickAction
var modificationTimer;          // Timer used to wait for content changes
var fightTmp = '';              // "tmp" PHP parameter for fighting
var idle = true;                // Is the script currently idle?

if (!initialized) {
  var settingsOpen = false;
  var statsOpen = false;
  var scratchpad = document.createElement('textarea');
  var defaultClans = ['{', '[', '(', '<', '◄', '«', '™', 'Ψ', 'Ξ'];
  var defaultLogPass = ['LOST', 'punched', 'whacked', 'you were robbed', 'ticket'];
  var defaultLogFail = [''];

  var debug = GM_getValue('enableDebug') == 'checked';

  var useClickSimulation = true;

  // Regular expression for cash matching.
  const REGEX_CASH = /[A-Z]?\$[\d,]*\d/;

  // Define property maintenance states.
  const PROP_OK      = 0;  // No damage.
  const PROP_PROTECT = 1;  // Needs protection.
  const PROP_REPAIR  = 2;  // Needs repairs & protection.

  // Define how stamina can be used.
  const STAMINA_HOW_FIGHT_RANDOM = 0;  // Random fighting.
  const STAMINA_HOW_FIGHT_LIST   = 1;  // List fighting.
  const STAMINA_HOW_ROB_RANDOM   = 2;  // Random robbing.
  const STAMINA_HOW_ROB_LIST     = 3;  // List robbing.
  const STAMINA_HOW_HITMAN       = 4;  // Hitman.
  var staminaSpendChoices = [];
  staminaSpendChoices[STAMINA_HOW_FIGHT_RANDOM] = 'Fight random opponents';
  staminaSpendChoices[STAMINA_HOW_FIGHT_LIST]   = 'Fight specific opponents';
  staminaSpendChoices[STAMINA_HOW_ROB_RANDOM]   = 'Rob random opponents';
  staminaSpendChoices[STAMINA_HOW_ROB_LIST]     = 'Rob specific opponents';
  staminaSpendChoices[STAMINA_HOW_HITMAN]       = 'Collect hitlist bounties';
  
  // Define AutoStat allocation mode
  const AUTOSTAT_TARGET        = 0;
  const AUTOSTAT_RATIO_LEVEL   = 1;
  const AUTOSTAT_RATIO_ATTACK  = 2;
  const AUTOSTAT_RATIO_DEFENSE = 3;
  const AUTOSTAT_RATIO_HEALTH  = 4;
  const AUTOSTAT_RATIO_ENERGY  = 5;
  const AUTOSTAT_RATIO_STAMINA = 6;
  
  // Auto Stat mode arrays
  var autoStatDescrips  = ['Level', 'Attack', 'Defense', 'Health', 'Energy', 'Stamina', 

'Influence'];
  var autoStatModes     = ['autoStatAttackMode', 'autoStatDefenseMode', 'autoStatHealthMode',
                           'autoStatEnergyMode', 'autoStatStaminaMode', 'autoStatInfluenceMode'];
  var autoStatPrios     = ['autoStatAttackPrio', 'autoStatDefensePrio', 'autoStatHealthPrio',
                           'autoStatEnergyPrio', 'autoStatStaminaPrio', 'autoStatInfluencePrio'];
  var autoStatFallbacks = ['autoStatAttackFallback', 'autoStatDefenseFallback', 

'autoStatHealthFallback',
                           'autoStatEnergyFallback', 'autoStatStaminaFallback', 

'autoStatInfluenceFallback'];
  var autoStatBases     = ['autoStatAttackBase', 'autoStatDefenseBase', 'autoStatHealthBase',
                           'autoStatEnergyBase', 'autoStatStaminaBase', 'autoStatInfluenceBase'];
  var autoStatRatios    = ['autoStatAttackRatio', 'autoStatDefenseRatio', 'autoStatHealthRatio',
                           'autoStatEnergyRatio', 'autoStatStaminaRatio', 

'autoStatInfluenceRatio'];
  
  // Stat Ordinal constants
  const ATTACK_STAT  = 0;
  const DEFENSE_STAT = 1;
  const HEALTH_STAT  = 2;
  const ENERGY_STAT  = 3;
  const STAMINA_STAT = 4; 
  const INFLUENCE_STAT = 5; 

  // Define cities.
  const NY     = 0;
  const CUBA   = 1;
  const MOSCOW = 2;
  var cities   = [];
  cities[NY]   = 'New York';
  cities[CUBA] = 'Cuba';
  cities[MOSCOW] = 'Moscow';
  
  var cityIcons = ['cash Icon','cashCuba Icon', 'cashMoscow Icon'];

  cash = new Array(cities.length);

  // Define all jobs. The array elements are:
  // job description, unadjusted energy cost, job number, tab number, city, unadjusted exp payout
  var missions = new Array(
    ['Mugging',1,1,1,NY,1],
    ['Corner Store Hold-up',3,2,1,NY,3],
    ['Warehouse Robbery',5,3,1,NY,5],
    ['Auto Theft',7,4,1,NY,8],
    ['Beat Up Rival Gangster',2,5,1,NY,2],
    ['Rob a Pimp',3,8,1,NY,3],
    ['Collect on a Loan',2,37,1,NY,2],
    ['Collect Protection Money',2,6,2,NY,2],
    ['Rough Up Dealers',2,7,2,NY,2],
    ['Take Out a Rogue Cop',3,9,2,NY,3],
    ['Perform a Hit',3,10,2,NY,3],
    ['Bank Heist',10,11,2,NY,15],
    ['Jewelry Store Job',15,12,2,NY,20],
    ['Hijack a Semi',8,38,2,NY,9],
    ['Destroy Enemy Mob Hideout',5,13,3,NY,5],
    ['Kill a Protected Snitch',5,14,3,NY,5],
    ['Bust a Made Man Out of Prison',5,15,3,NY,5],
    ['Museum Break-in',18,16,3,NY,22],
    ['Fight a Haitian Gang',6,17,3,NY,6],
    ['Clip the Irish Mob\'s Local Enforcer',10,39,3,NY,11],
    ['Steal a Tanker Truck',8,40,3,NY,9],
    ['Federal Reserve Raid',25,18,4,NY,30],
    ['Smuggle Across the Border',7,19,4,NY,8],
    ['Liquor Smuggling',30,22,4,NY,35],
    ['Run Illegal Poker Game',20,26,4,NY,35],
    ['Wiretap the Cops',30,28,4,NY,45],
    ['Rob an Electronics Store',24,41,4,NY,26],
    ['Burn Down a Tenement',18,42,4,NY,22],
    ['Distill Some Liquor',10,23,4,NY,12],
    ['Manufacture Tokens',10,24,4,NY,12],
    ['Get Cheating Deck',10,25,4,NY,12],
    ['Overtake Phone Central',10,27,4,NY,12],
    ['Repel the Yakuza',13,29,5,NY,18],
    ['Disrupt Rival Smuggling Ring',15,30,5,NY,20],
    ['Invade Tong-controlled Neighborhood',25,31,5,NY,30],
    ['Sell Guns to the Russian Mob',25,32,5,NY,35],
    ['Protect your City against a Rival Family',35,33,5,NY,50],
    ['Assassinate a Political Figure',35,34,5,NY,50],
    ['Exterminate a Rival Family',40,35,5,NY,56],
    ['Obtain Compromising Photos',28,43,5,NY,32],
    ['Frame a Rival Capo',26,44,5,NY,33],
    ['Steal an Air Freight Delivery',32,45,6,NY,36],
    ['Run a Biker Gang Out of Town',35,46,6,NY,40],
    ['Flip a Snitch',25,47,6,NY,30],
    ['Steal Bank Records',30,48,6,NY,36],
    ['Loot the Police Impound Lot',60,49,6,NY,60],
    ['Recruit a Rival Crew Member',30,50,6,NY,39],
    ['Dodge an FBI Tail',20,51,6,NY,27],
    ['Whack a Rival Crew Leader',28,52,6,NY,38],
    ['Influence a Harbor Official',50,53,7,NY,65],
    ['Move Stolen Merchandise',36,54,7,NY,50],
    ['Snuff a Rat',44,55,7,NY,62],
    ['Help a Fugitive Flee the Country',40,56,7,NY,57],
    ['Dispose of a Body',25,57,7,NY,36],
    ['Ransom a Businessman\'s Kids',60,58,7,NY,70],
    ['Fix the Big Game',50,59,7,NY,60],
    ['Steal an Arms Shipment',45,60,7,NY,66],
    ['Extort a Corrupt Judge',24,61,8,NY,36],
    ['Embezzle Funds Through a Phony Company',50,62,8,NY,70],
    ['Break Into the Armory',50,63,8,NY,60],
    ['Rip Off the Armenian Mob',50,64,8,NY,68],
    ['Muscle in on a Triad Operation',45,65,8,NY,68],
    ['Ambush a Rival at a Sit Down',55,66,8,NY,80],
    ['Order a Hit on a Public Official',35,67,8,NY,55],
    ['Take Over an Identity Theft Ring',36,68,8,NY,52],
    ['Settle a Beef... Permanently',40,69,9,NY,64],
    ['Buy Off a Federal Agent',35,70,9,NY,50],
    ['Make a Deal with the Mexican Cartel',40,71,9,NY,60],
    ['Blackmail the District Attorney',44,72,9,NY,66],
    ['Shake Down a City Council Member',85,73,9,NY,124],
    ['Make Arrangements for a Visiting Don',40,74,9,NY,60],
    ['Take Control of a Casino',70,75,9,NY,110],
    ['Travel to the Old Country',52,76,9,NY,82],
    ['Rob Your Cab Driver',12,1,1,CUBA,16],
    ['Secure A Safehouse',36,2,1,CUBA,49],
    ['Intimidate The Locals',52,3,1,CUBA,70],
    ['Silence a Noisy Neighbor',32,4,1,CUBA,44],
    ['Smuggle In Some Supplies',34,5,1,CUBA,45],
    ['Set Up A Numbers Racket',44,6,1,CUBA,60],
    ['Establish Contact With The FRG',38,7,1,CUBA,50],
    ['Take Out The Local Police Chief',41,8,1,CUBA,55],
    ['"Persuade" A Local To Talk',51,41,1,CUBA,69],
    ['Assault A Snitch\'s Hideout',56,42,1,CUBA,75],
    ['Transport A Shipment of US Arms',42,9,2,CUBA,62],
    ['Meet With The FRG Leadership',38,10,2,CUBA,54],
    ['Hold Up A Tour Bus',45,11,2,CUBA,65],
    ['Ambush A Military Patrol',51,12,2,CUBA,72],
    ['Capture An Army Outpost',56,13,2,CUBA,79],
    ['Sneak A Friend Of The Family Into The Country',35,14,2,CUBA,50],
    ['Ransack A Local Plantation',43,15,2,CUBA,61],
    ['Burn Down A Hacienda',58,16,2,CUBA,82],
    ['Offer "Protection" To A Nightclub',38,17,3,CUBA,56],
    ['Rob The Banco Nacional Branch',52,18,3,CUBA,77],
    ['Shake Down A Hotel Owner',40,19,3,CUBA,58],
    ['Bring The Local Teamsters Under Your Control',46,20,3,CUBA,68],
    ['Help The FRG Steal A Truckload Of Weapons',51,21,3,CUBA,74],
    ['Hijack A Booze Shipment',45,22,3,CUBA,67],
    ['Pillage A Shipyard',52,23,3,CUBA,75],
    ['Take Over The Docks',60,24,3,CUBA,88],
    ['Muscle In On A Local Casino',44,25,4,CUBA,67],
    ['Establish A Loansharking Business',49,26,4,CUBA,74],
    ['Eliminate A Rival Family\'s Agent',42,27,4,CUBA,64],
    ['Pass On Some Intel To The FRG',45,28,4,CUBA,67],
    ['Execute A Regional Arms Dealer',50,29,4,CUBA,76],
    ['Sink A Competing Smuggler\'s Ship',52,30,4,CUBA,78],
    ['Gun Down An Enemy Crew At The Airport',56,31,4,CUBA,85],
    ['Assassinate An Opposing Consigliere',62,32,4,CUBA,93],
    ['Raid The Arms Depot',53,33,5,CUBA,81],
    ['Supply The FRG With Some Extra Muscle',46,34,5,CUBA,70],
    ['Capture The Airport',56,35,5,CUBA,85],
    ['Knock Off A Visiting Head Of State',52,36,5,CUBA,79],
    ['Set Up A High Volume Smuggling Operation',55,37,5,CUBA,85],
    ['Blow Up A Rail Line',50,38,5,CUBA,77],
    ['Attack The Army Command Post',58,39,5,CUBA,88],
    ['Storm The Presidential Palace',70,40,5,CUBA,106],
    ['Arrange A New York Drug Shipment',62,43,6,CUBA,95],
    ['Launder Money Through A Resort',72,44,6,CUBA,110],
    ['Loot The National Museum',78,45,6,CUBA,117],
    ['Send Some Help Home To New York',64,46,6,CUBA,98],
    ['Take Over The Havana Reconstruction',82,47,6,CUBA,123],
    ['Help Get An Associate A No Bid Contract',56,48,6,CUBA,85],
    ['Trans-Ship A Container Full of Refugees',48,49,6,CUBA,73],
    ['Meet With "The Russian"',58,50,6,CUBA,89],
    ['Smuggle Consumer Electronics for the Vory',46,1,1,MOSCOW,61],
    ['Arrange A Drug Shipment for the Mafiya',40,2,1,MOSCOW,53],
    ['Fight Off An Ultra-National Gang',112,3,1,MOSCOW,115],
    ['Kidnap A Local Gang Leader for the Vory',47,4,1,MOSCOW,63],
    ['Collect The Ransom',50,5,1,MOSCOW,64],
    ['Receive Vory Intel On Dmitri',40,6,1,MOSCOW,54],
    ['Kill A Local Gang Leader for the Mafiya',47,7,1,MOSCOW,63],
    ['Collect the Hit Payoff',56,8,1,MOSCOW,76],
    ['Buy Mafiya Intel On Dmitri',52,9,1,MOSCOW,74],
    ['Threaten A Gang\'s Supplier',58,10,1,MOSCOW,79],
    ['Hijack An Arms Shipment From A Militant Gang',67,11,1,MOSCOW,90],
    ['Hospitalize Some Nationalists',76,12,1,MOSCOW,104],
    ['Confront Gang Leader Dmitri Leonov',76,13,1,MOSCOW,104],
    ['Bribe An Election Official',57,14,2,MOSCOW,81],
    ['Silence A Political Critic',53,15,2,MOSCOW,77],
    ['Violently Break Up A Campaign Rally',137,16,2,MOSCOW,148],
    ['Fix A Local Election for the Vory',66,17,2,MOSCOW,96],
    ['Extract A Favor From The Winner',97,18,2,MOSCOW,134],
    ['Catch Karpov Accepting A Bribe',77,19,2,MOSCOW,110],
    ['Abduct A Candidate\'s Wife For the Mafiya',66,20,2,MOSCOW,96],
    ['"Convince" The Candidate To Withdraw',90,21,2,MOSCOW,126],
    ['Kill An Investigative Reporter',75,22,2,MOSCOW,107],
    ['Pay Off The Port Authority In Arkhangelsk',57,23,2,MOSCOW,81],
    ['Re-route An Equipment Shipment',80,24,2,MOSCOW,111],
    ['Circulate Damaging Photos',99,25,2,MOSCOW,144],
    ['Take Down Party Boss Karpov',76,26,2,MOSCOW,109]
  );

  var missionTabs = [];
  missionTabs[NY] = new Array(
    'Street Thug (Levels 1-4)',
    'Associate (Levels 5-8)',
    'Soldier (Levels 9-12)',
    'Enforcer (Levels 13-17)',
    'Hitman (Levels 18-24)',
    'Capo (Levels 25-34)',
    'Consigliere (Levels 35-59)',
    'Underboss (Levels 60-99)',
    'Boss (Levels 100+)'
  );
  missionTabs[CUBA] = new Array(
    'El Soldado (Levels 35-59)',
    'El Capitan (Levels 60-84)',
    'El Jefe (Levels 85-109)',
    'El Patron (Levels 110-129)',
    'El Padrino (Levels 130-150)',
    'El Cacique (Levels 151+)'
  );
  missionTabs[MOSCOW] = new Array(
    'Baklany',
    'Boets'
  );

  var requirementJob = new Array(
    ['Liquor', 'Distill Some Liquor'],
    ['Tokens', 'Manufacture Tokens'],
    ['Wiretap Device', 'Overtake Phone Central'],
    ['1 Wiretap Device', 'Overtake Phone Central'],
    ['Cards', 'Get Cheating Deck'],
    ['Untraceable Cell Phone', 'Rob an Electronics Store'],
    ['Concealable Camera', 'Rob an Electronics Store'],
    ['Computer Set-Up', 'Rob an Electronics Store'],
    ['Blackmail Photos', 'Obtain Compromising Photos'],
    ['Illegal Transaction Records', 'Steal Bank Records'],
    ['.22 Pistol', 'Beat Up Rival Gangster'],
    ['Revolver', 'Beat Up Rival Gangster'],
    ['9mm Semi-Automatic', 'Rob a Pimp'],
    ['Butterfly Knife', 'Collect Protection Money'],
    ['Brass Knuckles', 'Rough Up Dealers'],
    ['Tactical Shotgun', 'Perform a Hit'],
    ['.45 Revolver', 'Take Out a Rogue Cop'],
    ['C4', 'Destroy Enemy Mob Hideout'],
    ['Stab-Proof Vest', 'Kill a Protected Snitch'],
    ['Automatic Rifle', 'Bust a Made Man Out of Prison'],
    ['Lucky Shamrock Medallion', 'Clip the Irish Mob\'s Local Enforcer'],
    ['Semi-Automatic Shotgun', 'Fight a Haitian Gang'],
    ['Firebomb', 'Steal a Tanker Truck'],
    ['Armored Truck', 'Smuggle Across the Border'],
    ['Grenade Launcher', 'Repel the Yakuza'],
    ['.50 Caliber Rifle', 'Disrupt Rival Smuggling Ring'],
    ['Armored Car', 'Invade Tong-controlled Neighborhood'],
    ['RPG Launcher', 'Sell Guns to the Russian Mob'],
    ['Bodyguards', 'Protect your City against a Rival Family'],
    ['Night Vision Goggles', 'Assassinate a Political Figure'],
    ['Napalm', 'Exterminate a Rival Family'],
    ['Prop plane', 'Steal an Air Freight Delivery'],
    ['Chopper', 'Run a Biker Gang Out of Town'],
    ['Luxury Yacht', 'Influence a Harbor Official'],
    ['GX9', 'Ransom a Businessman\'s Kids'],
    ['Bookie\'s Holdout Pistol', 'Fix the Big Game'],
    ['Multi-Purpose Truck', 'Break Into the Armory'],
    ['BA-12 Assault Rifle', 'Rip Off the Armenian Mob'],
    ['Falsified Documents', 'Take Over an Identity Theft Ring'],
    ['Federal Agent', 'Buy Off a Federal Agent'],
    ['Private Jet', 'Make a Deal with the Mexican Cartel'],
    ['Police Cruiser', 'Blackmail the District Attorney'],
    ['Armoured Limousine', 'Shake Down a City Council Member'],
    ['Cigarette Boat', 'Take Over The Docks'],
    ['TNT', 'Raid The Arms Depot'],
    ['Si-14 Cargo Plane', 'Capture The Airport'],
    ['Armored State Car', 'Storm The Presidential Palace'],
    ['Dossier on Dmitri', 'Receive Vory Intel On Dmitri'],
    ['Dossier on Dmitri', 'Buy Mafiya Intel On Dmitri'],
    ['Ballistic Knife', 'Silence A Political Critic'],
    ['Severnyy Olen Snowbike', 'Extract A Favor From The Winner'],
    ['Set of Photos of Karpov', 'Kill An Investigative Reporter'],
    ['Set of Photos of Karpov', 'Catch Karpov Accepting A Bribe'],
    ['RAS-15', '"Convince" The Candidate To Withdraw']
  );

  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
  String.prototype.ltrim = function() {
    return this.replace(/^\s+/, '');
  }
  String.prototype.rtrim = function() {
    return this.replace(/\s+$/, '');
  }
  String.prototype.untag = function() {
    return this.replace(/<[^>]*>/g, '');
  }

  Array.prototype.searchArray = function(target, index) {
    // To use this method, "this" must be an array of arrays. Each array
    // contained in "this" has one of its elements (specified by the
    // "index" parameter) compared against the target parameter. An array
    // is returned that contains the indices of "this" in which a match
    // was found.
    //
    // NOTE: "target" can be a regular expression. If the array element
    //       is a string, it is compared for a pattern match.
    var returnArray = [];
    for (var i = 0, iLength = this.length; i<iLength; ++i) {
      if (typeof(target) == 'function' &&
          typeof(this[i][index]) == 'string') {
        // Assume target is a regex to be matched against the string.
        if (target.test(this[i][index])) {
          returnArray.push(i);
        }
      } else if (this[i][index] === target) {
        returnArray.push(i);
      }
    }
    return returnArray.length? returnArray : false;
  }

  // Array.unique() - Remove duplicate values
  Array.prototype.unique = function() {
    var a = [];
    var l = this.length;
    for (var i=0; i < l; ++i) {
      for (var j = i + 1; j < l; ++j) {
        // If this[i] is found later in the array
        if (this[i] === this[j])
          j = ++i;
      }
      a.push(this[i]);
    }
    return a;
  };

  // Set the initial run state.
  if (typeof GM_getValue('isRunning') != 'boolean') {
    // FIXME: Perhaps it should be false, and instead pop up an alert
    //        asking the user to check the settings?
    GM_setValue('isRunning', true);
  }
  running = GM_getValue('isRunning');

  // Check for a version change.
  if (GM_getValue('version') != SCRIPT.version ||
      GM_getValue('build') != SCRIPT.build) {
    handleVersionChange();
  }

  // Check for missing settings.
  if (GM_getValue('autoClick') == undefined) {
    saveDefaultSettings();
    addToLog('info Icon', 'If you want to perform jobs, fighting, and other actions 

automatically, please adjust your settings.');
  }

  var Reload = new Animate();
  Reload.desc = 'reload';
  var Autoplay = new Animate();
  Autoplay.desc = 'auto-play';
  Autoplay.fx = loadHome;

  // This line is optional, but it makes the menu display faster.
  customizeMasthead();

  // Add event listeners.
  setListenContent(true);
  setListenFBNotifications(true);
  setListenAutoSkip(true);

  // Make sure the modification timer goes off at least once.
  setModificationTimer();

  var initialized = true;
  DEBUG('Completed initialize.');
}

function Animate() {
  this.TOUT = null;
  this.desc = '';
  this.fx = null;
  this.delay = null;
}

Animate.prototype.clearTimeout = function() {
  if (this.TOUT) {
    DEBUG('Clearing ' + this.desc + ' timer ' + this.TOUT + '.');
    clearTimeout(this.TOUT);
    this.TOUT = null;
  }
}

Animate.prototype.setTimeout = function(fx, delay) {
  this.clearTimeout();
  this.fx = fx;
  this.delay = delay;
  // Make the handler clear TOUT. This prevents attempts
  // to clear timers that have already gone off.
  var obj = this;
  this.TOUT = window.setTimeout(function () { obj.TOUT = null; fx(); }, delay);
  DEBUG('Started ' + this.desc + ' timer ' + this.TOUT +
        ', delay=' + delay/1000 + ' sec.');
}

Animate.prototype.start = function() {
  if (running && settingsOpen === false) {
    this.setTimeout(this.fx, this.delay);
  } else if (settingsOpen === true) {
    DEBUG('Settings box open. Not starting ' + this.desc + ' timer.');
  } else {
    DEBUG('Autoplayer paused. Not starting ' + this.desc + ' timer.');
  }
}

if (!refreshGlobalStats()) {
  // Handle "try again" error pages.
  var tryAgainElt = document.getElementById('try_again_button');
  if (tryAgainElt) {
    var delay = 10;
    var p = document.createElement('p');
    var wait = function() {
      if (!delay) return tryAgainElt.click();
      p.innerHTML = 'You will automatically try again in ' +
                    delay-- + ' seconds.';
      window.setTimeout(wait, 1000);
    }
    DEBUG('Service interruption: "Try Again" button seen.');
    tryAgainElt.parentNode.appendChild(document.createElement('br'));
    tryAgainElt.parentNode.appendChild(p);
    wait();
    return;
  }

  // Start a timer to reload the page if nothing else happens.
  Autoplay.fx = function() {
    // Unrecognized page.
    if (!document.body) {
      DEBUG('No body. Possible redirect, white out or slow load?');
    } else {
      DEBUG('Can\'t read page. Possible white out?');
    }
    loadHome();
  }
  Autoplay.delay = 10000;
  Autoplay.start();

  // Stop the script. (The timer will still go off and reload.)
  return;
}

// Set up auto-reload (if enabled).
autoReload();

checkLanguage();

refreshSettings();

if (GM_getValue('logOpen') == 'open') {
  showMafiaLogBox();
}
return;
///////////////////////////////////////////////////////////////////////////////
//   End of top-level code. Automatic play is kicked off by doAutoPlay().    //
///////////////////////////////////////////////////////////////////////////////


function doAutoPlay () {
  // Set the default auto-play timer function and delay.
  Autoplay.fx = goHome;
  Autoplay.delay = getAutoPlayDelay();

  var propertyDamage = GM_getValue('propertyDamage', PROP_OK);
  var previouslyIdle = idle;
  idle = false;

  // Auto-heal
  if (running &&
      GM_getValue('autoHeal') == 'checked' &&
      health < GM_getValue('healthLevel', 0) &&
      (health > 19 || autoStamBurnif ||
       GM_getValue('hideInHospital') != 'checked')) {
    autoHeal();
    return;
  }

  // Determine whether a job and/or fight/rob could be attempted.
  var autoMissionif = running && canMission();
  var autoStaminaSpendif = running && !skipStaminaSpend && canSpendStamina();
  var maxed = (autoMissionif && energy >= maxEnergy) ||
              (autoStaminaSpendif && stamina >= maxStamina);

  // Auto-accept
  if (running && !maxed && invites > 0 &&
      GM_getValue('acceptMafiaInvitations') == 'checked') {
    if (autoAccept()) return;
  }

  // Auto-repair
  if (running && !maxed &&
      GM_getValue('autoRepair') == 'checked' &&
      propertyDamage == PROP_REPAIR) {
    if (autoRepair()) return;
  }

  // Auto-protect
  if (running && !maxed &&
      GM_getValue('autoProtect') == 'checked' &&
      propertyDamage == PROP_PROTECT) {
    if (autoProtect()) return;
  }

  // Player updates
  if (running && !maxed && GM_getValue('logPlayerUpdates') == 'checked') {
    if (autoPlayerUpdates()) return;
  }

  // Auto-take for properties (NY)
  if (running && !maxed && GM_getValue('collectNYTake') == 'checked' && ((new Date() >= new Date

(GM_getValue('nextNYTake', 0))) || GM_getValue('nextNYTake', 0) == 0)) {
      if (collectNYTake()) return;
  }
  
  // Auto-bank (NY)
  if (running &&
      city == NY &&
      GM_getValue('autoBank') == 'checked' &&
      cash[NY] >= parseInt(GM_getValue('bankConfig'))) {
    if (autoBankDeposit()) return;
  }

  // Auto-sell business output (Cuba).
  if (running && !maxed && level >= 35 &&
      GM_getValue('autoSellCrates') == 'checked' &&
      GM_getValue('sellHour' + cities[CUBA], -1) != new Date().getHours()) {
    if (autoSellCrates(CUBA)) return;
  }
  
  // Auto-bank (Cuba)
  if (running &&
      city == CUBA &&
      GM_getValue('autoBankCuba') == 'checked' &&
      cash[CUBA] >= parseInt(GM_getValue('bankConfigCuba'))) {
    if (autoBankDeposit()) return;
  }

  // Auto-sell business output (Moscow).
  if (running && !maxed && level >= 70 &&
      GM_getValue('autoSellCratesMoscow') == 'checked' &&
      GM_getValue('sellHour' + cities[MOSCOW], -1) != new Date().getHours()) {
    if (autoSellCrates(MOSCOW)) return;
  }

  // Auto-bank (Moscow)
  if (running &&
      city == MOSCOW &&
      GM_getValue('autoBankMoscow') == 'checked' &&
      cash[MOSCOW] >= parseInt(GM_getValue('bankConfigMoscow'))) {
    if (autoBankDeposit()) return;
  }
  
  // Auto-stat
  if (running && !maxed && stats > 0 && GM_getValue('autoStat') == 'checked' && !parseInt

(GM_getValue('restAutoStat')) ) {
    if (autoStat()) return;
  }

  // Auto-buy properties
  if (running && !maxed && GM_getValue('autoBuy') == 'checked') {
    if (propertyBuy()) return;
  }

  // Auto-lotto
  if (running && !maxed && GM_getValue('autoLottoOpt') == 'checked') {
    if (autoLotto()) return;
  }

  // Auto-energypack
  var ptsFromEnergyPack = maxEnergy * 1.25 * getEnergyGainRate();
  var ptsToLevelProjStaminaUse = ptsToNextLevel - stamina*getStaminaGainRate();
  var autoEnergyPackWaiting = running && energyPack &&
                              ptsFromEnergyPack <= ptsToLevelProjStaminaUse &&
                              GM_getValue('autoEnergyPack') == 'checked';
  if (autoEnergyPackWaiting && energy <= 2) {
    //FIXME: Use click simulation instead of a URL.
    var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226 + SCRIPT.name +
               SCRIPT.controller + 'index' +
               SCRIPT.action + 'use_and_energy_all' +
               SCRIPT.city + (city + 1);
    DEBUG('ptsToNextLevel=' + ptsToNextLevel +
          'ptsToLevelProjStaminaUse=' + ptsToLevelProjStaminaUse);
    addToLog('energyPack Icon', 'This energy pack should give you approximately ' + parseInt

(ptsFromEnergyPack) + ' xp of your ' + parseInt(ptsToLevelProjStaminaUse) + ' projected remaining 

xp.' );
    takeAction(link, 'energypack');
    Autoplay.start();
    return;
  }

  // Do jobs or fight/rob. Give priority to spending stamina if it needs
  // to be burned and using one won't level up. Give priority to jobs if
  // within one stamina of leveling, or if an energy pack is waiting, or
  // if energy is fuller than than stamina (in percentage terms).
  if (autoMissionif &&
      !(autoStaminaSpendif && autoStamBurnif && ptsToNextLevel > 6) &&
      (ptsToNextLevel <= 6 ||
       autoEnergyPackWaiting ||
       energy/maxEnergy >= stamina/maxStamina)) {
    autoMission();
    return;
  }
  if (autoStaminaSpendif) {
    if (autoStaminaSpend()) return;

    // Attempt failed. Let some other action happen before trying again
    skipStaminaSpend = true;    
  }
  if (autoMissionif) {
    autoMission();
    return;
  }

  // Auto-send energy pack
  if (running && GM_getValue('sendEnergyPack') == 'checked') {
    if (autoSendEnergyPack()) return;
  }
  
  // If we reach this point, the script is considered to be idle. Anything the
  // script might do when there is nothing else to do should go below here.
  idle = true;

  // If not previously idle, check the home page.
  if (running && !previouslyIdle) {
    DEBUG('Now idle. Checking the home page.');
    Autoplay.start();
    return;
  }

  // Check for property damage. This way we are not adding any overhead, except
  // on pages that we are not doing anything anyways. All this does is go to
  // the Properties page, which causes the damage to be checked automatically.
  if (running &&
      ((GM_getValue('autoProtect') == 'checked' &&
        propertyDamage < PROP_PROTECT) ||
       (GM_getValue('autoRepair') == 'checked' &&
        propertyDamage < PROP_REPAIR))) {
    // Make sure we're in New York.
    if (city != NY) {
      Autoplay.fx = goNY;
      Autoplay.start();
      return;
    }

    // Go to the property page.
    if (!onPropertyNav()) {
      Autoplay.fx = goPropertyNav;
      Autoplay.start();
      return;
    }
  }

  // If fight/rob is being skipped, turn it back on and go to the home page
  if (running && staminaFlag && skipStaminaSpend) {
    skipStaminaSpend = false;
    staminaFlag = false;
    Autoplay.start();
    return;
  }

  // Idle in preferred city (every 10 seconds of idling) if not in the same city
  if (running && idle && city != GM_getValue('idleLocation', NY)) {
    DEBUG('Idling. Moving to ' + cities[GM_getValue('idleLocation', NY)] + '. ');
    goLocation(GM_getValue('idleLocation',NY));
  }
}

function getAutoPlayDelay() {
  return Math.floor(parseFloat(GM_getValue('d1', '3')) + parseFloat((GM_getValue('d2', '5'))-

parseFloat(GM_getValue('d1', '3')))*Math.random())*1000;
}

function autoReload() {
  if (GM_getValue('autoClick') == 'checked') {
    Reload.fx    = function() {
      // Try the "nice" way first, but reload completely if that doesn't work.
      goHome();
      Reload.fx = loadHome;
      Reload.delay = 10000;
      Reload.start();
    };
    Reload.delay = Math.floor(parseFloat(GM_getValue('r1', '30')) +
                   parseFloat((GM_getValue('r2', '110')) -
                   parseFloat(GM_getValue('r1', '30')))*Math.random())*1000;
    Reload.start();
  }
}

function autoRepair() {
  Autoplay.delay = getAutoPlayDelay();

  // Make sure we're in New York.
  if (city != NY) {
    Autoplay.fx = goNY;
    Autoplay.start();
    return true;
  }

  // Make sure we've got enough cash outside the bank.
  var cost = parseCash(GM_getValue('propertyDamageCost', 0));
  if (cost > cash[city]) {
    return autoBankWithdraw(cost - cash[city]);
  }

  if (!useClickSimulation) {
    var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
               SCRIPT.controller + 'property' +
               SCRIPT.action + 'repair_all' +
               SCRIPT.city + (city + 1);
    takeAction(link, 'repair', { cost: cost });
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }

  // Make sure we're on the property page.
  if (!onPropertyNav()) {
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }

  // Repair the property.
  var elt = xpathFirst('.//a[contains(@onclick, "repair_all")]', innerPageElt);
  if (!elt) {
    addToLog('warning Icon', 'BUG DETECTED: Can\'t find repair link.');
    return false;
  }
  Autoplay.fx = function() {
    clickAction = 'repair';
    clickContext = { cost : cost };
    clickElement(elt);
  };
  Autoplay.start();
  return true;
}

function autoProtect() {
  Autoplay.delay = getAutoPlayDelay();

  // Make sure we're in New York.
  if (city != NY) {
    Autoplay.fx = goNY;
    Autoplay.start();
    return true;
  }

  // Make sure we've got enough cash outside the bank.
  var cost = parseCash(GM_getValue('propertyDamageCost', 0));
  if (cost > cash[city]) {
    return autoBankWithdraw(cost - cash[city]);
  }

  if (!useClickSimulation) {
    var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
               SCRIPT.controller + 'property' +
               SCRIPT.action + 'protect_all' +
               SCRIPT.city + (city + 1);
    takeAction(link, 'protect', { cost: cost });
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }

  // Make sure we're on the property page.
  if (!onPropertyNav()) {
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }

  // Protect the property.
  var elt = xpathFirst('.//a[contains(@onclick, "protect_all")]', innerPageElt);
  if (!elt) {
    addToLog('warning Icon', 'BUG DETECTED: Can\'t find protection link.');
    return false;
  }
  Autoplay.fx = function() {
    clickAction = 'protect';
    clickContext = { cost : cost };
    clickElement(elt);
  };
  Autoplay.start();
  return true;
}

function autoAccept() {
  if (!useClickSimulation) {
    loadAccept();
    return true;
  }

  // Make sure we're on the recruiting page.
  var elt = xpathFirst('.//li[contains(@class, "tab_on")]//a[contains(@onclick, 

"controller=recruit")]', innerPageElt);
  if (!elt) {
    elt = xpathFirst('//div[@class="mafia_link"]//a[contains(@onclick, "controller=recruit")]');
    if (!elt) {
      DEBUG('Can\'t find recruit link to click. Using fallback method.');
      loadAccept();
      return true;
    }
    Autoplay.fx = function() {
      clickElement(elt);
      DEBUG('Clicked to go to recruit tab.');
    };
    Autoplay.start();
    return true;
  }

  // Get the "accept all" link.
  elt = xpathFirst('.//a[contains(@onclick, "action=accept") and contains(@onclick, 

"user_id=all")]', innerPageElt);
  if (!elt) {
    DEBUG('Can\'t find accept link to click. Using fallback method.');
    loadAccept();
    return true;
  }

  // Accept all invitations.
  Autoplay.fx = function() {
    clickAction = 'accept';
    clickElement(elt);
    DEBUG('Clicked to accept.');
  };
  Autoplay.start();
  return true;
}

function autoSendEnergyPack() {
  if (!timeLeftGM('energyAllTimeLeft'))
    setGMTime('energyAllTimeLeft','1 hour');
  
  if (timeLeftGM('energyAllTimeLeft')>0)
    return false;
  
  var sendPackButton = xpathFirst('.//div[@class=\'send_all_box\']/a[contains(@onclick, 

"energy_all_prompt_wgt")]', innerPageElt);
  if (sendPackButton) {
    clickElement(sendPackButton);
    actualSendButton = xpathFirst('.//a[contains(@onclick, "energyall")]');
    if (actualSendButton) {
      clickElement(actualSendButton);
      setGMTime('energyAllTimeLeft','1 hour');
      addToLog('info Icon','You have sent energy packs to your Mafia.');
      return true;
    }
    else {
      DEBUG('WARNING: Can\'t find inner button to send mafia energy pack');
      return false;
    }
  }

  return false;
}

function autoHeal() {
  // NOTE: In the interest of time, delays are waived.
  Autoplay.delay = 0;

  // Make sure we're in the preferred city.
  var healLocation = NY;
  if (GM_getValue('healLocationCuba') == 'checked') {
    healLocation = CUBA;
  } else if (GM_getValue('healLocationMoscow') == 'checked') {
    healLocation = MOSCOW;
  }
  if (city != healLocation) {
    Autoplay.fx = function() { goLocation(healLocation); }
    Autoplay.start();
    return;
  }

  if (!useClickSimulation) {
    var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
               SCRIPT.controller + 'hospital' +
               SCRIPT.action + 'heal' +
               SCRIPT.city + (city + 1);
    takeAction(link, 'heal');
    Autoplay.fx = goHome;
    Autoplay.start();
    return;
  }

  // Use our custom instant-heal element (if present).
  var healElt = document.getElementById('ap_heal');
  if (!healElt) {
    DEBUG('WARNING: Can\'t find instant-heal link.');
    healElt = xpathFirst('//a[contains(@onclick, "action=heal")]');
    if (!healElt) {
      // Go to the hospital.
      var hospitalElt = xpathFirst('//a[@class="heal_link"]');
      if (hospitalElt) {
        Autoplay.fx = function() {
          clickElement(hospitalElt);
          DEBUG('Clicked to go to hospital.');
        };
        Autoplay.start();
      } else {
        addToLog('warning Icon', 'WARNING: Can\'t find hospital link.');
      }
      return;
    }
  }

  // Found a heal link. Click it.
  Autoplay.fx = function() {
    clickAction = 'heal';
    clickElement(healElt);
    DEBUG('Clicked to heal.');
  };
  Autoplay.start();

  return;
}

function autoSellCrates(sellCity) {
  // Go to the correct city.
  if (city != sellCity) {
    Autoplay.fx = goLocation(sellCity);
    Autoplay.start();
    return true;
  }

  // Go to the businesses.
  if (!xpathFirst('.//div[@class="business_description"]', innerPageElt)) {
    Autoplay.fx = goBusinessesNav;
    Autoplay.start();
    return true;
  }

  // Sell anything we can.
  elt = xpathFirst('.//a[contains(@onclick, "business=") and contains(@onclick, "action=sell")]', 

innerPageElt);
  if (elt) {
    Autoplay.fx = function() {
      clickAction = 'sell output';
      clickElement(elt);
      DEBUG('Clicked to sell output.');
    };
    Autoplay.start();
    return true;
  }

  // Nothing to sell.
  GM_setValue('sellHour' + cities[sellCity], new Date().getHours());
  DEBUG('All business output in ' + cities[sellCity] + ' sold. Checking again in an hour.');
  return false;
}

function collectNYTake() {
  // Go to the correct city.
  if (city != NY) {
    Autoplay.fx = goNY;
    Autoplay.start();
    return true;
  }

  if (onPropertyNav()) {
    var takeTimer = xpathFirst('.//span[@id="' + SCRIPT.appID + '_prop_eng_timer_span"]', 

innerPageElt);
    if (takeTimer) {
      var prodReadyIn = timeLeft(takeTimer.innerHTML);
      if (prodReadyIn == 0 || prodReadyIn >= 10500) { //If the timer says between 0 or 2:55:00
        var elt = xpathFirst('.//a[contains(@onclick, "collect_cash")]', innerPageElt);
        if (elt) {
          Autoplay.fx = function() { 
            clickAction = 'collect ny take';
            clickElement(elt);
            DEBUG('Collecting NY Take');
            setGMTime("nextNYTake", "3:00:00");
          };
          Autoplay.start();
          return true;
        } else {
          // Nothing to collect.
          setGMTime("nextNYTake", takeTimer.innerHTML);
          var d = new Date();
          d.setMilliseconds(0);
          d.setTime(d.getTime()+(timeLeft(takeTimer.innerHTML)*1000));
          DEBUG('The take has been collected. Coming back at: ' + d);
          return false;
        }
      } else {
        //It's more than 5 minutes after a take being ready, so we'll come back when the next 

take is ready.
        setGMTime("nextNYTake", takeTimer.innerHTML);
        var d = new Date();
        d.setMilliseconds(0);
        d.setTime(d.getTime()+(timeLeft(takeTimer.innerHTML)*1000));
        DEBUG('Take will be available at: ' + d);
        return false;
      }
    } else {
      //Disabling collect NY take
      GM_setValue("collectNYTake", 0);
      DEBUG('Turning off collect NY Take. Player does not have take timer.')
    }
  } else {
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }
}

function autoPlayerUpdates() {
  // Get the updates.
  var pUpdates = xpath('.//div[@class="update_item"]', innerPageElt);
  var pUpdatesLen = pUpdates.snapshotLength;
  var logPlayerUpdatesCount = GM_getValue('logPlayerUpdatesCount');
  if (logPlayerUpdatesCount == undefined) {
    // The settings must have been cleared. Assume all updates were read.
    logPlayerUpdatesCount = pUpdatesLen;
    GM_setValue('logPlayerUpdatesCount', logPlayerUpdatesCount);
  }

  // Are there are less updates than we've already seen?
  // FIXME: This could be better. Need to also detect the case where we are
  //        on the home page with zero updates showing and a non-zero count.
  if (pUpdatesLen > 0 && logPlayerUpdatesCount > pUpdatesLen) {
    // The player updates must have been cleared.
    DEBUG('Player updates were unexpectedly cleared.');
    logPlayerUpdatesCount = 0;
    GM_setValue('logPlayerUpdatesCount', 0);
  }

  // Process new updates.
  if (logPlayerUpdatesCount < pUpdatesLen) {
    DEBUG('Parsing new player updates.');
    for (var i = pUpdatesLen - logPlayerUpdatesCount - 1; i >= 0; i--) {
      if (!parsePlayerUpdates(pUpdates.snapshotItem(i))) return true;
      GM_setValue('logPlayerUpdatesCount', ++logPlayerUpdatesCount);
    }
  }

  // Clear the updates.
  if (pUpdatesLen > GM_getValue('logPlayerUpdatesMax', 20) &&
      logPlayerUpdatesCount == pUpdatesLen) {
    Autoplay.fx = goDeleteNews;
    Autoplay.start();
    return true;
  }

  return false;
}

function autoStat() {
  var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
             SCRIPT.controller + 'stats' +
             SCRIPT.action + 'upgrade' +
             SCRIPT.city + (city + 1); 
              
  // Array containers for status settings
  var curStats = [curAttack,curDefense,maxHealth,maxEnergy,maxStamina,maxInfluence];
  var modeStats = [level,curAttack,curDefense,maxHealth,maxEnergy,maxStamina,maxInfluence];
  var statPts = new Array(curStats.length);
  var statFallbacks = new Array(curStats.length);  

  for (var i = 0, iLength = curStats.length; i < iLength; ++i) {
    // Calculate the Points needed to reach target stat     
    var ratio = new Number(GM_getValue(autoStatRatios[i]));
    var base = new Number(GM_getValue(autoStatBases[i]));
    statPts[i] = ratio * modeStats[GM_getValue(autoStatModes[i])] + base - curStats[i];

    // Account for priority
    statPts[i] = statPts[i] * (Math.pow(10,4) / Math.pow(10, GM_getValue(autoStatPrios[i])));    
    
    // Fallback method
    statFallbacks[i] = GM_getValue(autoStatFallbacks[i]) == 'checked' ? i : '';
  
    //DEBUG(autoStatDescrips[i+1] + ' B/R/M/Cur/P/F/Pts: ' + GM_getValue(autoStatBases[i]) + '/' 

+ GM_getValue(autoStatRatios[i]) + '/' + GM_getValue(autoStatModes[i]) + '/' + curStats[i] + '/' 

+ GM_getValue(autoStatPrios[i]) + '/' + GM_getValue(autoStatFallbacks[i]) + '/' + statPts[i] );
  }
  
  // Get max "Points to Target" stat value, increment the stat with the highest PtsToTarget
  var maxPts = Math.max.apply(Math, statPts);
  
  DEBUG('Max: ' + maxPts + ' Att: ' + statPts[0] + ' Def: ' + statPts[1] +
        ' Hea: ' + statPts[2] + ' Ene: ' + statPts[3] + ' Sta: ' + statPts[4] +
        ' Inf: ' + statPts[5]);
        
  // Disable auto-stat when status goals are reached and autoStatDisable is checked
  if (maxPts <= 0 && GM_getValue('autoStatDisable') == 'checked') {
    addToLog('info Icon', 'All status goals met, please update your goals.');
    GM_setValue('autoStat', 0);
    return false;
  }
  
  // Increment the status corresponding to the nextStat variable (fallback)
  // by setting the corresponding stat as the maxPts
  if (maxPts <= 0) {
    maxPts = 1;
    if (statFallbacks.join('') != '') {            
      DEBUG('Status GOALS reached, using fallback method.');
      var nextStat = parseInt(GM_getValue('nextStat', ATTACK_STAT));
      
      // Search for next Stat to increment
      while (statFallbacks.indexOf(nextStat) == -1)
        nextStat = (nextStat + 1) % curStats.length;

      DEBUG('Next stat in fallback mode: ' + autoStatDescrips[nextStat + 1]);
      statPts[nextStat] = maxPts;
    } else {
      // Do not call autoStat until next level Up
      DEBUG('Status GOALS reached, waiting till next level up.');
      GM_setValue('restAutoStat', 1);
      return false;
    } 
  }
  
  GM_setValue('restAutoStat', 0);
    
  // Add stats to the attribute corresponding to the maxPts
  var statIndex = statPts.indexOf(maxPts);
  switch (statIndex) {
    case ATTACK_STAT    : link += '&upgrade_key=attack';         break;
    case DEFENSE_STAT   : link += '&upgrade_key=defense';        break;
    case HEALTH_STAT    : link += '&upgrade_key=max_health';     break;
    case ENERGY_STAT    : link += '&upgrade_key=max_energy';     break;
    case INFLUENCE_STAT : link += '&upgrade_key=max_influence';  break;    
    case STAMINA_STAT   : if (stats < 2) {                            
                            GM_setValue('restAutoStat', 1);
                            DEBUG ('Not enough status points, waiting till next level up.');
                            return false;
                          }
                          link += '&upgrade_key=max_stamina';    break;
    default             : 
      // Disable auto-stats when maxPts calculated is NaN
      GM_setValue('autoStat', 0);
      addToLog('warning Icon', 'BUG DETECTED: Invalid calculated maxPts value "' + maxPts + '". 

Auto-stat disabled.');
      return false;
  }
  DEBUG('Stats available.');

  takeAction(link, 'stats');
  Autoplay.start();
  return true;
}

function canMission() {
  if (GM_getValue('autoMission') != 'checked') return false;
  if (GM_getValue('multipleJobs') == 'checked' &&
      getSavedList('jobsToDo').length == 0) {
    var availableJobs = eval(GM_getValue("availableJobs", "({0:{},1:{},2:{}})"));
    var expLeft = lvlExp - curExp;
    var ratio = Math.round(expLeft / energy * 100) / 100;
    var multiple_jobs_list = getSavedList('selectMissionMultiple');
    var energyBonus = 1 - (GM_getValue('selectEnergyBonus', 0) / 100);
    var expBonusMultiplier = 1 + (GM_getValue('selectExpBonus', 0) / 100);
    var multiple_jobs_ratio_sorted = [];
    var jobs_selection = [];
    var singleJobLevelUp = [];
    var enoughEnergy = false;

    // mission mastery code 
    var ignore_jobs_list = getSavedList('ignoredJobsList');
    var mastery_jobs_list = getSavedList('masteryJobsList');
    for (var i=0, iLength=mastery_jobs_list.length; i < iLength; ++i) {
      // Filters jobs on the ignorelist
      var job = mastery_jobs_list[i];

      if (ignore_jobs_list.indexOf(job) == -1) {
        // Only push jobs that does not exist on the main list
        if (multiple_jobs_list.indexOf(multiple_jobs_list[i]) == -1) {
          multiple_jobs_list.push(job);
        }
        // Tag job as mastery
        missions[job][9] = true;
      }
    }

    for (var i=0, iLength= multiple_jobs_list.length; i < iLength; ++i) {
      var job = multiple_jobs_list[i];
      var mission = missions[job];

      // Ignore jobs that are not yet available
      if (availableJobs[mission[4]][mission[3]] != null &&
         availableJobs[mission[4]][mission[3]].indexOf(parseInt(job)) == -1) {
        continue;
      }

      // Determine the job's experience-to-energy ratio.
      // FIXME: Should somehow combine with calcEnergyCost()
      var cost = mission[1];
      if (cost > 5) {
        cost = Math.floor(cost * energyBonus);
      }
      var reward = mission[5];
      if (GM_getValue('hasPrivateIsland') == 'checked') {
        reward = Math.round(reward * 1.05);
      }
      reward = Math.floor(reward * expBonusMultiplier);
      var job_ratio = Math.round(reward / cost * 100) / 100;

      mission[6] = reward;
      mission[7] = job_ratio;
      mission[8] = cost;
      multiple_jobs_ratio_sorted.push(job);
      if (mission[8] <= energy) {
        enoughEnergy = true;
        if (mission[6] >= expLeft) {
          singleJobLevelUp.push(job);
        }
      }
    }
    multiple_jobs_ratio_sorted.sort(function(a, b) { return missions[b][7] - missions[a][7]; });
    if (!enoughEnergy) return false;

    var doJob;
    if (singleJobLevelUp.length > 0) {
      // One job is enough to level up. Pick the one that pays the most.
      // FIXME: Might be better to do another job first, then level up.
      singleJobLevelUp.sort(function(a, b) { return missions[b][6] - missions[a][6]; });
      doJob = singleJobLevelUp[0];
    } else {
      // Can't level up. Pick a job we can do whose ratio is high enough.
      for (var i=0; i < multiple_jobs_ratio_sorted.length; i++) {
        if (energy >= missions[multiple_jobs_ratio_sorted[i]][8] &&
            ratio <= missions[multiple_jobs_ratio_sorted[i]][7]) {
          jobs_selection.push(multiple_jobs_ratio_sorted[i]);
        }
      }
      if (jobs_selection.length == 0) {
        // No jobs meet the ratio necessary to level up. Go with the highest.
        doJob = multiple_jobs_ratio_sorted[0];
      } else {
        // Pick the one with the lowest ratio.
        doJob = jobs_selection[jobs_selection.length-1];
      }
    }
    if (GM_getValue('selectMission') != doJob) {
      addToLog('info Icon', 'Switching job to ' + missions[doJob][0] + '.');
      GM_setValue('selectMission', doJob);
    }
  }

  if (energy < calcEnergyCost()) {
    DEBUG('Skipping jobs: energy=' + energy + ', cost=' + calcEnergyCost());
    return false;
  }
  if (energy < maxEnergy && GM_getValue('waitForFull') == 'checked') {
    DEBUG('Skipping jobs: energy=' + energy + '/' + maxEnergy + ', waiting');
    return false;
  }
  return true;
}

function autoMission() {
  var jobno       = missions[GM_getValue('selectMission', 1)][2];
  var tabno       = missions[GM_getValue('selectMission', 1)][3];
  var cityno      = missions[GM_getValue('selectMission', 1)][4];

  // Go to the correct city.
  if (city != cityno) {
    Autoplay.fx = function() { goLocation(cityno); };
    Autoplay.start();
    return;
  }

  // Go to the correct job tab.
  if (!onJobTab(tabno)) {
    Autoplay.fx = function() { goJobTab(tabno); };
    Autoplay.start();
    return;
  }

  // Do the job.
  if (useClickSimulation) {
    Autoplay.fx = function() { goJob(jobno); };
    Autoplay.start();
  } else {
    var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
               SCRIPT.controller + 'job' +
               SCRIPT.action + 'dojob' +
               SCRIPT.city + (city + 1) +
               '&job=' + jobno +
               '&tab=' + tabno;
    takeAction(link, 'job');
  }
}

function currentJobTab() {
  var elt = xpathFirst('.//ul[contains(@id, "' + SCRIPT.appID + '_jobs_bar")]/li[contains(@class, 

"tab_on")]//a', innerPageElt);
  if (!elt || !elt.getAttribute('onclick').match(/tab=(\d+)/)) {
    return -1;
  }
  return parseInt(RegExp.$1);
}

function onJobTab(tabno) {
  return currentJobTab() == tabno? true : false;
}

function canSpendStamina(minHealth) {
  if (!stamina) return false;
  if (GM_getValue('staminaSpend') != 'checked') return false;

  if (!minHealth) {
    var how = GM_getValue('staminaSpendHow');
    if (how == STAMINA_HOW_ROB_RANDOM) {
        // Up to 35 damage could be received in a failed rob attempt.
        minHealth = 36;
    } else if (how == STAMINA_HOW_ROB_LIST) {
        // Only up to 15 damage can be received in a successful rob attempt.
        // You didn't add someone that is too strong to your list, did you?
        minHealth = 20;
    } else {
        // Up to 28 damage can be received in a fight.
        minHealth = 29;
    }
  }
  if (health < minHealth) {
    DEBUG('Not spending stamina: health=' + health + ', minimum=' + minHealth);
    return false;
  }

  if (stamina <= staminaFloor && !autoStamBurnif) {
    DEBUG('Not spending stamina: stamina=' + stamina +
          ', floor=' + staminaFloor + ', burn=' + autoStamBurnif);
    return false;
  }

  if (stamina < staminaCeiling && !autoStamBurnif &&
      !GM_getValue('useStaminaStarted')) {
    DEBUG('Rebuilding stamina: stamina=' + stamina +
          ', ceiling=' + staminaCeiling + ', burn=' + autoStamBurnif);
    return false;
  }

  return true;
}

function autoFight(how) {
  // Go to the correct city.
  var loc = GM_getValue('fightLocation', NY);
  if (city != loc) {
    Autoplay.fx = function() { goLocation(loc); };
    Autoplay.delay = getAutoPlayDelay();
    Autoplay.start();
    return true;
  }

  // Get an opponent.
  var id;
  if (how == STAMINA_HOW_FIGHT_LIST) {
    id = parseInt(GM_getValue('fightList', ''));
    if (!id) {
      // The user-specified list is empty or invalid.
      addToLog('warning Icon', 'Can\'t fight because the list of opponents is empty or invalid. 

Turning automatic fighting off.');
      GM_setValue('staminaSpend', 0);
      return false;
    }
  } else {
    // Check for any new opponents.
    id = findFightOpponent(innerPageElt);

    // For stealth mode fights, if we don't have a new opponent then
    // choose one of the inactive opponents we've already fought.
    if ((!id || id == -1) && GM_getValue('fightStealth') == 'checked') {
      var opponentList = getSavedList('fightListInactive');
      if (opponentList.length) {
        id = opponentList[Math.floor(Math.random() * opponentList.length)];
      }
    }

    if (id == -1) {
      DEBUG('No opponents even after seeing the fight list.');
      return false;
    }

    if (!id) {
      // Go to the fight list to find opponents.
      addToLog('process Icon', 'No opponents. Going to fight list.');
      //FIXME: Temporary fix. Should be using goFightNav instead.
      Autoplay.fx = loadFightNav;
      Autoplay.start();
      return true;
    }
  }
  if (!id) return false;

  // Attack!
  // NOTE: This line isn't needed if using click simulation.
  getDisplayedOpponents.opponents = undefined;
  var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
             SCRIPT.controller + 'fight' +
             SCRIPT.action + 'attack' +
             SCRIPT.city + (city + 1) +
             '&tmp=' + fightTmp +
             SCRIPT.opponent + id;
  takeAction(link, 'fight', { id: String(id) });

  return true;
}

function autoRob(how) {
  if (city != NY) {
    // Robbing is only supported in New York.
    Autoplay.fx = goNY;
    Autoplay.delay = getAutoPlayDelay();
    Autoplay.start();
    return true;
  }

  // Get an opponent.
  var id;
  if (how == STAMINA_HOW_ROB_LIST) {
    id = parseInt(GM_getValue('robList', ''));
    if (!id) {
      // The user-specified list is empty or invalid.
      addToLog('warning Icon', 'Can\'t rob because the list of opponents is empty or invalid. 

Turning automatic robbing off.');
      GM_setValue('staminaSpend', 0);
      return false;
    }
  } else {
    id = findRobOpponent(innerPageElt);
    if (id == -1) {
      addToLog('process Icon', 'No opponents even after seeing the rob list.');
      return false;
    }
    if (!id) {
      // Go to the rob list.
      //addToLog('process Icon', 'No opponents. Going to rob list.');
      Autoplay.fx = goRobTab;
      Autoplay.start();
      return true;
    }
  }
  if (!id) return false;

  // Rob the filthy animal
  DEBUG('Rob the filthy animal ' + id + '.');
  // NOTE: This line isn't needed if using click simulation.
  getDisplayedOpponents.opponents = undefined;
  var link = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226'+ SCRIPT.name +
             SCRIPT.controller + 'robbing' +
             SCRIPT.action + 'attack' +
             SCRIPT.city + (city + 1) +
             '&tmp=' + fightTmp +
             SCRIPT.opponent + id +
             '&property_id=' + parseInt(GM_getValue('propertyId', ''));
  takeAction(link, 'rob', { id: String(id) });
  setRobOpponentRobbed(id);

  return true;
}

function autoHitman() {
  if (!useClickSimulation) {
    addToLog('warning Icon', 'Hitlist bounty collection cannot work because click simulation is 

required. Turning off bounty collection.');
    GM_setValue('staminaSpend', 0);
  } 

  // Go to the correct city.
  var loc = GM_getValue('hitmanLocation', NY);
  if (city != loc) {
    Autoplay.fx = function() { goLocation(loc); };
    Autoplay.start();
    return true;
  }

  // Make sure we're on the hitlist tab.
  if (!onHitlistTab()) {
    Autoplay.fx = goHitlistTab;
    Autoplay.start();
    return true;
  }

  // Get the list of targets.
  var opponents = getHitlist(innerPageElt);
  if (!opponents) return false;

  // Get the targets that are acceptable.
  DEBUG('Applying criteria to displayed targets.');
  var blacklist = getSavedList('hitmanListAvoid').concat(getSavedList('fightListAvoid'));
  var bountyMin = parseCash(GM_getValue('hitmanBountyMin', 0));
  var avoidNames = GM_getValue('hitmanAvoidNames') == 'checked';
  var blacklistCount = 0;
  var bountyCount = 0;
  var namesCount = 0;
  var opponentsQualified = [];
  for (var i = 0, iLength=opponents.length; i < iLength; i++) {
    var opponent = opponents[i];
    if (blacklist.indexOf(opponent.id) != -1) {
      blacklistCount++;
      continue;
    }
    var bounty = parseCash(opponent.bounty);
    if (bounty && bounty < bountyMin) {
      bountyCount++;
      continue;
    }
    if (avoidNames && isFamily(decodeHTMLEntities(opponent.name))) {
      namesCount++;
      continue;
    }
    opponentsQualified.push(opponent);
  }
  DEBUG(bountyCount + ' disqualified on bounty, ' +
        namesCount + ' on name, ' + blacklistCount + ' on blacklist.');

  if (!opponentsQualified.length) return false;

  // Pick a target and attack immediately.
  Autoplay.fx = function() {
    clickAction = 'hitman';
    clickContext = opponentsQualified[0];
    clickElement(clickContext.attack);
    DEBUG('Clicked to hit ' + clickContext.name +
          ' (' + clickContext.id + ').');
  };
  Autoplay.delay = 0;
  Autoplay.start();
  return true;
}

function autoStaminaSpend() {
  if (GM_getValue('staminaSpend') != 'checked') return false;

  if (staminaFloor &&
      GM_getValue('allowStaminaToLevelUp') == 'checked' &&
      GM_getValue('autoStamBurn') !== autoStamBurnif) {
    GM_setValue('autoStamBurn', autoStamBurnif);
    if (autoStamBurnif) {
      addToLog('process Icon', staminaIcon + '<span style="color:#009966; font-weight: 

bold;">Burning through stamina reserve to level up.</span>');
    } else {
      DEBUG('Not within reach of a level up. Stamina burning is off.');
    }
  }
  
  var how = GM_getValue('staminaSpendHow');
  switch (GM_getValue('staminaSpendHow')) {
    case STAMINA_HOW_FIGHT_RANDOM:
    case STAMINA_HOW_FIGHT_LIST:
      return autoFight(how);

    case STAMINA_HOW_ROB_RANDOM:
    case STAMINA_HOW_ROB_LIST:
      return autoRob(how);

    case STAMINA_HOW_HITMAN:
      return autoHitman(how);

    default:
      addToLog('warning Icon', 'BUG DETECTED: Unrecognized stamina setting: ' +
               'staminaSpendHow=' + how);
  }

  return false;
}

function autoBankDeposit(amount) {
  // Make sure we're at the bank.
  var formElt = xpathFirst('.//form[@id="' + SCRIPT.appID + '_bank_deposit"]', innerPageElt);
  if (!formElt) {
    Autoplay.fx = goBank;
    Autoplay.start();
    return true;
  }

  // Set the amount (if provided).
  if (amount) {
    var amountElt = xpathFirst('.//input[@type="text"]', formElt);
    if (!amountElt) {
      addToLog('warning Icon', 'BUG DETECTED: No text input at bank.');
      return false;
    }
    amountElt.value = amount;
  }

  // Make the deposit.
  var submitElt = xpathFirst('.//input[@type="submit"]', formElt);
  if (!submitElt) {
    addToLog('warning Icon', 'BUG DETECTED: No submit input at bank.');
    return false;
  }
  Autoplay.fx = function() {
    clickAction = 'deposit';
    submitElt.click();
    DEBUG('Clicked to deposit.');
  }
  Autoplay.start();
  return true;
}

function autoBankWithdraw(amount) {
  // Make sure we're at the bank.
  var formElt = xpathFirst('.//form[@id="' + SCRIPT.appID + '_bank_withdraw"]', innerPageElt);
  if (!formElt) {
    Autoplay.fx = goBank;
    Autoplay.start();
    return true;
  }

  // Set the amount (if provided).
  if (amount) {
    var amountElt = xpathFirst('.//input[@type="text"]', formElt);
    if (!amountElt) {
      addToLog('warning Icon', 'BUG DETECTED: No text input at bank.');
      return false;
    }
    amountElt.value = amount;
  }

  // Make the withdrawal.
  var submitElt = xpathFirst('.//input[@type="submit"]', formElt);
  if (!submitElt) {
    addToLog('warning Icon', 'BUG DETECTED: No submit input at bank.');
    return false;
  }
  Autoplay.fx = function() {
    clickAction = 'withdraw';
    submitElt.click();
    DEBUG('Clicked to withdraw.');
  }
  Autoplay.start();
  return true;
}

function placeBounty () {
  var depositBox = xpathFirst('.//input[@name="amount"]', innerPageElt);
  depositBox.value = GM_getValue('bountyAmount', 10000);
  var sform = xpathFirst('.//input[@type="submit"]', innerPageElt);
  sform.click();
  placeBountyCheck();
}

function placeBountyCheck () {
  if (xpathFirst('.//td[@class="message_body" and contains(text(), "You just set a")]', 

innerPageElt)) {
    DEBUG('Bounty set successfully.');
  } else {
    DEBUG('Bounty not set.');
  }
}

// Returns a non-empty array of the displayed opponents, or undefined.
function getHitlist(element, forceRefresh) {
  // If the list was already seen, don't read it again.
  if (!forceRefresh && getHitlist.opponents) {
    if (!getHitlist.opponents.length) return;
    return getHitlist.opponents;
  }
  getHitlist.opponents = [];

  // Get each target in the displayed list.
  var rows = $x('.//table[@class="hit_list"]//tr', element);
  for (var i = 0, iLength=rows.length; i < iLength; ++i) {
    // Get the data cells in the row.
    var rowData = rows[i].getElementsByTagName('td');
    if (rowData.length < 5) continue;

    // Get the target's profile and attack links.
    var opponent = {
      attack:  xpathFirst('.//a', rowData[4]),
      payer:   xpathFirst('.//a', rowData[1]),
      profile: xpathFirst('.//a', rowData[0]),
      time:    rowData[3].innerHTML.untag().trim()
    };
    if (!opponent.profile || !opponent.attack) continue;

    // Get the target's id, name, title, and bounty.
    if (opponent.profile.getAttribute('onclick').match(/user=(\w+)/)) {
      opponent.id = RegExp.$1
    }
    opponent.name = opponent.profile.innerHTML;
    if (opponent.profile.previousSibling &&
        opponent.profile.previousSibling.nodeValue.match(/\w+(?: \w+)*/)) {
      opponent.title = RegExp.lastMatch;
    }
    if (rowData[2].innerHTML.match(REGEX_CASH)) {
      opponent.bounty = RegExp.lastMatch;
    }

    getHitlist.opponents.push(opponent);
  }
  DEBUG(getHitlist.opponents.length + ' hitlist target(s) found.');

  if (!getHitlist.opponents.length) return;

  //for (var i = 0; i < getHitlist.opponents.length; i++) {
  //  var opponent = getHitlist.opponents[i];
  //  GM_log('Saw id=' + opponent.id +
  //         ', title=' + opponent.title +
  //         ', name=' + opponent.name +
  //         ', bounty=' + opponent.bounty +
  //         ', time=' + opponent.time);
  //}

  return getHitlist.opponents;
}

// Returns a non-empty array of the displayed opponents, or undefined.
function getDisplayedOpponents(element, forceRefresh) {
  // If the list was already seen, don't read it again.
  if (!forceRefresh && getDisplayedOpponents.opponents) {
    if (!getDisplayedOpponents.opponents.length) return;
    return getDisplayedOpponents.opponents;
  }
  getDisplayedOpponents.opponents = [];
  var fight = !onRobTab();

  // First, look for a traditional fight table (one with real links).
  var links = $x('.//table[@class="main_table fight_table"]//a[contains(@href, "opponent_id") and 

not(contains(@href, "property"))]', element);

  // Get each potential opponent in the displayed list.
  for (var i = 0, iLength=links.length; i < iLength; i++) {
    var linkElt = links[i];
    var opponent = {};
    var row     = linkElt.parentNode.parentNode;
    var rowData = row.getElementsByTagName('td');
    // We need this for robbing to go to the previous tr that contains the
    // name and level. (In the fight list it is all on one line.)
    if (!fight) {
      var nameAndLevel = row.previousSibling;
      while ( nameAndLevel.nodeType != 1 ) {
        nameAndLevel = nameAndLevel.previousSibling;
      }
    } else {
      nameAndLevel = row;
    }

    // Get the opponent's details.
    opponent.id      = parseInt(linkElt.href.split(SCRIPT.opponent)[1]);
    opponent.profile = nameAndLevel.getElementsByTagName('a')[0];
    if (!opponent.id || !opponent.profile) continue;
    opponent.attack  = linkElt;
    opponent.mafia   = rowData[1] ? parseInt(rowData[1].innerHTML) : 0;
    opponent.level   = parseInt(nameAndLevel.innerHTML.split('Level ')[1]);
    opponent.name    = opponent.profile.innerHTML;
    if (opponent.profile.previousSibling &&
        opponent.profile.previousSibling.nodeValue.match(/\w+(?: \w+)*/)) {
      opponent.title = RegExp.lastMatch;
    }
    if (!opponent.level) {
      addToLog('warning Icon', 'BUG DETECTED: Unable to read opponent level.');
      addToLog('warning Icon', 'Row contents: '+ row.innerHTML);
    } else if (!opponent.mafia) {
      addToLog('warning Icon', 'BUG DETECTED: Unable to read opponent mafia.');
      addToLog('warning Icon', 'Row contents: '+ row.innerHTML);
    } else {
      getDisplayedOpponents.opponents.push(opponent);
    }
  }

  if (!getDisplayedOpponents.opponents.length) {
    // No traditional list was found. Look for a newer-style list.

    //var ids = unsafeWindow['a10979261223_fight_list_ids'];
    //GM_log('ids=' + ids);

    // Find level elements.
    var levelElts = $x('.//table[@class="main_table fight_table"]//td/span[contains(@id, "' + 

SCRIPT.appID + '_fight_view_level_")]', element);
    for (var i = 0, iLength=levelElts.length; i < iLength; ++i) {
      var levelElt = levelElts[i];
      if (!levelElt.innerHTML.match(/evel (\d+)/i)) continue;

      // Found an opponent.
      var opponent = {};
      opponent.level = parseInt(RegExp.$1);
      var row = levelElt.id.match(/\d+$/);
      var rowElt = levelElt.parentNode.parentNode;
      opponent.profile = xpathFirst('.//*[@id="' + SCRIPT.appID + '_fight_view_namelink_' + row + 

'"]/a', rowElt);
      if (!opponent.profile) continue;
      opponent.name = opponent.profile.firstChild.innerHTML;
      opponent.title = xpathFirst('.//*[@id="' + SCRIPT.appID + '_fight_view_title_' + row + 

'"]', rowElt).innerHTML;
      opponent.mafia = parseInt(xpathFirst('.//*[@id="' + SCRIPT.appID + '_fight_view_groupsize_' 

+ row + '"]', rowElt).innerHTML);
      opponent.attack = xpathFirst('.//*[@id="' + SCRIPT.appID + '_fight_view_action_' + row + 

'"]/a', rowElt);
      getDisplayedOpponents.opponents.push(opponent);
    }
  }

  if (fight && !getDisplayedOpponents.opponents.length) {
    // Look for a hybrid fight table (mix of links & non-links).
    var links = $x('.//table[@class="main_table fight_table"]//a[contains(@onclick, 

"reg_fight_view_attack")]', element);

    // Get each potential opponent in the displayed list.
    for (var i = 0, iLength=links.length; i < iLength; ++i) {
      var linkElt = links[i];
      var opponent = {};
      var row     = linkElt.parentNode.parentNode;
      var rowData = row.getElementsByTagName('td');
      nameAndLevel = row;

      // Get the opponent's details.
      opponent.profile = nameAndLevel.getElementsByTagName('a')[0];
      if (!opponent.profile) continue;
      opponent.id      = parseInt(opponent.profile.href.split('user=')[1]);
      if (!opponent.id) continue;
      opponent.attack  = linkElt;
      opponent.mafia   = rowData[1] ? parseInt(rowData[1].innerHTML) : 0;
      opponent.level   = parseInt(nameAndLevel.innerHTML.split('Level ')[1]);
      opponent.name    = opponent.profile.innerHTML;
      if (opponent.profile.previousSibling &&
          opponent.profile.previousSibling.nodeValue.match(/\w+(?: \w+)*/)) {
        opponent.title = RegExp.lastMatch;
      }
      if (!opponent.level) {
        addToLog('warning Icon', 'BUG DETECTED: Unable to read opponent level.');
        addToLog('warning Icon', 'Row contents: '+ row.innerHTML);
      } else if (!opponent.mafia) {
        addToLog('warning Icon', 'BUG DETECTED: Unable to read opponent mafia.');
        addToLog('warning Icon', 'Row contents: '+ row.innerHTML);
      } else {
        getDisplayedOpponents.opponents.push(opponent);
      }
    }
  }

  if (!getDisplayedOpponents.opponents.length) return;

  DEBUG(getDisplayedOpponents.opponents.length + ' opponents listed.');
  //for (var i = 0; i < getDisplayedOpponents.opponents.length; ++i) {
  //  var opponent = getDisplayedOpponents.opponents[i];
  //  GM_log('Saw id=' + opponent.id +
  //         ', mafia=' + opponent.mafia +
  //         ', level=' + opponent.level +
  //         ', title=' + opponent.title +
  //         ', name=' + opponent.name);
  //}

  return getDisplayedOpponents.opponents;
}

// Searches the fight table in the subtree of the given element for new
// random targets. Returns a new opponent, or undefined.
function findFightOpponent(element) {
  // Don't bother searching if we still have plenty.
  var newOpponents = getSavedList('fightListNew');
  var len = newOpponents.length;
  if (len >= 50) {
    return newOpponents[Math.floor(Math.random() * len)];
  }

  // Check the fight table.
  var opponents = getDisplayedOpponents(element);
  if (!opponents) {
    // No opponents displayed on this page.
    return newOpponents[Math.floor(Math.random() * len)];
  }

  // Get the user's criteria for opponents.
  var opponentLevelMax = parseInt(GM_getValue('fightLevelMax', 100));
  var opponentMafiaMax = parseInt(GM_getValue('fightMafiaMax', 501));
  var opponentMafiaMin = parseInt(GM_getValue('fightMafiaMin', 1));
  var avoidNames = GM_getValue('fightAvoidNames') == 'checked';

  // Make any relative adjustments (if enabled).
  if (GM_getValue('fightLevelMaxRelative', false)) {
    opponentLevelMax = opponentLevelMax + level;
  }
  if (GM_getValue('fightMafiaMaxRelative', false)) {
    opponentMafiaMax = opponentMafiaMax + mafia;
  }
  if (GM_getValue('fightMafiaMinRelative', false)) {
    opponentMafiaMin = mafia - opponentMafiaMin;
  }
  if (opponentMafiaMin > 501) {
    opponentMafiaMin = 501;
  }

  // Make a blacklist of opponents.
  var avoidList = getSavedList('fightListAvoid');
  DEBUG('new=' + newOpponents.join(', '));
  DEBUG('avoid=' + avoidList.join(', '));
  var blacklist = newOpponents.concat(avoidList);
  if (GM_getValue('fightStealth') == 'checked' || newOpponents.length) {
    var activeList   = getSavedList('fightListActive');
    var inactiveList = getSavedList('fightListInactive');
    blacklist = blacklist.concat(activeList, inactiveList);
    DEBUG('inactive=' + inactiveList.join(', '));
    DEBUG('active=' + activeList.join(', '));
  }

  // Figure out which opponents are acceptable.
  DEBUG('Applying criteria to displayed opponents.');
  var levelMaxCount = 0;
  var mafiaMaxCount = 0;
  var mafiaMinCount = 0;
  var namesCount = 0;
  var blacklistCount = 0;
  for(var i = 0, iLength=opponents.length; i < iLength; ++i) {
    var opponent = opponents[i];
    if (opponent.level > opponentLevelMax) {
      levelMaxCount++;
      continue;
    }
    if (opponent.mafia > opponentMafiaMax) {
      mafiaMaxCount++;
      continue;
    }
    if (opponent.mafia < opponentMafiaMin) {
      mafiaMinCount++;
      continue;
    }
    if (avoidNames && isFamily(decodeHTMLEntities(opponent.name))) {
      namesCount++;
      continue;
    }
    if (!opponent.id) continue;

    // This opponent is acceptable. Save the ID (if new).
    var idString = opponent.id.toString();
    if (blacklist.indexOf(idString) != -1) {
      blacklistCount++;
      continue;
    }
    newOpponents.push(idString);
    DEBUG('Found new fight opponent ' + opponent.name + ' (' + idString + ').');
  }
  DEBUG(levelMaxCount + ' disqualified on max level, ' +
        mafiaMaxCount + ' on max mafia, ' +
        mafiaMinCount + ' on min mafia, ' +
        namesCount + ' on name, ' +
        blacklistCount + ' on blacklist.');

  if (!newOpponents.length) return -1;

  if (newOpponents.length > len) {
    setSavedList('fightListNew', newOpponents);
  }

  return newOpponents[Math.floor(Math.random() * newOpponents.length)];
}

// Searches the rob table in the subtree of the given element for new
// random targets. Returns a new opponent, or undefined.
function findRobOpponent(element) {
  // Don't bother searching if we still have plenty.
  var newOpponents = getSavedList('robListNew');
  var len = newOpponents.length;
  if (len >= 50) {
    return newOpponents[Math.floor(Math.random() * len)];
  }

  // Check the displayed rob list.
  var opponents = getDisplayedOpponents(element);
  if (!onRobTab() || !opponents) {
    // No opponents displayed on this page.
    return newOpponents[Math.floor(Math.random() * len)];
  }

  // Get the user's criteria for opponents.
  var opponentLevelMax = parseInt(GM_getValue('robLevelMax', 100));
  var opponentMafiaMax = parseInt(GM_getValue('robMafiaMax', 501));
  var opponentMafiaMin = parseInt(GM_getValue('robMafiaMin', 1));
  var avoidNames = GM_getValue('robAvoidNames') == 'checked';

  // Make any relative adjustments (if enabled).
  var mafiaForRob = level < mafia? level : mafia;
  if (GM_getValue('robLevelMaxRelative', false)) {
    opponentLevelMax = opponentLevelMax + level;
  }
  if (GM_getValue('robMafiaMaxRelative', false)) {
    opponentMafiaMax = opponentMafiaMax + mafiaForRob;
  }
  if (GM_getValue('robMafiaMinRelative', false)) {
    opponentMafiaMin = mafiaForRob - opponentMafiaMin;
  }
  if (opponentMafiaMin > 501) {
    opponentMafiaMin = 501;
  }

  // Make a blacklist of opponents.
  var avoidList = getSavedList('robListAvoid');
  var robbedList = getSavedList('robListRobbed');
  var blacklist = newOpponents.concat(avoidList, robbedList);
  DEBUG('new=' + newOpponents);
  DEBUG('avoid=' + avoidList);
  DEBUG('robbed=' + robbedList);

  // Figure out which opponents are acceptable.
  DEBUG('Applying criteria to displayed opponents.');
  var levelMaxCount = 0;
  var mafiaMaxCount = 0;
  var mafiaMinCount = 0;
  var namesCount = 0;
  var blacklistCount = 0;
  for(var i = 0, iLength=opponents.length; i < iLength; ++i) {
    var opponent = opponents[i];
    if (opponent.level > opponentLevelMax) {
      levelMaxCount++;
      continue;
    }
    if (opponent.mafia > opponentMafiaMax) {
      mafiaMaxCount++;
      continue;
    }
    if (opponent.mafia < opponentMafiaMin) {
      mafiaMinCount++;
      continue;
    }
    if (avoidNames && isFamily(decodeHTMLEntities(opponent.name))) {
      namesCount++;
      continue;
    }
    if (!opponent.id) continue;

    // This opponent is acceptable. Save the ID (if new).
    var idString = opponent.id.toString();
    if (blacklist.indexOf(idString) != -1) {
      blacklistCount++;
      continue;
    }
    newOpponents.push(idString);
    DEBUG('Found new rob opponent ' + opponent.name + ' (' + idString + ').');
  }
  DEBUG(levelMaxCount + ' disqualified on max level, ' +
        mafiaMaxCount + ' on max mafia, ' +
        mafiaMinCount + ' on min mafia, ' +
        namesCount + ' on name, ' +
        blacklistCount + ' on blacklist.');

  if (!newOpponents.length) return -1;

  if (newOpponents.length > len) {
    setSavedList('robListNew', newOpponents);
  }

  return newOpponents[Math.floor(Math.random() * newOpponents.length)];
}

function setFightOpponentActive(opponent) {
  if (!opponent) return;

  // Add the opponent to the active list.
  DEBUG('Marking opponent ' + opponent + ' active.');
  addSavedListItem('fightListActive', opponent, 10);

  // Remove the opponent from the other fight lists.
  while(removeSavedListItem('fightListInactive', opponent));
  while(removeSavedListItem('fightListNew', opponent));
  while(removeSavedListItem('fightListAvoid', opponent));
}

function setFightOpponentInactive(opponent) {
  if (!opponent) return;

  // Add the opponent to the inactive list.
  DEBUG('Marking opponent ' + opponent + ' inactive.');
  addSavedListItem('fightListInactive', opponent, 10);

  // Remove the opponent from the other fight lists.
  while(removeSavedListItem('fightListActive', opponent));
  while(removeSavedListItem('fightListNew', opponent));
  while(removeSavedListItem('fightListAvoid', opponent));
}

function setRobOpponentRobbed(opponent) {
  if (!opponent) return;

  // Add the opponent to the robbed list.
  DEBUG('Marking rob opponent ' + opponent + ' as robbed.');
  addSavedListItem('robListRobbed', opponent, 10);

  // Remove the opponent from the other rob lists.
  while(removeSavedListItem('robListNew', opponent));
}

function setRobOpponentAvoid(opponent) {
  if (!opponent) return;

  // Add the opponent to the avoid list.
  DEBUG('Marking rob opponent ' + opponent + ' avoid.');
  addSavedListItem('robListAvoid', opponent, 50);

  // Remove the opponent from all other rob lists.
  while(removeSavedListItem('robListNew', opponent));
  // Only remove the first occurence from the user-supplied list.
  removeSavedListItem('robList', opponent);
}

function setHitmanOpponentAvoid(opponent) {
  if (!opponent) return;

  // Add the opponent to the avoid list.
  DEBUG('Marking hitlist opponent ' + opponent + ' avoid.');
  addSavedListItem('hitmanListAvoid', opponent, 100);
}

function setFightOpponentAvoid(opponent) {
  if (!opponent) return;

  // Add the opponent to the avoid list.
  DEBUG('Marking fight opponent ' + opponent + ' avoid.');
  addSavedListItem('fightListAvoid', opponent, 50);

  // Remove the opponent from all other fight lists.
  while(removeSavedListItem('fightListActive', opponent));
  while(removeSavedListItem('fightListInactive', opponent));
  while(removeSavedListItem('fightListNew', opponent));
  // Only remove the first occurence from the user-supplied list.
  removeSavedListItem('fightList', opponent);
}

function toggleSettings() {
  if (settingsOpen === false) {
    // Stop any running timers so the settings box won't disappear.
    Autoplay.clearTimeout();
    Reload.clearTimeout();

    settingsOpen = true;
    createSettingsBox();
    showSettingsBox();
  } else {
    settingsOpen = false;
    //hideSettingsBox();
    destroySettingsBox();

    // Restart the timers.
    Autoplay.delay = 150;
    Autoplay.start();
    autoReload();
  }
}

function toggleStats() {
  if (settingsOpen === true) {
    toggleSettings();
  }
  if (statsOpen === false) {
    statsOpen = true;
    if (!document.getElementById('statsWindow')) {
      createStatWindow();
    }
    showStatsWindow();
    // Stop any running timers so the settings box won't disappear.
    Autoplay.clearTimeout();
    Reload.clearTimeout();
  } else {
    statsOpen = false;
    hideStatsWindow();
    Autoplay.delay = 150;
    Autoplay.start();
    autoReload();
  }
}

function showSettingsBox() {
  var settingsBoxContainer = document.getElementById('GenDialogPopDialog');
  if (settingsBoxContainer) {
    settingsBoxContainer.style.display = 'block';
  }
}

function showMafiaLogBox() {
  if (!document.getElementById('mafiaLogBox')) {
    createLogBox();
  } else {
    var mafiaLogBoxDiv = document.getElementById('mafiaLogBox');
    mafiaLogBoxDiv.style.display = 'block';
  }
  if (!debug && GM_getValue('logOpen') != 'open' &&
      GM_getValue('autoLog') != 'checked') {
    alert('Logging is not enabled. To see new activity here, please open your settings and check 

"Enable logging" in the General tab.');
  }
  GM_setValue('logOpen', 'open');
}

function showStatsWindow() {
  var statsWindowContainer = document.getElementById('sWindowGenDialogPopDialog');
  if (statsWindowContainer) {
    statsWindowContainer.style.display = 'block';
  }
}

function hideSettingsBox() {
  var settingsBoxContainer = document.getElementById('GenDialogPopDialog');
  if (settingsBoxContainer) {
    settingsBoxContainer.style.display = 'none';
  }
}

function destroySettingsBox() {
  var settingsBoxContainer = document.getElementById('GenDialogPopDialog');
  if (settingsBoxContainer) {
    settingsBoxContainer.parentNode.removeChild(settingsBoxContainer);
  }
}

function hideMafiaLogBox() {
  var mafiaLogBoxDiv = document.getElementById('mafiaLogBox');
  mafiaLogBoxDiv.style.display = 'none';
  GM_setValue('logOpen', 'closed');
}

function hideStatsWindow() {
  var statsWindowContainer = document.getElementById('sWindowGenDialogPopDialog');
  if (statsWindowContainer) {
    statsWindowContainer.style.display = 'none';
  }
}

function upgradeFightRobTab() {
  // Get the fight/rob tab settings that need to change.
  var autoFightOn = GM_getValue('autoFight') == 'checked';
  var autoRobOn = GM_getValue('autoRob') == 'checked';
  var useFightList = GM_getValue('rFightList') == 'checked';
  var list = GM_getValue('fightList', '');
  var levelMax = parseInt(GM_getValue('fightLevel', 100));
  var mafiaMax = parseInt(GM_getValue('fightmafiaSize', 501));
  var mafiaMin = parseInt(GM_getValue('fightmafiaMinSize', 1));
  var levelMaxRelative = GM_getValue('fightLevelRelative', 0);
  var mafiaMaxRelative = GM_getValue('fightMafiaRelative', 0);
  var mafiaMinRelative = GM_getValue('fightMafiaMinRelative', 0);
  var avoidNames = GM_getValue('clanMember', 0);
  var removeStronger = GM_getValue('fightRemoveStronger', 'checked');
  var loc = NY;
  if (GM_getValue('fightLocationCUBA') == 'checked') {
    loc = CUBA;
  } else if (GM_getValue('fightLocationMOSCOW') == 'checked') {
    loc = MOSCOW;
  }

  // Spend stamina automatically?
  if (autoFightOn || autoRobOn) {
    GM_setValue('staminaSpend', 'checked');
  }

  // How?
  if (autoRobOn) {
    if (useFightList) {
      GM_setValue('staminaSpendHow', STAMINA_HOW_ROB_LIST);
    } else {
      GM_setValue('staminaSpendHow', STAMINA_HOW_ROB_RANDOM);
    }
  } else {
    if (useFightList) {
      GM_setValue('staminaSpendHow', STAMINA_HOW_FIGHT_LIST);
    } else {
      GM_setValue('staminaSpendHow', STAMINA_HOW_FIGHT_RANDOM);
    }
  }

  // Other settings
  GM_setValue('fightLocation', loc);
  GM_setValue('fightLevelMax', levelMax);
  GM_setValue('fightLevelMaxRelative', levelMaxRelative);
  GM_setValue('fightMafiaMax', mafiaMax);
  GM_setValue('fightMafiaMaxRelative', mafiaMaxRelative);
  GM_setValue('fightMafiaMin', mafiaMin);
  GM_setValue('fightMafiaMinRelative', mafiaMinRelative);
  GM_setValue('fightAvoidNames', avoidNames);
  GM_setValue('fightList', list);
  GM_setValue('fightRemoveStronger', removeStronger);
  GM_setValue('robLevelMax', levelMax);
  GM_setValue('robLevelMaxRelative', levelMaxRelative);
  GM_setValue('robMafiaMax', mafiaMax);
  GM_setValue('robMafiaMaxRelative', mafiaMaxRelative);
  GM_setValue('robMafiaMin', mafiaMin);
  GM_setValue('robMafiaMinRelative', mafiaMinRelative);
  GM_setValue('robAvoidNames', avoidNames);
  GM_setValue('robList', list);
  GM_setValue('robRemoveStronger', removeStronger);
  GM_setValue('hitmanLocation', loc);
  GM_setValue('hitmanAvoidNames', avoidNames);
}

function handleVersionChange() {
  addToLog('updateGood Icon', 'Now running version ' + SCRIPT.version + ' build ' + 

SCRIPT.build);
  GM_setValue('version', SCRIPT.version);
  GM_setValue('build', SCRIPT.build);

  // Check for invalid settings and upgrade them.

  // In an old version, the bonus had been up to 15%.
  var val = GM_getValue('selectEnergyBonus');
  if (val > 11) {
    GM_setValue('selectEnergyBonus', 11);
  }

  // In an old version, there was no cap. But it definitely must be under 100,
  // and it probably wouldn't work properly with more than 75.
  var val = parseInt(GM_getValue('logPlayerUpdatesMax', '100'));
  if (isNaN(val) || val > 75) {
    GM_setValue('logPlayerUpdatesMax', '75');
  }

  // Upgrade fight/rob tab (builds 522 and under) to stamina tab settings.
  if (GM_getValue('staminaSpend') == undefined &&
      GM_getValue('autoFight') != undefined) {
    upgradeFightRobTab();
    addToLog('process Icon', 'Upgraded fight/rob tab settings.');
  }
  
  // Upgrade Misc Tab settings
  clearOldCheckBoxStatuValues()
}

function clearOldCheckBoxStatuValues() {
  // Clear old checkbox values

  for (var i = 0, iLength=autoStatBases.length; i < iLength; i++)
    if (isNaN (parseInt (GM_getValue(autoStatBases[i]))))
      GM_setValue(autoStatBases[i], 0);

  for (var i = 0, iLength=autoStatRatios.length; i < iLength; i++)
    if (isNaN (parseInt (GM_getValue(autoStatRatios[i]))))
      GM_setValue(autoStatRatios[i], 0);

}  

function saveDefaultSettings() {
  // Assume all settings have been cleared and set defaults.
  // For groups of radio buttons, one must be checked and all others cleared.
  // For checkboxes, no need to default if the option should be off.

  // General tab.
  GM_setValue('autoClick', 'checked');
  GM_setValue('r1', '30');
  GM_setValue('r2', '110');
  GM_setValue('autoHeal', 'checked');
  GM_setValue('healthLevel', '50');
  GM_setValue('healLocationNY', 'checked');
  GM_setValue('healLocationCuba', 0);
  GM_setValue('healLocationMoscow', 0);
  GM_setValue('bankConfig', '50000');
  GM_setValue('bankConfigCuba', '50000');
  GM_setValue('bankConfigMoscow', '50000');
  GM_setValue('autoPauseBefore', 'checked');
  GM_setValue('autoPauseAfter', 0);
  GM_setValue('autoPauseExp', '50');
  GM_setValue('autoLog', 'checked');
  GM_setValue('autoLogLength', '300');
  GM_setValue('logPlayerUpdates', 'checked');
  GM_setValue('logPlayerUpdatesMax', '25');
  GM_setValue('d1', '3');
  GM_setValue('d2', '5');  
  GM_setValue('idleLocation', NY);
  GM_setValue('autoHelp', 'checked');
  
  // Misc Tab
  GM_setValue('autoStat', 0);
  GM_setValue('autoStatDisable', 0);

  for (var i = 0, iLength=autoStatModes.length; i < iLength; ++i)
    GM_setValue(autoStatModes[i], 0);

  for (var i = 0, iLength=autoStatPrios.length; i < iLength; ++i)
    GM_setValue(autoStatPrios[i], 0);

  for (var i = 0, iLength=autoStatBases.length; i < iLength; ++i)
    GM_setValue(autoStatBases[i], 0);

  for (var i = 0, iLength=autoStatRatios.length; i < iLength; ++i)
    GM_setValue(autoStatRatios[i], 0);

  for (var i = 0, iLength=autoStatFallbacks.length; i < iLength; ++i)
    GM_setValue(autoStatFallbacks[i], 0);

  GM_setValue('filterLog', 0);
  GM_setValue('logFilterPass', defaultLogPass.join('\n'));
  GM_setValue('logFilterFail', defaultLogFail.join('\n'));  

  // Energy tab.
  GM_setValue('estimateJobRatio', '1');

  // Stamina tab.
  GM_setValue('staminaSpendHow', STAMINA_HOW_FIGHT_RANDOM);
  GM_setValue('fightLocation', NY);
  GM_setValue('fightLevelMax', 100);
  GM_setValue('fightMafiaMax', 501);
  GM_setValue('fightMafiaMin', 1);
  GM_setValue('fightStealth', 'checked');
  GM_setValue('fightAvoidBodyguards', 'checked');
  GM_setValue('fightAvoidNames', 'checked');
  GM_setValue('fightRemoveStronger', 'checked');
  GM_setValue('robLevelMax', 100);
  GM_setValue('robMafiaMax', 501);
  GM_setValue('robMafiaMin', 1);
  GM_setValue('robAvoidNames', 'checked');
  GM_setValue('robRemoveStronger', 'checked');
  GM_setValue('hitmanLocation', NY);
  GM_setValue('hitmanAvoidNames', 'checked');
  GM_setValue('clanName', defaultClans.join('\n'));
  GM_setValue('selectStaminaKeep', 10);
  GM_setValue('selectStaminaUse', 10);
  setGMTime('skipStaminaTimer', '00:00');

  // Property tab.
  GM_setValue('buyMinAmount', '0');

  // Other settings.
  GM_setValue('logOpen', 'open');

  addToLog('process Icon', 'Options reset to defaults.');
}

function helpSettings() {
  // Open the instructions page.
  // FIXME: Would be nice to jump to the relevant section of the instructions
  //        depending on which settings tab is currently active.
  window.open('http://mafiawarsplayer.org/forum/viewtopic.php?f=11&t=21');
}

function saveSettings() {
/*
  //FIXME: works once then crashes... not good

  // Transfer statLog to graphBox
  if (typeof(GM_getValue('statLog') != 'undefined')) {
    GM_setValue('graphBox', GM_getValue('statLog'));
    GM_deleteValue('statLog');
  }
*/

  // Validate the settings and alert the user if the settings are invalid.
  var logPlayerUpdates = (document.getElementById('logPlayerUpdates').checked === true);
  var logPlayerUpdatesMax = parseInt(document.getElementById('logPlayerUpdatesMax').value);
  if (logPlayerUpdates && (isNaN(logPlayerUpdatesMax) || logPlayerUpdatesMax < 0 || 

logPlayerUpdatesMax > 75)) {
    alert('The maximum number of player updates must be between 0 and 75.');
    return;
  }
  var autoBankOn      = (document.getElementById('autoBank').checked === true);
  var autoBankCubaOn  = (document.getElementById('autoBankCuba').checked === true);
  var autoBankMoscowOn  = (document.getElementById('autoBankMoscow').checked === true);
  var bankConfig      = document.getElementById('bankConfig').value;
  var bankConfigCuba      = document.getElementById('bankConfigCuba').value;
  var bankConfigMoscow      = document.getElementById('bankConfigMoscow').value;
  var bankConfigInt   = parseInt(bankConfig);
  var bankConfigCubaInt   = parseInt(bankConfigCuba);
  var bankConfigMoscowInt   = parseInt(bankConfigMoscow);
  if (autoBankOn && (isNaN(bankConfigInt) || bankConfigInt < 1)) {
    alert('Minimum auto-bank amount must be 1 or higher.');
    return;
  }
  
  GM_setValue('idleLocation', document.getElementById('idleLocation').selectedIndex);
  
  if (autoBankCubaOn && (isNaN(bankConfigCubaInt) || bankConfigCubaInt < 1)) {
    alert('Minimum Cuba auto-bank amount must be 1 or higher.');
    return;
  }
  if (autoBankMoscowOn && (isNaN(bankConfigMoscowInt) || bankConfigMoscowInt < 1)) {
    alert('Minimum Moscow auto-bank amount must be 1 or higher.');
    return;
  }
  var estimateJobRatio = parseFloat(document.getElementById('estimateJobRatio').value);
  var autoEnergyPackOn = (document.getElementById('autoEnergyPack').checked === true );

  // Validate the estimated job ratio setting.
  if (autoEnergyPackOn) {
    if (isNaN(estimateJobRatio)) {
      alert('Please enter a number between 0 and 3 for your estimated job xp to energy ratio');
      return;
    }
  }

  // Validate the auto-stat setting.
  var autoStatOn = (document.getElementById('autoStat').checked === true);
  for (var i = 0, iLength=autoStatBases.length; i < iLength; ++i) {
    if (autoStatOn && isNaN(document.getElementById(autoStatBases[i]).value)) {
      alert('Please enter valid numbers for auto-stat ' + autoStatDescrips[i+1] + ' (Misc tab). : 

' + document.getElementById(autoStatBases[i]).value);
      return;
    }
  }

  for (var i = 0, iLength=autoStatRatios.length; i < iLength; ++i) {
    if (autoStatOn && isNaN(document.getElementById(autoStatRatios[i]).value)) {
      alert('Please enter valid numbers for auto-stat ' + autoStatDescrips[i+1] + ' (Misc 

tab).');
      return;
    }
  }

  // Validate the stamina tab.
  var staminaTabSettings = validateStaminaTab();
  if (!staminaTabSettings) return;
  //var testStaminaTab = function() {
  //  var s = validateStaminaTab();
  //  GM_log('s='+s);
  //  for (var setting in s) {
  //    GM_log(setting + '=' + s[setting]);
  //  }
  //}
  //testStaminaTab();

  //
  // All settings are valid. Save them.
  //                           
  GM_setValue('restAutoStat', 0);
  for (var i = 0, iLength=autoStatBases.length; i < iLength; ++i)
    GM_setValue(autoStatBases[i], document.getElementById(autoStatBases[i]).value);
  for (var i = 0, iLength=autoStatRatios.length; i < iLength; ++i)
    GM_setValue(autoStatRatios[i], document.getElementById(autoStatRatios[i]).value);
  for (var i = 0, iLength=autoStatModes.length; i < iLength; ++i)
    GM_setValue(autoStatModes[i], document.getElementById(autoStatModes[i]).value);
  for (var i = 0, iLength=autoStatPrios.length; i < iLength; ++i)
    GM_setValue(autoStatPrios[i], document.getElementById(autoStatPrios[i]).value);

  GM_setValue('logFilterPass', document.getElementById('logFilterPass').value);
  GM_setValue('logFilterFail', document.getElementById('logFilterFail').value);
  
  // Place all checkbox element saving here
  saveCheckBoxElementArray(['autoClick','autoLog','logPlayerUpdates','hideAttacks',
                            'autoHitlist','autoMission','autoBank','waitForFull', 

'autoBankMoscow',
                            'autoBankCuba','autoHeal','hideInHospital','healLocationNY', 

'healLocationMoscow',
                            

'healLocationCuba','autoStat','autoStatDisable','autoStatAttackFallback',
                            

'autoStatDefenseFallback','autoStatHealthFallback','autoStatEnergyFallback',
                            'autoStatStaminaFallback','autoStatInfluenceFallback', 

'hourlyStatsOpt','autoGiftSkipOpt',
                            

'autoBuy','autoRepair','autoProtect','autoSellCrates','autoEnergyPack', 
                            'hasHelicopter', 'hasPrivateIsland', 'hasGoldenThrone','isManiac',
                            'sendEnergyPack', 'autoAskJobHelp','autoPause','hideAds',
                            'moveEmailBar','acceptMafiaInvitations','autoLottoOpt',
                            

'leftAlign','filterLog','autoHelp','autoSellCratesMoscow','collectNYTake']);  
                            
  if (document.getElementById('masterAllJobs').checked === true) {
    GM_setValue('repeatJob', 0);
  } else {
    GM_setValue('repeatJob', 'checked');
  }                            
                            
  var selectProperties = '';  
  if (saveCheckBoxElement('abandoned'))
    selectProperties += 'Abandoned Lot';
  if (saveCheckBoxElement('commercial'))
    selectProperties += 'Commercial Block';
  if (saveCheckBoxElement('downtown'))
    selectProperties += 'Prime Downtown Lot';
  if (saveCheckBoxElement('beachfront'))
    selectProperties += 'Beachfront Property';
  if (saveCheckBoxElement('mike'))
    selectProperties += 'Mafia Mike\'s';
  if (saveCheckBoxElement('rent'))
    selectProperties += 'Rent House';
  if (saveCheckBoxElement('restaurant'))
    selectProperties += 'Italian Restaurant';
  if (saveCheckBoxElement('apartment'))
    selectProperties += 'Apartment Complex';
  if (saveCheckBoxElement('valu'))
    selectProperties += 'Valu-Mart';
  if (saveCheckBoxElement('tourist'))
    selectProperties += 'Marina Tourist Shops';
  if (saveCheckBoxElement('office'))
    selectProperties += 'Office Building';
  if (saveCheckBoxElement('hotel'))
    selectProperties += '5-Star Hotel';
  if (saveCheckBoxElement('casino'))
    selectProperties += 'Mega Casino';
  
  GM_setValue('selectProperties', selectProperties);
  GM_setValue('estimateJobRatio', document.getElementById('estimateJobRatio').value); 
  
  if (saveCheckBoxElement('autoPauseBefore')) {
    GM_setValue('autoPauselvlExp', lvlExp);
    GM_setValue('autoPauseActivated', false);    
  }
  
  if (saveCheckBoxElement('autoPauseAfter')) {
    GM_setValue('autoPauselvlExp', lvlExp);
  }  

  GM_setValue('notificationHandle', document.getElementById('notificationHandle').selectedIndex);
  GM_setValue('selectMission', document.getElementById('selectMission').selectedIndex);
  GM_setValue('bankConfig', bankConfig);
  GM_setValue('bankConfigCuba', bankConfigCuba);
  GM_setValue('bankConfigMoscow', bankConfigMoscow);
  GM_setValue('r1', document.getElementById('r1').value);
  GM_setValue('r2', document.getElementById('r2').value);
  GM_setValue('d1', document.getElementById('d1').value);
  GM_setValue('d2', document.getElementById('d2').value);
  GM_setValue('propertyId', '12');
  GM_setValue('healthLevel', document.getElementById('healthLevel').value);
  GM_setValue('selectStaminaKeep', document.getElementById('selectStaminaKeep').selectedIndex );
  GM_setValue('selectStaminaUse', document.getElementById('selectStaminaUse').selectedIndex );  
  GM_setValue('autoPauseExp', document.getElementById('autoPauseExp').value);
  GM_setValue('autoLogLength', document.getElementById('autoLogLength').value);
  GM_setValue('logPlayerUpdatesMax', logPlayerUpdatesMax);
  GM_setValue('bountyAmount', document.getElementById('bountyAmount').value);
  GM_setValue('buyMinAmount', document.getElementById('buyMinAmount').value);
  GM_setValue('autoAskJobHelpMinExp', document.getElementById('autoAskJobHelpMinExp').value);
  GM_setValue('autoAskJobHelpMessage', document.getElementById('autoAskJobHelpMessage').value);

  if (saveCheckBoxElement('multipleJobs')) {
    var multiple_jobs_list = [];
    var option = document.getElementById('selectMission').options
    for (var i = 0, iLength = option.length; i < iLength; i++) {
      if(option[i].selected == true) {
        multiple_jobs_list.push(i);
      }
    }
    setSavedList('selectMissionMultiple', multiple_jobs_list);
    GM_setValue('selectMission', multiple_jobs_list[0]);    
  } else {
    GM_setValue('selectMission', document.getElementById('selectMission').selectedIndex);
    setSavedList('selectMissionMultiple', []);
  }

  // Save the stamina tab settings.
  for (var key in staminaTabSettings) {
    //GM_log('Setting GM value \'' + key + '\'=' + staminaTabSettings[key]);
    GM_setValue(key, staminaTabSettings[key]);
  }
  setGMTime('skipStaminaTimer', '00:00');

  // Clear the job state.
  setSavedList('jobsToDo', []);
  setSavedList('itemList', []);

  // Clear the fight/rob state.
  setSavedList('fightListNew', []);
  fightTmp = '';
  skipStaminaSpend = false;

  toggleSettings();
  updateLogStats();
  
}

function updateMastheadMenu() {
  var menuElt = document.getElementById('ap_menu');
  if (!menuElt) return;

  var elt = document.getElementById('pauseButton');
  if (running) {
    if (elt) return;

    // Remove the resume button and paused image.
    elt = document.getElementById('resumeButton');
    if (elt) {
      elt.parentNode.removeChild(elt);
    }
    elt = document.getElementById('ap_pause_img');
    if (elt) {
      elt.parentNode.removeChild(elt);
    }

    // Show a pause button.
    elt = makeElement('span', null, {'id':'pauseButton'});
    elt.appendChild(document.createTextNode('Pause'));
    elt.addEventListener('click', pause, false);
    menuElt.insertBefore(elt, menuElt.firstChild);
  } else {
    // Remove the pause button.
    if (elt) {
      elt.parentNode.removeChild(elt);
    }

    // Show a resume button and paused image.
    elt = document.getElementById('resumeButton');
    if (elt) return;
    elt = makeElement('span', null, {'id':'resumeButton'});
    elt.appendChild(document.createTextNode('Resume'));
    menuElt.insertBefore(elt, menuElt.firstChild);
    elt.addEventListener('click', unPause, false);
    makeElement('div', menuElt.parentNode, {'id':'ap_pause_img', 'style':'background: transparent 

url(' + stripURI(pausedMessageImage) + ') no-repeat scroll 20px; position: absolute; top: 0; 

left: 0; bottom: 0; width: 250px'});
  }
}

function pause() {
  if (GM_getValue('isRunning') === false) {
    // Must have been paused already. Make sure the log is current.
    refreshLog();
  }

  // Update the running state.
  GM_setValue('isRunning', false);
  running = false;

  // Clear all timers.
  Autoplay.clearTimeout();
  Reload.clearTimeout();

  addToLog('pause Icon', 'Autoplayer is paused. Log & stats do not track manual activity.');
  updateMastheadMenu();
}

function unPause() {
  if (GM_getValue('isRunning') === true) {
    // Must have been resumed already. Make sure the log is current.
    refreshLog();
  }

  // Clear lists for ignored and visible jobs.
  setSavedList('ignoredJobsList', []);
  GM_setValue('availableJobs', "({0:{},1:{},2:{}})");

  // Update the running state.
  GM_setValue('isRunning', true);
  running = true;

  addToLog('play Icon', 'Autoplayer resuming...');
  updateMastheadMenu();

  // Set up auto-reload.
  autoReload();

  // Kick off play.
  Autoplay.fx = goHome;
  Autoplay.delay = 150;
  Autoplay.start();
}

function calcEnergyCost() {
  var cost = missions[GM_getValue('selectMission', 1)][1];
  if (cost > 5) {
    // Adjust for energy bonus.
    cost = Math.floor(cost * (1 - GM_getValue('selectEnergyBonus', 0)/100));
  }
  return cost;
}

function isFamily(username) {
  var patterns = getSavedList('clanName');
  for (var i = 0, iLength=patterns.length; i < iLength; ++i) {
    var pattern = patterns[i];
    if (pattern && username.indexOf(pattern) != -1) {
      return true;
    }
  }
  return false;
}

// Can be enhanced by regular expressions but will "regular" folks get it?
function isLoggable(line) {
  // Do not filter logs if in DEBUG mode OR
  // if log filtering is disabled
  if (debug || GM_getValue('filterLog') != 'checked')
    return true;
    
  if (line.indexOf('Log filtering') != -1) return true;
     
  var logPatternPass = getSavedList('logFilterPass');
  var logPatternFail = getSavedList('logFilterFail');
  
  // Do not filter if both lists are empty
  if ( (logPatternPass.length + logPatternFail.length) == 0 ) return true; 
  
  // Log if line ONLY contains any pattern from list
  for (var i = 0, iLength=logPatternPass.length; i < iLength; ++i) {
    var pattern = logPatternPass[i];
    if ( pattern && line.indexOf(pattern) != -1) {
      return true;
    }
  }

  var failLength = logPatternFail.length;
  if (failLength == 0) {
    return false;
  }      
   
  // Do not log if line contains any pattern from list
  for (var i = 0; i < failLength; i++) {
    var pattern = logPatternFail[i]
    if ( pattern && line.indexOf(pattern) != -1) {
      return false;
    }
  }   
  
  if (logPatternPass.length == 0) {
    return true;
  }
  
  return false;  
}

function addToLog(icon, line) {
  if (!debug && GM_getValue('autoLog') != 'checked') {
    // Logging is turned off.
    return;
  }
  
  // Do not log anything if log filter condition is met
  if (!isLoggable(line)) {
    return;
  }

  // Create a datestamp, formatted for the log.
  var currentTime = new Date();
  var m_names = new Array('Jan', 'Feb', 'Mar',
    'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
    'Oct', 'Nov', 'Dec');
  var timestampdate = m_names[currentTime.getMonth()] + ' ' + currentTime.getDate();

  // Create a timestamp, formatted for the log.
  var hours = currentTime.getHours();
  if (hours >= 12) {
    hours = hours - 12;
    var ampm = ' PM';
  } else {
    var ampm = ' AM';
  }
  if (hours == 0) {
    hours = 12;
  }
  var timestamptime = hours + ':' +
    (currentTime.getMinutes() < 10 ? 0 : '') +
    currentTime.getMinutes() + ':' +
    (currentTime.getSeconds() < 10 ? 0 : '') +
    currentTime.getSeconds() +
    ampm;

  // Get a log box to work with.
  var logBox = document.getElementById('logBox');
  if (!logBox) {
    if (!addToLog.logBox) {
      // There's no log box, so create one.
      addToLog.logBox = document.createElement('div');
      addToLog.logBox.innerHTML = GM_getValue('itemLog', '');
    }
    logBox = addToLog.logBox;
  }
  var logLen = logBox.childNodes.length;

  // Determine whether the new line repeats the most recent one.
  var repeatCount;
  if (logLen) {
    var elt = logBox.firstChild.childNodes[1];
    if (elt && elt.innerHTML.untag().indexOf(String(line).untag()) == 0) {
      if (elt.innerHTML.match(/\((\d+) times\)$/)) {
        repeatCount = parseInt(RegExp.$1) + 1;
      } else {
        repeatCount = 2;
      }
      line += ' (' + repeatCount + ' times)';
    }
  }

  // Create the new log entry.
  var lineToAdd = document.createElement('div');
  lineToAdd.className = 'logEvent ' + icon;
  lineToAdd.innerHTML = '<div class="eventTime">' + timestampdate + '<br/>' +
                        timestamptime + '</div><div class="eventBody">' +
                        line + '</div><div class="clear"></div>';

  // Put it in the log box.
  if (repeatCount) {
    logBox.replaceChild(lineToAdd, logBox.firstChild);
  } else {
    logBox.insertBefore(lineToAdd, logBox.firstChild);

    // If the log is too large, trim it down.
    var logMax = parseInt(GM_getValue('autoLogLength', 300));
    //GM_log('logLen=' + logLen + ', logMax=' + logMax);
    if (logMax > 0) {
      while (logLen-- > logMax) {
        logBox.removeChild(logBox.lastChild);
      }
    }
  }

  // Save the log.
  GM_setValue('itemLog', logBox.innerHTML);
}

function updateLogStats() {
  var fightCount = document.getElementById('fightCount');
  if (!fightCount) return;
    fightCount.firstChild.nodeValue = makeCommaValue(GM_getValue('fightWinCountInt', 0) + 

GM_getValue('fightLossCountInt', 0));
  document.getElementById('fightWinCount').firstChild.nodeValue = makeCommaValue(GM_getValue

('fightWinCountInt', 0));
  var fightWinPct = (GM_getValue('fightWinCountInt', 0)/(GM_getValue('fightWinCountInt', 0) + 

GM_getValue('fightLossCountInt', 0)) * 100).toFixed(1);
    document.getElementById('fightWinPct').firstChild.nodeValue =  (isNaN(fightWinPct)) ? '0.0%' 

: fightWinPct + '%';
  document.getElementById('fightLossCount').firstChild.nodeValue = makeCommaValue(GM_getValue

('fightLossCountInt', 0));
  var fightLossPct = (GM_getValue('fightLossCountInt', 0)/(GM_getValue('fightWinCountInt', 0) + 

GM_getValue('fightLossCountInt', 0)) * 100).toFixed(1)
    document.getElementById('fightLossPct').firstChild.nodeValue =  (isNaN(fightLossPct)) ? 

'0.0%' : fightLossPct + '%';

  var how = GM_getValue('staminaSpendHow');
  switch (GM_getValue('staminaSpendHow')) {
    case STAMINA_HOW_ROB_RANDOM:
    case STAMINA_HOW_ROB_LIST:
      var robCount = document.getElementById('robCount');
      if (!robCount) return;
      document.getElementById('robCount').firstChild.nodeValue = makeCommaValue(GM_getValue

('robWinCountInt', 0) + GM_getValue('robLossCountInt', 0));
      document.getElementById('robWinCount').firstChild.nodeValue = makeCommaValue(GM_getValue

('robWinCountInt', 0));
      var robWinPct = (GM_getValue('robWinCountInt', 0)/(GM_getValue('robWinCountInt', 0) + 

GM_getValue('robLossCountInt', 0)) * 100).toFixed(1);
        document.getElementById('robWinPct').firstChild.nodeValue =  (isNaN(robWinPct)) ? '0.0%' 

: robWinPct + '%';
      document.getElementById('robLossCount').firstChild.nodeValue = makeCommaValue(GM_getValue

('robLossCountInt', 0));
      var robLossPct = (GM_getValue('robLossCountInt', 0)/(GM_getValue('robWinCountInt', 0) + 

GM_getValue('robLossCountInt', 0)) * 100).toFixed(1);
        document.getElementById('robLossPct').firstChild.nodeValue =  (isNaN(robLossPct)) ? 

'0.0%' : robLossPct + '%';
      break;
      
    case STAMINA_HOW_HITMAN:
      //Update new hitman stats
      var hitmanCount = document.getElementById('hitmanCount');
      if (!hitmanCount) return;
      document.getElementById('hitmanCount').firstChild.nodeValue = makeCommaValue(parseInt

(GM_getValue('hitmanWinCountInt', 0)) + parseInt(GM_getValue('hitmanLossCountInt', 0)));
      document.getElementById('hitmanWinCount').firstChild.nodeValue = makeCommaValue

(GM_getValue('hitmanWinCountInt', 0));
      var hitmanWinPct = (GM_getValue('hitmanWinCountInt', 0)/(GM_getValue('hitmanWinCountInt', 

0) + GM_getValue('hitmanLossCountInt', 0)) * 100).toFixed(1);
        document.getElementById('hitmanWinPct').firstChild.nodeValue =  (isNaN(hitmanWinPct)) ? 

'0.0%' : hitmanWinPct + '%';
      document.getElementById('hitmanLossCount').firstChild.nodeValue = makeCommaValue

(GM_getValue('hitmanLossCountInt', 0));
      var hitmanLossPct = (GM_getValue('hitmanLossCountInt', 0)/(GM_getValue('hitmanWinCountInt', 

0) + GM_getValue('hitmanLossCountInt', 0)) * 100).toFixed(1);
        document.getElementById('hitmanLossPct').firstChild.nodeValue =  (isNaN(hitmanLossPct)) ? 

'0.0%' : hitmanLossPct + '%';
      break;
      
    default:
      DEBUG('Neither Rob nor Hitman Stats');
      break;
  }

  document.getElementById('totalWinDollars').firstChild.nodeValue = '$' + makeCommaValue

(parseInt(GM_getValue('totalWinDollarsInt', 0)));  //Accomodates up to $999,999,999,999
  document.getElementById('totalLossDollars').firstChild.nodeValue = '$' + makeCommaValue

(parseInt(GM_getValue('totalLossDollarsInt', 0)));
  document.getElementById('totalExp').firstChild.nodeValue = makeCommaValue(GM_getValue

('totalExpInt', 0));

  //FIXME: These values currently only get refreshed when stamina is spent,
  //       which isn't often enough. Perhaps other stats that only need to
  //       be refreshed after stamina is spent would be more useful anyway?
  //       And the xps to next level stat already appears in the main window.
  var rate = getStaminaGainRate();
  document.getElementById('expRate').firstChild.nodeValue = rate.toFixed(2);
  document.getElementById('expToNext').firstChild.nodeValue = makeCommaValue(ptsToNextLevel);
  document.getElementById('stamToNext').firstChild.nodeValue = rate? (ptsToNextLevel / 

rate).toFixed(0): 'n/a';
}

function logFilterOnOff() {
  // Toggle logFilter flag
  var msgLog =  'Log filtering has been ' + (toggleCheckElt('filterLog') ? 'enabled' : 

'disabled') + '.';
  addToLog('info Icon', msgLog);
  if (GM_getValue('logOpen') != 'open') {
    alert(msgLog); 
  }
}

function debugOnOff() {
  var debugElt = document.getElementById('ap_debug_log');
  if (GM_getValue('enableDebug') == 'checked') {
    addToLog('info Icon', 'Debug logging disabled.');
    GM_setValue('enableDebug', 0);
    debug = false;
    if (GM_getValue('logOpen') != 'open') {
      alert('Debug logging disabled.');
    } else if (debugElt) {
      debugElt.style.display = 'none';
    }
  } else {
    GM_setValue('enableDebug', 'checked');
    debug = true;
    showMafiaLogBox();
    addToLog('info Icon', 'Debug logging enabled.');
    if (debugElt) {
      debugElt.style.display = 'block';
    }
    debugDumpSettings();
    checkLanguage();
  }
}

function DEBUG(line, level) {
  var level = (level == null) ? 0 : level;
  if (debug) {
    addToLog('info Icon', line);
    GM_log(line, level);
  }
}

// Get a saved list of player objects.
function getSavedPlayerList(listName, forceRefresh) {
  if (!listName) return [];

  if (forceRefresh || !getSavedPlayerList[listName]) {
    // Get any saved list of player ID's from storage.
    var ids = getSavedList(listName);

    // Convert the ID list (strings) into a player list (objects).
    var l = [];
    for (var i = 0, iLength=ids.length; i < iLength; ++i) {
      l.push({ id: ids[i]});
    }
    getSavedPlayerList[listName] = l;
  }

  return getSavedPlayerList[listName];
}

// Save a list of player objects.
function setSavedPlayerList(listName, list) {
  // Build a list of player ID's.
  var l = [];
  for (var i = 0, iLength=list.length; i < iLength; ++i) {
    var player = list[i];
    if (player && player.id) {
      l.push(player.id);
    }
  }

  return setSavedList(listName, l);
}

function CyclePropertyList() {
  DEBUG('CyclePropertyList(): '+ GM_getValue('propertyId', ''));
  if (GM_getValue('propertyId') <= 6) {
    CycleRobList();
    var i = 12; //back to casinos
  } else {
    var i = GM_getValue('propertyId') - 1;
  }
  GM_setValue('propertyId', i);
}

function refreshLog() {
  var logBox = document.getElementById('logBox');
  if (logBox) {
    logBox.innerHTML = GM_getValue('itemLog', '');
  }
}

function clearLog() {
  GM_setValue('itemLog', '');

  //reset the log box
  var logBox = document.getElementById('logBox');
    logBox.innerHTML = '';
}

function clearStats() {
  //reset log statistics
  GM_setValue('fightWinCountInt', 0);
  GM_setValue('fightLossCountInt', 0);
  GM_setValue('robWinCountInt', 0);
  GM_setValue('robLossCountInt', 0);
  GM_setValue('hitmanWinCountInt',0);
  GM_setValue('hitmanWinDollarsInt','0');
  GM_setValue('hitmanLossCountInt',0);
  GM_setValue('hitmanLossDollarsInt','0');
  
  GM_setValue('totalExpInt', 0);
  GM_setValue('totalWinDollarsInt', '0');
  GM_setValue('totalLossDollarsInt', '0');

  GM_setValue('lastHitXp', 0);
  GM_setValue('totalHits', 0);
  GM_setValue('totalXp', 0);
  GM_setValue('currentHitXp', 0);
  GM_setValue('currentHitDollars','0');

  

  //ATK
  //New tracking stats for NY
  GM_setValue('hourlyStats', '0');
  GM_setValue('fightExpNY', 0);          //Number of exper. points earned from fights in NY
  GM_setValue('fightWinsNY', 0);         //Count of fights won in NY
  GM_setValue('fightWin$NY', '0');       //$ won from fights in NY
  GM_setValue('fightLossesNY', 0);       //Count of fights lost in NY
  GM_setValue('fightLoss$NY', '0');      //$ lost from fights in NY
  GM_setValue('fightLossBGCHNY', 0);     //NY Bodyguard Critical Hit losses
  GM_setValue('fightLossBGCH$NY', '0');  //NY$ lost by Bodyguard Critical Hit
  GM_setValue('fightLossCHNY', 0);       //NY Critical Hit fight losses
  GM_setValue('fightLossCH$NY', '0');    //$ lost from Critical Hit in NY fights
  GM_setValue('fightLossStrongNY', 0);   //Too Strong loss type count from NY fights
  GM_setValue('fightLossStrong$NY', '0');//$ lost from Too Strong in NY fights
  //New tracking stats for Cuba
  GM_setValue('fightExpCuba', 0);        //Number of exper. points earned from fights in Cuba
  GM_setValue('fightWinsCuba', 0);       //Count of fights won in Cuba
  GM_setValue('fightWin$Cuba', '0');     //Cuban pesos won from fights
  GM_setValue('fightLossesCuba', 0);     //Count of fights lost in Cuba
  GM_setValue('fightLoss$Cuba', '0');    //Cuban pesos lost from fights
  GM_setValue('fightLossBGCHCuba', 0);   //Bodyguard Critical Hit loss type count from Cuba 

fights
  GM_setValue('fightLossBGCH$Cuba', '0');//$ lost from Bodyguard Critical Hit in Cuba fights
  GM_setValue('fightLossCHCuba', 0);     //Critical Hit loss type count from Cuba fights
  GM_setValue('fightLossCH$Cuba', '0');  //$ lost from Critical Hit in Cuba fights
  GM_setValue('fightLossStrongCuba', 0); //Too Strong loss type count from Cuba fights
  GM_setValue('fightLossStrong$Cuba', '0');//$ lost from Too Strong in Cuba fights
  //New tracking stats for Moscow
  GM_setValue('fightExpMoscow', 0);        //Number of exper. points earned from fights in Moscow
  GM_setValue('fightWinsMoscow', 0);       //Count of fights won in Moscow
  GM_setValue('fightWin$Moscow', '0');     //Moscown pesos won from fights
  GM_setValue('fightLossesMoscow', 0);     //Count of fights lost in Moscow
  GM_setValue('fightLoss$Moscow', '0');    //Moscown pesos lost from fights
  GM_setValue('fightLossBGCHMoscow', 0);   //Bodyguard Critical Hit loss type count from Moscow 

fights
  GM_setValue('fightLossBGCH$Moscow', '0');//$ lost from Bodyguard Critical Hit in Moscow fights
  GM_setValue('fightLossCHMoscow', 0);     //Critical Hit loss type count from Moscow fights
  GM_setValue('fightLossCH$Moscow', '0');  //$ lost from Critical Hit in Moscow fights
  GM_setValue('fightLossStrongMoscow', 0); //Too Strong loss type count from Moscow fights
  GM_setValue('fightLossStrong$Moscow', '0');//$ lost from Too Strong in Moscow fights
  updateLogStats();
}

function clearHitlistArray () {
  GM_setValue('onHitlist', 0);
}

function clearHitStats () {
  GM_setValue('lastHitXp', 0);
  GM_setValue('totalHits', 0);
  GM_setValue('totalXp', 0);
  GM_setValue('currentHitXp', 0);
}

function minBankCheck() {
  // Don't allow zero value in autobank setting.
  var amount = parseInt(document.getElementById('bankConfig').value);
  if (isNaN(amount) || amount < 1) {
    alert('Minimum auto-bank amount must be 1 or higher');
    document.getElementById('bankConfig').focus();
  }

  var amountCuba = parseInt(document.getElementById('bankConfigCuba').value);
  if (isNaN(amountCuba) || amountCuba < 1) {
    alert('Minimum Cuba auto-bank amount must be 1 or higher');
    document.getElementById('bankConfigCuba').focus();
  }
  
  var amountMoscow = parseInt(document.getElementById('bankConfigMoscow').value);
  if (isNaN(amountMoscow) || amountMoscow < 1) {
    alert('Minimum Moscow auto-bank amount must be 1 or higher');
    document.getElementById('bankConfigMoscow').focus();
  }
}

function takeAction(link, action, context) {
  if (!link) {
    addToLog('warning Icon', 'BUG DETECTED: No link passed to takeAction().');
    return;
  }

  DEBUG('Action set to: ' + action);
  GM_xmlhttpRequest({ method: 'GET',
    url: link,
    headers:{'Content-type':'application/x-www-form-urlencoded'},
    onload: function(responseDetails) { handleResponse(responseDetails, action, context); },
    onerror: function(responseDetails) { addToLog('warning Icon', 'error status '+ 

responseDetails.status); }
  });
}

function createLogBox() {
  // Define CSS styles.
  makeElement('style', document.getElementsByTagName('head')[0], 

{'type':'text/css'}).appendChild(document.createTextNode(
    '#mafiaLogBox div.mouseunderline:hover{text-decoration:underline}' +
    '#mafiaLogBox .logEvent{border-bottom:1px solid #333; padding:4px 0px}' +
    '#mafiaLogBox .eventTime{color:#888; font-size: 11px; width:75px;  float:left}' +
    '#mafiaLogBox .eventBody{width:315px; float:right}' +
    '#mafiaLogBox .eventTime,#mafiaLogBox .eventIcon,#mafiaLogBox .eventBody{}' +
    '#mafiaLogBox .eventBody .good {color:#52E259;font-weight:bold;}' +
    '#mafiaLogBox .eventBody .bad {color:#EC2D2D;font-weight:bold;}' +
    '#mafiaLogBox .eventBody .warn {color:#EC2D2D;}' +
    '#mafiaLogBox .eventBody .money {color:#00CC00;font-weight:bold;}' +
    '#mafiaLogBox .eventBody .expense {color:#FFD927;}' +
    '#mafiaLogBox .eventBody .loot {color:#FF6633;}' +
    '#mafiaLogBox .eventBody .user {color:#FFD927;}' +
    '#mafiaLogBox .eventBody .attacker {color:#EC2D2D;}' +
    '#mafiaLogBox .eventBody .job {color:#52E259;font-weight:bold;}' +
    '#mafiaLogBox .clear{clear:both}' +
    '#mafiaLogBox .logEvent.Icon{background-repeat: no-repeat; background-position: 75px}' +
    '#mafiaLogBox .logEvent.process.Icon{background-image:url(' + stripURI(processIcon) + ')}' +
    '#mafiaLogBox .logEvent.search.Icon{background-image:url(' + stripURI(searchIcon) + ')}' +
    '#mafiaLogBox .logEvent.warning.Icon{background-image:url(' + stripURI(warningIcon) + ')}' +
    '#mafiaLogBox .logEvent.info.Icon{background-image:url(' + stripURI(infoIcon) + ')}' +
    '#mafiaLogBox .logEvent.lootbag.Icon{background-image:url(' + stripURI(lootbagIcon) + ')}' +
    '#mafiaLogBox .logEvent.found.Icon{background-image:url(' + stripURI(lootbagIcon) + ')}' +
    '#mafiaLogBox .logEvent.updateGood.Icon{background-image:url(' + stripURI(updateGoodIcon) + 

')}' +
    '#mafiaLogBox .logEvent.updateBad.Icon{background-image:url(' + stripURI(updateBadIcon) + 

')}' +
    '#mafiaLogBox .logEvent.pause.Icon{background-image:url(' + stripURI(pauseIcon) + ')}' +
    '#mafiaLogBox .logEvent.play.Icon{background-image:url(' + stripURI(playIcon) + ')}' +
    '#mafiaLogBox .logEvent.good.Icon{background-image:url(' + stripURI(goodIcon) + ')}' +
    '#mafiaLogBox .logEvent.bad.Icon{background-image:url(' + stripURI(badIcon) + ')}' +
    '#mafiaLogBox .logEvent.experience.Icon{background-image:url(' + stripURI(experienceIcon) + 

')}' +
    '#mafiaLogBox .logEvent.experience.Icon{background-image:url(' + stripURI(experienceIcon) + 

')}' +
    '#mafiaLogBox .logEvent.health.Icon{background-image:url(' + stripURI(healthIcon) + ')}' +
    '#mafiaLogBox .logEvent.cash.Icon{background-image:url(' + stripURI(cashIcon) + ')}' +
    '#mafiaLogBox .logEvent.cashCuba.Icon{background-image:url(' + stripURI(cashCubaIcon) + ')}' 

+
    '#mafiaLogBox .logEvent.cashMoscow.Icon{background-image:url(' + stripURI(cashMoscowIcon) + 

')}' +
    '#mafiaLogBox .logEvent.energyPack.Icon{background-image:url(' + stripURI(energyPackIcon) + 

')}'
  ));


  var mafiaLogBox = makeElement('div', document.body, {'id':'mafiaLogBox', 'style':'position: 

fixed; right: 5px; top: 55px; bottom: 30px; width: 427px; background: black url

(http://mwdirectfb3.static.zynga.com/mwfb/graphics/MW_FB_Background_760.gif); text-align: left; 

padding: 5px; border: 1px solid; border-color: #FFFFFF; z-index: 98; font-size: 10pt;'});

  var logClrButton = makeElement('div', mafiaLogBox, {'class':'mouseunderline', 

'style':'position: absolute; left: 5px; top: 0px; font-weight: 600; cursor: pointer; color: rgb

(255, 217, 39);'});
    logClrButton.appendChild(document.createTextNode('clear log'));
    logClrButton.addEventListener('click', clearLog, false);

  var logClrStatsButton = makeElement('div', mafiaLogBox, {'class':'mouseunderline', 

'style':'position: absolute; left: 85px; top: 0px; font-weight: 600; cursor: pointer; color: rgb

(255, 217, 39);'});
    logClrStatsButton.appendChild(document.createTextNode('clear stats'));
    logClrStatsButton.addEventListener('click', clearStats, false);

  var closeLogButton = makeElement('div', mafiaLogBox, {'class':'mouseunderline', 

'style':'position: absolute; right: 5px; top: 0px; font-weight: 600; cursor: pointer; color: rgb

(255, 217, 39);'});
    closeLogButton.appendChild(document.createTextNode('close'));
    closeLogButton.addEventListener('click', hideMafiaLogBox, false);

  var debugElt = makeElement('div', mafiaLogBox, {'id':'ap_debug_log', 'style':'display: none; 

position: absolute; left: 180px; top: 0px; font-weight: 600;color: rgb(255, 0, 0);'});
  debugElt.appendChild(document.createTextNode('Debug Log'));
  if (debug) {
    debugElt.style.display = 'block';
  }

  var logBox = makeElement('div', mafiaLogBox, {'id':'logBox', 'style':'position: absolute; 

overflow: auto; right: 0px; top: 20px; bottom: 68px; width: 425px; background-color: #111111; 

font-size:11px; color: #BCD2EA; text-align: left; padding: 5px; border: 1px solid;'});
    logBox.innerHTML = GM_getValue('itemLog', '');

  //Change Stats Displayed based on current stamina burner
  //fight Stats are currently default for leftmost portion of Stats
  makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 5px; bottom: 33px; font-

weight: 100;color: #666666;'}).appendChild(document.createTextNode('Fights:'));
  makeElement('div', mafiaLogBox, {'id':'fightCount', 'style':'position: absolute; right: 335px; 

bottom: 33px; font-weight: 600;color: #BCD2EA;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('fightWinCountInt', 0) + GM_getValue('fightLossCountInt', 0))));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 5px; bottom: 18px; font-

weight: 100;color: #666666;'}).appendChild(document.createTextNode('Won:'));
  makeElement('div', mafiaLogBox, {'id':'fightWinCount', 'style':'position: absolute; right: 

335px; bottom: 18px; font-weight: 600;color: #52E259;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('fightWinCountInt', 0))));
  var fightWinPct = (GM_getValue('fightWinCountInt', 0)/(GM_getValue('fightWinCountInt', 0) + 

GM_getValue('fightLossCountInt', 0)) * 100).toFixed(1);
    makeElement('div', mafiaLogBox, {'id':'fightWinPct', 'style':'position: absolute; right: 

280px; bottom: 18px; font-weight: 100;color: #52E259;'}).appendChild(document.createTextNode

((isNaN(fightWinPct)) ? '0.0%' : fightWinPct + '%'));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 5px; bottom: 3px; font-

weight: 100;color: #666666;'}).appendChild(document.createTextNode('Lost:'));
  makeElement('div', mafiaLogBox, {'id':'fightLossCount', 'style':'position: absolute; right: 

335px; bottom: 3px; font-weight: 600;color: #EC2D2D;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('fightLossCountInt', 0))));
  var fightLossPct = (GM_getValue('fightLossCountInt', 0)/(GM_getValue('fightWinCountInt', 0) + 

GM_getValue('fightLossCountInt', 0)) * 100).toFixed(1);
    makeElement('div', mafiaLogBox, {'id':'fightLossPct', 'style':'position: absolute; right: 

280px; bottom: 3px; font-weight: 100;color: #EC2D2D;'}).appendChild(document.createTextNode

((isNaN(fightLossPct)) ? '0.0%' : fightLossPct + '%'));
  
  var how = GM_getValue('staminaSpendHow');
  switch (GM_getValue('staminaSpendHow')) {
    case STAMINA_HOW_ROB_RANDOM:
    case STAMINA_HOW_ROB_LIST:
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 33px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Robs:'));
      makeElement('div', mafiaLogBox, {'id':'robCount', 'style':'position: absolute; right: 

185px; bottom: 33px; font-weight: 600;color: #BCD2EA;'}).appendChild(document.createTextNode

(makeCommaValue((GM_getValue('robWinCountInt', 0) + GM_getValue('robLossCountInt', 0)))));
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 18px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Succ:'));
      makeElement('div', mafiaLogBox, {'id':'robWinCount', 'style':'position: absolute; right: 

185px; bottom: 18px; font-weight: 600;color: #52E259;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('robWinCountInt', 0))));
      var robWinPct = (GM_getValue('robWinCountInt', 0)/(GM_getValue('robWinCountInt', 0) + 

GM_getValue('robLossCountInt', 0)) * 100).toFixed(1);
        makeElement('div', mafiaLogBox, {'id':'robWinPct', 'style':'position: absolute; right: 

130px; bottom: 18px; font-weight: 100;color: #52E259;'}).appendChild(document.createTextNode

((isNaN(robWinPct)) ? '0.0%' : robWinPct + '%'));
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 3px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Fail:'));
      makeElement('div', mafiaLogBox, {'id':'robLossCount', 'style':'position: absolute; right: 

185px; bottom: 3px; font-weight: 600;color: #EC2D2D;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('robLossCountInt', 0))));
      var robLossPct = (GM_getValue('robLossCountInt', 0)/(GM_getValue('robWinCountInt', 0) + 

GM_getValue('robLossCountInt', 0)) * 100).toFixed(1);
        makeElement('div', mafiaLogBox, {'id':'robLossPct', 'style':'position: absolute; right: 

130px; bottom: 3px; font-weight: 100;color: #EC2D2D;'}).appendChild(document.createTextNode

((isNaN(robLossPct)) ? '0.0%' : robLossPct + '%'));
      break;

    case STAMINA_HOW_HITMAN:
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 33px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Hits:'));
      makeElement('div', mafiaLogBox, {'id':'hitmanCount', 'style':'position: absolute; right: 

185px; bottom: 33px; font-weight: 600;color: #BCD2EA;'}).appendChild(document.createTextNode

(makeCommaValue((GM_getValue('hitmanWinCountInt', 0) + GM_getValue('hitmanLossCountInt', 0)))));
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 18px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Succ:'));
      makeElement('div', mafiaLogBox, {'id':'hitmanWinCount', 'style':'position: absolute; right: 

185px; bottom: 18px; font-weight: 600;color: #52E259;'}).appendChild(document.createTextNode

(makeCommaValue(GM_getValue('hitmanWinCountInt', 0))));
      var hitmanWinPct = (GM_getValue('hitmanWinCountInt', 0)/(GM_getValue('hitmanWinCountInt', 

0) + GM_getValue('hitmanLossCountInt', 0)) * 100).toFixed(1);
        makeElement('div', mafiaLogBox, {'id':'hitmanWinPct', 'style':'position: absolute; right: 

130px; bottom: 18px; font-weight: 100;color: #52E259;'}).appendChild(document.createTextNode

((isNaN(hitmanWinPct)) ? '0.0%' : hitmanWinPct + '%'));
      makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 165px; bottom: 3px; 

font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Fail:'));
      makeElement('div', mafiaLogBox, {'id':'hitmanLossCount', 'style':'position: absolute; 

right: 185px; bottom: 3px; font-weight: 600;color: #EC2D2D;'}).appendChild

(document.createTextNode(makeCommaValue(GM_getValue('hitmanLossCountInt', 0))));
      var hitmanLossPct = (GM_getValue('hitmanLossCountInt', 0)/(GM_getValue('hitmanWinCountInt', 

1) + GM_getValue('hitmanLossCountInt', 0)) * 100).toFixed(1);
        makeElement('div', mafiaLogBox, {'id':'hitmanLossPct', 'style':'position: absolute; 

right: 130px; bottom: 3px; font-weight: 100;color: #EC2D2D;'}).appendChild

(document.createTextNode((isNaN(hitmanLossPct)) ? '0.0%' : hitmanLossPct + '%'));
      break;
      
    default:
      DEBUG('Neither Rob nor Hitman Stats');
      break;
  }


  makeElement('div', mafiaLogBox, {'id':'totalWinDollars', 'style':'position: absolute; right: 

5px; bottom: 18px; font-weight: 600;color: #52E259;'}).appendChild(document.createTextNode('$' + 

makeCommaValue(parseInt(GM_getValue('totalWinDollarsInt', 0)))));  //Accomodates up to 

$999,999,999,999
  makeElement('div', mafiaLogBox, {'id':'totalLossDollars', 'style':'position: absolute; right: 

5px; bottom: 3px; font-weight: 600;color: #EC2D2D;'}).appendChild(document.createTextNode('$' + 

makeCommaValue(parseInt(GM_getValue('totalLossDollarsInt', 0)))));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; left: 5px; bottom: 50px; font-

size: 11px; font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Exp 

Gained:'));
  makeElement('div', mafiaLogBox, {'id':'totalExp', 'style':'position: absolute; right: 329px; 

bottom: 50px; font-size: 11px; font-weight: 600;color: #52E259;'}).appendChild

(document.createTextNode(makeCommaValue(GM_getValue('totalExpInt', 0))));
  makeElement('hr', mafiaLogBox, {'style':'position: absolute; left: 0; bottom: 42px; height: 

1px; border: 0px; width: 90%; margin-left: 5%; color: #666666; background-color: #666666'});
  makeElement('div', mafiaLogBox, {'style':'position: absolute; right: 5px; bottom: 33px; font-

weight: 100;color: #666666;'}).appendChild(document.createTextNode('Total $ Won/Lost'));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; right: 267px; bottom: 50px; font

-size: 11px; font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Gain 

Rate:'));
  var rate = getStaminaGainRate();
    makeElement('div', mafiaLogBox, {'id':'expRate', 'style':'position: absolute; right: 240px; 

bottom: 50px; font-size: 11px; font-weight: 600;color: #04B4AE;'}).appendChild

(document.createTextNode(rate.toFixed(2)));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; right: 175px; bottom: 50px; font

-size: 11px; font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Nxt Lvl 

In:'));
  makeElement('div', mafiaLogBox, {'id':'expToNext', 'style':'position: absolute; right: 141px; 

bottom: 50px; font-size: 11px; font-weight: 600;color: #04B4AE;'}).appendChild

(document.createTextNode(makeCommaValue(ptsToNextLevel)));
  makeElement('div', mafiaLogBox, {'style':'position: absolute; right: 36px; bottom: 50px; font-

size: 11px; font-weight: 100;color: #666666;'}).appendChild(document.createTextNode('Stam Req\'d 

to Lvl:'));
  makeElement('div', mafiaLogBox, {'id':'stamToNext', 'style':'position: absolute; right: 2px; 

bottom: 50px; font-size: 11px; font-weight: 600;color: #04B4AE;'}).appendChild

(document.createTextNode(rate? (ptsToNextLevel / rate).toFixed(0) : 'n/a'));
}

function createSettingsBox() {
  if (document.getElementById('settingsBox')) return;

  if (!document.getElementById('ap_settings_css')) {
    makeElement('style', document.getElementsByTagName('head')[0], {'id':'ap_settings_css', 

'type':'text/css'}).appendChild(document.createTextNode(
      '#settingsBox #tabNav div{border-right:1px solid #000;float:left;padding:0 

7px;position:static;text-align:center}' +
      '#settingsBox #tabNav div.selected{background-image:url(' + stripURI(tabSelectedImage) + 

')}' +
      '#settingsBox #tabNav div a{color:#fff;font-weight:700}' +
      '#settingsBox .sexy_button{position:absolute;background-image:url(' + stripURI(redBgImage) 

+ ');border:1px solid #FFD927;color:#FFD927;cursor:pointer;display:block;float:left;font-

size:14px;font-weight:700;padding:5px;text-decoration:none;width:auto}' +
      '#settingsBox .sexy_button button{background:transparent;border:medium none 

#FFF;color:#FFD927;cursor:pointer;font-size:14px;font-weight:700;margin:0}' +
      '#settingsBox .sexy_button button:hover{color:#BCD2EA;font-weight:700;text-

decoration:none}' +
      '#settingsBox .tabcontent{display:none;height:420px;top:110px;width:600px}' +
      '#settingsBox div,#settingsBox select,#settingsBox textarea{position:absolute}' +
      '#settingsBox label {font-weight: normal; color: #BCD2EA}' +
      '#settingsBox #staminaTab div {position: static;}' +
      '#settingsBox #staminaTab select {position: static;}' +
      '#settingsBox #staminaTab textarea {position: static;}' +
      '#settingsBox #staminaTab input {position: static; margin: 0;}' +
      '#settingsBox #staminaTab .lhs {position: static; width: 40%; float: left; text-align: 

right; padding: 5px;}' +
      '#settingsBox #staminaTab .rhs {position: static; float: left; padding: 5px;}' +
      '#settingsBox #staminaTab .single {position: static; text-align: center}' +
      '#settingsBox #staminaTab .hide {clear: both; visibility: hidden;}' +
      '#settingsBox #energyTab div {position: static;}' +
      '#settingsBox #energyTab select {position: static;}' +
      '#settingsBox #energyTab textarea {position: static;}' +
      '#settingsBox #energyTab input {position: static; margin: 0;}' +
      '#settingsBox #energyTab .lhs {position: static; width: 35%; float: left; text-align: 

right; padding: 5px;}' +
      '#settingsBox #energyTab .rhs {position: static; float: left; padding: 5px;}' +
      '#settingsBox #energyTab .single {position: static; text-align: center}' +
      '#settingsBox #energyTab .hide {clear: both; visibility: hidden;}'
    ));
  }

  // This creates the settings box just like a myspace popup
  var elt = makeElement('div', document.body, {'class':'generic_dialog pop_dialog', 

'id':'GenDialogPopDialog'});
  elt = makeElement('div', elt, {'class':'generic_dialog_popup', 'style':'top: 30px; width: 

620px;'});
  elt = makeElement('div', elt, {'class':'pop_content popcontent_advanced', 'id':'pop_content'});
  var settingsBox = makeElement('div', elt, {'style':'position: relative; width: 600px; height: 

580px; font-size: 14px; color: #BCD2EA; background: black no-repeat scroll 0 110px', 

'id':'settingsBox'});
  //End settings box

  var settingsBoxTopBG = makeElement('div', settingsBox, {'style':'background: black; position: 

static; height: 80px;'});

    var settingsBoxTitle = makeElement('div', settingsBoxTopBG, {'style':'font-size: 18px; font-

weight: bold;'});
    makeElement('img', settingsBoxTopBG, {'src':stripURI(mwapLogo), 'style':'position: absolute; 

top: 0px; left: 0px;'});
    makeElement('img', settingsBoxTopBG, {'src':stripURI(closeButtonIcon), 'style':'position: 

absolute; top: 0px; right: 0px; cursor: pointer;'}).addEventListener('click', toggleSettings, 

false);


  // NOTE: Use the 1st line below to center the button bar, or the 2nd line
  //       to put the bar on the left side.
  //elt = makeElement('div', settingsBox, {'style':'position: static; margin-left: auto; margin-

right: auto; width: 100%; text-align: center'});
  elt = makeElement('div', settingsBox, {'style':'position: static; width: 100%; text-align: 

left'});

  var tabNav = makeElement('div', elt, {'id':'tabNav', 'style':'position: static; display: 

inline-block; background: transparent url(' + stripURI(redBgImage) + ') repeat-x scroll 0 0; 

border: 1px solid #FFFFFF; fontsize: 13px; line-height: 28px; height: 30px;'});
    var generalTabLink = makeElement('div', tabNav, {'class':'selected'});
      makeElement('a', generalTabLink, {'href':'#', 'rel':'generalTab'}).appendChild

(document.createTextNode('General'));
    var miscTabLink = makeElement('div', tabNav);
      makeElement('a', miscTabLink, {'href':'#', 'rel':'miscTab'}).appendChild

(document.createTextNode('Misc'));      
    var energyTabLink = makeElement('div', tabNav);
      makeElement('a', energyTabLink, {'href':'#', 'rel':'energyTab'}).appendChild

(document.createTextNode('Energy'));
    var staminaTabLink = makeElement('div', tabNav);
      makeElement('a', staminaTabLink, {'href':'#', 'rel':'staminaTab'}).appendChild

(document.createTextNode('Stamina'));
    var hitlistTabLink = makeElement('div', tabNav);
      makeElement('a', hitlistTabLink, {'href':'#', 'rel':'hitlistTab'}).appendChild

(document.createTextNode('Hitlist'));
    var propertyTabLink = makeElement('div', tabNav);
      makeElement('a', propertyTabLink, {'href':'#', 'rel':'propertyTab'}).appendChild

(document.createTextNode('Property'));
    var aboutTabLink = makeElement('div', tabNav);
      makeElement('a', aboutTabLink, {'href':'#', 'rel':'aboutTab'}).appendChild

(document.createTextNode('About'));

  var generalTab = makeElement('div', settingsBox, {'id':'generalTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(generalTabImage) + ')'});

  var autoClick = makeElement('div', generalTab, {'style':'top: 25px;'});
  makeElement('input', autoClick, {'type':'checkbox', 'id':'autoClick', 'value':'checked'}, 

'autoClick', 'checked');
  autoClick.appendChild(document.createTextNode('Enable auto-refresh '));
  makeElement('img', autoClick, {'style':'position: absolute; top: 5px; left: 200px', 

'src':stripURI(energyIcon)});

  var refreshTimes = makeElement('div', generalTab, {'style':'left: 20px; top: 50px;'});
  refreshTimes.appendChild(document.createTextNode('Refresh every '));
  makeElement('input', refreshTimes, {'type':'text', 'value':GM_getValue('r1', '30'), 'id':'r1', 

'size':'2'});
  refreshTimes.appendChild(document.createTextNode(' to '));
  makeElement('input', refreshTimes, {'type':'text', 'value':GM_getValue('r2', '110'), 'id':'r2', 

'size':'2'});
  refreshTimes.appendChild(document.createTextNode(' seconds'));

  var autoHeal = makeElement('div', generalTab, {'style':'top:75px;'});
  makeElement('input', autoHeal, {'type':'checkbox', 'id':'autoHeal', 'value':'checked'}, 

'autoHeal', 'checked');
  autoHeal.appendChild(document.createTextNode('Enable auto-heal '));
  makeElement('img', autoHeal, {'src':stripURI(healthIcon)});

  var healthLevel = makeElement('div', generalTab, {'style':'top: 100px; left: 20px;'});
  healthLevel.appendChild(document.createTextNode('Minimum health: '));
  makeElement('input', healthLevel, {'type':'text', 'style':'width: 30px;', 'value':GM_getValue

('healthLevel', '50'), 'id':'healthLevel', 'size':'1'});

  elt = makeElement('div', generalTab, {'style':'top: 100px; left: 180px'});
  title = 'Prevent others from being able to attack you by suspending auto-heal below 20 health. 

If this is set, adjust auto-heal accordingly (try ~29) or you may never end up in hospital.';
  id = 'hideInHospital';
  var hideInHospital = makeElement('input', elt, {'type':'checkbox', 'id':id, 'title':title, 

'style':'vertical-align:middle', 'value':'checked'}, 'hideInHospital');
  label = makeElement('label', elt, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Hide in hospital'));
  makeElement('img', elt, {'src':stripURI(hideIcon)});

  // Select location
  elt = makeElement('div', generalTab, {'style':'top: 125px; left: 20px'});
  elt.appendChild(document.createTextNode('Heal in: '));
  title = 'New York';
  id = 'healLocationNY';
  label = makeElement('label', elt, {'for':id, 'title':title});
  makeElement('input', label, {'type':'radio', 'name':'r4', 'id':id, 'title':title, 

'style':'vertical-align:top', 'value':'checked'}, 'healLocationNY');
  label.appendChild(document.createTextNode(title));
  title = 'Cuba';
  id = 'healLocationCuba';
  label = makeElement('label', elt, {'for':id, 'title':title});
  makeElement('input', label, {'type':'radio', 'name':'r4', 'id':id, 'title':title, 

'style':'vertical-align:top', 'value':'checked'}, 'healLocationCuba');
  label.appendChild(document.createTextNode(title));
  title = 'Moscow';
  id = 'healLocationMoscow';
  label = makeElement('label', elt, {'for':id, 'title':title});
  makeElement('input', label, {'type':'radio', 'name':'r4', 'id':id, 'title':title, 

'style':'vertical-align:top', 'value':'checked'}, 'healLocationMoscow');
  label.appendChild(document.createTextNode(title));
      
  // Idle-in location
  var item = makeElement('div', generalTab, {'style':'top: 130px; right: 86px;'});
  item.appendChild(document.createTextNode('Idle in :'));
  id = 'idleLocation';
  var idleLocation = makeElement('select', item, {'id':id});
  for (var i = 0, iLength=cities.length; i < iLength; i++) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(cities[i]));
    idleLocation.appendChild(choice);
  }
  idleLocation.selectedIndex = GM_getValue('idleLocation', NY);  
  
  var autoBank = makeElement('div', generalTab, {'style':'top: 150px;'});
  makeElement('input', autoBank, {'type':'checkbox', 'id':'autoBank', 'value':'checked'}, 

'autoBank');
  autoBank.appendChild(document.createTextNode('Enable NY banking '));
  makeElement('img', autoBank, {'src':stripURI(cashIcon)});
  makeElement('input', autoBank, {'type':'text', 'style':'width: 80px;margin-left:5px;', 

'title':'Minimum size for each deposit in New York', 'value':GM_getValue('bankConfig', '50000'), 

'id':'bankConfig', 'size':'5'});
  autoBank.addEventListener('change', minBankCheck, false);

  var autoBankCuba = makeElement('div', generalTab, {'style':'top: 175px;'});
  makeElement('input', autoBankCuba, {'type':'checkbox', 'id':'autoBankCuba', 'value':'checked'}, 

'autoBankCuba');
  autoBankCuba.appendChild(document.createTextNode('Enable Cuba banking '));
  makeElement('img', autoBankCuba, {'src':stripURI(cashCubaIcon)});
  makeElement('input', autoBankCuba, {'type':'text', 'style':'width: 80px;margin-left:5px;', 

'title':'Minimum size for each deposit in Cuba', 'value':GM_getValue('bankConfigCuba', '50000'), 

'id':'bankConfigCuba', 'size':'5'});
  autoBankCuba.addEventListener('change', minBankCheck, false);

  var autoBankMoscow = makeElement('div', generalTab, {'style':'top: 200px;'});
  makeElement('input', autoBankMoscow, {'type':'checkbox', 'id':'autoBankMoscow', 

'value':'checked'}, 'autoBankMoscow');
  autoBankMoscow.appendChild(document.createTextNode('Enable Moscow banking '));
  makeElement('img', autoBankMoscow, {'src':stripURI(cashMoscowIcon)});
  makeElement('input', autoBankMoscow, {'type':'text', 'style':'width: 80px;margin-left:5px;', 

'title':'Minimum size for each deposit in Moscow', 'value':GM_getValue('bankConfigMoscow', 

'50000'), 'id':'bankConfigMoscow', 'size':'5'});
  autoBankMoscow.addEventListener('change', minBankCheck, false);
  
  var autoPause = makeElement('div', generalTab, {'style':'top: 225px;'});
  makeElement('input', autoPause, {'type':'checkbox', 'id':'autoPause', 'value':'checked'}, 

'autoPause');
  autoPause.appendChild(document.createTextNode('Enable auto-pause'));
  autoPause.addEventListener('click', clickAutoPause, false);

  var autoPauseBefore = makeElement('div', generalTab, {'style':'top: 250px; left: 20px;'});
  makeElement('input', autoPauseBefore, {'type':'radio', 'name':'r3', 'id':'autoPauseBefore', 

'value':'checked'}, 'autoPauseBefore');
  autoPauseBefore.appendChild(document.createTextNode('Before level up'));

  var autoPauseAfter = makeElement('div', generalTab, {'style':'top: 250px; left: 150px;'});
  makeElement('input', autoPauseAfter, {'type':'radio', 'name':'r3', 'id':'autoPauseAfter', 

'value':'checked'}, 'autoPauseAfter');
  autoPauseAfter.appendChild(document.createTextNode('After level up'));

  var autoPauseExp = makeElement('div', generalTab, {'style':'top: 275px; left: 20px;'});
  autoPauseExp.appendChild(document.createTextNode('Experience left to pause at '));
  makeElement('input', autoPauseExp, {'type':'text', 'value':GM_getValue('autoPauseExp', '50'), 

'id':'autoPauseExp', 'size':'2'});

  lottoTitle = 'Plays free auto-generated lottery ticket daily'
  var autoLottoOpt = makeElement('div', generalTab, {'style':'top: 300px;'});
  makeElement('input', autoLottoOpt, {'type':'checkbox', 'id':'autoLottoOpt', 'title':lottoTitle, 

'value':'checked'}, 'autoLottoOpt');
  autoLottoOpt.appendChild(document.createTextNode('Enable auto-lotto'));

  var hideAds = makeElement('div', generalTab, {'style':'top: 325px;'});
  makeElement('input', hideAds, {'type':'checkbox', 'id':'hideAds', 'value':'checked'}, 

'hideAds');
  hideAds.appendChild(document.createTextNode('Hide advertising'));

  var moveEmailBar = makeElement('div', generalTab, {'style':'top: 350px;'});
  makeElement('input', moveEmailBar, {'type':'checkbox', 'id':'moveEmailBar', 'value':'checked'}, 

'moveEmailBar');
  moveEmailBar.appendChild(document.createTextNode('Move email options to the bottom'));

  notificationStopTitle = 'Handles undoing notification pop-ups alerting other users.';
  notificationID = 'notificationHandle';
  notificationLabel = makeElement('div', generalTab, {'id':'notificationLabel', 

'title':notificationStopTitle, 'style':'top: 375px; float: left; margin-left: 100px'});
  notificationLabel.appendChild(document.createTextNode('Undo which notifications'));
  var notificationHandle = makeElement('select', generalTab, {'id':notificationID, 

'title':notificationStopTitle, 'style':'top: 375px; width: 8em; display: block'}, 

'notificationLabel');
  var choice = document.createElement('option');
  choice.value = 0;
  choice.appendChild(document.createTextNode('None'));
  notificationHandle.appendChild(choice);
  choice = document.createElement('option');
  choice.value = 1;
  choice.appendChild(document.createTextNode('Fight/Rob'));
  notificationHandle.appendChild(choice);
  choice = document.createElement('option');
  choice.value = 2;
  choice.appendChild(document.createTextNode('All'));
  notificationHandle.appendChild(choice);
  if (GM_getValue('notificationHandle', 'unk') == 'unk') {
    GM_setValue('notificationHandle', 1);
  }
  notificationHandle.selectedIndex = GM_getValue('notificationHandle', 1);

  var acceptMafiaInvitations = makeElement('div', generalTab, {'style':'top: 400px;'});
  makeElement('input', acceptMafiaInvitations, {'type':'checkbox', 'id':'acceptMafiaInvitations', 

'value':'checked'}, 'acceptMafiaInvitations', 'checked');
  acceptMafiaInvitations.appendChild(document.createTextNode('Accept mafia invitations'));

  var autoLog = makeElement('div', generalTab, {'style':'top: 25px; right: 10px;'});
  autoLog.appendChild(document.createTextNode('Enable logging '));
  makeElement('input', autoLog, {'type':'checkbox', 'id':'autoLog', 'value':'checked'}, 

'autoLog');

  var logLength = makeElement('div', generalTab, {'style':'top: 50px; right: 10px;'});
  logLength.appendChild(document.createTextNode('Max # of messages in Log '));
  makeElement('input', logLength, {'type':'text', 'id':'autoLogLength', 'value':GM_getValue

('autoLogLength', '300'), 'size':'2'});

  var logPlayerUpdates = makeElement('div', generalTab, {'style':'top: 75px; right: 10px;'});
  logPlayerUpdates.appendChild(document.createTextNode('Log Player Updates '));
  makeElement('input', logPlayerUpdates, {'type':'checkbox', 'id':'logPlayerUpdates', 

'title':'Send Player Updates to Mafia Log', 'value':'checked'}, 'logPlayerUpdates');

  var logPlayerUpdatesMax = makeElement('div', generalTab, {'style':'top: 100px; right: 10px;'});
  logPlayerUpdatesMax.appendChild(document.createTextNode('Max # of updates '));
  makeElement('input', logPlayerUpdatesMax, {'type':'text', 'id':'logPlayerUpdatesMax', 

'value':GM_getValue('logPlayerUpdatesMax', '25'), 'size':'2'});


  var leftAlign = makeElement('div', generalTab, {'style':'right: 10px; top: 200px; text-

align:right;'});
  makeElement('input', leftAlign, {'type':'checkbox', 'id':'leftAlign', 'value':'checked'}, 

'leftAlign');
  leftAlign.appendChild(document.createTextNode('Align game to the left'));

  var delayTimes = makeElement('div', generalTab, {'style':'right: 10px; top: 225px; text-

align:right;'});
  delayTimes.appendChild(document.createTextNode('Delay '));
  makeElement('input', delayTimes, {'type':'text', 'value':GM_getValue('d1', '3'), 'id':'d1', 

'size':'2'});
  delayTimes.appendChild(document.createTextNode(' to '));
  makeElement('input', delayTimes, {'type':'text', 'value':GM_getValue('d2', '5'), 'id':'d2', 

'size':'2'});
  delayTimes.appendChild(document.createTextNode(' seconds'));
  makeElement('br', delayTimes);
  delayTimes.appendChild(document.createTextNode('in-between actions'));

  var autoHelp = makeElement('div', generalTab, {'style':'top: 275px; right: 10px;'});
  autoHelp.appendChild(document.createTextNode('Automatically Help on Jobs'));
  makeElement('input', autoHelp, {'type':'checkbox', 'id':'autoHelp', 'value':'checked'}, 

'autoHelp', 'checked');

//ATK
  var autoLog = makeElement('div', generalTab, {'style':'top: 300px; right: 10px;'});
  autoLog.appendChild(document.createTextNode('Enable Hourly Stats Updates [Beta]'));
  makeElement('input', autoLog, {'type':'checkbox', 'id':'hourlyStatsOpt', 'value':'checked'}, 

'hourlyStatsOpt');

  var autoGiftSkip = makeElement('div', generalTab, {'style':'top: 325px; right: 10px;'});
  autoGiftSkip.appendChild(document.createTextNode('Skip Gift Wall Posts'));
  makeElement('input', autoGiftSkip, {'type':'checkbox', 'id':'autoGiftSkipOpt', 

'value':'checked'}, 'autoGiftSkipOpt');

  title = 'Check if you want to ask for help automatically with jobs.';
  var autoAskJobHelp = makeElement('div', generalTab, {'style':' right: 10px; top: 350px;'});
  autoAskJobHelp.appendChild(document.createTextNode('Automatically ask for job help'));
  makeElement('input', autoAskJobHelp, {'type':'checkbox', 'id':'autoAskJobHelp', 'title':title, 

'value':'checked'}, 'autoAskJobHelp');

  title = 'Enter the minimum experience to ask for job help, or 0 for no minimum.';
  var autoAskJobHelpMinExp = makeElement('div', generalTab, {'style':' right: 10px; top: 

375px;'});
  autoAskJobHelpMinExp.appendChild(document.createTextNode('Minimum experience for job help '));
  makeElement('input', autoAskJobHelpMinExp, {'type':'text', 'value':GM_getValue

('autoAskJobHelpMinExp', '0'), 'id':'autoAskJobHelpMinExp', 'size':'2'});

  title = 'Enter a message to publish to your wall when asking for help with a job. If you don\'t 

want to publish to your wall, leave this blank.';
  var autoAskJobHelpMessage = makeElement('div', generalTab, {'style':' right: 10px; top: 

400px;'});
  autoAskJobHelpMessage.appendChild(document.createTextNode('Message to post on Wall for job help 

'));
  makeElement('input', autoAskJobHelpMessage, {'type':'text', 'value':GM_getValue

('autoAskJobHelpMessage', ''), 'id':'autoAskJobHelpMessage', 'size':'10'});
  
  // Create Misc tab.
  var miscTab = createMiscTab();
  settingsBox.appendChild(miscTab); 

  // Create energy tab.
  var energyTab = createEnergyTab();
  settingsBox.appendChild(energyTab);

  // Create stamina tab.
  var staminaTab = createStaminaTab();
  settingsBox.appendChild(staminaTab);

  // Create Hitlist tab.
  var hitlistTab = createHitlistTab();
  settingsBox.appendChild(hitlistTab);

  // Create Property tab.
  var propertyTab = makeElement('div', settingsBox, {'id':'propertyTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(propertyTabImage) + ')'});

  var autoBuy = makeElement('div', propertyTab, {'style':'top: 25px;'});
  makeElement('input', autoBuy, {'type':'checkbox', 'id':'autoBuy', 'value':'checked'}, 

'autoBuy');
  autoBuy.appendChild(document.createTextNode('Enable Auto-buy'));

  var selectProperties = makeElement('div', propertyTab, {'style':'top: 50px;'});
  selectPropertiesTitle = makeElement('span', selectProperties, {'style':'margin-left:6px;'});
  selectPropertiesTitle.appendChild(document.createTextNode('Select the properties you want to 

buy:'));
  makeElement('br', selectProperties);
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'abandoned', 

'value':'checked'}, 'abandoned', 'checked');
  selectProperties.appendChild(document.createTextNode('Abandoned Lot *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'commercial', 

'value':'checked'}, 'commercial', 'checked');
  selectProperties.appendChild(document.createTextNode('Commercial Block *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'downtown', 'value':'checked'}, 

'downtown', 'checked');
  selectProperties.appendChild(document.createTextNode('Prime Downtown Lot *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'beachfront', 

'value':'checked'}, 'beachfront', 'checked');
  selectProperties.appendChild(document.createTextNode('Beachfront Property *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'mike', 'value':'checked'}, 

'mike', 'checked');
  selectProperties.appendChild(document.createTextNode('Mafia Mike\'s *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'rent', 'value':'checked'}, 

'rent', 'checked');
  selectProperties.appendChild(document.createTextNode('Rent House *'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'restaurant', 

'value':'checked'}, 'restaurant');
  selectProperties.appendChild(document.createTextNode('Italian Restaurant'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'apartment', 

'value':'checked'}, 'apartment');
  selectProperties.appendChild(document.createTextNode('Apartment Complex'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'valu', 'value':'checked'}, 

'valu');
  selectProperties.appendChild(document.createTextNode('Valu-Mart'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'tourist', 'value':'checked'}, 

'tourist');
  selectProperties.appendChild(document.createTextNode('Marina Tourist Shops'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'office', 'value':'checked'}, 

'office');
  selectProperties.appendChild(document.createTextNode('Office Building'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'hotel', 'value':'checked'}, 

'hotel');
  selectProperties.appendChild(document.createTextNode('5-Star Hotel'));
  makeElement('br', selectProperties);
  makeElement('input', selectProperties, {'type':'checkbox', 'id':'casino', 'value':'checked'}, 

'casino');
  selectProperties.appendChild(document.createTextNode('Mega Casino'));
  makeElement('br', selectProperties);
  makeElement('br', selectProperties);
  selectPropertiesNote = makeElement('span', selectProperties, {'style':'margin-left:21px'});
  selectPropertiesNote.appendChild(document.createTextNode('* Properties that cannot be 

robbed'));

  title = 'Never spend below this amount of cash';
  var buyMinAmount = makeElement('div', propertyTab, {'style':'top: 50px; right: 10px;'});
  buyMinAmount.appendChild(document.createTextNode('Minimum cash: '));
  makeElement('input', buyMinAmount, {'type':'text', 'style':'width: 80px;', 'title':title, 

'value':GM_getValue('buyMinAmount', '0'), 'id':'buyMinAmount', 'size':'5'});

  var autoRepair = makeElement('div', propertyTab, {'style':'top: 100px; right: 10px;'});
  autoRepair.appendChild(document.createTextNode('Enable auto-repair property'));
  makeElement('input', autoRepair, {'type':'checkbox', 'id':'autoRepair', 'value':'checked'}, 

'autoRepair');

  var autoProtect = makeElement('div', propertyTab, {'style':'top: 125px; right: 10px;'});
  autoProtect.appendChild(document.createTextNode('Enable auto-protect property'));
  makeElement('input', autoProtect, {'type':'checkbox', 'id':'autoProtect', 'value':'checked'}, 

'autoProtect');

  var autoSellCrates = makeElement('div', propertyTab, {'style':'top: 150px; right: 10px;'});
  autoSellCrates.appendChild(document.createTextNode('Sell Cuban business output'));
  makeElement('input', autoSellCrates, {'type':'checkbox', 'id':'autoSellCrates', 

'value':'checked'}, 'autoSellCrates');

  var autoSellCratesMoscow = makeElement('div', propertyTab, {'style':'top: 175px; right: 

10px;'});
  autoSellCratesMoscow.appendChild(document.createTextNode('Sell Moscow business output'));
  makeElement('input', autoSellCratesMoscow, {'type':'checkbox', 'id':'autoSellCratesMoscow', 

'value':'checked'}, 'autoSellCratesMoscow');

  var collectNYTake = makeElement('div', propertyTab, {'style':'top: 200px; right: 10px;'});
  collectNYTake.appendChild(document.createTextNode('Automatically collect NY take'));
  makeElement('input', collectNYTake, {'type':'checkbox', 'id':'collectNYTake', 

'value':'checked'}, 'collectNYTake');

  var aboutTab = makeElement('div', settingsBox, {'id':'aboutTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(aboutTabImage) + ')'});
    var versionInfo = makeElement('div', aboutTab, {'style':'top: 25px;font-size: 18px; font-

weight: bold;'});
      versionInfo.appendChild(document.createTextNode('Version '+ SCRIPT.version));
      makeElement('br', versionInfo);
      versionInfo.appendChild(document.createTextNode('Build '+SCRIPT.build));

    var devs = makeElement('div', aboutTab, {'style':'top: 75px; left: 10px; font-size: 12px; 

font-weight: bold;'});
      devs.appendChild(document.createTextNode('Contributors:'));
      devList = makeElement('span', devs, {'style':'position: relative; left: 15px;'});
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('StevenD'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('CharlesD'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Eric Ortego'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Jeremy'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Liquidor'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('AK17710N'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Fragger'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('<x51>'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('CyB'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('int1'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Janos112'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('int2str'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Doonce'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Eric Layne'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Tanlis'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Cam'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('vmzildjian'));
      makeElement('br', devList);
      devList.appendChild(document.createTextNode('Scrotal'));

  // Create save button
  var saveButton = makeElement('span', settingsBox, {'class':'sexy_button', 'style':'left: 10px; 

bottom: 10px;'});
  makeElement('button', saveButton).appendChild(document.createTextNode('Save Settings'));
  saveButton.addEventListener('click', saveSettings, false);

  // Create Help button
  var helpButton = makeElement('span', settingsBox, {'class':'sexy_button', 'style':'left: 260px; 

bottom: 10px;'});
  makeElement('button', helpButton).appendChild(document.createTextNode('Help'));
  helpButton.addEventListener('click', helpSettings, false);

  // Create Update button
  var updateButton = makeElement('span', settingsBox, {'class':'sexy_button', 'style':'right: 

10px; bottom: 10px;'});
  makeElement('button', updateButton).appendChild(document.createTextNode('Check for Updates'));
  updateButton.addEventListener('click', updateScript, false);

//Tab code from:http://www.dynamicdrive.com/dynamicindex17/tabcontent.htm converted into a data 

URI
  makeElement('script', document.getElementsByTagName('head')[0], {'type':'text/javascript', 

'src':
    "data:application/x-

javascript;base64,Ly8qKiBUYWIgQ29udGVudCBzY3JpcHQgdjIuMC0gqSBEeW5hbWljIERyaXZlIERIVE1MIGNvZGUgbGl

icmFyeSAoaHR0cDovL3d3dy5keW5hbWljZHJpdmUuY29tKQ0KLy8qKiBVcGRhdGVkIE9jdCA3dGgsIDA3IHRvIHZlcnNpb24g

Mi4wLiBDb250YWlucyBudW1lcm91cyBpbXByb3ZlbWVudHM6DQovLyAgIC1BZGRlZCBBdXRvIE1vZGU6IFNjcmlwdCBhdXRvI

HJvdGF0ZXMgdGhlIHRhYnMgYmFzZWQgb24gYW4gaW50ZXJ2YWwsIHVudGlsIGEgdGFiIGlzIGV4cGxpY2l0bHkgc2VsZWN0ZW

QNCi8vICAgLUFiaWxpdHkgdG8gZXhwYW5kL2NvbnRyYWN0IGFyYml0cmFyeSBESVZzIG9uIHRoZSBwYWdlIGFzIHRoZSB0YWJ

iZWQgY29udGVudCBpcyBleHBhbmRlZC8gY29udHJhY3RlZA0KLy8gICAtQWJpbGl0eSB0byBkeW5hbWljYWxseSBzZWxlY3Qg

YSB0YWIgZWl0aGVyIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiB3aXRoaW4gaXRzIHBlZXJzLCBvciBpdHMgSUQgYXR0cmlidXRlI

ChnaXZlIHRoZSB0YXJnZXQgdGFiIG9uZSAxc3QpDQovLyAgIC1BYmlsaXR5IHRvIHNldCB3aGVyZSB0aGUgQ1NTIGNsYXNzbm

FtZSAic2VsZWN0ZWQiIGdldCBhc3NpZ25lZC0gZWl0aGVyIHRvIHRoZSB0YXJnZXQgdGFiJ3MgbGluayAoIkEiKSwgb3IgaXR

zIHBhcmVudCBjb250YWluZXINCi8vKiogVXBkYXRlZCBGZWIgMTh0aCwgMDggdG8gdmVyc2lvbiAyLjE6IEFkZHMgYSAidGFi

aW5zdGFuY2UuY3ljbGVpdChkaXIpIiBtZXRob2QgdG8gY3ljbGUgZm9yd2FyZCBvciBiYWNrd2FyZCBiZXR3ZWVuIHRhYnMgZ

HluYW1pY2FsbHkNCi8vKiogVXBkYXRlZCBBcHJpbCA4dGgsIDA4IHRvIHZlcnNpb24gMi4yOiBBZGRzIHN1cHBvcnQgZm9yIG

V4cGFuZGluZyBhIHRhYiB1c2luZyBhIFVSTCBwYXJhbWV0ZXIgKGllOiBodHRwOi8vbXlzaXRlLmNvbS90YWJjb250ZW50Lmh

0bT90YWJpbnRlcmZhY2VpZD0wKSANCg0KLy8vL05PIE5FRUQgVE8gRURJVCBCRUxPVy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v

Lw0KDQpmdW5jdGlvbiBkZHRhYmNvbnRlbnQodGFiaW50ZXJmYWNlaWQpew0KCXRoaXMudGFiaW50ZXJmYWNlaWQ9dGFiaW50Z

XJmYWNlaWQgLy9JRCBvZiBUYWIgTWVudSBtYWluIGNvbnRhaW5lcg0KCXRoaXMudGFicz1kb2N1bWVudC5nZXRFbGVtZW50Qn

lJZCh0YWJpbnRlcmZhY2VpZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKSAvL0dldCBhbGwgdGFiIGxpbmtzIHdpdGhpbiB

jb250YWluZXINCgl0aGlzLmVuYWJsZXRhYnBlcnNpc3RlbmNlPXRydWUNCgl0aGlzLmhvdHRhYnNwb3NpdGlvbnM9W10gLy9B

cnJheSB0byBzdG9yZSBwb3NpdGlvbiBvZiB0YWJzIHRoYXQgaGF2ZSBhICJyZWwiIGF0dHIgZGVmaW5lZCwgcmVsYXRpdmUgd

G8gYWxsIHRhYiBsaW5rcywgd2l0aGluIGNvbnRhaW5lcg0KCXRoaXMuY3VycmVudFRhYkluZGV4PTAgLy9JbmRleCBvZiBjdX

JyZW50bHkgc2VsZWN0ZWQgaG90IHRhYiAodGFiIHdpdGggc3ViIGNvbnRlbnQpIHdpdGhpbiBob3R0YWJzcG9zaXRpb25zW10

gYXJyYXkNCgl0aGlzLnN1YmNvbnRlbnRpZHM9W10gLy9BcnJheSB0byBzdG9yZSBpZHMgb2YgdGhlIHN1YiBjb250ZW50cyAo

InJlbCIgYXR0ciB2YWx1ZXMpDQoJdGhpcy5yZXZjb250ZW50aWRzPVtdIC8vQXJyYXkgdG8gc3RvcmUgaWRzIG9mIGFyYml0c

mFyeSBjb250ZW50cyB0byBleHBhbmQvY29udGFjdCBhcyB3ZWxsICgicmV2IiBhdHRyIHZhbHVlcykNCgl0aGlzLnNlbGVjdG

VkQ2xhc3NUYXJnZXQ9ImxpbmsiIC8va2V5d29yZCB0byBpbmRpY2F0ZSB3aGljaCB0YXJnZXQgZWxlbWVudCB0byBhc3NpZ24

gInNlbGVjdGVkIiBDU1MgY2xhc3MgKCJsaW5rcGFyZW50IiBvciAibGluayIpDQp9DQoNCmRkdGFiY29udGVudC5nZXRDb29r

aWU9ZnVuY3Rpb24oTmFtZSl7IA0KCXZhciByZT1uZXcgUmVnRXhwKE5hbWUrIj1bXjtdKyIsICJpIik7IC8vY29uc3RydWN0I

FJFIHRvIHNlYXJjaCBmb3IgdGFyZ2V0IG5hbWUvdmFsdWUgcGFpcg0KCWlmIChkb2N1bWVudC5jb29raWUubWF0Y2gocmUpKS

AvL2lmIGNvb2tpZSBmb3VuZA0KCQlyZXR1cm4gZG9jdW1lbnQuY29va2llLm1hdGNoKHJlKVswXS5zcGxpdCgiPSIpWzFdIC8

vcmV0dXJuIGl0cyB2YWx1ZQ0KCXJldHVybiAiIg0KfQ0KDQpkZHRhYmNvbnRlbnQuc2V0Q29va2llPWZ1bmN0aW9uKG5hbWUs

IHZhbHVlKXsNCglkb2N1bWVudC5jb29raWUgPSBuYW1lKyI9Iit2YWx1ZSsiO3BhdGg9LyIgLy9jb29raWUgdmFsdWUgaXMgZ

G9tYWluIHdpZGUgKHBhdGg9LykNCn0NCg0KZGR0YWJjb250ZW50LnByb3RvdHlwZT17DQoNCglleHBhbmRpdDpmdW5jdGlvbi

h0YWJpZF9vcl9wb3NpdGlvbil7IC8vUFVCTElDIGZ1bmN0aW9uIHRvIHNlbGVjdCBhIHRhYiBlaXRoZXIgYnkgaXRzIElEIG9

yIHBvc2l0aW9uKGludCkgd2l0aGluIGl0cyBwZWVycw0KCQl0aGlzLmNhbmNlbGF1dG9ydW4oKSAvL3N0b3AgYXV0byBjeWNs

aW5nIG9mIHRhYnMgKGlmIHJ1bm5pbmcpDQoJCXZhciB0YWJyZWY9IiINCgkJdHJ5ew0KCQkJaWYgKHR5cGVvZiB0YWJpZF9vc

l9wb3NpdGlvbj09InN0cmluZyIgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiaWRfb3JfcG9zaXRpb24pLmdldEF0dH

JpYnV0ZSgicmVsIikpIC8vaWYgc3BlY2lmaWVkIHRhYiBjb250YWlucyAicmVsIiBhdHRyDQoJCQkJdGFicmVmPWRvY3VtZW5

0LmdldEVsZW1lbnRCeUlkKHRhYmlkX29yX3Bvc2l0aW9uKQ0KCQkJZWxzZSBpZiAocGFyc2VJbnQodGFiaWRfb3JfcG9zaXRp

b24pIT1OYU4gJiYgdGhpcy50YWJzW3RhYmlkX29yX3Bvc2l0aW9uXS5nZXRBdHRyaWJ1dGUoInJlbCIpKSAvL2lmIHNwZWNpZ

mllZCB0YWIgY29udGFpbnMgInJlbCIgYXR0cg0KCQkJCXRhYnJlZj10aGlzLnRhYnNbdGFiaWRfb3JfcG9zaXRpb25dDQoJCX

0NCgkJY2F0Y2goZXJyKXthbGVydCgiSW52YWxpZCBUYWIgSUQgb3IgcG9zaXRpb24gZW50ZXJlZCEiKX0NCgkJaWYgKHRhYnJ

lZiE9IiIpIC8vaWYgYSB2YWxpZCB0YWIgaXMgZm91bmQgYmFzZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyDQoJCQl0aGlzLmV4

cGFuZHRhYih0YWJyZWYpIC8vZXhwYW5kIHRoaXMgdGFiDQoJfSwNCg0KCWN5Y2xlaXQ6ZnVuY3Rpb24oZGlyLCBhdXRvcnVuK

XsgLy9QVUJMSUMgZnVuY3Rpb24gdG8gbW92ZSBmb3dhcmQgb3IgYmFja3dhcmRzIHRocm91Z2ggZWFjaCBob3QgdGFiICh0YW

JpbnN0YW5jZS5jeWNsZWl0KCdmb3dhcmQvYmFjaycpICkNCgkJaWYgKGRpcj09Im5leHQiKXsNCgkJCXZhciBjdXJyZW50VGF

iSW5kZXg9KHRoaXMuY3VycmVudFRhYkluZGV4PHRoaXMuaG90dGFic3Bvc2l0aW9ucy5sZW5ndGgtMSk%

2FIHRoaXMuY3VycmVudFRhYkluZGV4KzEgOiAwDQoJCX0NCgkJZWxzZSBpZiAoZGlyPT0icHJldiIpew0KCQkJdmFyIGN1cnJ

lbnRUYWJJbmRleD0odGhpcy5jdXJyZW50VGFiSW5kZXg%2BMCk%

2FIHRoaXMuY3VycmVudFRhYkluZGV4LTEgOiB0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoLTENCgkJfQ0KCQlpZiAodHl

wZW9mIGF1dG9ydW49PSJ1bmRlZmluZWQiKSAvL2lmIGN5Y2xlaXQoKSBpcyBiZWluZyBjYWxsZWQgYnkgdXNlciwgdmVyc3Vz

IGF1dG9ydW4oKSBmdW5jdGlvbg0KCQkJdGhpcy5jYW5jZWxhdXRvcnVuKCkgLy9zdG9wIGF1dG8gY3ljbGluZyBvZiB0YWJzI

ChpZiBydW5uaW5nKQ0KCQl0aGlzLmV4cGFuZHRhYih0aGlzLnRhYnNbdGhpcy5ob3R0YWJzcG9zaXRpb25zW2N1cnJlbnRUYW

JJbmRleF1dKQ0KCX0sDQoNCglzZXRwZXJzaXN0OmZ1bmN0aW9uKGJvb2wpeyAvL1BVQkxJQyBmdW5jdGlvbiB0byB0b2dnbGU

gcGVyc2lzdGVuY2UgZmVhdHVyZQ0KCQkJdGhpcy5lbmFibGV0YWJwZXJzaXN0ZW5jZT1ib29sDQoJfSwNCg0KCXNldHNlbGVj

dGVkQ2xhc3NUYXJnZXQ6ZnVuY3Rpb24ob2Jqc3RyKXsgLy9QVUJMSUMgZnVuY3Rpb24gdG8gc2V0IHdoaWNoIHRhcmdldCBlb

GVtZW50IHRvIGFzc2lnbiAic2VsZWN0ZWQiIENTUyBjbGFzcyAoImxpbmtwYXJlbnQiIG9yICJsaW5rIikNCgkJdGhpcy5zZW

xlY3RlZENsYXNzVGFyZ2V0PW9ianN0ciB8fCAibGluayINCgl9LA0KDQoJZ2V0c2VsZWN0ZWRDbGFzc1RhcmdldDpmdW5jdGl

vbih0YWJyZWYpeyAvL1JldHVybnMgdGFyZ2V0IGVsZW1lbnQgdG8gYXNzaWduICJzZWxlY3RlZCIgQ1NTIGNsYXNzIHRvDQoJ

CXJldHVybiAodGhpcy5zZWxlY3RlZENsYXNzVGFyZ2V0PT0oImxpbmtwYXJlbnQiLnRvTG93ZXJDYXNlKCkpKT8gdGFicmVmL

nBhcmVudE5vZGUgOiB0YWJyZWYNCgl9LA0KDQoJdXJscGFyYW1zZWxlY3Q6ZnVuY3Rpb24odGFiaW50ZXJmYWNlaWQpew0KCQ

l2YXIgcmVzdWx0PXdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubWF0Y2gobmV3IFJlZ0V4cCh0YWJpbnRlcmZhY2VpZCsiPShcXGQ

rKSIsICJpIikpIC8vY2hlY2sgZm9yICI%

2FdGFiaW50ZXJmYWNlaWQ9MiIgaW4gVVJMDQoJCXJldHVybiAocmVzdWx0PT1udWxsKT8gbnVsbCA6IHBhcnNlSW50KFJlZ0V

4cC4kMSkgLy9yZXR1cm5zIG51bGwgb3IgaW5kZXgsIHdoZXJlIGluZGV4IChpbnQpIGlzIHRoZSBzZWxlY3RlZCB0YWIncyBp

bmRleA0KCX0sDQoNCglleHBhbmR0YWI6ZnVuY3Rpb24odGFicmVmKXsNCgkJdmFyIHN1YmNvbnRlbnRpZD10YWJyZWYuZ2V0Q

XR0cmlidXRlKCJyZWwiKSAvL0dldCBpZCBvZiBzdWJjb250ZW50IHRvIGV4cGFuZA0KCQkvL0dldCAicmV2IiBhdHRyIGFzIG

Egc3RyaW5nIG9mIElEcyBpbiB0aGUgZm9ybWF0ICIsam9obixnZW9yZ2UsdHJleSxldGMsIiB0byBlYXNpbHkgc2VhcmNoIHR

ocm91Z2gNCgkJdmFyIGFzc29jaWF0ZWRyZXZpZHM9KHRhYnJlZi5nZXRBdHRyaWJ1dGUoInJldiIpKT8gIiwiK3RhYnJlZi5n

ZXRBdHRyaWJ1dGUoInJldiIpLnJlcGxhY2UoL1xzKy8sICIiKSsiLCIgOiAiIg0KCQl0aGlzLmV4cGFuZHN1YmNvbnRlbnQoc

3ViY29udGVudGlkKQ0KCQl0aGlzLmV4cGFuZHJldmNvbnRlbnQoYXNzb2NpYXRlZHJldmlkcykNCgkJZm9yICh2YXIgaT0wOy

BpPHRoaXMudGFicy5sZW5ndGg7IGkrKyl7IC8vTG9vcCB0aHJvdWdoIGFsbCB0YWJzLCBhbmQgYXNzaWduIG9ubHkgdGhlIHN

lbGVjdGVkIHRhYiB0aGUgQ1NTIGNsYXNzICJzZWxlY3RlZCINCgkJCXRoaXMuZ2V0c2VsZWN0ZWRDbGFzc1RhcmdldCh0aGlz

LnRhYnNbaV0pLmNsYXNzTmFtZT0odGhpcy50YWJzW2ldLmdldEF0dHJpYnV0ZSgicmVsIik9PXN1YmNvbnRlbnRpZCk%

2FICJzZWxlY3RlZCIgOiAiIg0KCQl9DQoJCWlmICh0aGlzLmVuYWJsZXRhYnBlcnNpc3RlbmNlKSAvL2lmIHBlcnNpc3RlbmN

lIGVuYWJsZWQsIHNhdmUgc2VsZWN0ZWQgdGFiIHBvc2l0aW9uKGludCkgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQlkZHRh

YmNvbnRlbnQuc2V0Q29va2llKHRoaXMudGFiaW50ZXJmYWNlaWQsIHRhYnJlZi50YWJwb3NpdGlvbikNCgkJdGhpcy5zZXRjd

XJyZW50dGFiaW5kZXgodGFicmVmLnRhYnBvc2l0aW9uKSAvL3JlbWVtYmVyIHBvc2l0aW9uIG9mIHNlbGVjdGVkIHRhYiB3aX

RoaW4gaG90dGFic3Bvc2l0aW9uc1tdIGFycmF5DQoJfSwNCg0KCWV4cGFuZHN1YmNvbnRlbnQ6ZnVuY3Rpb24oc3ViY29udGV

udGlkKXsNCgkJZm9yICh2YXIgaT0wOyBpPHRoaXMuc3ViY29udGVudGlkcy5sZW5ndGg7IGkrKyl7DQoJCQl2YXIgc3ViY29u

dGVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnN1YmNvbnRlbnRpZHNbaV0pIC8vY2FjaGUgY3VycmVudCBzdWJjb

250ZW50IG9iaiAoaW4gZm9yIGxvb3ApDQoJCQlzdWJjb250ZW50LnN0eWxlLmRpc3BsYXk9KHN1YmNvbnRlbnQuaWQ9PXN1Ym

NvbnRlbnRpZCk%

2FICJibG9jayIgOiAibm9uZSIgLy8ic2hvdyIgb3IgaGlkZSBzdWIgY29udGVudCBiYXNlZCBvbiBtYXRjaGluZyBpZCBhdHR

yIHZhbHVlDQoJCX0NCgl9LA0KDQoJZXhwYW5kcmV2Y29udGVudDpmdW5jdGlvbihhc3NvY2lhdGVkcmV2aWRzKXsNCgkJdmFy

IGFsbHJldmlkcz10aGlzLnJldmNvbnRlbnRpZHMNCgkJZm9yICh2YXIgaT0wOyBpPGFsbHJldmlkcy5sZW5ndGg7IGkrKyl7I

C8vTG9vcCB0aHJvdWdoIHJldiBhdHRyaWJ1dGVzIGZvciBhbGwgdGFicyBpbiB0aGlzIHRhYiBpbnRlcmZhY2UNCgkJCS8vaW

YgYW55IHZhbHVlcyBzdG9yZWQgd2l0aGluIGFzc29jaWF0ZWRyZXZpZHMgbWF0Y2hlcyBvbmUgd2l0aGluIGFsbHJldmlkcyw

gZXhwYW5kIHRoYXQgRElWLCBvdGhlcndpc2UsIGNvbnRyYWN0IGl0DQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbGxy

ZXZpZHNbaV0pLnN0eWxlLmRpc3BsYXk9KGFzc29jaWF0ZWRyZXZpZHMuaW5kZXhPZigiLCIrYWxscmV2aWRzW2ldKyIsIikhP

S0xKT8gImJsb2NrIiA6ICJub25lIg0KCQl9DQoJfSwNCg0KCXNldGN1cnJlbnR0YWJpbmRleDpmdW5jdGlvbih0YWJwb3NpdG

lvbil7IC8vc3RvcmUgY3VycmVudCBwb3NpdGlvbiBvZiB0YWIgKHdpdGhpbiBob3R0YWJzcG9zaXRpb25zW10gYXJyYXkpDQo

JCWZvciAodmFyIGk9MDsgaTx0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoOyBpKyspew0KCQkJaWYgKHRhYnBvc2l0aW9u

PT10aGlzLmhvdHRhYnNwb3NpdGlvbnNbaV0pew0KCQkJCXRoaXMuY3VycmVudFRhYkluZGV4PWkNCgkJCQlicmVhaw0KCQkJf

Q0KCQl9DQoJfSwNCg0KCWF1dG9ydW46ZnVuY3Rpb24oKXsgLy9mdW5jdGlvbiB0byBhdXRvIGN5Y2xlIHRocm91Z2ggYW5kIH

NlbGVjdCB0YWJzIGJhc2VkIG9uIGEgc2V0IGludGVydmFsDQoJCXRoaXMuY3ljbGVpdCgnbmV4dCcsIHRydWUpDQoJfSwNCg0

KCWNhbmNlbGF1dG9ydW46ZnVuY3Rpb24oKXsNCgkJaWYgKHR5cGVvZiB0aGlzLmF1dG9ydW50aW1lciE9InVuZGVmaW5lZCIp

DQoJCQljbGVhckludGVydmFsKHRoaXMuYXV0b3J1bnRpbWVyKQ0KCX0sDQoNCglpbml0OmZ1bmN0aW9uKGF1dG9tb2RlcGVya

W9kKXsNCgkJdmFyIHBlcnNpc3RlZHRhYj1kZHRhYmNvbnRlbnQuZ2V0Q29va2llKHRoaXMudGFiaW50ZXJmYWNlaWQpIC8vZ2

V0IHBvc2l0aW9uIG9mIHBlcnNpc3RlZCB0YWIgKGFwcGxpY2FibGUgaWYgcGVyc2lzdGVuY2UgaXMgZW5hYmxlZCkNCgkJdmF

yIHNlbGVjdGVkdGFiPS0xIC8vQ3VycmVudGx5IHNlbGVjdGVkIHRhYiBpbmRleCAoLTEgbWVhbmluZyBub25lKQ0KCQl2YXIg

c2VsZWN0ZWR0YWJmcm9tdXJsPXRoaXMudXJscGFyYW1zZWxlY3QodGhpcy50YWJpbnRlcmZhY2VpZCkgLy9yZXR1cm5zIG51b

Gwgb3IgaW5kZXggZnJvbTogdGFiY29udGVudC5odG0%

2FdGFiaW50ZXJmYWNlaWQ9aW5kZXgNCgkJdGhpcy5hdXRvbW9kZXBlcmlvZD1hdXRvbW9kZXBlcmlvZCB8fCAwDQoJCWZvciA

odmFyIGk9MDsgaTx0aGlzLnRhYnMubGVuZ3RoOyBpKyspew0KCQkJdGhpcy50YWJzW2ldLnRhYnBvc2l0aW9uPWkgLy9yZW1l

bWJlciBwb3NpdGlvbiBvZiB0YWIgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQlpZiAodGhpcy50YWJzW2ldLmdldEF0dHJpY

nV0ZSgicmVsIikpew0KCQkJCXZhciB0YWJpbnN0YW5jZT10aGlzDQoJCQkJdGhpcy5ob3R0YWJzcG9zaXRpb25zW3RoaXMuaG

90dGFic3Bvc2l0aW9ucy5sZW5ndGhdPWkgLy9zdG9yZSBwb3NpdGlvbiBvZiAiaG90IiB0YWIgKCJyZWwiIGF0dHIgZGVmaW5

lZCkgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQkJdGhpcy5zdWJjb250ZW50aWRzW3RoaXMuc3ViY29udGVudGlkcy5sZW5n

dGhdPXRoaXMudGFic1tpXS5nZXRBdHRyaWJ1dGUoInJlbCIpIC8vc3RvcmUgaWQgb2Ygc3ViIGNvbnRlbnQgKCJyZWwiIGF0d

HIgdmFsdWUpDQoJCQkJdGhpcy50YWJzW2ldLm9uY2xpY2s9ZnVuY3Rpb24oKXsNCgkJCQkJdGFiaW5zdGFuY2UuZXhwYW5kdG

FiKHRoaXMpDQoJCQkJCXRhYmluc3RhbmNlLmNhbmNlbGF1dG9ydW4oKSAvL3N0b3AgYXV0byBjeWNsaW5nIG9mIHRhYnMgKGl

mIHJ1bm5pbmcpDQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlpZiAodGhpcy50YWJzW2ldLmdldEF0dHJpYnV0ZSgi

cmV2IikpeyAvL2lmICJyZXYiIGF0dHIgZGVmaW5lZCwgc3RvcmUgZWFjaCB2YWx1ZSB3aXRoaW4gInJldiIgYXMgYW4gYXJyY

XkgZWxlbWVudA0KCQkJCQl0aGlzLnJldmNvbnRlbnRpZHM9dGhpcy5yZXZjb250ZW50aWRzLmNvbmNhdCh0aGlzLnRhYnNbaV

0uZ2V0QXR0cmlidXRlKCJyZXYiKS5zcGxpdCgvXHMqLFxzKi8pKQ0KCQkJCX0NCgkJCQlpZiAoc2VsZWN0ZWR0YWJmcm9tdXJ

sPT1pIHx8IHRoaXMuZW5hYmxldGFicGVyc2lzdGVuY2UgJiYgc2VsZWN0ZWR0YWI9PS0xICYmIHBhcnNlSW50KHBlcnNpc3Rl

ZHRhYik9PWkgfHwgIXRoaXMuZW5hYmxldGFicGVyc2lzdGVuY2UgJiYgc2VsZWN0ZWR0YWI9PS0xICYmIHRoaXMuZ2V0c2VsZ

WN0ZWRDbGFzc1RhcmdldCh0aGlzLnRhYnNbaV0pLmNsYXNzTmFtZT09InNlbGVjdGVkIil7DQoJCQkJCXNlbGVjdGVkdGFiPW

kgLy9TZWxlY3RlZCB0YWIgaW5kZXgsIGlmIGZvdW5kDQoJCQkJfQ0KCQkJfQ0KCQl9IC8vRU5EIGZvciBsb29wDQoJCWlmICh

zZWxlY3RlZHRhYiE9LTEpIC8vaWYgYSB2YWxpZCBkZWZhdWx0IHNlbGVjdGVkIHRhYiBpbmRleCBpcyBmb3VuZA0KCQkJdGhp

cy5leHBhbmR0YWIodGhpcy50YWJzW3NlbGVjdGVkdGFiXSkgLy9leHBhbmQgc2VsZWN0ZWQgdGFiIChlaXRoZXIgZnJvbSBVU

kwgcGFyYW1ldGVyLCBwZXJzaXN0ZW50IGZlYXR1cmUsIG9yIGNsYXNzPSJzZWxlY3RlZCIgY2xhc3MpDQoJCWVsc2UgLy9pZi

BubyB2YWxpZCBkZWZhdWx0IHNlbGVjdGVkIGluZGV4IGZvdW5kDQoJCQl0aGlzLmV4cGFuZHRhYih0aGlzLnRhYnNbdGhpcy5

ob3R0YWJzcG9zaXRpb25zWzBdXSkgLy9KdXN0IHNlbGVjdCBmaXJzdCB0YWIgdGhhdCBjb250YWlucyBhICJyZWwiIGF0dHIN

CgkJaWYgKHBhcnNlSW50KHRoaXMuYXV0b21vZGVwZXJpb2QpPjUwMCAmJiB0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoP

jEpew0KCQkJdGhpcy5hdXRvcnVudGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0YWJpbnN0YW5jZS5hdXRvcnVuKCl9LC

B0aGlzLmF1dG9tb2RlcGVyaW9kKQ0KCQl9DQoJfSAvL0VORCBpbnQoKSBmdW5jdGlvbg0KDQp9IC8vRU5EIFByb3RvdHlwZSB

hc3NpZ25tZW50"
  }).appendChild(document.createTextNode(
    '/***********************************************\n' +
    '* Tab Content script v2.2- © Dynamic Drive DHTML code library (www.dynamicdrive.com)\n' +
    '* This notice MUST stay intact for legal use\n' +
    '* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code\n' +
    '***********************************************/\n'
  ));
  makeElement('script', document.getElementsByTagName('head')[0], 

{'type':'text/javascript'}).appendChild(document.createTextNode(
    'var tabs=new ddtabcontent("tabNav"); //enter ID of Tab Container\n' +
    'tabs.setpersist(true); //toogle persistence of the tabs\' state\n' +
    'tabs.setselectedClassTarget("linkparent"); //"link" or "linkparent"\n' +
    'tabs.init();'
  ));


  DEBUG('Menu created.');
}

function createMiscTab() {
  var elt, title, id, label;
  var miscTab = makeElement('div', null, {'id':'miscTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(generalTabImage) + ')'});
  
  var autoStats = makeElement('div', miscTab, {'style':'text-align: right; top: 5px; right: 

430px;'});
  makeElement('img', autoStats, {'src':stripURI(plussignIcon)});
  autoStats.appendChild(document.createTextNode('Enable auto-stat '));
  makeElement('input', autoStats, {'type':'checkbox','style':'vertical-align: middle', 

'id':'autoStat', 'value':'checked'}, 'autoStat');  
  
  title = 'Disable AutoStat when status goals are reached';
  id = 'autoStatDisable';
  var divStatDisable = makeElement('div', miscTab, {'style':'text-align: right; top: 7px; left: 

200px; '});
  elt = makeElement('input', divStatDisable, {'type':'checkbox', 'style':'vertical-align: 

middle', 'id':id, 'title':title, 'style':'vertical-align: middle', 'value':'checked'}, 

'autoStatDisable');
  label = makeElement('label', divStatDisable, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Disable auto-stat when status goals are reached'));
      
  // Display Adjustments  
  var xTop = 35;
  var yLeft = 10;

  var yLeftCur = yLeft + 10;
  var xTopCur = xTop;

  // Status Labels
  var yLeftCur = yLeft + 10;
  var xTopCur = xTop + 2;

  // Stat labels
  for (var i = 0, iLength=autoStatRatios.length; i < iLength; ++i ) {
    var div = makeElement('div', miscTab, {'style':'top:' + xTopCur + 'px; left:' + yLeftCur + 

'px;'});
    div.appendChild(document.createTextNode(autoStatDescrips[i + 1]));
    
    xTopCur += 25;
  }
  
  // Status ratio
  var yLeftCur = yLeft + 75;
  var xTopCur = xTop;  
  
  for (var i = 0, iLength=autoStatRatios.length; i < iLength; ++i ) {
    var title = 'Please set ratio of' + autoStatDescrips[i + 1] + ' stat';
    var id = autoStatRatios[i];    
    var div = makeElement('div', miscTab, {'style':'top:' + xTopCur + 'px; left:' + yLeftCur + 

'px;'});
    div.appendChild(document.createTextNode(' = '));
    makeElement('input', div, {'type':'text', 'style':'width: 40px;', 'value':GM_getValue(id, 0), 

'id':id, 'size':'1'});    
    div.appendChild(document.createTextNode(' x '));

    xTopCur += 25;
  }

  // Status Allocation Mode Settings
  var yLeftCur = yLeft + 150;
  var xTopCur = xTop;

  for (var i = 0, iLength=autoStatModes.length; i < iLength; ++i ) {
    var title = 'Please select where to base ' + autoStatDescrips[i + 1] + ' stat';
    var id = autoStatModes[i];
    var sel = makeElement('select', miscTab, {'id':id, 'title':title, 'style':'width:60px; top: ' 

+ xTopCur + 'px; left: ' + yLeftCur + 'px;'});  
    xTopCur += 25;
    for (var j = 0, jLength=autoStatDescrips.length; j < jLength; ++j) {
      var choice = document.createElement('option');
      choice.value = j;
      choice.appendChild(document.createTextNode(autoStatDescrips[j]));
      sel.appendChild(choice);
    }
    sel.selectedIndex = GM_getValue(autoStatModes[i], 0);
  }

  // Status base
  var yLeftCur = yLeft + 215;
  var xTopCur = xTop;

  for (var i = 0, iLength=autoStatBases.length; i < iLength; ++i ) {
    var id = autoStatBases[i];
    var div = makeElement('div', miscTab, {'style':'top:' + xTopCur + 'px; left:' + yLeftCur + 

'px;'});
    div.appendChild(document.createTextNode(' + '));
    makeElement('input', div, {'type':'text', 'style':'width: 40px;', 'value':GM_getValue(id, 0), 

'id':id, 'size':'1'});    
    xTopCur += 25;
  }

  // Left-over points  
  var yLeftCur = yLeft + 280;
  var xTopCur = xTop;

  for (var i = 0, iLength=autoStatFallbacks.length; i < iLength; ++i ) {
    var title = 'Check this to distribute points to ' + autoStatDescrips[i + 1] + ' when goals 

are reached';
    var id = autoStatFallbacks[i];
    var div = makeElement('div', miscTab, {'style':'top: ' + xTopCur + 'px; left:' + yLeftCur + 

'px; '});
    makeElement('input', div, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align: middle', 'value':'checked'}, autoStatFallbacks[i]);
    var label = makeElement('label', div, {'for':id, 'title':title});
    label.appendChild(document.createTextNode(' Use ' + autoStatDescrips[i+1] + ' as fallback'));
    xTopCur += 25;
  }
  
  // Priority Settings
  title = 'Please select priority level for stat distribution';
  var yLeftCur = yLeft + 460;
  var xTopCur = xTop;  
  
  for (var i = 0, iLength=autoStatPrios.length; i < iLength; ++i ) {
    var id = autoStatPrios[i]; 
    var sel = makeElement('select', miscTab, {'id':id, 'title':title,'style':' top: ' + xTopCur + 

'px; left: ' + yLeftCur + 'px;'});  
    xTopCur += 25;
    for (var j = 0, jLength=autoStatRatios.length; j < jLength; ++j) {
      var choice = document.createElement('option');
      choice.value = j;
      choice.appendChild(document.createTextNode('Priority ' + (j + 1)));
      sel.appendChild(choice);      
    }
    sel.selectedIndex = GM_getValue(autoStatPrios[i], 0);
  }
   
  title = 'Check this to enable log-filtering';
  id = 'filterLog';
  var filterLog = makeElement('div', miscTab, {'style':'text-align: right; top: ' + (xTop + 155) 

+ 'px; right: 430px;'});
  makeElement('img', filterLog, {'src':stripURI(goodIcon)});
  filterLog.appendChild(document.createTextNode('Enable log-filtering'));
  makeElement('input', filterLog, {'type':'checkbox','style':'vertical-align: middle', 

'title':title, 'id':id, 'value':'checked'}, id);  
  
  var filterPass = makeElement('div', miscTab, {'style':'text-align: left; top: ' + (xTop + 180) 

+ 'px; left: 20px;'});
  var filterFail = makeElement('div', miscTab, {'style':'text-align: left; top: ' + (xTop + 275) 

+ 'px; left: 20px;'});
  
  makeElement('label', filterPass, {'style':'font-size: small;'}).appendChild

(document.createTextNode(' Patterns to accept:'));
  makeElement('br', filterPass);
  makeElement('textarea', filterPass, {'style':'position: static; width: 15em; height: 6em;', 

'id':'logFilterPass', 'title':'Enter each pattern on a separate line.'}).appendChild

(document.createTextNode(GM_getValue('logFilterPass', defaultLogPass.join('\n'))));
 
  makeElement('label', filterFail, {'style':'font-size: small;'}).appendChild

(document.createTextNode(' Patterns to reject:'));
  makeElement('br', filterFail);
  makeElement('textarea', filterFail, {'style':'position: static; width: 15em; height: 6em;', 

'id':'logFilterFail', 'title':'Enter each pattern on a separate line.'}).appendChild

(document.createTextNode(GM_getValue('logFilterFail', defaultLogFail.join('\n'))));
  makeElement('br', filterFail);
  makeElement('font', filterFail, {'style':'font-size: small;'}).appendChild

(document.createTextNode('Enter each pattern on a separate line.'));    

  return miscTab;
}

function createEnergyTab() {
  var elt, title, id, label;
  var energyTab = makeElement('div', null, {'id':'energyTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(energyTabImage) + ')'});

  // Container for a list of settings.
  var list = makeElement('div', energyTab, {'style':'position: relative; top: 10px; margin-left: 

auto; margin-right: auto; width: 95%; line-height:125%;'});

  // How to spend energy
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Spend energy automatically.';
  id = 'autoMission';
  makeElement('input', lhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle', 'value':'checked'}, 'autoMission');
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Spend energy to:'));
  title = ' Master jobs one at a time';
  id = 'masterAllJobs';
  label = makeElement('label', rhs, {'for':id, 'title':title});
  var masterAllJobs = makeElement('input', label, {'type':'radio', 'name':'r5', 'id':id, 

'title':title, 'style':'vertical-align:middle', 'value':'checked'});
  masterAllJobs.defaultChecked = true;
  label.appendChild(document.createTextNode(title));
  makeElement('br', rhs);
  title = ' Perform any combination of jobs';
  id = 'multipleJobs';
  label = makeElement('label', rhs, {'for':id, 'title':title});
  var multipleJobs = makeElement('input', label, {'type':'radio', 'name':'r5', 'id':id, 

'title':title, 'style':'vertical-align:middle', 'value':'checked'}, 'multipleJobs');
  label.appendChild(document.createTextNode(title));

  //
  // Job selector.
  //
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = '...set by handler...';
  id = 'selectMission';
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('...set by handler...'));
  var selectMission = makeElement('select', rhs, {'id':id, 'title':title});
  if (GM_getValue('multipleJobs') == 'checked') {
    selectMission.setAttribute('multiple', 'multiple');
  }
  var selectMissionLabel = label;

  // Create the rows of the list.
  var cityno = -1;
  var tabno = -1;
  var choice;
  var energyBonus = 1 - (GM_getValue('selectEnergyBonus', 0) / 100);
  var expBonusMultiplier = 1 + (GM_getValue('selectExpBonus', 0) / 100);
  for (var i = 0, iLength=missions.length; i < iLength; ++i) {
    var mission = missions[i];
    if (mission[4] != cityno) {
      // Add a row for the city.
      cityno = mission[4];
      choice = document.createElement('optgroup');
      choice.label = cities[cityno].toUpperCase() + ' MISSIONS';
      choice.className = 'ap_optgroup1';
      selectMission.appendChild(choice);
    }
    if (mission[3] != tabno) {
      // Add a row for the tab.
      tabno = mission[3];
      choice = document.createElement('optgroup');
      choice.label = missionTabs[cityno][tabno - 1];
      choice.className = 'ap_optgroup2';
      selectMission.appendChild(choice);
    }

    // Determine the job's experience-to-energy ratio.
    // FIXME: Should somehow combine with calcEnergyCost()
    var cost = mission[1];
    if (cost > 5) {
      cost = Math.floor(cost * energyBonus);
    }
    var reward = mission[5];
    if (GM_getValue('hasPrivateIsland') == 'checked') {
      reward = Math.round(reward * 1.05);
    }
    reward = Math.floor(reward * expBonusMultiplier);
    var ratio = Math.round(reward / cost * 100) / 100;

    // Add a row for the job.
    var choice = document.createElement('option');
    choice.text = mission[0] + ' (' + parseFloat(ratio) + ')';
    if (GM_getValue('multipleJobs') == 'checked' &&
        getSavedList('selectMissionMultiple').indexOf(String(i)) != -1) {
      choice.selected = true;
    }
    selectMission.appendChild(choice);
  }
  if (GM_getValue('multipleJobs') != 'checked') {
    selectMission.selectedIndex = GM_getValue('selectMission', 1);
  }

  // Handler to change selection style (multiple vs. single)
  var handler = function() {
    if (multipleJobs.checked) {
      var labelText = 'Job selection:';
      var title = 'Select one or more jobs to perform. Jobs will be performed in an automatically 

optimized order.';
      selectMissionLabel.firstChild.nodeValue = labelText;
      selectMissionLabel.title = title;
      selectMission.title = title;
      selectMission.setAttribute('multiple', 'multiple');
      selectMission.style.height = '170px';
    } else {
      var labelText = 'Next job to master:';
      var title = 'Select the next job to master. Once mastered, another job will be picked 

automatically.';
      selectMissionLabel.firstChild.nodeValue = labelText;
      selectMissionLabel.title = title;
      selectMission.title = title;
      selectMission.removeAttribute('multiple');
      selectMission.style.height = '';
    }
  }
  handler();
  masterAllJobs.addEventListener('change', handler, false);
  multipleJobs.addEventListener('change', handler, false);


  // Wait for full energy?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Perform jobs only when energy is completely full.';
  id = 'waitForFull';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'waitForFull');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Perform jobs only when energy is full'));

  // Spend energy packs?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Spend energy packs if it will not waste any energy, as determined by the estimated job 

ratio setting and your stamina statistics.';
  id = 'autoEnergyPack';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'autoEnergyPack');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Spend energy packs'));

  // Estimated xp-to-energy ratio for jobs.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Estimate the average experience-to-energy ratio of the jobs you will be performing. 

For example, a job that paid 10 experience points and required 5 energy would have a ratio of 2. 

Enter 0 if you prefer to have energy packs fire regardless of waste.';
  id = 'estimateJobRatio';
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Estimated job ratio:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'maxlength':4, 

'style':'width: 30px; border: 1px solid #781351', 'value':GM_getValue('estimateJobRatio', '1'), 

'size':'1'});

  // Periodically send energy packs?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Periodically send energy packs to your fellow mafia members.';
  id = 'sendEnergyPack';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle', 'value':'checked'}, 'sendEnergyPack');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Send energy packs to my mafia'));

  // Horizontal line
  //var item = makeElement('div', list);
  //makeElement('hr', item, {'style':'width: 100%'});

  // Maniac character type?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Check this box if your character type is Maniac (as opposed to Fearless or Mogul).';
  id = 'isManiac';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'isManiac', 'checked');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Character type is Maniac'));

  // Mastery items owned.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Check the mastery items you already own.',
  label = makeElement('label', lhs, {'title':title});
  label.appendChild(document.createTextNode('Job mastery items owned:'));
  title = 'Check this if you were awarded the Helicopter for mastering all Consigliere jobs.';
  id = 'hasHelicopter';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'hasHelicopter');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Helicopter  '));
  title = 'Check this if you were awarded the Private Island for mastering all Underboss jobs.';
  id = 'hasPrivateIsland';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'hasPrivateIsland');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Private Island  '));
  title = 'Check this if you were awarded the Golden Throne for mastering all Boss jobs.';
  id = 'hasGoldenThrone';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'hasGoldenThrone');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Golden Throne'));

  return energyTab;
}

function createStaminaTab() {
  var elt, title, id, label;
  var staminaTab = makeElement('div', null, {'id':'staminaTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(staminaTabImage) + ')'});

  // Container for a list of settings.
  var list = makeElement('div', staminaTab, {'style':'position: relative; top: 10px; margin-left: 

auto; margin-right: auto; width: 95%; line-height:125%;'});

  //
  // How to spend stamina (fight/rob/hitlist).
  //
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});

  title = 'Spend stamina automatically.';
  id = 'staminaSpend';
  makeElement('input', lhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle', 'value':'checked'}, 'staminaSpend');
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Spend stamina to:'));

  id = 'staminaSpendHow';
  var staminaSpendHow = makeElement('select', rhs, {'id':id});
  for (var i = 0, iLength=staminaSpendChoices.length; i < iLength; ++i) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(staminaSpendChoices[i]));
    staminaSpendHow.appendChild(choice);
  }

  // Bordered container for varying settings content.
  var staminaTabSub = makeElement('div', list, {'id':'staminaTabSub', 'style':'position: static; 

border: 1px inset #FFD927; margin-left: auto; margin-right: auto; margin-top: 5px; margin-bottom: 

5px;'});
  
  // Spend stamina percentage
  var item = makeElement('div', list, {'class':'single'});
  title = 'Start spending stamina when stamina percentage is reached';
  id = 'selectStaminaUse';
  item.appendChild(document.createTextNode('Start spending stamina when '));
  var elt = makeElement('select', item, {'id':id, 'title':title});
  for (i = 100; i >= 0; i -= 10) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(i + '%'));
    elt.appendChild(choice);
  }
  if (GM_getValue(id, 'NotSet') == 'NotSet' ||
      GM_getValue(id, 0) > elt.length - 1) {
    GM_setValue(id, elt.length - 1);
  }
  elt.selectedIndex = GM_getValue(id, 0);
  item.appendChild(document.createTextNode(' of stamina is accumulated.'));

  // Stamina to reserve for manual play.
  var item = makeElement('div', list, {'class':'single'});
  title = 'Suspend automatic play below this level of stamina.';
  id = 'selectStaminaKeep';
  item.appendChild(document.createTextNode('Reserve '));
  var elt = makeElement('select', item, {'id':id, 'title':title});
  for (i = 100; i >= 0; i -= 10) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(i + '%'));
    elt.appendChild(choice);
  }
  if (GM_getValue('selectStaminaKeep', 'NotSet') == 'NotSet' ||
      GM_getValue('selectStaminaKeep', 0) > elt.length - 1) {
    GM_setValue('selectStaminaKeep', elt.length - 1);
  }
  elt.selectedIndex = GM_getValue('selectStaminaKeep', 0);
  item.appendChild(document.createTextNode(' of stamina for manual play.'));

  // Level up
  var item = makeElement('div', list, {'class':'single'});
  title = 'Ignore minimum stamina settings if a level up is within reach.';
  id = 'allowStaminaToLevelUp';
  makeElement('input', item, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle', 'value':'checked'}, 'allowStaminaToLevelUp');
  label = makeElement('label', item, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Don\'t reserve stamina if within reach of the next 

level.'));

  //
  // Settings for random fighting
  //

  // Container for a list of settings.
  var list = makeElement('div', staminaTabSub, {'id':'fightRandomSub', 'style':'position: static; 

margin-left: auto; margin-right: auto; width: 100%; line-height:125%; display: none;'});

  // Location setting
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  lhs.appendChild(document.createTextNode('Fight in:'));
  id = 'fightRandomLoc';
  var fightRandomLoc = makeElement('select', rhs, {'id':id});
  for (var i = 0, iLength=cities.length; i < iLength; ++i) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(cities[i]));
    fightRandomLoc.appendChild(choice);
  }
  fightRandomLoc.selectedIndex = GM_getValue('fightLocation', NY);

  // Maximum level.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Avoid opponents higher than this level.';
  id = 'fightLevelMax';
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Maximum level:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'maxlength':5, 

'style':'width: 30px; border: 1px solid #781351', 'value':GM_getValue('fightLevelMax', '100'), 

'size':'1'});

  // Maximum level relative?
  title = 'Make the maximum level be relative to your own. For example, if your level is 10, and 

maximum level is set to 5, opponents higher than level 15 will be avoided.';
  id = 'fightLevelMaxRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'fightLevelMaxRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Add my level'));

  // Maximum mafia size.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  id = 'fightMafiaMax';
  title = 'Avoid opponents with mafia sizes larger than this.',
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Maximum mafia:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'style':'width: 30px; border: 

1px solid #781351', 'value':GM_getValue('fightMafiaMax', '501'), 'size':'1'});

  // Maximum mafia relative?
  title = 'Make the maximum mafia size be relative to your own. For example, if you have 300 

mafia members, and maximum mafia is set to 50, opponents with more than 350 mafia members will be 

avoided.';
  id = 'fightMafiaMaxRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'fightMafiaMaxRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Add my mafia size'));

  // Minimum mafia size.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  id = 'fightMafiaMin';
  title = 'Avoid opponents with mafia sizes smaller than this.',
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Minimum mafia:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'style':'width: 30px; border: 

1px solid #781351', 'value':GM_getValue('fightMafiaMin', '1'), 'size':'1'});

  // Maximum mafia relative?
  title = 'Make the minimum mafia size be relative to your own. For example, if you have 300 

mafia members, and minimum mafia is set to 50, opponents with less than 250 mafia members will be 

avoided.';
  id = 'fightMafiaMinRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'fightMafiaMinRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Subtract from my mafia size'));

  // Use stealth fighting?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Prefer opponents who won\'t be notified of your attacks.';
  id = 'fightStealth';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'fightStealth', 'checked');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Use fight stealth'));

  // Avoid Top Mafia bodyguards?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Avoid opponents known to be Top Mafia bodyguards. This may ' +
          'decrease the frequency of losses due to critical hits.';
  id = 'fightAvoidBodyguards';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'fightAvoidBodyguards', 'checked');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Avoid Top Mafia bodyguards'));

  // Family names
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Avoid random opponents whose names contain specific patterns.';
  id = 'fightAvoidNames';
  makeElement('input', lhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'fightAvoidNames', 0);
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Avoid mafia families:'));
  makeElement('textarea', rhs, {'style':'position: static; width: 15em; height: 8em;', 

'id':'fightClanName', 'title':'Enter each pattern (such as a clan name) on a separate 

line.'}).appendChild(document.createTextNode(GM_getValue('clanName', defaultClans.join('\n'))));;
  makeElement('br', rhs);
  makeElement('font', rhs, {'style':'font-size: small;'}).appendChild(document.createTextNode

('Enter each name pattern on a separate line.'));
  // End of options specific to random fighting


  //
  // Settings for list fighting
  //

  // Container for a list of settings.
  var list = makeElement('div', staminaTabSub, {'id':'fightListSub', 'style':'position: static; 

margin-left: auto; margin-right: auto; width: 100%; line-height:125%; display: none'});

  // Location setting
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  lhs.appendChild(document.createTextNode('Fight in:'));
  id = 'fightListLoc';
  var fightListLoc = makeElement('select', rhs, {'id':id});
  for (var i = 0, iLength=cities.length; i < iLength; ++i) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(cities[i]));
    fightListLoc.appendChild(choice);
  }
  fightListLoc.selectedIndex = GM_getValue('fightLocation', NY);

  // Opponent list
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  lhs.appendChild(document.createTextNode('Fight these opponents:'));
  makeElement('textarea', rhs, {'style':'position: static; width: 180px; height: 105px;', 

'id':'fightList', 'title':'Enter each opponent\'s ID (not their name) on a separate 

line.'}).appendChild(document.createTextNode(GM_getValue('fightList', '')));
  makeElement('br', rhs);
  makeElement('font', rhs, {'style':'font-size: small;'}).appendChild(document.createTextNode

('Enter each myspace ID on a separate line.'));

  // Remove stronger opponents?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Remove stronger opponents from the list automatically.';
  id = 'fightRemoveStronger';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'fightRemoveStronger', 'checked');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Remove stronger opponents'));

  // End of options specific to list fighting


  //
  // Settings for random robbing
  //

  // Container for a list of settings.
  var list = makeElement('div', staminaTabSub, {'id':'robRandomSub', 'style':'position: static; 

margin-left: auto; margin-right: auto; width: 100%; line-height:125%; display: none'});

  // Maximum level.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Don\'t rob opponents higher than this level.';
  id = 'robLevelMax';
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Maximum level:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'maxlength':5, 

'style':'width: 30px; border: 1px solid #781351', 'value':GM_getValue('robLevelMax', '100'), 

'size':'1'});

  // Maximum level relative?
  title = 'Make the maximum level be relative to your own. For example, if your level is 10, and 

maximum level is set to 5, opponents higher than level 15 will be avoided.';
  id = 'robLevelMaxRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'robLevelMaxRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Add my level'));

  // Maximum mafia size.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  id = 'robMafiaMax';
  title = 'Don\'t rob opponents with mafia sizes larger than this.',
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Maximum mafia:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'style':'width: 30px; border: 

1px solid #781351', 'value':GM_getValue('robMafiaMax', '501'), 'size':'1'});

  // Maximum mafia relative?
  title = 'Make the maximum mafia size be relative to your own. For example, if you have 300 

mafia members, and maximum mafia is set to 50, opponents with more than 350 mafia members will be 

avoided. However, if your mafia size is larger than your level, the limit is set relative to your 

level instead.';
  id = 'robMafiaMaxRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'robMafiaMaxRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Add my mafia size'));

  // Minimum mafia size.
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  id = 'robMafiaMin';
  title = 'Avoid opponents with mafia sizes smaller than this.',
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Minimum mafia:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'style':'width: 30px; border: 

1px solid #781351', 'value':GM_getValue('robMafiaMin', '1'), 'size':'1'});

  // Maximum mafia relative?
  title = 'Make the minimum mafia size be relative to your own. For example, if you have 300 

mafia members, and minimum mafia is set to 50, opponents with less than 250 mafia members will be 

avoided. However, if your mafia size is larger than your level, the limit is set relative to your 

level instead.';
  id = 'robMafiaMinRelative';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-align: 

middle; margin-left: 0.5em;', 'value':'checked'}, 'robMafiaMinRelative');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Subtract from my mafia size'));

  // Family names
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Avoid random opponents whose names contain specific patterns.';
  id = 'robAvoidNames';
  makeElement('input', lhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'robAvoidNames', 0);
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Avoid mafia families:'));
  makeElement('textarea', rhs, {'style':'position: static; width: 15em; height: 8em;', 

'id':'robClanName', 'title':'Enter each pattern (such as a clan name) on a separate 

line.'}).appendChild(document.createTextNode(GM_getValue('clanName', defaultClans.join('\n'))));;
  makeElement('br', rhs);
  makeElement('font', rhs, {'style':'font-size: small;'}).appendChild(document.createTextNode

('Enter each name pattern on a separate line.'));
  // End of options specific to random robbing


  //
  // Settings for list robbing
  //

  // Container for a list of settings.
  var list = makeElement('div', staminaTabSub, {'id':'robListSub', 'style':'position: static; 

margin-left: auto; margin-right: auto; width: 100%; line-height:125%; display: none'});

  // Opponent list
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  lhs.appendChild(document.createTextNode('Rob these opponents:'));
  makeElement('textarea', rhs, {'style':'position: static; width: 180px; height: 105px;', 

'id':'robList', 'title':'Enter each opponent\'s ID (not their name) on a separate 

line.'}).appendChild(document.createTextNode(GM_getValue('robList', '')));
  makeElement('br', rhs);
  makeElement('font', rhs, {'style':'font-size: small;'}).appendChild(document.createTextNode

('Enter each myspace ID on a separate line.'));

  // Remove stronger opponents?
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Remove stronger opponents from the list automatically.';
  id = 'robRemoveStronger';
  makeElement('input', rhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'robRemoveStronger', 'checked');
  label = makeElement('label', rhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Remove stronger opponents'));
  // End of options specific to list robbing


  //
  // Settings for hitman
  //

  // Container for a list of settings.
  var list = makeElement('div', staminaTabSub, {'id':'hitmanSub', 'style':'position: static; 

margin-left: auto; margin-right: auto; width: 100%; line-height:125%; display: none'});

  // Location setting
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  lhs.appendChild(document.createTextNode('Collect bounties in:'));
  id = 'hitmanLoc';
  var hitmanLoc = makeElement('select', rhs, {'id':id});
  for (var i = 0, iLength=cities.length; i < iLength; ++i) {
    var choice = document.createElement('option');
    choice.value = i;
    choice.appendChild(document.createTextNode(cities[i]));
    hitmanLoc.appendChild(choice);
  }
  hitmanLoc.selectedIndex = GM_getValue('hitmanLocation', NY);

  // Minimum bounty
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  id = 'hitmanBountyMin';
  title = 'Ignore targets with bounties below this measly amount.',
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Minimum bounty:'));
  makeElement('input', rhs, {'type':'text', 'id':id, 'title':title, 'style':'width: 7em; border: 

1px solid #781351', 'value':GM_getValue('hitmanBountyMin', '0')});

  // Family names
  var item = makeElement('div', list);
  var lhs = makeElement('div', item, {'class':'lhs'});
  var rhs = makeElement('div', item, {'class':'rhs'});
  makeElement('br', item, {'class':'hide'});
  title = 'Avoid random opponents whose names contain specific patterns.';
  id = 'hitmanAvoidNames';
  makeElement('input', lhs, {'type':'checkbox', 'id':id, 'title':title, 'style':'vertical-

align:middle', 'value':'checked'}, 'hitmanAvoidNames', 0);
  label = makeElement('label', lhs, {'for':id, 'title':title});
  label.appendChild(document.createTextNode(' Avoid mafia families:'));
  makeElement('textarea', rhs, {'style':'position: static; width: 15em; height: 8em;', 

'id':'hitmanClanName', 'title':'Enter each pattern (such as a clan name) on a separate 

line.'}).appendChild(document.createTextNode(GM_getValue('clanName', defaultClans.join('\n'))));;
  makeElement('br', rhs);
  makeElement('font', rhs, {'style':'font-size: small;'}).appendChild(document.createTextNode

('Enter each name pattern on a separate line.'));

  // More options coming soon.
  var item = makeElement('div', list);
  makeElement('br', item);
  makeElement('div', item, {'style':'font-size: small; text-align: center; border: 1px solid 

#781351;'}).appendChild(document.createTextNode('More options coming soon!'));
  makeElement('br', item);
  // End of options specific to hitman


  // Handler for switching sub-areas.
  var handleSpendChanged = function() {
    // Hide all but the selected sub-area.
    for (i = 0, iLength=staminaSpendHow.length; i < iLength; ++i) {
      if (i != staminaSpendHow.selectedIndex) {
        staminaTabSub.childNodes[i].style.display = 'none';
      }
    }
    staminaTabSub.childNodes[staminaSpendHow.selectedIndex].style.display = 'block';
  }
  staminaSpendHow.selectedIndex = GM_getValue('staminaSpendHow', 0);
  handleSpendChanged();
  staminaSpendHow.addEventListener('change', handleSpendChanged, false);

  return staminaTab;
}

// Validates the settings on the stamina tab. If all settings are valid, an
// object containing each key and value to be saved is returned.
function validateStaminaTab() {
  var elt, id;

  var checked = function(id) {
    return document.getElementById(id).checked === true? 'checked' : 0;
  }

  // Create an empty object to hold the settings.
  var s = {};

  // Get the common settings.
  s.staminaSpend = checked('staminaSpend');
  s.staminaSpendHow = document.getElementById('staminaSpendHow').selectedIndex;
  s.selectStaminaUse = document.getElementById('selectStaminaUse').selectedIndex;
  s.selectStaminaKeep = document.getElementById('selectStaminaKeep').selectedIndex;
  s.allowStaminaToLevelUp = checked('allowStaminaToLevelUp');

  // The method of getting and verifying the rest of the settings depends
  // on how stamina will be spent.
  switch (s.staminaSpendHow) {
    case STAMINA_HOW_FIGHT_RANDOM: // Random fighting
      // Get the settings.
      s.fightLocation = document.getElementById('fightRandomLoc').selectedIndex;
      s.fightLevelMax = parseInt(document.getElementById('fightLevelMax').value);
      s.fightLevelMaxRelative = checked('fightLevelMaxRelative');
      s.fightMafiaMax = parseInt(document.getElementById('fightMafiaMax').value);
      s.fightMafiaMaxRelative = checked('fightMafiaMaxRelative');
      s.fightMafiaMin = parseInt(document.getElementById('fightMafiaMin').value);
      s.fightMafiaMinRelative = checked('fightMafiaMinRelative');
      s.fightStealth = checked('fightStealth');
      s.fightAvoidBodyguards = checked('fightAvoidBodyguards');
      s.fightAvoidNames = checked('fightAvoidNames');
      s.clanName = document.getElementById('fightClanName').value;

      // Validate the maximum level settings.
      if (isNaN(s.fightLevelMax)) {
        alert('Please enter a maximum level for fighting.');
        return;
      } else if (s.fightLevelMaxRelative && s.fightLevelMax < 0) {
        alert('Please enter a maximum relative level of zero or more.');
        return;
      } else if (!s.fightLevelMaxRelative && s.fightLevelMax < level) {
        alert('Please enter a fight level of ' + level +
              ' (your current level) or more for fighting.');
        return;
      } else if (!s.fightLevelMaxRelative && level >= 180 &&
                 s.fightLevelMax < 200) {
        alert('Once you reach level 180, only opponents of level 180 and up are displayed. In 

order to find random opponents, please enter a maximum fight level of 200 at the very least. If 

necessary, lower the maximum mafia size to compensate.');
        return;
      } else if (s.fightLevelMaxRelative && level >= 180 &&
                level + s.fightLevelMax < 200) {
        alert('Once you reach level 180, only opponents of level 180 and up are displayed. In 

order to find random opponents, please enter a relative fight level of at least ' + (200 - 

s.fightLevelMax) + '. If necessary, lower the maximum mafia size to compensate.');
        return;
      }

      // Validate the maximum mafia size settings.
      if (isNaN(s.fightMafiaMax)) {
        alert('Please enter a maximum mafia size for fighting.');
        return;
      } else if (!s.fightMafiaMaxRelative && (s.fightMafiaMax < 1)) {
        alert('Please enter a maximum mafia size of one or more for fighting.');
        return;
      } else if (s.fightMafiaMaxRelative && (s.fightMafiaMax + mafia < 1)) {
        alert('Please enter a larger relative mafia size for fighting.');
        return;
      }

      // Validate the minimum mafia size settings.
      if (isNaN(s.fightMafiaMin)) {
        alert('Please enter a minimum mafia size for fighting.');
        return;
      } else if (!s.fightMafiaMinRelative && (s.fightMafiaMin < 1)) {
        alert('Please enter a minimum mafia size of one or more for fighting.');
        return;
      } else if (s.fightMafiaMinRelative && (mafia - s.fightMafiaMin < 1)) {
        alert('Please enter a smaller relative mafia size for fighting.');
        return;
      }
      break;

    case STAMINA_HOW_FIGHT_LIST: // List fighting
      // Get the settings.
      s.fightLocation = document.getElementById('fightListLoc').selectedIndex;
      s.fightList = document.getElementById('fightList').value;
      s.fightRemoveStronger = document.getElementById('fightRemoveStronger').checked === true? 

'checked' : 0;

      // Validate the fight list.
      var list = s.fightList.split('\n');
      if (!list[0]) {
        alert('Enter the myspace ID of at least one opponent to fight.');
        return;
      }
      break;

    case STAMINA_HOW_ROB_RANDOM: // Random robbing
      // Get the settings.
      s.robLevelMax = parseInt(document.getElementById('robLevelMax').value);
      s.robLevelMaxRelative = checked('robLevelMaxRelative');
      s.robMafiaMax = parseInt(document.getElementById('robMafiaMax').value);
      s.robMafiaMaxRelative = checked('robMafiaMaxRelative');
      s.robMafiaMin = parseInt(document.getElementById('robMafiaMin').value);
      s.robMafiaMinRelative = checked('robMafiaMinRelative');
      s.robAvoidNames = checked('robAvoidNames');
      s.clanName = document.getElementById('robClanName').value;

      // Validate the maximum level settings.
      if (isNaN(s.robLevelMax)) {
        alert('Please enter a maximum level for robbing.');
        return;
      } else if (s.robLevelMaxRelative && (s.robLevelMax < 0)) {
        alert('Please enter a maximum relative level of zero or more.');
        return;
      } else if (!s.robLevelMaxRelative && (s.robLevelMax < level)) {
        alert('Please enter a maximum level of ' + level +
              ' (your current level) or more for robbing.');
        return;
      }

      // Validate the maximum mafia size settings.
      var mafiaForRob = level < mafia? level : mafia;
      if (isNaN(s.robMafiaMax)) {
        alert('Please enter a maximum mafia size for robbing.');
        return;
      } else if (!s.robMafiaMaxRelative && (s.robMafiaMax < 1)) {
        alert('Please enter a maximum mafia size of one or more for robbing.');
        return;
      } else if (s.robMafiaMaxRelative && (s.robMafiaMax + mafiaForRob < 1)) {
        alert('Please enter a larger relative mafia size for robbing.');
        return;
      }

      // Validate the minimum mafia size settings.
      if (isNaN(s.robMafiaMin)) {
        alert('Please enter a minimum mafia size for robbing.');
        return;
      } else if (!s.robMafiaMinRelative && (s.robMafiaMin < 1)) {
        alert('Please enter a minimum mafia size of one or more for robbing.');
        return;
      } else if (s.robMafiaMinRelative && (mafiaForRob - s.robMafiaMin < 1)) {
        alert('Please enter a smaller relative mafia size for robbing.');
        return;
      }
      break;

    case STAMINA_HOW_ROB_LIST: // List robbing
      // Get the settings.
      s.robList = document.getElementById('robList').value;
      s.robRemoveStronger = document.getElementById('robRemoveStronger').checked === true? 

'checked' : 0;

      // Validate the rob list.
      var list = s.robList.split('\n');
      if (!list[0]) {
        alert('Enter the myspace ID of at least one opponent to rob.');
        return;
      }
      break;

    case STAMINA_HOW_HITMAN: // Hitlist bounty collection ("auto-hitman")
      // Get the settings.
      s.hitmanLocation = document.getElementById('hitmanLoc').selectedIndex;
      s.hitmanBountyMin = document.getElementById('hitmanBountyMin').value;
      s.hitmanAvoidNames = checked('hitmanAvoidNames');
      s.clanName = document.getElementById('hitmanClanName').value;

      // Validate the minimum bounty.
      var min = parseCash(s.hitmanBountyMin);
      if (isNaN(min) || min < 0) {
        alert('Please enter a minimum bounty amount.');
        return;
      }
      break;

    default:
      addToLog('warning Icon', 'BUG DETECTED: Unrecognized stamina setting: ' +
               'staminaSpendHow=' + s.staminaSpendHow);
  }

  return s;
}

function createHitlistTab() {
  var elt, title, id, label;
  var eltStack = [];
  var hitlistTab = makeElement('div', null, {'id':'hitlistTab', 'class':'tabcontent', 

'style':'background-image:url(' + stripURI(hitlistTabImage) + ')'});

  //
  // First column of options.
  //
  elt = makeElement('div', hitlistTab,
                    {'style':'top: 25px; text-decoration: line-through;'});
  title = 'Keep Players on Hitlist.';
  id = 'autoHitlist';
  var autoHitlistCheckbox = makeElement('input', elt, {'type':'checkbox', 'id':id, 'title':title, 

'style':'vertical-align:middle', 'value':'checked'}, 'autoHitlist');
  label = makeElement('label', elt, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Enable auto-hitlist '));

  elt = makeElement('div', elt, {'style':'position: static; margin-left: 13px'});
  title = 'Use a custom list of opponents. Enter each opponent\'s ID' +
          ' (not their name) on a separate line.';
  id = 'toHitlist';
  makeElement('textarea', elt, {'style':'position: static; width: 180px; height: 105px;', 

'id':id, 'title':title}).appendChild(document.createTextNode(GM_getValue(id, '')));

  elt = makeElement('div', hitlistTab,
                    {'style':'top: 175px;'});
  title = 'Only Show Summary of Attacks.';
  id = 'hideAttacks';
  var hideAttacksCheckbox = makeElement('input', elt, {'type':'checkbox', 'id':id, 'title':title, 

'value':'checked'}, 'hideAttacks');
  label = makeElement('label', elt, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Summarize Attacks From Player Updates '));

  //second column of Hitlist Tab
  elt = makeElement('div', hitlistTab, {'style':'top: 25px; right: 10px; text-decoration: line-

through;'});
  title = 'This will be the bounty amount for all auto-hitlists.';
  id = 'bountyAmount';
  label = makeElement('label', elt, {'for':id, 'title':title});
  label.appendChild(document.createTextNode('Bounty Amount: '));
  var bountyAmountCheckbox = makeElement('input', elt, {'type':'text', 'style':'width: 80px;', 

'title':title, 'value':GM_getValue(id, '10000'), 'id':id, 'size':'1'});

  makeElement('br', elt);
  elt = makeElement('div', elt, {'style':'position: static; margin-right: 10px'});
  title = 'Players currently on hitlist';
  id = 'onHitlist';
  makeElement('textarea', elt, {'style':'position: static; width: 180px; height: 105px;', 

'id':id, 'title':title}).appendChild(document.createTextNode(GM_getValue(id, '')));

  title = 'Press this button to clear all the names and return them to the auto-hitlist array.';
  id = 'clrHitlistArray';
  var clearHitlistButton = makeElement('span', elt, {'class':'sexy_button', 'title':title});
  makeElement('button', clearHitlistButton).appendChild(document.createTextNode('Clear 

Players'));
  clearHitlistButton.addEventListener('click', clearHitlistArray, false);

  return hitlistTab;
}

function createStatWindow() {
  if (settingsOpen === true) {
    toggleSettings()
  };

  makeElement('style', document.getElementsByTagName('head')[0], 

{'type':'text/css'}).appendChild(document.createTextNode(
    '#statsWindow #sWindowTabNav div{border-right:1px solid #000;float:left;padding:0 

7px;position:static;text-align:center}' +
    '#statsWindow #sWindowTabNav div.selected{background-image:url(' + stripURI(tabSelectedImage) 

+ ')}' +
    '#statsWindow #sWindowTabNav div a{color:#fff;font-weight:700}' +
    '#statsWindow .sexy_button{position:absolute;background-image:url(' + stripURI(redBgImage) + 

');border:1px solid #FFD927;color:#FFD927;cursor:pointer;display:block;float:left;font-

size:14px;font-weight:700;padding:5px;text-decoration:none;width:auto}' +
    '#statsWindow .sexy_button button{background:transparent;border:medium none 

#FFF;color:#FFD927;cursor:pointer;font-size:14px;font-weight:700;margin:0}' +
    '#statsWindow .sexy_button button:hover{color:#BCD2EA;font-weight:700;text-decoration:none}' 

+
    '#statsWindow .tabcontent{display:none;}' +
    '#statsWindow label {font-weight: normal; color: #BCD2EA}'
  ));

  // This creates the stats box just like a myspace popup
  var elt = makeElement('div', document.body, {'class':'generic_dialog pop_dialog', 

'id':'sWindowGenDialogPopDialog'});
  elt = makeElement('div', elt, {'class':'generic_dialog_popup', 'style':'top: 30px; width: 

620px;'});
  elt = makeElement('div', elt, {'class':'pop_content popcontent_advanced', 'id':'pop_content'});
  var statsWindow = makeElement('div', elt, {'style':'position: relative; width: 600px; height: 

580px; font-size: 14px; color: #BCD2EA; background: black no-repeat scroll 0 110px', 

'id':'statsWindow'});
  //End settings box

  var statsWindowTopBG = makeElement('div', statsWindow, {'style':'background: black; height: 

80px;'});
    var statsWindowTitle = makeElement('div', statsWindowTopBG, {'style':'font-size: 18px; font-

weight: bold;'});
      statsWindowTitle.appendChild(document.createTextNode('myspace Mafia Wars Autoplayer'));
      makeElement('br', statsWindowTitle);
      statsWindowTitle.appendChild(document.createTextNode('Player Stats '));
      makeElement('br', statsWindowTitle);
    makeElement('img', statsWindowTopBG, {'src':stripURI(mwLogoSmall), 'style':'position: 

absolute; top: 0px; right: 25px;'});
    makeElement('img', statsWindowTopBG, {'src':stripURI(closeButtonIcon), 'style':'position: 

absolute; top: 0px; right: 0px; cursor: pointer;'}).addEventListener('click', toggleStats, 

false);


  // NOTE: This container is for placing the buttons horizontally.
  elt = makeElement('div', statsWindow, {'style':'text-align: left'});
  // Make the button bar.
  var sWindowTabNav = makeElement('div', elt, {'id':'sWindowTabNav', 'style':'position: static; 

display: inline-block; background: transparent url(' + stripURI(redBgImage) + ') repeat-x scroll 

0 0; border: 1px solid #FFFFFF; fontsize: 13px; line-height: 28px; height: 30px;'});
    var graphTabLink = makeElement('div', sWindowTabNav, {'class':'selected'} );
      makeElement('a', graphTabLink, {'href':'#', 'rel':'graphTab'}).appendChild

(document.createTextNode('Graphs'));
    var statTabLink = makeElement('div', sWindowTabNav );
      makeElement('a', statTabLink, {'href':'#', 'rel':'statTab'}).appendChild

(document.createTextNode('Stats'));


  var graphTab = makeElement('div', statsWindow, {'id':'graphTab', 'class':'tabcontent'});
    var graphBox = makeElement('div', graphTab, {'id':'graphBox', 'style':'position: static; 

overflow: auto; height: 443px; width: 578px; background-color: #111111; font-size:11px; color: 

#BCD2EA; text-align: center; margin: 5px; padding: 5px; border: 1px inset;'});
      graphBox.innerHTML = GM_getValue('graphBox', 'Enable Stats with the Checkbox on the General 

tab of the AutopPlay settings.<br><br>Stats will populate after the 2nd hour of running.');

  var statTab = makeElement('div', statsWindow, {'id':'statTab', 'class':'tabcontent'});
    var autoClick = makeElement('div', statTab, {'style':'top: 25px;'});
    makeElement('img', autoClick, {'style':'position: absolute; top: 5px; left: 200px', 

'src':stripURI(energyIcon)});


//Tab code from:http://www.dynamicdrive.com/dynamicindex17/tabcontent.htm converted into a data 

URI
  makeElement('script', document.getElementsByTagName('head')[0], {'type':'text/javascript', 

'src':
    "data:application/x-

javascript;base64,Ly8qKiBUYWIgQ29udGVudCBzY3JpcHQgdjIuMC0gqSBEeW5hbWljIERyaXZlIERIVE1MIGNvZGUgbGl

icmFyeSAoaHR0cDovL3d3dy5keW5hbWljZHJpdmUuY29tKQ0KLy8qKiBVcGRhdGVkIE9jdCA3dGgsIDA3IHRvIHZlcnNpb24g

Mi4wLiBDb250YWlucyBudW1lcm91cyBpbXByb3ZlbWVudHM6DQovLyAgIC1BZGRlZCBBdXRvIE1vZGU6IFNjcmlwdCBhdXRvI

HJvdGF0ZXMgdGhlIHRhYnMgYmFzZWQgb24gYW4gaW50ZXJ2YWwsIHVudGlsIGEgdGFiIGlzIGV4cGxpY2l0bHkgc2VsZWN0ZW

QNCi8vICAgLUFiaWxpdHkgdG8gZXhwYW5kL2NvbnRyYWN0IGFyYml0cmFyeSBESVZzIG9uIHRoZSBwYWdlIGFzIHRoZSB0YWJ

iZWQgY29udGVudCBpcyBleHBhbmRlZC8gY29udHJhY3RlZA0KLy8gICAtQWJpbGl0eSB0byBkeW5hbWljYWxseSBzZWxlY3Qg

YSB0YWIgZWl0aGVyIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiB3aXRoaW4gaXRzIHBlZXJzLCBvciBpdHMgSUQgYXR0cmlidXRlI

ChnaXZlIHRoZSB0YXJnZXQgdGFiIG9uZSAxc3QpDQovLyAgIC1BYmlsaXR5IHRvIHNldCB3aGVyZSB0aGUgQ1NTIGNsYXNzbm

FtZSAic2VsZWN0ZWQiIGdldCBhc3NpZ25lZC0gZWl0aGVyIHRvIHRoZSB0YXJnZXQgdGFiJ3MgbGluayAoIkEiKSwgb3IgaXR

zIHBhcmVudCBjb250YWluZXINCi8vKiogVXBkYXRlZCBGZWIgMTh0aCwgMDggdG8gdmVyc2lvbiAyLjE6IEFkZHMgYSAidGFi

aW5zdGFuY2UuY3ljbGVpdChkaXIpIiBtZXRob2QgdG8gY3ljbGUgZm9yd2FyZCBvciBiYWNrd2FyZCBiZXR3ZWVuIHRhYnMgZ

HluYW1pY2FsbHkNCi8vKiogVXBkYXRlZCBBcHJpbCA4dGgsIDA4IHRvIHZlcnNpb24gMi4yOiBBZGRzIHN1cHBvcnQgZm9yIG

V4cGFuZGluZyBhIHRhYiB1c2luZyBhIFVSTCBwYXJhbWV0ZXIgKGllOiBodHRwOi8vbXlzaXRlLmNvbS90YWJjb250ZW50Lmh

0bT90YWJpbnRlcmZhY2VpZD0wKSANCg0KLy8vL05PIE5FRUQgVE8gRURJVCBCRUxPVy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v

Lw0KDQpmdW5jdGlvbiBkZHRhYmNvbnRlbnQodGFiaW50ZXJmYWNlaWQpew0KCXRoaXMudGFiaW50ZXJmYWNlaWQ9dGFiaW50Z

XJmYWNlaWQgLy9JRCBvZiBUYWIgTWVudSBtYWluIGNvbnRhaW5lcg0KCXRoaXMudGFicz1kb2N1bWVudC5nZXRFbGVtZW50Qn

lJZCh0YWJpbnRlcmZhY2VpZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKSAvL0dldCBhbGwgdGFiIGxpbmtzIHdpdGhpbiB

jb250YWluZXINCgl0aGlzLmVuYWJsZXRhYnBlcnNpc3RlbmNlPXRydWUNCgl0aGlzLmhvdHRhYnNwb3NpdGlvbnM9W10gLy9B

cnJheSB0byBzdG9yZSBwb3NpdGlvbiBvZiB0YWJzIHRoYXQgaGF2ZSBhICJyZWwiIGF0dHIgZGVmaW5lZCwgcmVsYXRpdmUgd

G8gYWxsIHRhYiBsaW5rcywgd2l0aGluIGNvbnRhaW5lcg0KCXRoaXMuY3VycmVudFRhYkluZGV4PTAgLy9JbmRleCBvZiBjdX

JyZW50bHkgc2VsZWN0ZWQgaG90IHRhYiAodGFiIHdpdGggc3ViIGNvbnRlbnQpIHdpdGhpbiBob3R0YWJzcG9zaXRpb25zW10

gYXJyYXkNCgl0aGlzLnN1YmNvbnRlbnRpZHM9W10gLy9BcnJheSB0byBzdG9yZSBpZHMgb2YgdGhlIHN1YiBjb250ZW50cyAo

InJlbCIgYXR0ciB2YWx1ZXMpDQoJdGhpcy5yZXZjb250ZW50aWRzPVtdIC8vQXJyYXkgdG8gc3RvcmUgaWRzIG9mIGFyYml0c

mFyeSBjb250ZW50cyB0byBleHBhbmQvY29udGFjdCBhcyB3ZWxsICgicmV2IiBhdHRyIHZhbHVlcykNCgl0aGlzLnNlbGVjdG

VkQ2xhc3NUYXJnZXQ9ImxpbmsiIC8va2V5d29yZCB0byBpbmRpY2F0ZSB3aGljaCB0YXJnZXQgZWxlbWVudCB0byBhc3NpZ24

gInNlbGVjdGVkIiBDU1MgY2xhc3MgKCJsaW5rcGFyZW50IiBvciAibGluayIpDQp9DQoNCmRkdGFiY29udGVudC5nZXRDb29r

aWU9ZnVuY3Rpb24oTmFtZSl7IA0KCXZhciByZT1uZXcgUmVnRXhwKE5hbWUrIj1bXjtdKyIsICJpIik7IC8vY29uc3RydWN0I

FJFIHRvIHNlYXJjaCBmb3IgdGFyZ2V0IG5hbWUvdmFsdWUgcGFpcg0KCWlmIChkb2N1bWVudC5jb29raWUubWF0Y2gocmUpKS

AvL2lmIGNvb2tpZSBmb3VuZA0KCQlyZXR1cm4gZG9jdW1lbnQuY29va2llLm1hdGNoKHJlKVswXS5zcGxpdCgiPSIpWzFdIC8

vcmV0dXJuIGl0cyB2YWx1ZQ0KCXJldHVybiAiIg0KfQ0KDQpkZHRhYmNvbnRlbnQuc2V0Q29va2llPWZ1bmN0aW9uKG5hbWUs

IHZhbHVlKXsNCglkb2N1bWVudC5jb29raWUgPSBuYW1lKyI9Iit2YWx1ZSsiO3BhdGg9LyIgLy9jb29raWUgdmFsdWUgaXMgZ

G9tYWluIHdpZGUgKHBhdGg9LykNCn0NCg0KZGR0YWJjb250ZW50LnByb3RvdHlwZT17DQoNCglleHBhbmRpdDpmdW5jdGlvbi

h0YWJpZF9vcl9wb3NpdGlvbil7IC8vUFVCTElDIGZ1bmN0aW9uIHRvIHNlbGVjdCBhIHRhYiBlaXRoZXIgYnkgaXRzIElEIG9

yIHBvc2l0aW9uKGludCkgd2l0aGluIGl0cyBwZWVycw0KCQl0aGlzLmNhbmNlbGF1dG9ydW4oKSAvL3N0b3AgYXV0byBjeWNs

aW5nIG9mIHRhYnMgKGlmIHJ1bm5pbmcpDQoJCXZhciB0YWJyZWY9IiINCgkJdHJ5ew0KCQkJaWYgKHR5cGVvZiB0YWJpZF9vc

l9wb3NpdGlvbj09InN0cmluZyIgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiaWRfb3JfcG9zaXRpb24pLmdldEF0dH

JpYnV0ZSgicmVsIikpIC8vaWYgc3BlY2lmaWVkIHRhYiBjb250YWlucyAicmVsIiBhdHRyDQoJCQkJdGFicmVmPWRvY3VtZW5

0LmdldEVsZW1lbnRCeUlkKHRhYmlkX29yX3Bvc2l0aW9uKQ0KCQkJZWxzZSBpZiAocGFyc2VJbnQodGFiaWRfb3JfcG9zaXRp

b24pIT1OYU4gJiYgdGhpcy50YWJzW3RhYmlkX29yX3Bvc2l0aW9uXS5nZXRBdHRyaWJ1dGUoInJlbCIpKSAvL2lmIHNwZWNpZ

mllZCB0YWIgY29udGFpbnMgInJlbCIgYXR0cg0KCQkJCXRhYnJlZj10aGlzLnRhYnNbdGFiaWRfb3JfcG9zaXRpb25dDQoJCX

0NCgkJY2F0Y2goZXJyKXthbGVydCgiSW52YWxpZCBUYWIgSUQgb3IgcG9zaXRpb24gZW50ZXJlZCEiKX0NCgkJaWYgKHRhYnJ

lZiE9IiIpIC8vaWYgYSB2YWxpZCB0YWIgaXMgZm91bmQgYmFzZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyDQoJCQl0aGlzLmV4

cGFuZHRhYih0YWJyZWYpIC8vZXhwYW5kIHRoaXMgdGFiDQoJfSwNCg0KCWN5Y2xlaXQ6ZnVuY3Rpb24oZGlyLCBhdXRvcnVuK

XsgLy9QVUJMSUMgZnVuY3Rpb24gdG8gbW92ZSBmb3dhcmQgb3IgYmFja3dhcmRzIHRocm91Z2ggZWFjaCBob3QgdGFiICh0YW

JpbnN0YW5jZS5jeWNsZWl0KCdmb3dhcmQvYmFjaycpICkNCgkJaWYgKGRpcj09Im5leHQiKXsNCgkJCXZhciBjdXJyZW50VGF

iSW5kZXg9KHRoaXMuY3VycmVudFRhYkluZGV4PHRoaXMuaG90dGFic3Bvc2l0aW9ucy5sZW5ndGgtMSk%

2FIHRoaXMuY3VycmVudFRhYkluZGV4KzEgOiAwDQoJCX0NCgkJZWxzZSBpZiAoZGlyPT0icHJldiIpew0KCQkJdmFyIGN1cnJ

lbnRUYWJJbmRleD0odGhpcy5jdXJyZW50VGFiSW5kZXg%2BMCk%

2FIHRoaXMuY3VycmVudFRhYkluZGV4LTEgOiB0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoLTENCgkJfQ0KCQlpZiAodHl

wZW9mIGF1dG9ydW49PSJ1bmRlZmluZWQiKSAvL2lmIGN5Y2xlaXQoKSBpcyBiZWluZyBjYWxsZWQgYnkgdXNlciwgdmVyc3Vz

IGF1dG9ydW4oKSBmdW5jdGlvbg0KCQkJdGhpcy5jYW5jZWxhdXRvcnVuKCkgLy9zdG9wIGF1dG8gY3ljbGluZyBvZiB0YWJzI

ChpZiBydW5uaW5nKQ0KCQl0aGlzLmV4cGFuZHRhYih0aGlzLnRhYnNbdGhpcy5ob3R0YWJzcG9zaXRpb25zW2N1cnJlbnRUYW

JJbmRleF1dKQ0KCX0sDQoNCglzZXRwZXJzaXN0OmZ1bmN0aW9uKGJvb2wpeyAvL1BVQkxJQyBmdW5jdGlvbiB0byB0b2dnbGU

gcGVyc2lzdGVuY2UgZmVhdHVyZQ0KCQkJdGhpcy5lbmFibGV0YWJwZXJzaXN0ZW5jZT1ib29sDQoJfSwNCg0KCXNldHNlbGVj

dGVkQ2xhc3NUYXJnZXQ6ZnVuY3Rpb24ob2Jqc3RyKXsgLy9QVUJMSUMgZnVuY3Rpb24gdG8gc2V0IHdoaWNoIHRhcmdldCBlb

GVtZW50IHRvIGFzc2lnbiAic2VsZWN0ZWQiIENTUyBjbGFzcyAoImxpbmtwYXJlbnQiIG9yICJsaW5rIikNCgkJdGhpcy5zZW

xlY3RlZENsYXNzVGFyZ2V0PW9ianN0ciB8fCAibGluayINCgl9LA0KDQoJZ2V0c2VsZWN0ZWRDbGFzc1RhcmdldDpmdW5jdGl

vbih0YWJyZWYpeyAvL1JldHVybnMgdGFyZ2V0IGVsZW1lbnQgdG8gYXNzaWduICJzZWxlY3RlZCIgQ1NTIGNsYXNzIHRvDQoJ

CXJldHVybiAodGhpcy5zZWxlY3RlZENsYXNzVGFyZ2V0PT0oImxpbmtwYXJlbnQiLnRvTG93ZXJDYXNlKCkpKT8gdGFicmVmL

nBhcmVudE5vZGUgOiB0YWJyZWYNCgl9LA0KDQoJdXJscGFyYW1zZWxlY3Q6ZnVuY3Rpb24odGFiaW50ZXJmYWNlaWQpew0KCQ

l2YXIgcmVzdWx0PXdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubWF0Y2gobmV3IFJlZ0V4cCh0YWJpbnRlcmZhY2VpZCsiPShcXGQ

rKSIsICJpIikpIC8vY2hlY2sgZm9yICI%

2FdGFiaW50ZXJmYWNlaWQ9MiIgaW4gVVJMDQoJCXJldHVybiAocmVzdWx0PT1udWxsKT8gbnVsbCA6IHBhcnNlSW50KFJlZ0V

4cC4kMSkgLy9yZXR1cm5zIG51bGwgb3IgaW5kZXgsIHdoZXJlIGluZGV4IChpbnQpIGlzIHRoZSBzZWxlY3RlZCB0YWIncyBp

bmRleA0KCX0sDQoNCglleHBhbmR0YWI6ZnVuY3Rpb24odGFicmVmKXsNCgkJdmFyIHN1YmNvbnRlbnRpZD10YWJyZWYuZ2V0Q

XR0cmlidXRlKCJyZWwiKSAvL0dldCBpZCBvZiBzdWJjb250ZW50IHRvIGV4cGFuZA0KCQkvL0dldCAicmV2IiBhdHRyIGFzIG

Egc3RyaW5nIG9mIElEcyBpbiB0aGUgZm9ybWF0ICIsam9obixnZW9yZ2UsdHJleSxldGMsIiB0byBlYXNpbHkgc2VhcmNoIHR

ocm91Z2gNCgkJdmFyIGFzc29jaWF0ZWRyZXZpZHM9KHRhYnJlZi5nZXRBdHRyaWJ1dGUoInJldiIpKT8gIiwiK3RhYnJlZi5n

ZXRBdHRyaWJ1dGUoInJldiIpLnJlcGxhY2UoL1xzKy8sICIiKSsiLCIgOiAiIg0KCQl0aGlzLmV4cGFuZHN1YmNvbnRlbnQoc

3ViY29udGVudGlkKQ0KCQl0aGlzLmV4cGFuZHJldmNvbnRlbnQoYXNzb2NpYXRlZHJldmlkcykNCgkJZm9yICh2YXIgaT0wOy

BpPHRoaXMudGFicy5sZW5ndGg7IGkrKyl7IC8vTG9vcCB0aHJvdWdoIGFsbCB0YWJzLCBhbmQgYXNzaWduIG9ubHkgdGhlIHN

lbGVjdGVkIHRhYiB0aGUgQ1NTIGNsYXNzICJzZWxlY3RlZCINCgkJCXRoaXMuZ2V0c2VsZWN0ZWRDbGFzc1RhcmdldCh0aGlz

LnRhYnNbaV0pLmNsYXNzTmFtZT0odGhpcy50YWJzW2ldLmdldEF0dHJpYnV0ZSgicmVsIik9PXN1YmNvbnRlbnRpZCk%

2FICJzZWxlY3RlZCIgOiAiIg0KCQl9DQoJCWlmICh0aGlzLmVuYWJsZXRhYnBlcnNpc3RlbmNlKSAvL2lmIHBlcnNpc3RlbmN

lIGVuYWJsZWQsIHNhdmUgc2VsZWN0ZWQgdGFiIHBvc2l0aW9uKGludCkgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQlkZHRh

YmNvbnRlbnQuc2V0Q29va2llKHRoaXMudGFiaW50ZXJmYWNlaWQsIHRhYnJlZi50YWJwb3NpdGlvbikNCgkJdGhpcy5zZXRjd

XJyZW50dGFiaW5kZXgodGFicmVmLnRhYnBvc2l0aW9uKSAvL3JlbWVtYmVyIHBvc2l0aW9uIG9mIHNlbGVjdGVkIHRhYiB3aX

RoaW4gaG90dGFic3Bvc2l0aW9uc1tdIGFycmF5DQoJfSwNCg0KCWV4cGFuZHN1YmNvbnRlbnQ6ZnVuY3Rpb24oc3ViY29udGV

udGlkKXsNCgkJZm9yICh2YXIgaT0wOyBpPHRoaXMuc3ViY29udGVudGlkcy5sZW5ndGg7IGkrKyl7DQoJCQl2YXIgc3ViY29u

dGVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnN1YmNvbnRlbnRpZHNbaV0pIC8vY2FjaGUgY3VycmVudCBzdWJjb

250ZW50IG9iaiAoaW4gZm9yIGxvb3ApDQoJCQlzdWJjb250ZW50LnN0eWxlLmRpc3BsYXk9KHN1YmNvbnRlbnQuaWQ9PXN1Ym

NvbnRlbnRpZCk%

2FICJibG9jayIgOiAibm9uZSIgLy8ic2hvdyIgb3IgaGlkZSBzdWIgY29udGVudCBiYXNlZCBvbiBtYXRjaGluZyBpZCBhdHR

yIHZhbHVlDQoJCX0NCgl9LA0KDQoJZXhwYW5kcmV2Y29udGVudDpmdW5jdGlvbihhc3NvY2lhdGVkcmV2aWRzKXsNCgkJdmFy

IGFsbHJldmlkcz10aGlzLnJldmNvbnRlbnRpZHMNCgkJZm9yICh2YXIgaT0wOyBpPGFsbHJldmlkcy5sZW5ndGg7IGkrKyl7I

C8vTG9vcCB0aHJvdWdoIHJldiBhdHRyaWJ1dGVzIGZvciBhbGwgdGFicyBpbiB0aGlzIHRhYiBpbnRlcmZhY2UNCgkJCS8vaW

YgYW55IHZhbHVlcyBzdG9yZWQgd2l0aGluIGFzc29jaWF0ZWRyZXZpZHMgbWF0Y2hlcyBvbmUgd2l0aGluIGFsbHJldmlkcyw

gZXhwYW5kIHRoYXQgRElWLCBvdGhlcndpc2UsIGNvbnRyYWN0IGl0DQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbGxy

ZXZpZHNbaV0pLnN0eWxlLmRpc3BsYXk9KGFzc29jaWF0ZWRyZXZpZHMuaW5kZXhPZigiLCIrYWxscmV2aWRzW2ldKyIsIikhP

S0xKT8gImJsb2NrIiA6ICJub25lIg0KCQl9DQoJfSwNCg0KCXNldGN1cnJlbnR0YWJpbmRleDpmdW5jdGlvbih0YWJwb3NpdG

lvbil7IC8vc3RvcmUgY3VycmVudCBwb3NpdGlvbiBvZiB0YWIgKHdpdGhpbiBob3R0YWJzcG9zaXRpb25zW10gYXJyYXkpDQo

JCWZvciAodmFyIGk9MDsgaTx0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoOyBpKyspew0KCQkJaWYgKHRhYnBvc2l0aW9u

PT10aGlzLmhvdHRhYnNwb3NpdGlvbnNbaV0pew0KCQkJCXRoaXMuY3VycmVudFRhYkluZGV4PWkNCgkJCQlicmVhaw0KCQkJf

Q0KCQl9DQoJfSwNCg0KCWF1dG9ydW46ZnVuY3Rpb24oKXsgLy9mdW5jdGlvbiB0byBhdXRvIGN5Y2xlIHRocm91Z2ggYW5kIH

NlbGVjdCB0YWJzIGJhc2VkIG9uIGEgc2V0IGludGVydmFsDQoJCXRoaXMuY3ljbGVpdCgnbmV4dCcsIHRydWUpDQoJfSwNCg0

KCWNhbmNlbGF1dG9ydW46ZnVuY3Rpb24oKXsNCgkJaWYgKHR5cGVvZiB0aGlzLmF1dG9ydW50aW1lciE9InVuZGVmaW5lZCIp

DQoJCQljbGVhckludGVydmFsKHRoaXMuYXV0b3J1bnRpbWVyKQ0KCX0sDQoNCglpbml0OmZ1bmN0aW9uKGF1dG9tb2RlcGVya

W9kKXsNCgkJdmFyIHBlcnNpc3RlZHRhYj1kZHRhYmNvbnRlbnQuZ2V0Q29va2llKHRoaXMudGFiaW50ZXJmYWNlaWQpIC8vZ2

V0IHBvc2l0aW9uIG9mIHBlcnNpc3RlZCB0YWIgKGFwcGxpY2FibGUgaWYgcGVyc2lzdGVuY2UgaXMgZW5hYmxlZCkNCgkJdmF

yIHNlbGVjdGVkdGFiPS0xIC8vQ3VycmVudGx5IHNlbGVjdGVkIHRhYiBpbmRleCAoLTEgbWVhbmluZyBub25lKQ0KCQl2YXIg

c2VsZWN0ZWR0YWJmcm9tdXJsPXRoaXMudXJscGFyYW1zZWxlY3QodGhpcy50YWJpbnRlcmZhY2VpZCkgLy9yZXR1cm5zIG51b

Gwgb3IgaW5kZXggZnJvbTogdGFiY29udGVudC5odG0%

2FdGFiaW50ZXJmYWNlaWQ9aW5kZXgNCgkJdGhpcy5hdXRvbW9kZXBlcmlvZD1hdXRvbW9kZXBlcmlvZCB8fCAwDQoJCWZvciA

odmFyIGk9MDsgaTx0aGlzLnRhYnMubGVuZ3RoOyBpKyspew0KCQkJdGhpcy50YWJzW2ldLnRhYnBvc2l0aW9uPWkgLy9yZW1l

bWJlciBwb3NpdGlvbiBvZiB0YWIgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQlpZiAodGhpcy50YWJzW2ldLmdldEF0dHJpY

nV0ZSgicmVsIikpew0KCQkJCXZhciB0YWJpbnN0YW5jZT10aGlzDQoJCQkJdGhpcy5ob3R0YWJzcG9zaXRpb25zW3RoaXMuaG

90dGFic3Bvc2l0aW9ucy5sZW5ndGhdPWkgLy9zdG9yZSBwb3NpdGlvbiBvZiAiaG90IiB0YWIgKCJyZWwiIGF0dHIgZGVmaW5

lZCkgcmVsYXRpdmUgdG8gaXRzIHBlZXJzDQoJCQkJdGhpcy5zdWJjb250ZW50aWRzW3RoaXMuc3ViY29udGVudGlkcy5sZW5n

dGhdPXRoaXMudGFic1tpXS5nZXRBdHRyaWJ1dGUoInJlbCIpIC8vc3RvcmUgaWQgb2Ygc3ViIGNvbnRlbnQgKCJyZWwiIGF0d

HIgdmFsdWUpDQoJCQkJdGhpcy50YWJzW2ldLm9uY2xpY2s9ZnVuY3Rpb24oKXsNCgkJCQkJdGFiaW5zdGFuY2UuZXhwYW5kdG

FiKHRoaXMpDQoJCQkJCXRhYmluc3RhbmNlLmNhbmNlbGF1dG9ydW4oKSAvL3N0b3AgYXV0byBjeWNsaW5nIG9mIHRhYnMgKGl

mIHJ1bm5pbmcpDQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlpZiAodGhpcy50YWJzW2ldLmdldEF0dHJpYnV0ZSgi

cmV2IikpeyAvL2lmICJyZXYiIGF0dHIgZGVmaW5lZCwgc3RvcmUgZWFjaCB2YWx1ZSB3aXRoaW4gInJldiIgYXMgYW4gYXJyY

XkgZWxlbWVudA0KCQkJCQl0aGlzLnJldmNvbnRlbnRpZHM9dGhpcy5yZXZjb250ZW50aWRzLmNvbmNhdCh0aGlzLnRhYnNbaV

0uZ2V0QXR0cmlidXRlKCJyZXYiKS5zcGxpdCgvXHMqLFxzKi8pKQ0KCQkJCX0NCgkJCQlpZiAoc2VsZWN0ZWR0YWJmcm9tdXJ

sPT1pIHx8IHRoaXMuZW5hYmxldGFicGVyc2lzdGVuY2UgJiYgc2VsZWN0ZWR0YWI9PS0xICYmIHBhcnNlSW50KHBlcnNpc3Rl

ZHRhYik9PWkgfHwgIXRoaXMuZW5hYmxldGFicGVyc2lzdGVuY2UgJiYgc2VsZWN0ZWR0YWI9PS0xICYmIHRoaXMuZ2V0c2VsZ

WN0ZWRDbGFzc1RhcmdldCh0aGlzLnRhYnNbaV0pLmNsYXNzTmFtZT09InNlbGVjdGVkIil7DQoJCQkJCXNlbGVjdGVkdGFiPW

kgLy9TZWxlY3RlZCB0YWIgaW5kZXgsIGlmIGZvdW5kDQoJCQkJfQ0KCQkJfQ0KCQl9IC8vRU5EIGZvciBsb29wDQoJCWlmICh

zZWxlY3RlZHRhYiE9LTEpIC8vaWYgYSB2YWxpZCBkZWZhdWx0IHNlbGVjdGVkIHRhYiBpbmRleCBpcyBmb3VuZA0KCQkJdGhp

cy5leHBhbmR0YWIodGhpcy50YWJzW3NlbGVjdGVkdGFiXSkgLy9leHBhbmQgc2VsZWN0ZWQgdGFiIChlaXRoZXIgZnJvbSBVU

kwgcGFyYW1ldGVyLCBwZXJzaXN0ZW50IGZlYXR1cmUsIG9yIGNsYXNzPSJzZWxlY3RlZCIgY2xhc3MpDQoJCWVsc2UgLy9pZi

BubyB2YWxpZCBkZWZhdWx0IHNlbGVjdGVkIGluZGV4IGZvdW5kDQoJCQl0aGlzLmV4cGFuZHRhYih0aGlzLnRhYnNbdGhpcy5

ob3R0YWJzcG9zaXRpb25zWzBdXSkgLy9KdXN0IHNlbGVjdCBmaXJzdCB0YWIgdGhhdCBjb250YWlucyBhICJyZWwiIGF0dHIN

CgkJaWYgKHBhcnNlSW50KHRoaXMuYXV0b21vZGVwZXJpb2QpPjUwMCAmJiB0aGlzLmhvdHRhYnNwb3NpdGlvbnMubGVuZ3RoP

jEpew0KCQkJdGhpcy5hdXRvcnVudGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0YWJpbnN0YW5jZS5hdXRvcnVuKCl9LC

B0aGlzLmF1dG9tb2RlcGVyaW9kKQ0KCQl9DQoJfSAvL0VORCBpbnQoKSBmdW5jdGlvbg0KDQp9IC8vRU5EIFByb3RvdHlwZSB

hc3NpZ25tZW50"
  }).appendChild(document.createTextNode(
    '/***********************************************\n' +
    '* Tab Content script v2.2- © Dynamic Drive DHTML code library (www.dynamicdrive.com)\n' +
    '* This notice MUST stay intact for legal use\n' +
    '* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code\n' +
    '***********************************************/\n'
  ));
  makeElement('script', document.getElementsByTagName('head')[0], 

{'type':'text/javascript'}).appendChild(document.createTextNode(
    'var statTabs=new ddtabcontent("sWindowTabNav"); //enter ID of Tab Container\n' +
    'statTabs.setpersist(true); //toogle persistence of the tabs\' state\n' +
    'statTabs.setselectedClassTarget("linkparent"); //"link" or "linkparent"\n' +
    'statTabs.init();'
  ));
  DEBUG('Stat Menu Created.');
}

function clickAutoPause() {
  if (this.checked) {
    // check to ensure at least one radio box is checked
    // enable Before level up by default
    if (document.getElementById('autoPauseBefore').checked === false &&
        document.getElementById('autoPauseAfter').checked === false) {
      document.getElementById('autoPauseBefore').checked = true;
    }
  }
}

function handleModificationTimer() {
  // The timer has gone off, so assume that page updates have finished.
  //GM_log('Changes finished.');
  modificationTimer = undefined;

  if (!document.getElementById(SCRIPT.appID + '_mw_masthead')) return;

  refreshGlobalStats();
  refreshSettings();

  // Find the visible inner page.
  var pageChanged = false;
  var prevPageElt = innerPageElt;
  var contentRowElt = document.getElementById(SCRIPT.appID + '_content_row');
  var result = xpath('./*[contains(@id, "' + SCRIPT.appID + '_inner_page")]', contentRowElt);
  for (var i = 0, iLength=result.snapshotLength; i < iLength; i++) {
    var elt = result.snapshotItem(i);
    if (elt.style.display != 'none') {
      innerPageElt = elt;
      break;
    }
  }
  if (!innerPageElt) return;

  // Make sure our private AJAX page exists and isn't visible.
  var ajaxID = SCRIPT.appID + '_' + SCRIPT.ajaxPage;
  var elt = xpathFirst('//div[@id="' + ajaxID + '"]');
  if (!elt) {
    elt = makeElement('div', innerPageElt.parentNode, {'id':ajaxID});
  }
  elt.style.display = 'none';

  // Determine if the displayed page has changed.
  if (!xpathFirst('./div[@id="ap_inner"]', innerPageElt)) {
    setListenContent(false);
    makeElement('div', innerPageElt, {'id':'ap_inner', 'style':'display: none'});
    setListenContent(true);
    DEBUG('New inner page content: ' + innerPageElt.id);
    pageChanged = true;
  } else if (prevPageElt != innerPageElt) {
    DEBUG('Switched inner page to: ' + innerPageElt.id);
    pageChanged = true;
  }

  // Handle changes to the inner page.
  if (pageChanged) {
    try {
      innerPageChanged();
    } catch(ex) {
      addToLog('warning Icon', ex);
    }
  }
}

function setModificationTimer() {
  if (modificationTimer) window.clearTimeout(modificationTimer);
  modificationTimer = window.setTimeout(handleModificationTimer, 500);
  //GM_log('Modification timer set.');
}

function handleDOMSubtreeModified(e) {
  if (ignoreElement(e.target)) return;
  logElement(e.target, 'subtree');
}

function handleContentModified(e) {
  if (ignoreElement(e.target)) return;
  //logElement(e.target, 'content');
  setModificationTimer();
}

function handlePublishNotificationsInternal(e) {
  //if (!ignoreElement(e.target)) logElement(e.target, 'handlePublishNotifications');

  var popup = e.target;

  if (popup.id == 'pop_content') {
    // Close "No Network" popups.
    if (popup.innerHTML.match(/no network/i)) {
      var elt = xpathFirst('.//input[@value="Okay"]', popup);
      if (elt) {
        clickElement(elt);
        DEBUG('Clicked to skip network popup.');
      }
    }

    var skipPost = xpathFirst('.//input[@value="Skip"]', popup);
    if (skipPost) {
      // Gift skipping.
      var giftCheck = xpathFirst('.//div[@class="CopyTitle" and contains(text(), "sent")]/a

[contains(@href, "sendgiftshort")]', popup);
      if (giftCheck && GM_getValue('autoGiftSkipOpt') == 'checked') {
        clickElement(skipPost);
        DEBUG('Clicked to skip gift publishing.');
        return;
      }

      // Job Help skipping.
      var jobHelpCheck = xpathFirst('.//div[@class="CopyTitle" and contains(text(),"requested 

help")]', popup);
      if (jobHelpCheck && GM_getValue('autoAskJobHelp') == 'checked') {
        var msg = GM_getValue('autoAskJobHelpMessage');
        var msgElt = document.getElementById("feedform_user_message");
        var publishPost = xpathFirst('.//input[@value="Publish"]', popup);
        if (msg && msgElt && publishPost) {
          msgElt.value = msg;
          clickElement(publishPost);
          DEBUG('Clicked to publish job help request.');
          return;
        } else {
          clickElement(skipPost);
          DEBUG('Clicked to skip job help request publishing.');
          return;
        }
      }

      // Lotto skipping.
      var lottoCheck = xpathFirst('.//div[@class="CopyTitle"]/text()[contains(., "prizes are 

given away each week")]', popup);
      if (lottoCheck && GM_getValue('autoLottoOpt') == 'checked') {
        clickElement(skipPost);
        DEBUG('Clicked to skip lotto publishing.');
        return;
      }
    }
  }
}

function handlePublishNotifications(e) {
  // Wrapping the call with setTimeout is necessary to make Greasemonkey
  // API calls available (such as GM_getValue).
  setTimeout(function() { handlePublishNotificationsInternal(e) }, 0);
}

function handleFBNotificationsInternal(e) {
  //logElement(e.target, 'handleFBNotifications');

  var parentElt = e.target.parentNode;
  if (!parentElt) return;

  // Watch for sent notifications and get rid of some of them.
  if (parentElt.className == 'Beeps') {
    filterNotifications(e.target);
  }
}

function handleFBNotifications(e) {
  // Wrapping the call with setTimeout is necessary to make Greasemonkey
  // API calls available (such as GM_getValue).
  setTimeout(function() { handleFBNotificationsInternal(e) }, 0);
}

// Turns on/off the high-level event listener for the game.
function setListenContent(on) {
  var elt = document.getElementById('app_content_10979261223');
  if (!elt) return;
  if (on) {
    elt.addEventListener('DOMSubtreeModified', handleContentModified, false);
  } else {
    elt.removeEventListener('DOMSubtreeModified', handleContentModified, false);
  }
}

// Turns on/off the event listener for publish pop-ups.
function setListenAutoSkip(on) {
  if (!document.body) return;
  if (on) {
    document.body.addEventListener('DOMNodeInserted', handlePublishNotifications, false);
  } else {
    document.body.removeEventListener('DOMNodeInserted', handlePublishNotifications, false);
  }
}

// Turns on/off the event listener for myspace notifications.
function setListenFBNotifications(on) {
  var elt = document.getElementById('presence_bar_right');
  if (!elt) return;
  if (on) {
    elt.addEventListener('DOMNodeInserted', handleFBNotifications, false);
  } else {
    elt.removeEventListener('DOMNodeInserted', handleFBNotifications, false);
  }
}

// Turns on/off the event listener for the stats section of the page.
function setListenStats(on) {
  var elt = document.getElementById(SCRIPT.appID + '_game_stats');
  if (!elt) return;
  if (on) {
    elt.addEventListener('DOMNodeInserted', statsInserted, false);
  } else {
    elt.removeEventListener('DOMNodeInserted', statsInserted, false);
  }
}

function statsInserted(e) {
  //if (!ignoreElement(e.target)) logElement(e.target, 'statsInserted');

  // Check for a change in a particular statistic. This is where we'll
  // notice some types of changes that happen without user or script
  // actions, such as earning energy.
  var parentElt = e.target.parentNode;
  if (!parentElt) return;
  if (parentElt == energyElt) {
    energy = parseInt(e.target.nodeValue);
    energyElt.style.textDecoration = (energy == maxEnergy)? 'blink' : 'none';
    setLevelUpRatio();
  } else if (parentElt == staminaElt) {
    var newStamina = parseInt(e.target.nodeValue);
    if (stamina != newStamina) {
      stamina = newStamina;
      staminaFlag = true;
    }    
    staminaElt.style.textDecoration = (stamina == maxStamina)? 'blink' : 'none';    
  } else if (parentElt == cashNYElt && city == NY) {
    cash[NY] = parseCash(e.target.nodeValue);
  } else if (parentElt == cashCubaElt && city == CUBA) {
    cash[CUBA] = parseCash(e.target.nodeValue);
  } else if (parentElt == cashMoscowElt && city == MOSCOW) {
    cash[MOSCOW] = parseCash(e.target.nodeValue);
  } else if (parentElt == healthElt) {
    // NOTE: At one time, health was updated on with a timer. Leave
    //       this here in case it goes back to being that way.
    health = parseInt(e.target.nodeValue);
    healthElt.style.textDecoration = (health > 19 && health < 29)? 'blink' : 'none';
  }
}

function innerPageChanged() {
  // Reset auto-reload (if enabled).
  autoReload();

  // Don't watch while making customizations.
  setListenContent(false);

  customizeMasthead();
  customizeStats();
  customizeNames();
  customizeHome();
  customizeProfile();
  customizeJobs();
  customizeFight();
  customizeHitlist();
  
  // Get tmp parameter
  getTmpParameter();

  // Property
  if (onPropertyNav()) {
    propertyGetDamage(innerPageElt);
    propertyGet();
  }

  // Customizations finished.
  setListenContent(true);

  // Check for deleted news.
  if (xpathFirst('.//td[text()="News deleted"]', innerPageElt)) {
    DEBUG('The player updates were cleared.');
    GM_setValue('logPlayerUpdatesCount', 0);
  }

  // If a click action was taken, check the response.
  if (clickAction) {
    var action = clickAction;
    var context = clickContext;
    clickAction = undefined;
    clickContext = undefined;
    if (!logResponse(innerPageElt, action, context)) {
      // No further action was taken. Kick off auto-play.
      doAutoPlay();
    }
  } else {
    // Kick off auto-play.
    doAutoPlay();
  }
}

function refreshGlobalStats() {
  // NOTE: In this function, only elements displayed in and above the
  //       navigation bar should be examined. Everything in the inner page
  //       (what is displayed below the navigation bar) should instead be
  //       examined via innerPageChanged().

  var cityElt = document.getElementById(SCRIPT.appID + '_mw_city_wrapper');
  if (!cityElt) return false;

  // Set all the element globals. They change.
  cashNYCElt = document.getElementById(SCRIPT.appID+'_user_cash_nyc');
  cashCubaElt = document.getElementById(SCRIPT.appID+'_user_cash_cuba');
  cashMoscowElt = document.getElementById(SCRIPT.appID+'_user_cash_moscow');
  healthElt = document.getElementById(SCRIPT.appID+'_user_health');
  maxHealthElt = document.getElementById(SCRIPT.appID+'_user_max_health');
  energyElt = document.getElementById(SCRIPT.appID+'_user_energy');
  maxEnergyElt = document.getElementById(SCRIPT.appID+'_user_max_energy');
  staminaElt = document.getElementById(SCRIPT.appID+'_user_stamina');
  maxStaminaElt = document.getElementById(SCRIPT.appID+'_user_max_stamina');
  influenceElt = document.getElementById(SCRIPT.appID+'_user_influence');
  maxInfluenceElt = document.getElementById(SCRIPT.appID+'_user_max_influence');
  levelElt = document.getElementById(SCRIPT.appID+'_user_level');
  curExpElt = document.getElementById(SCRIPT.appID+'_user_experience');
  lvlExpElt = document.getElementById(SCRIPT.appID+'_exp_for_next_level');

  // Update basic player information.
  switch(cityElt.className){
    case 'mw_city1':
     city = NY;
     cash[NY] = parseCash(cashNYCElt.innerHTML);
     break;
  case 'mw_city2':
     city = CUBA;
     cash[CUBA] = parseCash(cashCubaElt.innerHTML);
     break;
  case 'mw_city3':
     city = MOSCOW;
     cash[MOSCOW] = parseCash(cashMoscowElt.innerHTML);
     break;
  }

  health = parseInt(healthElt.innerHTML);
  maxHealth = parseInt(maxHealthElt.innerHTML);
  energy = parseInt(energyElt.firstChild.nodeValue);
  maxEnergy = parseInt(maxEnergyElt.innerHTML);
  stamina = parseInt(staminaElt.firstChild.nodeValue);
  maxStamina = parseInt(maxStaminaElt.innerHTML);
  if (maxInfluenceElt) {
    influence = parseInt(influenceElt.firstChild.nodeValue);
    maxInfluence = parseInt(maxInfluenceElt.innerHTML);
  } 
  
  // Remove this when influence stat is released to public
  if (isNaN(influence))
    influence = 0;
  if (isNaN(maxInfluence))
    maxInfluence = 0;
    
  level = parseInt(levelElt.innerHTML);
  curExp = parseInt(curExpElt.innerHTML);
  lvlExp = parseInt(lvlExpElt.innerHTML);
  ptsToNextLevel = lvlExp - curExp;

  // Get the mafia size and pending invites.
  // NOTE: Using contains() for compatibility with "Exp Remaining" script.
  var mafiaLinks = xpath('//div[contains(@class, "mafia_link")]//a');
  mafia = mafiaLinks.snapshotItem(1);
  mafia = document.getElementById(SCRIPT.appID + '_user_group_size');
  if (mafia) {
    mafia = parseInt(mafia.innerHTML.untag());
  }
  if (!mafia || mafia < 1) {
    addToLog('warning Icon', 'BUG DETECTED: Unable to read mafia size.');
  }
  invites = mafiaLinks.snapshotItem(2);
  if (invites && invites.innerHTML.untag().match(/\+(\d+)/)) {
    invites = parseInt(RegExp.$1);
  } else {
    invites = 0;
  }

  // Get the skill points waiting to be spent.
  var skillElt = document.getElementById(SCRIPT.appID+'_user_skill');
  if (skillElt) {
    stats = parseInt(skillElt.innerHTML);
    if (isNaN(stats)) {
      stats = 0;
    } else if (stats > 1) {
      GM_setValue('restAutoStat', 0);
    }
  } else {
    stats = 0;
  }

  // Show congratulations if level has increased.
  if (running && level > GM_getValue('currentLevel')) {
    GM_setValue('currentLevel', level);
    addToLog('experience Icon', '<span style="color:#00FFCC;"> Congratulations on reaching level 

<strong>' + level + '</strong>!</span>');
    GM_setValue('restAutoStat', 0);
  }

  // Trick auto-buy into checking the property page if mafia has grown.
  if (running && mafia && mafia != GM_getValue('currentMafia')) {
    GM_setValue('currentMafia', mafia);
    GM_setValue('buyCost', 1);
  }

  //ATK
  // Check if hourly stats need updating.
  if (GM_getValue('hourlyStatsOpt') == 'checked') {
    var currentTime = new Date();
    if (GM_getValue('hourOfDay') != currentTime.getHours()) {
      updateHourlyStats();
    }
  }
    
  return true;
}

function refreshSettings() {
  // NOTE: In this function, only elements displayed in and above the
  //       navigation bar should be examined. Everything in the inner page
  //       (what is displayed below the navigation bar) should instead be
  //       examined via innerPageChanged().

  // Determine the minimum stamina to keep on hand (the "stamina floor").
  staminaFloor = Math.floor(maxStamina * (1 - parseInt(GM_getValue('selectStaminaKeep', 0)) * 

.10));
  if (staminaFloor >= maxStamina) {
    // Subtract one or else fight/rob will never run.
    staminaFloor--;
  }

  // Determine the threshold for spending stamina (the "stamina ceiling").
  staminaCeiling = Math.floor(maxStamina * (1 - parseInt(GM_getValue('selectStaminaUse', 0)) * 

.10));  

  if (running && GM_getValue('staminaSpend') == 'checked') {
    // Log any change to the floor.
    if (staminaFloor != GM_getValue('staminaFloorLast')) {
      GM_setValue('staminaFloorLast', staminaFloor);
      if (staminaFloor > 1) {
        addToLog('info Icon', staminaIcon + '<span style="color:#04B4AE;";> Stamina is set to 

keep above <strong>' + staminaFloor + '</strong>.</span>');
      }
    }

    // Log any change to the ceiling.
    if (staminaCeiling != GM_getValue('staminaCeilingLast')) {
      GM_setValue('staminaCeilingLast', staminaCeiling);
      if (staminaCeiling > staminaFloor) {
        addToLog('info Icon', staminaIcon + '<span style="color:#04B4AE;";> Stamina refill level 

set to <strong>' + staminaCeiling + '</strong>.</span>');
      }
    }

    // Determine whether stamina spending needs to start or stop.
    if (stamina >= staminaCeiling && !GM_getValue('useStaminaStarted')) {
      GM_setValue('useStaminaStarted', true);
    } else if (stamina <= staminaFloor && staminaCeiling > staminaFloor &&
               GM_getValue('useStaminaStarted')) {
      GM_setValue('useStaminaStarted', false);
      addToLog('info Icon', staminaIcon + '<span style="color:#04B4AE;";> Refilling stamina to 

<strong>' + staminaCeiling + '</strong>.</span>');
    }
  }

  // Set if auto-burn can be used.
  autoStamBurnif = GM_getValue('allowStaminaToLevelUp') == 'checked' &&
                   ptsToNextLevel < stamina * getStaminaGainRate() +
                                    energy * getEnergyGainRate();

  // Auto-pause reset
  if (GM_getValue('autoPauseActivated') === true &&
      GM_getValue('autoPauseBefore') == 'checked' &&
      GM_getValue('autoPauselvlExp') < lvlExp) {
    GM_setValue('autoPauselvlExp', lvlExp);
    GM_setValue('autoPauseActivated', false);
  }

  // Auto-pause logic
  if (running && GM_getValue('autoPause') == 'checked') {
    if (GM_getValue('autoPauseBefore') == 'checked' &&
        GM_getValue('autoPauseExp', '') >= lvlExp - curExp &&
        GM_getValue('autoPauseActivated', false) === false) {
      addToLog('pause Icon', 'Auto-pause in effect. Experience threshold reached.');
      GM_setValue('autoPauseActivated', true);
      pause();
    } else if (GM_getValue('autoPauseAfter') == 'checked' &&
               GM_getValue('autoPauselvlExp', '') < lvlExp) {
      addToLog('pause Icon', 'Auto-pause in effect. Leveled up.');
      GM_setValue('autoPauselvlExp', lvlExp);
      pause();
    }
  }
}

function getStaminaGainRate() {
  var expGained    = GM_getValue('totalExpInt', 0);
  var staminaSpent = GM_getValue('fightWinCountInt', 0) +
                     GM_getValue('fightLossCountInt', 0) +
                     GM_getValue('robWinCountInt', 0) +
                     GM_getValue('robLossCountInt', 0) +
                     GM_getValue('hitmanWinCountInt',0) +
                     GM_getValue('hitmanLossCountInt',0);
  if (!expGained || !staminaSpent) return 0;

  return expGained / staminaSpent;
}

function getEnergyGainRate() {
  var rate = parseFloat(GM_getValue('estimateJobRatio', '1.0'));
  return rate? rate : 0;
}

function checkLanguage() {
  if (document.documentElement.lang == 'en') return;

  DEBUG('Language is "' + document.documentElement.lang + '".');
  DEBUG('Unfortunately, only the English version of the game is fully supported. If you 

experience problems, set your myspace language to English and try again.');
}

function customizeLayout() {
  // Left align.
  if (GM_getValue('leftAlign') == 'checked') {
    var mainFrame = xpathFirst('//div[@class="UIStandardFrame_Container clearfix"]');
    if (mainFrame) {
      mainFrame.setAttribute("style", "margin:0", 0);
    }
  }

  // Deal with ads.
  if (GM_getValue('hideAds') == 'checked') {
    var adsTop = xpathFirst('//iframe[contains(@src, "zbar")]');
    if (adsTop) {
      adsTop.setAttribute("style", "margin:0; height:0; display:none", 0);
    }
    var adsRight = xpathFirst('//div[@class="UIStandardFrame_SidebarAds"]');
    if (adsRight) {
      adsRight.setAttribute("style", "margin:0; height:0; display:none", 0);
    }
  }

  // Deal with the email bar.
  if (GM_getValue('moveEmailBar') == 'checked') {
    var emailBar = xpathFirst('//table[@class="fb_email_prof_header"]');
    var layoutElt = xpathFirst('//div[@class="UIStandardFrame_Content"]');
    if (emailBar && layoutElt)
      layoutElt.appendChild(emailBar);
  }
}

function customizeMasthead() {
  if (document.getElementById('ap_menu')) return;

  // Get the masthead.
  var mastheadElt = document.getElementById(SCRIPT.appID + '_mw_masthead');
  if (!mastheadElt) return;

  // Set custom styles with CSS.
  if (!document.getElementById('nodeInsertedCss')) {
    makeElement('style', document.getElementsByTagName('head')[0], {'id':'nodeInsertedCss', 

'type':'text/css'}).appendChild(document.createTextNode(
      '#ap_menu span:hover{text-decoration:underline}'+
      '#ap_menu span{font-size: 12px; font-weight: bold; cursor: pointer; color: #FFD927}' +
      '.ap_optgroup1 {background-color: #FFD927; text-align: center;}' +
      '.ap_optgroup2 {background-color: #BCD2EA;}'
    ));
  }

  // Make a container for the autoplayer menu.
  var mwapTitle = 'MWAP ' + SCRIPT.version + ' (Build ' + SCRIPT.build + ')';
  makeElement('div', mastheadElt, {'style':'position: absolute; top: 24px; right: 17px; text-

align: left; font-size: 11px; font-weight: bold; color: #FFFFFF'}).appendChild

(document.createTextNode(mwapTitle));
  var menuElt = makeElement('div', mastheadElt, {'id':'ap_menu', 'style':'position: absolute; 

top: 38px; right: 17px; text-align: left;'});

  // Settings Link
  menuElt.appendChild(document.createTextNode(' | '));
  var lobjAutoPlay = makeElement('span', menuElt, {'id':'autoPlay'});
  lobjAutoPlay.appendChild(document.createTextNode('Settings'));
  lobjAutoPlay.addEventListener('click', toggleSettings, false);

  // View log button.
  menuElt.appendChild(document.createTextNode(' | '));
  var lobjViewLogButton = makeElement('span', menuElt);
  lobjViewLogButton.appendChild(document.createTextNode('Log'));
  lobjViewLogButton.addEventListener('click', showMafiaLogBox, false);

  // Show resume or paused based on if we are running or not.
  updateMastheadMenu();
}

function customizeStats() {
  // Don't watch the stats area while we're making changes to it.
  setListenStats(false);

  // Make health icon clickable for instant healing.
  var healLinkElt = document.getElementById('ap_heal');
  var healImgElt = xpathFirst('//img[@alt="Health"]');
  if (healImgElt && !healLinkElt) {
    healLinkElt = makeElement('a', null, {'id':'ap_heal', 'title':'Click to heal immediately.'})
    healImgElt.parentNode.insertBefore(healLinkElt, healImgElt);
    healLinkElt.appendChild(healImgElt);
  }
  
  if (healLinkElt) {
    healLinkElt.href = 'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=110226' + SCRIPT.name +
                       SCRIPT.controller + 'hospital' +
                       SCRIPT.action + 'heal' +
                       SCRIPT.city + (city + 1);

    // Substitute the "hide" icon if currently hiding in the hospital.
    var hideImgElt = healLinkElt.childNodes[1];
    if (running && healImgElt && health < 20 &&
        GM_getValue('hideInHospital') == 'checked') {
      healImgElt.style.display = 'none';
      if (!hideImgElt) {
        hideImgElt = makeElement('img', healLinkElt, {'class':'icon', 'width':'16', 

'height':'16', 'title':'Currently hiding in the hospital. Click to heal immediately.', 

'src':stripURI(hideIcon)});
      }
      hideImgElt.style.display = '';
    } else if (hideImgElt) {
      hideImgElt.style.display = 'none';
      healImgElt.style.display = '';
    }

    // Substitute AJAX navigation if code is available.
    var hospitalElt = xpathFirst('//a[@class="heal_link"]');
    if (hospitalElt) {
      healLinkElt.setAttribute("onclick", hospitalElt.getAttribute("onclick").replace(/view/, 

'heal'));
      if (!running) {
        // Make instant heal work without switching pages.
        healLinkElt.setAttribute("onclick", healLinkElt.getAttribute("onclick").replace

(/'inner_page'/, "'" + SCRIPT.ajaxPage + "'"));
      }
    }
  }

  // Show points until next level.
  // FIXME: Assumes English.
  var elt = xpathFirst('//span[@class="stat_title" and contains(text(), "Experience")]');
  if (elt) {
    elt.innerHTML = 'Experience (' + (ptsToNextLevel > 0? '-' : '+') +
                    Math.abs(ptsToNextLevel) + ')';
  }

  // Blink maxed out energy or stamina.
  energyElt.style.textDecoration = (energy == maxEnergy)? 'blink' : 'none';
  staminaElt.style.textDecoration = (stamina == maxStamina)? 'blink' : 'none';

  // Blink dangerous health levels.
  healthElt.style.textDecoration = (health > 19 && health < 29)? 'blink' : 'none';

  setListenStats(true);
}

function customizeNames() {
  var elts = $x('.//a[contains(@onclick, "controller=stats") and contains(@onclick, 

"action=view")]', innerPageElt);
  for (var i = 0, iLength=elts.length; i < iLength; ++i) {
    var elt = elts[i];
    if (!elt.innerHTML.replace(/\xAD/g, '').trim()) {
      if (elt.getAttribute('onclick').match(/user=(\d+)/)) {
        elt.innerHTML = chickenIcon + ' Chicken ' + RegExp.$1;
      } else {
        elt.innerHTML = chickenIcon + ' Chicken';
      }
    }
  }

  var elts = $x('.//span[contains(@id, "_fight_view_name_")]', innerPageElt);
  for (var i = 0, iLength=elts.length; i < iLength; ++i) {
    var elt = elts[i];
    if (!elt.innerHTML.untag().trim()) {
      elt.innerHTML = chickenIcon + ' Chicken';
    }
  }
}

function customizeHome() {
  if (!onHome()) return;

  // Get the wheelman bonus.
  var elt = xpathFirst('.//span[@class="good" and contains(text(), "Less Energy")]', 

innerPageElt);
  if (elt && elt.innerHTML.untag().match(/(\d+)%/)) {
    var bonus = parseInt(RegExp.$1);
    if (bonus && bonus !== GM_getValue('selectEnergyBonus')) {
      GM_setValue('selectEnergyBonus', bonus);
      DEBUG('Set Wheelman bonus to ' + GM_getValue('selectEnergyBonus') + '%');
    }
  }

  // Get the mastermind bonus.
  var elt = xpathFirst('.//span[@class="good" and contains(text(), "More Experience")]', 

innerPageElt);
  if (elt && elt.innerHTML.untag().match(/(\d+)%/)) {
    var bonus = parseInt(RegExp.$1);
    if (bonus && bonus !== GM_getValue('selectExpBonus')) {
      GM_setValue('selectExpBonus', bonus);
      DEBUG('Set Mastermind bonus to ' + GM_getValue('selectExpBonus') + '%');
    }
  }
    
  // Is an energy pack waiting to be used?
  energyPackElt = xpathFirst('.//span[@class="sexy_pack_use" and contains(text(), "Use energy 

pack")]', innerPageElt);
  energyPack = energyPackElt? true : false;

  // Display a message next to the energy pack button.
  if (energyPackElt) {
    var energyGainRate = getEnergyGainRate();
    var ptsFromEnergyPack = maxEnergy * 1.25 * energyGainRate;
    var ptsNeeded = ptsToNextLevel - energy * energyGainRate -
                    stamina * getStaminaGainRate();
    var txt = ' XP from Energy Pack = ' + parseInt(ptsFromEnergyPack) +
              ', Projected XP needed = ' + parseInt(ptsNeeded);
    var linkElt = energyPackElt.parentNode;
    linkElt.parentNode.appendChild(document.createElement('br'));
    linkElt.parentNode.appendChild(document.createTextNode(txt));
  }
  
  // Fetch Player Stats
  getPlayerStats();  
}

// Get the tmp parameter from homepage
function getTmpParameter(c) {
  var pJavaScripts = xpath(".//script[@type='text/javascript']", c || document);
  var tmpParam;
  
  // Start from the last (bottom page code)
  for (var i=pJavaScripts.snapshotLength - 1; i >= 0; i--) {      
    tmpParam = pJavaScripts.snapshotItem(i).innerHTML.match(/&xw_action=attack&xw_city=\d+&tmp=

([^&"'<]+)/);
    if (tmpParam) {
      fightTmp = tmpParam[1];
      //GM_log('tmp=' + fightTmp);
      return true;
    }
  }
}

function getPlayerStats() {
  var statElt = $x('.//*[@class="profile_stat_number"]', innerPageElt);
  
  // Fetch defense and attack values from old home format
  if (!(statElt == null)) {
    if (!(statElt[0] == null))
      curAttack  = parseInt(statElt[0].innerHTML);
    if (!(statElt[1] == null))
      curDefense = parseInt(statElt[1].innerHTML);         
  }  
    
  // Some players would have the beta homepage (flash updates)
  // Try retrieving Attack/Defense details from mw_* tags in javascript
  if (isNaN (curDefense) || isNaN(curAttack)) {
    var pJavaScripts = xpath("//script[@type='text/javascript']");
    var tempStat;
     
    for (var i=0, iLength=pJavaScripts.snapshotLength; i < iLength; ++i ) {    
      tempStat = pJavaScripts.snapshotItem(i).innerHTML.match(/"mw_attack", "([0-9]+)/);
      if (tempStat) {
        curAttack = tempStat[1];
      }
      tempStat = pJavaScripts.snapshotItem(i).innerHTML.match(/"mw_defense", "([0-9]+)/);
      if (tempStat) {
        curDefense = tempStat[1];
        return true;
      }
    }
  }
  
  return true;
}

function customizeProfile() {
  // Extra options for the profile page.
  var statsTable = xpathFirst('.//td[@class="stats_left"]', innerPageElt);
  if (statsTable) {
    var statsDiv = statsTable.parentNode.parentNode.parentNode.previousElementSibling; //Yeah, I 

know it's sort of hackish, but seems the cleanest way to get the div.
    statsDiv.innerHTML.match(/opponent_id=(\d+)/);
    var id = RegExp.lastParen;
    if (id) {
      //makeElement('br', statsDiv);
      makeElement('a', statsDiv, {'href':'http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + 

id}).appendChild(document.createTextNode('Myspace Profile'));
      statsDiv.appendChild(document.createTextNode(' | '));
      makeElement('a', statsDiv, {'href':'http://www.myspace.com/addfriend.php?id=' + 

id}).appendChild(document.createTextNode('Add as Friend'));
      statsDiv.appendChild(document.createTextNode(' | '));
      makeElement('a', statsDiv, {'href':http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name + 

'/status_invite.php?from=' + id}).appendChild(document.createTextNode('Add to Mafia'));
      statsDiv.appendChild(document.createTextNode(' | '));
      makeElement('a', statsDiv, {'href':http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name + 

SCRIPT.controller + 'group' + SCRIPT.action + 'view' + SCRIPT.city + (city + 1) + 

'&promote=yes&uid=' + id}).appendChild(document.createTextNode('Promote'));
      makeElement('br', statsDiv);
      var el = makeElement('a', statsDiv, {'id':id});
      var fightList = getSavedList('fightList');
      if (fightList.indexOf(id) != -1) {
        el.appendChild(document.createTextNode('Remove from Fight List'));
        el.addEventListener('click', clickFightListRemove, false);
      } else {
        el.appendChild(document.createTextNode('Add to Fight List'));
        el.addEventListener('click', clickFightListAdd, false);
      }
      statsDiv.appendChild(document.createTextNode(' | '));
      var el = makeElement('a', statsDiv, {'id':id});
      var robList = getSavedList('robList');
      if (robList.indexOf(id) != -1) {
        el.appendChild(document.createTextNode('Remove from Rob List'));
        el.addEventListener('click', clickRobListRemove, false);
      } else {
        el.appendChild(document.createTextNode('Add to Rob List'));
        el.addEventListener('click', clickRobListAdd, false);
      }

      makeElement('br', statsDiv);
      el = makeElement('a', statsDiv, {'id':'gift' + id});
      el.appendChild(document.createTextNode('Add as gift recipient'));
      el.addEventListener('click', saveRecipientInfo, false);

      statsDiv.appendChild(document.createTextNode(' | '));
      makeElement('a', statsDiv, {'href':http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name + 

SCRIPT.controller + 'group' + SCRIPT.action + 'energy' + SCRIPT.city + (city + 1) + '&fid=' + 

id}).appendChild(document.createTextNode('Send Energy Pack'));
    }

    // Other profile customizations: add counts of weapons, armor, and
    // vehicles if on our own profile page.
    var currentPageText = xpath('.//ul[@class="nice_list items_list clearfix"]', innerPageElt);
    var otherPerson = xpath('.//span[@class="levels"]', innerPageElt);
    if ((otherPerson.snapshotLength > 0) && (otherPerson.snapshotLength < 5)) {
      for (zz = 0, zzLength=otherPerson.snapshotLength; zz < zzLength; zz++) {
        if ((otherPerson.snapshotItem(zz).innerHTML == '(Your Character)') && 

(currentPageText.snapshotLength > 0)) {
          profileFix();
          break;
        }
      }
    }
  }
}

function customizeJobs() {
  // Extras for jobs pages.
  var jobTable = xpathFirst('.//table[@class="job_list"]', innerPageElt);
  if (!jobTable) return;

  var availableJobs = eval(GM_getValue("availableJobs", "({0:{},1:{},2:{}})"));
  var currentTab = currentJobTab();
  availableJobs[city][currentTab] = [];

  // Display an experience to energy payoff ratio for each job.
  var bestJobs = [], worstJobs = [];
  var bestRatio = 0, worstRatio = 10;
  var reselectJob = false;
  var jobInfo = xpath('.//td[@class="job_name"]', innerPageElt);
  var energies = xpath('.//td[@class="job_energy"]/span[@class="bold_number"]', innerPageElt);
  var rewards = xpath('.//td[@class="job_reward"]/span[@class="bold_number"]', innerPageElt);
  var requiredItems = xpath('.//td[@class="job_required_items"]', innerPageElt);
  var jobButton = xpath('.//td[@class="job_action"]', innerPageElt);
  for (var i = 0, iLength = energies.snapshotLength; i < iLength; ++i) {
    elt = energies.snapshotItem(i);
    var cost = parseInt(elt.firstChild.nodeValue);
    var reward = parseInt(rewards.snapshotItem(i).firstChild.nodeValue);
    var ratio = Math.round(reward / cost * 100) / 100;

    // FIXME: Should check for isRunning
    var jobName = jobInfo.snapshotItem(i).innerHTML.split('<br>')[0].trim();
    var jobMatch = missions.searchArray(jobName, 0)[0];

    if (jobMatch) {
      // FIXME: Try to buy the required items if the item is store bought.
      //        If job loot, should we add the job that drops it on selectMissionMultiple?

      // Ignore jobs with item requirements/locked jobs
      if (jobButton.snapshotItem(i).innerHTML.indexOf('sexy_button_locked') == -1 &&
         requiredItems.snapshotItem(i).innerHTML.indexOf('need_item') == -1) {
        availableJobs[city][currentTab].push(jobMatch);     
      } else {
        DEBUG('Job ' + missions[jobMatch][0] + '(' + jobMatch + ') is not available yet. 

Skipping.');
      }

      // Ignore mastered jobs
      if (missions[jobMatch][9] == true) {
        // This job is already mastered. Add to the ignore list.
        if (jobInfo.snapshotItem(i).innerHTML.indexOf('Mastered') != -1 && 
            getSavedList('ignoredJobsList').indexOf(jobMatch) == -1) {
          addToLog('process Icon', 'The job ' + missions[jobMatch][0] + ' is already 100%. Adding 

to ignore list.');
          addSavedListItem('ignoredJobsList', jobMatch);
          if (jobMatch == GM_getValue('selectMission', 1)) reselectJob = true;
        }      
      }
    }

    makeElement('br', elt.parentNode);
    makeElement('span', elt.parentNode, {'style':'color:#666666; font-size: 11px'}).appendChild

(document.createTextNode('Pays ' + ratio + 'x'));

    // Keep track of the best & worst payoffs.
    if (ratio > bestRatio) {
      bestRatio = ratio;
      bestJobs = [elt];
    } else if (ratio == bestRatio) {
      bestJobs.push(elt);
    }
    if (ratio < worstRatio) {
      worstRatio = ratio;
      worstJobs = [elt];
    } else if (ratio == worstRatio) {
      worstJobs.push(elt);
    }

    // Calculate time left for each job and display under the do job button
    var timePerEnergy = GM_getValue('isManiac') == 'checked' ? 3 : 5;
    timePerEnergy = GM_getValue('hasHelicopter') == 'checked' ? timePerEnergy - .5: 

timePerEnergy;
    timePerEnergy = GM_getValue('hasGoldenThrone') == 'checked' ? timePerEnergy/2: timePerEnergy;
    if (cost > energy) {
      jobTimeLeft = (cost - energy) * timePerEnergy;
      if (jobTimeLeft < 60)
        jobTimeLeftText = 'Time: < ' + (Math.round((jobTimeLeft) * 10) / 10) + ' min';
      else {
        jobTimeLeft = Math.round((jobTimeLeft/60) * 100) / 100;
        if (jobTimeLeft < 24)
          jobTimeLeftText = 'Time: < ' + jobTimeLeft + ' hr';
        else
          jobTimeLeftText = 'Time: < ' + Math.round(jobTimeLeft/24) + ' days';
      }
    } else {
      jobTimeLeftText = 'Time: 0 min';
    }
    makeElement('br', jobButton.snapshotItem(i));
    makeElement('span', jobButton.snapshotItem(i), {'style':'color:#666666; font-size: 

11px'}).appendChild(document.createTextNode(jobTimeLeftText));
  }

  // Highlight the best and worst jobs.
  if (worstRatio != bestRatio) {
    while (bestJobs.length) {
      elt = bestJobs.pop().parentNode;
      makeElement('br', elt);
      elt = makeElement('span', elt, {'style':'color:#52E259; font-size: 11px'});
      makeElement('img', elt, {'src':stripURI(goodIcon), 'width':'12', 'height':'12', 

'style':'vertical-align:middle'});
      elt.appendChild(document.createTextNode(' BEST'));
    }
    while (worstJobs.length) {
      elt = worstJobs.pop().parentNode;
      makeElement('br', elt);
      elt = makeElement('span', elt, {'style':'color:#EC2D2D; font-size: 11px'});
      makeElement('img', elt, {'src':stripURI(badIcon), 'width':'12', 'height':'12', 

'style':'vertical-align:middle'});
      elt.appendChild(document.createTextNode(' WORST'));
    }
  }

  // Show the experience to energy ratio needed to level up.
  elt = makeElement('div', null, {'id':'level_up_ratio', 'style':'text-align:center; 

display:none'});
  makeElement('img', elt, {'src':stripURI(infoIcon), 'style':'vertical-align:middle'});
  elt.appendChild(document.createTextNode(''));
  jobTable.parentNode.insertBefore(elt, jobTable);
  setLevelUpRatio();
  if(reselectJob) canMission();
  GM_setValue("availableJobs", availableJobs.toSource());
}

function customizeFight() {
  var opponents = getDisplayedOpponents(innerPageElt, true);
  if (!opponents) return false;

  // Customize the opponent list.
  var blacklist = getSavedList('fightListAvoid');
  for (var i = 0, iLength=opponents.length; i < iLength; ++i) {
    var opponent = opponents[i];
    if (!opponent.profile || !opponent.id) continue;

    // Mark targets that should be avoided.
    if (blacklist.indexOf(opponent.id) != -1) {
      var parentElt = opponent.profile.parentNode;
      var elt = makeElement('img', null, {'src':stripURI(badIcon), 'width':'12', 'height':'12', 

'style':'vertical-align:middle', 'title':'You have already lost to this opponent during automatic 

play.'});
      parentElt.insertBefore(elt, parentElt.firstChild);
    }
  }
}

function customizeHitlist() {
  // Extras for hitlist.
  if (!onHitlistTab()) return;

  // Get the displayed opponents.
  var opponents = getHitlist(innerPageElt, true);
  if (!opponents) return false;

  // Customize the opponent list.
  var blacklist = getSavedList('hitmanListAvoid').concat(getSavedList('fightListAvoid'));
  var kills = getSavedList('hitmanListKilled');
  for (var i = 0, iLength=opponents.length; i < iLength; ++i) {
    var opponent = opponents[i];
    if (!opponent.profile) continue;

    // Mark targets that should be avoided.
    if (blacklist.indexOf(opponent.id) != -1) {
      var parentElt = opponent.profile.parentNode;
      var elt = makeElement('img', null, {'src':stripURI(badIcon), 'width':'12', 'height':'12', 

'style':'vertical-align:middle', 'title':'You have already lost to this opponent during automatic 

play.'});
      parentElt.insertBefore(elt, parentElt.firstChild);
    }

    // Mark targets on which bounties have already been collected.
    if (kills.indexOf(opponent.id) != -1) {
      var parentElt = opponent.profile.parentNode;
      var elt = makeElement('img', null, {'src':stripURI(lootbagIcon), 'width':'12', 

'height':'12', 'style':'vertical-align:middle', 'title':'You have already collected a bounty on 

this target during automatic play.'});
      parentElt.insertBefore(elt, parentElt.firstChild);
    }
  }
}

function filterNotifications(elt) {
  var handleCheck = GM_getValue('notificationHandle', 1);
  if (!handleCheck) return;

  // Get all beeps (pop-ups about notifications).
  var beeps = xpath('.//div[@class="UIBeep_Title"]', elt);
  for (var i = 0, iLength=beeps.snapshotLength; i < iLength; i++) {
    var beepElt = beeps.snapshotItem(i);
    if (beepElt && beepElt.innerHTML.indexOf('You sent a notification')) {
      // A notification was sent.
      var undoElt = xpathFirst('.//a[@class="undo_link"]', beepElt);
      if (!undoElt) continue;

      // Cancel certain types of notifications.
      if (beepElt.innerHTML.match(/fought you/i)) {
          clickElement(undoElt);
          addToLog('info Icon', 'Canceled attack notification.');
      } else if (beepElt.innerHTML.match(/robbed you/i)) {
          clickElement(undoElt);
          addToLog('info Icon', 'Canceled rob notification.');
      } else if (handleCheck == 2) {
          //FIXME: Should make sure it is a Mafia Wars notification.
          clickElement(undoElt);
          addToLog('info Icon', 'Canceled notification.');
      }
    }
  }
}

function setLevelUpRatio() {
  var elt = document.getElementById('level_up_ratio');
  if (elt) {
    if (energy) {
      var ratio = Math.round((lvlExp - curExp) / energy * 100) / 100;
      elt.childNodes[1].nodeValue = ' A ' + (ratio > 10? '>10' : ratio) + 'x pay ratio would be 

needed to level up on energy alone.';
      elt.style.display = 'block';
    } else {
      elt.style.display = 'none';
    }
  }
}

// Callback for clicking 'Add to Fight List' on profile page.
function clickFightListAdd() {
  addSavedListItem('fightList', this.id);
  this.firstChild.nodeValue = 'Remove from Fight List';
  this.removeEventListener('click', clickFightListAdd, false);
  this.addEventListener('click', clickFightListRemove, false);
  var el = document.getElementById('fightList');
  if (el) {
    el.value = GM_getValue('fightList', '');
  }
}

// Callback for clicking 'Remove from Fight List' on profile page.
function clickFightListRemove() {
  while(removeSavedListItem('fightList', this.id));
  this.firstChild.nodeValue = 'Add to Fight List';
  this.removeEventListener('click', clickFightListRemove, false);
  this.addEventListener('click', clickFightListAdd, false);
  var el = document.getElementById('fightList');
  if (el) {
    el.value = GM_getValue('fightList', '');
  }
}

// Callback for clicking 'Add to Rob List' on profile page.
function clickRobListAdd() {
  addSavedListItem('robList', this.id);
  this.firstChild.nodeValue = 'Remove from Rob List';
  this.removeEventListener('click', clickRobListAdd, false);
  this.addEventListener('click', clickRobListRemove, false);
  var el = document.getElementById('robList');
  if (el) {
    el.value = GM_getValue('robList', '');
  }
}

// Callback for clicking 'Remove from Rob List' on profile page.
function clickRobListRemove() {
  while(removeSavedListItem('robList', this.id));
  this.firstChild.nodeValue = 'Add to Rob List';
  this.removeEventListener('click', clickRobListRemove, false);
  this.addEventListener('click', clickRobListAdd, false);
  var el = document.getElementById('robList');
  if (el) {
    el.value = GM_getValue('robList', '');
  }
}

function getJobRow(jobName, contextNode) {
  // WARNING: Call for xpath differs based on quoting. This won't work if
  //          the job name has both double quotes (") and apostrophes (').
  var xQuote = (jobName.indexOf('"') != -1) ?  '\'' : '"';
  var rowElt = xpathFirst('.//tr[contains(., ' + xQuote + jobName + xQuote + ') and contains(., 

"Do Job")]', contextNode);
  if (!rowElt) {
    addToLog('warning Icon', 'Unable to find job row for ' + jobName + '.');
  }
  return rowElt;
}

function jobReqs (element) {
  // If we are here then we have already failed the job.
  addToLog('process Icon', 'Getting job requirements.');

  // Find the job row.
  var currentJob = missions[GM_getValue('selectMission', 1)][0];
  var currentJobRow = getJobRow(currentJob, element);
  if (!currentJobRow) return;

  // Do we need to buy something?
  var buyElt = xpathFirst('.//a[contains(., "Buy Item")]', element);
  if (buyElt) {
    addToLog('search Icon', 'Attempting to purchase required items.');
    Autoplay.fx = function() { goLinkElement(buyElt); };
    return;
  }
  DEBUG('Nothing to buy; moving to prerequisite job.');

  var items = getSavedList('itemList');
  var jobs = getSavedList('jobsToDo', '');
  var necessaryItems = $x('.//div[@class="req_item need_item"]//img', currentJobRow);

  // Save the current job for later. The current job should not already
  // exist in the list, so check first.
  if (jobs.indexOf(currentJob) == -1) {
    jobs.push(currentJob);
    DEBUG('Saving ' + currentJob + ' for later.');
    setSavedList('jobsToDo', jobs);
  } else {
    DEBUG(currentJob + ' is already in the jobs to-do list.');
  }

  // Figure out which loot items are needed before this job can be attempted
  // again and, consequently, which jobs will have to be done to get them.
  if (necessaryItems.length > 0) {
    necessaryItems.forEach(
      function(i){
        DEBUG('Missing : ' +i.alt);
        requirementJob.forEach(
          function(j){
            if (j[0] == i.alt) {
              jobs.push(j[1]);
              items.push(i.alt);
            }
          }
        );
      }
    );
  } else { addToLog('warning Icon', 'BUG DETECTED: Broken item detection.'); }

  // Set the very next job to perform.
  var doJob = jobs.pop();
  setSavedList('jobsToDo', jobs);
  setSavedList('itemList', items.unique());
  var i = 0;
  DEBUG('Will do job ' + doJob + ' next.');
  missions.forEach(
    function(f) {
        // Help locate name mismatches.
        //DEBUG(f[0] +'  :<<f>>: ' + missions[i][0]);
      if (f[0] == doJob) {
        GM_setValue('selectMission', i);
        addToLog('process Icon', 'Switching job to ' + doJob + '.');
      }
      i++;
    }
  );

  return;
}

function jobProgress(element) {
  if (GM_getValue('multipleJobs') == 'checked') {
    // Cycle jobs with the same ratio
    var availableJobs = eval(GM_getValue("availableJobs", "({0:{},1:{},2:{}})"));
    var multiple_jobs_list = getSavedList('selectMissionMultiple'); 
    var cycle_jobs = new Object();

    // Group selected jobs by ratio
    for (var i=0, iLength=multiple_jobs_list.length; i < iLength; ++i) {
      var job = multiple_jobs_list[i];
      var mission = missions[job];

      // Put non-available jobs at the end of the queue
      if (availableJobs[mission[4]][mission[3]] != null &&
          availableJobs[mission[4]][mission[3]].indexOf(parseInt(job)) == -1) {
        mission[7] = 0;
      }      

      if (cycle_jobs[mission[7]] == null) {
        cycle_jobs[mission[7]] = [];
      }
      cycle_jobs[mission[7]].push(multiple_jobs_list[i]);
    }

    // Rebuild the job list array
    multiple_jobs_list = [];
    for (var i in cycle_jobs) {
      if (cycle_jobs[i].length > 1) {
        // Only cycle the current job's ratio group
        if (missions[GM_getValue('selectMission', 1)][7] == i) {
          cycle_jobs[i].push(cycle_jobs[i].shift());
        }
        for (var n = 0, nLength=cycle_jobs[i].length; n < nLength; ++n) {
          multiple_jobs_list.push(cycle_jobs[i][n]);
        }
      } else {
        multiple_jobs_list.push(cycle_jobs[i][0]);
      }
    }
    setSavedList('selectMissionMultiple', multiple_jobs_list);

    DEBUG('Exiting jobProgress function; multipleJobs is checked.');
    return;
  }

  if (GM_getValue('repeatJob') == 'checked') {
    DEBUG('Exiting jobProgress function; repeatJob is checked.');
    return;
  }

  var selectMission = parseInt(GM_getValue('selectMission', 1));
  var currentJob = missions[selectMission][0];
  var jobno      = missions[selectMission][2];
  var tabno      = missions[selectMission][3];
  var cityno     = missions[selectMission][4];
  DEBUG('Calculating progress for ' + currentJob + '.');
  // WARNING: Call for xpath differs based on quoting. This won't work if
  //          the job name has both double quotes (") and apostrophes (').
  var xQuote = (currentJob.indexOf('"') != -1) ?  '\'' : '"';
  // FIXME: This assumes the button label is "Do Job" when it actually could be
  //        "Pick Vory" or "Pick Mafiya" instead. Need to find a better way.
  //        Maybe find the rows with: .//td[@class="job_action"]/..
  //        But then some rows could be locked, throwing off the calculation.
  var currentJobRow = xpath('.//tr[contains(., ' + xQuote + currentJob + xQuote + ') and 

contains(., \'Do Job\')]', element);
  if (!currentJobRow.snapshotLength) {
    addToLog('warning Icon', 'Unable to find job row for ' + currentJob + '.');
    var tierJobs = $x('.//tr/td[@class="job_name"]', element);
    if (typeof(tierJobs[0]) == 'undefined') {
      addToLog('warning Icon', 'No jobs found in result. Checking page contents.');
      if (element.innerHTML.indexOf('Try Again')>0) {
        addToLog('warning Icon', "We are on the 'Try Again' error page.");
      }
    } else {
      addToLog('process Icon', tierJobs.length + ' jobs found in result page.');
      tierJobs.forEach(
        function(f) {
          DEBUG("Found job: " + f.innerHTML.untag().trim());
        });
    }
    return;
  }

  // Calculate tier mastery.
  DEBUG("Checking mastery for each job.");
  var currentJobRowIndex = currentJobRow.snapshotLength - 1;
  var tierLevel;
  if (currentJobRow.snapshotItem(currentJobRowIndex).innerHTML.match(/level (\d+)/i)) {
    tierLevel = RegExp.$1
  }
  // FIXME: Need to ignore job rows with "locked" buttons so they don't
  //        throw off the calculation.
  var tierJobs = $x('.//tr/td[@class="job_name"]', element);
  var tierPercent = 0;
  tierJobs.forEach(
    function(f) {
      if (f.innerHTML.indexOf('Mastered') != -1) {
        tierPercent += 100;
      } else if (f.innerHTML.match(/Mastery\s+(\d+)%/i)) {
        tierPercent += parseInt(RegExp.$1);
      }
      // FIXME: Some jobs appear with no bar even if mastered, such as
      //        Fight Off An Ultra-National Gang
    }
  );
  if (tierJobs.length) {
    tierPercent = Math.floor(tierPercent / tierJobs.length);
  }
  if (GM_getValue('tierCompleteStatus') != tierLevel + '|' + tierPercent) {
    GM_setValue('tierCompleteStatus', tierLevel + '|' + tierPercent);
    addToLog('info Icon', 'Job tier level ' + tierLevel + ' is ' +
             tierPercent + '% complete.');
  }

  // Calculate job mastery.
  DEBUG("Checking current job mastery.");
  var currentJobMastered = currentJobRow.snapshotItem(currentJobRowIndex).innerHTML.indexOf

('Mastered');
  if (currentJobMastered > 0) {
    var jobList = getSavedList('jobsToDo');
    if (!jobList.length) {
      addToLog('info Icon', 'You have mastered <span class="job">' + currentJob + '</span>.');
      DEBUG('Checking job tier mastery.');
      if (tierPercent == 100) {
        // Find the first job of the next tier.
        // NOTE: This assumes that the missions array is sorted by city and
        //       then by tier.
        var nextTierJob;
        for (var i = selectMission + 1, iLength=missions.length; i < iLength; ++i) {
          if (missions[i][4] != cityno) {
            nextTierJob = i;
            addToLog('info Icon', 'You have mastered the final job tier in ' +
                     cities[cityno] + '! Moving to the next tier in ' +
                     cities[missions[nextTierJob][4]] + '.');
            break;
          }
          if (missions[i][3] != tabno) {
            nextTierJob = i;
            addToLog('info Icon', 'Current job tier is mastered. Moving to next tier in ' + 

cities[cityno] + '.');
            break;
          }
        }
        if (!nextTierJob) {
          addToLog('info Icon', 'You have mastered all jobs!');
        } else {
          GM_setValue('selectMission', nextTierJob);
          addToLog('info Icon', 'Job switched to <span class="job">' + missions[GM_getValue

('selectMission', 1)][0] + '</span>.');
        }
      } else {
          // Find the first unmastered job of this next tier.
          var findMastery = function(v, i, a) { return (a[i].innerHTML.indexOf('Mastery') > 0)? 

1:0; };
          var nonMasteredJobs = tierJobs.filter(findMastery);
          var jobName = nonMasteredJobs[0].innerHTML.split('<br>')[0].trim();
          var matches = missions.searchArray(jobName, 0);
          if (!matches) {
            addToLog('warning Icon', 'BUG DETECTED: ' + jobName +
                     ' not found in mission array.');
            return;
          }
          GM_setValue('selectMission', matches[0]);
          addToLog('info Icon', 'Job switched to <span class="job">' + missions[GM_getValue

('selectMission', 1)][0] + '</span>.');
      }
    } else {
      DEBUG("There are jobs in the to-do list.");
    }
  } else {
    DEBUG("Job is not mastered. Checking percent of mastery.");
    var jobPercentComplete = currentJobRow.snapshotItem(currentJobRowIndex).innerHTML.split

('Mastery ')[1].split('%')[0];
    if (GM_getValue('jobCompleteStatus') != (currentJob + '|' + String(jobPercentComplete))) {
      GM_setValue('jobCompleteStatus', (currentJob + '|' + String(jobPercentComplete)));
      addToLog('info Icon', '<span class="job">' + currentJob + '</span> is ' + 

jobPercentComplete + '% complete.');
    }
  }
  return;
}

function jobLoot(element) {
  var lootbag = [];

  // See what loot was gained.
  var messages = $x('.//td[@class="message_body"]', element);
  var numMessages = messages.length;
  for (var i = 1; i < numMessages; i++) {
    var innerNoTags = messages[i].innerHTML.untag();
    if (innerNoTags.match(/You\s+gained(?:\s+an?)?\s+(.+)\./) ||
        innerNoTags.match(/found(?:\s+an?)?\s+(.*?)\s+on\s+the/i) ||
        innerNoTags.match(/earned(?:\s+an?)?\s+(.*?)\.\s+you\s+/i)) {
      var loot = RegExp.$1;
      addToLog('lootbag Icon', '<span class="loot">'+' Found ' + loot + ' in the job.' + 

'</span>');
      lootbag.push(loot);
    }
  }

  var items = getSavedList('itemList');
  if (typeof(items[0]) == 'undefined' || items.length == 0) {
    DEBUG('No items in required item list.');
    return;
  }
  DEBUG('Found ' + lootbag.length + ' item(s) on this job.');

  var itemFound = false;
  var itemName;
  // NOTE: The single equal sign is intentional in this while() condition.
  while (itemName = lootbag.pop()) {
    DEBUG('Looking for ' + itemName + ' in needed items list.');
    DEBUG('We need ' + items.length + ' item(s).');
    for (var j = 0, jLength=items.length; j < jLength; j++) {
      if (itemName.indexOf(items[j]) != -1 ) {
        // we found some needed loot
        itemFound = true;
        addToLog('found Icon', itemName + ' is the item we were looking for!');
        removeSavedListItem('itemList', itemName);
        var jobList = getSavedList('jobsToDo');
        var doJob = jobList.pop();
        setSavedList('jobsToDo', jobList);

        for (var k = 0, numMissions=missions.length; k < numMissions; k++) {
          if (missions[k][0] == doJob) {
            addToLog('info Icon', 'Switching job to ' + doJob + '.');
            GM_setValue('selectMission', k);
            break;
          }
        }
      }
    }
  }
  if (!itemFound) {
    var jobResult;
    for (var i = 0, numItems=items.length; i < numItems; ++i) {
      jobResult = requirementJob.searchArray(items[i], 0);
      if (jobResult === false) {
        addToLog('warning Icon', 'BUG DETECTED: ' + items[i] + ' not found in requirementJob 

array.');
      } else {
        if (missions[GM_getValue('selectMission', 1)][0] != requirementJob[jobResult][1]) {
          DEBUG(items[i] + ' cannot be found doing this job.');
        }
      }
      DEBUG(items[i] + ' not found.');
    }
  }
}

function debugDumpSettings() {
  // Use showIfUnchecked() to show 0 value as "un-checked", or showIfSelected()
  // to show 0 value as "not selected" (for radio buttons).

  var jobSelected;
  if (GM_getValue('multipleJobs') == 'checked') {
    var multiple_jobs_list = getSavedList('selectMissionMultiple');
    var jobNames = [];
    for (var i=0, numJobs=multiple_jobs_list.length; i < numJobs; ++i) {
      jobNames.push(missions[multiple_jobs_list[i]][0]);
    }
    jobSelected = jobNames.join(', ');
  } else {
    jobSelected = missions[GM_getValue('selectMission')][0];
  }

  DEBUG('>  >  >  >  >  BEGIN SETTINGS DUMP  <  <  <  <  <<br>' +
        'Script Version: <strong>' + SCRIPT.version + ' build ' + SCRIPT.build + '</strong><br>' 

+
        'Language: <strong>' + document.documentElement.lang + '</strong><br>' +
        'Player current level: <strong>' + level + '</strong><br>' +
        'Player points to next level: <strong>' + ptsToNextLevel + '</strong><br>' +
        'Player mafia size: <strong>' + mafia + '</strong><br>' +
        'Player attack: <strong>' + curAttack + '</strong><br>' +
        'Player defense: <strong>' + curDefense + '</strong><br>' +
        'Player health: <strong>' + health + '/' + maxHealth + '</strong><br>' +
        'Player energy: <strong>' + energy + '/' + maxEnergy + '</strong><br>' +
        'Player stamina: <strong>' + stamina + '/' + maxStamina + '</strong><br>' +
        'Player influence: <strong>' + influence + '</strong><br>' +
        'Player skill points: <strong>' + stats + '</strong><br>' +
        'Energy pack waiting? <strong>' + energyPack + '</strong><br>' +
        'Current location: <strong>' + cities[city] + '</strong><br>' +
        'Player NY cash: <strong>' + (cash[NY] == undefined? 'unknown' : '$' + makeCommaValue

(cash[NY])) + '</strong><br>' +
        'Player Cuba cash: <strong>' + (cash[CUBA] == undefined? 'unknown' : 'C$' + 

makeCommaValue(cash[CUBA])) + '</strong><br>' +
        'Player Moscow cash: <strong>' + (cash[MOSCOW] == undefined? 'unknown' : 'R$' + 

makeCommaValue(cash[MOSCOW])) + '</strong><br>' +
        '-------------------General Tab-------------------<br>' +
        'Enable auto-refresh: <strong>' + showIfUnchecked(GM_getValue('autoClick'))+ 

'</strong><br>' +
        '&nbsp;&nbsp;-Refresh rate low: <strong>'+ GM_getValue('r1') + '</strong><br>' +
        '&nbsp;&nbsp;-Refresh rate high: <strong>' + GM_getValue('r2') + '</strong><br>' +
        'Enable auto-heal: <strong>' + showIfUnchecked(GM_getValue('autoHeal')) + '</strong><br>' 

+
        '&nbsp;&nbsp;-Heal in NY: <strong>' + showIfSelected(GM_getValue('healLocationNY')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Heal in Cuba: <strong>' + showIfSelected(GM_getValue('healLocationCuba')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Heal in Moscow: <strong>' + showIfSelected(GM_getValue

('healLocationMoscow')) + '</strong><br>' +
        '&nbsp;&nbsp;-Minimum health: <strong>' + GM_getValue('healthLevel') + '</strong><br>' +
        '&nbsp;&nbsp;-Hide in hospital: <strong>' + showIfUnchecked(GM_getValue

('hideInHospital')) + '</strong><br>' +
        'Enable auto-bank in NY: <strong>' + showIfUnchecked(GM_getValue('autoBank')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Minimum deposit: $<strong>' + GM_getValue('bankConfig') + '</strong><br>' +
        'Enable auto-bank in Cuba: <strong>' + showIfUnchecked(GM_getValue('autoBankCuba')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Minimum deposit: C$<strong>' + GM_getValue('bankConfigCuba') + 

'</strong><br>' +
        'Enable auto-bank in Moscow: <strong>' + showIfUnchecked(GM_getValue('autoBankMoscow')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Minimum deposit: R$<strong>' + GM_getValue('bankConfigMoscow') + 

'</strong><br>' +
        'Enable auto-pause: <strong>' + showIfUnchecked(GM_getValue('autoPause')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-After level up: <strong>' + showIfSelected(GM_getValue('autoPauseAfter')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Before level up: <strong>' + showIfSelected(GM_getValue('autoPauseBefore')) 

+ '</strong><br>' +
        '&nbsp;&nbsp;-Exp to pause at: <strong>'+ GM_getValue('autoPauseExp') + '</strong><br>' +
        'Left-align main frame: <strong>'+ showIfUnchecked(GM_getValue('leftAlign')) + 

'</strong><br>' +
        'Hide ads: <strong>'+ showIfUnchecked(GM_getValue('hideAds')) + '</strong><br>' +
        'Move email options: <strong>'+ showIfUnchecked(GM_getValue('moveEmailBar')) + 

'</strong><br>' +
        'Undo notifications: <strong>'+ GM_getValue('notificationHandle') + '</strong><br>' +
        'Accept mafia invitations: <strong>'+ showIfUnchecked(GM_getValue

('acceptMafiaInvitations')) + '</strong><br>' +
        'Enable logging: <strong>' + showIfUnchecked(GM_getValue('autoLog')) + '</strong><br>' +
        '&nbsp;&nbsp;-Logging length: <strong>' + GM_getValue('autoLogLength') + '</strong><br>' 

+
        'Log player updates: <strong>' + showIfUnchecked(GM_getValue('logPlayerUpdates')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Updates length: <strong>' + GM_getValue('logPlayerUpdatesMax') + 

'</strong><br>' +
        'Idle in: <strong>' + cities[GM_getValue('idleLocation', NY)] + '</strong><br>' +        
        'Delay rate low: <strong>'+ GM_getValue('d1') + '</strong><br>' +
        'Delay rate high: <strong>' + GM_getValue('d2') + '</strong><br>' +
        'Automatically Help on Jobs: <strong>' + showIfUnchecked(GM_getValue('autoHelp')) + 

'</strong><br>' +
        'Skip gift wall posts: <strong>' + GM_getValue('autoGiftSkipOpt') + '</strong><br>' +
        'Enable auto-lotto: <strong>' + GM_getValue('autoLottoOpt') + '</strong><br>' +
        'Automatically asks for job help: <strong>' + showIfUnchecked(GM_getValue

('autoAskJobHelp')) + '</strong><br>' +
        'Minimum experience for job help: <strong>' + GM_getValue('autoAskJobHelpMinExp') + 

'</strong><br>' +
        'Message to post on wall for job help: <strong>' + GM_getValue('autoAskJobHelpMessage') + 

'</strong><br>' +
        '---------------------Misc Tab--------------------<br>' +
        'Enable auto-stat: <strong>' + showIfUnchecked(GM_getValue('autoStat')) + '</strong><br>' 

+
        '&nbsp;&nbsp;-Attack Base: <strong>' + GM_getValue('autoStatAttackBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Defense Base: <strong>' + GM_getValue('autoStatDefenseBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Health Base: <strong>' + GM_getValue('autoStatHealthBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Energy Base: <strong>' + GM_getValue('autoStatEnergyBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Stamina Base: <strong>' + GM_getValue('autoStatStaminaBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Influence Base: <strong>' + GM_getValue('autoStatInfluenceBase') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Attack Ratio: <strong>' + GM_getValue('autoStatAttackRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Defense Ratio: <strong>' + GM_getValue('autoStatDefenseRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Health Ratio: <strong>' + GM_getValue('autoStatHealthRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Energy Ratio: <strong>' + GM_getValue('autoStatEnergyRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Stamina Ratio: <strong>' + GM_getValue('autoStatStaminaRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Influence Ratio: <strong>' + GM_getValue('autoStatInfluenceRatio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Attack Mode: <strong>' + GM_getValue('autoStatAttackMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Defense Mode: <strong>' + GM_getValue('autoStatDefenseMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Health Mode: <strong>' + GM_getValue('autoStatHealthMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Energy Mode: <strong>' + GM_getValue('autoStatEnergyMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Stamina Mode: <strong>' + GM_getValue('autoStatStaminaMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Influence Mode: <strong>' + GM_getValue('autoStatInfluenceMode') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Attack Prio: <strong>' + GM_getValue('autoStatAttackPrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Defense Prio: <strong>' + GM_getValue('autoStatDefensePrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Health Prio: <strong>' + GM_getValue('autoStatHealthPrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Energy Prio: <strong>' + GM_getValue('autoStatEnergyPrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Stamina Prio: <strong>' + GM_getValue('autoStatStaminaPrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Influence Prio: <strong>' + GM_getValue('autoStatInfluencePrio') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Attack Fallback: <strong>' + GM_getValue('autoStatAttackFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Defense Fallback: <strong>' + GM_getValue('autoStatDefenseFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Health Fallback: <strong>' + GM_getValue('autoStatHealthFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Energy Fallback: <strong>' + GM_getValue('autoStatEnergyFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Stamina Fallback: <strong>' + GM_getValue('autoStatStaminaFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Influence Fallback: <strong>' + GM_getValue('autoStatInfluenceFallback') + 

'</strong><br>' +
        '&nbsp;&nbsp;-Rest AutoStat: <strong>' + GM_getValue('restAutoStat') + '</strong><br>' +
        '&nbsp;&nbsp;-Next Stat: <strong>' + GM_getValue('nextStat') + '</strong><br>' +
        'Enable log-filtering: <strong>' + showIfUnchecked(GM_getValue('filterLog')) + 

'</strong><br>' +        
        '&nbsp;&nbsp;-Filter pass : <strong>' + showIfUnchecked(GM_getValue('logFilterPass')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Filter fail : <strong>' + showIfUnchecked(GM_getValue('logFilterFail')) + 

'</strong><br>' +
        '-------------------Energy Tab--------------------<br>' +
        'Enable auto-mission: <strong>' + showIfUnchecked(GM_getValue('autoMission')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Job selected: <strong>' + jobSelected + '</strong><br>' +
        '&nbsp;&nbsp;-Repeat Job: <strong>' + showIfUnchecked(GM_getValue('repeatJob')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Multiple Jobs: <strong>' + showIfUnchecked(GM_getValue('multipleJobs')) + 

'</strong><br>' +
        'Mastermind bonus: <strong>' + GM_getValue('selectExpBonus') + '%</strong><br>' +
        'Wheelman savings: <strong>' + GM_getValue('selectEnergyBonus') + '%</strong><br>' +
        'Wait until energy full: <strong>' + showIfUnchecked(GM_getValue('waitForFull')) + 

'</strong><br>' +
        'Enable auto-energy pack: <strong>' + showIfUnchecked(GM_getValue('autoEnergyPack')) + 

'</strong><br>' +
        'Estimated job ratio: <strong>' + GM_getValue('estimateJobRatio') + '</strong><br>' +
        'Has helicopter: <strong>' + showIfUnchecked(GM_getValue('hasHelicopter')) + 

'</strong><br>' +
        'Has private island: <strong>' + showIfUnchecked(GM_getValue('hasPrivateIsland')) + 

'</strong><br>' +
        'Has golden throne: <strong>' + showIfUnchecked(GM_getValue('hasGoldenThrone')) + 

'</strong><br>' +
        'Is Maniac: <strong>' + showIfUnchecked(GM_getValue('isManiac')) + '</strong><br>' +
        'Auto send energy pack: <strong>' + showIfUnchecked(GM_getValue('sendEnergyPack')) + 

'</strong><br>' + 
        '-------------------Stamina Tab-------------------<br>' +
        'Spend stamina: <strong>' + showIfUnchecked(GM_getValue('staminaSpend')) + 

'</strong><br>' +
        'How: <strong>' + staminaSpendChoices[GM_getValue('spendStaminaHow'), 0] + 

'</strong><br>' +
        '&nbsp;&nbsp;-Fight in: <strong>' + cities[GM_getValue('fightLocation', 0)] + 

'</strong><br>' +
        '&nbsp;&nbsp;-Random fight max level: <strong>' + GM_getValue('fightLevelMax') + ' (' + 

showIfRelative('fightLevelMaxRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random fight max mafia: <strong>' + GM_getValue('fightMafiaMax') + ' (' + 

showIfRelative('fightMafiaMaxRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random fight min mafia: <strong>' + GM_getValue('fightMafiaMin') + ' (' + 

showIfRelative('fightMafiaMinRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random fight stealth: <strong>' + showIfUnchecked(GM_getValue

('fightStealth')) + '</strong><br>' +
        '&nbsp;&nbsp;-Random fight avoid bodyguards: <strong>' + showIfUnchecked(GM_getValue

('fightAvoidBodyguards')) + '</strong><br>' +
        '&nbsp;&nbsp;-Random fight avoid names: <strong>' + showIfUnchecked(GM_getValue

('fightAvoidNames')) + '</strong><br>' +
        '&nbsp;&nbsp;-List fight opponents: <strong>' + GM_getValue('fightList') + 

'</strong><br>' +
        '&nbsp;&nbsp;-List fight remove stronger: <strong>' + showIfUnchecked(GM_getValue

('fightRemoveStronger')) + '</strong><br>' +
        '&nbsp;&nbsp;-Random rob max level: <strong>' + GM_getValue('robLevelMax') + ' (' + 

showIfRelative('robLevelMaxRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random rob max mafia: <strong>' + GM_getValue('robMafiaMax') + ' (' + 

showIfRelative('robMafiaMaxRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random rob min mafia: <strong>' + GM_getValue('robMafiaMin') + ' (' + 

showIfRelative('robMafiaMinRelative') + ')</strong><br>' +
        '&nbsp;&nbsp;-Random rob avoid names: <strong>' + showIfUnchecked(GM_getValue

('robAvoidNames')) + '</strong><br>' +
        '&nbsp;&nbsp;-List rob opponents: <strong>' + GM_getValue('robList') + '</strong><br>' +
        '&nbsp;&nbsp;-List rob remove stronger: <strong>' + showIfUnchecked(GM_getValue

('robRemoveStronger')) + '</strong><br>' +
        '&nbsp;&nbsp;-Collect hitman bounties in: <strong>' + cities[GM_getValue

('hitmanLocation', 0)] + '</strong><br>' +
        '&nbsp;&nbsp;-Hitman min bounty: <strong>' + parseCash(GM_getValue('hitmanBountyMin')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Hitman avoid names: <strong>' + showIfUnchecked(GM_getValue

('hitmanAvoidNames')) + '</strong><br>' +
        'Families list: <strong>' + GM_getValue('clanName') + '</strong><br>' +
        'Stamina threshold: <strong>' + (100-(GM_getValue('selectStaminaUse')*10)) + '% (refill 

to ' + staminaCeiling + ')</strong><br>' +
        '&nbsp;&nbsp;-Stamina use started: <strong>' + GM_getValue('useStaminaStarted') + 

'</strong><br>' +        
        'Stamina reserve: <strong>' + (100-(GM_getValue('selectStaminaKeep')*10)) + '% (keep 

above ' + staminaFloor + ')</strong><br>' +
        'Ignore reserve to level-up: <strong>' + showIfUnchecked(GM_getValue

('allowStaminaToLevelUp')) + '</strong><br>' +
        '-------------------Hitlist Tab-------------------<br>' +
        'Enable auto-hitlist: <strong>' + showIfUnchecked(GM_getValue('autoHitlist')) + 

'</strong><br>' +
        '&nbsp;&nbsp;-Bounty amount: <strong>' + GM_getValue('bountyAmount') + '</strong><br>' +
        'Ride Hitlist: <strong>' + showIfUnchecked(GM_getValue('hideAttacks')) + '</strong><br>' 

+
        '------------------Property Tab-------------------<br>' +
        'Enable auto-buy <strong>' + showIfUnchecked(GM_getValue('autoBuy')) + '</strong><br>' +
        '&nbsp;&nbsp;-Min cash: <strong>' + GM_getValue('buyMinAmount') + '</strong><br>' +
        'Enable auto-repair property: <strong>' + showIfUnchecked(GM_getValue('autoRepair')) + 

'</strong><br>' +
        'Enable auto-protect property: <strong>' + showIfUnchecked(GM_getValue('autoProtect')) + 

'</strong><br>' +
        'Sell Cuban business output: <strong>' + showIfUnchecked(GM_getValue('autoSellCrates')) + 

'</strong><br>' +
        'Sell Moscow business output <strong>' + showIfUnchecked(GM_getValue

('autoSellCratesMoscow')) + '</strong><br>' +
        'Collect NY Take: <strong>' + showIfUnchecked(GM_getValue('collectNYTake')) + 

'</strong><br>' +
        'Next take availble at:' + GM_getValue('nextNYTake', 0) + '</strong><br>' +
        '>  >  >  >  >  END SETTINGS DUMP  <  <  <  <  <');
}

// This function returns false if some further action has been taken and the
// caller should not make additional calls until that action has completed.
function parsePlayerUpdates(messagebox) {
  // Get the timestamp (e.g. "3 minutes ago")
  var minutesAgo = xpathFirst('div[@class="update_timestamp"]', messagebox);
  minutesAgo = minutesAgo? minutesAgo.innerHTML + ' ' : '';
  minutesAgo = minutesAgo.indexOf('0') == 0? '' : minutesAgo;

  // Get the text and links.
  var messageTextElt = xpathFirst('div[@class="update_txt"]', messagebox);
  if (!messageTextElt) {
    addToLog('warning Icon', 'BUG DETECTED: Unable to read update text.');
    return true;
  }
  var messageText = messageTextElt.innerHTML;
  var messageTextNoTags = messageText.untag();
  var links = messageTextElt.getElementsByTagName('a');

  if (messageTextNoTags.indexOf('attacked by') != -1) {
    // Attacked by some fool with a death wish.
    var user = linkToString(links[0], 'user');
    var result = 'Attacked';
    if (links[0] && links[0].nextSibling && links[0].nextSibling.nodeValue &&
        links[0].nextSibling.nodeValue.match(/\d+ times/i)) {
      result += ' ' + RegExp.lastMatch;
    }
    result += ' by ' + user;
    if (messageTextNoTags.match(/you won.*you gained .*?(\d+) experience points?.*?(C?\$[\d,]

*\d)/i)) {
      // The fight was won.
      var cost = RegExp.$2;
      var experience = RegExp.$1;
      result += '<span class="good">' + ' WON ' + cost + '</span>' + ' and ' +
                '<span class="good">' + experience +' experience.</span>';
      cost = parseCash(cost);
      experience = parseInt(experience);

      if (GM_getValue('hideAttacks') == 'checked') {
        DEBUG('Riding Hitlist fight won.');
        GM_setValue('currentHitXp', parseInt((GM_getValue('currentHitXp', 0)) + experience));
        GM_setValue('currentHitDollars', '' + (parseInt(GM_getValue('currentHitDollars', 0)) + 

cost));
        DEBUG(result);
        if (experience == 0) {
          DEBUG('Zero experience detected; turning off auto-heal.');
          GM_setValue('autoHeal', 0);
        }
      } else {
        addToLog('updateGood Icon', minutesAgo + result);
      }

//      NEEDS FIX - player updates need their own stats and a place to put them in the log 

(tabbed log
//      perhaps?)
//      The setValue commands below should not be updating auto-fight/auto-rob stats as it thows 

off
//      the gain rate, stamina req'd to level and ultimately  the auto-burn stamina for level up 

action.
//      Leaving in as placeholders. --AK17710N
//
//      GM_setValue('fightWinCountInt', (GM_getValue('fightWinCountInt', 1) + 1));
//      GM_setValue('totalExpInt', GM_getValue('totalExpInt', 0) + experience);
//      GM_setValue('totalWinDollarsInt', (parseInt(GM_getValue('totalWinDollarsInt', 1)) + 

cost));
    } else if (messageTextNoTags.match(/you lost.*and losing .*?(C?\$[\d,]*\d)/i)) {
      // The fight was lost.
      var cost   = RegExp.$1;
      result += '<span class="bad">' + ' LOST ' + cost + '.</span>';
      cost = parseCash(cost);

      if (GM_getValue('hideAttacks') == 'checked') {
        DEBUG('Ride Hitlist fight lost.');
        GM_setValue('currentHitDollars', '' + (parseInt(GM_getValue('currentHitDollars', 0)) - 

cost));
        DEBUG(result);
      } else {
        addToLog('updateBad Icon', minutesAgo + result);
      }

//      NEEDS FIX - player updates need their own stats and a place to put them in the log 

(tabbed log
//      perhaps?)
//      The setValue commands below should not be updating auto-fight/auto-rob stats as it thows 

off
//      the gain rate, stamina req'd to level and ultimately  the auto-burn stamina for level up 

action.
//      Leaving in as placeholders. --AK17710N
//
//      GM_setValue('fightLossCountInt', (GM_getValue('fightLossCountInt', 1) + 1));
//      GM_setValue('totalLossDollarsInt', '' + (parseInt(GM_getValue('totalLossDollarsInt', 1)) 

+ cost));
    } else {
      addToLog('warning Icon', 'BUG DETECTED: Unable to read update win/loss.');
    }

  } else if (messageTextNoTags.indexOf('You were snuffed') != -1) {
    // Death. Ouch.
    addToLog('updateBad Icon', minutesAgo + 'You <span class="bad">' + 'DIED' + '</span>.');

  } else if (messageTextNoTags.indexOf('You were knocked out') != -1) {
    // Hitlist ride has ended.
    var hitman = linkToString(links[0], 'user');
    var user = linkToString(links[1], 'attacker');
    var bounty = parseCash(messageTextNoTags.split(' who claimed the ')[1]);
    var result = 'Whacked by '+ hitman + ' who claimed the $' +
                 makeCommaValue(parseInt(bounty)) + ' bounty set by ' +
                 user + '.';

    if (GM_getValue('hideAttacks') == 'checked') {
      DEBUG('Whacked riding hitlist.');
      GM_setValue('currentHitXp', parseInt(GM_getValue('currentHitXp', 0)) - 6);
      GM_setValue('totalHits', parseInt(GM_getValue('totalHits', 0)) + 1);
      GM_setValue('totalXp', parseInt(GM_getValue('totalXp', 0)) + parseInt(GM_getValue

('currentHitXp', 0)));
      GM_setValue('lastHitXp', parseInt(GM_getValue('currentHitXp', 0)));
      GM_setValue('totalHitDollars', '' + (parseInt(GM_getValue('currentHitDollars', 0)) + 

parseInt(GM_getValue('totalHitDollars', 0))));
      if (GM_getValue('currentHitXp', 0) < 0) {
        var currentHitXp = '<span class="bad">LOST ' + GM_getValue('currentHitXp', 0) + 

'</span>';
      } else {
        var currentHitXp = '<span class="good">GAINED ' + GM_getValue('currentHitXp', 0) + 

'</span>';
      }
      if (parseInt(GM_getValue('currentHitDollars', 0)) < 0) {
        var currentHitDollars = '<span class="bad">' +
                                ' LOST $' + makeCommaValue(parseInt(GM_getValue

('currentHitDollars', 0))) + '</span>';
        addToLog('updateBad Icon', minutesAgo + currentHitXp + ' experience and ' + 

currentHitDollars + ' on the hitlist.');
      } else {
        var currentHitDollars = '<span class="good">' +
                                ' WON $' + makeCommaValue(parseInt(GM_getValue

('currentHitDollars', 0))) + '</span>';
        addToLog('updateGood Icon', minutesAgo + currentHitXp + ' experience and ' + 

currentHitDollars + ' on the hitlist.');
      }

      DEBUG('Hitlist total values set; now clearing current values.');
      GM_setValue('currentHitXp', 0);
      GM_setValue('currentHitDollars', '0');
      DEBUG('Ensure that autoHeal is enabled.');
      GM_setValue('autoHeal', 'checked');

    }
    addToLog('updateBad Icon', minutesAgo + result);

  } else if (messageTextNoTags.indexOf('You were punched') != -1) {
    // Punched by some wuss.
    var user = linkToString(links[0], 'attacker');
    var result = 'You were punched in the face by ' + user + '.';
    addToLog('updateBad Icon', minutesAgo + result);

  } else if (messageTextNoTags.indexOf('You fought as') != -1) {
    // Helped a fellow mafia member in a fight.
    var capo = linkToString(links[0], 'user');
    var user = linkToString(links[1], 'user');
    var cost = messageTextNoTags.match(REGEX_CASH);
    var result = 'You fought as ' + capo + "'s Capo and defeated " +
                 user + ', receiving ' + '<span class="good">' +
                 cost + '</span> for your efforts.';
    addToLog('updateGood Icon', minutesAgo + result);

  } else if (messageTextNoTags.indexOf('needs your help') != -1) {
    if (GM_getValue('autoHelp') == 'checked') {
      // Help requested by a fellow mafia member.
      if (!useClickSimulation) {
        messageText.split(/target_id=(\d+)/);
        var targetid = RegExp.$1;
        if (targetid) {
          var link = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                     SCRIPT.controller + 'job' +
                     SCRIPT.action + 'give_help' +
                     SCRIPT.city + (city + 1) +
                     '&target_id=' + RegExp.$1 +
                     '&skip_interstitial=1';
          takeAction(link, 'help');
          return false;
        } else {
          addToLog('warning Icon','BUG DETECTED: Unable to read help target id.');
        }
      } else {
        var userElt = xpathFirst('.//a[contains(@onclick, "controller=stats")]', messagebox);
        var elt = xpathFirst('.//a[contains(text(), "Click here to help")]', messagebox);
        if (elt) {
          // Help immediately.
          Autoplay.fx = function() {
            clickAction = 'help';
            clickContext = {
              user: linkToString(userElt, 'user'),
              help: linkToString(elt)
            };
            clickElement(elt);
            DEBUG('Clicked to help with a job.');
          };
          Autoplay.delay = 0;
          Autoplay.start();
          return false;
        } else {
          addToLog('warning Icon', 'BUG DETECTED: Unable to find help element.');
        }
      }
    }

  } else if (messageTextNoTags.indexOf('claimed your $') != -1) {
    // Bounty claimed. Whoever was hitlisted is sleeping with the fishes.
    var hitman = linkToString(links[0], 'user');
    var user = linkToString(links[1], 'attacker');
    var result = hitman + ' claimed your ' +
                 messageTextNoTags.match(REGEX_CASH)[0] +
                 ' bounty on ' + user + '.';
    addToLog('updateGood Icon', minutesAgo + result);

  } else if (messageTextNoTags.match(/tried\s+to\s+rob\s+you\s*(\d+ times)?/i)) {
    // Robbery.
    var thief = linkToString(links[0], 'attacker');
    var result = thief + ' tried to rob you';
    if (RegExp.$1) {
      result += ' <span class="attacker">' + RegExp.$1 + '</span>';
    }
    result += '!';
    if (messageTextNoTags.match(/dealing (\d+)/i)) {
      var damage = RegExp.$1;
      result += ' You taught \'em a lesson and spanked \'em for ' +
                 damage + ' damage.';
    }
    addToLog('updateGood Icon', minutesAgo + result);

  } else if (messageTextNoTags.match(/you earned.*achievement/i)) {
    // You earned an achievement.
    addToLog('updateGood Icon', minutesAgo + messageText);

  } else if (messageTextNoTags.match(/earned some great items/i)) {
    // Social reward, no need to collect. Ignore it.
    DEBUG(minutesAgo + messageText);

  } else if (messageTextNoTags.match(/earned the.*achievement/i)) {
    // Someone else earned an achievement. Who cares!
    DEBUG(minutesAgo + messageText);

  } else {
    // Just copy the update text straight into the log.
    addToLog('info Icon', minutesAgo + messageText);
  }

  return true;
}

function profileFix() {
  var lists = $x('.//ul[@class="nice_list items_list clearfix"]', innerPageElt);
  if (lists.length < 3) return;

  // Count the number of items in each item list.
  var itemCount = [];
  for (var whichblock = 0; whichblock < 3; whichblock++) {
    itemCount[whichblock] = 0;
    var i = 0;
    var nexti = 0;
    while ((i != -1) && (nexti < lists[whichblock].innerHTML.length)) {
      i = lists[whichblock].innerHTML.indexOf('X&nbsp;',nexti);
      if (i != -1) {
        var nextwhitespace = lists[whichblock].innerHTML.indexOf('</div>', i);
        itemCount[whichblock] += parseInt(lists[whichblock].innerHTML.substring(i+7, 

nextwhitespace));
        nexti = i + 1;
      }
    }
  }

  var findWeapons = xpath('.//div[@class="title"]', innerPageElt);
  var greenText = 'color:#52E259;';
  var redText = 'color:#EC2D2D;';
  if ((findWeapons.snapshotLength > 5) && (findWeapons.snapshotLength < 10)) {
    for (locateBlock = 0, numWeapons=findWeapons.snapshotLength; locateBlock < numWeapons; 

++locateBlock) {
      if (findWeapons.snapshotItem(locateBlock).innerHTML.ltrim().rtrim() == 'Weapons')
        break;
    }

    if (findWeapons.snapshotItem(locateBlock).innerHTML.ltrim().rtrim() == 'Weapons') {
      if ((mafia <= itemCount[0]) || (itemCount[0] > 500))
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':greenText});
      else
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':redText});
      j.appendChild(document.createTextNode('(' + itemCount[0] + ')'));
    }

    locateBlock = locateBlock + 1;
    if (findWeapons.snapshotItem(locateBlock).innerHTML.ltrim().rtrim() == 'Armor') {
      if ((mafia <= itemCount[1]) || (itemCount[1] > 500))
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':greenText});
      else
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':redText});
      j.appendChild(document.createTextNode(' (' + itemCount[1] + ')'));
    }

    locateBlock = locateBlock + 1;
    if (findWeapons.snapshotItem(locateBlock).innerHTML.ltrim().rtrim() == 'Vehicles') {
      if ((mafia <= itemCount[2]) || (itemCount[2] > 500))
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':greenText});
      else
        j = makeElement('span', findWeapons.snapshotItem(locateBlock), {'style':redText});
      j.appendChild(document.createTextNode('(' + itemCount[2] + ')'));
    }
  }
}

function autoLotto() {
  Autoplay.delay = getAutoPlayDelay();

  var lottoButton = xpathFirst('.//a[contains(@onclick, "lotto")]/span[contains(@class, 

"sexy_lotto") and contains(text(), "Play Now and Win Big")]', innerPageElt);
  if (lottoButton) {
    Autoplay.fx = function() {
      clickElement(lottoButton);
      DEBUG('Clicked to go to lotto.');
    };
    Autoplay.start();
    return true;
  }

  var weeklylottoCheck = xpathFirst('.//a[contains(@onclick, "lotto")]/span[contains(@class, 

"sexy_lotto") and contains(text(), "See if you won")]', innerPageElt);
  if (weeklylottoCheck) {
    Autoplay.fx = function() {
      clickElement(weeklylottoCheck);
      DEBUG('Clicked to see lotto results.');
    };
    Autoplay.start();
    return true;
  }

  var randomTicket = xpathFirst('.//div[@class="sexy_button" and contains(text(), "Auto-Select 

Numbers")]', innerPageElt);
  if (randomTicket) {
    clickElement(randomTicket);
    var submitTicket = xpathFirst('.//span[@class="sexy_button"]/input[@class="sexy_lotto" and 

@type="submit" and @value="Submit Ticket(s)"]', innerPageElt);

    if (submitTicket) {
      var ticket = ' ';
      for (var i = 1; i < 6; i++) {
        var searchstring = './/div[@id="' + SCRIPT.appID + '_ticket_1_selected_' + i + '"]';
        lottonum = xpathFirst(searchstring, innerPageElt);
        ticket = ticket + lottonum.innerHTML;
        if (i<5)
          ticket = ticket + '-';
      }
      Autoplay.fx = function() {
        clickElement(submitTicket);
        addToLog('info Icon', '<span style="font-weight:bold;color:rgb

(255,217,39);">Lotto</span>: Played ticket' + ticket + '.');
      };
      Autoplay.start();
      return true;
    }
    // FIXME: It is a bug to reach this point?
    Autoplay.fx = goHome;
    Autoplay.start();
    return true;
  }

  var lottoResults = xpathFirst('.//li[contains(@class, "tab_on")]//a[contains(text(), 

"Results")]', innerPageElt);
  if (lottoResults) {
    var totalwinning = 0;
    var lottotable = xpath('.//table//tbody//tr//td[contains(text(), "Ticket #")]', 

innerPageElt);
    if (lottotable.snapshotLength == 0) {
      var noticketsEntered = xpath('.//center//div', innerPageElt);
      if ((noticketsEntered) && (noticketsEntered.snapshotLength>0) &&
         (noticketsEntered.snapshotItem(1).parentNode.innerHTML.indexOf("You didn't enter any 

tickets")!=-1))
        addToLog('info Icon', '<span style="font-weight:bold;color:rgb

(255,217,39);">Lotto</span>: No tickets entered for the last drawing.');
      else
        addToLog('warning Icon', 'BUG DETECTED: Can\'t find lotto results.');
      return false;
    }
    var winningtickets = [0, 0, 0, 0, 0, 0];
    for (var j = 0, numTickets=lottotable.snapshotLength; j < numTickets; j++) {
      var eachticket = lottotable.snapshotItem(j).parentNode.innerHTML;
      var count = 0;
      for (var k = 0, ticketLength=eachticket.length; k < ticketLength; k++) {
        if (eachticket.substr(k, 'gold'.length) == 'gold')
          count++;
      }
      winningtickets[count] = winningtickets[count] + 1;
    }
    var lottoLog = '<span style="font-weight:bold;color:rgb(255,217,39);">Lotto winners</span>: 

';
    var atleastOneWinner = false;
    for (var j = 1; j < 6; j++)
      if (winningtickets[j]>0) {
        atleastOneWinner = true;
        if (winningtickets[j] == 1)
          lottoLog += winningtickets[j] + ' ticket';
        else
          lottoLog += winningtickets[j] + ' tickets';
        if (j == 1)
          lottoLog +=  ' matching ' + j + ' number;';
        else
          lottoLog += ' matching ' + j + ' numbers;';
      }
    if (lottoLog[lottoLog.length-1]==';')
      lottoLog = lottoLog.substring(0, lottoLog.length-1)+'.';
    else if (!atleastOneWinner)
      lottoLog += 'no winning tickets.';
    addToLog('info Icon', lottoLog);

    // Log any displayed prizes.
    if (atleastOneWinner) {
      var prizes = $x('.//table[@class="messages"]//center', innerPageElt);
      for (var i = 0, numPrizes=prizes.length; i < numPrizes; ++i) {
        var description = prizes[i].innerHTML.untag().trim();
        if (description) {
          addToLog('good Icon', '<span style="font-weight:bold;color:rgb

(255,217,39);">Prize</span>: ' + description);
        }
      }
    }

    Autoplay.fx = goHome;
    Autoplay.start();
    return true;
  }

  return false;
}

// This function returns false if nothing was done, true otherwise.
function propertyBuy() {
  var buyCost = parseInt(GM_getValue('buyCost', 0));
  var buyMinAmount = parseInt(GM_getValue('buyMinAmount', 0));

  // Make sure there something to buy and the amounts are valid.
  if (!buyCost || isNaN(buyMinAmount) || !cash[NY]) return false;

  // Make sure enough cash will be left over.
  if (buyCost > cash[NY] - buyMinAmount) return false;

  // Make sure we're in New York.
  if (city != NY) {
    Autoplay.fx = goNY;
    Autoplay.start();
    return true;
  }

  if (!onPropertyNav()) {
    Autoplay.fx = goPropertyNav;
    Autoplay.start();
    return true;
  }

  var buyType = GM_getValue('buyType', 0);
  var buyName = GM_getValue('buyName', '');
  var buySelection = GM_getValue('selectProperties', '');
  var buyRequired  = GM_getValue('buyRequired', '');
  var buySuccess = false;
  DEBUG('Auto-buy: name=' + buyName + ', id=' + buyType + ', cost=' + buyCost + ', req=' + 

buyRequired + ', mafia=' + mafia);
  if (buyType > 0 && (buyRequired || buySelection.indexOf(buyName) > -1)) {
    var buyamountSelects = xpathFirst('.//form[@id="'+SCRIPT.appID+'_propBuy_' + buyType + 

'"]/table/tbody/tr/td/select[@name="amount"]', innerPageElt);
    if (buyamountSelects && buyamountSelects.length) {
      buyamountSelects[buyamountSelects.length - 1].selected = true;
      var buyform = xpathFirst('.//form[@id="'+SCRIPT.appID+'_propBuy_' + buyType + 

'"]/table/tbody/tr/td[2]/span/input', innerPageElt);
      if (buyform) {
        buySuccess = true;
        buyform.click();
        return true;
      }
    }
  } else {
    addToLog('warning Icon', 'BUG DETECTED: Can\'t buy ' + buyName + '.');
  }

  return false;
}

function onHome() {
  // Return true if we're on the home page, false otherwise.
  if (xpathFirst('.//div[@class="playerupdate_box"]', innerPageElt)) {
    return true;
  }

  return false;
}

function onPropertyNav() {
  // Return true if we're on the property nav, false otherwise.
  if (city == NY && xpathFirst('.//input[@name="buy_props"]', innerPageElt)) {
    return true;
  }

  return false;
}

function onHitlistTab() {
  // Return true if we're on the hitlist tab, false otherwise.
  if (xpathFirst('.//table[@class="hit_list"]', innerPageElt)) {
    return true;
  }

  return false;
}

function onRobTab() {
  // Return true if we're on the rob tab, false otherwise.
  if (xpathFirst('.//li[contains(@class, "tab_on")]//a[contains(@onclick, 

"controller=robbing")]', innerPageElt)) {
    return true;
  }

  return false;
}

function propertyGetDamage(rootElt) {
  // Check for a protection offer.
  var protect = xpathFirst('.//a[contains(@onclick, "action=protect_all")]', rootElt);
  if (protect && protect.innerHTML.untag().match(REGEX_CASH)) {
    var cost = RegExp.lastMatch;
    DEBUG('Property is not fully protected, need ' + cost);
    GM_setValue('propertyDamage', PROP_PROTECT);
    GM_setValue('propertyDamageCost', cost);
    return;
  }

  // See if repairs are needed.
  var repair = xpathFirst('.//a[contains(@onclick, "action=repair_all")]', rootElt);
  if (repair && repair.innerHTML.untag().match(REGEX_CASH)) {
    var cost = RegExp.lastMatch;
    DEBUG('Property is not fully repaired, need ' + cost);
    GM_setValue('propertyDamage', PROP_REPAIR);
    GM_setValue('propertyDamageCost', cost);
    return;
  }

  // Fully repaired and protected.
  GM_setValue('propertyDamage', PROP_OK);
  GM_setValue('propertyDamageCost', 0);
}

function propertyGet() {
//FIXME: Why is reloading necessary? If it is, then the caller should be
//       checking this function's return value. If it isn't necessary
//       then it should be removed.
  var reloadProperty = false;

  if (running) {
    // check for messages
    var messageCheck = xpathFirst('.//div[@class="message_float"]', innerPageElt);

    if (messageCheck) {
      messageCheck = messageCheck.innerHTML.untag();
      if (messageCheck.match(/you just bought (.*) for (C?\$[\d,]*\d)/i)) {
        addToLog(cityIcons[city], '<strong>Bought</strong> ' +
                 '<span class="good">' +
                 RegExp.$1 + '</span>' + ' for ' +
                 '<span class="expense">' + RegExp.$2 + '</span>.');
      } else {
        addToLog('warning Icon', 'Auto-buy error: ' + messageCheck);
      }
      reloadProperty = true;

    } else {
      var messageCheck = xpathFirst('.//td[@class="message_body"]', innerPageElt);
      if (messageCheck) {
        messageCheck = messageCheck.innerHTML.untag();
        if (messageCheck.match(/successfully sold (.*) for (C?\$[\d,]*\d)/i)) {
          addToLog(cityIcons[city], '<strong>Sold</strong> ' +
                   '<span class="bad">' +
                   RegExp.$1 + '</span>' + ' for ' +
                   '<span class="money">' + RegExp.$2 + '</span>.');
        } else {
          addToLog('info Icon', messageCheck);
        }
        reloadProperty = true;
      }
    }
  }

  var allPropertyRowsPath = './/table[@class="main_table"]/tbody/tr';
  var allPropertyRows = xpath(allPropertyRowsPath, innerPageElt);

  // get number of payments per day
  var tempObj = xpathFirst('.//div[contains(text(), "Cash Flow")]', innerPageElt);
  if (tempObj && tempObj.innerHTML.match(/every (.+) minutes/i)) {
    var payments = 1440 / parseInt(RegExp.$1);
  } else {
    var payments = 24;
  }

  if (allPropertyRows.snapshotLength > 0) {
    var allProperties = new Array();
    var bestProperty = { id:false, roi:0, row:0 };
    var selectProperties = GM_getValue('selectProperties');
    if (!selectProperties && GM_getValue('autoBuy') == 'checked') {
      addToLog('warning Icon', 'Auto-buy cannot work because no properties have been selected in 

the Properties tab of the settings menu. Turning auto-buy off.');
      GM_setValue('autoBuy', 0);
    }

    for (var currentRow = 0, numRows=allPropertyRows.snapshotLength; currentRow < numRows; 

++currentRow) {
      var currentRowHtml = allPropertyRows.snapshotItem(currentRow).innerHTML;

      if (/prop_[\w\d]+\.jpg/.test(currentRowHtml)) {
        var currentProperty = { id:0, roi:0, cost:0, name:'', row:0, path:'', income:0, 

mobsize:0, amount:0, owned:0, requiredId:0, requiredCost:0, requiredName:'' }
        var currentRowXpath = allPropertyRowsPath + "[" + (currentRow+1) + "]/";

        // get id
        var tempObj = xpathFirst(currentRowXpath + 'td[3]/table/tbody/tr/td

[2]/form/table/tbody/tr/td/input[@name="property"]', innerPageElt);
        if (tempObj) {
          currentProperty.id = tempObj.value;
        }

        // get required mafia size
        tempObj = xpathFirst(currentRowXpath + "td[3]/table/tbody/tr[1]/td[1]", innerPageElt);
        if (tempObj) {
          currentProperty.mobsize = tempObj.innerHTML.match(/<strong>(\d+)<\/strong>/) ? 

parseInt(RegExp.$1) : 0;
        }

        // get max buy amount and select
        tempObj = xpathFirst('.//form[@id="'+SCRIPT.appID+'_propBuy_' + currentProperty.id + 

'"]/table/tbody/tr/td/select[@name="amount"]', innerPageElt);
        if (tempObj) {
          if (tempObj.length) {
            currentProperty.amount = tempObj.length;
            tempObj[currentProperty.amount - 1].selected = true;
          }
        }

        // get name & income
        tempObj = xpath(currentRowXpath + "td[2]/strong | " + currentRowXpath + "td

[2]/div/strong", innerPageElt);
        if (tempObj.snapshotLength > 1) {
          currentProperty.name = tempObj.snapshotItem(0).innerHTML;
          currentProperty.income = parseCash(tempObj.snapshotItem(1).innerHTML);
        }

        //tempObj = xpath(currentRowXpath + "/td[3]/table/tbody/tr[2]/td | " + currentRowXpath + 

"td[2]/div/strong", innerPageElt);

        // get cost
        tempObj = xpathFirst(currentRowXpath + "td[3]/table/tbody/tr[1]/td", innerPageElt);
        if (tempObj) {
          tempObj = tempObj.innerHTML;
          if (tempObj) {
            // cost of required undeveloped space
            if (tempObj.match(/Built on: ([\w\s]+)/i)) {
              for (var j = 0, numProps=allProperties.length; j < numProps; ++j) {
                if (allProperties[j].name == RegExp.$1) {
                  var property = allProperties[j]
                  currentProperty.requiredCost = property.cost;
                  if (property.owned < currentProperty.amount) {
                    currentProperty.requiredId   = property.id;
                    currentProperty.requiredName = property.name;
                  }
                  break;
                }
              }
            }
            // cost of property
            if (tempObj.match(REGEX_CASH)) {
              currentProperty.cost = parseCash(RegExp.lastMatch);
            }
          }
        }

        // get number of owned
        tempObj = xpathFirst(currentRowXpath + "td[3]/table/tbody/tr[2]/td", innerPageElt);
        if (tempObj && tempObj.innerHTML.match(/(\d+)/)) {
          currentProperty.owned = RegExp.$1;
        } else {
          tempObj = xpathFirst(currentRowXpath + "td[2]/div/strong[2]", innerPageElt);
          if (tempObj && tempObj.innerHTML.match(/(\d+)/)) {
            currentProperty.owned = RegExp.$1;
          }
        }

        // calculate roi and check if its the highest
        if (currentProperty.income > 0 && currentProperty.cost > 0) {
          currentProperty.roi = currentProperty.income / (currentProperty.cost + 

currentProperty.requiredCost);
          if (selectProperties.indexOf(currentProperty.name) != -1 && bestProperty.roi < 

currentProperty.roi && mafia >= currentProperty.mobsize) {
            bestProperty = currentProperty;
            bestProperty.row  = currentRow;
            bestProperty.path = xpathFirst(currentRowXpath + "td[3]/table/tbody/tr[1]/td/strong", 

innerPageElt);
          }
        }

        // display roi & total income on page
        if (currentProperty.roi > 0) {
          var tempItem = xpath(currentRowXpath + 'td[2]/strong', innerPageElt).snapshotLength == 

1 ? 0 : 1;
          var roiText = xpath(currentRowXpath + 'td[2]/div', innerPageElt);
          roiText = makeElement('div', roiText.snapshotItem(tempItem), {'style':'margin:10px 0 

10px 0; font-size:13px'});
          roiText.appendChild(document.createTextNode('Total Income: $' + makeCommaValue

(currentProperty.owned * currentProperty.income)));
          roiText.appendChild(document.createElement("br"));
          roiText.appendChild(document.createTextNode('ROI: '));
          makeElement('strong', roiText, { 'style':'color:#FFD927'}).appendChild

(document.createTextNode(''+Math.round(currentProperty.roi*100000000)/100000));
          var roiTime = (1/currentProperty.roi) / payments; // days
          if (roiTime > 3652.5) { // display years
            roiTime /= 365.25;
            var roiTimeText = ' years)';
          } else if (roiTime > 365.25) { // display months
            roiTime /= 30.4375;
            var roiTimeText = ' months)';
          } else {
            var roiTimeText = ' days)';
          }
          roiText.appendChild(document.createTextNode(' (' + (Math.round(roiTime * 100) / 100) + 

roiTimeText));
        }

        allProperties.push(currentProperty);
      }
    }

    // highlight best property
    if (bestProperty.row > 0) {
      allPropertyRows.snapshotItem(bestProperty.row).style.backgroundColor="#020";
      best = makeElement('div', bestProperty.path, {'style':'color:#52E259; font-size: 11px; 

margin-top:10px'});
      makeElement('img', best, {'src':stripURI(goodIcon), 'width':'12', 'height':'12', 

'style':'vertical-align:middle'});
      best.appendChild(document.createTextNode(' BEST'));
    }

    if (GM_getValue('autoBuy') == 'checked') {
      if (bestProperty.amount) {
        // Display next property for auto-buy.
        if (bestProperty.requiredId > 0) {
          makeElement('div', xpathFirst('.//div[@class="text"]', innerPageElt), {'style':'margin

-top:12px'}).appendChild(document.createTextNode('Next auto-buy property: ' + bestProperty.amount 

+ 'x ' + bestProperty.requiredName + ' ($' + makeCommaValue(bestProperty.requiredCost * 

bestProperty.amount) + ') to build ' + bestProperty.name));
        } else {
          makeElement('div', xpathFirst('.//div[@class="text"]', innerPageElt), {'style':'margin

-top:12px'}).appendChild(document.createTextNode('Next auto-buy property: ' + bestProperty.amount 

+ 'x ' + bestProperty.name + ' ($' + makeCommaValue(bestProperty.cost * bestProperty.amount) + 

')'));
        }

        // Remember the next property for auto-buy.
        if (bestProperty.requiredId > 0 && (GM_getValue('buyType', 0) != bestProperty.requiredId 

|| GM_getValue('buyCost', 0) != bestProperty.requiredCost * bestProperty.amount)) {
          GM_setValue('buyName', bestProperty.requiredName);
          GM_setValue('buyType', bestProperty.requiredId);
          // Save as a string because 32-bit integers aren't big enough.
          GM_setValue('buyCost', '' + bestProperty.requiredCost * bestProperty.amount);
          GM_setValue('buyRequired', true);
          addToLog('process Icon', 'Next auto-buy property: ' + bestProperty.amount + 'x <span 

class="good">' + bestProperty.requiredName + '</span> (<span class="expense">$' + makeCommaValue

(bestProperty.requiredCost * bestProperty.amount) + '</span>) to build ' + bestProperty.name);
        } else if (GM_getValue('buyType', 0) != bestProperty.id || GM_getValue('buyCost', 0) != 

bestProperty.cost * bestProperty.amount) {
          GM_setValue('buyName', bestProperty.name);
          GM_setValue('buyType', bestProperty.id);
          // Save as a string because 32-bit integers aren't big enough.
          GM_setValue('buyCost', '' + bestProperty.cost * bestProperty.amount);
          GM_setValue('buyRequired', false);
          addToLog('process Icon', 'Next auto-buy property: ' + bestProperty.amount + 'x <span 

class="good">' + bestProperty.name + '</span> (<span class="expense">$' + makeCommaValue

(bestProperty.cost * bestProperty.amount) + '</span>)');
        }

        DEBUG('Next auto-buy: name=' + GM_getValue('buyName', '') + ', id=' + GM_getValue

('buyType', '') + ', cost=' + GM_getValue('buyCost', '') + ', req=' + GM_getValue('buyRequired', 

'') + ', reqMafia=' + bestProperty.mobsize + ', mafia=' + mafia);
      } else {
        // Nothing available to buy.
        GM_setValue('buyCost', 0);
        makeElement('div', xpathFirst('.//div[@class="text"]', innerPageElt), {'style':'margin-

top:12px'}).appendChild(document.createTextNode('Next auto-buy property: Nothing available for 

purchase.'));
        addToLog('process Icon', 'Next auto-buy property: Nothing available for purchase.');
      }
    }
  }

  if (reloadProperty == true) {
    Autoplay.fx = goPropertyNav;
    Autoplay.delay = getAutoPlayDelay();
    Autoplay.start();
    return true;
  }

  return false;
}

function loadHome() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=inthemafia/index.php';
}

function loadBank() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'bank' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1);
}

function loadJobTab(tabno) {
  DEBUG('Switching to job tab ' + tabno + '.');
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'job' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1) +
                      '&tab=' + tabno +
                      '&bar=' + (tabno < 6? '0' : '1');
}

function loadFightNav() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'fight' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1);
}

function loadRobTab() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'robbing' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1);
}

function loadPropertyNav() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'property' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1);
}

function loadBusinessesNav() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'business' +
                      SCRIPT.action + 'view' +
                      SCRIPT.city + (city + 1);
}

function loadAccept() {
  var link = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
             SCRIPT.controller + 'recruit' +
             SCRIPT.action + 'accept' +
             SCRIPT.user + 'all';

  if (document.location == link) {
    // Sometimes the "+XX" still displays after accepting by URL.
    DEBUG('Already invited; reloading to clear masthead.');
    loadHome();
    return;
  }

  // Accept all invitations.
  addToLog('process Icon', 'Accepting ' + invites + ' mafia ' +
           (invites > 1 ? ' invites.' : ' invite.'));
  window.location = link;
  return;
}

function loadDeleteNews() {
  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'index' +
                      SCRIPT.action + 'deletenews' +
                      SCRIPT.city + (city + 1);
}

function loadLocation(toCity) {
  if (toCity < 0 || toCity >= cities.length) {
      addToLog('warning Icon', 'BUG DETECTED: Unrecognized destination "' + toCity + '".');
      return;
  }

  document.location = http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=' + SCRIPT.name +
                      SCRIPT.controller + 'travel' +
                      SCRIPT.action + 'travel' +
                      SCRIPT.city + (city + 1) +
                      '&destination=' + (toCity + 1) +
                      '&from=index';
}

function goLinkElement(elt) {
  if (!elt) {
    addToLog('warning Icon', 'BUG DETECTED: Null element passed to goLinkElement().');
    return;
  }

  if (!useClickSimulation) {
    document.location = elt.href;
  } else {
    clickElement(elt);
    DEBUG('Clicked element.');
  }
}

function goHome() {
  if (!useClickSimulation) {
    loadHome();
    return;
  }

  // Find the visible home link.
  var elts = $x('//div[@class="nav_link home_link"]//a');
  var elt;
  for (var i = 0, numElts=elts.length; i < numElts; ++i) {
    if (elts[i].scrollWidth) {
      elt = elts[i];
      break;
    }
  }
  if (!elt) {
    DEBUG('Can\'t find home link to click. Using fallback method.');
    loadHome();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go home.');
}

function goBank() {
  if (!useClickSimulation) {
    loadBank();
    return;
  }

  var elt = xpathFirst('//a[@class="bank_deposit"]');
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find bank link to click. Using fallback method.');
    loadBank();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to bank.');
}

function goJobsNav() {
  var elt = xpathFirst('//div[@class="nav_link jobs_link"]/a');
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find jobs nav link to click.');
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to jobs.');
}

function goJobTab(tabno) {
  if (!useClickSimulation) {
    loadJobTab(tabno);
    return;
  }

  var currentTab = currentJobTab();
  if (currentTab == -1) {
    // We're not even on a jobs page yet. Go there.
    goJobsNav();
    return;
  }
  if (currentTab == tabno) {
    DEBUG('Already on job tab ' + tabno + '.');
    return;
  }

  // No job tab. Make sure we're on the correct job bar.
  var barno = city == NY? (tabno < 6? 0 : 1) : 0;
  var currentBar = city == NY? (currentTab < 6? 0 : 1) : 0;
  if (currentBar != barno) {
    var elt = xpathFirst('.//ul[@id="' + SCRIPT.appID + '_jobs_bar' + barno + '"]//a[contains

(@onclick, "&bar=' + barno + '")]', innerPageElt);
    if (!elt) {
      addToLog('warning Icon', 'BUG DETECTED: Can\'t find jobs bar ' + barno + ' link to click. 

Currently on job bar ' + currentBar + ', tab ' + currentTab + '.');
      return;
    }
    clickElement(elt);
    DEBUG('Clicked to go to job bar ' + barno + '.');
    return;
  }

  if (city == MOSCOW) {
    var elt = xpathFirst('.//ul[@id="' + SCRIPT.appID + '_jobs_bar' + barno + '"]//a[contains

(@onclick, "&episode_tab=' + tabno + '")]', innerPageElt);
  } else {
    var elt = xpathFirst('.//ul[@id="' + SCRIPT.appID + '_jobs_bar' + barno + '"]//a[contains

(@onclick, "&tab=' + tabno + '")]', innerPageElt);
  }
  if (!elt) {
    addToLog('warning Icon', 'BUG DETECTED: Can\'t find job bar ' + barno + ', tab ' + jobno + ' 

link to click. Currently on job bar ' + currentBar + ', tab ' + currentTab + '.');
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to job tab ' + tabno + '.');
}

function goJob(jobno, context) {
  var elt = xpathFirst('.//table[@class="job_list"]//a[contains(@onclick, "job=' + jobno + 

'&")]', innerPageElt);
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find job ' + jobno + ' link to click.');
    return;
  }
  clickAction = 'job';
  clickContext = context;
  clickElement(elt);
  DEBUG('Clicked job ' + jobno + '.');
}

function goFightNav() {
  if (!useClickSimulation) {
    loadFightNav();
    return;
  }

  var elts = $x('//div[@class="nav_link fight_link"]//a');
  var elt;
  for (var i = 0, numElts=elts.length; i < numElts; ++i) {
    if (elts[i].scrollWidth) {
      elt = elts[i];
      break;
    }
  }
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find fight nav link to click. Using fallback method.');
    loadFightNav();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to fights.');
}

function goRobTab() {
  var elt = xpathFirst('.//div[@class="tab_content"]//a[contains(@onclick, 

"controller=robbing")]', innerPageElt);
  if (!elt) {
    goFightNav();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to robbing.');
}

function goHitlistTab() {
  var elt = xpathFirst('.//div[@class="tab_content"]//a[contains(@onclick, 

"controller=hitlist")]', innerPageElt);
  if (!elt) {
    goFightNav();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to hitlist.');
}

function goPropertyNav() {
  if (!useClickSimulation) {
    loadPropertyNav();
    return;
  }

  var elts = $x('//div[@class="nav_link properties_link"]//a');
  var elt;
  for (var i = 0, numElts=elts.length; i < numElts; ++i) {
    if (elts[i].scrollWidth) {
      elt = elts[i];
      break;
    }
  }
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find properties nav link to click. Using fallback method.');
    loadPropertyNav();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to properties.');
}

function goBusinessesNav() {
  if (!useClickSimulation) {
    loadBusinessesNav();
    return;
  }

  var elt = xpathFirst('//*[@id="' + SCRIPT.appID + '_nav_link_businesses"]//a');
  if (!elt) {
    addToLog('warning Icon', 'Can\'t find businesses nav link to click. Using fallback method.');
    loadBusinessesNav();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to go to businesses.');
}

function goDeleteNews() {
  if (!useClickSimulation) {
    loadDeleteNews();
    return;
  }

  var elt = xpathFirst('//a[contains(text(), "clear all updates")]');
  if (!elt) {
    DEBUG('Can\'t find delete news link to click. Using fallback method.');
    loadDeleteNews();
    return;
  }
  clickElement(elt);
  DEBUG('Clicked to delete news.');
}

function goNY() {
  goLocation(NY);
}

function goCuba() {
  goLocation(CUBA);
}

function goMoscow() {
  goLocation(MOSCOW);
}

function goLocation(toCity) {
  if (toCity == city) {
    DEBUG('Already in ' + cities[toCity] + '.');
    return;
  }
  if (!useClickSimulation) {
    loadLocation(toCity);
    return;
  }

  // Find and click the travel element for the given destination.
  var elt = xpathFirst('//div[@id="' + SCRIPT.appID + '_travel_menu"]//a[contains(@onclick, 

"destination=' + (toCity + 1) + '")]');
  
  if (elt) {
    clickElement(elt);
    DEBUG('Clicked to travel to ' + cities[toCity] + '.');
    return;
  }

  addToLog('warning Icon', 'Unable to find ' + cities[toCity] +
           ' travel link. Using fallback method.');
  loadLocation(toCity);
}

function handleResponse(responseDetails, action, context) {
  //  DEBUG('handleResponse: status='+ responseDetails.status);
  //  DEBUG('handleResponse: statusText='+ responseDetails.statusText);
  //  DEBUG('handleResponse: responseHeaders='+ responseDetails.responseHeaders);
  //  DEBUG('handleResponse: responseText='+ responseDetails.responseText);

  // Check for error pages.
  if (responseDetails.responseText.indexOf('Error while loading page') != -1) {
    DEBUG('Response: "Error while loading page..." (service interruption)');
    return;
  }
  if (responseDetails.responseText.indexOf('request was not processed') != -1) {
    DEBUG('Request was not processed.');
    return;
  }
  if (responseDetails.responseText.indexOf('Login to Myspace') != -1) {
    addToLog('warning Icon', '<span class="warn">WARNING:</span> Reached the Mafia Wars login 

page.');
    addToLog('warning Icon', '<span class="warn">Please adjust your browser\'s settings to allow 

third-party cookies.</span>');
    addToLog('warning Icon', '<span class="warn">Or is this Myspace user logged in on another 

computer?</span>');
    return;
  }

  // Interpret the response.
  var doc = document.createElement('div');
  doc.innerHTML = responseDetails.responseText;
  logResponse(doc, action, context);
}

//ATK
//Hourly Stats Tracking - Experimental Work in Progress
function updateHourlyStats() {
//Planned data package order:  [0]Hour of the Day |
//  [1]NY Fight Exp | [2]NY Fight Win Count   | [3]NY Fight Loss Count | [4]NY Fight $ Won | [5]

NY Fight $Lost |
//  [6]NY Rob Exp   | [7]NY Rob Success Count | [8]NY Rob Fail Count   | [9]NY Rob $Won    | 

[10]NY Rob $Lost  |
//  [11]NY Fight Loss Crit Hit Count | [12]NY Fight Loss Bodyguard Count | [13]NY Fight Loss Too 

Strong Count |
//  Variables below not yet created
//  [x]NY Capo $US | [x]NY Assist Exp | [x]NY Assist $US |
//  [x]NY Attacked Exp(net after deaths) | [x]NY Attacked $Won | [x]NY Attacked $Lost |
//  [x]NY Robbed Exp                     | [x]NY Robbed $Won   | [x]NY Robbed $Lost   |
//  [x]NY Job Count | [x]NY Job Exp | [x]NY Job $Made |
//  >>> BEGIN CUBA <<<
//  [x]Cuba Fight Exp | [x]Cuba Fight Win Count | [x]Cuba Fight Loss Count | [x]Cuba Fight $C Won 

| [x]Cuba Fight $C Lost |
//  [x]Cuba Fight Loss Crit Hit Count | [x]Cuba Fight Loss Bodyguard Count | [x]Cuba Fight Loss 

Too Strong Count |
//  [x]Cuba Capo $C | [x]Cuba Assist Exp | [x]Cuba Assist $C |
//  [x]Cuba Attacked Exp(net after deaths) | [x]Cuba Attacked $C Won | [x]Cuba Attacked $C Lost |
//  [x]Cuba Robbed Exp                     | [x]Cuba Robbed $C Won   | [x]Cuba Robbed $C Lost   |
//  [x]Cuba Job Count | [x]Cuba Job Exp | [x]Cuba Job $C Made

//  Max potential storage 41 * 24 = 984 elements

  var currentTime = new Date();
  var currentHour = currentTime.getHours();

  var hrDataPack = "";
  hrDataPack = currentHour + '|' + GM_getValue('fightExpNY', 0) + '|' + GM_getValue

('fightWinsNY', 0) + '|' +
     GM_getValue('fightLossesNY', 0) + '|' + GM_getValue('fightWin$NY', 0) + '|' + GM_getValue

('fightLoss$NY', 0) + '|' +
     GM_getValue('fightLossCHNY', 0) + '|' + GM_getValue('fightLossBGCHNY', 0) + '|'+ 

GM_getValue('fightLossStrongNY', 0);

  if (GM_getValue('hourlyStats', '0') == '0') {
    GM_setValue('hourlyStats', hrDataPack);
  } else {
    //pull existing stored hourly stats
    var splitValues = GM_getValue('hourlyStats', '').split(',');
    if (splitValues.length < 24) {
      splitValues.push(currentHour + '|0|0|0|0|0|0|0|0');
    }else {
      if ((GM_getValue('hourOfDay')*1 == 23 && currentHour != 0 )|| currentHour -1 != 

GM_getValue('hourOfDay')*1 && GM_getValue('hourOfDay') != isNaN(GM_getValue('hourOfDay'))){
        //We missed some hours so we need to carry the last good values forward
        if (GM_getValue('hourOfDay')*1 > currentHour){
          var tempHour = currentHour + 24;
        }else{
          var tempHour = currentHour;
        }

        for (var i = GM_getValue('hourOfDay')*1 + 1; i < GM_getValue('hourOfDay')*1 + (tempHour - 

GM_getValue('hourOfDay')*1); i++){
          var valString = splitValues[GM_getValue('hourOfDay')];
          valString = valString.substring(valString.indexOf('|'), valString.length);
          if (i > 23){
            splitValues.push(String(i-24) + valString);
          }else {
            splitValues.push(i + valString);
          }
        }
      }
    }
    //create temp arrays
    var hourlyFightExpNY = new Array(24);     //position [1]
    var hourlyFightWinsNY = new Array(24);    //position [2]
    var hourlyFightLossesNY = new Array(24);  //position [3]
    var hourlyFightWin$NY = new Array(24);    //position [4]
    var hourlyFightLoss$NY = new Array(24);   //position [5]
    var hourlyLossCrHitNY = new Array(24);    //position [6]
    var hourlyLossBgCrHitNY = new Array(24);  //position [7]
    var hourlyLossStrongNY = new Array(24);   //position [8]

    // Organize Hourly stat data into ordered sets
    for (var i = 0; i < splitValues.length; i++){
      //check length of each datapack to ensure it is the right size and fills missing with 

zeroes
      //this addresses issues when adding new metrics to the datapackage
      if (splitValues[i].split('|').length < 9) {
        for (var n = splitValues[i].split('|').length; n < 9; n++){
          splitValues[i] += '|0';
        }
      }
      if (splitValues[i].split('|')[0] == currentHour) {
        //pull data from same time day prior for "25th" hour
        var fightExpNY25 = splitValues[i].split('|')[1]*1;
        var fightWinsNY25 = splitValues[i].split('|')[2]*1;
        var fightLossesNY25 = splitValues[i].split('|')[3]*1;
        var fightWin$NY25 = splitValues[i].split('|')[4]*1;
        var fightLoss$NY25 = splitValues[i].split('|')[5]*1;
        var fightLossCrHitNY25 = splitValues[i].split('|')[6];
        var fightLossBgCrHitNY25 = splitValues[i].split('|')[7];
        var fightLossStrongNY25 = splitValues[i].split('|')[8];
        //Insert current hour values
        hourlyFightExpNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[1]*1;
        hourlyFightWinsNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[2]*1;
        hourlyFightLossesNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[3]*1;
        hourlyFightWin$NY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[4]*1;
        hourlyFightLoss$NY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[5]*1;
        hourlyLossCrHitNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[6]*1;
        hourlyLossBgCrHitNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[7]*1;
        hourlyLossStrongNY[splitValues[i].split('|')[0]] = hrDataPack.split('|')[8]*1;
      } else {
        //populate other hourly data
        hourlyFightExpNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[1]*1;
        hourlyFightWinsNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[2]*1;
        hourlyFightLossesNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[3]*1;
        hourlyFightWin$NY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[4]*1;
        hourlyFightLoss$NY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[5]*1;
        hourlyLossCrHitNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[6]*1;
        hourlyLossBgCrHitNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[7]*1;
        hourlyLossStrongNY[splitValues[i].split('|')[0]] = splitValues[i].split('|')[8]*1;
      }
    }

//Prep Arrays for hourly graphing
    var fightExpNY = prepStatsArray(hourlyFightExpNY, currentHour);
    var fightWinsNY = prepStatsArray(hourlyFightWinsNY, currentHour);
    var fightLossesNY = prepStatsArray(hourlyFightLossesNY, currentHour);
    var fightWin$NY = prepStatsArray(hourlyFightWin$NY, currentHour);
    var fightLoss$NY = prepStatsArray(hourlyFightLoss$NY, currentHour);
    var fightLossCHNY = prepStatsArray(hourlyLossCrHitNY, currentHour);
    var fightLossBGCHNY = prepStatsArray(hourlyLossBgCrHitNY, currentHour);
    var fightLossStrongNY = prepStatsArray(hourlyLossStrongNY, currentHour);

//Add 25th hour data to beginning of graphing arrays
    fightExpNY.unshift(fightExpNY25);
    fightWinsNY.unshift(fightWinsNY25);
    fightLossesNY.unshift(fightLossesNY25);
    fightWin$NY.unshift(fightWin$NY25);
    fightLoss$NY.unshift(fightLoss$NY25);
    fightLossCHNY.unshift(fightLossCrHitNY25);
    fightLossBGCHNY.unshift(fightLossBgCrHitNY25);
    fightLossStrongNY.unshift(fightLossStrongNY25);

//create hour labels based on current hour
    var hourLabels = "";
    for (i = 0; i < 24; i += 2) {
      var ind;
      var hrdisp;
      ind = (currentHour *1) - i;
      if (ind < 0) {ind = 24 + ind;}
      if (ind > 11) {hrdisp = String((12 - ind) * -1) + 'p';} else {hrdisp = String(ind) + 'a';}
      hrdisp = (hrdisp == '0a') ? '12a' : hrdisp;
      hrdisp = (hrdisp == '0p') ? '12p' : hrdisp;
      hourLabels = '|' + hrdisp + hourLabels;
    }
    hourLabels = '|' + hourLabels.split('|')[12] + hourLabels;

//lets make some graphs!
    //statSpecs Array Format: [0]Min, [1]Max. [2]Avg [3]Sum [4]Valid Data Count
    var statSpecsArrayA = [];
    var statSpecsArrayB = [];

    var graphOutput = "";

    //Gain rate per hour
    gainRateNY = [];
    for (var i = 0; i < fightWinsNY.length; i++) {
      gainRateNY[i] = fightExpNY[i]/(fightWinsNY[i] + fightLossesNY[i]);
      if (isNaN(gainRateNY[i])) { gainRateNY[i] = 0; }
      gainRateNY[i] = Math.round(gainRateNY[i] * Math.pow(10,2))/Math.pow(10,2);
    }
    statSpecsArrayA = getStatSpecs(gainRateNY, 0);
    graphOutput = '<IMG SRC="' + 'http://chart.apis.google.com/chart?

cht=ls&chf=bg,s,111111&chts=BCD2EA,12&chtt=NY+Fight+Gain+Rate+per+Hr+of+Day|Min.+=+' + String

(statSpecsArrayA[0]) + '+++Max.+=+' +String(statSpecsArrayA[1]) + '+++Avg+=+' + String

(statSpecsArrayA[2]) + '/hr&chs=315x150&chxt=x,y&chxl=0:' + hourLabels + '&chxtc=0,10|1,-

300&chxr=1,' + statSpecsArrayA[0] + ',' + statSpecsArrayA[1] + '&chds=' + statSpecsArrayA[0] + 

',' + statSpecsArrayA[1] + '&chm=D,04B4AE,0,0,4|o,05E6DE,0,-1.0,6&chd=t:' + String(gainRateNY) + 

'"/>';

    //NY Fight XP gains per hour
    var diffArrayA = getArrayDiffs(fightExpNY);
    statSpecsArrayA = getStatSpecs(diffArrayA, 0);
    graphOutput += '<br><br>' + '<IMG SRC="' + 'http://chart.apis.google.com/chart?

cht=ls&chf=bg,s,111111&chts=BCD2EA,12&chtt=Total+NY+Fight+XP+Gained+per+Hr+of+Day|Min.+=+' + 

String(statSpecsArrayA[0]) + '+++Max.+=+' +String(statSpecsArrayA[1]) + '+++Avg+=+' + String

(statSpecsArrayA[2]) + '/hr&chs=315x150&chxt=x,y&chxl=0:' + hourLabels + '&chxtc=0,10|1,-

300&chxr=1,' + statSpecsArrayA[0] + ',' + statSpecsArrayA[1] + '&chds=' + statSpecsArrayA[0] + 

',' + statSpecsArrayA[1] + '&chm=D,92ED97,0,0,4|o,25DA2E,0,-1.0,6&chd=t:' + String(diffArrayA) + 

'"/>';

    //NY Fight Wins/Losses since reset chart
    var NYfightWinPct = (GM_getValue('fightWinsNY', 0)/(GM_getValue('fightWinsNY', 0) + 

GM_getValue('fightLossesNY', 0)))*100;
    if (isNaN(NYfightWinPct)){NYfightWinPct = 0;} else {NYfightWinPct = Math.round(NYfightWinPct 

* Math.pow(10, 1))/Math.pow(10, 1);}
    var NYfightLosePct = (GM_getValue('fightLossesNY', 0)/(GM_getValue('fightWinsNY', 0) + 

GM_getValue('fightLossesNY', 0)))*100;
    if (isNaN(NYfightLosePct)) {NYfightLosePct = 0; } else {NYfightLosePct = Math.round

(NYfightLosePct * Math.pow(10, 1))/Math.pow(10, 1);}

    //NY Fight Loss Type breakdown pie
    var NYStrongLossPct = (GM_getValue('fightLossStrongNY', 0)/GM_getValue('fightLossesNY', 0))

*100;
    if (isNaN(NYStrongLossPct)){NYStrongLossPct = 0;}else{NYStrongLossPct = Math.round

(NYStrongLossPct * Math.pow(10, 1))/Math.pow(10, 1);}
    var NYCHLossPct = (GM_getValue('fightLossCHNY', 0)/GM_getValue('fightLossesNY', 0))*100;
    if (isNaN(NYCHLossPct)){NYCHLossPct = 0;}else{NYCHLossPct = Math.round(NYCHLossPct * 

Math.pow(10, 1))/Math.pow(10, 1);}
    var NYBGCHLossPct = (GM_getValue('fightLossBGCHNY', 0)/GM_getValue('fightLossesNY', 0))*100;
    if (isNaN(NYBGCHLossPct)){NYBGCHLossPct = 0;}else{NYBGCHLossPct = Math.round(NYBGCHLossPct * 

Math.pow(10, 1))/Math.pow(10, 1);}

    graphOutput += '<br><br>' + '<IMG SRC="' + 'http://chart.apis.google.com/chart?

cht=p3&chf=bg,s,111111&chts=BCD2EA,12&chco=52E259|EC2D2D&chdl=' + String(NYfightWinPct) + '%|'+ 

String(NYfightLosePct) + '%

&chdlp=t&chtt=NY+Fight+Wins+vs+Losses|since+stats+reset&chs=157x150&chd=t:' + String

(NYfightWinPct) + ',' + String(NYfightLosePct) + '"/>' +
                          '<IMG SRC="' + 'http://chart.apis.google.com/chart?

cht=p3&chf=bg,s,111111&chts=BCD2EA,12&chco=EC2D2D&chdl=CH:' + String(NYCHLossPct) + '%|BG:'+ 

String(NYBGCHLossPct) + '%|TS:'+ String(NYStrongLossPct) + '%

&chdlp=t&chtt=NY+Fight+Losses+by+Type&chs=157x150&chd=t:' + String(NYCHLossPct) + ',' + String

(NYBGCHLossPct) + ',' + String(NYStrongLossPct) + '"/><br>' +
                          '<span style="color:#888888;">CH = Critical Hit &#166; BG = Bodyguard 

Critical Hit &#166; TS = Too Strong</span>';

    //NY Fight $ Won/lost line graph
    statSpecsArrayA = getStatSpecs(fightWin$NY, 0);
    statSpecsArrayB = getStatSpecs(fightLoss$NY, 0);
    if (statSpecsArrayB[0]*1 < statSpecsArrayA[0]*1) {
      statSpecsArrayA[0] = statSpecsArrayB[0];
    }
    if (statSpecsArrayB[1]*1 > statSpecsArrayA[1]*1) {
      statSpecsArrayA[1] = statSpecsArrayB[1];
    }
    graphOutput += '<br><br>' + '<IMG SRC="' + 'http://chart.apis.google.com/chart?

cht=ls&chf=bg,s,111111&chts=BCD2EA,12&chtt=Total+NY+Fight+$+Won+vs.+Lost+by+Hr+of+Day&chs=315x150

&chxt=x,y&chxl=0:' + hourLabels + '&chxtc=0,10|1,-300&chxr=1,' + statSpecsArrayA[0] + ',' + 

statSpecsArrayA[1] + '&chds=' + statSpecsArrayA[0] + ',' + statSpecsArrayA[1] + 

'&chm=D,92ED97,0,0,4|o,25DA2E,0,-1.0,6|D,F05C5C,1,0,4|o,D21414,1,-1.0,6&chd=t:' + String

(fightWin$NY) + '|' + String(fightLoss$NY) + '"/>';

    //addToLog('info Icon', graphOutput);
    graphOutput = '<span style="color:#669999;">Stats as of: ' + currentTime.toLocaleString() + 

'</span><br>' + graphOutput;
    GM_setValue('graphBox', graphOutput);

//re-pack hourly stats and save to GM variable
    hrDataPack = []
    for (i = 0; i < 24; i++){
      hrDataPack[i]= i + '|' + hourlyFightExpNY[i] + '|' + hourlyFightWinsNY[i] + '|' + 

hourlyFightLossesNY[i] + '|' +
          hourlyFightWin$NY[i] + '|' + hourlyFightLoss$NY[i] + '|' + hourlyLossCrHitNY[i] + '|' + 

hourlyLossBgCrHitNY[i] +
          '|' + hourlyLossStrongNY[i];
    }
    GM_setValue('hourlyStats', String(hrDataPack));

  }
  GM_setValue('hourOfDay', String(currentHour));
}

function prepStatsArray(workingArray, currentHour){
  for (var i = 0; i < workingArray.length; i++){
    if (isNaN(workingArray[i])) {
      workingArray[i] = 0;
    }
  }
  currentHour = currentHour * 1;
  var outputVals = [];
  for (i = 0; i < 24; i++){
    var ind;
    ind = currentHour - i;
    if (ind < 0) {ind = 24 + ind}
      outputVals.unshift(workingArray[ind]);
  }
  return outputVals;
}

//statSpecs Array
//Return Format: [0]Min, [1]Max. [2]Avg [3]Sum [4]Valid Count
function getStatSpecs(workingArray, includeZeroVals){
  var tempArray = [];
  var runningSum = 0;
  for (var i = 0; i < workingArray.length; i++) {
    if (workingArray[i] != 0 && includeZeroVals == 0) {
      tempArray.push(workingArray[i]);
      runningSum += workingArray[i];
    }else {
      runningSum += workingArray[i];
    }
  }
  if (includeZeroVals == 0) {
    tempArray.sort( function (a, b) { return a-b});
    var dataLen = tempArray.length;
    var dataMin = tempArray[0];
    var dataMax = tempArray[dataLen - 1];
  } else {
    workingArray.sort( function (a, b) { return a-b});
    var dataLen = workingArray.length;
    var dataMin = workingArray[0];
    var dataMax = workingArray[dataLen - 1];
  }
  var dataAvg = runningSum/dataLen;
  dataAvg = Math.round(dataAvg*Math.pow(10, 2))/Math.pow(10, 2);
//  alert("Sum: " + runningSum + "    len: " + dataLen + "   avg: " + dataAvg);
  return[dataMin, dataMax, dataAvg, runningSum, dataLen];
}

// This function gets the users gift ID and also sets the ID of
// the recipient of gifts.
function saveRecipientInfo() {
  var giftKey = document.body.innerHTML.match(/gift_key=([0-9a-f]+)/) ? RegExp.$1 : 'Not Found';
  GM_setValue("giftKey", giftKey);

  var recipientID = document.body.innerHTML.match(/recipients\[0\]=([0-9]+)/) ? RegExp.$1 : 'Not 

Found';
  GM_setValue("recipientID", recipientID);
  alert('Recipient:' + recipientID + '  Gift key:' + giftKey);
}

function takeFightStatistics(experience, cashStr, resultType) {
  var loc = NY;
  if (cashStr.search(/C\$/)) {
    loc = CUBA;
  } else if (cashStr.search(/R\$/)) {
    loc = MOSCOW;
  }
  var xp = parseInt(experience);
  var cashInt = parseCash(cashStr);

  if (xp) {
    // WON the fight.
    GM_setValue('totalExpInt', GM_getValue('totalExpInt', 0) + xp);
    GM_setValue('fightWinCountInt', GM_getValue('fightWinCountInt', 0) + 1);
    GM_setValue('totalWinDollarsInt', '' + (parseInt(GM_getValue('totalWinDollarsInt', 0)) + 

cashInt));
    
    switch(loc) {
      case CUBA:
        // Fight Win Cuba Stats
        GM_setValue('fightWinsCuba', GM_getValue('fightWinsCuba', 0) + 1);
        GM_setValue('fightExpCuba', GM_getValue('fightExpCuba', 0) + xp);
        GM_setValue('fightWin$Cuba', '' + (parseInt(GM_getValue('fightWin$Cuba', 0)) + cashInt));
        break;
      case NY:
        // Fight Win NY Stats
        GM_setValue('fightWinsNY', GM_getValue('fightWinsNY', 0) + 1);
        GM_setValue('fightExpNY', GM_getValue('fightExpNY', 0) + xp);
        GM_setValue('fightWin$NY', '' + (parseInt(GM_getValue('fightWin$NY', 0)) + cashInt));
        break;
      case MOSCOW:
        // Fight Win Moscow Stats
        GM_setValue('fightWinsMOSCOW', GM_getValue('fightWinsMOSCOW', 0) + 1);
        GM_setValue('fightExpMOSCOW', GM_getValue('fightExpMOSCOW', 0) + xp);
        GM_setValue('fightWin$MOSCOW', '' + (parseInt(GM_getValue('fightWin$MOSCOW', 0)) + 

cashInt));
    }
  } else {
    // LOST the fight.
    GM_setValue('fightLossCountInt', GM_getValue('fightLossCountInt', 0) + 1);
    GM_setValue('totalLossDollarsInt', '' + (parseInt(GM_getValue('totalLossDollarsInt', 0)) + 

cashInt));
    
    switch (loc) {
      case CUBA:
        //Fight Loss Cuba Stats
        GM_setValue('fightLossesCuba', GM_getValue('fightLossesCuba', 0) + 1);
        GM_setValue('fightLoss$Cuba', '' + (parseInt(GM_getValue('fightLoss$Cuba', 0)) + 

cashInt));
        if (resultType == 2) {
          GM_setValue('fightLossBGCHCuba', GM_getValue('fightLossBGCHCuba', 0) + 1);
          GM_setValue('fightLossBGCH$Cuba', '' + (parseInt(GM_getValue('fightLossBGCH$Cuba', 0)) 

+ cashInt));
        } else if (resultType == 1) {
          GM_setValue('fightLossCHCuba', GM_getValue('fightLossCHCuba', 0) + 1);
          GM_setValue('fightLossCH$Cuba', '' + (parseInt(GM_getValue('fightLossCH$Cuba', 0)) + 

cashInt));
        } else {
          GM_setValue('fightLossStrongCuba', GM_getValue('fightLossStrongCuba', 0) + 1);
          GM_setValue('fightLossStrong$Cuba', '' + (parseInt(GM_getValue('fightLossStrong$Cuba', 

0)) + cashInt));
        }
        break;
      case NY:
        //Fight Loss NY Stats
        GM_setValue('fightLossesNY', (GM_getValue('fightLossesNY', 0) + 1));
        GM_setValue('fightLoss$NY', '' + (parseInt(GM_getValue('fightLoss$NY', 0)) + cashInt));
        if (resultType == 2) {
          GM_setValue('fightLossBGCHNY', GM_getValue('fightLossBGCHNY', 0) + 1);
          GM_setValue('fightLossBGCH$NY', '' + (parseInt(GM_getValue('fightLossBGCH$NY', 0)) + 

cashInt));
        } else if (resultType == 1) {
          GM_setValue('fightLossCHNY', GM_getValue('fightLossCHNY', 0) + 1);
          GM_setValue('fightLossCH$NY', '' + (parseInt(GM_getValue('fightLossCH$NY', 0)) + 

cashInt));
        } else {
          GM_setValue('fightLossStrongNY', GM_getValue('fightLossStrongNY', 0) + 1);
          GM_setValue('fightLossStrong$NY', '' + (parseInt(GM_getValue('fightLossStrong$NY', 0)) 

+ cashInt));
        }
        break;
      case MOSCOW:
        //Fight Loss MOSCOW Stats
        GM_setValue('fightLossesMOSCOW', (GM_getValue('fightLossesMOSCOW', 0) + 1));
        GM_setValue('fightLoss$MOSCOW', '' + (parseInt(GM_getValue('fightLoss$MOSCOW', 0)) + 

cashInt));
        if (resultType == 2) {
          GM_setValue('fightLossBGCHMOSCOW', GM_getValue('fightLossBGCHMOSCOW', 0) + 1);
          GM_setValue('fightLossBGCH$MOSCOW', '' + (parseInt(GM_getValue('fightLossBGCH$MOSCOW', 

0)) + cashInt));
        } else if (resultType == 1) {
          GM_setValue('fightLossCHMOSCOW', GM_getValue('fightLossCHMOSCOW', 0) + 1);
          GM_setValue('fightLossCH$MOSCOW', '' + (parseInt(GM_getValue('fightLossCH$MOSCOW', 0)) 

+ cashInt));
        } else {
          GM_setValue('fightLossStrongMOSCOW', GM_getValue('fightLossStrongMOSCOW', 0) + 1);
          GM_setValue('fightLossStrong$MOSCOW', '' + (parseInt(GM_getValue

('fightLossStrong$MOSCOW', 0)) + cashInt));
        }
        break;
      default:
        break;
    }
  }
}

function logFightResponse(rootElt, resultElt, context) {
  var how = GM_getValue('staminaSpendHow');
  var inner = resultElt? resultElt.innerHTML : '';
  var innerNoTags = inner.untag();
  var messages = $x('.//td[@class="message_body"]', resultElt);
  var elt = messages[0]? messages[0].firstChild : undefined;

  if (resultElt.className == "fight_results") {
    // A fight took place. Results are in the "VS" format.

    if (how == STAMINA_HOW_FIGHT_RANDOM) {
      // Look for any new opponents in the displayed list.
      findFightOpponent(rootElt);
    } else if (how == STAMINA_HOW_FIGHT_LIST) {
      cycleSavedList('fightList');
    }

    // Determine whether the opponent is alive and may see future attacks.
    if (inner.indexOf('Attack Again') != -1) {
      setFightOpponentActive(context.id);
    } else {
      setFightOpponentInactive(context.id);
    }

    // Get the opponent, experience & cash.
    if (!innerNoTags.match(/(\d+)\s*experience/i)) {
      addToLog('warning Icon', 'BUG DETECTED: Unable to read "vs" win/loss.');
      addToLog('warning Icon', 'Result content: ' + inner);
      return false;
    }
    var experience = parseInt(RegExp.$1);
    var cost = innerNoTags.match(REGEX_CASH)? RegExp.lastMatch : undefined;

    // Get the opponent's details.
    var opponentElt = xpathFirst('.//div[@class="fightres_opponent"]', resultElt);
    var user, userSize, userBoost;
    if (opponentElt) {
      elt = xpathFirst('.//div[@class="fightres_name"]/a', opponentElt);
      user = linkToString(elt, 'user');
      elt = xpathFirst('.//div[contains(@class, "fightres_group_size")]', opponentElt);
      if (elt) {
        userSize = elt.innerHTML.untag().trim();
      }
      elt = xpathFirst('.//div[@class="fightres_top3_boost"]//img',opponentElt);
      if (elt) {
        userBoost = elt.title;
      }
    }

    // Did we win or lose?
    var resultType;
    var result = 'Fought ' + user + '\'s mafia of ' + userSize;
    if (experience) {
      result += ' <span class="good">' + 'WON ' + cost + '</span>' + ' and ' +
                '<span class="good">' + experience + ' experience</span>.';
      addToLog('good Icon', result);
    } else {
      result += ' <span class="bad">' +
                'LOST ' + cost + '</span>.';
      resultType = 0;
      // Check for a critical hit.
      if (innerNoTags.match(/critical hit/i)) {
        resultType++;
        if (innerNoTags.match(/bodyguard/i)) {
          resultType++;
          result += ' <span class="warn">(bodyguard critical hit)</span>';
          if (how == STAMINA_HOW_FIGHT_RANDOM &&
              GM_getValue('fightAvoidBodyguards') == 'checked') {
            setFightOpponentAvoid(context.id);
          }
        } else {
          result += ' <span class="warn">(critical hit)</span>';
        }
      } else {
        // Show any boost the opponent used.
        if (userBoost && userBoost.match(/[^(]+/)) {
          result += ' <span class="warn">('+RegExp.lastMatch.trim()+')</span>';
        }

        // Don't fight this opponent again.
        result += ' Too strong!';
        if (how == STAMINA_HOW_FIGHT_RANDOM ||
            GM_getValue('fightRemoveStronger') == 'checked') {
          result += ' Avoiding.';
          setFightOpponentAvoid(context.id);
        }
      }
      addToLog('bad Icon', result);
    }

    // Check for any fatalities.
    if (innerNoTags.match(/body\s+count\s+to\s+(\d+)/i)) {
      addToLog('info Icon', killedMobsterIcon + ' You <span class="bad">' + 'KILLED' + '</span> ' 

+ user + '. Your body count has increased to <span class="bad">' + RegExp.$1 + '</span>.');
    }
    if (innerNoTags.indexOf('You were snuffed') != -1) {
      addToLog('bad Icon', 'You <span class="bad">' + 'DIED' + '</span> in the fight.');
    }

    // Look for any loot.
    if (innerNoTags.match(/found (an? .*) while fighting/i)) {
      addToLog('lootbag Icon', '<span class="loot">'+' Found '+
               RegExp.$1 + ' in the fight.</span>');
    }

    // Update the statistics.
    takeFightStatistics(experience, cost, resultType);
    updateLogStats();

  } else if (elt && elt.nodeValue.indexOf(' fought against ') != -1) {
    // First, look for any new opponents in the displayed list.
    // NOTE: This is at the top because putting it lower would risk
    //       it not getting called at all if an error occurs. This
    //       can lead to fighting the same opponents over and over.
    if (how == STAMINA_HOW_FIGHT_RANDOM) {
      findFightOpponent(rootElt);
    }

    // If fighting from the user-specified list, cycle it.
    if (how == STAMINA_HOW_FIGHT_LIST) {
      cycleSavedList('fightList');
    }

    // Determine whether the opponent is alive and may see future attacks.
    if (inner.indexOf('Attack Again') != -1) {
      setFightOpponentActive(context.id);
    } else {
      setFightOpponentInactive(context.id);
    }

    // Get the opponent.
    var user = linkToString(elt.nextSibling, 'user');
    var userSize;
    if (messages[1] && messages[1].innerHTML.match(/<\/a>'s mafia of (\d+)/i)) {
      userSize = RegExp.$1;
    }

    if (innerNoTags.match(/You WON.*You gained .*?(C?\$[\d,]*\d).*?(\d+) experience points/i)) {
      // The fight was won.
      var cost = RegExp.$1;
      var experience = RegExp.$2;
      var result = 'Fought ' + user + '\'s mafia of ' + userSize +
                   ' <span class="good">' + 'WON ' + cost + '</span>' +
                   ' and ' + '<span class="good">' + experience +
                   ' experience</span>.';

      // Check for a lucky win.
      if (innerNoTags.indexOf('against all odds') != -1) {
        result += ' <span class="warn">(against all odds)</span>';
        if (how == STAMINA_HOW_FIGHT_RANDOM ||
            GM_getValue('fightRemoveStronger') == 'checked') {
          result += ' Avoiding.';
          setFightOpponentAvoid(context.id);
        }
      }

      // Record the result.
      addToLog('good Icon', result);
      takeFightStatistics(experience, cost);
    } else if (innerNoTags.match(/You LOST.*along with .*?(C?\$[\d,]*\d)/i)) {
      // The fight was lost.
      var fightLossType = 0;
      var cost   = RegExp.$1;
      var result = 'Fought ' + user + '\'s mafia of ' + userSize +
                   ' <span class="bad">' + 'LOST ' + cost + '.</span>';

      // Check for a critical hit.
      if (innerNoTags.indexOf('critical hit') != -1) {
        fightLossType += 1;
        if (innerNoTags.indexOf('Top Mafia Bodyguard') != -1) {
          fightLossType += 1;
          result += ' <span class="warn">(bodyguard critical hit)</span>';
          if (how == STAMINA_HOW_FIGHT_RANDOM &&
              GM_getValue('fightAvoidBodyguards') == 'checked') {
            setFightOpponentAvoid(context.id);
          }
        } else {
          result += ' <span class="warn">(critical hit)</span>';
        }
      } else {
        // Don't fight this opponent again.
        result += ' Too strong!';
        if (how == STAMINA_HOW_FIGHT_RANDOM ||
            GM_getValue('fightRemoveStronger') == 'checked') {
          result += ' Avoiding.';
          setFightOpponentAvoid(context.id);
        }
      }

      // Record the result.
      addToLog('bad Icon', result);
      takeFightStatistics(experience, cost, fightLossType);
    } else {
      addToLog('warning Icon', 'BUG DETECTED: Unable to read "classic" win/loss.');
      addToLog('warning Icon', 'Message box content: ' + inner);
    }

    // Check for any fatalities.
    if (innerNoTags.indexOf('took out your opponent') != -1) {
      addToLog('info Icon', killedMobsterIcon + ' You <span class="bad">' + 'KILLED' + '</span> ' 

+ user + '.');
    }
    if (innerNoTags.indexOf('You were snuffed') != -1) {
      addToLog('bad Icon', 'You <span class="bad">' + 'DIED' + '</span> in the fight.');
    }

    // Look for any loot.
    if (innerNoTags.match(/found an? (.*) while fighting/i)) {
      addToLog('lootbag Icon', '<span class="loot">'+' Found '+
               RegExp.$1 + ' in the fight.</span>');
    }

    // Update fight log tracking statistics.
    updateLogStats();
  } else if (innerNoTags.indexOf('too weak') != -1) {
    addToLog('info Icon', '<span style="color:#FF9999;">' + 'Too weak to fight.'+ '</span>');
  } else if (innerNoTags.match(/you cannot fight|part of your mafia/i)) {
    if (context.id) {
      DEBUG('Opponent (' + context.id + ') is part of your mafia. Avoiding.');
      setFightOpponentAvoid(context.id);
    }
  } else {
    DEBUG('Unrecognized fight response:');
    DEBUG(inner);
  }
  Autoplay.start();
  return true;
}

// Interprets the response to an action that was taken.
//
// rootElt: An element whose descendents contain the response to interpret.
// action:  The action taken, such as 'rob', 'fight', 'heal', etc.
// context: (optional) Any further data needed to describe the action
// Returns: true if something has been done that will cause the inner page
//          to change, such as clicking somewhere or loading another page.
function logResponse(rootElt, action, context) {
  // Set default timer properties.
  Autoplay.fx = goHome;
  Autoplay.delay = getAutoPlayDelay();

  var messagebox = xpathFirst('.//div[@class="fight_results"]', rootElt);
  if (!messagebox) {
    messagebox = xpathFirst('.//table[@class="messages"]', rootElt);
  }

  if (action == 'fight' || action == 'rob') {
    // Get the "tmp" PHP parameter.
    var fightTmpOld = fightTmp;
    if (!fightTmp) {
      getTmpParameter(rootElt);
    }
    if (!fightTmp) {
      var elt = xpathFirst('.//a[contains(@onclick, "xw_action=attack")]', rootElt);
      if (elt && elt.getAttribute('onclick').match(/tmp=([^&"'<]+)/)) {
        fightTmp = RegExp.$1;
      }
    }
    if (fightTmp && fightTmp != fightTmpOld) {
      DEBUG('"tmp" parameter for ' + action + ' is: ' + fightTmp);
      if (!messagebox && !fightTmpOld) {
          Autoplay.start();
          return true;
      }
    }
  }

  if (!messagebox) {
    DEBUG('logResponse: HTML=' + rootElt.innerHTML);
    DEBUG('Unexpected response page: no message box found!');

    // If fighting/robbing from a user-specified list, cycle it.
    // Otherwise, the problem might repeat indefinitely.
    if (action == 'fight' &&
        GM_getValue('staminaSpendHow') == STAMINA_HOW_FIGHT_LIST) {
      addToLog('warning Icon', 'Opponent ' + context.id +
               ' in your fight list may be invalid.');
      cycleSavedList('fightList');
    } else if (action == 'rob' &&
               GM_getValue('staminaSpendHow') == STAMINA_HOW_ROB_LIST) {
      addToLog('warning Icon', 'Opponent ' + context.id +
               ' in your rob list may be invalid.');
      cycleSavedList('robList');
    }

    return false;
  }

  // Since the attempted action received a response, stop skipping fight/rob.
  skipStaminaSpend = false;

  var inner = messagebox? messagebox.innerHTML : '';
  var innerNoTags = inner.untag();
  //var xw_time = rootElt.innerHTML.match(/xw_time=[^&]*/i);
  //var xw_exp_sig = rootElt.innerHTML.match(/xw_exp_sig=[^&]*/i);

  switch (action) {
    case 'fight':
      return logFightResponse(rootElt, messagebox, context);
      break;

    case 'heal':
      if (innerNoTags.indexOf('doctor healed') != -1) {
        var addHealth = inner.split('doctor healed <strong>')[1].split('health')[0];
        var cost = innerNoTags.match(REGEX_CASH);
        addToLog('health Icon', '<span style="color:#FF9999;">' + ' Health +'+ addHealth + ' for 

<span class="expense">' + cost + '</span>.</span>');
      } else if (innerNoTags.indexOf('You cannot heal so fast') != -1) {
        addToLog('warning Icon', '<span style="color:#FF9999;">' + 'Attempted to heal too 

quickly.' + '</span>');
      }
      break;

    case 'job':
      xpGainElt = xpathFirst('.//dd[@class="message_experience"]', messagebox);
      if (xpGainElt) {
        // Job completed successfully.
        var result = 'You performed ' + '<span class="job">' +
                     missions[GM_getValue('selectMission')][0] +
                     '</span> earning <span class="good">' +
                     xpGainElt.innerHTML.toLowerCase() + '</span>';
        var cashGainElt = xpathFirst('.//dd[@class="message_cash"]', messagebox);
        if (cashGainElt) {
          result += ' and <span class="good">' + cashGainElt.innerHTML + '</span>';
        }
        result += '.';
        if (innerNoTags.indexOf('you spent no energy') != -1) {
          result += ' You spent 0 energy on this job.';
        }
        addToLog('process Icon', result);
        jobProgress(rootElt);
        jobLoot(rootElt);
        // Add message if job tier prize found.
        if (innerNoTags.match(/.*(An* .+ was added to your inventory[^.]*.)/i)) {
          addToLog('lootbag Icon', RegExp.$1);
        }

        // Ask for help if auto ask is on and enough experience was gained.
        var xpGain = parseInt(xpGainElt.innerHTML);
        var xpGainMin = parseInt(GM_getValue('autoAskJobHelpMinExp'));
        if (GM_getValue('autoAskJobHelp') == 'checked' &&
            (!xpGainMin || xpGain >= xpGainMin)) {
          var elt = xpathFirst('.//div[@class="message_buttons"]//input[@class="sexy_jobhelp"]', 

messagebox);
          if (elt) {
            Autoplay.fx = function() {
              clickElement(elt);
              addToLog('process Icon', 'Asked for help with <span class="job">' + missions

[GM_getValue('selectMission')][0] + '</span>.');
            }
            Autoplay.start();
            return true;
          }
        }

        if (useClickSimulation) return false;
      } else if (innerNoTags.indexOf('You don\'t have the necessary items to perform this job') 

!= -1) {
        addToLog('info Icon', 'You don\'t have the items necessary to do ' + missions

[GM_getValue('selectMission', 1)][0] + '.');
        jobReqs(rootElt);
      } else if (innerNoTags.indexOf('You are not high enough level to do this job') != -1) {
        addToLog('warning Icon', 'You are not high enough level to do ' + missions[GM_getValue

('selectMission', 1)][0] + '.');
        addToLog('warning Icon', 'Job processing will stop');
        GM_setValue('autoMission', 0);
      } else if (innerNoTags.match(/You need.*more energy.*requires.*?(\d+).*you only have.*?

(\d+)/i)) {
        addToLog('warning Icon', missions[GM_getValue('selectMission', 1)][0] +
                 ' requires ' + RegExp.$1 + ' energy. You only have ' +
                 RegExp.$2 + '.');
        addToLog('warning Icon', 'Is your wheelman bonus set correctly?');
      } else {
        DEBUG('Unrecognized job response.');
      }
      Autoplay.start();
      return true;
      break;

    case 'rob':
      var how = GM_getValue('staminaSpendHow');
      // NOTE: This is at the top because putting it lower would risk
      //       it not getting called at all if an error occurs. This
      //       can lead to robbing the same opponent over and over.
      if (how == STAMINA_HOW_ROB_LIST) {
          cycleSavedList('robList');
      }

      if (innerNoTags.indexOf('You successfully robbed') != -1) {
        var user = linkToString(xpathFirst('.//td[@class="message_body"]//a', messagebox), 

'user');
        if (inner.match(/<\/a>('s mafia of \d+)/i)) {
          user += RegExp.$1;
        }
        innerNoTags.match(/taking\s.*?(\d+\s+damage).*dealing\s.*?([\d.]+%\s+damage).*?(C?

\$[\d,]*\d).*?(\d+\s+experience)/i);
        var damage_taken = RegExp.$1;
        var damage_dealt = RegExp.$2;
        var gained       = RegExp.$3;
        var experience   = RegExp.$4;
        addToLog('good Icon', 'Robbed ' + user +
                 ', taking ' + '<span class="bad">' + damage_taken + '</span>' +
                 ', dealing ' + '<span class="good">' + damage_dealt+'</span>' +
                 ' and gaining ' + '<span class="good">' + gained + '</span>'+
                 ' and ' + '<span class="good">' + experience + '</span>.');
        if (innerNoTags.match(/You put .* out of business!/i)) {
          addToLog('good Icon', '<span class="good">' + RegExp.lastMatch + '<span>');
        }

        GM_setValue('robWinCountInt', (GM_getValue('robWinCountInt', 0) + 1));
        GM_setValue('totalExpInt', GM_getValue('totalExpInt', 0) + parseInt(experience));
        GM_setValue('totalWinDollarsInt', '' + (parseInt(GM_getValue('totalWinDollarsInt', 0)) + 

parseCash(gained.split('$')[1])));
        setRobOpponentRobbed(context.id);
      } else if (innerNoTags.indexOf('police investigation') != -1) {
        addToLog('process Icon', 'Police investigation. Moving on quietly...');
        setRobOpponentRobbed(context.id);
      } else if (innerNoTags.indexOf('You failed to rob') != -1) {
        var user = linkToString(xpathFirst('.//td[@class="message_body"]//a', messagebox), 

'user');
        if (inner.match(/<\/a>('s mafia of \d+)/i)) {
         user += RegExp.$1;
        }
        var damage_taken;
        var loss;
        if (innerNoTags.match(/taking\s.*?(\d+\s+damage).*losing.*?(C?\$[\d,]*\d)/i)) {
          damage_taken = RegExp.$1;
          loss         = RegExp.$2;
        } else {
          DEBUG('BUG DETECTED: Can\'t read rob failure damage or cash loss.');
          DEBUG('Untagged message: ' + innerNoTags);
        }
        var result = '<strong>Failed</strong> to rob ' + user +
                     ' taking <span class="bad">' + damage_taken + '</span>' +
                     ' losing <span class="bad">' + loss + '</span>.';
        if (how == STAMINA_HOW_ROB_LIST &&
            GM_getValue('robRemoveStronger') == 'checked') {
          result += ' Avoiding.';
          setRobOpponentAvoid(context.id);
        }
        if (innerNoTags.match(/used\s+an?\s+(.*?)\s+to\s+boost\s+their/i)) {
          result += '<span class="warn">(' + RegExp.$1 + ' boost)</span>';
        }
        addToLog('bad Icon', result);

        // Update statistics.
        if (loss) {
          loss = parseCash(loss.split('$')[1]);
          GM_setValue('totalLossDollarsInt', '' + (parseInt(GM_getValue('totalLossDollarsInt', 

0)) + loss));
        }
        GM_setValue('robLossCountInt', (GM_getValue('robLossCountInt', 0) + 1));
      } else if (innerNoTags.indexOf('You cannot rob') != -1) {
        if (context.id) {
          addToLog('process Icon', 'Removing family member from target list.');
          setRobOpponentAvoid(context.id);
        }
      } else {
        // not enough stam or health
        DEBUG('Rob response: ' + innerNoTags);
        DEBUG('Stamina or health may be too low. Or robbing a nonexistent casino.');
      }

      if (innerNoTags.indexOf('You were snuffed') != -1) {
        addToLog('bad Icon', 'You <span class="bad">DIED</span>.');
      }

      // Refresh statistics display.
      updateLogStats();

      Autoplay.start();
      return true;
      break;

    case 'hitman':
      // If the target is gone, there is nothing to do.
      if (innerNoTags.indexOf('someone else took out') != -1) {
        DEBUG(inner);
        return false;
      }

      // Default action is to reload the hitlist.
      if (stamina) {
        Autoplay.fx = goHitlistTab;
      }

      var targetKilled = (innerNoTags.indexOf('You knocked out') != -1);
      if (innerNoTags.indexOf('You WON') != -1) {
        var cashGain = innerNoTags.match(/gained.*?(C?\$[\d,]*\d)/i);
        var cashWon = RegExp.$1
        var experience = innerNoTags.match(/\d+\s+experience\s+points?/i);
        addToLog('good Icon', 'Hit ' + linkToString(context.profile, 'user') +
                 ', <span class="good">WON ' + cashWon + '</span> and ' +
                 '<span class="good">' + experience + '</span>.');
        GM_setValue('hitmanWinCountInt',GM_getValue('hitmanWinCountInt',0)+1);
        GM_setValue('hitmanWinDollarsInt', '' + (parseInt(GM_getValue('hitmanWinDollarsInt', 1)) 

+ parseCash(cashWon.split('$')[1])));
        GM_setValue('totalExpInt', GM_getValue('totalExpInt', 0) + parseInt(experience));
        GM_setValue('totalWinDollarsInt', '' + (parseInt(GM_getValue('totalWinDollarsInt', 1)) + 

parseCash(cashWon.split('$')[1])));
        if (!targetKilled && canSpendStamina() && ptsToNextLevel > 6) {
          var elt = xpathFirst('.//a[contains(@onclick,"attack")]', messagebox);
          if (elt) {
            // Attack again immediately.
            Autoplay.fx = function() {
              clickAction = action;
              clickContext = context;
              clickElement(elt);
              DEBUG('Clicked to repeat the hit on ' + clickContext.name +
                    ' (' + clickContext.id + ').');
            }
            Autoplay.delay = 0;
          }
        }
      } else if (innerNoTags.indexOf('You LOST') != -1) {
        var t = innerNoTags.match(/LOST.*?(C?\$[\d,]*\d)/i);
        var cashLoss = RegExp.$1;
        var result = 'Hit ' + linkToString(context.profile, 'user') +
                     ' <span class="bad">LOST ' + cashLoss + '.</span>';
        GM_setValue('hitmanLossCountInt',GM_getValue('hitmanLossCountInt',0)+1);
        GM_setValue('hitmanLossDollarsInt', '' + (parseInt(GM_getValue('hitmanLossDollarsInt', 

0)) + parseCash(cashLoss.split('$')[1])));
        GM_setValue('totalLossDollarsInt', '' + (parseInt(GM_getValue('totalLossDollarsInt', 0)) 

+ parseCash(cashLoss.split('$')[1])));
        if (context.id) {
          // Add the opponent to the avoid list.
          setHitmanOpponentAvoid(context.id);
          result += ' Avoiding.';
        }
        addToLog('bad Icon', result);
      } else if (innerNoTags.indexOf('You cannot fight') != -1) {
        if (context.id) {
          setHitmanOpponentAvoid(context.id);
        }
      } else {
        DEBUG(inner);
      }
      if (innerNoTags.indexOf('You were snuffed') != -1) {
        addToLog('updateBad Icon', 'You <span class="bad">DIED</span>.');
      }
      if (targetKilled) {
        if (context.id) {
          addSavedListItem('hitmanListKilled', context.id, 100);
        }
        addToLog('lootbag Icon', killedMobsterIcon +
                 ' You <span class="bad">KILLED</span> ' +
                 linkToString(context.profile, 'user') +
                 ' and collected the <span class="money">' +
                 context.bounty + '</span> bounty set by ' +
                 linkToString(context.payer, 'user') + '.');

        GM_setValue('hitmanWinCountInt',GM_getValue('hitmanWinCountInt',0)+1);
        GM_setValue('hitmanWinDollarsInt', '' + (parseInt(GM_getValue('hitmanWinDollarsInt', 1) + 

parseCash(context.bounty))));
        GM_setValue('totalExpInt', GM_getValue('totalExpInt', 0) + parseInt(experience));
        GM_setValue('totalWinDollarsInt', '' + (parseInt(GM_getValue('totalWinDollarsInt', 1)) + 

parseCash(context.bounty)));
      }
      updateLogStats();
      Autoplay.start();
      return true;
      break;

    case 'stats':
      if (innerNoTags.match(/You just upgraded your (\w+)/i)) {
        var stat = RegExp.$1.toLowerCase();
        switch (stat) {
          case 'attack':
            curAttack++;    
            GM_setValue('nextStat' , DEFENSE_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ attackIcon 

+ ' attack.</span>');
            break;
          case 'defense':
            curDefense++;    
            GM_setValue('nextStat' , HEALTH_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ defenseIcon 

+ ' defense.</span>');
            break;
          case 'health':
            maxHealth++;    
            GM_setValue('nextStat' , ENERGY_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ healthIcon 

+ ' health.</span>');
            break;
          case 'energy':
            maxEnergy++;    
            GM_setValue('nextStat' , STAMINA_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ energyIcon 

+ ' energy.</span>');
            break;
          case 'stamina':
            maxStamina++;    
            GM_setValue('nextStat' , INFLUENCE_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ staminaIcon 

+ ' stamina.</span>');
            break;
          case 'influence':
            maxInfluence++;    
            GM_setValue('nextStat' , ATTACK_STAT)
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded '+ 

influenceIcon + ' influence.</span>');
            break;            
          default:
            addToLog('process Icon', '<span style="color:#885588;">'+'You upgraded ' + stat + 

'.</span>');
        }
      } else {
        DEBUG('Failed to increment stat.');
      }
      break;

    case 'accept':
      var accepts = innerNoTags.match(/You joined/gi);
      if (accepts) {
        addToLog('process Icon', 'Accepted ' + accepts.length + ' mafia ' +
                 (accepts.length > 1 ? ' invites.' : ' invite.'));
      } else {
        DEBUG('Unrecognized response for "accept" action.');
        DEBUG(inner);
      }
      break;

    case 'repair':
      if (innerNoTags.indexOf('You need more cash') != -1) {
        addToLog('warning Icon', 'Someone must have robbed you again before we could repair...');
      } else {
        addToLog('process Icon', 'For <span class="expense">$' +
                 makeCommaValue(context.cost) +
                 '</span>, you repaired all of your properties.');
        DEBUG(inner);
      }
      propertyGetDamage(rootElt);
      break;

    case 'protect':
      if (innerNoTags.indexOf('You need more cash') != -1) {
        addToLog('warning Icon', 'Someone must have robbed you again before we could 

protect...');
      } else {
        addToLog('process Icon', 'For <span class="expense">$' +
                 makeCommaValue(context.cost) +
                 '</span>, you protected all of your properties.');
        DEBUG(inner);
      }
      propertyGetDamage(rootElt);
      break;

    case 'energypack':
      addToLog('energyPack Icon', 'Used an <span class="good">Energy Pack</span>.');
      DEBUG(inner);
      break;

    case 'help':
      DEBUG('Parsing job help.');

      // Help attempt was processed. Increment the update count.
      GM_setValue('logPlayerUpdatesCount', 1 + GM_getValue('logPlayerUpdatesCount', 0));

      var user = linkToString(messagebox.getElementsByTagName('a')[0], 'user');
      if (context && !user) {
        user = context.user;
      }
      if (innerNoTags.indexOf('not your friend') != -1 ||
          innerNoTags.indexOf('You need to be friends') != -1) {
        addToLog('info Icon', 'Failed to help' + (user? ' ' + user : '') +
                 ' with job. Reason: not friends.');
      } else if (innerNoTags.indexOf('You are too late') != -1) {
          addToLog('info Icon', 'You are too late to help ' +
                   (user? ' ' + user : '') + ' with this job.');
      } else if (innerNoTags.indexOf('Not Again') != -1) {
          addToLog('info Icon', 'Already helped ' + user + ' with this job.');
      } else if (innerNoTags.indexOf('You received') != -1) {
          var cost = innerNoTags.match(REGEX_CASH);
          var experience = parseInt(innerNoTags.match(/\d+\s+experience\s+points?/i));
          if (innerNoTags.indexOf('Special Bonus') != -1) {
            var loot = innerNoTags.split('gained a ')[1];
            addToLog('lootbag Icon', '<span class="loot">'+' Found a '+ loot.split('.<span')[0] + 

' while helping on a job.</span>');
          }
          var result = 'You received ' + '<span class="good">' +
                   cost + '</span>' + ' and ' +
                   '<span class="good">' + experience + ' experience</span>' +
                   ' for helping ' + user + ' complete the job.';
          addToLog('updateGood Icon', result);
      } else {
        addToLog('info Icon', 'WARNING: Not sure what happened when ' +
                 'trying to help' + (user? ' ' + user : '') + '.' +
                 (context? ' ' + context.help : '') +
                 ' Perhaps you interfered by clicking on something?');
      }
      Autoplay.start();
      return true;
      break;

    case 'sell output':
      // Log any message from a sale of Cuban business output.
      if (inner.match(/sold|collected/i)) {
        addToLog(cityIcons[city], inner);
      } else {
        DEBUG(inner);
      }
      break;

    case 'deposit':
      if (innerNoTags.match(/deposited/i)) {
        addToLog(cityIcons[city], inner);
      } else {
        DEBUG(inner);
      }
      break;

    case 'withdraw':
      if (innerNoTags.match(/withdrew/i)) {
        addToLog(cityIcons[city], inner);
      } else {
        DEBUG(inner);
      }
      break;

    case 'collect ny take':
      if (innerNoTags.match(/You just collected take for production of/i)) {
        var production = innerNoTags.match(/^You just collected take for production of \d+ worth 

\$[\d,]*./i);
        addToLog(cityIcons[city], production);
      } else {
        DEBUG(inner);
      }
      break;

    default:
      addToLog('warning Icon', 'BUG DETECTED: Unrecognized action "' +
               action + '".');
      DEBUG(inner);
  }

  return false;
}

//update the script (by Richard Gibson; changed by ms99 and blannie)
function updateScript() {
  try {
    if (!GM_getValue) {
      return;
    }
    GM_xmlhttpRequest({
      method: 'GET',
      url: SCRIPT.url + '?source', // don't increase the 'installed' count; just for checking
      onload: function(result) {
        if (result.status != 200) {
          return;
        }
        if (!result.responseText.match(/build:\s+'(\d+)/)) return;
        var theOtherBuild = parseInt(RegExp.$1);
        var runningBuild = parseInt(SCRIPT.build);
        var theOtherVersion = result.responseText.match(/@version\s+([\d.]+)/)? RegExp.$1 : '';
        if (theOtherBuild < runningBuild) {
          if (window.confirm('You have a beta version (build ' + runningBuild + ') 

installed.\n\nDo you want to DOWNGRADE to the most recent official release (version ' + 

theOtherVersion + ')?\n')) {
            //clearSettings();
            window.location.href = SCRIPT.url;
          }
          return;
        } else if (theOtherBuild > runningBuild ||
                   theOtherVersion != SCRIPT.version) {
          if (window.confirm('Version ' + theOtherVersion + ' is available!\n\n' + 'Do you want 

to upgrade?' + '\n')) {
            //clearSettings();
            window.location.href = SCRIPT.url;
          }
        } else {
          alert('You already have the latest version.');
          return;
        }
      }
    });
  } catch (ex) {
    addToLog('warning Icon', ex);
  } 
}

///////////////////////////////////////////////////////////////////////////////
//                           UTILITY METHODS                                 //
///////////////////////////////////////////////////////////////////////////////
  

/******************************** General ********************************/  

function clearSettings() {
  if (typeof GM_listValues == 'function' &&
      typeof GM_deleteValue == 'function') {
    var values = GM_listValues();
    for (var i in values) {
      GM_deleteValue(values[i]);
    }
  } else {
    alert('In order to do this you need at least GreaseMonkey version: 0.8.20090123.1. Please 

upgrade and try again.');
  }
}  
  
/******************************** Array ********************************/
  
function getArrayDiffs(workingArray) {
  diffArray = [];
  for (var i = 1; i < workingArray.length; i++) {
    if (workingArray[i] - workingArray[i-1] < 0) {
      diffArray.push(0)
    } else {
      diffArray.push(workingArray[i] - workingArray[i-1]);
    }
  }
  diffArray.unshift(0);
  return diffArray;
}  

// Save an array of strings. The strings must not contain "\n".
function setSavedList(listName, list) {
  GM_setValue(listName, list.join('\n'));
}

// Get an array of strings that was saved with setSavedList().
function getSavedList(listName) {
  var savedList = GM_getValue(listName, '');
  return savedList? savedList.split('\n') : [];
}

// Add an item to a list saved with setSavedList().
// If the size of the list is greater than the "max"
// parameter, the first item in the list is removed.
function addSavedListItem(listName, item, max) {
  var savedList = getSavedList(listName);

  // Only add if it isn't already there.
  if (savedList.indexOf(item) != -1) {
    return;
  }

  savedList.push(item);
  if (max > 0) {
    while (max < savedList.length) {
      var item = savedList.shift();
      DEBUG('Removing ' + item + ' from ' + listName + '.');
    }
  }
  setSavedList(listName, savedList);
}

// Remove an item from a list saved with setSavedList().
function removeSavedListItem(listName, item) {
  var savedList = getSavedList(listName);
  var idx = savedList.indexOf(item);
  if (idx != -1) {
    savedList.splice(idx, 1);
    setSavedList(listName, savedList);
    return true;
  }
  // No matches.
  return false;
}

function cycleSavedList(listName) {
  // Move the first item to the end of the list.
  var opponents = GM_getValue(listName, '').split('\n');
  var first = opponents.shift();
  if (first) {
    opponents.push(first);
  }
  GM_setValue(listName, opponents.join('\n'));
}

/******************************** HTML/DOM ********************************/

function stripURI(img) {
  img = img.split('"')[1];
  return img.replace('" />', '');
}

function showIfUnchecked(setting) {
  if (setting == '0') {
    setting = 'unchecked';
  }
  return setting;
}

function showIfSelected(setting) {
  if (setting == '0') {
    setting = 'not selected';
  } else {
    setting = 'selected';
  }
  return setting;
}

function showIfRelative(key) {
  return GM_getValue(key) == 'checked'? 'relative' : 'absolute';
}

// Converts a link element to an HTML string with an optional CSS class.
function linkToString(link, className) {
  if (!link) return;

  var str = '<a';
  if (className)
    str += ' class="' + className + '"';
  var onclick = link.getAttribute('onclick');
  if (onclick)
    str += ' onclick="' + onclick + '"';
  str += ' href="' + link.href + '">' + link.innerHTML + '</a>';

  return str;
}

function decodeHTMLEntities(str) {
  if (!str) return str;

  scratchpad.innerHTML = str;
  return scratchpad.value;
}

function clickElement(elt) {
  if (!elt) {
    addToLog('warning Icon', 'BUG DETECTED: Null element passed to clickElement().');
    return;
  }

  // Simulate a mouse click on the element.
  var evt = document.createEvent('MouseEvents');
  evt.initMouseEvent("click", true, true, window,
                     0, 0, 0, 0, 0, false, false, false, false, 0, null);
  elt.dispatchEvent(evt);
}

function ignoreElement(element) {
  var parentElt = element.parentNode;
  if (parentElt) {
    var id = parentElt.id;
    if (id && (id.indexOf('countdown') != -1 || id.indexOf('timer') != -1))
      return true;
  }

  var id = element.id;
  if (id && (id.indexOf('countdown') != -1 || id.indexOf('timer') != -1))
    return true;

  return false;
}

function xpathFirst(p, c) {
  return document.evaluate(p, c || document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, 

null).singleNodeValue;
}

function $x(p, c) {
  var i, r = [], x = document.evaluate(p, c || document, null, 

XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
  while (i = x.iterateNext()) r.push(i);
  return r;
}

function xpath(query, element) {
  var element = (element == null) ? document : element;
  return document.evaluate(query, element, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}

// Toggle checkbox element and return true if it is checked
function toggleCheckElt(eltId) {
  if (GM_getValue(eltId) == 'checked') {
    GM_setValue(eltId, '0');
    return false;
  } else {
    GM_setValue(eltId, 'checked');
    return true;
  }
}

// Save an array of checkbox elements
function saveCheckBoxElementArray(arrayEltIds) {
  for (var i=0; i<arrayEltIds.length; i++)
    saveCheckBoxElement(arrayEltIds[i])
}

// Save checkbox element and return true if it is checked
function saveCheckBoxElement(eltId) {
  if (document.getElementById(eltId).checked === true) {
    GM_setValue(eltId, 'checked');
    return true;
  } else {
    GM_setValue(eltId, 0);
    return false;
  }
}

function makeElement(type, appendto, attributes, checked, chkdefault) {
  var element = document.createElement(type);
  if (attributes != null) {
    for (var i in attributes) {
      element.setAttribute(i, attributes[i]);
    }
  }
  if (checked != null) {
    if (GM_getValue(checked, chkdefault) == 'checked') {
      element.setAttribute('checked', 'checked');
    }
  }
  if (appendto) {
    appendto.appendChild(element);
  }
  return element;
}

/******************************** CASH PARSING ********************************/

// Parse a monetary value such as "C$50,000" and return an integer.
function parseCash(cash) {
  var c = cash;
  if (typeof(c) == 'string') {
    c = c.trim().replace(/[A-Z$,'']/g, '');
  }
  return parseInt(c);
}

function makeCommaValue(nStr) {
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1;
}

/******************************** DATE/TIME ********************************/

// reads a date string from a stored GM value and converts it to seconds since 1970
function getGMTime(GMvalue) {
  var tempVal = GM_getValue(GMvalue, 0);
  var d = Date.parse(tempVal);
  return d/1000;
}

// takes a string input in the form of a countdown 'MM:SS', 'HH:MM:SS', 'MM minutes and SS 

seconds' and stores the
// time when the countdown is zero in a GM value.  Also takes an input of 'now' and stores the 

current time.
function setGMTime(GMvalue, countdownStr) {
  var d = new Date();
  d.setMilliseconds(0);

  if (countdownStr != 'now')
    d.setTime(d.getTime()+(timeLeft(countdownStr)*1000));

  GM_setValue(GMvalue, d.toString());
}

// returns the number of seconds left until a date stored in a GM value
function timeLeftGM(GMvalue) {
  var timeToCompare = getGMTime(GMvalue);

  var d = new Date();
  d.setMilliseconds(0);

  return Math.max(timeToCompare-(d.getTime()/1000), 0);
}

// takes a string input in the form of 'MM:SS', 'HH:MM:SS', or 'MM minutes and SS seconds' and 

returns the number of seconds it represents
function timeLeft(timeToConvert) {
  if (!timeToConvert)
    return 0;

  var returnVal = 0;

  var temp = new Array();
  temp = timeToConvert.split(':');

  if (temp.length == 2)  // MM:SS
    returnVal = ((parseInt(temp[0]) * 60) + parseInt(temp[1]));
  else if (temp.length == 3) // HH:MM:SS
    returnVal = ((parseInt(temp[0]) * 60 * 60) + (parseInt(temp[1]) * 60) + parseInt(temp[2]));
  else if (temp.length == 1) {  // 'HH hours and MM minutes and SS seconds'
    temp = timeToConvert.split(' and ');
    for (i = 0; i < temp.length; i++) {
      spaceIndex = temp[i].indexOf(' ');
      if (spaceIndex != -1) {
        firstPart = temp[i].substring(0, spaceIndex);
        secondPart = temp[i].substring(spaceIndex+1, temp[i].length);
        if ((secondPart == 'minutes') || (secondPart == 'minute'))
          returnVal = returnVal + (parseInt(firstPart) * 60);
        else if ((secondPart == 'seconds') || (secondPart == 'second'))
          returnVal = returnVal + (parseInt(firstPart));
        else if ((secondPart == 'hours') || (secondPart == 'hour'))
          returnVal = returnVal + (parseInt(firstPart * 60 * 60));
      }
    }
  }

  return(returnVal);
}

Because it's your web

Powered by overstimulate with the help of many friends

Policy & Guidelines: DMCA Privacy Policy