Commit d754db7

bryfry <bryon@fryer.io>
2024-10-05 05:56:57
init
prompt/fortress-building.txt
@@ -0,0 +1,1 @@
+<b>Build: Stone Basin<br>Duration: </b><b id="timer1" title="time1_793_type1_1">12 minutes 47 seconds</b> <a href="overview.php?s=5917lx&amp;p=b1&amp;a=cancel">Cancel</a><title>Inselkampf.eu</title>
prompt/fortress.txt
@@ -0,0 +1,174 @@
+<head>
+<script async src="https://fundingchoicesmessages.google.com/i/pub-7628664868568842?ers=1" nonce="5cvVgLtaph1NybsVBGE9rQ"></script><script nonce="5cvVgLtaph1NybsVBGE9rQ">(function() {function signalGooglefcPresent() {if (!window.frames['googlefcPresent']) {if (document.body) {const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe);} else {setTimeout(signalGooglefcPresent, 0);}}}signalGooglefcPresent();})();</script>
+
+
+<script>(function(){'use strict';function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
+function ca(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var da=ca(this);function k(a,b){if(b)a:{var c=da;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}}
+function ea(a){return a.raw=a}function m(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];if(b)return b.call(a);if("number"==typeof a.length)return{next:aa(a)};throw Error(String(a)+" is not an iterable or ArrayLike");}function fa(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}var ha="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},n;
+if("function"==typeof Object.setPrototypeOf)n=Object.setPrototypeOf;else{var q;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;q=ja.a;break a}catch(a){}q=!1}n=q?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=n;
+function r(a,b){a.prototype=ha(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.A=b.prototype}function la(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}k("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});
+k("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});k("Number.isInteger",function(a){return a?a:function(b){return Number.isFinite(b)?b===Math.floor(b):!1}});k("Number.isSafeInteger",function(a){return a?a:function(b){return Number.isInteger(b)&&Math.abs(b)<=Number.MAX_SAFE_INTEGER}});
+k("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var c=Math.floor(Math.abs(b));return 0>b?-c:c}});k("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});k("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var f=d[c];if(f===b||Object.is(f,b))return!0}return!1}});
+k("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(b,c||0)}});/*
+
+ Copyright The Closure Library Authors.
+ SPDX-License-Identifier: Apache-2.0
+*/
+var t=this||self;function v(a){return a};var w,x;a:{for(var ma=["CLOSURE_FLAGS"],y=t,z=0;z<ma.length;z++)if(y=y[ma[z]],null==y){x=null;break a}x=y}var na=x&&x[610401301];w=null!=na?na:!1;var A,oa=t.navigator;A=oa?oa.userAgentData||null:null;function B(a){return w?A?A.brands.some(function(b){return(b=b.brand)&&-1!=b.indexOf(a)}):!1:!1}function C(a){var b;a:{if(b=t.navigator)if(b=b.userAgent)break a;b=""}return-1!=b.indexOf(a)};function D(){return w?!!A&&0<A.brands.length:!1}function E(){return D()?B("Chromium"):(C("Chrome")||C("CriOS"))&&!(D()?0:C("Edge"))||C("Silk")};var pa=D()?!1:C("Trident")||C("MSIE");!C("Android")||E();E();C("Safari")&&(E()||(D()?0:C("Coast"))||(D()?0:C("Opera"))||(D()?0:C("Edge"))||(D()?B("Microsoft Edge"):C("Edg/"))||D()&&B("Opera"));var qa={},F=null;var ra="undefined"!==typeof Uint8Array,sa=!pa&&"function"===typeof btoa;function G(){return"function"===typeof BigInt};var H=0,I=0;function ta(a){var b=0>a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/4294967296);b&&(c=m(ua(c,a)),b=c.next().value,a=c.next().value,c=b);H=c>>>0;I=a>>>0}function va(a,b){b>>>=0;a>>>=0;if(2097151>=b)var c=""+(4294967296*b+a);else G()?c=""+(BigInt(b)<<BigInt(32)|BigInt(a)):(c=(a>>>24|b<<8)&16777215,b=b>>16&65535,a=(a&16777215)+6777216*c+6710656*b,c+=8147497*b,b*=2,1E7<=a&&(c+=Math.floor(a/1E7),a%=1E7),1E7<=c&&(b+=Math.floor(c/1E7),c%=1E7),c=b+wa(c)+wa(a));return c}
+function wa(a){a=String(a);return"0000000".slice(a.length)+a}function ua(a,b){b=~b;a?a=~a+1:b+=1;return[a,b]};var J;J="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol():void 0;var xa=J?function(a,b){a[J]|=b}:function(a,b){void 0!==a.g?a.g|=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}})},K=J?function(a){return a[J]|0}:function(a){return a.g|0},L=J?function(a){return a[J]}:function(a){return a.g},M=J?function(a,b){a[J]=b;return a}:function(a,b){void 0!==a.g?a.g=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}});return a};function ya(a,b){M(b,(a|0)&-14591)}function za(a,b){M(b,(a|34)&-14557)}
+function Aa(a){a=a>>14&1023;return 0===a?536870912:a};var N={},Ba={};function Ca(a){return!(!a||"object"!==typeof a||a.g!==Ba)}function Da(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}function P(a,b,c){if(!Array.isArray(a)||a.length)return!1;var d=K(a);if(d&1)return!0;if(!(b&&(Array.isArray(b)?b.includes(c):b.has(c))))return!1;M(a,d|1);return!0}Object.freeze(new function(){});Object.freeze(new function(){});var Ea=/^-?([1-9][0-9]*|0)(\.[0-9]+)?$/;var Q;function Fa(a,b){Q=b;a=new a(b);Q=void 0;return a}
+function R(a,b,c){null==a&&(a=Q);Q=void 0;if(null==a){var d=96;c?(a=[c],d|=512):a=[];b&&(d=d&-16760833|(b&1023)<<14)}else{if(!Array.isArray(a))throw Error();d=K(a);if(d&64)return a;d|=64;if(c&&(d|=512,c!==a[0]))throw Error();a:{c=a;var e=c.length;if(e){var f=e-1;if(Da(c[f])){d|=256;b=f-(+!!(d&512)-1);if(1024<=b)throw Error();d=d&-16760833|(b&1023)<<14;break a}}if(b){b=Math.max(b,e-(+!!(d&512)-1));if(1024<b)throw Error();d=d&-16760833|(b&1023)<<14}}}M(a,d);return a};function Ga(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "boolean":return a?1:0;case "object":if(a)if(Array.isArray(a)){if(P(a,void 0,0))return}else if(ra&&null!=a&&a instanceof Uint8Array){if(sa){for(var b="",c=0,d=a.length-10240;c<d;)b+=String.fromCharCode.apply(null,a.subarray(c,c+=10240));b+=String.fromCharCode.apply(null,c?a.subarray(c):a);a=btoa(b)}else{void 0===b&&(b=0);if(!F){F={};c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");d=["+/=",
+"+/","-_=","-_.","-_"];for(var e=0;5>e;e++){var f=c.concat(d[e].split(""));qa[e]=f;for(var g=0;g<f.length;g++){var h=f[g];void 0===F[h]&&(F[h]=g)}}}b=qa[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=f=0;f<a.length-2;f+=3){var l=a[f],p=a[f+1];h=a[f+2];g=b[l>>2];l=b[(l&3)<<4|p>>4];p=b[(p&15)<<2|h>>6];h=b[h&63];c[e++]=g+l+p+h}g=0;h=d;switch(a.length-f){case 2:g=a[f+1],h=b[(g&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|g>>4]+h+d}a=c.join("")}return a}}return a};function Ha(a,b,c){a=Array.prototype.slice.call(a);var d=a.length,e=b&256?a[d-1]:void 0;d+=e?-1:0;for(b=b&512?1:0;b<d;b++)a[b]=c(a[b]);if(e){b=a[b]={};for(var f in e)Object.prototype.hasOwnProperty.call(e,f)&&(b[f]=c(e[f]))}return a}function Ia(a,b,c,d,e){if(null!=a){if(Array.isArray(a))a=P(a,void 0,0)?void 0:e&&K(a)&2?a:Ja(a,b,c,void 0!==d,e);else if(Da(a)){var f={},g;for(g in a)Object.prototype.hasOwnProperty.call(a,g)&&(f[g]=Ia(a[g],b,c,d,e));a=f}else a=b(a,d);return a}}
+function Ja(a,b,c,d,e){var f=d||c?K(a):0;d=d?!!(f&32):void 0;a=Array.prototype.slice.call(a);for(var g=0;g<a.length;g++)a[g]=Ia(a[g],b,c,d,e);c&&c(f,a);return a}function Ka(a){return a.s===N?a.toJSON():Ga(a)};function La(a,b,c){c=void 0===c?za:c;if(null!=a){if(ra&&a instanceof Uint8Array)return b?a:new Uint8Array(a);if(Array.isArray(a)){var d=K(a);if(d&2)return a;b&&(b=0===d||!!(d&32)&&!(d&64||!(d&16)));return b?M(a,(d|34)&-12293):Ja(a,La,d&4?za:c,!0,!0)}a.s===N&&(c=a.h,d=L(c),a=d&2?a:Fa(a.constructor,Ma(c,d,!0)));return a}}function Ma(a,b,c){var d=c||b&2?za:ya,e=!!(b&32);a=Ha(a,b,function(f){return La(f,e,d)});xa(a,32|(c?2:0));return a};function Na(a,b){a=a.h;return Oa(a,L(a),b)}function Oa(a,b,c,d){if(-1===c)return null;if(c>=Aa(b)){if(b&256)return a[a.length-1][c]}else{var e=a.length;if(d&&b&256&&(d=a[e-1][c],null!=d))return d;b=c+(+!!(b&512)-1);if(b<e)return a[b]}}function Pa(a,b,c,d,e){var f=Aa(b);if(c>=f||e){var g=b;if(b&256)e=a[a.length-1];else{if(null==d)return;e=a[f+(+!!(b&512)-1)]={};g|=256}e[c]=d;c<f&&(a[c+(+!!(b&512)-1)]=void 0);g!==b&&M(a,g)}else a[c+(+!!(b&512)-1)]=d,b&256&&(a=a[a.length-1],c in a&&delete a[c])}
+function Qa(a,b){var c=Ra;var d=void 0===d?!1:d;var e=a.h;var f=L(e),g=Oa(e,f,b,d);if(null!=g&&"object"===typeof g&&g.s===N)c=g;else if(Array.isArray(g)){var h=K(g),l=h;0===l&&(l|=f&32);l|=f&2;l!==h&&M(g,l);c=new c(g)}else c=void 0;c!==g&&null!=c&&Pa(e,f,b,c,d);e=c;if(null==e)return e;a=a.h;f=L(a);f&2||(g=e,c=g.h,h=L(c),g=h&2?Fa(g.constructor,Ma(c,h,!1)):g,g!==e&&(e=g,Pa(a,f,b,e,d)));return e}function Sa(a,b){a=Na(a,b);return null==a||"string"===typeof a?a:void 0}
+function Ta(a,b){var c=void 0===c?0:c;a=Na(a,b);if(null!=a)if(b=typeof a,"number"===b?Number.isFinite(a):"string"!==b?0:Ea.test(a))if("number"===typeof a){if(a=Math.trunc(a),!Number.isSafeInteger(a)){ta(a);b=H;var d=I;if(a=d&2147483648)b=~b+1>>>0,d=~d>>>0,0==b&&(d=d+1>>>0);b=4294967296*d+(b>>>0);a=a?-b:b}}else if(b=Math.trunc(Number(a)),Number.isSafeInteger(b))a=String(b);else{if(b=a.indexOf("."),-1!==b&&(a=a.substring(0,b)),!("-"===a[0]?20>a.length||20===a.length&&-922337<Number(a.substring(0,7)):
+19>a.length||19===a.length&&922337>Number(a.substring(0,6)))){if(16>a.length)ta(Number(a));else if(G())a=BigInt(a),H=Number(a&BigInt(4294967295))>>>0,I=Number(a>>BigInt(32)&BigInt(4294967295));else{b=+("-"===a[0]);I=H=0;d=a.length;for(var e=b,f=(d-b)%6+b;f<=d;e=f,f+=6)e=Number(a.slice(e,f)),I*=1E6,H=1E6*H+e,4294967296<=H&&(I+=Math.trunc(H/4294967296),I>>>=0,H>>>=0);b&&(b=m(ua(H,I)),a=b.next().value,b=b.next().value,H=a,I=b)}a=H;b=I;b&2147483648?G()?a=""+(BigInt(b|0)<<BigInt(32)|BigInt(a>>>0)):(b=
+m(ua(a,b)),a=b.next().value,b=b.next().value,a="-"+va(a,b)):a=va(a,b)}}else a=void 0;return null!=a?a:c}function S(a,b){a=Sa(a,b);return null!=a?a:""};function T(a,b,c){this.h=R(a,b,c)}T.prototype.toJSON=function(){return Ua(this,Ja(this.h,Ka,void 0,void 0,!1),!0)};T.prototype.s=N;T.prototype.toString=function(){return Ua(this,this.h,!1).toString()};
+function Ua(a,b,c){var d=a.constructor.v,e=L(c?a.h:b);a=b.length;if(!a)return b;var f;if(Da(c=b[a-1])){a:{var g=c;var h={},l=!1,p;for(p in g)if(Object.prototype.hasOwnProperty.call(g,p)){var u=g[p];if(Array.isArray(u)){var jb=u;if(P(u,d,+p)||Ca(u)&&0===u.size)u=null;u!=jb&&(l=!0)}null!=u?h[p]=u:l=!0}if(l){for(var O in h){g=h;break a}g=null}}g!=c&&(f=!0);a--}for(p=+!!(e&512)-1;0<a;a--){O=a-1;c=b[O];O-=p;if(!(null==c||P(c,d,O)||Ca(c)&&0===c.size))break;var kb=!0}if(!f&&!kb)return b;b=Array.prototype.slice.call(b,
+0,a);g&&b.push(g);return b};function Va(a){return function(b){if(null==b||""==b)b=new a;else{b=JSON.parse(b);if(!Array.isArray(b))throw Error(void 0);xa(b,32);b=Fa(a,b)}return b}};function Wa(a){this.h=R(a)}r(Wa,T);var Xa=Va(Wa);var U;function V(a){this.g=a}V.prototype.toString=function(){return this.g+""};var Ya={};function Za(a){if(void 0===U){var b=null;var c=t.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:v,createScript:v,createScriptURL:v})}catch(d){t.console&&t.console.error(d.message)}U=b}else U=b}a=(b=U)?b.createScriptURL(a):a;return new V(a,Ya)};function $a(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)};function ab(a,b){b=String(b);"application/xhtml+xml"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)}function bb(a){this.g=a||t.document||document};/*
+
+ SPDX-License-Identifier: Apache-2.0
+*/
+function cb(a,b){a.src=b instanceof V&&b.constructor===V?b.g:"type_error:TrustedResourceUrl";var c,d;(c=(b=null==(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",c)};function db(a){a=void 0===a?document:a;return a.createElement("script")};function eb(a,b,c,d,e,f){try{var g=a.g,h=db(g);h.async=!0;cb(h,b);g.head.appendChild(h);h.addEventListener("load",function(){e();d&&g.head.removeChild(h)});h.addEventListener("error",function(){0<c?eb(a,b,c-1,d,e,f):(d&&g.head.removeChild(h),f())})}catch(l){f()}};var fb=t.atob("aHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaW1hZ2VzL2ljb25zL21hdGVyaWFsL3N5c3RlbS8xeC93YXJuaW5nX2FtYmVyXzI0ZHAucG5n"),gb=t.atob("WW91IGFyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGJlY2F1c2UgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlIGlzIGludGVyZmVyaW5nIHdpdGggdGhpcyBwYWdlLg=="),hb=t.atob("RGlzYWJsZSBhbnkgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlLCB0aGVuIHJlbG9hZCB0aGlzIHBhZ2Uu");function ib(a,b,c){this.i=a;this.u=b;this.o=c;this.g=null;this.j=[];this.m=!1;this.l=new bb(this.i)}
+function lb(a){if(a.i.body&&!a.m){var b=function(){mb(a);t.setTimeout(function(){nb(a,3)},50)};eb(a.l,a.u,2,!0,function(){t[a.o]||b()},b);a.m=!0}}
+function mb(a){for(var b=W(1,5),c=0;c<b;c++){var d=X(a);a.i.body.appendChild(d);a.j.push(d)}b=X(a);b.style.bottom="0";b.style.left="0";b.style.position="fixed";b.style.width=W(100,110).toString()+"%";b.style.zIndex=W(2147483544,2147483644).toString();b.style.backgroundColor=ob(249,259,242,252,219,229);b.style.boxShadow="0 0 12px #888";b.style.color=ob(0,10,0,10,0,10);b.style.display="flex";b.style.justifyContent="center";b.style.fontFamily="Roboto, Arial";c=X(a);c.style.width=W(80,85).toString()+
+"%";c.style.maxWidth=W(750,775).toString()+"px";c.style.margin="24px";c.style.display="flex";c.style.alignItems="flex-start";c.style.justifyContent="center";d=ab(a.l.g,"IMG");d.className=$a();d.src=fb;d.alt="Warning icon";d.style.height="24px";d.style.width="24px";d.style.paddingRight="16px";var e=X(a),f=X(a);f.style.fontWeight="bold";f.textContent=gb;var g=X(a);g.textContent=hb;Y(a,e,f);Y(a,e,g);Y(a,c,d);Y(a,c,e);Y(a,b,c);a.g=b;a.i.body.appendChild(a.g);b=W(1,5);for(c=0;c<b;c++)d=X(a),a.i.body.appendChild(d),
+a.j.push(d)}function Y(a,b,c){for(var d=W(1,5),e=0;e<d;e++){var f=X(a);b.appendChild(f)}b.appendChild(c);c=W(1,5);for(d=0;d<c;d++)e=X(a),b.appendChild(e)}function W(a,b){return Math.floor(a+Math.random()*(b-a))}function ob(a,b,c,d,e,f){return"rgb("+W(Math.max(a,0),Math.min(b,255)).toString()+","+W(Math.max(c,0),Math.min(d,255)).toString()+","+W(Math.max(e,0),Math.min(f,255)).toString()+")"}function X(a){a=ab(a.l.g,"DIV");a.className=$a();return a}
+function nb(a,b){0>=b||null!=a.g&&0!==a.g.offsetHeight&&0!==a.g.offsetWidth||(pb(a),mb(a),t.setTimeout(function(){nb(a,b-1)},50))}function pb(a){for(var b=m(a.j),c=b.next();!c.done;c=b.next())(c=c.value)&&c.parentNode&&c.parentNode.removeChild(c);a.j=[];(b=a.g)&&b.parentNode&&b.parentNode.removeChild(b);a.g=null};function qb(a,b,c,d,e){function f(l){document.body?g(document.body):0<l?t.setTimeout(function(){f(l-1)},e):b()}function g(l){l.appendChild(h);t.setTimeout(function(){h?(0!==h.offsetHeight&&0!==h.offsetWidth?b():a(),h.parentNode&&h.parentNode.removeChild(h)):a()},d)}var h=rb(c);f(3)}function rb(a){var b=document.createElement("div");b.className=a;b.style.width="1px";b.style.height="1px";b.style.position="absolute";b.style.left="-10000px";b.style.top="-10000px";b.style.zIndex="-10000";return b};function Ra(a){this.h=R(a)}r(Ra,T);function sb(a){this.h=R(a)}r(sb,T);var tb=Va(sb);function ub(a){var b=la.apply(1,arguments);if(0===b.length)return Za(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return Za(c)};function vb(a){if(!a)return null;a=Sa(a,4);var b;null===a||void 0===a?b=null:b=Za(a);return b};var wb=ea([""]),xb=ea([""]);function yb(a,b){this.m=a;this.o=new bb(a.document);this.g=b;this.j=S(this.g,1);this.u=vb(Qa(this.g,2))||ub(wb);this.i=!1;b=vb(Qa(this.g,13))||ub(xb);this.l=new ib(a.document,b,S(this.g,12))}yb.prototype.start=function(){zb(this)};
+function zb(a){Ab(a);eb(a.o,a.u,3,!1,function(){a:{var b=a.j;var c=t.btoa(b);if(c=t[c]){try{var d=Xa(t.atob(c))}catch(e){b=!1;break a}b=b===Sa(d,1)}else b=!1}b?Z(a,S(a.g,14)):(Z(a,S(a.g,8)),lb(a.l))},function(){qb(function(){Z(a,S(a.g,7));lb(a.l)},function(){return Z(a,S(a.g,6))},S(a.g,9),Ta(a.g,10),Ta(a.g,11))})}function Z(a,b){a.i||(a.i=!0,a=new a.m.XMLHttpRequest,a.open("GET",b,!0),a.send())}function Ab(a){var b=t.btoa(a.j);a.m[b]&&Z(a,S(a.g,5))};(function(a,b){t[a]=function(){var c=la.apply(0,arguments);t[a]=function(){};b.call.apply(b,[null].concat(c instanceof Array?c:fa(m(c))))}})("__h82AlnkH6D91__",function(a){"function"===typeof window.atob&&(new yb(window,tb(window.atob(a)))).start()});}).call(this);
+
+window.__h82AlnkH6D91__("WyJwdWItNzYyODY2NDg2ODU2ODg0MiIsW251bGwsbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9iL3B1Yi03NjI4NjY0ODY4NTY4ODQyIl0sbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9lbC9BR1NLV3hXSG5TdzRyX3duR2o0UW1PVklWUnNrajdHZUtkekNUV1RtLUpycFgxdDJfME9MdXAwa255Nnp2cEU3Z1dJbVpJZnFlSGF2UTBaZ1VfTS1LWlktbzgtSUdRXHUwMDNkXHUwMDNkP3RlXHUwMDNkVE9LRU5fRVhQT1NFRCIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFdXRFFLNWhrTE5xeUZmVGlzYU1JbHkzM2gxakJwbFlKa0cxdnZ5Rk11Nk9HbDB3dTU2cnA2aGM5dnFRcFBNUEFUbkM0eEJWSURaNUFILVpGcFVSTEtxSVFcdTAwM2RcdTAwM2Q/YWJcdTAwM2QxXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFhpZGJvei1KLTZuckZtLUVJUXhVNDJIektjVm9QX0JqQXdmZldQcV9UMkZ0VU5OZjBfWHctQkNheWV5S2JiYWlIWll6SHJXUXZIS3c2RlQzSXR5bFFyd3dcdTAwM2RcdTAwM2Q/YWJcdTAwM2QyXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFd5OWFKT2NtMVdqVDBFRVZIenpQZ25DY2lFMEM2S0dwVGJ2WHZiUEtWZ3Z5WXlzN2Zvd05ScjdOWW1DWHBDYUp5UE82WWJMaVk0Y2Uxekttb2FEZWRwc1FcdTAwM2RcdTAwM2Q/c2JmXHUwMDNkMiIsImRpdi1ncHQtYWQiLDIwLDEwMCwiY0hWaUxUYzJNamcyTmpRNE5qZzFOamc0TkRJXHUwMDNkIixbbnVsbCxudWxsLG51bGwsImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tLzBlbW4vZi9wL3B1Yi03NjI4NjY0ODY4NTY4ODQyLmpzP3VzcXBcdTAwM2RDQWMiXSwiaHR0cHM6Ly9mdW5kaW5nY2hvaWNlc21lc3NhZ2VzLmdvb2dsZS5jb20vZWwvQUdTS1d4VWF3ZllGNTgySW5LOGltUnBHaUtrQ1VVbUtmREtqNUpDTUk4Zmh0elFpemhvYkJwV01iUlJjWnhjNWs1VHRISHpXdl9jd3ZsMDNxSlgzWDhOSlJyeU9sQVx1MDAzZFx1MDAzZCJd");</script>
+
+
+
+
+
+
+
+
+</head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Inselkampf</title><link rel="icon" type="image/ico" href="data/icon.ico"> <link rel=stylesheet type=text/css href=data/schrift.css><title>inselkampf</title> 
+<script src="https://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-6066118-1";
+urchinTracker();
+</script>  
+<script type=text/javascript src=data/lib2.js></script><body onLoad=start()><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+    "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="de">
+<head>
+<title>Inselkampf Community Portal</title>
+<meta name="title" content="Inselkampf Community Portal">
+<meta name="description" content="Inselkampf ist ein kostenloses Onlinespiel. Sei Herrscher &uuml;ber eine Insel, baue Geb&auml;ude und Schiffe, bilde eine Armee aus und ziehe in den Kampf!">
+<meta name="robots" content="index, follow">
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="viewport" content="width=device-width, initial-scale=0.7" />
+<meta name="author" content="Michael Kleinert">
+<meta name="publisher" content="Michael Kleinert">
+<meta name="copyright" content="Michael Kleinert">
+<meta name="keywords"  lang="de" content="IN531K4MPF, Inselkampf, inselkampf.de, I3K, Seekampf, ik-seite.de, Inselkampf alternative, www.inselkampf.de, kostenlos,  Browsergame, ogame, online, Onlinespiel, Schiffe, Armee, Kampf, Insel, Kanonenkreuzer, Conquest 1401, Schiffe, Inseln, Armee, Kampf,  Steinewerfer ,Langbogensch&uuml;tzen, Lanzentr&auml;ger, Die St&auml;mme, Piratenkampf">
+<meta name="page-topic" content="Spiel">
+<table><tr><td valign=top>
+<style>
+#iVeLOaFDGlod {
+display: none;
+margin-bottom: 13px;
+padding: 80px 11px;
+background: #D30000;
+text-align: center;
+font-weight: bold;
+color: #fff;
+border-radius: 5px;
+}
+</style>
+
+<div id="iVeLOaFDGlod">
+  Adblock? it works fine!<br>
+  
+</div>
+
+<script src="/ad-blocker.js" type="text/javascript"></script>
+<script type="text/javascript">
+
+if(!document.getElementById('qTBNuUstKWeH')){
+  document.getElementById('iVeLOaFDGlod').style.display='block';
+}
+
+</script>
+
+
+
+30.09.24 00:17:14 | <a href=overview.php?s=3gpcfw&p=mehl>Mail</a> | <a href=overview.php?s=3gpcfw&p=simulator>Simulator</a> | <a href=http://ik-com.de/ target=_blank>Board</a> | <a href=# onClick=window.open('/en/help_eng.php','','toolbar=no,scrollbars=yes,width=420,height=420')>Help</a> | <a href=logout.php?s=3gpcfw>Logout</a><br>You <b>mod_a</b>, are ruler of the isle unbenannt (1:45:3*)<table width=400 border=1 cellspacing=0 cellpadding=3><tr><td width=33%><img src=data/r1.gif> 76</td><td width=33%><img src=data/r2.gif> 327</td><td><img src=data/r3.gif> 510</td></tr></table><br><TABLE cellSpacing=1 cellPadding=3 width=400 border=0><TR><TD><B><IMG src=data/b.gif> Fortress</B><BR>The fortress controls the construction of all buldings on your island. The more enlarged it is, the faster you can build and the more buildings are available</TD></TR></TABLE><p><table width=440 border=0 cellspacing=1 cellpadding=3><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b1>Fortress (level 1)</a>
+<br>Gold: 187 Stones: 150 Lumber: 112 Duration: 0:31:02</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b1><font color=red>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b2>Gold Pit (level 2)</a>
+<br>Gold: 140 Stones: 93 Lumber: 93 Duration: 0:25:52</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b2><font color=red>Upgrade to level 3</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b3>Stone Basin (level 1)</a>
+<br>Gold: 75 Stones: 75 Lumber: 75 Duration: 0:20:42</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b3><font color=green>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b4>Sawmill (level 1)</a>
+<br>Gold: 112 Stones: 87 Lumber: 75 Duration: 0:24:50</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b4><font color=red>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b6>Garrison (level 1)</a>
+<br>Gold: 150 Stones: 150 Lumber: 150 Duration: 0:28:59</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b6><font color=red>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b8>Warehouse (level 1)</a>
+<br>Gold: 112 Stones: 75 Lumber: 112 Duration: 0:24:50</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b8><font color=red>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b9>Barricade (level 1)</a>
+<br>Gold: 187 Stones: 250 Lumber: 37 Duration: 0:18:37</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b9><font color=red>Upgrade to level 2</a></font></td></tr><tr><td bgcolor=#ece9d8><img src=data/b.gif>
+<a href=overview.php?s=3gpcfw&p=info&b=b10>Graveyard</a>
+<br>Gold: 100 Stones: 100 Lumber: 100 Duration: 0:09:56</td>
+<td bgcolor=#ece9d8 width=80><a href=overview.php?s=3gpcfw&p=b1&b1_id=1276&a=b10><font color=red>Build</a></font></td></tr></table><title>Inselkampf.eu</title>
+<hr width=400 align=left><a href=overview.php?s=3gpcfw&p=main>Overview</a> | <a href=overview.php?s=3gpcfw&p=alliance>Alliance</a> | <a href=overview.php?s=3gpcfw&p=map>Map</a> | <a href=overview.php?s=3gpcfw&p=isles>Islands</a> | <a href=overview.php?s=3gpcfw&p=ranking>Ranking</a> | <a href=overview.php?s=3gpcfw&p=settings>Settings</a><br><br><table width=400><tr><td>0.0048</td><td with=100% align='right'>00:18:51</td></tr></table>
+<iframe src="https://www.facebook.com/plugins/like.php?href=http%3A%2F%2Finselkampf.eu&width=40&layout=standard&action=recommend&size=small&share=true&height=35&appId=2631297970220129" width="450" height="35" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe>
+
+
+
+<div style="margin: 0 auto; width: 468px; height: 60px;
+	background: transparent url(data/noblocku1.gif) no-repeat center center">
+
+<div style="margin: 0 auto; width: 468px; height: 60px;">
+<script type="text/javascript"><!--
+google_ad_client = "pub-7628664868568842";
+
+google_ad_slot = "3460578943";
+google_ad_width = 468;
+google_ad_height = 60;
+//-->
+</script>
+<script type="text/javascript"
+src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
+</script>
+</div>
+
+
+
+
+</td><td width=30>&nbsp;</td><td valign=top>
+
+
+
+
+<div style="margin: 0 auto; width: 120px; height: 600px;
+	background: transparent url(data/noblockgr.gif) no-repeat center center">
+
+	<script type="text/javascript"><!--
+google_ad_client = "pub-7628664868568842";
+google_ad_slot = "0976255197";
+google_ad_width = 160;
+google_ad_height = 600;
+//-->
+</script>
+<script type="text/javascript"
+src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
+</script>
+</div>
+</td>
+
+</tr></table>
prompt/logout.txt
@@ -0,0 +1,25 @@
+<br>
+
+
+Session abgelaufen oder ungรผltig! <a href="/">Hier</a> neu einloggen!<br>
+
+<br>
+
+Session expired or invalid! Login <a href="en/">here</a>!
+
+
+
+<br>
+<script type="text/javascript"><!--
+google_ad_client = "pub-7628664868568842";
+/* 728x90, Erstellt 27.10.08 Banner Portal oben */
+google_ad_slot = "3666688633";
+google_ad_width = 728;
+google_ad_height = 90;
+//-->
+</script>
+<script type="text/javascript" src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
+</script>
+<br>
+
+<iframe style="width: 0px; height: 0px; border: medium none; z-index: -1000; left: -1000px; top: -1000px; display: none;" name="googlefcPresent"></iframe>
prompt/overview.txt
@@ -0,0 +1,164 @@
+<head>
+<script async src="https://fundingchoicesmessages.google.com/i/pub-7628664868568842?ers=1" nonce="5cvVgLtaph1NybsVBGE9rQ"></script><script nonce="5cvVgLtaph1NybsVBGE9rQ">(function() {function signalGooglefcPresent() {if (!window.frames['googlefcPresent']) {if (document.body) {const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe);} else {setTimeout(signalGooglefcPresent, 0);}}}signalGooglefcPresent();})();</script>
+
+
+<script>(function(){'use strict';function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
+function ca(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var da=ca(this);function k(a,b){if(b)a:{var c=da;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}}
+function ea(a){return a.raw=a}function m(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];if(b)return b.call(a);if("number"==typeof a.length)return{next:aa(a)};throw Error(String(a)+" is not an iterable or ArrayLike");}function fa(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}var ha="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},n;
+if("function"==typeof Object.setPrototypeOf)n=Object.setPrototypeOf;else{var q;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;q=ja.a;break a}catch(a){}q=!1}n=q?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=n;
+function r(a,b){a.prototype=ha(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.A=b.prototype}function la(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}k("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});
+k("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});k("Number.isInteger",function(a){return a?a:function(b){return Number.isFinite(b)?b===Math.floor(b):!1}});k("Number.isSafeInteger",function(a){return a?a:function(b){return Number.isInteger(b)&&Math.abs(b)<=Number.MAX_SAFE_INTEGER}});
+k("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||Infinity===b||-Infinity===b||0===b)return b;var c=Math.floor(Math.abs(b));return 0>b?-c:c}});k("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});k("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var f=d[c];if(f===b||Object.is(f,b))return!0}return!1}});
+k("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(b,c||0)}});/*
+
+ Copyright The Closure Library Authors.
+ SPDX-License-Identifier: Apache-2.0
+*/
+var t=this||self;function v(a){return a};var w,x;a:{for(var ma=["CLOSURE_FLAGS"],y=t,z=0;z<ma.length;z++)if(y=y[ma[z]],null==y){x=null;break a}x=y}var na=x&&x[610401301];w=null!=na?na:!1;var A,oa=t.navigator;A=oa?oa.userAgentData||null:null;function B(a){return w?A?A.brands.some(function(b){return(b=b.brand)&&-1!=b.indexOf(a)}):!1:!1}function C(a){var b;a:{if(b=t.navigator)if(b=b.userAgent)break a;b=""}return-1!=b.indexOf(a)};function D(){return w?!!A&&0<A.brands.length:!1}function E(){return D()?B("Chromium"):(C("Chrome")||C("CriOS"))&&!(D()?0:C("Edge"))||C("Silk")};var pa=D()?!1:C("Trident")||C("MSIE");!C("Android")||E();E();C("Safari")&&(E()||(D()?0:C("Coast"))||(D()?0:C("Opera"))||(D()?0:C("Edge"))||(D()?B("Microsoft Edge"):C("Edg/"))||D()&&B("Opera"));var qa={},F=null;var ra="undefined"!==typeof Uint8Array,sa=!pa&&"function"===typeof btoa;function G(){return"function"===typeof BigInt};var H=0,I=0;function ta(a){var b=0>a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/4294967296);b&&(c=m(ua(c,a)),b=c.next().value,a=c.next().value,c=b);H=c>>>0;I=a>>>0}function va(a,b){b>>>=0;a>>>=0;if(2097151>=b)var c=""+(4294967296*b+a);else G()?c=""+(BigInt(b)<<BigInt(32)|BigInt(a)):(c=(a>>>24|b<<8)&16777215,b=b>>16&65535,a=(a&16777215)+6777216*c+6710656*b,c+=8147497*b,b*=2,1E7<=a&&(c+=Math.floor(a/1E7),a%=1E7),1E7<=c&&(b+=Math.floor(c/1E7),c%=1E7),c=b+wa(c)+wa(a));return c}
+function wa(a){a=String(a);return"0000000".slice(a.length)+a}function ua(a,b){b=~b;a?a=~a+1:b+=1;return[a,b]};var J;J="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol():void 0;var xa=J?function(a,b){a[J]|=b}:function(a,b){void 0!==a.g?a.g|=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}})},K=J?function(a){return a[J]|0}:function(a){return a.g|0},L=J?function(a){return a[J]}:function(a){return a.g},M=J?function(a,b){a[J]=b;return a}:function(a,b){void 0!==a.g?a.g=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}});return a};function ya(a,b){M(b,(a|0)&-14591)}function za(a,b){M(b,(a|34)&-14557)}
+function Aa(a){a=a>>14&1023;return 0===a?536870912:a};var N={},Ba={};function Ca(a){return!(!a||"object"!==typeof a||a.g!==Ba)}function Da(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}function P(a,b,c){if(!Array.isArray(a)||a.length)return!1;var d=K(a);if(d&1)return!0;if(!(b&&(Array.isArray(b)?b.includes(c):b.has(c))))return!1;M(a,d|1);return!0}Object.freeze(new function(){});Object.freeze(new function(){});var Ea=/^-?([1-9][0-9]*|0)(\.[0-9]+)?$/;var Q;function Fa(a,b){Q=b;a=new a(b);Q=void 0;return a}
+function R(a,b,c){null==a&&(a=Q);Q=void 0;if(null==a){var d=96;c?(a=[c],d|=512):a=[];b&&(d=d&-16760833|(b&1023)<<14)}else{if(!Array.isArray(a))throw Error();d=K(a);if(d&64)return a;d|=64;if(c&&(d|=512,c!==a[0]))throw Error();a:{c=a;var e=c.length;if(e){var f=e-1;if(Da(c[f])){d|=256;b=f-(+!!(d&512)-1);if(1024<=b)throw Error();d=d&-16760833|(b&1023)<<14;break a}}if(b){b=Math.max(b,e-(+!!(d&512)-1));if(1024<b)throw Error();d=d&-16760833|(b&1023)<<14}}}M(a,d);return a};function Ga(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "boolean":return a?1:0;case "object":if(a)if(Array.isArray(a)){if(P(a,void 0,0))return}else if(ra&&null!=a&&a instanceof Uint8Array){if(sa){for(var b="",c=0,d=a.length-10240;c<d;)b+=String.fromCharCode.apply(null,a.subarray(c,c+=10240));b+=String.fromCharCode.apply(null,c?a.subarray(c):a);a=btoa(b)}else{void 0===b&&(b=0);if(!F){F={};c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");d=["+/=",
+"+/","-_=","-_.","-_"];for(var e=0;5>e;e++){var f=c.concat(d[e].split(""));qa[e]=f;for(var g=0;g<f.length;g++){var h=f[g];void 0===F[h]&&(F[h]=g)}}}b=qa[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=f=0;f<a.length-2;f+=3){var l=a[f],p=a[f+1];h=a[f+2];g=b[l>>2];l=b[(l&3)<<4|p>>4];p=b[(p&15)<<2|h>>6];h=b[h&63];c[e++]=g+l+p+h}g=0;h=d;switch(a.length-f){case 2:g=a[f+1],h=b[(g&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|g>>4]+h+d}a=c.join("")}return a}}return a};function Ha(a,b,c){a=Array.prototype.slice.call(a);var d=a.length,e=b&256?a[d-1]:void 0;d+=e?-1:0;for(b=b&512?1:0;b<d;b++)a[b]=c(a[b]);if(e){b=a[b]={};for(var f in e)Object.prototype.hasOwnProperty.call(e,f)&&(b[f]=c(e[f]))}return a}function Ia(a,b,c,d,e){if(null!=a){if(Array.isArray(a))a=P(a,void 0,0)?void 0:e&&K(a)&2?a:Ja(a,b,c,void 0!==d,e);else if(Da(a)){var f={},g;for(g in a)Object.prototype.hasOwnProperty.call(a,g)&&(f[g]=Ia(a[g],b,c,d,e));a=f}else a=b(a,d);return a}}
+function Ja(a,b,c,d,e){var f=d||c?K(a):0;d=d?!!(f&32):void 0;a=Array.prototype.slice.call(a);for(var g=0;g<a.length;g++)a[g]=Ia(a[g],b,c,d,e);c&&c(f,a);return a}function Ka(a){return a.s===N?a.toJSON():Ga(a)};function La(a,b,c){c=void 0===c?za:c;if(null!=a){if(ra&&a instanceof Uint8Array)return b?a:new Uint8Array(a);if(Array.isArray(a)){var d=K(a);if(d&2)return a;b&&(b=0===d||!!(d&32)&&!(d&64||!(d&16)));return b?M(a,(d|34)&-12293):Ja(a,La,d&4?za:c,!0,!0)}a.s===N&&(c=a.h,d=L(c),a=d&2?a:Fa(a.constructor,Ma(c,d,!0)));return a}}function Ma(a,b,c){var d=c||b&2?za:ya,e=!!(b&32);a=Ha(a,b,function(f){return La(f,e,d)});xa(a,32|(c?2:0));return a};function Na(a,b){a=a.h;return Oa(a,L(a),b)}function Oa(a,b,c,d){if(-1===c)return null;if(c>=Aa(b)){if(b&256)return a[a.length-1][c]}else{var e=a.length;if(d&&b&256&&(d=a[e-1][c],null!=d))return d;b=c+(+!!(b&512)-1);if(b<e)return a[b]}}function Pa(a,b,c,d,e){var f=Aa(b);if(c>=f||e){var g=b;if(b&256)e=a[a.length-1];else{if(null==d)return;e=a[f+(+!!(b&512)-1)]={};g|=256}e[c]=d;c<f&&(a[c+(+!!(b&512)-1)]=void 0);g!==b&&M(a,g)}else a[c+(+!!(b&512)-1)]=d,b&256&&(a=a[a.length-1],c in a&&delete a[c])}
+function Qa(a,b){var c=Ra;var d=void 0===d?!1:d;var e=a.h;var f=L(e),g=Oa(e,f,b,d);if(null!=g&&"object"===typeof g&&g.s===N)c=g;else if(Array.isArray(g)){var h=K(g),l=h;0===l&&(l|=f&32);l|=f&2;l!==h&&M(g,l);c=new c(g)}else c=void 0;c!==g&&null!=c&&Pa(e,f,b,c,d);e=c;if(null==e)return e;a=a.h;f=L(a);f&2||(g=e,c=g.h,h=L(c),g=h&2?Fa(g.constructor,Ma(c,h,!1)):g,g!==e&&(e=g,Pa(a,f,b,e,d)));return e}function Sa(a,b){a=Na(a,b);return null==a||"string"===typeof a?a:void 0}
+function Ta(a,b){var c=void 0===c?0:c;a=Na(a,b);if(null!=a)if(b=typeof a,"number"===b?Number.isFinite(a):"string"!==b?0:Ea.test(a))if("number"===typeof a){if(a=Math.trunc(a),!Number.isSafeInteger(a)){ta(a);b=H;var d=I;if(a=d&2147483648)b=~b+1>>>0,d=~d>>>0,0==b&&(d=d+1>>>0);b=4294967296*d+(b>>>0);a=a?-b:b}}else if(b=Math.trunc(Number(a)),Number.isSafeInteger(b))a=String(b);else{if(b=a.indexOf("."),-1!==b&&(a=a.substring(0,b)),!("-"===a[0]?20>a.length||20===a.length&&-922337<Number(a.substring(0,7)):
+19>a.length||19===a.length&&922337>Number(a.substring(0,6)))){if(16>a.length)ta(Number(a));else if(G())a=BigInt(a),H=Number(a&BigInt(4294967295))>>>0,I=Number(a>>BigInt(32)&BigInt(4294967295));else{b=+("-"===a[0]);I=H=0;d=a.length;for(var e=b,f=(d-b)%6+b;f<=d;e=f,f+=6)e=Number(a.slice(e,f)),I*=1E6,H=1E6*H+e,4294967296<=H&&(I+=Math.trunc(H/4294967296),I>>>=0,H>>>=0);b&&(b=m(ua(H,I)),a=b.next().value,b=b.next().value,H=a,I=b)}a=H;b=I;b&2147483648?G()?a=""+(BigInt(b|0)<<BigInt(32)|BigInt(a>>>0)):(b=
+m(ua(a,b)),a=b.next().value,b=b.next().value,a="-"+va(a,b)):a=va(a,b)}}else a=void 0;return null!=a?a:c}function S(a,b){a=Sa(a,b);return null!=a?a:""};function T(a,b,c){this.h=R(a,b,c)}T.prototype.toJSON=function(){return Ua(this,Ja(this.h,Ka,void 0,void 0,!1),!0)};T.prototype.s=N;T.prototype.toString=function(){return Ua(this,this.h,!1).toString()};
+function Ua(a,b,c){var d=a.constructor.v,e=L(c?a.h:b);a=b.length;if(!a)return b;var f;if(Da(c=b[a-1])){a:{var g=c;var h={},l=!1,p;for(p in g)if(Object.prototype.hasOwnProperty.call(g,p)){var u=g[p];if(Array.isArray(u)){var jb=u;if(P(u,d,+p)||Ca(u)&&0===u.size)u=null;u!=jb&&(l=!0)}null!=u?h[p]=u:l=!0}if(l){for(var O in h){g=h;break a}g=null}}g!=c&&(f=!0);a--}for(p=+!!(e&512)-1;0<a;a--){O=a-1;c=b[O];O-=p;if(!(null==c||P(c,d,O)||Ca(c)&&0===c.size))break;var kb=!0}if(!f&&!kb)return b;b=Array.prototype.slice.call(b,
+0,a);g&&b.push(g);return b};function Va(a){return function(b){if(null==b||""==b)b=new a;else{b=JSON.parse(b);if(!Array.isArray(b))throw Error(void 0);xa(b,32);b=Fa(a,b)}return b}};function Wa(a){this.h=R(a)}r(Wa,T);var Xa=Va(Wa);var U;function V(a){this.g=a}V.prototype.toString=function(){return this.g+""};var Ya={};function Za(a){if(void 0===U){var b=null;var c=t.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:v,createScript:v,createScriptURL:v})}catch(d){t.console&&t.console.error(d.message)}U=b}else U=b}a=(b=U)?b.createScriptURL(a):a;return new V(a,Ya)};function $a(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)};function ab(a,b){b=String(b);"application/xhtml+xml"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)}function bb(a){this.g=a||t.document||document};/*
+
+ SPDX-License-Identifier: Apache-2.0
+*/
+function cb(a,b){a.src=b instanceof V&&b.constructor===V?b.g:"type_error:TrustedResourceUrl";var c,d;(c=(b=null==(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",c)};function db(a){a=void 0===a?document:a;return a.createElement("script")};function eb(a,b,c,d,e,f){try{var g=a.g,h=db(g);h.async=!0;cb(h,b);g.head.appendChild(h);h.addEventListener("load",function(){e();d&&g.head.removeChild(h)});h.addEventListener("error",function(){0<c?eb(a,b,c-1,d,e,f):(d&&g.head.removeChild(h),f())})}catch(l){f()}};var fb=t.atob("aHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaW1hZ2VzL2ljb25zL21hdGVyaWFsL3N5c3RlbS8xeC93YXJuaW5nX2FtYmVyXzI0ZHAucG5n"),gb=t.atob("WW91IGFyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGJlY2F1c2UgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlIGlzIGludGVyZmVyaW5nIHdpdGggdGhpcyBwYWdlLg=="),hb=t.atob("RGlzYWJsZSBhbnkgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlLCB0aGVuIHJlbG9hZCB0aGlzIHBhZ2Uu");function ib(a,b,c){this.i=a;this.u=b;this.o=c;this.g=null;this.j=[];this.m=!1;this.l=new bb(this.i)}
+function lb(a){if(a.i.body&&!a.m){var b=function(){mb(a);t.setTimeout(function(){nb(a,3)},50)};eb(a.l,a.u,2,!0,function(){t[a.o]||b()},b);a.m=!0}}
+function mb(a){for(var b=W(1,5),c=0;c<b;c++){var d=X(a);a.i.body.appendChild(d);a.j.push(d)}b=X(a);b.style.bottom="0";b.style.left="0";b.style.position="fixed";b.style.width=W(100,110).toString()+"%";b.style.zIndex=W(2147483544,2147483644).toString();b.style.backgroundColor=ob(249,259,242,252,219,229);b.style.boxShadow="0 0 12px #888";b.style.color=ob(0,10,0,10,0,10);b.style.display="flex";b.style.justifyContent="center";b.style.fontFamily="Roboto, Arial";c=X(a);c.style.width=W(80,85).toString()+
+"%";c.style.maxWidth=W(750,775).toString()+"px";c.style.margin="24px";c.style.display="flex";c.style.alignItems="flex-start";c.style.justifyContent="center";d=ab(a.l.g,"IMG");d.className=$a();d.src=fb;d.alt="Warning icon";d.style.height="24px";d.style.width="24px";d.style.paddingRight="16px";var e=X(a),f=X(a);f.style.fontWeight="bold";f.textContent=gb;var g=X(a);g.textContent=hb;Y(a,e,f);Y(a,e,g);Y(a,c,d);Y(a,c,e);Y(a,b,c);a.g=b;a.i.body.appendChild(a.g);b=W(1,5);for(c=0;c<b;c++)d=X(a),a.i.body.appendChild(d),
+a.j.push(d)}function Y(a,b,c){for(var d=W(1,5),e=0;e<d;e++){var f=X(a);b.appendChild(f)}b.appendChild(c);c=W(1,5);for(d=0;d<c;d++)e=X(a),b.appendChild(e)}function W(a,b){return Math.floor(a+Math.random()*(b-a))}function ob(a,b,c,d,e,f){return"rgb("+W(Math.max(a,0),Math.min(b,255)).toString()+","+W(Math.max(c,0),Math.min(d,255)).toString()+","+W(Math.max(e,0),Math.min(f,255)).toString()+")"}function X(a){a=ab(a.l.g,"DIV");a.className=$a();return a}
+function nb(a,b){0>=b||null!=a.g&&0!==a.g.offsetHeight&&0!==a.g.offsetWidth||(pb(a),mb(a),t.setTimeout(function(){nb(a,b-1)},50))}function pb(a){for(var b=m(a.j),c=b.next();!c.done;c=b.next())(c=c.value)&&c.parentNode&&c.parentNode.removeChild(c);a.j=[];(b=a.g)&&b.parentNode&&b.parentNode.removeChild(b);a.g=null};function qb(a,b,c,d,e){function f(l){document.body?g(document.body):0<l?t.setTimeout(function(){f(l-1)},e):b()}function g(l){l.appendChild(h);t.setTimeout(function(){h?(0!==h.offsetHeight&&0!==h.offsetWidth?b():a(),h.parentNode&&h.parentNode.removeChild(h)):a()},d)}var h=rb(c);f(3)}function rb(a){var b=document.createElement("div");b.className=a;b.style.width="1px";b.style.height="1px";b.style.position="absolute";b.style.left="-10000px";b.style.top="-10000px";b.style.zIndex="-10000";return b};function Ra(a){this.h=R(a)}r(Ra,T);function sb(a){this.h=R(a)}r(sb,T);var tb=Va(sb);function ub(a){var b=la.apply(1,arguments);if(0===b.length)return Za(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return Za(c)};function vb(a){if(!a)return null;a=Sa(a,4);var b;null===a||void 0===a?b=null:b=Za(a);return b};var wb=ea([""]),xb=ea([""]);function yb(a,b){this.m=a;this.o=new bb(a.document);this.g=b;this.j=S(this.g,1);this.u=vb(Qa(this.g,2))||ub(wb);this.i=!1;b=vb(Qa(this.g,13))||ub(xb);this.l=new ib(a.document,b,S(this.g,12))}yb.prototype.start=function(){zb(this)};
+function zb(a){Ab(a);eb(a.o,a.u,3,!1,function(){a:{var b=a.j;var c=t.btoa(b);if(c=t[c]){try{var d=Xa(t.atob(c))}catch(e){b=!1;break a}b=b===Sa(d,1)}else b=!1}b?Z(a,S(a.g,14)):(Z(a,S(a.g,8)),lb(a.l))},function(){qb(function(){Z(a,S(a.g,7));lb(a.l)},function(){return Z(a,S(a.g,6))},S(a.g,9),Ta(a.g,10),Ta(a.g,11))})}function Z(a,b){a.i||(a.i=!0,a=new a.m.XMLHttpRequest,a.open("GET",b,!0),a.send())}function Ab(a){var b=t.btoa(a.j);a.m[b]&&Z(a,S(a.g,5))};(function(a,b){t[a]=function(){var c=la.apply(0,arguments);t[a]=function(){};b.call.apply(b,[null].concat(c instanceof Array?c:fa(m(c))))}})("__h82AlnkH6D91__",function(a){"function"===typeof window.atob&&(new yb(window,tb(window.atob(a)))).start()});}).call(this);
+
+window.__h82AlnkH6D91__("WyJwdWItNzYyODY2NDg2ODU2ODg0MiIsW251bGwsbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9iL3B1Yi03NjI4NjY0ODY4NTY4ODQyIl0sbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9lbC9BR1NLV3hXSG5TdzRyX3duR2o0UW1PVklWUnNrajdHZUtkekNUV1RtLUpycFgxdDJfME9MdXAwa255Nnp2cEU3Z1dJbVpJZnFlSGF2UTBaZ1VfTS1LWlktbzgtSUdRXHUwMDNkXHUwMDNkP3RlXHUwMDNkVE9LRU5fRVhQT1NFRCIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFdXRFFLNWhrTE5xeUZmVGlzYU1JbHkzM2gxakJwbFlKa0cxdnZ5Rk11Nk9HbDB3dTU2cnA2aGM5dnFRcFBNUEFUbkM0eEJWSURaNUFILVpGcFVSTEtxSVFcdTAwM2RcdTAwM2Q/YWJcdTAwM2QxXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFhpZGJvei1KLTZuckZtLUVJUXhVNDJIektjVm9QX0JqQXdmZldQcV9UMkZ0VU5OZjBfWHctQkNheWV5S2JiYWlIWll6SHJXUXZIS3c2RlQzSXR5bFFyd3dcdTAwM2RcdTAwM2Q/YWJcdTAwM2QyXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFd5OWFKT2NtMVdqVDBFRVZIenpQZ25DY2lFMEM2S0dwVGJ2WHZiUEtWZ3Z5WXlzN2Zvd05ScjdOWW1DWHBDYUp5UE82WWJMaVk0Y2Uxekttb2FEZWRwc1FcdTAwM2RcdTAwM2Q/c2JmXHUwMDNkMiIsImRpdi1ncHQtYWQiLDIwLDEwMCwiY0hWaUxUYzJNamcyTmpRNE5qZzFOamc0TkRJXHUwMDNkIixbbnVsbCxudWxsLG51bGwsImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tLzBlbW4vZi9wL3B1Yi03NjI4NjY0ODY4NTY4ODQyLmpzP3VzcXBcdTAwM2RDQWMiXSwiaHR0cHM6Ly9mdW5kaW5nY2hvaWNlc21lc3NhZ2VzLmdvb2dsZS5jb20vZWwvQUdTS1d4VWF3ZllGNTgySW5LOGltUnBHaUtrQ1VVbUtmREtqNUpDTUk4Zmh0elFpemhvYkJwV01iUlJjWnhjNWs1VHRISHpXdl9jd3ZsMDNxSlgzWDhOSlJyeU9sQVx1MDAzZFx1MDAzZCJd");</script>
+
+
+
+
+
+
+
+
+</head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Inselkampf</title><link rel="icon" type="image/ico" href="data/icon.ico"> <link rel=stylesheet type=text/css href=data/schrift.css><title>inselkampf</title> 
+<script src="https://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-6066118-1";
+urchinTracker();
+</script>  
+<script type=text/javascript src=data/lib2.js></script><body onLoad=start()>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+    "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="de">
+<head>
+<title>Inselkampf Community Portal</title>
+<meta name="title" content="Inselkampf Community Portal">
+<meta name="description" content="Inselkampf ist ein kostenloses Onlinespiel. Sei Herrscher &uuml;ber eine Insel, baue Geb&auml;ude und Schiffe, bilde eine Armee aus und ziehe in den Kampf!">
+<meta name="robots" content="index, follow">
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="viewport" content="width=device-width, initial-scale=0.7" />
+<meta name="author" content="Michael Kleinert">
+<meta name="publisher" content="Michael Kleinert">
+<meta name="copyright" content="Michael Kleinert">
+<meta name="keywords"  lang="de" content="IN531K4MPF, Inselkampf, inselkampf.de, I3K, Seekampf, ik-seite.de, Inselkampf alternative, www.inselkampf.de, kostenlos,  Browsergame, ogame, online, Onlinespiel, Schiffe, Armee, Kampf, Insel, Kanonenkreuzer, Conquest 1401, Schiffe, Inseln, Armee, Kampf,  Steinewerfer ,Langbogensch&uuml;tzen, Lanzentr&auml;ger, Die St&auml;mme, Piratenkampf">
+<meta name="page-topic" content="Spiel">
+<table><tr><td valign=top>
+<style>
+#iVeLOaFDGlod {
+display: none;
+margin-bottom: 13px;
+padding: 80px 11px;
+background: #D30000;
+text-align: center;
+font-weight: bold;
+color: #fff;
+border-radius: 5px;
+}
+</style>
+
+<div id="iVeLOaFDGlod">
+  Adblock? it works fine!<br>
+  
+</div>
+
+<script src="/ad-blocker.js" type="text/javascript"></script>
+<script type="text/javascript">
+
+if(!document.getElementById('qTBNuUstKWeH')){
+  document.getElementById('iVeLOaFDGlod').style.display='block';
+}
+
+</script>
+
+
+
+30.09.24 03:59:38 | <a href=overview.php?s=5917lx&p=mehl>Mail</a> | <a href=overview.php?s=5917lx&p=simulator>Simulator</a> | <a href=http://ik-com.de/ target=_blank>Board</a> | <a href=# onClick=window.open('/en/help_eng.php','','toolbar=no,scrollbars=yes,width=420,height=420')>Help</a> | <a href=logout.php?s=5917lx>Logout</a><br>You <b>mod_a</b>, are ruler of the isle unbenannt (1:45:3*)<table width=400 border=1 cellspacing=0 cellpadding=3><tr><td width=33%><img src=data/r1.gif> 27</td><td width=33%><img src=data/r2.gif> 266</td><td><img src=data/r3.gif> 453</td></tr></table><br><TABLE cellSpacing=1 cellPadding=3 width=400 border=0><TBODY><TR><TD vAlign=top width=50%><B>Buildings</B><br><font color=#CCCCC><b>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=b1>Fortress (level 1)</a><br><img src=data/b.gif> <a href=overview.php?s=5917lx&p=info&b=b2>Gold Pit (level 2)</a><br>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=info&b=b3>Stone Basin (level 1)</a><br>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=info&b=b4>Sawmill (level 1)</a><br>
+<img src=data/b0.gif> Research Lab (level 0)<br>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=b6>Garrison (level 1)</a><br>
+<img src=data/b0.gif> Shipyard (level 0)<br>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=info&b=b8>Warehouse (level 1)</a><br>
+<img src=data/b.gif> <a href=overview.php?s=5917lx&p=info&b=b9>Barricade (level 1)</a><br>
+<img src=data/b100.gif> Graveyard (level 0)<br></b></font>
+</TD>
+
+<TD vAlign=top><B>Army</B><br><img src=data/u1.gif> <a href=overview.php?s=5917lx&p=info&u=u1>Stone Hurler (5)</a><br><br><B>Ships</B><br><br><br><B>Score</B><br>10</TD></TR><tr><td valign=top><b></b></td><td valign=top><b></b></td></tr></TABLE><br>
+<TABLE cellSpacing=1 cellPadding=3 width=400 border=0><TR><TD bgColor=#ece9d8><B>No fleets in sight!</B></TD></TR></TABLE><title>Inselkampf.eu</title>
+<hr width=400 align=left><a href=overview.php?s=5917lx&p=main>Overview</a> | <a href=overview.php?s=5917lx&p=alliance>Alliance</a> | <a href=overview.php?s=5917lx&p=map>Map</a> | <a href=overview.php?s=5917lx&p=isles>Islands</a> | <a href=overview.php?s=5917lx&p=ranking>Ranking</a> | <a href=overview.php?s=5917lx&p=settings>Settings</a><br><br><table width=400><tr><td>0.0043</td><td with=100% align='right'>04:00:25</td></tr></table>
+<iframe src="https://www.facebook.com/plugins/like.php?href=http%3A%2F%2Finselkampf.eu&width=40&layout=standard&action=recommend&size=small&share=true&height=35&appId=2631297970220129" width="450" height="35" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe>
+
+
+
+<div style="margin: 0 auto; width: 468px; height: 60px;
+	background: transparent url(data/noblocku1.gif) no-repeat center center">
+
+<div style="margin: 0 auto; width: 468px; height: 60px;">
+<script type="text/javascript"><!--
+google_ad_client = "pub-7628664868568842";
+
+google_ad_slot = "3460578943";
+google_ad_width = 468;
+google_ad_height = 60;
+//-->
+</script>
+<script type="text/javascript"
+src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
+</script>
+</div>
+
+
+
+
+</td><td width=30>&nbsp;</td><td valign=top>
+
+
+
+
+<div style="margin: 0 auto; width: 120px; height: 600px;
+	background: transparent url(data/noblockgr.gif) no-repeat center center">
+
+	<script type="text/javascript"><!--
+google_ad_client = "pub-7628664868568842";
+google_ad_slot = "0976255197";
+google_ad_width = 160;
+google_ad_height = 600;
+//-->
+</script>
+<script type="text/javascript"
+src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
+</script>
+</div>
+</td>
+
+</tr></table>
buildings.go
@@ -0,0 +1,159 @@
+package main
+
+import (
+	"fmt"
+	"math/rand/v2"
+	"strings"
+	"time"
+)
+
+const (
+	// building id's
+	_Fortress    = "b1"
+	_GoldPit     = "b2"
+	_StoneBasin  = "b3"
+	_Sawmill     = "b4"
+	_ResearchLab = "b5"
+	_Garrison    = "b6"
+	_Shipyard    = "b7"
+	_Warehouse   = "b8"
+	_Barricade   = "b9"
+	_Graveyard   = "b10"
+
+	// building names'
+	_FortressName    = "Fortress"
+	_GoldPitName     = "Gold Pit"
+	_StoneBasinName  = "Stone Basin"
+	_SawmillName     = "Sawmill"
+	_ResearchLabName = "Research Lab"
+	_GarrisonName    = "Garrison"
+	_ShipyardName    = "Shipyard"
+	_WarehouseName   = "Warehouse"
+	_BarricadeName   = "Barricade"
+	_GraveyardName   = "Graveyard"
+)
+
+type Building struct {
+	Name    string
+	Id      string
+	Level   int
+	Status  string
+	Upgrade *Resoruces
+}
+
+func (ic *islandClient) Upgrade(b *Building) error {
+
+	if b.Upgrade != nil {
+		var dg, ds, dl int
+		var deficit bool = false
+		if ic.Resources.Gold < b.Upgrade.Gold {
+			dg = b.Upgrade.Gold - ic.Resources.Gold
+			deficit = true
+		}
+		if ic.Resources.Stone < b.Upgrade.Stone {
+			ds = b.Upgrade.Stone - ic.Resources.Stone
+			deficit = true
+		}
+		if ic.Resources.Lumber < b.Upgrade.Lumber {
+			dl = b.Upgrade.Lumber - ic.Resources.Lumber
+			deficit = true
+		}
+		if deficit {
+			delayGold := time.Duration(
+				int64(dg)/int64(ic.Production.Gold),
+			) * time.Hour
+			delayStone := time.Duration(
+				int64(ds)/int64(ic.Production.Stone),
+			) * time.Hour
+			delayLumber := time.Duration(
+				int64(dl)/int64(ic.Production.Lumber),
+			) * time.Hour
+
+			max := delayGold
+			if delayStone > max {
+				max = delayStone
+			}
+			if delayLumber > max {
+				max = delayLumber
+			}
+
+			return NewNotEnoughResources(dg, ds, dl, max)
+		}
+	}
+
+	fmt.Printf("\n\t\tStarting upgrade: %s\n", b.Format())
+
+	params := page(_Fortress)
+	params[_action] = b.Id
+	randId := rand.IntN(1000)
+	params["b1_id"] = fmt.Sprintf("%04d", randId)
+	bodyBytes, err := ic.overview(params)
+	if err != nil {
+		return fmt.Errorf("failed to upgrade building=%s: %w", b.Name, err)
+	}
+	resourcesMsg := "Gold, stones or wood not sufficient!"
+	if strings.Contains(string(bodyBytes), resourcesMsg) {
+		return fmt.Errorf(
+			"failed to upgrade building=%s unexpected resource deficit",
+			b.Name)
+	}
+
+	return nil
+}
+
+func nameToBuilding(name string) *Building {
+	switch name {
+	case _FortressName:
+		return &Building{
+			Name: _FortressName,
+			Id:   _Fortress,
+		}
+	case _GoldPitName:
+		return &Building{
+			Name: _GoldPitName,
+			Id:   _GoldPit,
+		}
+	case _StoneBasinName:
+		return &Building{
+			Name: _StoneBasinName,
+			Id:   _StoneBasin,
+		}
+	case _SawmillName:
+		return &Building{
+			Name: _SawmillName,
+			Id:   _Sawmill,
+		}
+	case _ResearchLabName:
+		return &Building{
+			Name: _ResearchLabName,
+			Id:   _ResearchLab,
+		}
+	case _GarrisonName:
+		return &Building{
+			Name: _GarrisonName,
+			Id:   _Garrison,
+		}
+	case _ShipyardName:
+		return &Building{
+			Name: _ShipyardName,
+			Id:   _Shipyard,
+		}
+	case _WarehouseName:
+		return &Building{
+			Name: _WarehouseName,
+			Id:   _Warehouse,
+		}
+	case _BarricadeName:
+		return &Building{
+			Name: _BarricadeName,
+			Id:   _Barricade,
+		}
+	case _GraveyardName:
+		return &Building{
+			Name: _GraveyardName,
+			Id:   _Graveyard,
+		}
+	default:
+		return nil
+	}
+}
go.mod
@@ -0,0 +1,12 @@
+module github.com/bryfry/go-island
+
+go 1.23
+
+toolchain go1.23.1
+
+require (
+	github.com/PuerkitoBio/goquery v1.10.0 // indirect
+	github.com/andybalholm/cascadia v1.3.2 // indirect
+	github.com/sanity-io/litter v1.5.5 // indirect
+	golang.org/x/net v0.29.0 // indirect
+)
go.sum
@@ -0,0 +1,45 @@
+github.com/PuerkitoBio/goquery v1.10.0 h1:6fiXdLuUvYs2OJSvNRqlNPoBm6YABE226xrbavY5Wv4=
+github.com/PuerkitoBio/goquery v1.10.0/go.mod h1:TjZZl68Q3eGHNBA8CWaxAN7rOU1EbDz3CWuolcO5Yu4=
+github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
+github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
+github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo=
+github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
+github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
+golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
+golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
html.go
@@ -0,0 +1,243 @@
+package main
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"net/url"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/PuerkitoBio/goquery"
+	"golang.org/x/net/html"
+)
+
+var (
+	ErrUpgradeInProgress    = errors.New("upgrade in progress")
+	ErrUpgradeNotInProgress = errors.New("upgrade not in progress")
+	ErrNoProductionFound    = errors.New("no production found")
+)
+
+func loggedOut(b []byte) bool {
+	if bytes.Contains(b, []byte("Session expired or invalid!")) {
+		return true
+	}
+	return false
+}
+
+func findSessionID(n *html.Node) string {
+	if n.Type == html.ElementNode && n.Data == "a" {
+		for _, attr := range n.Attr {
+			if attr.Key == "href" && strings.Contains(attr.Val, "s=") {
+				parts := strings.Split(attr.Val, "s=")
+				if len(parts) > 1 {
+					sessionID := strings.Split(parts[1], "&")[0] // Split by '&' to handle additional parameters
+					return sessionID
+				}
+			}
+		}
+	}
+	for c := n.FirstChild; c != nil; c = c.NextSibling {
+		if sessionID := findSessionID(c); sessionID != "" {
+			return sessionID
+		}
+	}
+	return ""
+}
+
+func findResources(n *html.Node) *Resoruces {
+	r := &Resoruces{}
+	var extractValue func(*html.Node)
+	extractValue = func(n *html.Node) {
+		if n.Type == html.ElementNode && n.Data == "td" {
+			for c := n.FirstChild; c != nil; c = c.NextSibling {
+				if c.Type == html.TextNode &&
+					c.PrevSibling != nil &&
+					c.PrevSibling.Type == html.ElementNode &&
+					c.PrevSibling.Data == "img" {
+
+					switch c.PrevSibling.Attr[0].Val {
+					case "data/r1.gif":
+						trim := strings.TrimSpace(c.Data)
+						r.Gold, _ = strconv.Atoi(trim)
+					case "data/r2.gif":
+						trim := strings.TrimSpace(c.Data)
+						r.Stone, _ = strconv.Atoi(trim)
+					case "data/r3.gif":
+						trim := strings.TrimSpace(c.Data)
+						r.Lumber, _ = strconv.Atoi(trim)
+					}
+				}
+			}
+		}
+		for c := n.FirstChild; c != nil; c = c.NextSibling {
+			extractValue(c)
+		}
+	}
+	extractValue(n)
+	return r
+}
+
+func findProduction(b []byte) (int, error) {
+	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(b))
+	if err != nil {
+		return 0, fmt.Errorf("failed to parse mine page: %w", err)
+	}
+	var found = false
+	var unitsPerHour int = 0
+
+	doc.Find("tr td b").Each(func(index int, item *goquery.Selection) {
+		if !strings.Contains(item.Text(), "Amount delivered per hour") {
+			return
+		}
+		unitsString := strings.TrimSpace(strings.Split(item.Text(), ":")[1])
+		unitsSplit := strings.Split(unitsString, " ")[0]
+		units, err := strconv.Atoi(unitsSplit)
+		if err == nil {
+			unitsPerHour = units
+		}
+		found = true
+		return
+	})
+
+	if !found {
+		return 0, ErrNoProductionFound
+	}
+	return unitsPerHour, nil
+}
+
+func findBuildings(b []byte) (map[string]*Building, error) {
+
+	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(b))
+	if err != nil {
+		return nil, fmt.Errorf("failed to parse overview page: %w", err)
+	}
+
+	buildings := make(map[string]*Building)
+	doc.Find("td font b").Each(func(index int, item *goquery.Selection) {
+		htmlContent, _ := item.Html()
+		parts := strings.Split(htmlContent, "<br/>")
+		for _, part := range parts {
+			partDoc, err := goquery.NewDocumentFromReader(
+				strings.NewReader(part))
+			if err != nil {
+				return
+			}
+			buildingLine := partDoc.Text()
+			buildingLine = strings.TrimSpace(buildingLine)
+			if buildingLine == "" {
+				return
+			}
+			bs := strings.Split(buildingLine, "(")
+			if len(bs) != 2 {
+				return
+			}
+			building := nameToBuilding(strings.TrimSpace(bs[0]))
+			level := strings.Split(bs[1], " ")[1]
+			level = strings.TrimSuffix(level, ")")
+			building.Level, _ = strconv.Atoi(level)
+			buildings[building.Id] = building
+		}
+	})
+
+	return buildings, nil
+}
+
+func currentBuildingUpgrade(b []byte) (*Building, error) {
+	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(b))
+	if err != nil {
+		return nil, fmt.Errorf("failed to parse fortress page: %w", err)
+	}
+
+	// Look for the timer first
+	timer := doc.Find("b#timer1")
+	timerTitle := doc.Find("b#timer1").AttrOr("title", "")
+	if timerTitle == "" {
+		return nil, ErrUpgradeNotInProgress
+	}
+	timerTitleSplit := strings.Split(timerTitle, "_")
+	if len(timerTitleSplit) != 3 {
+		fmt.Errorf("failed to parse timer: %s", timer)
+	}
+	remaining, _ := strconv.Atoi(timerTitleSplit[1])
+	remainingDuration := time.Second * time.Duration(remaining)
+	buildText := timer.Prev().Text()
+	buildText = strings.TrimPrefix(buildText, "Build: ")
+	buildText = strings.TrimSuffix(buildText, "Duration: ")
+	building := nameToBuilding(buildText)
+	building.Upgrade = &Resoruces{Time: remainingDuration}
+
+	return building, nil
+}
+
+func findBuildingUpgrades(b []byte) ([]Building, error) {
+
+	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(b))
+	if err != nil {
+		return nil, fmt.Errorf("failed to parse fortress page: %w", err)
+	}
+
+	timer := doc.Find("b#timer1").AttrOr("title", "")
+	if timer != "" {
+		return nil, ErrUpgradeInProgress
+	}
+
+	// Iterate through each table row
+	var buildings = []Building{}
+	table := doc.Find("table")
+	row := table.Find("tr")
+	row.Each(func(i int, s *goquery.Selection) {
+		var building Building = Building{Upgrade: &Resoruces{}}
+		s.Find("td").Each(func(j int, td *goquery.Selection) {
+			if td != nil {
+				_, exists := td.Attr("bgcolor")
+				if !exists {
+					return
+				}
+				a := td.Find("a").Text()
+				if a == "" || !strings.Contains(a, "(") {
+					return
+				}
+				name := strings.Split(a, "(")[0]
+				building.Name = strings.TrimSpace(name)
+				levelText := strings.Split(a, "(")[1]
+				levelText = strings.TrimSuffix(levelText, ")")
+				level, _ := strconv.Atoi(strings.Fields(levelText)[1])
+				building.Level = level
+
+				resourcesText := td.Text()
+				resourcesText = resourcesText[strings.Index(resourcesText, "Gold:"):] // Get substring starting with "Gold: "
+				resources := strings.Fields(resourcesText)
+				building.Upgrade.Gold, _ = strconv.Atoi(resources[1])
+				building.Upgrade.Stone, _ = strconv.Atoi(resources[3])
+				building.Upgrade.Lumber, _ = strconv.Atoi(resources[5])
+				building.Upgrade.Time, _ = parseDuration(resources[7])
+				//				fmt.Println(building.Name, resources)
+
+				// Extract id from URL
+				foundURL, _ := td.Find("a").Attr("href")
+				u, _ := url.Parse(foundURL)
+				if u.Query().Has("b") {
+					building.Id = u.Query().Get("b")
+				}
+			}
+		})
+		if building.Name != "" {
+			buildings = append(buildings, building)
+		}
+	})
+	return buildings, nil
+}
+
+func parseDuration(input string) (time.Duration, error) {
+	var hours, minutes, seconds int
+	_, err := fmt.Sscanf(input, "%d:%d:%d", &hours, &minutes, &seconds)
+	if err != nil {
+		return 0, err
+	}
+	duration := time.Duration(hours)*time.Hour +
+		time.Duration(minutes)*time.Minute +
+		time.Duration(seconds)*time.Second
+	return duration, nil
+}
island.go
@@ -0,0 +1,87 @@
+package main
+
+import (
+	"fmt"
+	"strings"
+	"time"
+)
+
+const (
+	_nerdGold   = '$'
+	_nerdStone  = '๏†ฒ'
+	_nerdLumber = '๏†ป'
+	_nerdTime   = '๓ฑ‘†'
+)
+
+func (b *Building) Format() string {
+	if b.Upgrade == nil {
+		return fmt.Sprintf("%12s [% 2d]",
+			b.Name, b.Level)
+	}
+	if b.Status != "" {
+		return fmt.Sprintf("%12s [% 2d] .. %s %c %s",
+			b.Name, b.Level, b.Status,
+			_nerdTime, b.Upgrade.Time.String())
+	}
+	return fmt.Sprintf("%12s [% 2d] .. %c% 4d %c% 4d %c% 4d %c %s",
+		b.Name, b.Level,
+		_nerdGold, b.Upgrade.Gold,
+		_nerdStone, b.Upgrade.Stone,
+		_nerdLumber, b.Upgrade.Lumber,
+		_nerdTime, b.Upgrade.Time.String())
+}
+
+func (ic *islandClient) FormatResources() string {
+	return ic.Resources.String()
+	//return fmt.Sprintf("%c% 4d %c% 4d %c% 4d",
+	//	_nerdGold, ic.Resources.Gold,
+	//	_nerdStone, ic.Resources.Stone,
+	//	_nerdLumber, ic.Resources.Lumber)
+}
+
+func (ic *islandClient) FormatProduction() string {
+	return ic.Production.String() + " /hour"
+	//return fmt.Sprintf("%c% 4d %c% 4d %c% 4d /hour",
+	//	_nerdGold, ic.Production.Gold,
+	//	_nerdStone, ic.Production.Stone,
+	//	_nerdLumber, ic.Production.Lumber)
+}
+
+func (ic *islandClient) FortressUpgrading() (bool, time.Duration) {
+	for _, b := range ic.Buildings {
+		if b.Status != "" {
+			return true, b.Upgrade.Time
+		}
+	}
+	return false, 0
+}
+
+func (ic *islandClient) FormatFortressStatus() string {
+	status := "idle"
+	for _, b := range ic.Buildings {
+		if b.Status != "" {
+			status = b.Format()
+		}
+	}
+	return status
+}
+
+func (ic *islandClient) Format() string {
+	out := strings.Builder{}
+	out.WriteString("user: " + ic.User + "\n")
+	out.WriteString(fmt.Sprintf("server: %d\n", ic.Server))
+	out.WriteString(fmt.Sprintf("resources:\t %s\n", ic.FormatResources()))
+	out.WriteString(fmt.Sprintf("production:\t %s\n", ic.FormatProduction()))
+	out.WriteString("buildings:\n")
+
+	for i := 1; i <= 10; i++ {
+		if b, ok := ic.Buildings[fmt.Sprintf("b%d", i)]; ok {
+			out.WriteString("\t" + b.Format() + "\n")
+		}
+	}
+	return out.String()
+}
+
+func (ic *islandClient) Status() string {
+	return fmt.Sprintf("%s - %s", ic.FormatResources(), ic.FormatFortressStatus())
+}
main.go
@@ -0,0 +1,175 @@
+package main
+
+import (
+	"errors"
+	"fmt"
+	"math/rand/v2"
+	"net/http"
+	"net/http/cookiejar"
+	"time"
+)
+
+type islandClient struct {
+	client    *http.Client
+	password  string
+	sessionId string
+
+	Server     int
+	User       string
+	Resources  *Resoruces
+	Buildings  map[string]*Building
+	Production *Resoruces
+}
+
+const (
+	_baseURL = "https://www.ik-seite.de"
+)
+
+func NewIslandClient(server int, user, password string) (*islandClient, error) {
+
+	// Create a cookie jar to store cookies
+	jar, _ := cookiejar.New(nil)
+
+	// Initialize a new HTTP client with the cookie jar
+	client := &http.Client{
+		Jar: jar,
+	}
+
+	ic := &islandClient{
+		Server:   server,
+		User:     user,
+		password: password,
+		client:   client,
+	}
+	return ic, nil
+}
+
+func main() {
+	//ic, err := NewIslandClient(16, "bob", "9kq143")
+	ic, err := NewIslandClient(16, "mod_a", "7xbej8")
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	err = ic.Login()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	err = ic.Overview()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	err = ic.Fortress()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	err = ic.UpdateProduction()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	fmt.Println(ic.Format())
+
+	sleep := 0 * time.Second
+	minSleep := 60 * time.Minute
+	for {
+		if sleep != 0 {
+			fmt.Printf(" .. Sleeping: %s", sleep.String())
+			time.Sleep(sleep)
+		}
+
+		ic.Overview()
+		ic.Fortress()
+		fmt.Println()
+		fmt.Printf(ic.Status())
+
+		active, remaining := ic.FortressUpgrading()
+		if active {
+			randRound := time.Duration(rand.IntN(30)) * time.Second
+			halfTime := time.Duration(remaining / 2).Round(randRound)
+			sleep = halfTime
+			if halfTime < minSleep {
+				sleep = minSleep
+			}
+			continue
+		}
+
+		gold := ic.Buildings[_GoldPit]
+		stone := ic.Buildings[_StoneBasin]
+		lumber := ic.Buildings[_Sawmill]
+		if gold.Level < 5 {
+			err = ic.Upgrade(gold)
+			if err != nil {
+				var deficitError *ErrNotEnoughResources
+				if errors.As(err, &deficitError) {
+					fmt.Printf(" .. %s\n%s - deficit .. %s delay",
+						gold.Name,
+						deficitError.Deficit.String(),
+						deficitError.Delay.String(),
+					)
+					sleep = max(deficitError.Delay/2, minSleep)
+					continue
+				}
+				fmt.Println("ERROR:", err)
+			}
+			sleep = minSleep
+			continue
+		}
+		if stone.Level < 5 {
+			err = ic.Upgrade(stone)
+			if err != nil {
+				var deficitError *ErrNotEnoughResources
+				if errors.As(err, &deficitError) {
+					fmt.Printf(" .. %s\n%s - deficit .. %s delay",
+						stone.Name,
+						deficitError.Deficit.String(),
+						deficitError.Delay.String(),
+					)
+					sleep = max(deficitError.Delay/2, minSleep)
+					continue
+				}
+				fmt.Println("ERROR:", err)
+			}
+			sleep = minSleep
+			continue
+		}
+		if lumber.Level < 5 {
+			err = ic.Upgrade(lumber)
+			if err != nil {
+				var deficitError *ErrNotEnoughResources
+				if errors.As(err, &deficitError) {
+					fmt.Printf(" .. %s\n%s - deficit .. %s delay",
+						lumber.Name,
+						deficitError.Deficit.String(),
+						deficitError.Delay.String(),
+					)
+					sleep = max(deficitError.Delay/2, minSleep)
+					continue
+				}
+				fmt.Println("ERROR:", err)
+			}
+			sleep = minSleep
+			continue
+		}
+		//err = ic.Upgrade(ic.Buildings[_StoneBasin])
+		//err = ic.Upgrade(ic.Buildings[_Sawmill])
+
+	}
+
+	//err = ic.Upgrade(ic.Buildings[_Fortress])
+	//if err != nil {
+	//	fmt.Println(err)
+	//}
+
+	//err = ic.Upgrade(ic.Buildings[_StoneBasin])
+	//fmt.Println(err)
+
+}
page.go
@@ -0,0 +1,17 @@
+package main
+
+const (
+	_page     = "p"
+	_action   = "a"
+	_building = "b"
+
+	// pages
+	_info = "info"
+	_main = "main"
+)
+
+func page(p string) map[string]string {
+	return map[string]string{
+		_page: p,
+	}
+}
req.go
@@ -0,0 +1,233 @@
+package main
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+
+	"golang.org/x/net/html"
+)
+
+const (
+	_noAction = ""
+)
+
+func (ic *islandClient) overview(params map[string]string) ([]byte, error) {
+
+	overviewURL := fmt.Sprintf("%s/s_%d/overview.php", _baseURL, ic.Server)
+	parsedURL, err := url.Parse(overviewURL)
+	if err != nil {
+		return nil, fmt.Errorf("failed creating overview url: %w",
+			err)
+	}
+
+	q := parsedURL.Query()
+	q.Add("s", ic.sessionId)
+	for k, v := range params {
+		q.Add(k, v)
+	}
+	parsedURL.RawQuery = q.Encode()
+	//fmt.Println(q.Encode())
+	urlString := parsedURL.String()
+
+	req, err := http.NewRequest("GET", urlString, nil)
+	if err != nil {
+		return nil, fmt.Errorf("failed creating request page=%s: %w",
+			urlString, err)
+	}
+	req = addHeaders(req)
+
+	resp, err := ic.client.Do(req)
+	if err != nil {
+		return nil, fmt.Errorf("failed requesting page=%s: %w",
+			urlString, err)
+	}
+	defer resp.Body.Close()
+
+	bodyBytes, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, fmt.Errorf("failed to read resp bytes page=%s: %w",
+			urlString, err)
+	}
+
+	if loggedOut(bodyBytes) {
+		ic.Login()
+		return ic.overview(params)
+	}
+	return bodyBytes, nil
+}
+
+func (ic *islandClient) Fortress() error {
+	bodyBytes, err := ic.overview(page(_Fortress))
+	if err != nil {
+		return err
+	}
+
+	upgrading, err := currentBuildingUpgrade(bodyBytes)
+	if err != nil && !errors.Is(err, ErrUpgradeNotInProgress) {
+		return fmt.Errorf("failed to query upgrade status: %w", err)
+	}
+	if upgrading != nil {
+		b, buildingExists := ic.Buildings[upgrading.Id]
+		if buildingExists {
+			if b.Upgrade == nil {
+				b.Upgrade = &Resoruces{}
+			}
+			b.Upgrade.Time = upgrading.Upgrade.Time
+			b.Status = "Upgrading"
+		}
+		return nil
+	}
+
+	buildings, err := findBuildingUpgrades(bodyBytes)
+	if err != nil {
+		return err
+	}
+	for _, b := range buildings {
+		_, buildingExists := ic.Buildings[b.Id]
+		if buildingExists {
+			ic.Buildings[b.Id].Upgrade = b.Upgrade
+		}
+
+	}
+	return nil
+}
+
+func (ic *islandClient) UpdateProduction() error {
+
+	production := &Resoruces{}
+
+	gold := page(_info)
+	gold[_building] = _GoldPit
+	goldBody, err := ic.overview(gold)
+	if err != nil {
+		return err
+	}
+	production.Gold, err = findProduction(goldBody)
+	if err != nil {
+		return fmt.Errorf("failed to find gold production rate: %w", err)
+	}
+
+	stone := page(_info)
+	stone[_building] = _StoneBasin
+	stoneBody, err := ic.overview(stone)
+	if err != nil {
+		return err
+	}
+	production.Stone, err = findProduction(stoneBody)
+	if err != nil {
+		return fmt.Errorf("failed to find stone production rate: %w", err)
+	}
+
+	lumber := page(_info)
+	lumber[_building] = _Sawmill
+	lumberBody, err := ic.overview(lumber)
+	if err != nil {
+		return err
+	}
+	production.Lumber, err = findProduction(lumberBody)
+	if err != nil {
+		return fmt.Errorf("failed to find stone production rate: %w", err)
+	}
+
+	ic.Production = production
+	return nil
+
+}
+
+func (ic *islandClient) Overview() error {
+
+	bodyBytes, err := ic.overview(page(_main))
+	if err != nil {
+		return err
+	}
+
+	overviewPage, err := html.Parse(bytes.NewReader(bodyBytes))
+	if err != nil {
+		return fmt.Errorf("failed to parse overview html: %w", err)
+	}
+
+	resources := findResources(overviewPage)
+	ic.Resources = resources
+
+	ic.Buildings, err = findBuildings(bodyBytes)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (ic *islandClient) Login() error {
+
+	// Form data using the url.Values type
+	formData := url.Values{
+		"lang":   {"en"},
+		"user":   {ic.User},
+		"pw":     {ic.password},
+		"server": {fmt.Sprintf("s%d", ic.Server)},
+	}
+	reqBody := bytes.NewBufferString(formData.Encode())
+
+	loginURL := fmt.Sprintf("%s/s_%d/login.php", _baseURL, ic.Server)
+	parsedURL, err := url.Parse(loginURL)
+	if err != nil {
+		return fmt.Errorf("failed creating login url: %w", err)
+	}
+
+	q := parsedURL.Query()
+	q.Add("a", "login")
+	parsedURL.RawQuery = q.Encode()
+
+	req, err := http.NewRequest("POST", parsedURL.String(), reqBody)
+	if err != nil {
+		return fmt.Errorf("failed creating login request: %w", err)
+	}
+	req = addHeaders(req)
+	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+
+	resp, err := ic.client.Do(req)
+	if err != nil {
+		return fmt.Errorf("failed to login: %w", err)
+	}
+	defer resp.Body.Close()
+
+	bodyBytes, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return fmt.Errorf("failed to read login bytes: %w", err)
+	}
+
+	loginPage, err := html.Parse(bytes.NewReader(bodyBytes))
+	if err != nil {
+		return fmt.Errorf("failed to parse login html: %w", err)
+	}
+
+	sessionId := findSessionID(loginPage)
+	if sessionId == "" {
+		fmt.Println(string(bodyBytes))
+		fmt.Printf("RESP:\n%+v\n\n", resp)
+		fmt.Printf("REQ:\n%+v\n\n", req)
+		return fmt.Errorf("failed to find session id:")
+	}
+	ic.sessionId = sessionId
+
+	return nil
+}
+
+func addHeaders(req *http.Request) *http.Request {
+	req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:115.0) Gecko/20100101 Firefox/115.0")
+	req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
+	req.Header.Set("Accept-Language", "en-US,en;q=0.5")
+	req.Header.Set("Origin", "https://www.ik-seite.de")
+	req.Header.Set("Connection", "keep-alive")
+	req.Header.Set("Referer", "https://www.ik-seite.de/en/")
+	req.Header.Set("Upgrade-Insecure-Requests", "1")
+	req.Header.Set("Sec-Fetch-Dest", "document")
+	req.Header.Set("Sec-Fetch-Mode", "navigate")
+	req.Header.Set("Sec-Fetch-Site", "none")
+	req.Header.Set("Sec-Fetch-User", "?1")
+	return req
+}
resources.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"fmt"
+	"time"
+)
+
+type Resoruces struct {
+	Gold   int
+	Stone  int
+	Lumber int
+	Time   time.Duration
+}
+
+func (r *Resoruces) String() string {
+	return fmt.Sprintf("%c% 4d %c% 4d %c% 4d",
+		_nerdGold, r.Gold,
+		_nerdStone, r.Stone,
+		_nerdLumber, r.Lumber)
+}
+
+type ErrNotEnoughResources struct {
+	Deficit *Resoruces
+	Delay   time.Duration
+}
+
+func NewNotEnoughResources(
+	gold, stone, lumber int,
+	delay time.Duration) *ErrNotEnoughResources {
+	return &ErrNotEnoughResources{
+		Deficit: &Resoruces{
+			Gold:   gold,
+			Stone:  stone,
+			Lumber: lumber,
+		},
+		Delay: delay,
+	}
+}
+
+func (ner *ErrNotEnoughResources) Error() string {
+	return fmt.Sprintf("deficit %s, delay:%s",
+		ner.Deficit.String(),
+		ner.Delay.String())
+}