Draym / OG-Tracker

// ==UserScript==
// @name        OG-Tracker
// @description Track ogame data : player activity & score & position
// @include     *.ogame*gameforge.com/game/index.php*
// @author      Draym
// @copyright   2019, Draym (draymlab.fr)
// @license     MIT
// @version     2.0.0.4
// @updateURL https://openuserjs.org/meta/Draym/OG-Tracker.meta.js
// @downloadURL https://openuserjs.org/install/Draym/OG-Tracker.user.js
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_addStyle
// @grant          GM_xmlhttpRequest
// @connect        ogtracker.draymlab.fr
// ==/UserScript==

// ==OpenUserJS==
// @author Draym
// ==/OpenUserJS==

(function () {
  'use strict';
  var $ = unsafeWindow.$;
  var state = {
    log: true,
    api: 'http://ogtracker.draymlab.fr/api'
  };

  function getState() {
    return state;
  }

  function setState(data) {
    for (var key in data) {
      state[key] = data[key];
    }
  }

  function tk_log(...values) {
    if (state.log) {
      console.log(...values);
    }
  }

  /* **************************************************************/
  /* ********************** MESSAGES ******************************/
  /* **************************************************************/
  function tk_analyseMessage() {
    let ctn = $("div.detail_msg");
    if (!ctn) {
      return;
    };
    let messageType = ctn.attr("data-message-type");
    let message = $(ctn).find("div.detail_msg_ctn").clone();
    // SPY
    if (messageType == 10) {
      console.log("SPY");
      let messageTitle = $(ctn).find("div.detail_msg_head span.msg_title a.txt_link").html();
      let position = messageTitle.substring(messageTitle.indexOf("[") + 1, messageTitle.indexOf("]"));
      let clear = $(message).find("div.mCustomScrollBox div.mCSB_container br.clearfloat")[0];
      $(clear).nextAll().remove();
      let widget = $(`<div class="tk_galaxySpy ui-dialog ui-widget ui-widget-content ui-corner-all ui-front ui-draggable" tabindex="-1"
                     role="dialog"></div>`);
      let widget_content = $(`<div class="overlayDiv ui-dialog-content ui-widget-content" data-page="messages"></div>`);
      let content_msg = $(`<div class="detail_msg"></div>`);
      message.removeAttr("style");
      console.log("SCROLLBAR: ", message.find("div[id*=_scrollbar_vertical]"));
      message.find("div[id*=_scrollbar_vertical]").remove();
      content_msg.append(message);
      widget_content.append(content_msg);
      widget.append(widget_content);
      console.log("SET:", position, widget.prop('outerHTML'));
      GM_setValue(position, widget.prop('outerHTML'));
    }
    // FIGHT
    if (messageType == 25) {
      console.log("FIGHT");
    }
  }
  /* **************************************************************/
  /* ********************** RANKING *******************************/
  /* **************************************************************/
  function isPlayerRankPage() {
    var menuPlayer = $('div#categoryButtons').find('a#player');
    return menuPlayer.hasClass('active');
  }

  function tk_observeRanking() {
    console.log("update");
    if (!isPlayerRankPage()) {
      return;
    }
    var rankingRows = tk_parseRanking();
    if (rankingRows.length == 0) {
      return;
    }
    var jsonData = JSON.stringify(rankingRows);
    GM_xmlhttpRequest({
      method: "POST",
      url: getState().api + "/player/ranking/save",
      data: jsonData,
      headers: {
        "Origin": "tampermonkey_" + getState().server,
        "Authorization": GM_getValue('tk_token'),
        "Content-Type": "application/json"
      },
      onload: function (response) {
        if (response.status == 200) {
          var data = JSON.parse(response.responseText);
        }
        tk_log("observeRanking: ", rankingRows, response.responseText);
      }
    });
  }

  function tk_parseRanking() {
    var rankingRows = [];
    var rows = $('tr[id^="position"]');

    let rankType = $('div#typeButtons').find('a.active');
    for (var i = 0; i < rows.length; i++) {
      if (rows.eq(i).hasClass('myrank')) {
        continue;
      }
      let rankPos = rows.eq(i).find('td.position').html().trim();
      let rankScore = rows.eq(i).find('td.score').html().trim().replace(/\./g, '');
      let playerName = rows.eq(i).find('td.name a span.playername').text().trim();
      let playerRef = rows.eq(i).find('td.sendmsg div.sendmsg_content a.sendMail').attr('data-playerid').trim();
      let honor = rows.eq(i).find('td.name a span.honorScore span').text().trim().replace(/\./g, '');

      rankingRows.push({
        playerName: playerName,
        playerRef: playerRef,
        playerHonor: parseInt(honor),
        rankPosition: parseInt(rankPos),
        rankScore: parseFloat(rankScore),
        rankTypeId: parseInt(rankType.attr('rel')),
        rankTypeName: rankType.find('span.textlabel').text(),
        server: getState().server
      });
    }
    tk_log("rows", rankingRows);
    return rankingRows;
  }

  /* **************************************************************/
  /* ********************** GALAXY ********************************/
  /* **************************************************************/
  function tk_tooltip_savePlayerName(tooltip) {
    let tooltipContent = tooltip.find('div.htmlTooltip.galaxyTooltip');
    let playerRef = tooltipContent.attr('id');
    let playerName = tooltipContent.find('h1 span').text().trim();

    let parameters = {
      playerRef: playerRef,
      playerName: playerName,
      server: getState().server
    };
    if (!playerRef || !playerRef.includes("player")) {
      return;
    }

    console.log("SEND NAME :", parameters);
    GM_xmlhttpRequest({
      method: "PUT",
      url: getState().api + "/player/update",
      data: JSON.stringify(parameters),
      headers: {
        "Origin": "tampermonkey_" + getState().server,
        "Authorization": GM_getValue('tk_token'),
        "Content-Type": "application/json"
      },
      onload: function (response) {
        if (response.status == 200) {
          var data = JSON.parse(response.responseText);
        }
        tk_log("observePlayerTooltip: ", parameters, response.responseText);
      }
    });
  }

  function tk_addGalaxy_tooltipDrawSavedSpy(status, pos) {
    console.log("Hover: ", status, pos, pos.g + ":" + pos.s + ":" + pos.p);

    let spy = GM_getValue(pos.g + ":" + pos.s + ":" + pos.p);
    if (!spy) {
      return;
    }
    if (status && !$(".tk_galaxySpy").get(0)) {
      $("body#ingamepage").append(spy);
    }
    else {
      console.log("REMOVE", $(".tk_galaxySpy"));
      $(".tk_galaxySpy").remove();
    }
  }

  function tk_addGalaxy_tooltipSpyBtn() {
    $("#galaxytable > tbody").find("tr.strong_filter").each(function () {
      let actions = $(this).find("td.action");
      console.log("Row: strong", actions.find("button.tkSavedSpyBtn").get(0));
      let pos = {
        g: 1,
        s: 1,
        p: 1
      };

      pos.g = $("#galaxy_input").val();
      pos.s = $("#system_input").val();
      pos.p = $(this).find("td.position.js_no_action").html();

      if (GM_getValue(pos.g + ":" + pos.s + ":" + pos.p) && !actions.find("button.tkSavedSpyBtn").get(0)) {
        console.log("Append btn");
        let btn = $("<button class='tkSavedSpyBtn' type='button'></button>");
        btn.mouseenter(function () {
          tk_addGalaxy_tooltipDrawSavedSpy(true, pos);
        });
        btn.mouseout(function () {
          tk_addGalaxy_tooltipDrawSavedSpy(false, pos);
        });
        actions.append(btn);
      }
    });
  }

  function tk_observeGalaxyTooltip() {
    let tooltip = $('div.tpd-tooltip.tpd-skin-cloud');

    if (tooltip && tooltip.size() == 1) {
      tk_tooltip_savePlayerName(tooltip);
    }
  }

  function tk_observeCurrentGalaxy() {
    var galaxyRows = tk_parseGalaxy();
    var jsonData = JSON.stringify(galaxyRows);
    GM_xmlhttpRequest({
      method: "POST",
      url: getState().api + "/activity/save",
      data: jsonData,
      headers: {
        "Origin": "tampermonkey_" + getState().server,
        "Authorization": GM_getValue('tk_token'),
        "Content-Type": "application/json"
      },
      onload: function (response) {
        if (response.status == 200) {
          var data = JSON.parse(response.responseText);
        }
        tk_log("observeCurrentGalaxy: ", galaxyRows, response.responseText);
      }
    });
  }

  function tk_parseGalaxy() {
    var galaxyRows = [];
    var rows = $('tr.row');
    var galaxySystem = tk_getCurrentGalaxySystem();

    for (var i = 0; i < rows.length; i++) {
      var planetItem = new tkGalaxyRow();

      var objItem1 = rows.eq(i).find('td.position');
      if (objItem1.length == 1) {
        planetItem.position = galaxySystem.split(':')[0] + ':' + galaxySystem.split(':')[1] + ':' + objItem1.html();
      }
      else {
        tk_log("no planet");
        continue;
      }

      var objItem2 = rows.eq(i).find('td.playername');
      if (objItem2.find('a[rel*="player"]').length == 1) {
        objItem2 = objItem2.find('a[rel*="player"]');
        var playerId = objItem2.eq(0).attr('rel').replace('player', '');
        if (playerId != 0) {
          planetItem.playerName = objItem2.find('span').text().trim();
          planetItem.playerRef = objItem2.eq(0).attr('rel');
        }
      }
      else if (objItem2.find("span.status_abbr_active").length == 1) {
        //planetItem.playerName = objItem2.find("span.status_abbr_active").text().replace(/\s/g,'');
        continue;
      }
      else {
        planetItem.isEmpty = true;
        planetItem.playerName = "";
      }

      var objItem3 = rows.eq(i).find('td.allytag').find('span:first');
      if (objItem3.length == 1) {
        planetItem.allyTag = Trim(objItem3.clone().children().remove().end().text());
      }

      var objItem5 = rows.eq(i).find('td.microplanet.colonized').find('div.ListImage');
      if (objItem5.length == 1) {
        if (objItem5.find('div.minute15').length == 1) {
          planetItem.activity = "0";
        }
        else {
          planetItem.activity = objItem5.find('div.activity').text().trim();
        }
      }
      planetItem.server = getState().server;

      var objItem6 = rows.eq(i).find('td.moon');
      if (objItem6.length == 1 && objItem6.find("a").length != 0) {
        var moonItem = tk_copyGalaxyRow(planetItem);
        moonItem.isMoon = true;
        if (objItem6.find('div.minute15')) {
          moonItem.activity = "0";
        }
        else if (objItem6.find('div.activity')) {
          moonItem.activity = objItem6.find('div.activity').text().trim();
        }
        galaxyRows.push(moonItem);
      }
      galaxyRows.push(planetItem);
    }
    return galaxyRows;
  }

  function tk_getCurrentGalaxySystem() {
    var key = 'span[id="pos-planet"]';

    if ($(key).length == 0) {
      var sLink = $('a.planetMoveIcons').eq(0).attr('onClick');

      if (!sLink) sLink = $('a.planetMoveIcons').eq(0).attr('href');

      var sGalaxy = parseInt(sLink.split('galaxy=')[1].split('&amp;')[0]);
      var sSystem = parseInt(sLink.split('system=')[1].split('&amp;')[0]);

      return sGalaxy + ':' + sSystem;
    }
    else {
      var coordinatess = $(key).eq(0).html().replace('[', '').replace(']', '');

      if (coordinatess == null) return;

      var coordinates = coordinatess.split(':');

      return coordinates[0] + ':' + coordinates[1];
    }
  }

  function Trim(string) {
    var sPattern = "\\S+.+\\S+";
    var objResult = (new RegExp(sPattern)).exec(string);

    return (objResult) ? objResult[0] : string;
  }

  /* **************************************************************/
  /* ******************** MODEL DATA ******************************/
  /* **************************************************************/

  function tk_copyGalaxyRow(row) {
    let result = new tkGalaxyRow();
    result.position = row.position;
    result.isMoon = row.isMoon;
    result.isEmpty = row.isEmpty;
    result.playerName = row.playerName;
    result.playerRef = row.playerRef;
    result.allyTag = row.allyTag;
    result.activity = row.activity;
    result.server = row.server;
    return result;
  }

  function tkGalaxyRow() {
    this.position = '';
    this.isMoon = false;
    this.isEmpty = false;
    this.playerName = '';
    this.playerRef = '';
    this.allyTag = '';
    this.activity = '';
    this.server = '';

    this.ToString = function () {
      var str;

      if (this.playerRank == '-') this.playerRank = 0;

      str = this.position + '\t';
      str += this.isMoon + '\t';
      str += this.playerName + '\t';
      str += this.playerRef + '\t';
      str += this.allyTag + '\t';
      str += this.server + '\t';
      str += this.activity;
      str += '\n';

      return str;
    }

    this.GetHash = function () {
      var str;

      str = this.position + '\t';
      str += this.isMoon + '\t';
      str += this.playerName + '\t';
      str += this.server + '\t';
      str += this.allyTag;
      str += '\n';

      return str;
    }
  }

  /* **************************************************************/
  /* ******************* GUI - PANEL ******************************/
  /* **************************************************************/
  function tk_showLoginError(error) {
    $("#tkLoginError").text(error);
    $("#tkLoginError").show();
  }

  function tk_drawLogin(visible) {
    if (!visible) {
      $("#tkLogin").hide();
    }
    else {
      $("#tkLoginError").hide();
      $("#tkLogin").show();
    }
  }

  function tk_drawAccount(visible) {
    if (!visible) {
      $("#tkAccount").hide();
    }
    else {
      $("#tkAPseudo").text(GM_getValue('tk_pseudo'));
      $("#tkAEmail").text(GM_getValue('tk_email'));
      $("#tkAccount").show();
    }
  }

  $("body").append(`
<div id="tkLogin" style="display: none;">
<form>
<h3 id="tkLoginTitle">Login form</h3>
<input type="text" id="tkEmail" value="" placeholder="email for OG-Tracker">
<input type="password" id="tkPassword" value="" placeholder="password for OG-tracker">
<br/>
<br/>
<span id="tkLoginError" class="tkError"></span>
<br/>
<button id="tkLoginBtn" type="button">Login</button>
<button id="tkCloseLoginBtn" type="button">Close</button>
</form>
</div>
<div id="tkAccount" style="display: none;">
<form>
<h3 id="tkAccountTitle">OG-Tracker Account</h3>
<span>Account email: </span>
<span id="tkAEmail" value=""></span>
<br/>
<span>Account pseudo: </span>
<span id="tkAPseudo" value=""></span>
<br/>
<button id="tkGoLoginBtn" type="button">Change Account</button>
<button id="tkCloseAccountBtn" type="button">Close</button>
</form>
</div>
`);
  $("#tkLoginBtn").click(function () {
    var email = $("#tkEmail").val();
    var password = $("#tkPassword").val();

    var jsonData = JSON.stringify({
      email: email,
      password: password,
      origin: "tampermonkey_" + getState().server
    });
    GM_xmlhttpRequest({
      method: "POST",
      url: getState().api + "/auth/login",
      data: jsonData,
      headers: {
        "Origin": "tampermonkey_" + getState().server,
        "Content-Type": "application/json"
      },
      onload: function (response) {
        if (response.status == 200) {
          var data = JSON.parse(response.responseText);
          GM_setValue('tk_token', data.token.token);
          GM_setValue('tk_tokenBackup', data.token.tokenBackup);
          GM_setValue('tk_email', data.user.email);
          GM_setValue('tk_pseudo', data.user.pseudo);
          tk_drawLogin(false);
        }
        else {
          tk_showLoginError(response.responseText);
        }
      }
    });
  });

  $("#tkCloseLoginBtn").click(function () {
    tk_drawLogin(false);
  });
  $("#tkCloseAccountBtn").click(function () {
    tk_drawAccount(false);
  });
  $("#tkGoLoginBtn").click(function () {
    tk_drawAccount(false);
    tk_drawLogin(true);
  });

  /* **************************************************************/
  /* *********************** GUI - MENU ***************************/
  /* **************************************************************/
  var logo = "data:image/png;base64,AAABAAEAPzsAAAEAIAAUPAAAFgAAACgAAAA/AAAAdgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYFRYCGBUWBhgVFhYYFRa6GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFroYFRYbGBUWEBgVFgIYFRYJGBUWqBgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUWqBgVFgQYFRYWGBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFjwYFRbJGBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFuQYFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/cnKC/zk5T/8gHzf/BgYi/wAAHf8AAB3/AAAd/wAAHf8AAB3/Fxcx/zIySf9oaHn/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/Tk5i/w0NKf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wgIJP9RUWX/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/0REWf8AAB3/AAAd/wAAHf8lJT7/W1tu/52dqP/Hx83/1tbb/+Xl6P/09PX/+/v7/+vr7f/b29//y8vR/7Cwuf90dIT/ODhP/wAAHf8AAB3/AAAd/x4dJ/8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv9dXW//AAAd/wAAHf8aGjT/f3+N/9PT2P///////////////////////////////////////////////////////////////////////////+Xl6P+ZmaX/MzNK/wAAHf8AAB3/Hh44/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xoaNP8AAB3/Gho0/39/jf/m5un///////////////////////////////////////T09f/W1tv/x8fN/+Xl6P///////////////////////////////////////////5mZpf8zM0r/AAAd/wAAHf9KSl//GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/AAAd/wAAHf9OTmL/3Nzg///////////////////////j4+b/qqq0/2Rkdv8xMUj/ExMu/wAAHf8AAB3/AAAd/wAAHf8EBCH/IiI7/0BAVv8AAB3/AAAd/2xsff//////////////////////fHyL/wAAHf8AAB3/FBQv/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xoaNP8AAB3/AAAd/3h4h//////////////////19fb/lJSg/zk5UP8AAB3/Dw8q/y0tRf8YGDL/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/ygoQP9NTWH/s7O8/////////////////7a2vv8zM0r/AAAd/wAAHf8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/FRUw/wAAHf8AAB3/o6Ot////////////5+fq/4aGlP8mJj//AAAd/0tLX/+lpa//////////////////rq63/xgYMv8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9xcYH/KytD/01NYf+zs7z////////////w8PL/VVVo/wAAHf8AAB3/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8vL0b/AAAd/wAAHf+qqrT///////////+urrf/IyM8/wAAHf8AAB3/OTlP//X19v/////////////////v7u7/9/f3/8rK0P8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/vb3E/5iYpP8UFC//YmJ0/////////////////1VVaP8AAB3/Cgom/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/0xMYP8AAB3/AAAd/6qqtP///////////5aWov8AAB3/AAAd/wAAHf8AAB3/zs7U///////////////////////8/Pz/xsTC//v7+/8uLkb/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/UVFl///////X19z/XFxv/ygoQP/k5Of///////////9VVWj/AAAd/x4dJ/8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/hoaU/wAAHf8AAB3/o6Ot////////////f3+N/wAAHf8AAB3/AAAd/wAAHf9kZHb////////////////////////////o5+f/xsTC//j39/8kJD3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/7e3v////////////4eHlf8AAB3/xsbN///////w8PL/MzNK/wAAHf9YWGv/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/DAwo/wAAHf94eIf///////////+qqrT/AAAd/wAAHf8AAB3/AAAd/wAAHf9/f43///////////////////////Tz8//IxsT/2NbV/9LS1/8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/3R0hP////////////////+WlqL/AAAd/9XV2v//////tra+/wAAHf8AAB3/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv9VVWj/AAAd/05OYv///////////6qqtP8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9tbX7/+vn5/+rq6f/w8O//3dzb/8rJx//Qzs3/9vb1/3h4h/8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/zIySf//////////////////////o6Ou/wQEIf/V1dr//////3x8i/8AAB3/MDBG/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8AAB3/GBgy/9zc4P//////xsbM/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8kJD3//////9za2f/GxML/ysnH/97d3P/5+fj/qqq0/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf/x8fP//////////////////////4uLmP8yMkn/+Pj5//////8wMEj/AAAd/39/jf8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/0FBV/8AAB3/eXmI////////////VVVo/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/QEBW/8fHzf///////////9LS1/94eIf/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf+7u8P///////////////////////////9AQFb/gICO//////+RkZ7/AAAd/x4eOP8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/wAAHf8KCib/2dnd//////+qqrT/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8oKED/IiI7/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf+EhJL///////////////////////////+4uMD/Cwsn/9zc4P/x8fP/IiI7/wAAHf+MjJn/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/cXGB/wAAHf9ra3z///////////85OVD/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9NTWH/////////////////////////////////X19x/2pqe///////g4OR/wAAHf8eHSf/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/Hh44/wAAHf/Gxsz//////62ttv8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9LS1//////////////////////////////////sbG6/xISLf/7+/v/2dnd/wAAHf8AAB3/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/AAAd/xwcNv///////////1pabf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9aWm3//////////////////////////////////////y0tRf+3t7///////0FBV/8AAB3/ZmZ3/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv97e4r/AAAd/1VVaP///////////wgIJP8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9paXr//////////////////////////////////////4CAjv9zc4P//////4aGlP8AAB3/RERZ/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv9HR1z/AAAd/46Om///////t7e//wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf94eIf//////////////////////////////////////6qqtP84OE///////8vL0f8AAB3/Hx4y/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8ODin/UVFl/9zc4P/47cL/l5ej/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf+RkZ7//////////////////////////////////////9XV2v8YGDL///////nuxf+enqn/AAAd/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv+urrf///////Timv/689b/eHiH/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf+0tL3///////////////////////////////////////////8AAB3/9/f4//Tinf/04Zf/9vb3/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/8tyI/+O1AP/9+ev/WFhr/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf/W1tv///////////////////////////////////////////8AAB3/19fc//bnrv/luQz/8NZx/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv/szE3/47UA/+O1AP//////SEhd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf/5+fr///////////////////////////////////////////8AAB3/xsbM//jsv//jtQD/47UA/+3NU/8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/+W7Ff/jtQD/47UA/+O1AP/9+e3/amp7/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/x0dN/////////////////////////////////////////////////8AAB3/4eHk//Tglf/jtQD/47UA/+O1AP/w13T/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/7tRq/+O1AP/jtQD/47UA/+O1AP/79dz/jY2a/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/0BAVv////////////////////////////////////////////////8AAB3//Pz8/+/Ua//jtQD/47UA/+O1AP/jtQD/9eWm/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/47UA/+O1AP/jtQD/47UA/+O1AP/578r/srK7/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/4WFk////////////////////////////////////////////5CQnf8YGDL//////+vJR//jtQD/47UA/+O1AP/jtQD/68pJ/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv95bUD/47UA/+O1AP/jtQD/47UA/+O1AP/y3Ib//////1BQZP8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/8vL0f//////////////////////////////////////t7e//wAAHf88PFL//////+fAJP/jtQD/47UA/+O1AP/jtQD/0KYA/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv9/fXX/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/+/Xc/9fX3P83N07/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/Gho0//////////////////////////////////////+wsLn/HR03/0REWf/k5Of/9eWl/+O1AP/jtQD/47UA/+O1AP/jtQD/YFUp/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/d2o1/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA//rxz//y8vT/Xl5w/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/Xl5w////////////////////////////oqKt/0FBV/8AAB3/YmJ0///////z4Zb/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/FxYT/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/AAAA/56KOf/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/z3oz//////5SUoP8iIjv/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAA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Fv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/wAAHf8AAB3/AAAd/2xjT//HpCD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/7GXNv9CP0f/AAAd/wAAHf8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8fHjL/AAAd/wAAHf8DAyD/S0ZG/5SAPf/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/+O1AP/jtQD/47UA/76hMf+DdlL/REBJ/wAAHf8AAB3/AAAd/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/x4dJ/8AAB3/AAAd/wAAHf8ODij/YlpN/5B/Sf+tlDn/yqYg/+O1AP/jtQD/47UA/+O1AP/Rqxf/s5g2/5KBSP9oYFD/JCM5/wAAHf8AAB3/AAAd/wAAHf8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/Tk5i/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wMDIP8lJDn/NTNC/xAQKv8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8dHCr/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/R0dc/w4OKf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf8AAB3/AAAd/wAAHf9AQFb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRaTGBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFroYFRYdGBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFiAYFRYQGBUWuhgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUWuhgVFhMYFRYFGBUWAhgVFg8YFRaoGBUW6hgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFv8YFRb/GBUW/xgVFroYFRYbGBUWAhgVFgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";

  if (!/page=empire/.test(location.href)) {
    var aff_option = `<span class="menu_icon">
<a id="iconeUpdateTK" href="http://ogtracker.draymlab.fr" target="blank_" >
<img id="imgMenuTK" class="mouseSwitch" src="` + logo + `" rel="` + logo + `" height="26" width="26">
</a></span>
<a id="affOptionsTK" class="menubutton" href="#" accesskey="" target="_self">
<span  class="textlabel">OG-Tracker</span></a>`;

    var tableau = document.createElement("li");
    tableau.innerHTML = aff_option;
    tableau.className += "custom-option";
    tableau.id = 'option-Tracker';
    document.getElementById('menuTable').appendChild(tableau);

    document.getElementById('affOptionsTK').addEventListener("click", function (event) {
      var token = GM_getValue('tk_token');
      if (token) {
        tk_drawAccount($("#tkAccount").is(":hidden"));
      }
      else {
        tk_drawLogin($("#tkLogin").is(":hidden"));
      }
    }, true);
  }
  /* **************************************************************/
  /* ********************* STARTER ********************************/
  /* **************************************************************/

  function init() {
    console.log("window:", unsafeWindow);
    setState({
      pseudo: document.getElementsByName('ogame-player-name')[0].content,
      idPlayer: document.getElementsByName('ogame-player-id')[0].content,
      server: document.getElementsByName('ogame-universe')[0].content
    });
    var token = GM_getValue('tk_token');
    if (!token) {
      tk_drawLogin(true);
    }
  }

  init();

  // CHECK GALAXY
  if (/component=galaxy/.test(location.href)) {
    var galaxyObserver = new MutationObserver(function (mutations, observer) {
      var token = GM_getValue('tk_token');
      if (token) {
        tk_observeCurrentGalaxy();
      }
      tk_addGalaxy_tooltipSpyBtn();
    });
    galaxyObserver.observe(document.getElementById("galaxyContent"), {
      childList: true
    });

    var tooltipObserver = new MutationObserver(function (mutations, observer) {
      tk_observeGalaxyTooltip();
    });
    tooltipObserver.observe($("body#ingamepage").get(0), {
      childList: true
    });
  }
  // CHECK MESSAGES
  else if (/page=messages/.test(location.href)) {
    var messagesObserver = new MutationObserver(function (mutations, observer) {
      console.log("init:", mutations, observer);
      tk_analyseMessage();
    });
    messagesObserver.observe($("body#messages").get(0), {
      childList: true
    });
  }
  // CHECK RANK
  else if (/page=highscore/.test(location.href)) {
    tk_observeRanking();
    var rankingObserver = new MutationObserver(function (mutations, observer) {
      var token = GM_getValue('tk_token');
      if (token) {
        tk_observeRanking();
      }
    });
    rankingObserver.observe($("div#stat_list_content").get(0), {
      childList: true
    });
  }

  /* **************************************************************/
  /* ************************ CSS *********************************/
  /* **************************************************************/

  GM_addStyle(`
/*** THEME ***/
#menuTable > .custom-option {
margin-top: 10px !important;
margin-bottom: 10px !important;
}
#menuTable > .custom-option ~ .custom-option {
margin-top: -10px !important;
margin-bottom: 10px !important;
}
.custom-option a span {
color: #68a2ff !important;
}

/*** CUSTOM ***/
.tkError {
color: red;
visibility: none;
}
#tkLogin, #tkAccount {
position:               fixed;
top:                    70%;
left:                   0;
width:                  300px;
padding:                10px;
background:             rgba(51, 102, 153, 0.9);
border:                 2px black;
border-radius:          1ex;
z-index:                777;
}
#tkLogin form{
margin-left: 10px !important;
margin-botton: 10px !important;
}
#tkLogin button, #tkAccount button{
cursor:                 pointer;
margin:                 1em 1em 0;
border:                 1px outset buttonface;
}
.tkSavedSpyBtn {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA1CAYAAAAQ7fj9AAALp0lEQVRoQ+1aeVTVVR7/sAj4HvsiIIuxCiKLShqKI7mgpqjk2GJajuNUYzaWY1lzarQ5bkXjWJMGjpXZcKZDB7XopKkoLqGRWGEswsMFlCVcMOCxPOjO/V79Pd/+HpvMH/M9557fg9+93/v93M/33u/33vsD/i+9H4FF06ezSGfnzQEAM1ceSUpive/RuAarvla+dM4cduiLLwyqtbGxgW9QMAa7uKKusgJNjY0G6zn5B3xWcqX6kb60rc+ADg8InKqsrjokGSd3dkbY7N+iMywGjV4BqHUPwCUXXy3bvZU3MOx6FdzrL8LhYgnqTxzGlUqFVp1qoE9s7LWS0YHDWEPVZWEcMRY+ZQZax8/Eifvn9oiQUdcqEFT8DVoLjuGnvMNqHb0F3CugNO8kS0b/fgV+fPAJXHLz7xFAQ43GVp2F26fvoOTYEfG6N2B7DFQCGX7/OHQsegEnQhP7DKCuopQjH6A8PQ3Klha4eXig6Pr1btvd7QYjXFyymm7dWkDGjH7uZRyY8Ue0W9v2G0hJcWxdGfw/exdFB3J6xG63gEosyuRyDH1jO45GTjYK0G2QNfwcbOBtZw0nW2s42ljxJxVr8H+huQto6vz1TmFo7GSobu3ElTb+woTMTl+JH3P2dBusxUBH+/iwhro6eHh7w+X1bTgWNE50RmBGOQ/COFc7JLrZi7+pyDgwktbWVrRwl2tublY/Ozo6IOeDpVvs7OxEGwJLoMtaunCuSaUu9e23B6EnYC0GSmz6B4eg6aWtCIpPQLKnPX7jbo8YDpIkLy8PCoUCFRUV4in9JqCWiru7O8LCwhAaGqp+RkdHIyYmRqgo4aCz61pFCUhbLpgdLJOFlCuVFyztw2Q9AvnEnHlsw9enWZVSxUjy8/PZli1b2ByeINjb29Pq22/F19eXLVmyhO3cuZMVFxeL/q93dLHn1m5m4TJZ8Pz5881mVWYZXcU7mL54CZInT0JBQQH27duHvXv3oqyszOjg+A8bBu/gMMgDQ2DlPgTMQY5feekaLIfKToYu20Gwa1fCpq1FFOs2Jax46aiuxM1LClQrKrirNxnVn5iYiNTUVMybNw+XSktxkU+pZcuWmcRiFiiN3o4dO5CVlYXc3FytzilBCIuOhVtEDKxGjkWDfyQuuweiw+b2XOuNeLdcg++1y3AtP4OW4kJUFxehruaqlkruSQJsZ2cnsrOzew40IyNDgCwsLFR3EBY1EkMfSEJLzEQo/KPQ6ODSGzzdahveoIBPxRm0Fx7HueO5UCqV6vYpKSnIyckxCtYco8L33XmQjln4NK5HTcC5gNhuGddflYe03EBY+TdQHf8SBQe/UnfD56tBdk0BZba2tpjw5DO4OGURqlwtS+3sra0Q4WiLCPntIudxU25jzcMNxFPOY6mM17mm+hUNPFzQ81oH/80LPSuVKlxQmo6luoM3tvw4sD9TE7AeLkNABYvxk5PRvHA1ynwjTZIS5TQICTyGzvRyQBwPNcEyW9RdvYpKvlgpeKmvqUELj6GtPJbSU/rtMWQIPHmRnp48Pnv5+GD4yJGwk8lxvqVTlLJmlXgW3lKhhP82JWNLj6IhYz0uVpRTNS1sukAFyKTlLyFv1p+M6iRAj/nKkOI9GOEOwHcnT+Lk4cM4cegQKvgq2NJkfMW0xJUdnZwQEx8vStiIERg1bhxCIyPxwy8qfFqjxH94qTKSQQ3uaseoD/+C/H1Z4CEJu3btEhjVQCkefsE3zAlvfYhTUdMM2jPF0wHPBsgwz3MQDvK6Bz//XAD8ubbWEvu7VWdzRga+OXIE+bxcb2hAVFwc5jz+OCZNn44RsbH4vL4Ve3jisPvq3QVJs4NJn23EsV3vqzFqMspMgXw70hV/DnLEx9u24V9btqDqQt8kI8bQb929Gw8vXoyuri4BNv/oUeExRWfOYMz48Zg4bRpWrVuHty40YU3ZLYNqEnhefCpnjzaj9y9fw76btcJgg+8TvRFm1YbXVqxANjfgXsj8J5/EPz7+WK+rPZ98gqyPPhLAH126FGkffID3q5qx/CfDxzKYFSCA8n0E8NLra42CVCT5wKmmEgv5CN4rkGQTTQlDQix/yhneyTM0YpjsSrW5hcw4d4P1IxcsEeuOAPpdY4fBShuHuyCEr6KbX30V33/77b0gUt0HrdbkpsYkee5cbObJDA3Ic489hoVDZQjl4UxXSlNfEP8SQPP+uclgPJ3qYY/DOTn4mo/eQMjxgwdNdps0YwbWbd2KS3y3RBIyWB/ozFC/u0Dp1/Jhcj2l7nyHfJFvuwZKyDXNydKVK0H7ZFq0DDG62E+mDXT7SHcrL9r6a4gbz2ouV1aa66vf3nenb0pSRjje3htLsjrYCQv95HcXI+lFwzQ/K0oCJCFG+zuMmBqlmupqqPhphCVyG+hd153vIwMPieopqU0h15gT72m1mS9CJJR7Oru6WtJPv9WxlFVXNzfc5HmzI/fCF4OckD3GQ2vd0QO6f88etibECTui3Xii3QX/++7rNxCWKLbUo8hOApoW4YKN9+nvh/WA8hOFN59++GEkd9QJRum0YCDFHKMVJSViM2Dv4MB3TYPgnpsFfryiZ7Ie0DEJCWsO8KMSuiiayA+/BprRejN5dHlxMQLueJ1jZRFW82zJK1CfHD2gtGMgKTx1SjwpVtFoDZTww3KTXZdzRuMnTBB1pHA0PDzMPKMvb9ggJvHZO0Dp90zuygMl5oDuz85G4tSpWkADg4PNA6UafoGBqL1yRc3qTH48MVDyiwlGaXpRWCGgF8rLRaJP8uaOHXqZnp7rCgbvANuXmSkaEqN87g4IVmtrgyYKW3iEwBye59KRz5f8lJJEFhBoeDNtzHo6tOarF6s8f14cGHNFZq/nNa/vkyIi2ITg4G61MXT9/+769aJ/Xck7cIANl8sZz3MZd291Xxlvv232MFsL86MPPiiM5DsXdR/PLlhg1nD6FoEvZOo2pUVFbNMrr5htZ+wbB77AGARK/WxZt068+/Cdd4T+BwIDuwdSQkyN6XKJRo3kDL+GMPXRxcTQUFHvfLmCHT+Zz059W8AUlRdYW3t7tz1C6ofY0pX0tDQ2c/Ro1t7WJl7NiIsTdv197dqeAZUYpA8wJDHlwn99/nnW3t7B6n/+md1sbGQVikoBtvDsD6xFqew2swRGV/gJAwuytWU8fopXaa+9JkAmc7C9WkQiHB2fJkXkfubA0ojqSlNTMzuZf5oVl5QxcmNzn+Fovl+/erWWut3bt4v2EsgjX32l1tcrkNT4vY0b1cqy+WhKQqB0jX552TKD86m2tk64cmtrGyP3thTs0f371fq2bdok2hXy6UPyC/eYh8aMEf/jJwy9Y1MapSWzZ6uNI9eVRBphTcN/OntWDyy/BBJAVSoVS46JsQjoH1JThR5FaSlbuWgRo1Wcx3a1bmla0Wc/vWZTU0FybKxBsLTbSQwJUb+bm5DA+EcVWmBv3LjJ2WxlPxQUWASSBu5kbi77d3o6i/X0ZDx/1dIngaS70T4FKSmL8/Iy6Mb8AJuRi08KDxfvn5o1i+3NzNQyjgaEVnBL3PaNF19kU6Ki2O9SUhg/s1LrIXfVDHH9AlJSGj90qNpYzQWKrCEmd733HpvHWSVA/AsWNi062mKA1IZcVBcg6aaFR5qTVK9fQWoql5ih0CPFWU0K+TGIiJ20QM0YNYrFeHjosUlhgrInCv6SvtdXrNCb41IIoTrkyvcMpC67xDKtwvws1uCqK/2T36QxvlEWmRNPxk3WpZeZ/CJak8WnHnro3oOUwK5cvFjNhgS47Nw5syCMVaAB0AXY49ROg3pzN94We8njU6cyzWuEIP4ZTdzYsRg/ebK4+nN2cYHTnWLHvz3gC4u60FaLrh6pnD19Wt0n7UTOV1cZvpuw2LJ+qkhzNtLJyaKPkQ2twKEODsEUQ/vavD5j1JBhf1u1iuYj/5qkFg21Nc/wM9oM3Xp00+3j5yfY35Se3q/29PXg/U/q+y9F0R900+a0XgAAAABJRU5ErkJggg==");
background-size: 17px;
background-repeat: no-repeat;
border-radius: 10px;
display: inline-block;
height: 16px;
width: 16px;
float: right;
right: 15px;
position: relative;
top: -3px;
margin: 0;
padding: 0;
}
.tkSavedSpyBtn:hover {
cursor: pointer;
}

.tk_galaxySpy {
height: auto;
width: auto;
top: 200px;
left: 530px;
display: block;
}

.tk_galaxySpy .overlayDiv {
width: auto;
min-height: 300px;
max-height: none;
height: auto;
}
`);
})();