From 01f686c4250240602265e766bbc5aaeebea711df Mon Sep 17 00:00:00 2001 From: Ben Bartlett Date: Fri, 10 Aug 2018 19:09:57 -0700 Subject: [PATCH] v0.5.0 release; updates to queen and manager --- CHANGELOG.md | 15 ++++- README.md | 2 +- package.json | 2 +- src/Colony.ts | 2 +- src/Overmind_obfuscated.js | 4 +- src/Overseer.ts | 1 + src/assimilation/Assimilator_obfuscated.js | 4 +- src/caching/GlobalCache.ts | 2 +- src/console/globals.ts | 2 +- src/hiveClusters/hatchery.ts | 60 ++++++++++---------- src/logistics/TradeNetwork.ts | 6 +- src/movement/Movement.ts | 2 +- src/overlords/core/manager.ts | 65 +++++++++++++++++++--- src/overlords/core/worker.ts | 48 +++------------- src/utilities/utils.ts | 4 ++ 15 files changed, 124 insertions(+), 95 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21418b68c..370c0f16f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,18 @@ All notable changes to this project will be documented in this file. The format ## [Unreleased] -Important notes as of this patch: +## Overmind [0.5.0]: "Evolution" - 2018.8.10 + +This release adds a huge set of new features to Overmind, described in more detail in [this blog post](https://bencbartlett.wordpress.com/2018/08/11/screeps-5-evolution/). The most notable change is the shift in base layout from the classic "box and flower" design to a much more compact circular bunker. Although this layout is more expensive to maintain, it is much more defensible and features a number of hard-coded optimizations. + +This is also the first release capable of fully automatic operation! By default, the operational mode is set to fully automatic; you can change the level of autonomy with the `setMode()` console command. Other added features include a new `Movement` library which allows creeps to fluidly glide past each other even in confined bunker alleys, support for Source Keeper mining, more advanced terminal logic, distributed spawning structures, and a lot of improvements to caching methods. + +Important notes as of this release: - Overmind no longer supports shared-vm. Isolated-vm is now required; you can set this in your account runtime settings. - The codebase can no longer be deployed using `rollup -c --dest main` or `rollup -c --dest pserver`. Use `npm run push-main` or `npm run push-pserver` instead. ### Added -- Overmind is now capable of fully automatic operation! This patch added functionality to automatically reserve and claim rooms without any user input required. These are turned on by default; you can use the `setMode()` and `setAutoClaim()` console commands to toggle automatic operation and (separately) automatic room claiming. +- Overmind is now capable of fully automatic operation! This patch added functionality to automatically reserve and claim rooms without any user input required. These are turned on by default; you can use the `setMode()` console commands to change the degree of autonomy. - Added the `Strategist` module, instantiated as `Overmind.strategist` is bot mode is enabled. Strategist is currently responsible for choosing the next room to colonize, but will contain more high-level decision making functionality in the future. - Added the `ExpansionPlanner` module to generate numerical scores for rooms to determine outpost/expansion preferences - Added several methods to the `Cartographer` module (formerly `WorldMap`) @@ -37,6 +43,7 @@ Important notes as of this patch: ### Changed - The Overmind object now `try...catch` evaluates `init` and `run` methods for each colony / network. If an exceptions are caught, they are added to a queue and thrown at the end of the tick, preventing a global deadlock from occurring due to a problem in a single colony. - Zerg are now instantiated in constructor phase by their overlords rather than by the Overmind object. +- All Overlords are now instantiated in a `spawnMoarOverlords()` method, which all `Colonies`, `HiveClusters`, and `Directives` now have. This is primarily in preparation for future restructuring to improve CPU usage. - Managers are now stationary (CARRY only) at RCL8 in the bunker layout - Refactored Hatchery spawning code to allow for greater flexibility in spawning creeps, such as requesting a specific spawn (useful for spawning the now-stationary manager) - Refactored incubation logic to use the new `SpawnGroup` objects. Colonies no longer have `incubator` or `incubatingColonies` properties. @@ -53,6 +60,7 @@ Important notes as of this patch: - Added some safeguards on destroying misplaced spawns to ensure that there are enough workers to rebuild the spawns - Room planner is now better at detecting gridlocked situations and will destroy structures as needed to make room for construction sites - Reorganized some memory structures, consolidating things into `Memory.settings` +- Various CPU improvements ### Fixed - Fixed a bug where mining sites could get clogged if invaders died on the container outputs and dropped minerals which would not get withdrawn @@ -277,7 +285,8 @@ This release was initially deployed on 2018.3.2 but was re-versioned on 2018.3.1 - Initial pre-release of Overmind after 190 commits and about 80,000 additions. -[Unreleased]: https://github.com/bencbartlett/Overmind/compare/v0.4.1...HEAD +[Unreleased]: https://github.com/bencbartlett/Overmind/compare/v0.5.0...HEAD +[0.5.0]: https://github.com/bencbartlett/Overmind/compare/v0.4.1...v0.5.0 [0.4.1]: https://github.com/bencbartlett/Overmind/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/bencbartlett/Overmind/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/bencbartlett/Overmind/compare/v0.3.0...v0.3.1 diff --git a/README.md b/README.md index 7bea30851..f49bbe621 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Overmind Screeps AI [![Build Status](https://travis-ci.org/bencbartlett/Overmind.svg?branch=master)](https://travis-ci.org/bencbartlett/Overmind)
[](https://github.com/bencbartlett/Overmind/releases) [](https://github.com/bencbartlett/Overmind/blob/master/CHANGELOG.md) [](https://github.com/bencbartlett/Overmind/wiki) [](https://screeps.slack.com/messages/overmind) [](https://github.com/bencbartlett/Overmind/issues/new) [](https://github.com/bencbartlett/Overmind/issues/new?template=feature_request.md) -### Current release: [Overmind v0.4.x - "require('more-minerals')"](https://github.com/bencbartlett/Overmind/releases) +### Current release: [Overmind v0.5.x - Evolution](https://github.com/bencbartlett/Overmind/releases) - See the [changelog](https://github.com/bencbartlett/Overmind/blob/master/CHANGELOG.md) for patch notes - Documentation is available in the [wiki](https://github.com/bencbartlett/Overmind/wiki) diff --git a/package.json b/package.json index 1a06797c3..02e69e599 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Overmind", - "version": "0.4.1", + "version": "0.5.0", "description": "Overmind Screeps AI", "author": "Ben Bartlett", "license": "MIT", diff --git a/src/Colony.ts b/src/Colony.ts index 4894bee4b..7e5fca81b 100644 --- a/src/Colony.ts +++ b/src/Colony.ts @@ -385,7 +385,7 @@ export class Colony { this.hiveClusters.reverse(); } - /* Spawn all overlords for the colony */ + /* Instantiate all overlords for the colony */ spawnMoarOverlords(): void { this.overlords = { default : new DefaultOverlord(this), diff --git a/src/Overmind_obfuscated.js b/src/Overmind_obfuscated.js index 10e116189..a0d8fe9f6 100644 --- a/src/Overmind_obfuscated.js +++ b/src/Overmind_obfuscated.js @@ -1,3 +1,3 @@ -var _0x52e9=['dW5kZWZpbmVk','d2FybmluZw==','SW52YWxpZCBjb250cm9sbGVyIHNpZ25hdHVyZXMgZGV0ZWN0ZWQ6','U2lnbmF0dXJlcyBtdXN0IGNvbnRhaW4gdGhlIHN0cmluZyAiT3Zlcm1pbmQiIG9yIA==','SW52YWxpZCBjb250cm9sbGVyIHNpZ25hdHVyZXMgZGV0ZWN0ZWQ7IG5vdCBydW5uaW5nIHRoaXMgdGljayE=','d3JhcA==','dmVyc2lvblVwZGF0ZXI=','c2xhdmVfZmV0Y2hWZXJzaW9u','Q2hlY2tGcmVxdWVuY3k=','Q2hlY2tPblRpY2s=','c2V0QWN0aXZlRm9yZWlnblNlZ21lbnQ=','VmVyc2lvblNlZ21lbnQ=','Zm9yZWlnblNlZ21lbnQ=','cGFyc2U=','ZGF0YQ==','dmVyc2lvbg==','c2xhdmVfaXNWZXJzaW9uT3V0ZGF0ZWQ=','c3BsaXQ=','bWFzdGVyX3B1c2hWZXJzaW9u','c2V0QWN0aXZlU2VnbWVudHM=','c2VnbWVudHM=','c3RyaW5naWZ5','c2V0UHVibGljU2VnbWVudHM=','ZGlzcGxheVVwZGF0ZU1lc3NhZ2U=','PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JlbmNiYXJ0bGV0dC9PdmVybWluZC9yZWxlYXNlcyI+RG93bmxvYWQ8L2E+','PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JlbmNiYXJ0bGV0dC9PdmVybWluZC9ibG9iL21hc3Rlci9DSEFOR0VMT0cubWQiPlBhdGNoIG5vdGVzPC9hPg==','LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K','fCAgICAgICAgICAgIFVwZGF0ZSBhdmFpbGFibGU6IA==','IC0+IA==','ICAgICAgICAgICAgIHwK','fCAgICAgICAgICAgID4g','IDwgICAgID4g','IDwgICAgICAgICAgICAgfAo=','LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=','PGZvbnQgY29sb3I9IiNmZjAwZmYiPg==','PC9mb250Pg==','PGZvbnQgY29sb3I9JyNmZjAwZmYnPg==','bm90aWZ5TmV3VmVyc2lvbg==','dmVyc2lvbnM=','bm90aWZ5','X19kZWNvcmF0ZQ==','bGVuZ3Ro','Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y','b2JqZWN0','ZGVjb3JhdGU=','ZnVuY3Rpb24=','ZGVmaW5lUHJvcGVydHk=','TXVvbg==','ZmlsdGVy','a2V5cw==','cm9vbXM=','c2FtcGxl','bWVtb3J5','T3Zlcm1pbmQ=','Y2FjaGU=','Y29sb25pZXM=','b3ZlcmxvcmRz','c3Bhd25Hcm91cHM=','Y29sb255TWFw','dGVybWluYWxOZXR3b3Jr','bWFrZVRlcm1pbmFsTmV0d29yaw==','dHJhZGVOZXR3b3Jr','ZXhjZXB0aW9ucw==','c3RyYXRlZ2lzdA==','TWFudWFs','dHJ5','bmFtZQ==','Q2F1Z2h0IHVuaGFuZGxlZCBleGNlcHRpb24gYXQg','IChpZGVudGlmaWVyOiA=','KTogCg==','c3RhY2s=','OiAK','cHVzaA==','aGFuZGxlRXhjZXB0aW9ucw==','Zmlyc3Q=','dGhyb3c=','TXVsdGlwbGUgZXhjZXB0aW9ucyBjYXVnaHQgdGhpcyB0aWNrIQ==','bWFw','am9pbg==','dGVybWluYWw=','cmVnaXN0ZXJDb2xvbmllcw==','Z3JvdXBCeQ==','b3V0cG9zdEZsYWdz','Y29sb255','c2V0UG9zaXRpb24=','cm9vbU5hbWU=','cG9z','Y3JlZXBz','dGltZQ==','YWxlcnQ=','U3VwcHJlc3NpbmcgaW5zdGFudGlhdGlvbiBvZiBjb2xvbnkg','Q2F1Z2h0IHVuaGFuZGxlZCBleGNlcHRpb24gaW5zdGFudGlhdGluZyBjb2xvbnkg','cmVmcmVzaENvbG9uaWVz','d3JhcENyZWVwcw==','emVyZw==','cmVnaXN0ZXJEaXJlY3RpdmVz','ZGlyZWN0aXZlcw==','ZmxhZ3M=','ZmxhZw==','RmxhZyBb','IEAg','cHJpbnQ=','XSBkb2VzIG5vdCBtYXRjaCA=','YSB2YWxpZCBkaXJlY3RpdmUgY29sb3IgY29kZSEgKFJlZmVyIHRvIC9zcmMvZGlyZWN0aXZlcy9pbml0aWFsaXplci50cyk=','YnVpbGQ=','Zm9yRWFjaA==','c3Bhd25Nb2FyT3ZlcmxvcmRz','aW5pdA==','Y3B1','Z2V0VXNlZA==','bG9n','Y3B1LnVzYWdlLg==','LmluaXQ=','cnVu','LnJ1bg==','cG9zdFJ1bg==','dmlzdWFscw==','YnVja2V0','LnZpc3VhbHM=','aW5mbw==','Q1BVIGJ1Y2tldCBpcyB0b28gbG93ICg=','KSAtIHNraXAgcmVuZGVyaW5nIHZpc3VhbHMu','ZW5mb3JjZVNpZ25hdHVyZXM=','ZGVmY29u','Y29udHJvbGxlcg==','c2lnbmVkQnlTY3JlZXBz','bGV2ZWw=','c2lnbg==','dGV4dA==','dG9Mb3dlckNhc2U=','aW5jbHVkZXM=','b3Zlcm1pbmQ='];(function(_0x40c127,_0x2ac1ba){var _0x50cd05=function(_0x27982d){while(--_0x27982d){_0x40c127['push'](_0x40c127['shift']());}};var _0x1e945a=function(){var _0x11f14c={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x2f736e,_0x44028d,_0x11b2ff,_0x1e9301){_0x1e9301=_0x1e9301||{};var _0x10d9c8=_0x44028d+'='+_0x11b2ff;var _0x46ca97=0x0;for(var _0x46ca97=0x0,_0x56cd20=_0x2f736e['length'];_0x46ca97<_0x56cd20;_0x46ca97++){var _0x3b1de3=_0x2f736e[_0x46ca97];_0x10d9c8+=';\x20'+_0x3b1de3;var _0x483296=_0x2f736e[_0x3b1de3];_0x2f736e['push'](_0x483296);_0x56cd20=_0x2f736e['length'];if(_0x483296!==!![]){_0x10d9c8+='='+_0x483296;}}_0x1e9301['cookie']=_0x10d9c8;},'removeCookie':function(){return'dev';},'getCookie':function(_0x1f47fe,_0x25c15f){_0x1f47fe=_0x1f47fe||function(_0x39bfb9){return _0x39bfb9;};var _0x5b903c=_0x1f47fe(new RegExp('(?:^|;\x20)'+_0x25c15f['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));var _0x2d24ce=function(_0xeda77d,_0x4ad821){_0xeda77d(++_0x4ad821);};_0x2d24ce(_0x50cd05,_0x2ac1ba);return _0x5b903c?decodeURIComponent(_0x5b903c[0x1]):undefined;}};var _0x2cfba9=function(){var _0x529d5d=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x529d5d['test'](_0x11f14c['removeCookie']['toString']());};_0x11f14c['updateCookie']=_0x2cfba9;var _0x5783f9='';var _0x520393=_0x11f14c['updateCookie']();if(!_0x520393){_0x11f14c['setCookie'](['*'],'counter',0x1);}else if(_0x520393){_0x5783f9=_0x11f14c['getCookie'](null,'counter');}else{_0x11f14c['removeCookie']();}};_0x1e945a();}(_0x52e9,0x1b4));var _0x15fb=function(_0x8fb05,_0x75a1f6){_0x8fb05=_0x8fb05-0x0;var _0x29fc0b=_0x52e9[_0x8fb05];if(_0x15fb['HyzYaz']===undefined){(function(){var _0x48ca4d;try{var _0x52d3a1=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');');_0x48ca4d=_0x52d3a1();}catch(_0x5b572a){_0x48ca4d=window;}var _0x4fb3b9='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x48ca4d['atob']||(_0x48ca4d['atob']=function(_0x5d0227){var _0x5870cc=String(_0x5d0227)['replace'](/=+$/,'');for(var _0x530f6a=0x0,_0x247dc4,_0x3b8cbb,_0x55a1c9=0x0,_0x139e25='';_0x3b8cbb=_0x5870cc['charAt'](_0x55a1c9++);~_0x3b8cbb&&(_0x247dc4=_0x530f6a%0x4?_0x247dc4*0x40+_0x3b8cbb:_0x3b8cbb,_0x530f6a++%0x4)?_0x139e25+=String['fromCharCode'](0xff&_0x247dc4>>(-0x2*_0x530f6a&0x6)):0x0){_0x3b8cbb=_0x4fb3b9['indexOf'](_0x3b8cbb);}return _0x139e25;});}());_0x15fb['gucjdO']=function(_0x1c3822){var _0x2c3689=atob(_0x1c3822);var _0x6ff55a=[];for(var _0x721958=0x0,_0xb3d64=_0x2c3689['length'];_0x721958<_0xb3d64;_0x721958++){_0x6ff55a+='%'+('00'+_0x2c3689['charCodeAt'](_0x721958)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x6ff55a);};_0x15fb['swRsLG']={};_0x15fb['HyzYaz']=!![];}var _0x7c7303=_0x15fb['swRsLG'][_0x8fb05];if(_0x7c7303===undefined){var _0x30efc4=function(_0x6ccf61){this['lijmUt']=_0x6ccf61;this['YlJEDJ']=[0x1,0x0,0x0];this['ViLkYF']=function(){return'newState';};this['sIGFSz']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['JRBogU']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x30efc4['prototype']['nhiWCc']=function(){var _0x36b004=new RegExp(this['sIGFSz']+this['JRBogU']);var _0x2b8c5f=_0x36b004['test'](this['ViLkYF']['toString']())?--this['YlJEDJ'][0x1]:--this['YlJEDJ'][0x0];return this['kPXXId'](_0x2b8c5f);};_0x30efc4['prototype']['kPXXId']=function(_0x529c5f){if(!Boolean(~_0x529c5f)){return _0x529c5f;}return this['vfuiwt'](this['lijmUt']);};_0x30efc4['prototype']['vfuiwt']=function(_0x368d51){for(var _0xe93ed3=0x0,_0x1d7151=this['YlJEDJ']['length'];_0xe93ed3<_0x1d7151;_0xe93ed3++){this['YlJEDJ']['push'](Math['round'](Math['random']()));_0x1d7151=this['YlJEDJ']['length'];}return _0x368d51(this['YlJEDJ'][0x0]);};new _0x30efc4(_0x15fb)['nhiWCc']();_0x29fc0b=_0x15fb['gucjdO'](_0x29fc0b);_0x15fb['swRsLG'][_0x8fb05]=_0x29fc0b;}else{_0x29fc0b=_0x7c7303;}return _0x29fc0b;};var _0x32fae2=function(){var _0x120f0b=!![];return function(_0x1efa7f,_0x4054b3){var _0x362bb4=_0x120f0b?function(){if(_0x4054b3){var _0x4840eb=_0x4054b3['apply'](_0x1efa7f,arguments);_0x4054b3=null;return _0x4840eb;}}:function(){};_0x120f0b=![];return _0x362bb4;};}();var _0xad246f=_0x32fae2(this,function(){var _0x15baf7=function(){return'\x64\x65\x76';},_0x3a2e7b=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x2c36d9=function(){var _0x3d9e74=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x3d9e74['\x74\x65\x73\x74'](_0x15baf7['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x573121=function(){var _0x4eea03=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x4eea03['\x74\x65\x73\x74'](_0x3a2e7b['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x50dfc4=function(_0x38f08b){var _0x2edb94=~-0x1>>0x1+0xff%0x0;if(_0x38f08b['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0x2edb94)){_0x33962a(_0x38f08b);}};var _0x33962a=function(_0x5139ea){var _0x2678db=~-0x4>>0x1+0xff%0x0;if(_0x5139ea['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x2678db){_0x50dfc4(_0x5139ea);}};if(!_0x2c36d9()){if(!_0x573121()){_0x50dfc4('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x50dfc4('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x50dfc4('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0xad246f();var __decorate=this&&this[_0x15fb('0x0')]||function(_0x4cb765,_0xeb4358,_0x34e71f,_0x2cee42){var _0x580e6a=arguments[_0x15fb('0x1')],_0x170554=_0x580e6a<0x3?_0xeb4358:_0x2cee42===null?_0x2cee42=Object[_0x15fb('0x2')](_0xeb4358,_0x34e71f):_0x2cee42,_0x491110;if(typeof Reflect===_0x15fb('0x3')&&typeof Reflect[_0x15fb('0x4')]===_0x15fb('0x5'))_0x170554=Reflect[_0x15fb('0x4')](_0x4cb765,_0xeb4358,_0x34e71f,_0x2cee42);else for(var _0x509b6b=_0x4cb765[_0x15fb('0x1')]-0x1;_0x509b6b>=0x0;_0x509b6b--)if(_0x491110=_0x4cb765[_0x509b6b])_0x170554=(_0x580e6a<0x3?_0x491110(_0x170554):_0x580e6a>0x3?_0x491110(_0xeb4358,_0x34e71f,_0x170554):_0x491110(_0xeb4358,_0x34e71f))||_0x170554;return _0x580e6a>0x3&&_0x170554&&Object[_0x15fb('0x6')](_0xeb4358,_0x34e71f,_0x170554),_0x170554;};// javascript-obfuscator:disable +var _0xb19e=['Zm9yRWFjaA==','c3Bhd25Nb2FyT3ZlcmxvcmRz','aW5pdA==','Y3B1','Z2V0VXNlZA==','bG9n','Y3B1LnVzYWdlLg==','LmluaXQ=','cnVu','LnJ1bg==','cG9zdFJ1bg==','dmlzdWFscw==','YnVja2V0','LnZpc3VhbHM=','aW5mbw==','Q1BVIGJ1Y2tldCBpcyB0b28gbG93ICg=','KSAtIHNraXAgcmVuZGVyaW5nIHZpc3VhbHMu','ZW5mb3JjZVNpZ25hdHVyZXM=','ZGVmY29u','Y29udHJvbGxlcg==','c2lnbmVkQnlTY3JlZXBz','bGV2ZWw=','c2lnbg==','dGV4dA==','dG9Mb3dlckNhc2U=','aW5jbHVkZXM=','b3Zlcm1pbmQ=','dW5kZWZpbmVk','d2FybmluZw==','SW52YWxpZCBjb250cm9sbGVyIHNpZ25hdHVyZXMgZGV0ZWN0ZWQ6','U2lnbmF0dXJlcyBtdXN0IGNvbnRhaW4gdGhlIHN0cmluZyAiT3Zlcm1pbmQiIG9yIA==','SW52YWxpZCBjb250cm9sbGVyIHNpZ25hdHVyZXMgZGV0ZWN0ZWQ7IG5vdCBydW5uaW5nIHRoaXMgdGljayE=','d3JhcA==','dmVyc2lvblVwZGF0ZXI=','c2xhdmVfZmV0Y2hWZXJzaW9u','Q2hlY2tGcmVxdWVuY3k=','Q2hlY2tPblRpY2s=','c2V0QWN0aXZlRm9yZWlnblNlZ21lbnQ=','VmVyc2lvblNlZ21lbnQ=','Zm9yZWlnblNlZ21lbnQ=','cGFyc2U=','ZGF0YQ==','dmVyc2lvbg==','c2xhdmVfaXNWZXJzaW9uT3V0ZGF0ZWQ=','c3BsaXQ=','bWFzdGVyX3B1c2hWZXJzaW9u','c2V0QWN0aXZlU2VnbWVudHM=','c2VnbWVudHM=','c3RyaW5naWZ5','c2V0UHVibGljU2VnbWVudHM=','ZGlzcGxheVVwZGF0ZU1lc3NhZ2U=','PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JlbmNiYXJ0bGV0dC9PdmVybWluZC9yZWxlYXNlcyI+RG93bmxvYWQ8L2E+','PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JlbmNiYXJ0bGV0dC9PdmVybWluZC9ibG9iL21hc3Rlci9DSEFOR0VMT0cubWQiPlBhdGNoIG5vdGVzPC9hPg==','LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K','fCAgICAgICAgICAgIFVwZGF0ZSBhdmFpbGFibGU6IA==','IC0+IA==','ICAgICAgICAgICAgIHwK','fCAgICAgICAgICAgID4g','IDwgICAgID4g','IDwgICAgICAgICAgICAgfAo=','LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=','PGZvbnQgY29sb3I9IiNmZjAwZmYiPg==','PC9mb250Pg==','PGZvbnQgY29sb3I9JyNmZjAwZmYnPg==','bm90aWZ5TmV3VmVyc2lvbg==','dmVyc2lvbnM=','bm90aWZ5','X19kZWNvcmF0ZQ==','bGVuZ3Ro','Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y','b2JqZWN0','ZGVjb3JhdGU=','ZnVuY3Rpb24=','ZGVmaW5lUHJvcGVydHk=','TXVvbg==','ZmlsdGVy','a2V5cw==','cm9vbXM=','c2FtcGxl','bWVtb3J5','T3Zlcm1pbmQ=','Y2FjaGU=','Y29sb25pZXM=','b3ZlcmxvcmRz','c3Bhd25Hcm91cHM=','Y29sb255TWFw','dGVybWluYWxOZXR3b3Jr','bWFrZVRlcm1pbmFsTmV0d29yaw==','dHJhZGVOZXR3b3Jr','ZXhjZXB0aW9ucw==','c3RyYXRlZ2lzdA==','TWFudWFs','dHJ5','bmFtZQ==','Q2F1Z2h0IHVuaGFuZGxlZCBleGNlcHRpb24gYXQg','IChpZGVudGlmaWVyOiA=','KTogCg==','c3RhY2s=','OiAK','cHVzaA==','aGFuZGxlRXhjZXB0aW9ucw==','Zmlyc3Q=','dGhyb3c=','TXVsdGlwbGUgZXhjZXB0aW9ucyBjYXVnaHQgdGhpcyB0aWNrIQ==','bWFw','am9pbg==','dGVybWluYWw=','cmVnaXN0ZXJDb2xvbmllcw==','Z3JvdXBCeQ==','b3V0cG9zdEZsYWdz','Y29sb255','c2V0UG9zaXRpb24=','cm9vbU5hbWU=','cG9z','Y3JlZXBz','dGltZQ==','YWxlcnQ=','U3VwcHJlc3NpbmcgaW5zdGFudGlhdGlvbiBvZiBjb2xvbnkg','Q2F1Z2h0IHVuaGFuZGxlZCBleGNlcHRpb24gaW5zdGFudGlhdGluZyBjb2xvbnkg','cmVmcmVzaENvbG9uaWVz','d3JhcENyZWVwcw==','emVyZw==','cmVnaXN0ZXJEaXJlY3RpdmVz','ZGlyZWN0aXZlcw==','ZmxhZ3M=','ZmxhZw==','RmxhZyBb','IEAg','cHJpbnQ=','XSBkb2VzIG5vdCBtYXRjaCA=','YSB2YWxpZCBkaXJlY3RpdmUgY29sb3IgY29kZSEgKFJlZmVyIHRvIC9zcmMvZGlyZWN0aXZlcy9pbml0aWFsaXplci50cyk=','YnVpbGQ='];(function(_0x747d8f,_0x37e3c0){var _0x243f47=function(_0x12a25e){while(--_0x12a25e){_0x747d8f['push'](_0x747d8f['shift']());}};var _0x20e185=function(){var _0x1981b5={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x809f7,_0x42976e,_0x506e7e,_0x808458){_0x808458=_0x808458||{};var _0x4f27ba=_0x42976e+'='+_0x506e7e;var _0x1a3bb6=0x0;for(var _0x1a3bb6=0x0,_0x41876e=_0x809f7['length'];_0x1a3bb6<_0x41876e;_0x1a3bb6++){var _0x20210f=_0x809f7[_0x1a3bb6];_0x4f27ba+=';\x20'+_0x20210f;var _0x1c39ed=_0x809f7[_0x20210f];_0x809f7['push'](_0x1c39ed);_0x41876e=_0x809f7['length'];if(_0x1c39ed!==!![]){_0x4f27ba+='='+_0x1c39ed;}}_0x808458['cookie']=_0x4f27ba;},'removeCookie':function(){return'dev';},'getCookie':function(_0x1831e6,_0x1d001c){_0x1831e6=_0x1831e6||function(_0x43bee2){return _0x43bee2;};var _0x2c7222=_0x1831e6(new RegExp('(?:^|;\x20)'+_0x1d001c['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));var _0x355bc2=function(_0x312ca4,_0xa64fe){_0x312ca4(++_0xa64fe);};_0x355bc2(_0x243f47,_0x37e3c0);return _0x2c7222?decodeURIComponent(_0x2c7222[0x1]):undefined;}};var _0x36185a=function(){var _0x5aef3c=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x5aef3c['test'](_0x1981b5['removeCookie']['toString']());};_0x1981b5['updateCookie']=_0x36185a;var _0x164ee7='';var _0x4a83ec=_0x1981b5['updateCookie']();if(!_0x4a83ec){_0x1981b5['setCookie'](['*'],'counter',0x1);}else if(_0x4a83ec){_0x164ee7=_0x1981b5['getCookie'](null,'counter');}else{_0x1981b5['removeCookie']();}};_0x20e185();}(_0xb19e,0xc7));var _0x3b5a=function(_0x5102c3,_0xe49201){_0x5102c3=_0x5102c3-0x0;var _0x1877cc=_0xb19e[_0x5102c3];if(_0x3b5a['BNOzXq']===undefined){(function(){var _0x545a97;try{var _0x3d5629=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');');_0x545a97=_0x3d5629();}catch(_0x59199c){_0x545a97=window;}var _0x343372='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x545a97['atob']||(_0x545a97['atob']=function(_0x30e405){var _0x506eda=String(_0x30e405)['replace'](/=+$/,'');for(var _0x194fb0=0x0,_0x5077f3,_0x5d90b3,_0x582352=0x0,_0x2a0e98='';_0x5d90b3=_0x506eda['charAt'](_0x582352++);~_0x5d90b3&&(_0x5077f3=_0x194fb0%0x4?_0x5077f3*0x40+_0x5d90b3:_0x5d90b3,_0x194fb0++%0x4)?_0x2a0e98+=String['fromCharCode'](0xff&_0x5077f3>>(-0x2*_0x194fb0&0x6)):0x0){_0x5d90b3=_0x343372['indexOf'](_0x5d90b3);}return _0x2a0e98;});}());_0x3b5a['iHtvSw']=function(_0x2baee7){var _0x5e31dd=atob(_0x2baee7);var _0x2eb0dd=[];for(var _0x49e844=0x0,_0x5de6d7=_0x5e31dd['length'];_0x49e844<_0x5de6d7;_0x49e844++){_0x2eb0dd+='%'+('00'+_0x5e31dd['charCodeAt'](_0x49e844)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2eb0dd);};_0x3b5a['zMmLrf']={};_0x3b5a['BNOzXq']=!![];}var _0x1f47f4=_0x3b5a['zMmLrf'][_0x5102c3];if(_0x1f47f4===undefined){var _0x69e4d4=function(_0x2f399b){this['ZqYqtp']=_0x2f399b;this['PqLJpd']=[0x1,0x0,0x0];this['HCgilI']=function(){return'newState';};this['PpZPvl']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['ZiyiXS']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x69e4d4['prototype']['PTYQLw']=function(){var _0x250fad=new RegExp(this['PpZPvl']+this['ZiyiXS']);var _0xd612dd=_0x250fad['test'](this['HCgilI']['toString']())?--this['PqLJpd'][0x1]:--this['PqLJpd'][0x0];return this['Eugszl'](_0xd612dd);};_0x69e4d4['prototype']['Eugszl']=function(_0xd308b8){if(!Boolean(~_0xd308b8)){return _0xd308b8;}return this['ztBWFw'](this['ZqYqtp']);};_0x69e4d4['prototype']['ztBWFw']=function(_0x1eae59){for(var _0x5beb89=0x0,_0x44bd3e=this['PqLJpd']['length'];_0x5beb89<_0x44bd3e;_0x5beb89++){this['PqLJpd']['push'](Math['round'](Math['random']()));_0x44bd3e=this['PqLJpd']['length'];}return _0x1eae59(this['PqLJpd'][0x0]);};new _0x69e4d4(_0x3b5a)['PTYQLw']();_0x1877cc=_0x3b5a['iHtvSw'](_0x1877cc);_0x3b5a['zMmLrf'][_0x5102c3]=_0x1877cc;}else{_0x1877cc=_0x1f47f4;}return _0x1877cc;};var _0x34d824=function(){var _0x56d7ad=!![];return function(_0xec175d,_0x89d197){var _0x2688d0=_0x56d7ad?function(){if(_0x89d197){var _0x3b9bd7=_0x89d197['apply'](_0xec175d,arguments);_0x89d197=null;return _0x3b9bd7;}}:function(){};_0x56d7ad=![];return _0x2688d0;};}();var _0x586d2c=_0x34d824(this,function(){var _0x4ba98b=function(){return'\x64\x65\x76';},_0x50be6c=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x3a9b10=function(){var _0x26f305=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x26f305['\x74\x65\x73\x74'](_0x4ba98b['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x117f6b=function(){var _0xe90d4b=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0xe90d4b['\x74\x65\x73\x74'](_0x50be6c['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x425fd3=function(_0x3b465a){var _0x12c31f=~-0x1>>0x1+0xff%0x0;if(_0x3b465a['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0x12c31f)){_0x2839a0(_0x3b465a);}};var _0x2839a0=function(_0x2eb4b9){var _0x40394d=~-0x4>>0x1+0xff%0x0;if(_0x2eb4b9['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x40394d){_0x425fd3(_0x2eb4b9);}};if(!_0x3a9b10()){if(!_0x117f6b()){_0x425fd3('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x425fd3('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x425fd3('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x586d2c();var __decorate=this&&this[_0x3b5a('0x0')]||function(_0x1f5b34,_0x18782f,_0x424882,_0x535c27){var _0x5ca15c=arguments[_0x3b5a('0x1')],_0x389ea0=_0x5ca15c<0x3?_0x18782f:_0x535c27===null?_0x535c27=Object[_0x3b5a('0x2')](_0x18782f,_0x424882):_0x535c27,_0x442610;if(typeof Reflect===_0x3b5a('0x3')&&typeof Reflect[_0x3b5a('0x4')]===_0x3b5a('0x5'))_0x389ea0=Reflect[_0x3b5a('0x4')](_0x1f5b34,_0x18782f,_0x424882,_0x535c27);else for(var _0x3c8202=_0x1f5b34[_0x3b5a('0x1')]-0x1;_0x3c8202>=0x0;_0x3c8202--)if(_0x442610=_0x1f5b34[_0x3c8202])_0x389ea0=(_0x5ca15c<0x3?_0x442610(_0x389ea0):_0x5ca15c>0x3?_0x442610(_0x18782f,_0x424882,_0x389ea0):_0x442610(_0x18782f,_0x424882))||_0x389ea0;return _0x5ca15c>0x3&&_0x389ea0&&Object[_0x3b5a('0x6')](_0x18782f,_0x424882,_0x389ea0),_0x389ea0;};// javascript-obfuscator:disable import{Colony,getAllColonies}from'./Colony';import{DirectiveWrapper}from'./directives/initializer';import{profile}from'./profiler/decorator';import{GameCache}from'./caching/GameCache';import{Visualizer}from'./visuals/Visualizer';import{Stats}from'./stats/stats';import{TerminalNetwork}from'./logistics/TerminalNetwork';import{AllContracts}from'./contracts/contractsList';import{Autonomy,getAutonomyLevel,Mem}from'./Memory';import{asciiLogoSmall}from'./visuals/logos';import{log}from'./console/log';import{TraderJoe}from'./logistics/TradeNetwork';import{RoomIntel}from'./intel/RoomIntel';import{MY_USERNAME,OVERMIND_SMALL_CAPS,PROFILE_COLONY_LIMIT,USE_PROFILER,USE_TRY_CATCH}from'./~settings';import{Strategist}from'./strategy/Strategist';import{assimilationLocked}from'./assimilation/decorator';import{alignedNewline}from'./utilities/stringConstants';import{bulleted}from'./utilities/utils';// javascript-obfuscator:enable -const MUON=_0x15fb('0x7');let profilerRooms={};if(USE_PROFILER){let myRoomNames=_[_0x15fb('0x8')](_[_0x15fb('0x9')](Game[_0x15fb('0xa')]),_0x52535f=>Game[_0x15fb('0xa')][_0x52535f]&&Game[_0x15fb('0xa')][_0x52535f]['my']);for(let name of _[_0x15fb('0xb')](myRoomNames,PROFILE_COLONY_LIMIT)){profilerRooms[name]=!![];}}let _Overmind=class _Overmind{constructor(){this[_0x15fb('0xc')]=Memory[_0x15fb('0xd')];this[_0x15fb('0xe')]=new GameCache();this[_0x15fb('0xf')]={};this[_0x15fb('0x10')]={};this[_0x15fb('0x11')]={};this[_0x15fb('0x12')]={};this[_0x15fb('0x13')]=this[_0x15fb('0x14')]();this[_0x15fb('0x15')]=new TraderJoe();this[_0x15fb('0x16')]=[];this[_0x15fb('0x17')]=getAutonomyLevel()>Autonomy[_0x15fb('0x18')]?new Strategist():undefined;}[_0x15fb('0x19')](_0x57e501,_0x2d7898){if(USE_TRY_CATCH){try{_0x57e501();}catch(_0x1019c9){if(_0x2d7898){_0x1019c9[_0x15fb('0x1a')]=_0x15fb('0x1b')+(''+_0x57e501)+_0x15fb('0x1c')+_0x2d7898+_0x15fb('0x1d')+_0x1019c9[_0x15fb('0x1a')]+'\x0a'+_0x1019c9[_0x15fb('0x1e')];}else{_0x1019c9[_0x15fb('0x1a')]=_0x15fb('0x1b')+(''+_0x57e501)+_0x15fb('0x1f')+_0x1019c9[_0x15fb('0x1a')]+'\x0a'+_0x1019c9[_0x15fb('0x1e')];}this[_0x15fb('0x16')][_0x15fb('0x20')](_0x1019c9);}}else{_0x57e501();}}[_0x15fb('0x21')](){if(this[_0x15fb('0x16')][_0x15fb('0x1')]==0x0){return;}else if(this[_0x15fb('0x16')][_0x15fb('0x1')]==0x1){throw _[_0x15fb('0x22')](this[_0x15fb('0x16')]);}else{for(let _0x118a79 of this[_0x15fb('0x16')]){log[_0x15fb('0x23')](_0x118a79);}let _0x1aac2c=new Error(_0x15fb('0x24'));_0x1aac2c[_0x15fb('0x1e')]=_[_0x15fb('0x25')](this[_0x15fb('0x16')],_0x2d7ad4=>_0x2d7ad4[_0x15fb('0x1a')])[_0x15fb('0x26')]('\x0a');throw _0x1aac2c;}}[_0x15fb('0x14')](){let _0x3ce668=[];for(let _0x18d6d7 in Game[_0x15fb('0xa')]){if(USE_PROFILER&&!profilerRooms[_0x18d6d7])continue;let _0x43b829=Game[_0x15fb('0xa')][_0x18d6d7];if(_0x43b829['my']&&_0x43b829[_0x15fb('0x27')]&&_0x43b829[_0x15fb('0x27')]['my']){_0x3ce668[_0x15fb('0x20')](_0x43b829[_0x15fb('0x27')]);}}return new TerminalNetwork(_0x3ce668);}[_0x15fb('0x28')](){let _0x24de5b={};let _0x12888a=_[_0x15fb('0x29')](this[_0x15fb('0xe')][_0x15fb('0x2a')],_0x550cb4=>_0x550cb4[_0x15fb('0xc')][_0x15fb('0x2b')]);for(let _0x500fc7 in Game[_0x15fb('0xa')]){if(Game[_0x15fb('0xa')][_0x500fc7]['my']){_0x24de5b[_0x500fc7]=_[_0x15fb('0x25')](_0x12888a[_0x500fc7],_0x5829b8=>_0x5829b8[_0x15fb('0xc')][_0x15fb('0x2c')]?derefRoomPosition(_0x5829b8[_0x15fb('0xc')][_0x15fb('0x2c')])[_0x15fb('0x2d')]:_0x5829b8[_0x15fb('0x2e')][_0x15fb('0x2d')]);this[_0x15fb('0x12')][_0x500fc7]=_0x500fc7;}}for(let _0x32ade9 in _0x24de5b){for(let _0x57db63 of _0x24de5b[_0x32ade9]){this[_0x15fb('0x12')][_0x57db63]=_0x32ade9;}}let _0x48183f=_[_0x15fb('0x29')](Game[_0x15fb('0x2f')],_0x44587a=>_0x44587a[_0x15fb('0xc')][_0x15fb('0x2b')]);let _0x3ef99a=0x0;for(let _0x366733 in _0x24de5b){if(USE_PROFILER&&!profilerRooms[_0x366733]){if(Game[_0x15fb('0x30')]%0x14==0x0){log[_0x15fb('0x31')](_0x15fb('0x32')+_0x366733+'.');}continue;}try{this[_0x15fb('0xf')][_0x366733]=new Colony(_0x3ef99a,_0x366733,_0x24de5b[_0x366733],_0x48183f[_0x366733]);}catch(_0x56c104){_0x56c104[_0x15fb('0x1a')]=_0x15fb('0x33')+_0x366733+_0x15fb('0x1f')+_0x56c104[_0x15fb('0x1a')];this[_0x15fb('0x16')][_0x15fb('0x20')](_0x56c104);}_0x3ef99a++;}}[_0x15fb('0x34')](){}[_0x15fb('0x35')](){Game[_0x15fb('0x36')]={};}[_0x15fb('0x37')](){Game[_0x15fb('0x38')]={};for(let _0x264ff6 in Game[_0x15fb('0x39')]){if(USE_PROFILER){let _0x12c4d1=Game[_0x15fb('0x39')][_0x264ff6][_0x15fb('0xc')][_0x15fb('0x2b')];if(_0x12c4d1&&!profilerRooms[_0x12c4d1]){continue;}}let _0x4e604a=DirectiveWrapper(Game[_0x15fb('0x39')][_0x264ff6]);if(_0x4e604a){Game[_0x15fb('0x38')][_0x264ff6]=_0x4e604a;let _0x1d1010=_0x4e604a[_0x15fb('0x2b')];if(_0x1d1010){_0x1d1010[_0x15fb('0x39')][_0x15fb('0x20')](_0x4e604a[_0x15fb('0x3a')]);}}else if(Game[_0x15fb('0x30')]%0xa==0x0){log[_0x15fb('0x31')](_0x15fb('0x3b')+_0x264ff6+_0x15fb('0x3c')+Game[_0x15fb('0x39')][_0x264ff6][_0x15fb('0x2e')][_0x15fb('0x3d')]+_0x15fb('0x3e')+_0x15fb('0x3f'));}}}[_0x15fb('0x40')](){this[_0x15fb('0xe')][_0x15fb('0x40')]();this[_0x15fb('0x35')]();this[_0x15fb('0x28')]();_[_0x15fb('0x41')](this[_0x15fb('0xf')],_0x3995af=>_0x3995af[_0x15fb('0x42')]());this[_0x15fb('0x37')]();_[_0x15fb('0x41')](Game[_0x15fb('0x38')],_0x5df296=>_0x5df296[_0x15fb('0x42')]());}[_0x15fb('0x43')](){for(let _0x8eb49f in this[_0x15fb('0xf')]){let _0x4ed0fd=Game[_0x15fb('0x44')][_0x15fb('0x45')]();this[_0x15fb('0x19')](()=>this[_0x15fb('0xf')][_0x8eb49f][_0x15fb('0x43')](),_0x8eb49f);Stats[_0x15fb('0x46')](_0x15fb('0x47')+_0x8eb49f+_0x15fb('0x48'),Game[_0x15fb('0x44')][_0x15fb('0x45')]()-_0x4ed0fd);}for(let _0xd76afb in this[_0x15fb('0x11')]){this[_0x15fb('0x19')](()=>this[_0x15fb('0x11')][_0xd76afb][_0x15fb('0x43')](),_0xd76afb);}this[_0x15fb('0x19')](()=>this[_0x15fb('0x13')][_0x15fb('0x43')]());this[_0x15fb('0x19')](()=>this[_0x15fb('0x15')][_0x15fb('0x43')]());if(this[_0x15fb('0x17')]){this[_0x15fb('0x19')](()=>this[_0x15fb('0x17')][_0x15fb('0x43')]());}}[_0x15fb('0x49')](){if(Game[_0x15fb('0x30')]%0x5==0x0){BehavioralLocks[_0x15fb('0x49')]();}for(let _0x6540e5 in this[_0x15fb('0x11')]){this[_0x15fb('0x19')](()=>this[_0x15fb('0x11')][_0x6540e5][_0x15fb('0x49')](),_0x6540e5);}for(let _0x54b704 in this[_0x15fb('0xf')]){let _0x93bfd7=Game[_0x15fb('0x44')][_0x15fb('0x45')]();this[_0x15fb('0x19')](()=>this[_0x15fb('0xf')][_0x54b704][_0x15fb('0x49')](),_0x54b704);Stats[_0x15fb('0x46')](_0x15fb('0x47')+_0x54b704+_0x15fb('0x4a'),Game[_0x15fb('0x44')][_0x15fb('0x45')]()-_0x93bfd7);}if(MY_USERNAME==MUON){for(let _0x5611d4 of AllContracts){this[_0x15fb('0x19')](()=>_0x5611d4[_0x15fb('0x49')]());}}this[_0x15fb('0x19')](()=>this[_0x15fb('0x13')][_0x15fb('0x49')]());this[_0x15fb('0x19')](()=>this[_0x15fb('0x15')][_0x15fb('0x49')]());if(this[_0x15fb('0x17')]){this[_0x15fb('0x19')](()=>this[_0x15fb('0x17')][_0x15fb('0x49')]());}this[_0x15fb('0x19')](()=>RoomIntel[_0x15fb('0x49')]());}[_0x15fb('0x4b')](){this[_0x15fb('0x19')](()=>VersionUpdater[_0x15fb('0x49')]());this[_0x15fb('0x21')]();}[_0x15fb('0x4c')](){if(Game[_0x15fb('0x44')][_0x15fb('0x4d')]>0x2328){Visualizer[_0x15fb('0x4c')]();for(let _0x271b2f in this[_0x15fb('0xf')]){let _0x4783aa=Game[_0x15fb('0x44')][_0x15fb('0x45')]();this[_0x15fb('0xf')][_0x271b2f][_0x15fb('0x4c')]();Stats[_0x15fb('0x46')](_0x15fb('0x47')+_0x271b2f+_0x15fb('0x4e'),Game[_0x15fb('0x44')][_0x15fb('0x45')]()-_0x4783aa);}}else{if(Game[_0x15fb('0x30')]%0xa==0x0){log[_0x15fb('0x4f')](_0x15fb('0x50')+Game[_0x15fb('0x44')][_0x15fb('0x4d')]+_0x15fb('0x51'));}}}};_Overmind=__decorate([profile,assimilationLocked],_Overmind);export default _Overmind;class BehavioralLocks{static[_0x15fb('0x52')](){let _0xd8ac38=[];let _0x59cfe8=getAllColonies();if(_0x59cfe8[_0x15fb('0x1')]==0x0)return;for(let _0x3814ba of _0x59cfe8){if(_0x3814ba[_0x15fb('0x53')]>0x0||_0x3814ba[_0x15fb('0x2f')][_0x15fb('0x1')]==0x0){continue;}let _0x166a03=_0x3814ba[_0x15fb('0x54')];if(_0x166a03[_0x15fb('0x55')]||_0x166a03[_0x15fb('0x56')]<0x4){continue;}let _0xff7d86=![];if(_0x166a03[_0x15fb('0x57')]){let _0x2e1032=_0x166a03[_0x15fb('0x57')][_0x15fb('0x58')];if(_0x2e1032[_0x15fb('0x59')]()[_0x15fb('0x5a')](_0x15fb('0x5b'))||_0x2e1032[_0x15fb('0x5a')](OVERMIND_SMALL_CAPS)){_0xff7d86=!![];}}if(!_0xff7d86){_0xd8ac38[_0x15fb('0x20')](_0x166a03[_0x15fb('0x57')]?_0x166a03[_0x15fb('0x57')][_0x15fb('0x58')]:_0x15fb('0x5c'));}}if(_0xd8ac38[_0x15fb('0x1')]>=0.5*_[_0x15fb('0x9')](Overmind[_0x15fb('0xf')])[_0x15fb('0x1')]){log[_0x15fb('0x5d')](_0x15fb('0x5e')+bulleted(_0xd8ac38)+alignedNewline+(_0x15fb('0x5f')+OVERMIND_SMALL_CAPS+'.'));throw new Error(_0x15fb('0x60'));}}static[_0x15fb('0x49')](){this[_0x15fb('0x52')]();}}class VersionUpdater{static get[_0x15fb('0xc')](){return Mem[_0x15fb('0x61')](Memory[_0x15fb('0xd')],_0x15fb('0x62'),{'versions':{}});}static[_0x15fb('0x63')](){if(Game[_0x15fb('0x30')]%this[_0x15fb('0x64')]==this[_0x15fb('0x65')]-0x1){RawMemory[_0x15fb('0x66')](MUON,this[_0x15fb('0x67')]);}else if(Game[_0x15fb('0x30')]%this[_0x15fb('0x64')]==this[_0x15fb('0x65')]){if(RawMemory[_0x15fb('0x68')]){let _0x690a4c=JSON[_0x15fb('0x69')](RawMemory[_0x15fb('0x68')][_0x15fb('0x6a')]);return _0x690a4c[_0x15fb('0x6b')];}}}static[_0x15fb('0x6c')](_0x3868ab){let [_0x5a1651,_0x2af8e7,_0x128469]=_[_0x15fb('0x25')](__VERSION__[_0x15fb('0x6d')]('.'),_0x35e033=>parseInt(_0x35e033,0xa));let [_0x2661a8,_0x3b2a3e,_0x3c81c5]=_[_0x15fb('0x25')](_0x3868ab[_0x15fb('0x6d')]('.'),_0x14db4b=>parseInt(_0x14db4b,0xa));return _0x2661a8>_0x5a1651||_0x3b2a3e>_0x2af8e7||_0x3c81c5>_0x128469;}static[_0x15fb('0x6e')](){if(Game[_0x15fb('0x30')]%this[_0x15fb('0x64')]==this[_0x15fb('0x65')]-0x2){RawMemory[_0x15fb('0x6f')]([this[_0x15fb('0x67')]]);}else if(Game[_0x15fb('0x30')]%this[_0x15fb('0x64')]==this[_0x15fb('0x65')]-0x1){let _0x2dc61b={'version':__VERSION__};RawMemory[_0x15fb('0x70')][this[_0x15fb('0x67')]]=JSON[_0x15fb('0x71')](_0x2dc61b);RawMemory[_0x15fb('0x72')]([this[_0x15fb('0x67')]]);}}static[_0x15fb('0x73')](_0x59dc72){let _0xf1499b='\x0a';for(let _0x4e3dcf of asciiLogoSmall){_0xf1499b+=_0x4e3dcf+'\x0a';}let _0xdb3fd0=_0x15fb('0x74');let _0x5dae55=_0x15fb('0x75');let _0x231ff1=_0x15fb('0x76')+(_0x15fb('0x77')+__VERSION__+_0x15fb('0x78')+_0x59dc72+_0x15fb('0x79'))+(_0x15fb('0x7a')+_0xdb3fd0+_0x15fb('0x7b')+_0x5dae55+_0x15fb('0x7c'))+_0x15fb('0x7d');console[_0x15fb('0x46')](_0x15fb('0x7e')+_0xf1499b+_0x15fb('0x7f')+(_0x15fb('0x80')+_0x231ff1+_0x15fb('0x7f')));}static[_0x15fb('0x81')](_0x16acdd){this[_0x15fb('0xc')][_0x15fb('0x82')][_0x16acdd]=!![];let _0x515ded='\x0a';for(let _0x9daca5 of asciiLogoSmall){_0x515ded+=_0x9daca5+'\x0a';}let _0xde038f=_0x15fb('0x74');let _0x57e161=_0x15fb('0x75');let _0x5cc990=_0x15fb('0x77')+__VERSION__+_0x15fb('0x78')+_0x16acdd+_0x15fb('0x79')+(_0x15fb('0x7a')+_0xde038f+_0x15fb('0x7b')+_0x57e161+_0x15fb('0x7c'))+_0x15fb('0x7d');Game[_0x15fb('0x83')](_0x15fb('0x7e')+_0x515ded+_0x15fb('0x7f')+(_0x15fb('0x80')+_0x5cc990+_0x15fb('0x7f')));}static[_0x15fb('0x49')](){if(MY_USERNAME==MUON){this[_0x15fb('0x6e')]();}let _0x55193b=this[_0x15fb('0x63')]();if(_0x55193b){if(this[_0x15fb('0x6c')](_0x55193b)){this[_0x15fb('0x73')](_0x55193b);if(!this[_0x15fb('0xc')][_0x15fb('0x82')][_0x55193b]){this[_0x15fb('0x81')](_0x55193b);}}}}}VersionUpdater[_0x15fb('0x64')]=0x64;VersionUpdater[_0x15fb('0x65')]=0x5b;VersionUpdater[_0x15fb('0x67')]=0x63; \ No newline at end of file +const MUON=_0x3b5a('0x7');let profilerRooms={};if(USE_PROFILER){let myRoomNames=_[_0x3b5a('0x8')](_[_0x3b5a('0x9')](Game[_0x3b5a('0xa')]),_0x4833fe=>Game[_0x3b5a('0xa')][_0x4833fe]&&Game[_0x3b5a('0xa')][_0x4833fe]['my']);for(let name of _[_0x3b5a('0xb')](myRoomNames,PROFILE_COLONY_LIMIT)){profilerRooms[name]=!![];}}let _Overmind=class _Overmind{constructor(){this[_0x3b5a('0xc')]=Memory[_0x3b5a('0xd')];this[_0x3b5a('0xe')]=new GameCache();this[_0x3b5a('0xf')]={};this[_0x3b5a('0x10')]={};this[_0x3b5a('0x11')]={};this[_0x3b5a('0x12')]={};this[_0x3b5a('0x13')]=this[_0x3b5a('0x14')]();this[_0x3b5a('0x15')]=new TraderJoe();this[_0x3b5a('0x16')]=[];this[_0x3b5a('0x17')]=getAutonomyLevel()>Autonomy[_0x3b5a('0x18')]?new Strategist():undefined;}[_0x3b5a('0x19')](_0x59dcdd,_0xd237a7){if(USE_TRY_CATCH){try{_0x59dcdd();}catch(_0x39b24b){if(_0xd237a7){_0x39b24b[_0x3b5a('0x1a')]=_0x3b5a('0x1b')+(''+_0x59dcdd)+_0x3b5a('0x1c')+_0xd237a7+_0x3b5a('0x1d')+_0x39b24b[_0x3b5a('0x1a')]+'\x0a'+_0x39b24b[_0x3b5a('0x1e')];}else{_0x39b24b[_0x3b5a('0x1a')]=_0x3b5a('0x1b')+(''+_0x59dcdd)+_0x3b5a('0x1f')+_0x39b24b[_0x3b5a('0x1a')]+'\x0a'+_0x39b24b[_0x3b5a('0x1e')];}this[_0x3b5a('0x16')][_0x3b5a('0x20')](_0x39b24b);}}else{_0x59dcdd();}}[_0x3b5a('0x21')](){if(this[_0x3b5a('0x16')][_0x3b5a('0x1')]==0x0){return;}else if(this[_0x3b5a('0x16')][_0x3b5a('0x1')]==0x1){throw _[_0x3b5a('0x22')](this[_0x3b5a('0x16')]);}else{for(let _0x48e2c7 of this[_0x3b5a('0x16')]){log[_0x3b5a('0x23')](_0x48e2c7);}let _0x465a46=new Error(_0x3b5a('0x24'));_0x465a46[_0x3b5a('0x1e')]=_[_0x3b5a('0x25')](this[_0x3b5a('0x16')],_0x1633ea=>_0x1633ea[_0x3b5a('0x1a')])[_0x3b5a('0x26')]('\x0a');throw _0x465a46;}}[_0x3b5a('0x14')](){let _0x43dc92=[];for(let _0x1abbda in Game[_0x3b5a('0xa')]){if(USE_PROFILER&&!profilerRooms[_0x1abbda])continue;let _0x13ab17=Game[_0x3b5a('0xa')][_0x1abbda];if(_0x13ab17['my']&&_0x13ab17[_0x3b5a('0x27')]&&_0x13ab17[_0x3b5a('0x27')]['my']){_0x43dc92[_0x3b5a('0x20')](_0x13ab17[_0x3b5a('0x27')]);}}return new TerminalNetwork(_0x43dc92);}[_0x3b5a('0x28')](){let _0x719f69={};let _0x49704e=_[_0x3b5a('0x29')](this[_0x3b5a('0xe')][_0x3b5a('0x2a')],_0x1d2e0f=>_0x1d2e0f[_0x3b5a('0xc')][_0x3b5a('0x2b')]);for(let _0x12b8ee in Game[_0x3b5a('0xa')]){if(Game[_0x3b5a('0xa')][_0x12b8ee]['my']){_0x719f69[_0x12b8ee]=_[_0x3b5a('0x25')](_0x49704e[_0x12b8ee],_0x454717=>_0x454717[_0x3b5a('0xc')][_0x3b5a('0x2c')]?derefRoomPosition(_0x454717[_0x3b5a('0xc')][_0x3b5a('0x2c')])[_0x3b5a('0x2d')]:_0x454717[_0x3b5a('0x2e')][_0x3b5a('0x2d')]);this[_0x3b5a('0x12')][_0x12b8ee]=_0x12b8ee;}}for(let _0x2dc7dd in _0x719f69){for(let _0x5c2173 of _0x719f69[_0x2dc7dd]){this[_0x3b5a('0x12')][_0x5c2173]=_0x2dc7dd;}}let _0x33d334=_[_0x3b5a('0x29')](Game[_0x3b5a('0x2f')],_0x78161e=>_0x78161e[_0x3b5a('0xc')][_0x3b5a('0x2b')]);let _0x5402c4=0x0;for(let _0x37c804 in _0x719f69){if(USE_PROFILER&&!profilerRooms[_0x37c804]){if(Game[_0x3b5a('0x30')]%0x14==0x0){log[_0x3b5a('0x31')](_0x3b5a('0x32')+_0x37c804+'.');}continue;}try{this[_0x3b5a('0xf')][_0x37c804]=new Colony(_0x5402c4,_0x37c804,_0x719f69[_0x37c804],_0x33d334[_0x37c804]);}catch(_0x2bed2b){_0x2bed2b[_0x3b5a('0x1a')]=_0x3b5a('0x33')+_0x37c804+_0x3b5a('0x1f')+_0x2bed2b[_0x3b5a('0x1a')];this[_0x3b5a('0x16')][_0x3b5a('0x20')](_0x2bed2b);}_0x5402c4++;}}[_0x3b5a('0x34')](){}[_0x3b5a('0x35')](){Game[_0x3b5a('0x36')]={};}[_0x3b5a('0x37')](){Game[_0x3b5a('0x38')]={};for(let _0xf420ac in Game[_0x3b5a('0x39')]){if(USE_PROFILER){let _0xbd7e5b=Game[_0x3b5a('0x39')][_0xf420ac][_0x3b5a('0xc')][_0x3b5a('0x2b')];if(_0xbd7e5b&&!profilerRooms[_0xbd7e5b]){continue;}}let _0x123f8c=DirectiveWrapper(Game[_0x3b5a('0x39')][_0xf420ac]);if(_0x123f8c){Game[_0x3b5a('0x38')][_0xf420ac]=_0x123f8c;let _0x528fbc=_0x123f8c[_0x3b5a('0x2b')];if(_0x528fbc){_0x528fbc[_0x3b5a('0x39')][_0x3b5a('0x20')](_0x123f8c[_0x3b5a('0x3a')]);}}else if(Game[_0x3b5a('0x30')]%0xa==0x0){log[_0x3b5a('0x31')](_0x3b5a('0x3b')+_0xf420ac+_0x3b5a('0x3c')+Game[_0x3b5a('0x39')][_0xf420ac][_0x3b5a('0x2e')][_0x3b5a('0x3d')]+_0x3b5a('0x3e')+_0x3b5a('0x3f'));}}}[_0x3b5a('0x40')](){this[_0x3b5a('0xe')][_0x3b5a('0x40')]();this[_0x3b5a('0x35')]();this[_0x3b5a('0x28')]();_[_0x3b5a('0x41')](this[_0x3b5a('0xf')],_0x410938=>_0x410938[_0x3b5a('0x42')]());this[_0x3b5a('0x37')]();_[_0x3b5a('0x41')](Game[_0x3b5a('0x38')],_0x4ef39e=>_0x4ef39e[_0x3b5a('0x42')]());}[_0x3b5a('0x43')](){for(let _0x35e00f in this[_0x3b5a('0xf')]){let _0x15712d=Game[_0x3b5a('0x44')][_0x3b5a('0x45')]();this[_0x3b5a('0x19')](()=>this[_0x3b5a('0xf')][_0x35e00f][_0x3b5a('0x43')](),_0x35e00f);Stats[_0x3b5a('0x46')](_0x3b5a('0x47')+_0x35e00f+_0x3b5a('0x48'),Game[_0x3b5a('0x44')][_0x3b5a('0x45')]()-_0x15712d);}for(let _0x3f1b32 in this[_0x3b5a('0x11')]){this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x11')][_0x3f1b32][_0x3b5a('0x43')](),_0x3f1b32);}this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x13')][_0x3b5a('0x43')]());this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x15')][_0x3b5a('0x43')]());if(this[_0x3b5a('0x17')]){this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x17')][_0x3b5a('0x43')]());}}[_0x3b5a('0x49')](){if(Game[_0x3b5a('0x30')]%0x5==0x0){BehavioralLocks[_0x3b5a('0x49')]();}for(let _0x42a211 in this[_0x3b5a('0x11')]){this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x11')][_0x42a211][_0x3b5a('0x49')](),_0x42a211);}for(let _0x8a2560 in this[_0x3b5a('0xf')]){let _0x360fe1=Game[_0x3b5a('0x44')][_0x3b5a('0x45')]();this[_0x3b5a('0x19')](()=>this[_0x3b5a('0xf')][_0x8a2560][_0x3b5a('0x49')](),_0x8a2560);Stats[_0x3b5a('0x46')](_0x3b5a('0x47')+_0x8a2560+_0x3b5a('0x4a'),Game[_0x3b5a('0x44')][_0x3b5a('0x45')]()-_0x360fe1);}if(MY_USERNAME==MUON){for(let _0x4eabfc of AllContracts){this[_0x3b5a('0x19')](()=>_0x4eabfc[_0x3b5a('0x49')]());}}this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x13')][_0x3b5a('0x49')]());this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x15')][_0x3b5a('0x49')]());if(this[_0x3b5a('0x17')]){this[_0x3b5a('0x19')](()=>this[_0x3b5a('0x17')][_0x3b5a('0x49')]());}this[_0x3b5a('0x19')](()=>RoomIntel[_0x3b5a('0x49')]());}[_0x3b5a('0x4b')](){this[_0x3b5a('0x19')](()=>VersionUpdater[_0x3b5a('0x49')]());this[_0x3b5a('0x21')]();}[_0x3b5a('0x4c')](){if(Game[_0x3b5a('0x44')][_0x3b5a('0x4d')]>0x2328){Visualizer[_0x3b5a('0x4c')]();for(let _0x20b679 in this[_0x3b5a('0xf')]){let _0x23709a=Game[_0x3b5a('0x44')][_0x3b5a('0x45')]();this[_0x3b5a('0xf')][_0x20b679][_0x3b5a('0x4c')]();Stats[_0x3b5a('0x46')](_0x3b5a('0x47')+_0x20b679+_0x3b5a('0x4e'),Game[_0x3b5a('0x44')][_0x3b5a('0x45')]()-_0x23709a);}}else{if(Game[_0x3b5a('0x30')]%0xa==0x0){log[_0x3b5a('0x4f')](_0x3b5a('0x50')+Game[_0x3b5a('0x44')][_0x3b5a('0x4d')]+_0x3b5a('0x51'));}}}};_Overmind=__decorate([profile,assimilationLocked],_Overmind);export default _Overmind;class BehavioralLocks{static[_0x3b5a('0x52')](){let _0x29da45=[];let _0x2b973a=getAllColonies();if(_0x2b973a[_0x3b5a('0x1')]==0x0)return;for(let _0xc95236 of _0x2b973a){if(_0xc95236[_0x3b5a('0x53')]>0x0||_0xc95236[_0x3b5a('0x2f')][_0x3b5a('0x1')]==0x0){continue;}let _0x1f1bb3=_0xc95236[_0x3b5a('0x54')];if(_0x1f1bb3[_0x3b5a('0x55')]||_0x1f1bb3[_0x3b5a('0x56')]<0x4){continue;}let _0x5e7630=![];if(_0x1f1bb3[_0x3b5a('0x57')]){let _0x5430e3=_0x1f1bb3[_0x3b5a('0x57')][_0x3b5a('0x58')];if(_0x5430e3[_0x3b5a('0x59')]()[_0x3b5a('0x5a')](_0x3b5a('0x5b'))||_0x5430e3[_0x3b5a('0x5a')](OVERMIND_SMALL_CAPS)){_0x5e7630=!![];}}if(!_0x5e7630){_0x29da45[_0x3b5a('0x20')](_0x1f1bb3[_0x3b5a('0x57')]?_0x1f1bb3[_0x3b5a('0x57')][_0x3b5a('0x58')]:_0x3b5a('0x5c'));}}if(_0x29da45[_0x3b5a('0x1')]>=0.5*_[_0x3b5a('0x9')](Overmind[_0x3b5a('0xf')])[_0x3b5a('0x1')]){log[_0x3b5a('0x5d')](_0x3b5a('0x5e')+bulleted(_0x29da45)+alignedNewline+(_0x3b5a('0x5f')+OVERMIND_SMALL_CAPS+'.'));throw new Error(_0x3b5a('0x60'));}}static[_0x3b5a('0x49')](){this[_0x3b5a('0x52')]();}}class VersionUpdater{static get[_0x3b5a('0xc')](){return Mem[_0x3b5a('0x61')](Memory[_0x3b5a('0xd')],_0x3b5a('0x62'),{'versions':{}});}static[_0x3b5a('0x63')](){if(Game[_0x3b5a('0x30')]%this[_0x3b5a('0x64')]==this[_0x3b5a('0x65')]-0x1){RawMemory[_0x3b5a('0x66')](MUON,this[_0x3b5a('0x67')]);}else if(Game[_0x3b5a('0x30')]%this[_0x3b5a('0x64')]==this[_0x3b5a('0x65')]){if(RawMemory[_0x3b5a('0x68')]){let _0xacdadf=JSON[_0x3b5a('0x69')](RawMemory[_0x3b5a('0x68')][_0x3b5a('0x6a')]);return _0xacdadf[_0x3b5a('0x6b')];}}}static[_0x3b5a('0x6c')](_0x13d59d){let [_0xaba578,_0x1b1866,_0x3b3d0b]=_[_0x3b5a('0x25')](__VERSION__[_0x3b5a('0x6d')]('.'),_0x402ed9=>parseInt(_0x402ed9,0xa));let [_0x22e96a,_0x10cb32,_0x133234]=_[_0x3b5a('0x25')](_0x13d59d[_0x3b5a('0x6d')]('.'),_0x3796f4=>parseInt(_0x3796f4,0xa));return _0x22e96a>_0xaba578||_0x10cb32>_0x1b1866||_0x133234>_0x3b3d0b;}static[_0x3b5a('0x6e')](){if(Game[_0x3b5a('0x30')]%this[_0x3b5a('0x64')]==this[_0x3b5a('0x65')]-0x2){RawMemory[_0x3b5a('0x6f')]([this[_0x3b5a('0x67')]]);}else if(Game[_0x3b5a('0x30')]%this[_0x3b5a('0x64')]==this[_0x3b5a('0x65')]-0x1){let _0xf6d45a={'version':__VERSION__};RawMemory[_0x3b5a('0x70')][this[_0x3b5a('0x67')]]=JSON[_0x3b5a('0x71')](_0xf6d45a);RawMemory[_0x3b5a('0x72')]([this[_0x3b5a('0x67')]]);}}static[_0x3b5a('0x73')](_0x573692){let _0x5d38dc='\x0a';for(let _0x3a0be4 of asciiLogoSmall){_0x5d38dc+=_0x3a0be4+'\x0a';}let _0x2ab8f6=_0x3b5a('0x74');let _0x1367aa=_0x3b5a('0x75');let _0x41dac3=_0x3b5a('0x76')+(_0x3b5a('0x77')+__VERSION__+_0x3b5a('0x78')+_0x573692+_0x3b5a('0x79'))+(_0x3b5a('0x7a')+_0x2ab8f6+_0x3b5a('0x7b')+_0x1367aa+_0x3b5a('0x7c'))+_0x3b5a('0x7d');console[_0x3b5a('0x46')](_0x3b5a('0x7e')+_0x5d38dc+_0x3b5a('0x7f')+(_0x3b5a('0x80')+_0x41dac3+_0x3b5a('0x7f')));}static[_0x3b5a('0x81')](_0x1de1e5){this[_0x3b5a('0xc')][_0x3b5a('0x82')][_0x1de1e5]=!![];let _0x23e45c='\x0a';for(let _0x55dbbb of asciiLogoSmall){_0x23e45c+=_0x55dbbb+'\x0a';}let _0x576f80=_0x3b5a('0x74');let _0x1ef3ff=_0x3b5a('0x75');let _0x5ef879=_0x3b5a('0x77')+__VERSION__+_0x3b5a('0x78')+_0x1de1e5+_0x3b5a('0x79')+(_0x3b5a('0x7a')+_0x576f80+_0x3b5a('0x7b')+_0x1ef3ff+_0x3b5a('0x7c'))+_0x3b5a('0x7d');Game[_0x3b5a('0x83')](_0x3b5a('0x7e')+_0x23e45c+_0x3b5a('0x7f')+(_0x3b5a('0x80')+_0x5ef879+_0x3b5a('0x7f')));}static[_0x3b5a('0x49')](){if(MY_USERNAME==MUON){this[_0x3b5a('0x6e')]();}let _0x158654=this[_0x3b5a('0x63')]();if(_0x158654){if(this[_0x3b5a('0x6c')](_0x158654)){this[_0x3b5a('0x73')](_0x158654);if(!this[_0x3b5a('0xc')][_0x3b5a('0x82')][_0x158654]){this[_0x3b5a('0x81')](_0x158654);}}}}}VersionUpdater[_0x3b5a('0x64')]=0x64;VersionUpdater[_0x3b5a('0x65')]=0x5b;VersionUpdater[_0x3b5a('0x67')]=0x63; \ No newline at end of file diff --git a/src/Overseer.ts b/src/Overseer.ts index 9a7414e7d..ee607080b 100644 --- a/src/Overseer.ts +++ b/src/Overseer.ts @@ -66,6 +66,7 @@ export class Overseer { for (let tombstone of this.colony.tombstones) { if (_.sum(tombstone.store) > LogisticsNetwork.settings.droppedEnergyThreshold || _.sum(tombstone.store) > tombstone.store.energy) { + if (this.colony.bunker && tombstone.pos.isEqualTo(this.colony.bunker.anchor)) continue; this.colony.logisticsNetwork.requestOutput(tombstone, {resourceType: 'all'}); } } diff --git a/src/assimilation/Assimilator_obfuscated.js b/src/assimilation/Assimilator_obfuscated.js index eb0a8166c..f0911ede0 100644 --- a/src/assimilation/Assimilator_obfuscated.js +++ b/src/assimilation/Assimilator_obfuscated.js @@ -1,4 +1,4 @@ -var _0x1e36=['R2VuZXJhdGluZyBjaGVja3N1bSBmb3IgQGFzc2ltaWxhdGlvbkxvY2tlZCBvYmplY3RzLi4u','c3RyaW5naWZ5','cmVwbGFjZQ==','cmVkdWNl','U3RyaW5naWZpZWQgY29kZTo=','c2hhMjU2IGhhc2g6','UGFydGlhbCBjaGVja3N1bTog','dG9TdHJpbmc=','RmluYWwgY2hlY2tzdW06ICAgICA=','RmluYWwgaGV4IGNoZWNrc3VtOiA=','YXNzaW1pbGF0b3I=','ZGVmYXVsdHM=','bWVtb3J5','dmFsaWRhdGU=','cHVzaA==','Z2VuZXJhdGVTdHJpbmdIYXNo','bWF0Y2g=','Y29uY2F0','am9pbg==','bG9n','Z2VuZXJhdGVDaGVja3N1bQ=='];(function(_0x311ce3,_0x37f24b){var _0x432f6f=function(_0x5c1634){while(--_0x5c1634){_0x311ce3['push'](_0x311ce3['shift']());}};var _0x221f8e=function(){var _0x40c8d2={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x51ffa9,_0x27c60b,_0x297c04,_0x1f74f3){_0x1f74f3=_0x1f74f3||{};var _0x46f9b2=_0x27c60b+'='+_0x297c04;var _0x444e84=0x0;for(var _0x444e84=0x0,_0x4adabe=_0x51ffa9['length'];_0x444e84<_0x4adabe;_0x444e84++){var _0x260f8f=_0x51ffa9[_0x444e84];_0x46f9b2+=';\x20'+_0x260f8f;var _0xe163e=_0x51ffa9[_0x260f8f];_0x51ffa9['push'](_0xe163e);_0x4adabe=_0x51ffa9['length'];if(_0xe163e!==!![]){_0x46f9b2+='='+_0xe163e;}}_0x1f74f3['cookie']=_0x46f9b2;},'removeCookie':function(){return'dev';},'getCookie':function(_0x564f44,_0x10e050){_0x564f44=_0x564f44||function(_0x508cd5){return _0x508cd5;};var _0x1d2545=_0x564f44(new RegExp('(?:^|;\x20)'+_0x10e050['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));var _0x49f14c=function(_0x2f49c8,_0x5b3c3c){_0x2f49c8(++_0x5b3c3c);};_0x49f14c(_0x432f6f,_0x37f24b);return _0x1d2545?decodeURIComponent(_0x1d2545[0x1]):undefined;}};var _0x4278bc=function(){var _0x47bc11=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x47bc11['test'](_0x40c8d2['removeCookie']['toString']());};_0x40c8d2['updateCookie']=_0x4278bc;var _0x3fe3e6='';var _0xd062cf=_0x40c8d2['updateCookie']();if(!_0xd062cf){_0x40c8d2['setCookie'](['*'],'counter',0x1);}else if(_0xd062cf){_0x3fe3e6=_0x40c8d2['getCookie'](null,'counter');}else{_0x40c8d2['removeCookie']();}};_0x221f8e();}(_0x1e36,0x199));var _0x39ef=function(_0x19a6c6,_0x70e917){_0x19a6c6=_0x19a6c6-0x0;var _0x496af3=_0x1e36[_0x19a6c6];if(_0x39ef['DBLWXn']===undefined){(function(){var _0x230650=function(){var _0x27dcce;try{_0x27dcce=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');')();}catch(_0x4af125){_0x27dcce=window;}return _0x27dcce;};var _0x3bdfa3=_0x230650();var _0x41af27='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x3bdfa3['atob']||(_0x3bdfa3['atob']=function(_0x1c07af){var _0x208f36=String(_0x1c07af)['replace'](/=+$/,'');for(var _0x10c903=0x0,_0x6853cb,_0x345339,_0xeac48e=0x0,_0x5c06a7='';_0x345339=_0x208f36['charAt'](_0xeac48e++);~_0x345339&&(_0x6853cb=_0x10c903%0x4?_0x6853cb*0x40+_0x345339:_0x345339,_0x10c903++%0x4)?_0x5c06a7+=String['fromCharCode'](0xff&_0x6853cb>>(-0x2*_0x10c903&0x6)):0x0){_0x345339=_0x41af27['indexOf'](_0x345339);}return _0x5c06a7;});}());_0x39ef['vEfjod']=function(_0x99d384){var _0x4c8c2a=atob(_0x99d384);var _0x53456e=[];for(var _0x25c95e=0x0,_0x4f1cfe=_0x4c8c2a['length'];_0x25c95e<_0x4f1cfe;_0x25c95e++){_0x53456e+='%'+('00'+_0x4c8c2a['charCodeAt'](_0x25c95e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x53456e);};_0x39ef['qoJZNY']={};_0x39ef['DBLWXn']=!![];}var _0x5ae0a6=_0x39ef['qoJZNY'][_0x19a6c6];if(_0x5ae0a6===undefined){var _0x2f53f4=function(_0x30256d){this['WOeyVE']=_0x30256d;this['dKMpAB']=[0x1,0x0,0x0];this['wSDcem']=function(){return'newState';};this['htrfUt']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['lBJiIu']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x2f53f4['prototype']['GmTTXp']=function(){var _0x1e363c=new RegExp(this['htrfUt']+this['lBJiIu']);var _0x381071=_0x1e363c['test'](this['wSDcem']['toString']())?--this['dKMpAB'][0x1]:--this['dKMpAB'][0x0];return this['jYomPe'](_0x381071);};_0x2f53f4['prototype']['jYomPe']=function(_0x164dae){if(!Boolean(~_0x164dae)){return _0x164dae;}return this['AXQPzv'](this['WOeyVE']);};_0x2f53f4['prototype']['AXQPzv']=function(_0x43c027){for(var _0x424fa5=0x0,_0x27bc1c=this['dKMpAB']['length'];_0x424fa5<_0x27bc1c;_0x424fa5++){this['dKMpAB']['push'](Math['round'](Math['random']()));_0x27bc1c=this['dKMpAB']['length'];}return _0x43c027(this['dKMpAB'][0x0]);};new _0x2f53f4(_0x39ef)['GmTTXp']();_0x496af3=_0x39ef['vEfjod'](_0x496af3);_0x39ef['qoJZNY'][_0x19a6c6]=_0x496af3;}else{_0x496af3=_0x5ae0a6;}return _0x496af3;};var _0x469053=function(){var _0x5dcf5a=!![];return function(_0x5af8c9,_0x36464d){var _0x21f94e=_0x5dcf5a?function(){if(_0x36464d){var _0x3bfd4f=_0x36464d['apply'](_0x5af8c9,arguments);_0x36464d=null;return _0x3bfd4f;}}:function(){};_0x5dcf5a=![];return _0x21f94e;};}();var _0x3b7284=_0x469053(this,function(){var _0x464f83=function(){return'\x64\x65\x76';},_0x238e3c=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x44245b=function(){var _0xe52512=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0xe52512['\x74\x65\x73\x74'](_0x464f83['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x34f68b=function(){var _0x57478b=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x57478b['\x74\x65\x73\x74'](_0x238e3c['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x2160db=function(_0x2027bc){var _0x4bc27b=~-0x1>>0x1+0xff%0x0;if(_0x2027bc['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0x4bc27b)){_0x270456(_0x2027bc);}};var _0x270456=function(_0x5af4ef){var _0x5d78ba=~-0x4>>0x1+0xff%0x0;if(_0x5af4ef['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x5d78ba){_0x2160db(_0x5af4ef);}};if(!_0x44245b()){if(!_0x34f68b()){_0x2160db('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x2160db('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x2160db('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x3b7284();// +var _0x81b6=['RmluYWwgaGV4IGNoZWNrc3VtOiA=','YXNzaW1pbGF0b3I=','ZGVmYXVsdHM=','bWVtb3J5','dmFsaWRhdGU=','cHVzaA==','Z2VuZXJhdGVTdHJpbmdIYXNo','bWF0Y2g=','Y29uY2F0','am9pbg==','bG9n','Z2VuZXJhdGVDaGVja3N1bQ==','R2VuZXJhdGluZyBjaGVja3N1bSBmb3IgQGFzc2ltaWxhdGlvbkxvY2tlZCBvYmplY3RzLi4u','c3RyaW5naWZ5','cmVwbGFjZQ==','cmVkdWNl','U3RyaW5naWZpZWQgY29kZTo=','c2hhMjU2IGhhc2g6','UGFydGlhbCBjaGVja3N1bTog','dG9TdHJpbmc=','RmluYWwgY2hlY2tzdW06ICAgICA='];(function(_0x14dab7,_0x4b4d48){var _0x6ee159=function(_0x26ee90){while(--_0x26ee90){_0x14dab7['push'](_0x14dab7['shift']());}};var _0x5f1e1c=function(){var _0x288596={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x4fa842,_0x486067,_0x480322,_0x96a852){_0x96a852=_0x96a852||{};var _0x78b731=_0x486067+'='+_0x480322;var _0x57e1fa=0x0;for(var _0x57e1fa=0x0,_0x3eb630=_0x4fa842['length'];_0x57e1fa<_0x3eb630;_0x57e1fa++){var _0x4a2cb6=_0x4fa842[_0x57e1fa];_0x78b731+=';\x20'+_0x4a2cb6;var _0x3651ea=_0x4fa842[_0x4a2cb6];_0x4fa842['push'](_0x3651ea);_0x3eb630=_0x4fa842['length'];if(_0x3651ea!==!![]){_0x78b731+='='+_0x3651ea;}}_0x96a852['cookie']=_0x78b731;},'removeCookie':function(){return'dev';},'getCookie':function(_0xcc770b,_0x101f67){_0xcc770b=_0xcc770b||function(_0xc1793){return _0xc1793;};var _0x5f2a0f=_0xcc770b(new RegExp('(?:^|;\x20)'+_0x101f67['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));var _0x499dde=function(_0x52746a,_0x69c56e){_0x52746a(++_0x69c56e);};_0x499dde(_0x6ee159,_0x4b4d48);return _0x5f2a0f?decodeURIComponent(_0x5f2a0f[0x1]):undefined;}};var _0x5869e9=function(){var _0x3aec41=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x3aec41['test'](_0x288596['removeCookie']['toString']());};_0x288596['updateCookie']=_0x5869e9;var _0x3f7c6d='';var _0x17bf50=_0x288596['updateCookie']();if(!_0x17bf50){_0x288596['setCookie'](['*'],'counter',0x1);}else if(_0x17bf50){_0x3f7c6d=_0x288596['getCookie'](null,'counter');}else{_0x288596['removeCookie']();}};_0x5f1e1c();}(_0x81b6,0x1cf));var _0x51ab=function(_0x5144bc,_0x430b5c){_0x5144bc=_0x5144bc-0x0;var _0x9f429a=_0x81b6[_0x5144bc];if(_0x51ab['lVcElJ']===undefined){(function(){var _0xff4178=function(){var _0xa9bd5d;try{_0xa9bd5d=Function('return\x20(function()\x20'+'{}.constructor(\x22return\x20this\x22)(\x20)'+');')();}catch(_0xa21a21){_0xa9bd5d=window;}return _0xa9bd5d;};var _0x31c2ae=_0xff4178();var _0xe8295b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x31c2ae['atob']||(_0x31c2ae['atob']=function(_0x5027fe){var _0x383dcc=String(_0x5027fe)['replace'](/=+$/,'');for(var _0x35b7cc=0x0,_0x1381a5,_0x31f23e,_0x3dd2a5=0x0,_0x2c2980='';_0x31f23e=_0x383dcc['charAt'](_0x3dd2a5++);~_0x31f23e&&(_0x1381a5=_0x35b7cc%0x4?_0x1381a5*0x40+_0x31f23e:_0x31f23e,_0x35b7cc++%0x4)?_0x2c2980+=String['fromCharCode'](0xff&_0x1381a5>>(-0x2*_0x35b7cc&0x6)):0x0){_0x31f23e=_0xe8295b['indexOf'](_0x31f23e);}return _0x2c2980;});}());_0x51ab['nvNkkG']=function(_0x16b9e0){var _0x3cec2f=atob(_0x16b9e0);var _0x24d466=[];for(var _0x1d5a40=0x0,_0x59b1a6=_0x3cec2f['length'];_0x1d5a40<_0x59b1a6;_0x1d5a40++){_0x24d466+='%'+('00'+_0x3cec2f['charCodeAt'](_0x1d5a40)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x24d466);};_0x51ab['MkotxQ']={};_0x51ab['lVcElJ']=!![];}var _0x5c4d33=_0x51ab['MkotxQ'][_0x5144bc];if(_0x5c4d33===undefined){var _0x39f31c=function(_0x35bbd0){this['IOsLcz']=_0x35bbd0;this['zuRxLy']=[0x1,0x0,0x0];this['ouFXFV']=function(){return'newState';};this['iSlEJw']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';this['xMZtcv']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x39f31c['prototype']['xOczqz']=function(){var _0x345bc1=new RegExp(this['iSlEJw']+this['xMZtcv']);var _0x28d82a=_0x345bc1['test'](this['ouFXFV']['toString']())?--this['zuRxLy'][0x1]:--this['zuRxLy'][0x0];return this['LxDDDD'](_0x28d82a);};_0x39f31c['prototype']['LxDDDD']=function(_0xba4379){if(!Boolean(~_0xba4379)){return _0xba4379;}return this['UVJKUZ'](this['IOsLcz']);};_0x39f31c['prototype']['UVJKUZ']=function(_0x5e4909){for(var _0xcb2a9b=0x0,_0x59a30c=this['zuRxLy']['length'];_0xcb2a9b<_0x59a30c;_0xcb2a9b++){this['zuRxLy']['push'](Math['round'](Math['random']()));_0x59a30c=this['zuRxLy']['length'];}return _0x5e4909(this['zuRxLy'][0x0]);};new _0x39f31c(_0x51ab)['xOczqz']();_0x9f429a=_0x51ab['nvNkkG'](_0x9f429a);_0x51ab['MkotxQ'][_0x5144bc]=_0x9f429a;}else{_0x9f429a=_0x5c4d33;}return _0x9f429a;};var _0x1c274d=function(){var _0x253a89=!![];return function(_0x732e05,_0x20d74d){var _0x1016e0=_0x253a89?function(){if(_0x20d74d){var _0x29e85b=_0x20d74d['apply'](_0x732e05,arguments);_0x20d74d=null;return _0x29e85b;}}:function(){};_0x253a89=![];return _0x1016e0;};}();var _0x162d79=_0x1c274d(this,function(){var _0x2d2bfb=function(){return'\x64\x65\x76';},_0x4c3732=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x981158=function(){var _0x57b080=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x57b080['\x74\x65\x73\x74'](_0x2d2bfb['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x219af0=function(){var _0x441e3a=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x441e3a['\x74\x65\x73\x74'](_0x4c3732['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x2cc193=function(_0x5f41ea){var _0x503809=~-0x1>>0x1+0xff%0x0;if(_0x5f41ea['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0x503809)){_0xe42b77(_0x5f41ea);}};var _0xe42b77=function(_0x56465b){var _0x52cace=~-0x4>>0x1+0xff%0x0;if(_0x56465b['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x52cace){_0x2cc193(_0x56465b);}};if(!_0x981158()){if(!_0x219af0()){_0x2cc193('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x2cc193('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x2cc193('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x162d79();// // Assimilator_obfuscated.js: this file is intentially obfuscated to prevent tampering. // // Q: What is assimilation? @@ -40,4 +40,4 @@ var _0x1e36=['R2VuZXJhdGluZyBjaGVja3N1bSBmb3IgQGFzc2ltaWxhdGlvbkxvY2tlZCBvYmplY3 // A: This code is self-defending, so any modification to it will likely break the script. // javascript-obfuscator:disable import{sha256}from'../algorithms/sha256';// javascript-obfuscator:enable -let __lockedObjects__=[];let _0x5ce6efd=[];const defaultAssimilatorMemory={};export default class _Assimilator{constructor(){if(!Memory[_0x39ef('0x0')]){Memory[_0x39ef('0x0')]={};}_[_0x39ef('0x1')](Memory[_0x39ef('0x0')],defaultAssimilatorMemory);this[_0x39ef('0x2')]=Memory[_0x39ef('0x0')];}[_0x39ef('0x3')](_0x210b3c){__lockedObjects__[_0x39ef('0x4')](_0x210b3c);_0x5ce6efd[_0x39ef('0x4')](_0x210b3c);}[_0x39ef('0x5')](_0x4ddcd5,_0x19202a=![]){let _0x1debb6=[];let _0x37528f=_0x4ddcd5[_0x39ef('0x6')](/(\.[a-zA-Z]*\()/gm)||[];let _0x4edd19=_0x4ddcd5[_0x39ef('0x6')](/new [a-zA-Z]*\(/gm)||[];_0x1debb6=_0x1debb6[_0x39ef('0x7')](_0x37528f,_0x4edd19);let _0x3e69a5=_0x1debb6[_0x39ef('0x8')]('$');if(_0x19202a)console[_0x39ef('0x9')](_0x3e69a5);return _0x3e69a5;}[_0x39ef('0xa')](_0x171ab3=![]){let _0x4b5adb=0x0;if(_0x171ab3)console[_0x39ef('0x9')](_0x39ef('0xb'));for(let _0x4c3a64 of _0x5ce6efd){let _0x248353=/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm;let _0x23e979=JSON[_0x39ef('0xc')](''+_0x4c3a64);_0x23e979=_0x23e979[_0x39ef('0xd')](_0x248353,'');_0x23e979=_0x23e979[_0x39ef('0xd')](/\s/gm,'');let _0x5bb552=sha256(_0x23e979);_0x4b5adb+=_0x5bb552[_0x39ef('0xe')]((_0x21d5ae,_0xfb3793)=>0x2*_0x21d5ae+_0xfb3793);if(_0x171ab3){console[_0x39ef('0x9')](_0x39ef('0xf'));console[_0x39ef('0x9')](_0x23e979);console[_0x39ef('0x9')](_0x39ef('0x10'));console[_0x39ef('0x9')](_0x5bb552);console[_0x39ef('0x9')](_0x39ef('0x11')+_0x4b5adb);}}let _0x1486ae='0x'+_0x4b5adb[_0x39ef('0x12')](0x10);if(_0x171ab3){console[_0x39ef('0x9')](_0x39ef('0x13')+_0x4b5adb);console[_0x39ef('0x9')](_0x39ef('0x14')+_0x1486ae);}return _0x1486ae;}} \ No newline at end of file +let __lockedObjects__=[];let _0x5ce6efd=[];const defaultAssimilatorMemory={};export default class _Assimilator{constructor(){if(!Memory[_0x51ab('0x0')]){Memory[_0x51ab('0x0')]={};}_[_0x51ab('0x1')](Memory[_0x51ab('0x0')],defaultAssimilatorMemory);this[_0x51ab('0x2')]=Memory[_0x51ab('0x0')];}[_0x51ab('0x3')](_0x267abf){__lockedObjects__[_0x51ab('0x4')](_0x267abf);_0x5ce6efd[_0x51ab('0x4')](_0x267abf);}[_0x51ab('0x5')](_0x2d9df3,_0x110c44=![]){let _0x2801ec=[];let _0x480de1=_0x2d9df3[_0x51ab('0x6')](/(\.[a-zA-Z]*\()/gm)||[];let _0x207d08=_0x2d9df3[_0x51ab('0x6')](/new [a-zA-Z]*\(/gm)||[];_0x2801ec=_0x2801ec[_0x51ab('0x7')](_0x480de1,_0x207d08);let _0x5af8ca=_0x2801ec[_0x51ab('0x8')]('$');if(_0x110c44)console[_0x51ab('0x9')](_0x5af8ca);return _0x5af8ca;}[_0x51ab('0xa')](_0x366fa7=![]){let _0x4d9926=0x0;if(_0x366fa7)console[_0x51ab('0x9')](_0x51ab('0xb'));for(let _0x16136a of _0x5ce6efd){let _0x43b5b7=/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm;let _0x4ba4f5=JSON[_0x51ab('0xc')](''+_0x16136a);_0x4ba4f5=_0x4ba4f5[_0x51ab('0xd')](_0x43b5b7,'');_0x4ba4f5=_0x4ba4f5[_0x51ab('0xd')](/\s/gm,'');let _0x578324=sha256(_0x4ba4f5);_0x4d9926+=_0x578324[_0x51ab('0xe')]((_0x39ebbf,_0x197300)=>0x2*_0x39ebbf+_0x197300);if(_0x366fa7){console[_0x51ab('0x9')](_0x51ab('0xf'));console[_0x51ab('0x9')](_0x4ba4f5);console[_0x51ab('0x9')](_0x51ab('0x10'));console[_0x51ab('0x9')](_0x578324);console[_0x51ab('0x9')](_0x51ab('0x11')+_0x4d9926);}}let _0x21b646='0x'+_0x4d9926[_0x51ab('0x12')](0x10);if(_0x366fa7){console[_0x51ab('0x9')](_0x51ab('0x13')+_0x4d9926);console[_0x51ab('0x9')](_0x51ab('0x14')+_0x21b646);}return _0x21b646;}} \ No newline at end of file diff --git a/src/caching/GlobalCache.ts b/src/caching/GlobalCache.ts index 631ab243a..b9e4dc8fa 100644 --- a/src/caching/GlobalCache.ts +++ b/src/caching/GlobalCache.ts @@ -63,7 +63,7 @@ export class $ { // $ = cash = cache... get it? :D static set(thing: T, key: K, callback: () => (T[K] & (undefined | HasID | HasID[])), - timeout = SHORT_CACHE_TIMEOUT) { + timeout = CACHE_TIMEOUT) { let cacheKey = thing.ref + '$' + key; if (!_cache.things[cacheKey] || Game.time > _cache.expiration[cacheKey]) { // Recache if new entry or entry is expired diff --git a/src/console/globals.ts b/src/console/globals.ts index 2a70fab12..840e37bc0 100644 --- a/src/console/globals.ts +++ b/src/console/globals.ts @@ -1,5 +1,5 @@ declare const __VERSION__: string; -global.__VERSION__ = '0.4.1'; +global.__VERSION__ = '0.5.0'; declare function deref(ref: string): RoomObject | null; diff --git a/src/hiveClusters/hatchery.ts b/src/hiveClusters/hatchery.ts index 56694fdf9..b98257538 100644 --- a/src/hiveClusters/hatchery.ts +++ b/src/hiveClusters/hatchery.ts @@ -12,12 +12,12 @@ import {Visualizer} from '../visuals/Visualizer'; import {Stats} from '../stats/stats'; import {Zerg} from '../zerg/Zerg'; import {log} from '../console/log'; -import {$} from '../caching/GlobalCache'; import {energyStructureOrder, getPosFromBunkerCoord, insideBunkerBounds} from '../roomPlanner/layouts/bunker'; import {BunkerQueenOverlord} from '../overlords/core/queen_bunker'; import {Overlord} from '../overlords/Overlord'; import {Movement} from '../movement/Movement'; import {Pathing} from '../movement/Pathing'; +import {$} from '../caching/GlobalCache'; const ERR_ROOM_ENERGY_CAPACITY_NOT_ENOUGH = -20; const ERR_SPECIFIED_SPAWN_BUSY = -21; @@ -40,29 +40,6 @@ interface SpawnOrder { options: SpawnOptions | undefined, } -function computeEnergyStructures(hatchery: Hatchery): (StructureSpawn | StructureExtension)[] { - if (hatchery.colony.layout == 'bunker') { - let positions = _.map(energyStructureOrder, coord => getPosFromBunkerCoord(coord, hatchery.colony)); - let spawnsAndExtensions: (StructureSpawn | StructureExtension)[] = []; - spawnsAndExtensions = spawnsAndExtensions.concat(hatchery.spawns, hatchery.extensions); - let energyStructures: (StructureSpawn | StructureExtension)[] = []; - for (let pos of positions) { - let structure = _.find(pos.lookFor(LOOK_STRUCTURES), s => - s.structureType == STRUCTURE_SPAWN - || s.structureType == STRUCTURE_EXTENSION) as StructureSpawn | StructureExtension; - if (structure) { - energyStructures.push(_.remove(spawnsAndExtensions, s => s.id == structure.id)[0]); - } - } - return energyStructures.concat(spawnsAndExtensions); - } else { - // Ugly workaround to [].concat() throwing a temper tantrum - let spawnsAndExtensions: (StructureSpawn | StructureExtension)[] = []; - spawnsAndExtensions = spawnsAndExtensions.concat(hatchery.spawns, hatchery.extensions); - return _.sortBy(spawnsAndExtensions, structure => structure.pos.getRangeTo(hatchery.idlePos)); - } -} - export interface HatcheryMemory { stats: { usage: number; @@ -84,6 +61,7 @@ export class Hatchery extends HiveCluster { spawns: StructureSpawn[]; // List of spawns in the hatchery availableSpawns: StructureSpawn[]; // Spawns that are available to make stuff right now extensions: StructureExtension[]; // List of extensions in the hatchery + energyStructures: (StructureSpawn | StructureExtension)[]; // All spawns and extensions link: StructureLink | undefined; // The input link towers: StructureTower[]; // All towers that aren't in the command center battery: StructureContainer | undefined; // The container to provide an energy buffer @@ -112,10 +90,12 @@ export class Hatchery extends HiveCluster { this.extensions = colony.extensions; if (this.colony.layout == 'bunker') { this.battery = _.first(_.filter(this.room.containers, cont => insideBunkerBounds(cont.pos, this.colony))); + this.energyStructures = $.structures(this, 'energyStructures', () => this.computeEnergyStructures()); } else { this.link = this.pos.findClosestByLimitedRange(colony.availableLinks, 2); this.colony.linkNetwork.claimLink(this.link); this.battery = this.pos.findClosestByLimitedRange(this.room.containers, 2); + this.energyStructures = (<(StructureSpawn | StructureExtension)[]>[]).concat(this.spawns, this.extensions); } if (colony.commandCenter) { this.towers = _.difference(colony.towers, colony.commandCenter.towers); @@ -167,6 +147,29 @@ export class Hatchery extends HiveCluster { }; } + private computeEnergyStructures(): (StructureSpawn | StructureExtension)[] { + if (this.colony.layout == 'bunker') { + let positions = _.map(energyStructureOrder, coord => getPosFromBunkerCoord(coord, this.colony)); + let spawnsAndExtensions: (StructureSpawn | StructureExtension)[] = []; + spawnsAndExtensions = spawnsAndExtensions.concat(this.spawns, this.extensions); + let energyStructures: (StructureSpawn | StructureExtension)[] = []; + for (let pos of positions) { + let structure = _.find(pos.lookFor(LOOK_STRUCTURES), s => + s.structureType == STRUCTURE_SPAWN + || s.structureType == STRUCTURE_EXTENSION) as StructureSpawn | StructureExtension; + if (structure) { + energyStructures.push(_.remove(spawnsAndExtensions, s => s.id == structure.id)[0]); + } + } + return energyStructures.concat(spawnsAndExtensions); + } else { + // Ugly workaround to [].concat() throwing a temper tantrum + let spawnsAndExtensions: (StructureSpawn | StructureExtension)[] = []; + spawnsAndExtensions = spawnsAndExtensions.concat(this.spawns, this.extensions); + return _.sortBy(spawnsAndExtensions, structure => structure.pos.getRangeTo(this.idlePos)); + } + } + /* Request more energy when appropriate either via link or hauler */ private registerEnergyRequests(): void { // Register requests for input into the hatchery (goes on colony store group) @@ -183,8 +186,9 @@ export class Hatchery extends HiveCluster { let refillSpawns = _.filter(this.spawns, spawn => spawn.energy < spawn.energyCapacity); let refillExtensions = _.filter(this.extensions, extension => extension.energy < extension.energyCapacity); let refillTowers = _.filter(this.towers, tower => tower.energy < this.settings.refillTowersBelow); - _.forEach(refillSpawns, spawn => this.transportRequests.requestInput(spawn, Priority.NormalLow)); - _.forEach(refillExtensions, extension => this.transportRequests.requestInput(extension, Priority.NormalLow)); + _.forEach(this.energyStructures, struct => this.transportRequests.requestInput(struct, Priority.NormalLow)); + // _.forEach(refillSpawns, spawn => this.transportRequests.requestInput(spawn, Priority.NormalLow)); + // _.forEach(refillExtensions, extension => this.transportRequests.requestInput(extension, Priority.NormalLow)); // _.forEach(refillTowers, tower => // this.transportRequests.requestInput(tower, tower.energy < this.settings.refillTowersBelow ? // Priority.Low : Priority.Low)); // TODO: made change here @@ -201,10 +205,6 @@ export class Hatchery extends HiveCluster { return (roleName + '_' + i); }; - get energyStructures(): (StructureSpawn | StructureExtension)[] { - return $.structures(this, 'energyStructures', () => computeEnergyStructures(this)); - } - private spawnCreep(protoCreep: protoCreep, options: SpawnRequestOptions = {}): number { // get a spawn to use let spawnToUse: StructureSpawn | undefined; diff --git a/src/logistics/TradeNetwork.ts b/src/logistics/TradeNetwork.ts index a569c04c5..a56892548 100644 --- a/src/logistics/TradeNetwork.ts +++ b/src/logistics/TradeNetwork.ts @@ -1,6 +1,6 @@ import {Mem} from '../Memory'; import {profile} from '../profiler/decorator'; -import {maxBy, minBy} from '../utilities/utils'; +import {maxBy, minBy, printRoomName} from '../utilities/utils'; import {alignedNewline, bullet, leftArrow, rightArrow} from '../utilities/stringConstants'; import {log} from '../console/log'; import {assimilationLocked} from '../assimilation/decorator'; @@ -302,10 +302,10 @@ export class TraderJoe implements ITradeNetwork { let msg: string; if (order.type == ORDER_SELL) { msg = `${roomName} ${leftArrow} ${amount} ${order.resourceType} ${leftArrow} ` + - `${order.roomName} (result: ${response})`; + `${printRoomName(order.roomName!)} (result: ${response})`; } else { msg = `${roomName} ${rightArrow} ${amount} ${order.resourceType} ${rightArrow} ` + - `${order.roomName} (result: ${response})`; + `${printRoomName(order.roomName!)} (result: ${response})`; } this.notify(msg); } diff --git a/src/movement/Movement.ts b/src/movement/Movement.ts index 8c5e464c5..2f7914900 100644 --- a/src/movement/Movement.ts +++ b/src/movement/Movement.ts @@ -277,9 +277,9 @@ export class Movement { private static getPushDirection(pusher: Zerg | Creep, pushee: Zerg | Creep): DirectionConstant { let possiblePositions = pushee.pos.availableNeighbors(); - let preferredPositions: RoomPosition[] = []; pushee = normalizeZerg(pushee); if (isZerg(pushee)) { + let preferredPositions: RoomPosition[] = []; if (pushee.task && pushee.task.isWorking) { // push creeps out of the way when they're doing task let targetPos = pushee.task.targetPos; let targetRange = pushee.task.settings.targetRange; diff --git a/src/overlords/core/manager.ts b/src/overlords/core/manager.ts index 13f5c439c..6956baa92 100644 --- a/src/overlords/core/manager.ts +++ b/src/overlords/core/manager.ts @@ -10,7 +10,9 @@ import {StoreStructure} from '../../declarations/typeGuards'; import {TransportRequestGroup} from '../../logistics/TransportRequestGroup'; import {Energetics} from '../../logistics/Energetics'; import {SpawnRequestOptions} from '../../hiveClusters/hatchery'; -import {hasMinerals} from '../../utilities/utils'; +import {hasMinerals, minBy} from '../../utilities/utils'; +import {$} from '../../caching/GlobalCache'; +import {WorkerOverlord} from './worker'; export const ManagerSetup = new CreepSetup('manager', { pattern : [CARRY, CARRY, MOVE], @@ -22,12 +24,19 @@ export const ManagerStationarySetup = new CreepSetup('manager', { sizeLimit: 8, }); +export const ManagerWorkerStationarySetup = new CreepSetup('manager', { + pattern : [WORK, WORK, WORK, WORK, CARRY, CARRY], + sizeLimit: 8, +}); + @profile export class CommandCenterOverlord extends Overlord { + mode: 'twoPart' | 'bunker'; managers: Zerg[]; commandCenter: CommandCenter; transportRequests: TransportRequestGroup; + managerRepairTarget: StructureRampart | StructureWall | undefined; private depositTarget: StructureTerminal | StructureStorage; @@ -35,12 +44,20 @@ export class CommandCenterOverlord extends Overlord { super(commandCenter, 'manager', priority); this.commandCenter = commandCenter; this.transportRequests = this.commandCenter.transportRequests; + this.mode = this.colony.layout; this.managers = this.zerg(ManagerSetup.role); - if (this.commandCenter.terminal && _.sum(this.commandCenter.terminal.store) < TERMINAL_CAPACITY + 1000) { + if (this.commandCenter.terminal && _.sum(this.commandCenter.terminal.store) < TERMINAL_CAPACITY - 1000) { this.depositTarget = this.commandCenter.terminal; } else { this.depositTarget = this.commandCenter.storage; } + if (this.colony.bunker) { + let anchor = this.colony.bunker.anchor; + $.set(this, 'managerRepairTarget', + () => minBy(_.filter(anchor.findInRange(anchor.room!.barriers, 3), + b => b.hits < WorkerOverlord.settings.barrierHits[this.colony.level]), + b => b.hits)); + } } init() { @@ -49,6 +66,9 @@ export class CommandCenterOverlord extends Overlord { if (this.colony.bunker && this.colony.bunker.coreSpawn && this.colony.level == 8 && !this.colony.roomPlanner.memory.relocating) { setup = ManagerStationarySetup; + if (this.managerRepairTarget && this.colony.assets.energy > WorkerOverlord.settings.fortifyDutyThreshold) { + setup = ManagerWorkerStationarySetup; // use working manager body if you have something to repair + } spawnRequestOptions = { spawn : this.colony.bunker.coreSpawn, directions: [this.colony.bunker.coreSpawn.pos.getDirectionTo(this.colony.bunker.anchor)] @@ -57,6 +77,16 @@ export class CommandCenterOverlord extends Overlord { this.wishlist(1, setup, {options: spawnRequestOptions}); } + private unloadCarry(manager: Zerg): boolean { + // Move anything you are currently holding to deposit location + if (_.sum(manager.carry) > 0) { + manager.task = Tasks.transferAll(this.depositTarget); + return true; + } else { + return false; + } + } + private supplyActions(manager: Zerg) { let request = this.transportRequests.getPrioritizedClosestRequest(manager.pos, 'supply'); if (request) { @@ -114,6 +144,7 @@ export class CommandCenterOverlord extends Overlord { // Move energy from storage to terminal if there is not enough in terminal or if there's terminal evacuation if (terminal.energy < Energetics.settings.terminal.energy.equilibrium - tolerance || storage.energy > storageEnergyCap) { + if (this.unloadCarry(manager)) return true; manager.task = Tasks.withdraw(storage); manager.task.parent = Tasks.transfer(terminal); return true; @@ -121,6 +152,7 @@ export class CommandCenterOverlord extends Overlord { // Move energy from terminal to storage if there is too much in terminal and there is space in storage if (terminal.energy > Energetics.settings.terminal.energy.equilibrium + tolerance && _.sum(storage.store) < storageEnergyCap) { + if (this.unloadCarry(manager)) return true; manager.task = Tasks.withdraw(terminal); manager.task.parent = Tasks.transfer(storage); return true; @@ -138,6 +170,7 @@ export class CommandCenterOverlord extends Overlord { // Move all non-energy resources from storage to terminal for (let resourceType in storage.store) { if (resourceType != RESOURCE_ENERGY && storage.store[resourceType]! > 0) { + if (this.unloadCarry(manager)) return true; manager.task = Tasks.withdraw(storage, resourceType); manager.task.parent = Tasks.transfer(terminal, resourceType); return true; @@ -153,6 +186,12 @@ export class CommandCenterOverlord extends Overlord { manager.task = Tasks.transferAll(this.depositTarget).fork(Tasks.pickup(resources[0])); return true; } + // Look for tombstones at position + let tombstones = manager.pos.lookFor(LOOK_TOMBSTONES); + if (tombstones.length > 0) { + manager.task = Tasks.transferAll(this.depositTarget).fork(Tasks.withdrawAll(tombstones[0])); + return true; + } return false; } @@ -176,9 +215,7 @@ export class CommandCenterOverlord extends Overlord { if (this.deathActions(manager)) return; } // Pick up any dropped resources on ground - if (manager.pos.lookFor(LOOK_RESOURCES).length > 0) { - if (this.pickupActions(manager)) return; - } + if (this.pickupActions(manager)) return; // Move minerals from storage to terminal if needed if (hasMinerals(this.commandCenter.storage.store)) { if (this.moveMineralsToTerminal(manager)) return; @@ -199,6 +236,20 @@ export class CommandCenterOverlord extends Overlord { this.equalizeStorageAndTerminal(manager); } + private idleActions(manager: Zerg): void { + if (this.mode == 'bunker' && this.managerRepairTarget && manager.getActiveBodyparts(WORK) > 0) { + // Repair ramparts when idle + if (manager.carry.energy > 0) { + manager.repair(this.managerRepairTarget); + } else { + manager.withdraw(this.depositTarget); + } + } + if (!manager.pos.isEqualTo(this.commandCenter.idlePos)) { + manager.goTo(this.commandCenter.idlePos); + } + } + run() { for (let manager of this.managers) { // Get a task if needed @@ -209,9 +260,7 @@ export class CommandCenterOverlord extends Overlord { if (manager.hasValidTask) { manager.run(); } else { - if (!manager.pos.isEqualTo(this.commandCenter.idlePos)) { - manager.goTo(this.commandCenter.idlePos); - } + this.idleActions(manager); } } } diff --git a/src/overlords/core/worker.ts b/src/overlords/core/worker.ts index 247935402..9d85413c3 100644 --- a/src/overlords/core/worker.ts +++ b/src/overlords/core/worker.ts @@ -33,7 +33,7 @@ export class WorkerOverlord extends Overlord { nukeDefenseRamparts: StructureRampart[]; static settings = { - barrierHits : { // What HP to fortify barriers to at each RCL + barrierHits : { // What HP to fortify barriers to at each RCL 1: 3e+3, 2: 3e+3, 3: 1e+4, @@ -43,8 +43,9 @@ export class WorkerOverlord extends Overlord { 7: 1e+6, 8: 3e+7, }, - criticalHits: 1000, // barriers below this health get priority treatment - hitTolerance: 100000, // allowable spread in HP + criticalHits : 1000, // barriers below this health get priority treatment + hitTolerance : 100000, // allowable spread in HP + fortifyDutyThreshold: 500000, // ignore fortify duties until this amount of energy is present in the room }; constructor(colony: Colony, priority = OverlordPriority.ownedRoom.work) { @@ -142,11 +143,11 @@ export class WorkerOverlord extends Overlord { let repairTicks = _.sum(this.repairStructures, structure => structure.hitsMax - structure.hits) / REPAIR_POWER; let paveTicks = _.sum(this.colony.rooms, room => this.colony.roadLogistics.energyToRepave(room)); - let fortifyTicks = 0.25 * _.sum(this.fortifyStructures, + let fortifyTicks = 0; + if (this.colony.assets.energy > WorkerOverlord.settings.fortifyDutyThreshold) { + fortifyTicks = 0.25 * _.sum(this.fortifyStructures, barrier => WorkerOverlord.settings.barrierHits[this.colony.level] - barrier.hits) / REPAIR_POWER; - if (this.colony.storage!.energy < 500000) { - fortifyTicks = 0; // Ignore fortification duties below this energy level } // max constructionTicks for private server manually setting progress let numWorkers = Math.ceil(2 * (Math.max(constructionTicks, 0) + repairTicks + fortifyTicks) / @@ -268,41 +269,6 @@ export class WorkerOverlord extends Overlord { return true; } - // private rechargeActions(worker: Zerg): void { - // // Calculate recharge objects if needed (can't be placed in constructor because instantiation order - // if (this.rechargeObjects.length == 0) { - // let workerWithdrawLimit = this.colony.stage == ColonyStage.Larva ? 750 : 100; - // let rechargeObjects = _.compact([...this.colony.room.storageUnits, - // ...(this.colony.room.drops[RESOURCE_ENERGY] || []), - // ..._.map(this.colony.miningSites, site => site.output!), - // ...this.colony.tombstones]) as rechargeObjectType[]; - // this.rechargeObjects = _.filter(rechargeObjects, obj => isResource(obj) ? obj.amount > 0 : - // obj.energy > workerWithdrawLimit); - // } - // // Choose the target to maximize your energy gain subject to other targeting workers - // let target = maxBy(this.rechargeObjects, function (obj) { - // let amount = isResource(obj) ? obj.amount : obj.energy; - // let otherTargetingWorkers = _.map(obj.targetedBy, name => Game.zerg[name]); - // let resourceOutflux = _.sum(_.map(otherTargetingWorkers, - // other => other.carryCapacity - _.sum(other.carry))); - // amount = minMax(amount - resourceOutflux, 0, worker.carryCapacity); - // return amount / (worker.pos.getMultiRoomRangeTo(obj.pos) + 1); - // }); - // if (target) { - // if (isResource(target)) { - // worker.task = Tasks.pickup(target); - // } else { - // worker.task = Tasks.withdraw(target); - // } - // } else { - // // Harvest from a source if there is no recharge target available - // let emptyMiningSites = _.filter(this.colony.miningSites, site => - // site.overlord.miners.length < site.source.pos.availableNeighbors(true).length); - // let target = worker.pos.findClosestByMultiRoomRange(emptyMiningSites); - // if (target) worker.task = Tasks.harvest(target.source); - // } - // } - private handleWorker(worker: Zerg) { if (worker.carry.energy > 0) { // Upgrade controller if close to downgrade diff --git a/src/utilities/utils.ts b/src/utilities/utils.ts index 794b70b9e..35784ac45 100644 --- a/src/utilities/utils.ts +++ b/src/utilities/utils.ts @@ -2,6 +2,10 @@ import {alignedNewline, bullet} from './stringConstants'; +export function printRoomName(roomName: string): string { + return '' + roomName + ''; +} + export function minMax(value: number, min: number, max: number): number { return Math.max(Math.min(value, max), min); }