@shipload/sdk 2.0.0-rc7 → 2.0.0-rc9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/shipload.m.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from 'tslib';
2
- import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, UInt16, TimePoint, Int64, Bytes, Checksum512, APIClient } from '@wharfkit/antelope';
2
+ import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, Int64, UInt16, TimePoint, Bytes, Int32, Checksum512, APIClient } from '@wharfkit/antelope';
3
3
  import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
4
4
 
5
5
  const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAA0KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAlzdGFydGdhbWUABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCXN0YXRlX3JvdwABB2VuYWJsZWQEYm9vbAp1cGRhdGVnYW1lAAIIY29udHJhY3QEbmFtZQRtZXRhCWdhbWVfbWV0YQR3aXBlAAAHAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAACoeMxUBmVuYWJsZfMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2FibGUgcGxhdGZvcm0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gY29udHJhY3QuAICShql4zFQKZW5hYmxlZ2FtZfwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZWdhbWUKc3VtbWFyeTogJ0VuYWJsZS9kaXNiYWJsZSBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3Qu4KepkqI0NV0MZm91bmRjb21wYW55gwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm91bmRjb21wYW55CnN1bW1hcnk6ICdGb3VuZCBhIG5ldyBjb21wYW55JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRm91bmQgYSBuZXcgY29tcGFueSBpbiB0aGUgU2hpcGxvYWQgcGxhdGZvcm0gY29udHJhY3QuAABQ0rB8TcYJc3RhcnRnYW1l/wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3RhcnRnYW1lCnN1bW1hcnk6ICdTdGFydCBhIG5ldyBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKU3RhcnQgYSBuZXcgZ2FtZSBvZiBTaGlwbG9hZCBkZXBsb3llZCB0byBhIG5ldyBjb250cmFjdC4AgJKGqWxS1Qp1cGRhdGVnYW1ljQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdXBkYXRlZ2FtZQpzdW1tYXJ5OiAnVXBkYXRlIGdhbWUgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC4KCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0DAAAAwE9TJUUDaTY0AAALY29tcGFueV9yb3cAAAAAAKykYQNpNjQAAAhnYW1lX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwETU2hpcGxvYWQgKFBsYXRmb3JtKRNTaGlwbG9hZCAoUGxhdGZvcm0pAAAAAA==');
@@ -205,7 +205,7 @@ var platform = /*#__PURE__*/Object.freeze({
205
205
  Contract: Contract$1
206
206
  });
207
207
 
208
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhWCWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMABhJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhF3YXJlaG91c2VfbG9hZGVycwxsb2FkZXJfc3RhdHMSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8HaXNfaWRsZQRib29sDGN1cnJlbnRfdGFzawV0YXNrPxRjdXJyZW50X3Rhc2tfZWxhcHNlZAZ1aW50MzIWY3VycmVudF90YXNrX3JlbWFpbmluZwZ1aW50MzINcGVuZGluZ190YXNrcwZ0YXNrW10HaWRsZV9hdAt0aW1lX3BvaW50PwhzY2hlZHVsZQlzY2hlZHVsZT8KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdB2V4dHJhY3QABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIPZXh0cmFjdG9yX3N0YXRzAAQEcmF0ZQZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVkcmlsbAZ1aW50MTYLZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQlnZXRjb25maWcAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NAlnZXRuZWFyYnkAAwtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgppdGVtc19pbmZvAAEFaXRlbXMKaXRlbV9kZWZbXQRqb2luAAEHYWNjb3VudARuYW1lDGxvYWRlcl9zdGF0cwADBG1hc3MGdWludDMyBnRocnVzdAZ1aW50MTYIcXVhbnRpdHkFdWludDgQbG9jYXRpb25fZGVyaXZlZAADDHN0YXRpY19wcm9wcw9sb2NhdGlvbl9zdGF0aWMLZXBvY2hfcHJvcHMObG9jYXRpb25fZXBvY2gEc2l6ZQZ1aW50MTYObG9jYXRpb25fZXBvY2gAAwZhY3RpdmUEYm9vbAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OA1sb2NhdGlvbl9pbmZvAAIGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sDGxvY2F0aW9uX3JvdwAGAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdCHNjaGVkdWxlCXNjaGVkdWxlPw9sb2NhdGlvbl9zdGF0aWMABQZjb29yZHMLY29vcmRpbmF0ZXMEdHlwZQ1sb2NhdGlvbl90eXBlB3N1YnR5cGUFdWludDgFc2VlZDAFdWludDgFc2VlZDEFdWludDgMbW9kdWxlX2VudHJ5AAIEdHlwZQV1aW50OAlpbnN0YWxsZWQLY2FyZ29fc2VlZD8ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwZub3RpZnkAAQVldmVudAp0YXNrX2V2ZW50C3BsYXllcl9pbmZvAAYFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnNoaXBfY291bnQGdWludDY0D3dhcmVob3VzZV9jb3VudAZ1aW50NjQPY29udGFpbmVyX2NvdW50BnVpbnQ2NApwbGF5ZXJfcm93AAEFb3duZXIEbmFtZQhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0C3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYIcm1tb2R1bGUABAtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4D3RhcmdldF9jYXJnb19pZAZ1aW50NjQEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQIc2hpcF9yb3cAEAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8JZXh0cmFjdG9yEGV4dHJhY3Rvcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnNlZWRlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0CXN0YXRlX3JvdwAGB2VuYWJsZWQEYm9vbAVlcG9jaAZ1aW50MzIEc2FsdAZ1aW50NjQFc2hpcHMGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYGY29tbWl0C2NoZWNrc3VtMjU2DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAEB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgR0YXNrAAgEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAJCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXQh0cmFuc2ZlcgAGC3NvdXJjZV90eXBlBG5hbWUJc291cmNlX2lkBnVpbnQ2NAlkZXN0X3R5cGUEbmFtZQdkZXN0X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGdHJhdmVsAAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAMCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkQZ2FtZV9jb25maWdfdHlwZQtnYW1lX2NvbmZpZw13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAoAABQUScqUzIJYWRkbW9kdWxlAAAAAEChaXYyB2FkdmFuY2XTAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZHZhbmNlCnN1bW1hcnk6ICdBZHZhbmNlIHR1cm4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkdmFuY2UgdGhlIGdhbWUgdG8gdGhlIG5leHQgdHVybi4AAAAAgDRVPAVibGVuZAAAAAAARIWmQQZjYW5jZWzHAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4KCi0tLQAAqBvfaVRECWNsZWFucnN2cAAAgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl08QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgoKLS0tAABgNDK3JkUJY29uZmlnbG9nAAAAAACAvMxFBWNyYWZ0AOCzy1OpbNRFDGNyZWF0ZWVudGl0eQAAAAAAeBqrSgZkZXBsb3kAAAAAAKh4zFQGZW5hYmxl4gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgoKLS0tAAAAICNzc1cHZXh0cmFjdKEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnAACwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAA8OcaNbNiCWdldG5lYXJied4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5lYXJieQpzdW1tYXJ5OiAnR2V0IG5lYXJieSByZWFjaGFibGUgc3lzdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBuZWFyYnkgc3lzdGVtcyByZWFjaGFibGUgYnkgYW4gZW50aXR5IGZyb20gaXRzIHByb2plY3RlZCBsb2NhdGlvbi4gUmV0dXJucyBjdXJyZW50IHN0YXRlICh3aXRoIGNvbXBsZXRlZCB0YXNrcyByZXNvbHZlZCksIHByb2plY3RlZCBzdGF0ZSAoYWZ0ZXIgYWxsIHNjaGVkdWxlZCB0YXNrcyksIGFuZCBhIGxpc3Qgb2YgcmVhY2hhYmxlIHN5c3RlbXMgd2l0aCBkaXN0YW5jZSwgZW5lcmd5IGNvc3QsIGZsaWdodCB0aW1lLCBhbmQgbWFya2V0IGluZm9ybWF0aW9uLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAIDU2dyMs2IKZ2V0c3RyYXR1bQCAlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaP0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4KCi0tLQAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAAACQ3XQEaW5pdPoBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGluaXQKc3VtbWFyeTogJ0luaXRpYWxpemUgZ2FtZSBzZWVkJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWFsaXplIGEgdGhlIGdhbWVzIHNlZWQgYW5kIHNlZWQgdmFsdWVzIHRvIGJvb3RzdHJhcCBnYW1lIHN0YXRlLgAAAAAAMB19BGpvaW7JAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQKCi0tLQAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAq6kSlvAhybW1vZHVsZQAAAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAZdegyU3FCnNwYXduY2FyZ28AAJJKSuHJTcULc3Bhd25zZWVkZWQAAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbMsCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4KCi0tLQoKVGhpcyBhY3Rpb24gZGV0ZXJtaW5lcyB0aGUgbWFya2V0IHByaWNlIG9mIGFsbCBpdGVtcyBhdCBhIGdpdmVuIGxvY2F0aW9uLgAAAAAAUK/hBHdhcnAAAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0LAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAWAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAA8OcaNbNiC25lYXJieV9pbmZvAAC4yptYs2ILcGxheWVyX2luZm8AgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cw==');
208
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhxCWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMABRJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhJjb250YWluZXJfaHVsbG1hc3MGdWludDMyEmNvbnRhaW5lcl9jYXBhY2l0eQZ1aW50MzILY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABcEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8GZW5lcmd5B3VpbnQxNj8IaHVsbG1hc3MHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwhjYXBhY2l0eQd1aW50MzI/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10HZXh0cmFjdAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMg9leHRyYWN0b3Jfc3RhdHMABARyYXRlBnVpbnQxNgVkcmFpbgZ1aW50MTYFZGVwdGgGdWludDE2BWRyaWxsBnVpbnQxNgtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdCWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwARAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8Kc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0MgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1cwAAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIGEgbmV3IGJsZW5kZWQgc2VlZC4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAAABEhaZBBmNhbmNlbMICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNhbmNlbApzdW1tYXJ5OiAnQ2FuY2VsIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FuY2VsIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRhc2tzIGZyb20gdGhlIGVuZCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZS4gVGFza3MgdGhhdCBhcmUgaW1tdXRhYmxlIGFuZCBpbiBwcm9ncmVzcyBjYW5ub3QgYmUgY2FuY2VsbGVkLgAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLuCzy1OpbNRFDGNyZWF0ZWVudGl0eb8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyZWF0ZWVudGl0eQpzdW1tYXJ5OiAnREVCVUc6IGNyZWF0ZSBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAeBqrSgZkZXBsb3nsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXBsb3kKc3VtbWFyeTogJ0RlcGxveSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClVucGFjayBhIHBhY2tlZCBlbnRpdHkgaXRlbSAocGFja2VkIHNoaXAgb3IgcGFja2VkIGNvbnRhaW5lcikgZnJvbSBjYXJnbywgc2NoZWR1bGluZyBhIGRlcGxveSB0YXNrIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGVudGl0eSBhdCB0aGUgZGVwbG95aW5nIGVudGl0eSdzIGxvY2F0aW9uIHVwb24gcmVzb2x1dGlvbi4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQuAAAAICNzc1cHZXh0cmFjdKEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YQAAAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVzAAAA8OcaNbNiCWdldG5lYXJied4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5lYXJieQpzdW1tYXJ5OiAnR2V0IG5lYXJieSByZWFjaGFibGUgc3lzdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBuZWFyYnkgc3lzdGVtcyByZWFjaGFibGUgYnkgYW4gZW50aXR5IGZyb20gaXRzIHByb2plY3RlZCBsb2NhdGlvbi4gUmV0dXJucyBjdXJyZW50IHN0YXRlICh3aXRoIGNvbXBsZXRlZCB0YXNrcyByZXNvbHZlZCksIHByb2plY3RlZCBzdGF0ZSAoYWZ0ZXIgYWxsIHNjaGVkdWxlZCB0YXNrcyksIGFuZCBhIGxpc3Qgb2YgcmVhY2hhYmxlIHN5c3RlbXMgd2l0aCBkaXN0YW5jZSwgZW5lcmd5IGNvc3QsIGZsaWdodCB0aW1lLCBhbmQgbWFya2V0IGluZm9ybWF0aW9uLgAAXdPlNbNiCmdldG5mdGluZm8AAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGUAAABW1SF1s2IKZ2V0cmVjaXBlcwCAFbqaYnWzYgxnZXRyZXNvdXJjZXMAAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnAAAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZwAAAGXXoMlNxQpzcGF3bmNhcmdvxQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25jYXJnbwpzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFwAA0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAdAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
209
209
  const abi = ABI.from(abiBlob);
210
210
  var Types;
211
211
  (function (Types) {
@@ -230,6 +230,21 @@ var Types;
230
230
  Struct.type('addmodule')
231
231
  ], addmodule);
232
232
  Types.addmodule = addmodule;
233
+ let addnexus = class addnexus extends Struct {
234
+ };
235
+ __decorate([
236
+ Struct.field('string')
237
+ ], addnexus.prototype, "nexus_name", void 0);
238
+ __decorate([
239
+ Struct.field(Int64)
240
+ ], addnexus.prototype, "x", void 0);
241
+ __decorate([
242
+ Struct.field(Int64)
243
+ ], addnexus.prototype, "y", void 0);
244
+ addnexus = __decorate([
245
+ Struct.type('addnexus')
246
+ ], addnexus);
247
+ Types.addnexus = addnexus;
233
248
  let advance = class advance extends Struct {
234
249
  };
235
250
  __decorate([
@@ -410,21 +425,6 @@ var Types;
410
425
  Struct.type('commit')
411
426
  ], commit);
412
427
  Types.commit = commit;
413
- let loader_stats = class loader_stats extends Struct {
414
- };
415
- __decorate([
416
- Struct.field(UInt32)
417
- ], loader_stats.prototype, "mass", void 0);
418
- __decorate([
419
- Struct.field(UInt16)
420
- ], loader_stats.prototype, "thrust", void 0);
421
- __decorate([
422
- Struct.field(UInt8)
423
- ], loader_stats.prototype, "quantity", void 0);
424
- loader_stats = __decorate([
425
- Struct.type('loader_stats')
426
- ], loader_stats);
427
- Types.loader_stats = loader_stats;
428
428
  let entity_defaults = class entity_defaults extends Struct {
429
429
  };
430
430
  __decorate([
@@ -433,9 +433,6 @@ var Types;
433
433
  __decorate([
434
434
  Struct.field(UInt16)
435
435
  ], entity_defaults.prototype, "warehouse_z", void 0);
436
- __decorate([
437
- Struct.field(loader_stats)
438
- ], entity_defaults.prototype, "warehouse_loaders", void 0);
439
436
  __decorate([
440
437
  Struct.field(UInt32)
441
438
  ], entity_defaults.prototype, "container_hullmass", void 0);
@@ -457,6 +454,15 @@ var Types;
457
454
  __decorate([
458
455
  Struct.field(UInt32)
459
456
  ], item_def.prototype, "mass", void 0);
457
+ __decorate([
458
+ Struct.field(UInt8)
459
+ ], item_def.prototype, "type", void 0);
460
+ __decorate([
461
+ Struct.field(UInt8)
462
+ ], item_def.prototype, "subtype", void 0);
463
+ __decorate([
464
+ Struct.field(UInt8)
465
+ ], item_def.prototype, "tier", void 0);
460
466
  item_def = __decorate([
461
467
  Struct.type('item_def')
462
468
  ], item_def);
@@ -680,6 +686,21 @@ var Types;
680
686
  Struct.type('entity_current_state')
681
687
  ], entity_current_state);
682
688
  Types.entity_current_state = entity_current_state;
689
+ let loader_stats = class loader_stats extends Struct {
690
+ };
691
+ __decorate([
692
+ Struct.field(UInt32)
693
+ ], loader_stats.prototype, "mass", void 0);
694
+ __decorate([
695
+ Struct.field(UInt16)
696
+ ], loader_stats.prototype, "thrust", void 0);
697
+ __decorate([
698
+ Struct.field(UInt8)
699
+ ], loader_stats.prototype, "quantity", void 0);
700
+ loader_stats = __decorate([
701
+ Struct.type('loader_stats')
702
+ ], loader_stats);
703
+ Types.loader_stats = loader_stats;
683
704
  let movement_stats = class movement_stats extends Struct {
684
705
  };
685
706
  __decorate([
@@ -902,6 +923,12 @@ var Types;
902
923
  Struct.type('getentity')
903
924
  ], getentity);
904
925
  Types.getentity = getentity;
926
+ let getitemdata = class getitemdata extends Struct {
927
+ };
928
+ getitemdata = __decorate([
929
+ Struct.type('getitemdata')
930
+ ], getitemdata);
931
+ Types.getitemdata = getitemdata;
905
932
  let getitems = class getitems extends Struct {
906
933
  };
907
934
  getitems = __decorate([
@@ -932,6 +959,12 @@ var Types;
932
959
  Struct.type('getlocdata')
933
960
  ], getlocdata);
934
961
  Types.getlocdata = getlocdata;
962
+ let getmodules = class getmodules extends Struct {
963
+ };
964
+ getmodules = __decorate([
965
+ Struct.type('getmodules')
966
+ ], getmodules);
967
+ Types.getmodules = getmodules;
935
968
  let getnearby = class getnearby extends Struct {
936
969
  };
937
970
  __decorate([
@@ -947,6 +980,12 @@ var Types;
947
980
  Struct.type('getnearby')
948
981
  ], getnearby);
949
982
  Types.getnearby = getnearby;
983
+ let getnftinfo = class getnftinfo extends Struct {
984
+ };
985
+ getnftinfo = __decorate([
986
+ Struct.type('getnftinfo')
987
+ ], getnftinfo);
988
+ Types.getnftinfo = getnftinfo;
950
989
  let getplayer = class getplayer extends Struct {
951
990
  };
952
991
  __decorate([
@@ -956,6 +995,33 @@ var Types;
956
995
  Struct.type('getplayer')
957
996
  ], getplayer);
958
997
  Types.getplayer = getplayer;
998
+ let getrecipe = class getrecipe extends Struct {
999
+ };
1000
+ __decorate([
1001
+ Struct.field(UInt16)
1002
+ ], getrecipe.prototype, "output_item_id", void 0);
1003
+ getrecipe = __decorate([
1004
+ Struct.type('getrecipe')
1005
+ ], getrecipe);
1006
+ Types.getrecipe = getrecipe;
1007
+ let getrecipes = class getrecipes extends Struct {
1008
+ };
1009
+ __decorate([
1010
+ Struct.field(UInt16)
1011
+ ], getrecipes.prototype, "lower_bound", void 0);
1012
+ __decorate([
1013
+ Struct.field(UInt8)
1014
+ ], getrecipes.prototype, "limit", void 0);
1015
+ getrecipes = __decorate([
1016
+ Struct.type('getrecipes')
1017
+ ], getrecipes);
1018
+ Types.getrecipes = getrecipes;
1019
+ let getresources = class getresources extends Struct {
1020
+ };
1021
+ getresources = __decorate([
1022
+ Struct.type('getresources')
1023
+ ], getresources);
1024
+ Types.getresources = getresources;
959
1025
  let getstratum = class getstratum extends Struct {
960
1026
  };
961
1027
  __decorate([
@@ -1028,6 +1094,102 @@ var Types;
1028
1094
  Struct.type('init')
1029
1095
  ], init);
1030
1096
  Types.init = init;
1097
+ let recipe_input = class recipe_input extends Struct {
1098
+ };
1099
+ __decorate([
1100
+ Struct.field(UInt16)
1101
+ ], recipe_input.prototype, "item_id", void 0);
1102
+ __decorate([
1103
+ Struct.field(UInt8)
1104
+ ], recipe_input.prototype, "category", void 0);
1105
+ __decorate([
1106
+ Struct.field(UInt32)
1107
+ ], recipe_input.prototype, "quantity", void 0);
1108
+ recipe_input = __decorate([
1109
+ Struct.type('recipe_input')
1110
+ ], recipe_input);
1111
+ Types.recipe_input = recipe_input;
1112
+ let stat_source = class stat_source extends Struct {
1113
+ };
1114
+ __decorate([
1115
+ Struct.field(UInt8)
1116
+ ], stat_source.prototype, "input_index", void 0);
1117
+ __decorate([
1118
+ Struct.field(UInt8)
1119
+ ], stat_source.prototype, "input_stat_index", void 0);
1120
+ stat_source = __decorate([
1121
+ Struct.type('stat_source')
1122
+ ], stat_source);
1123
+ Types.stat_source = stat_source;
1124
+ let stat_slot_response = class stat_slot_response extends Struct {
1125
+ };
1126
+ __decorate([
1127
+ Struct.field(stat_source, { array: true })
1128
+ ], stat_slot_response.prototype, "sources", void 0);
1129
+ stat_slot_response = __decorate([
1130
+ Struct.type('stat_slot_response')
1131
+ ], stat_slot_response);
1132
+ Types.stat_slot_response = stat_slot_response;
1133
+ let recipe_item_info = class recipe_item_info extends Struct {
1134
+ };
1135
+ __decorate([
1136
+ Struct.field(UInt16)
1137
+ ], recipe_item_info.prototype, "id", void 0);
1138
+ __decorate([
1139
+ Struct.field(UInt32)
1140
+ ], recipe_item_info.prototype, "mass", void 0);
1141
+ recipe_item_info = __decorate([
1142
+ Struct.type('recipe_item_info')
1143
+ ], recipe_item_info);
1144
+ Types.recipe_item_info = recipe_item_info;
1145
+ let recipe_response = class recipe_response extends Struct {
1146
+ };
1147
+ __decorate([
1148
+ Struct.field(UInt16)
1149
+ ], recipe_response.prototype, "output_item_id", void 0);
1150
+ __decorate([
1151
+ Struct.field(UInt32)
1152
+ ], recipe_response.prototype, "output_mass", void 0);
1153
+ __decorate([
1154
+ Struct.field(recipe_input, { array: true })
1155
+ ], recipe_response.prototype, "inputs", void 0);
1156
+ __decorate([
1157
+ Struct.field(stat_slot_response, { array: true })
1158
+ ], recipe_response.prototype, "stat_slots", void 0);
1159
+ __decorate([
1160
+ Struct.field(Bytes)
1161
+ ], recipe_response.prototype, "blend_weights", void 0);
1162
+ __decorate([
1163
+ Struct.field(recipe_item_info)
1164
+ ], recipe_response.prototype, "output_item", void 0);
1165
+ __decorate([
1166
+ Struct.field(recipe_item_info, { array: true })
1167
+ ], recipe_response.prototype, "input_items", void 0);
1168
+ recipe_response = __decorate([
1169
+ Struct.type('recipe_response')
1170
+ ], recipe_response);
1171
+ Types.recipe_response = recipe_response;
1172
+ let recipes_result = class recipes_result extends Struct {
1173
+ };
1174
+ __decorate([
1175
+ Struct.field(recipe_response, { array: true })
1176
+ ], recipes_result.prototype, "recipes", void 0);
1177
+ recipes_result = __decorate([
1178
+ Struct.type('recipes_result')
1179
+ ], recipes_result);
1180
+ Types.recipes_result = recipes_result;
1181
+ let itemdata_result = class itemdata_result extends Struct {
1182
+ };
1183
+ __decorate([
1184
+ Struct.field(item_def, { array: true })
1185
+ ], itemdata_result.prototype, "items", void 0);
1186
+ __decorate([
1187
+ Struct.field(recipes_result)
1188
+ ], itemdata_result.prototype, "recipes", void 0);
1189
+ itemdata_result = __decorate([
1190
+ Struct.type('itemdata_result')
1191
+ ], itemdata_result);
1192
+ Types.itemdata_result = itemdata_result;
1031
1193
  let items_info = class items_info extends Struct {
1032
1194
  };
1033
1195
  __decorate([
@@ -1133,6 +1295,33 @@ var Types;
1133
1295
  Struct.type('location_row')
1134
1296
  ], location_row);
1135
1297
  Types.location_row = location_row;
1298
+ let module_info = class module_info extends Struct {
1299
+ };
1300
+ __decorate([
1301
+ Struct.field(UInt16)
1302
+ ], module_info.prototype, "id", void 0);
1303
+ __decorate([
1304
+ Struct.field(UInt32)
1305
+ ], module_info.prototype, "mass", void 0);
1306
+ __decorate([
1307
+ Struct.field(UInt8)
1308
+ ], module_info.prototype, "module_type", void 0);
1309
+ __decorate([
1310
+ Struct.field(UInt8)
1311
+ ], module_info.prototype, "tier", void 0);
1312
+ module_info = __decorate([
1313
+ Struct.type('module_info')
1314
+ ], module_info);
1315
+ Types.module_info = module_info;
1316
+ let modules_result = class modules_result extends Struct {
1317
+ };
1318
+ __decorate([
1319
+ Struct.field(module_info, { array: true })
1320
+ ], modules_result.prototype, "modules", void 0);
1321
+ modules_result = __decorate([
1322
+ Struct.type('modules_result')
1323
+ ], modules_result);
1324
+ Types.modules_result = modules_result;
1136
1325
  let nearby_system = class nearby_system extends Struct {
1137
1326
  };
1138
1327
  __decorate([
@@ -1172,6 +1361,87 @@ var Types;
1172
1361
  Struct.type('nearby_info')
1173
1362
  ], nearby_info);
1174
1363
  Types.nearby_info = nearby_info;
1364
+ let nexus_row = class nexus_row extends Struct {
1365
+ };
1366
+ __decorate([
1367
+ Struct.field(UInt64)
1368
+ ], nexus_row.prototype, "id", void 0);
1369
+ __decorate([
1370
+ Struct.field(Name)
1371
+ ], nexus_row.prototype, "owner", void 0);
1372
+ __decorate([
1373
+ Struct.field('string')
1374
+ ], nexus_row.prototype, "name", void 0);
1375
+ __decorate([
1376
+ Struct.field(coordinates)
1377
+ ], nexus_row.prototype, "coordinates", void 0);
1378
+ nexus_row = __decorate([
1379
+ Struct.type('nexus_row')
1380
+ ], nexus_row);
1381
+ Types.nexus_row = nexus_row;
1382
+ let schema_field = class schema_field extends Struct {
1383
+ };
1384
+ __decorate([
1385
+ Struct.field('string')
1386
+ ], schema_field.prototype, "name", void 0);
1387
+ __decorate([
1388
+ Struct.field('string')
1389
+ ], schema_field.prototype, "field_type", void 0);
1390
+ schema_field = __decorate([
1391
+ Struct.type('schema_field')
1392
+ ], schema_field);
1393
+ Types.schema_field = schema_field;
1394
+ let nft_schema_def = class nft_schema_def extends Struct {
1395
+ };
1396
+ __decorate([
1397
+ Struct.field(Name)
1398
+ ], nft_schema_def.prototype, "schema_name", void 0);
1399
+ __decorate([
1400
+ Struct.field(schema_field, { array: true })
1401
+ ], nft_schema_def.prototype, "fields", void 0);
1402
+ nft_schema_def = __decorate([
1403
+ Struct.type('nft_schema_def')
1404
+ ], nft_schema_def);
1405
+ Types.nft_schema_def = nft_schema_def;
1406
+ let nft_template_def = class nft_template_def extends Struct {
1407
+ };
1408
+ __decorate([
1409
+ Struct.field(UInt16)
1410
+ ], nft_template_def.prototype, "item_id", void 0);
1411
+ __decorate([
1412
+ Struct.field(Name)
1413
+ ], nft_template_def.prototype, "schema_name", void 0);
1414
+ nft_template_def = __decorate([
1415
+ Struct.type('nft_template_def')
1416
+ ], nft_template_def);
1417
+ Types.nft_template_def = nft_template_def;
1418
+ let nftconfig_row = class nftconfig_row extends Struct {
1419
+ };
1420
+ __decorate([
1421
+ Struct.field(UInt16)
1422
+ ], nftconfig_row.prototype, "item_id", void 0);
1423
+ __decorate([
1424
+ Struct.field(Int32)
1425
+ ], nftconfig_row.prototype, "template_id", void 0);
1426
+ __decorate([
1427
+ Struct.field(Name)
1428
+ ], nftconfig_row.prototype, "schema_name", void 0);
1429
+ nftconfig_row = __decorate([
1430
+ Struct.type('nftconfig_row')
1431
+ ], nftconfig_row);
1432
+ Types.nftconfig_row = nftconfig_row;
1433
+ let nftinfo_result = class nftinfo_result extends Struct {
1434
+ };
1435
+ __decorate([
1436
+ Struct.field(nft_schema_def, { array: true })
1437
+ ], nftinfo_result.prototype, "schemas", void 0);
1438
+ __decorate([
1439
+ Struct.field(nft_template_def, { array: true })
1440
+ ], nftinfo_result.prototype, "templates", void 0);
1441
+ nftinfo_result = __decorate([
1442
+ Struct.type('nftinfo_result')
1443
+ ], nftinfo_result);
1444
+ Types.nftinfo_result = nftinfo_result;
1175
1445
  let task_event = class task_event extends Struct {
1176
1446
  };
1177
1447
  __decorate([
@@ -1310,6 +1580,24 @@ var Types;
1310
1580
  Struct.type('resolve_results')
1311
1581
  ], resolve_results);
1312
1582
  Types.resolve_results = resolve_results;
1583
+ let resource_info = class resource_info extends Struct {
1584
+ };
1585
+ __decorate([
1586
+ Struct.field(UInt16)
1587
+ ], resource_info.prototype, "id", void 0);
1588
+ __decorate([
1589
+ Struct.field(UInt32)
1590
+ ], resource_info.prototype, "mass", void 0);
1591
+ __decorate([
1592
+ Struct.field(UInt8)
1593
+ ], resource_info.prototype, "category", void 0);
1594
+ __decorate([
1595
+ Struct.field(UInt8)
1596
+ ], resource_info.prototype, "tier", void 0);
1597
+ resource_info = __decorate([
1598
+ Struct.type('resource_info')
1599
+ ], resource_info);
1600
+ Types.resource_info = resource_info;
1313
1601
  let resource_stats = class resource_stats extends Struct {
1314
1602
  };
1315
1603
  __decorate([
@@ -1325,6 +1613,15 @@ var Types;
1325
1613
  Struct.type('resource_stats')
1326
1614
  ], resource_stats);
1327
1615
  Types.resource_stats = resource_stats;
1616
+ let resources_result = class resources_result extends Struct {
1617
+ };
1618
+ __decorate([
1619
+ Struct.field(resource_info, { array: true })
1620
+ ], resources_result.prototype, "resources", void 0);
1621
+ resources_result = __decorate([
1622
+ Struct.type('resources_result')
1623
+ ], resources_result);
1624
+ Types.resources_result = resources_result;
1328
1625
  let rmmodule = class rmmodule extends Struct {
1329
1626
  };
1330
1627
  __decorate([
@@ -1343,6 +1640,15 @@ var Types;
1343
1640
  Struct.type('rmmodule')
1344
1641
  ], rmmodule);
1345
1642
  Types.rmmodule = rmmodule;
1643
+ let rmnftcfg = class rmnftcfg extends Struct {
1644
+ };
1645
+ __decorate([
1646
+ Struct.field(UInt16)
1647
+ ], rmnftcfg.prototype, "item_id", void 0);
1648
+ rmnftcfg = __decorate([
1649
+ Struct.type('rmnftcfg')
1650
+ ], rmnftcfg);
1651
+ Types.rmnftcfg = rmnftcfg;
1346
1652
  let salt = class salt extends Struct {
1347
1653
  };
1348
1654
  __decorate([
@@ -1364,6 +1670,21 @@ var Types;
1364
1670
  Struct.type('sequence_row')
1365
1671
  ], sequence_row);
1366
1672
  Types.sequence_row = sequence_row;
1673
+ let setnftcfg = class setnftcfg extends Struct {
1674
+ };
1675
+ __decorate([
1676
+ Struct.field(UInt16)
1677
+ ], setnftcfg.prototype, "item_id", void 0);
1678
+ __decorate([
1679
+ Struct.field(Int32)
1680
+ ], setnftcfg.prototype, "template_id", void 0);
1681
+ __decorate([
1682
+ Struct.field(Name)
1683
+ ], setnftcfg.prototype, "schema_name", void 0);
1684
+ setnftcfg = __decorate([
1685
+ Struct.type('setnftcfg')
1686
+ ], setnftcfg);
1687
+ Types.setnftcfg = setnftcfg;
1367
1688
  let ship_row = class ship_row extends Struct {
1368
1689
  };
1369
1690
  __decorate([
@@ -1375,6 +1696,9 @@ var Types;
1375
1696
  __decorate([
1376
1697
  Struct.field('string')
1377
1698
  ], ship_row.prototype, "name", void 0);
1699
+ __decorate([
1700
+ Struct.field(UInt64)
1701
+ ], ship_row.prototype, "seed", void 0);
1378
1702
  __decorate([
1379
1703
  Struct.field(coordinates)
1380
1704
  ], ship_row.prototype, "coordinates", void 0);
@@ -1585,18 +1909,27 @@ var Types;
1585
1909
  __decorate([
1586
1910
  Struct.field('string')
1587
1911
  ], warehouse_row.prototype, "name", void 0);
1912
+ __decorate([
1913
+ Struct.field(UInt64)
1914
+ ], warehouse_row.prototype, "seed", void 0);
1588
1915
  __decorate([
1589
1916
  Struct.field(coordinates)
1590
1917
  ], warehouse_row.prototype, "coordinates", void 0);
1591
1918
  __decorate([
1592
- Struct.field(UInt32)
1919
+ Struct.field(UInt32, { optional: true })
1920
+ ], warehouse_row.prototype, "hullmass", void 0);
1921
+ __decorate([
1922
+ Struct.field(UInt32, { optional: true })
1593
1923
  ], warehouse_row.prototype, "capacity", void 0);
1594
1924
  __decorate([
1595
1925
  Struct.field(UInt32)
1596
1926
  ], warehouse_row.prototype, "cargomass", void 0);
1597
1927
  __decorate([
1598
- Struct.field(loader_stats)
1928
+ Struct.field(loader_stats, { optional: true })
1599
1929
  ], warehouse_row.prototype, "loaders", void 0);
1930
+ __decorate([
1931
+ Struct.field(module_entry, { array: true })
1932
+ ], warehouse_row.prototype, "modules", void 0);
1600
1933
  __decorate([
1601
1934
  Struct.field(schedule, { optional: true })
1602
1935
  ], warehouse_row.prototype, "schedule", void 0);
@@ -1634,12 +1967,35 @@ var Types;
1634
1967
  Struct.type('wipesequence')
1635
1968
  ], wipesequence);
1636
1969
  Types.wipesequence = wipesequence;
1970
+ let wrap = class wrap extends Struct {
1971
+ };
1972
+ __decorate([
1973
+ Struct.field(Name)
1974
+ ], wrap.prototype, "owner", void 0);
1975
+ __decorate([
1976
+ Struct.field(Name)
1977
+ ], wrap.prototype, "entity_type", void 0);
1978
+ __decorate([
1979
+ Struct.field(UInt64)
1980
+ ], wrap.prototype, "entity_id", void 0);
1981
+ __decorate([
1982
+ Struct.field(UInt64)
1983
+ ], wrap.prototype, "cargo_id", void 0);
1984
+ __decorate([
1985
+ Struct.field(UInt64)
1986
+ ], wrap.prototype, "quantity", void 0);
1987
+ wrap = __decorate([
1988
+ Struct.type('wrap')
1989
+ ], wrap);
1990
+ Types.wrap = wrap;
1637
1991
  })(Types || (Types = {}));
1638
1992
  const TableMap = {
1639
1993
  cargo: Types.cargo_row,
1640
1994
  container: Types.container_row,
1641
1995
  entitygroup: Types.entitygroup_row,
1642
1996
  location: Types.location_row,
1997
+ nexus: Types.nexus_row,
1998
+ nftconfig: Types.nftconfig_row,
1643
1999
  player: Types.player_row,
1644
2000
  reserve: Types.reserve_row,
1645
2001
  sequence: Types.sequence_row,
@@ -4558,7 +4914,9 @@ function calc_rechargetime(capacity, energy, recharge) {
4558
4914
  return cap.subtracting(eng).dividing(recharge);
4559
4915
  }
4560
4916
  function calc_ship_rechargetime(ship) {
4561
- return calc_rechargetime(ship.generator.capacity, ship.energy, ship.generator.recharge);
4917
+ if (!ship.generator)
4918
+ return UInt32.from(0);
4919
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt16.from(0), ship.generator.recharge);
4562
4920
  }
4563
4921
  function calc_flighttime(distance, acceleration) {
4564
4922
  return UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
@@ -4568,14 +4926,17 @@ function calc_loader_flighttime(ship, mass, altitude) {
4568
4926
  return calc_flighttime(z, calc_loader_acceleration(ship, mass));
4569
4927
  }
4570
4928
  function calc_loader_acceleration(ship, mass) {
4571
- return calc_acceleration(Number(ship.loaders.thrust), Number(mass) + Number(ship.loaders.mass));
4929
+ const thrust = ship.loaders ? Number(ship.loaders.thrust) : 0;
4930
+ const loaderMass = ship.loaders ? Number(ship.loaders.mass) : 0;
4931
+ return calc_acceleration(thrust, Number(mass) + loaderMass);
4572
4932
  }
4573
4933
  function calc_ship_flighttime(ship, mass, distance) {
4574
4934
  const acceleration = calc_ship_acceleration(ship, mass);
4575
4935
  return calc_flighttime(distance, acceleration);
4576
4936
  }
4577
4937
  function calc_ship_acceleration(ship, mass) {
4578
- return calc_acceleration(Number(ship.engines.thrust), Number(mass));
4938
+ const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
4939
+ return calc_acceleration(thrust, Number(mass));
4579
4940
  }
4580
4941
  function calc_acceleration(thrust, mass) {
4581
4942
  return (thrust / mass) * PRECISION;
@@ -4583,7 +4944,7 @@ function calc_acceleration(thrust, mass) {
4583
4944
  function calc_ship_mass(ship, cargos) {
4584
4945
  const mass = UInt64.from(0);
4585
4946
  mass.add(ship.hullmass);
4586
- if (ship.loaders.quantity.gt(UInt32.zero)) {
4947
+ if (ship.loaders && ship.loaders.quantity.gt(UInt32.zero)) {
4587
4948
  mass.add(ship.loaders.mass.multiplying(ship.loaders.quantity));
4588
4949
  }
4589
4950
  for (const cargo of cargos) {
@@ -4607,6 +4968,8 @@ function calculateTransferTime(ship, cargos, quantities) {
4607
4968
  if (mass.equals(UInt64.zero)) {
4608
4969
  return UInt32.from(0);
4609
4970
  }
4971
+ if (!ship.loaders)
4972
+ return UInt32.from(0);
4610
4973
  mass = UInt64.from(mass).adding(ship.loaders.mass);
4611
4974
  const transfer_time = calc_loader_flighttime(ship, mass);
4612
4975
  return transfer_time.dividing(ship.loaders.quantity);
@@ -4639,15 +5002,15 @@ function calculateLoadTimeBreakdown(ship, cargos, loadQuantities, unloadQuantiti
4639
5002
  }
4640
5003
  let unloadTime = 0;
4641
5004
  let loadTime = 0;
4642
- if (mass_unload.gt(UInt64.zero)) {
5005
+ if (mass_unload.gt(UInt64.zero) && ship.loaders) {
4643
5006
  const totalMass = UInt64.from(mass_unload).adding(ship.loaders.mass);
4644
5007
  unloadTime = Number(calc_loader_flighttime(ship, totalMass));
4645
5008
  }
4646
- if (mass_load.gt(UInt64.zero)) {
5009
+ if (mass_load.gt(UInt64.zero) && ship.loaders) {
4647
5010
  const totalMass = UInt64.from(mass_load).adding(ship.loaders.mass);
4648
5011
  loadTime = Number(calc_loader_flighttime(ship, totalMass));
4649
5012
  }
4650
- const numLoaders = Number(ship.loaders.quantity);
5013
+ const numLoaders = ship.loaders ? Number(ship.loaders.quantity) : 0;
4651
5014
  const totalTime = numLoaders > 0 ? (unloadTime + loadTime) / numLoaders : 0;
4652
5015
  const unloadTimePerLoader = numLoaders > 0 ? unloadTime / numLoaders : 0;
4653
5016
  const loadTimePerLoader = numLoaders > 0 ? loadTime / numLoaders : 0;
@@ -4667,12 +5030,14 @@ function estimateTravelTime(ship, travelMass, distance, options = {}) {
4667
5030
  let unloadTime = UInt32.zero;
4668
5031
  if (loadMass &&
4669
5032
  UInt32.from(loadMass).gt(UInt32.zero) &&
5033
+ ship.loaders &&
4670
5034
  ship.loaders.quantity.gt(UInt32.zero)) {
4671
5035
  const totalMass = UInt64.from(loadMass).adding(ship.loaders.mass);
4672
5036
  loadTime = calc_loader_flighttime(ship, totalMass).dividing(ship.loaders.quantity);
4673
5037
  }
4674
5038
  if (unloadMass &&
4675
5039
  UInt32.from(unloadMass).gt(UInt32.zero) &&
5040
+ ship.loaders &&
4676
5041
  ship.loaders.quantity.gt(UInt32.zero)) {
4677
5042
  const totalMass = UInt64.from(unloadMass).adding(ship.loaders.mass);
4678
5043
  unloadTime = calc_loader_flighttime(ship, totalMass).dividing(ship.loaders.quantity);
@@ -4694,8 +5059,10 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
4694
5059
  return estimate.total;
4695
5060
  }
4696
5061
  function hasEnergyForDistance$1(ship, distance) {
5062
+ if (!ship.engines)
5063
+ return false;
4697
5064
  const energyNeeded = UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
4698
- return UInt64.from(ship.energy).gte(energyNeeded);
5065
+ return UInt64.from(ship.energy ?? 0).gte(energyNeeded);
4699
5066
  }
4700
5067
  function getFlightOrigin(entity, flightTaskIndex) {
4701
5068
  if (!entity.schedule)
@@ -5536,6 +5903,10 @@ class Warehouse extends Types.entity_info {
5536
5903
  get orbitalAltitude() {
5537
5904
  return this.coordinates.z?.toNumber() || 0;
5538
5905
  }
5906
+ get totalMass() {
5907
+ const hull = this.hullmass ? UInt64.from(this.hullmass) : UInt64.from(0);
5908
+ return hull.adding(this.totalCargoMass);
5909
+ }
5539
5910
  }
5540
5911
 
5541
5912
  class Container extends Types.entity_info {
@@ -5588,6 +5959,17 @@ function computeContainerCapabilities(stats) {
5588
5959
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
5589
5960
  return { hullmass, capacity };
5590
5961
  }
5962
+ function computeContainerT2Capabilities(stats) {
5963
+ const strength = stats['strength'] ?? 0;
5964
+ const density = stats['density'] ?? 0;
5965
+ const ductility = stats['ductility'] ?? 0;
5966
+ const purity = stats['purity'] ?? 0;
5967
+ const hullmass = 20000 + 50 * density;
5968
+ const statSum = strength + ductility + purity;
5969
+ const exponent = statSum / 2500;
5970
+ const capacity = Math.floor(1500000 * Math.pow(10, exponent));
5971
+ return { hullmass, capacity };
5972
+ }
5591
5973
 
5592
5974
  class EntitiesManager extends BaseManager {
5593
5975
  async getEntity(type, id) {
@@ -6037,7 +6419,7 @@ function makeShip(state) {
6037
6419
  return new Ship(entityInfo);
6038
6420
  }
6039
6421
  function makeWarehouse(state) {
6040
- const entityInfo = Types.entity_info.from({
6422
+ const info = {
6041
6423
  type: Name.from('warehouse'),
6042
6424
  id: UInt64.from(state.id),
6043
6425
  owner: Name.from(state.owner),
@@ -6046,13 +6428,18 @@ function makeWarehouse(state) {
6046
6428
  capacity: UInt32.from(state.capacity),
6047
6429
  cargomass: UInt32.from(0),
6048
6430
  cargo: state.cargo || [],
6049
- loaders: state.loaders,
6050
6431
  is_idle: !state.schedule,
6051
6432
  current_task_elapsed: UInt32.from(0),
6052
6433
  current_task_remaining: UInt32.from(0),
6053
6434
  pending_tasks: [],
6054
- schedule: state.schedule,
6055
- });
6435
+ };
6436
+ if (state.hullmass !== undefined)
6437
+ info.hullmass = UInt32.from(state.hullmass);
6438
+ if (state.loaders)
6439
+ info.loaders = state.loaders;
6440
+ if (state.schedule)
6441
+ info.schedule = state.schedule;
6442
+ const entityInfo = Types.entity_info.from(info);
6056
6443
  return new Warehouse(entityInfo);
6057
6444
  }
6058
6445
  function makeContainer(state) {
@@ -6272,11 +6659,12 @@ function resolveStats(category, stats) {
6272
6659
  };
6273
6660
  }
6274
6661
 
6275
- const ITEM_ENGINE_T1 = 10006;
6276
- const ITEM_GENERATOR_T1 = 10007;
6277
- const ITEM_EXTRACTOR_T1 = 10014;
6278
- const ITEM_LOADER_T1 = 10015;
6279
- const ITEM_MANUFACTURING_T1 = 10016;
6662
+ const ITEM_ENGINE_T1 = 10100;
6663
+ const ITEM_GENERATOR_T1 = 10101;
6664
+ const ITEM_EXTRACTOR_T1 = 10102;
6665
+ const ITEM_LOADER_T1 = 10103;
6666
+ const ITEM_MANUFACTURING_T1 = 10104;
6667
+ const ITEM_STORAGE_T1 = 10105;
6280
6668
  const MODULE_ANY = 0;
6281
6669
  const MODULE_ENGINE = 1;
6282
6670
  const MODULE_GENERATOR = 2;
@@ -6285,6 +6673,7 @@ const MODULE_LOADER = 4;
6285
6673
  const MODULE_WARP = 5;
6286
6674
  const MODULE_CRAFTER = 6;
6287
6675
  const MODULE_LAUNCHER = 7;
6676
+ const MODULE_STORAGE = 8;
6288
6677
  function moduleAccepts(slotType, moduleType) {
6289
6678
  return slotType === MODULE_ANY || slotType === moduleType;
6290
6679
  }
@@ -6300,6 +6689,8 @@ function getModuleCapabilityType(itemId) {
6300
6689
  return MODULE_LOADER;
6301
6690
  case ITEM_MANUFACTURING_T1:
6302
6691
  return MODULE_CRAFTER;
6692
+ case ITEM_STORAGE_T1:
6693
+ return MODULE_STORAGE;
6303
6694
  default:
6304
6695
  return 0xff;
6305
6696
  }
@@ -6308,17 +6699,21 @@ function isModuleItem(itemId) {
6308
6699
  return getModuleCapabilityType(itemId) !== 0xff;
6309
6700
  }
6310
6701
 
6311
- const ITEM_DRILL_SHAFT = 10009;
6312
- const ITEM_EXTRACTION_PROBE = 10010;
6313
- const ITEM_CARGO_ARM = 10011;
6314
- const ITEM_TOOL_BIT = 10012;
6315
- const ITEM_REACTION_CHAMBER = 10013;
6702
+ const ITEM_DRILL_SHAFT = 10005;
6703
+ const ITEM_EXTRACTION_PROBE = 10006;
6704
+ const ITEM_CARGO_ARM = 10007;
6705
+ const ITEM_TOOL_BIT = 10008;
6706
+ const ITEM_REACTION_CHAMBER = 10009;
6316
6707
  const ITEM_HULL_PLATES = 10001;
6317
6708
  const ITEM_CARGO_LINING = 10002;
6318
- const ITEM_CONTAINER_PACKED = 10003;
6319
- const ITEM_THRUSTER_CORE = 10004;
6320
- const ITEM_POWER_CELL = 10005;
6321
- const ITEM_SHIP_T1_PACKED = 10008;
6709
+ const ITEM_CONTAINER_T1_PACKED = 10200;
6710
+ const ITEM_THRUSTER_CORE = 10003;
6711
+ const ITEM_POWER_CELL = 10004;
6712
+ const ITEM_SHIP_T1_PACKED = 10201;
6713
+ const ITEM_WAREHOUSE_T1_PACKED = 10202;
6714
+ const ITEM_HULL_PLATES_T2 = 20001;
6715
+ const ITEM_CARGO_LINING_T2 = 20002;
6716
+ const ITEM_CONTAINER_T2_PACKED = 20200;
6322
6717
  const components = [
6323
6718
  {
6324
6719
  id: ITEM_HULL_PLATES,
@@ -6331,7 +6726,7 @@ const components = [
6331
6726
  { key: 'density', source: 'metal' },
6332
6727
  ],
6333
6728
  recipe: [{ category: 'metal', quantity: 15 }],
6334
- usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Ship T1' }],
6729
+ usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Warehouse T1' }, { type: 'entity', name: 'Ship T1' }],
6335
6730
  },
6336
6731
  {
6337
6732
  id: ITEM_CARGO_LINING,
@@ -6347,7 +6742,7 @@ const components = [
6347
6742
  { category: 'precious', quantity: 6 },
6348
6743
  { category: 'organic', quantity: 14 },
6349
6744
  ],
6350
- usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Ship T1' }],
6745
+ usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Warehouse T1' }, { type: 'entity', name: 'Ship T1' }],
6351
6746
  },
6352
6747
  {
6353
6748
  id: ITEM_THRUSTER_CORE,
@@ -6360,7 +6755,7 @@ const components = [
6360
6755
  { key: 'thermal', source: 'gas' },
6361
6756
  ],
6362
6757
  recipe: [{ category: 'gas', quantity: 32 }],
6363
- usedIn: [{ type: 'module', name: 'Engine Module T1' }],
6758
+ usedIn: [{ type: 'module', name: 'Engine' }],
6364
6759
  },
6365
6760
  {
6366
6761
  id: ITEM_POWER_CELL,
@@ -6373,7 +6768,7 @@ const components = [
6373
6768
  { key: 'clarity', source: 'mineral' },
6374
6769
  ],
6375
6770
  recipe: [{ category: 'mineral', quantity: 20 }],
6376
- usedIn: [{ type: 'module', name: 'Generator Module T1' }],
6771
+ usedIn: [{ type: 'module', name: 'Generator' }],
6377
6772
  },
6378
6773
  {
6379
6774
  id: ITEM_DRILL_SHAFT,
@@ -6386,7 +6781,7 @@ const components = [
6386
6781
  { key: 'tolerance', source: 'metal' },
6387
6782
  ],
6388
6783
  recipe: [{ category: 'metal', quantity: 15 }],
6389
- usedIn: [{ type: 'module', name: 'Extractor Module T1' }],
6784
+ usedIn: [{ type: 'module', name: 'Extractor' }],
6390
6785
  },
6391
6786
  {
6392
6787
  id: ITEM_EXTRACTION_PROBE,
@@ -6399,7 +6794,7 @@ const components = [
6399
6794
  { key: 'reflectivity', source: 'precious' },
6400
6795
  ],
6401
6796
  recipe: [{ category: 'precious', quantity: 10 }],
6402
- usedIn: [{ type: 'module', name: 'Extractor Module T1' }],
6797
+ usedIn: [{ type: 'module', name: 'Extractor' }],
6403
6798
  },
6404
6799
  {
6405
6800
  id: ITEM_CARGO_ARM,
@@ -6412,7 +6807,7 @@ const components = [
6412
6807
  { key: 'insulation', source: 'organic' },
6413
6808
  ],
6414
6809
  recipe: [{ category: 'organic', quantity: 32 }],
6415
- usedIn: [{ type: 'module', name: 'Loader Module T1' }],
6810
+ usedIn: [{ type: 'module', name: 'Loader' }],
6416
6811
  },
6417
6812
  {
6418
6813
  id: ITEM_TOOL_BIT,
@@ -6425,7 +6820,7 @@ const components = [
6425
6820
  { key: 'clarity', source: 'mineral' },
6426
6821
  ],
6427
6822
  recipe: [{ category: 'mineral', quantity: 20 }],
6428
- usedIn: [{ type: 'module', name: 'Manufacturing Module T1' }],
6823
+ usedIn: [{ type: 'module', name: 'Manufacturing' }],
6429
6824
  },
6430
6825
  {
6431
6826
  id: ITEM_REACTION_CHAMBER,
@@ -6438,7 +6833,40 @@ const components = [
6438
6833
  { key: 'thermal', source: 'gas' },
6439
6834
  ],
6440
6835
  recipe: [{ category: 'gas', quantity: 32 }],
6441
- usedIn: [{ type: 'module', name: 'Manufacturing Module T1' }],
6836
+ usedIn: [{ type: 'module', name: 'Manufacturing' }],
6837
+ },
6838
+ {
6839
+ id: ITEM_HULL_PLATES_T2,
6840
+ name: 'Hull Plates T2',
6841
+ description: 'Advanced structural plating reinforced with tier 2 metals.',
6842
+ color: '#9BADB8',
6843
+ mass: 50000,
6844
+ stats: [
6845
+ { key: 'strength', source: 'metal' },
6846
+ { key: 'density', source: 'metal' },
6847
+ ],
6848
+ recipe: [
6849
+ { itemId: ITEM_HULL_PLATES, quantity: 2 },
6850
+ { category: 'metal', quantity: 15 },
6851
+ ],
6852
+ usedIn: [{ type: 'entity', name: 'Container T2' }],
6853
+ },
6854
+ {
6855
+ id: ITEM_CARGO_LINING_T2,
6856
+ name: 'Cargo Lining T2',
6857
+ description: 'Advanced composite lining with improved storage properties.',
6858
+ color: '#E0B84D',
6859
+ mass: 30000,
6860
+ stats: [
6861
+ { key: 'ductility', source: 'precious' },
6862
+ { key: 'purity', source: 'organic' },
6863
+ ],
6864
+ recipe: [
6865
+ { itemId: ITEM_CARGO_LINING, quantity: 2 },
6866
+ { category: 'precious', quantity: 6 },
6867
+ { category: 'organic', quantity: 14 },
6868
+ ],
6869
+ usedIn: [{ type: 'entity', name: 'Container T2' }],
6442
6870
  },
6443
6871
  ];
6444
6872
  const entityRecipes = [
@@ -6447,7 +6875,7 @@ const entityRecipes = [
6447
6875
  name: 'Container',
6448
6876
  description: 'Passive floating cargo storage in space. Towed by ships.',
6449
6877
  color: '#7B8D9E',
6450
- packedItemId: ITEM_CONTAINER_PACKED,
6878
+ packedItemId: ITEM_CONTAINER_T1_PACKED,
6451
6879
  recipe: [
6452
6880
  { itemId: ITEM_HULL_PLATES, quantity: 6 },
6453
6881
  { itemId: ITEM_CARGO_LINING, quantity: 2 },
@@ -6475,12 +6903,60 @@ const entityRecipes = [
6475
6903
  { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
6476
6904
  { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
6477
6905
  ],
6906
+ moduleSlots: [
6907
+ { type: MODULE_ANY },
6908
+ { type: MODULE_ANY },
6909
+ { type: MODULE_ANY },
6910
+ { type: MODULE_ANY },
6911
+ { type: MODULE_ANY },
6912
+ ],
6913
+ },
6914
+ {
6915
+ id: 'warehouse-t1',
6916
+ name: 'Warehouse T1',
6917
+ description: 'Massive stationary storage facility with a single loader module slot.',
6918
+ color: '#EAB308',
6919
+ packedItemId: ITEM_WAREHOUSE_T1_PACKED,
6920
+ recipe: [
6921
+ { itemId: ITEM_HULL_PLATES, quantity: 20 },
6922
+ { itemId: ITEM_CARGO_LINING, quantity: 10 },
6923
+ ],
6924
+ stats: [
6925
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
6926
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
6927
+ { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
6928
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
6929
+ ],
6930
+ moduleSlots: [
6931
+ { type: MODULE_LOADER, label: 'Loader' },
6932
+ { type: MODULE_STORAGE, label: 'Storage' },
6933
+ { type: MODULE_STORAGE, label: 'Storage' },
6934
+ { type: MODULE_STORAGE, label: 'Storage' },
6935
+ { type: MODULE_STORAGE, label: 'Storage' },
6936
+ ],
6937
+ },
6938
+ {
6939
+ id: 'container-t2',
6940
+ name: 'Container T2',
6941
+ description: 'Advanced cargo container with improved capacity formulas.',
6942
+ color: '#9BADB8',
6943
+ packedItemId: ITEM_CONTAINER_T2_PACKED,
6944
+ recipe: [
6945
+ { itemId: ITEM_HULL_PLATES_T2, quantity: 6 },
6946
+ { itemId: ITEM_CARGO_LINING_T2, quantity: 2 },
6947
+ ],
6948
+ stats: [
6949
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'strength' },
6950
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'density' },
6951
+ { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'ductility' },
6952
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'purity' },
6953
+ ],
6478
6954
  },
6479
6955
  ];
6480
6956
  const moduleRecipes = [
6481
6957
  {
6482
6958
  id: 'engine-t1',
6483
- name: 'Engine Module T1',
6959
+ name: 'Engine',
6484
6960
  description: 'Basic propulsion system. Converts volatile gases into thrust.',
6485
6961
  color: '#E86344',
6486
6962
  itemId: ITEM_ENGINE_T1,
@@ -6493,7 +6969,7 @@ const moduleRecipes = [
6493
6969
  },
6494
6970
  {
6495
6971
  id: 'generator-t1',
6496
- name: 'Generator Module T1',
6972
+ name: 'Generator',
6497
6973
  description: 'Basic energy system. Stores and recharges energy from resonant minerals.',
6498
6974
  color: '#7B5AE8',
6499
6975
  itemId: ITEM_GENERATOR_T1,
@@ -6506,7 +6982,7 @@ const moduleRecipes = [
6506
6982
  },
6507
6983
  {
6508
6984
  id: 'extractor-t1',
6509
- name: 'Extractor Module T1',
6985
+ name: 'Extractor',
6510
6986
  description: 'Basic extraction system. Drills and probes for raw resources.',
6511
6987
  color: '#7B8D9E',
6512
6988
  itemId: ITEM_EXTRACTOR_T1,
@@ -6525,7 +7001,7 @@ const moduleRecipes = [
6525
7001
  },
6526
7002
  {
6527
7003
  id: 'loader-t1',
6528
- name: 'Loader Module T1',
7004
+ name: 'Loader',
6529
7005
  description: 'Basic cargo handling system. Loads and unloads cargo with articulated arms.',
6530
7006
  color: '#6B8E5A',
6531
7007
  itemId: ITEM_LOADER_T1,
@@ -6541,7 +7017,7 @@ const moduleRecipes = [
6541
7017
  },
6542
7018
  {
6543
7019
  id: 'manufacturing-t1',
6544
- name: 'Manufacturing Module T1',
7020
+ name: 'Manufacturing',
6545
7021
  description: 'Basic crafting system. Processes materials using reaction chambers and cutting tools.',
6546
7022
  color: '#7EC8E3',
6547
7023
  itemId: ITEM_MANUFACTURING_T1,
@@ -6555,6 +7031,24 @@ const moduleRecipes = [
6555
7031
  { key: 'clarity', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'clarity' },
6556
7032
  ],
6557
7033
  },
7034
+ {
7035
+ id: 'storage-t1',
7036
+ name: 'Storage',
7037
+ description: 'Expands cargo capacity based on hull material quality',
7038
+ color: '#8B7355',
7039
+ itemId: ITEM_STORAGE_T1,
7040
+ moduleType: MODULE_STORAGE,
7041
+ recipe: [
7042
+ { itemId: ITEM_HULL_PLATES, quantity: 8 },
7043
+ { itemId: ITEM_CARGO_LINING, quantity: 4 },
7044
+ ],
7045
+ stats: [
7046
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
7047
+ { key: 'ductility', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'ductility' },
7048
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
7049
+ { key: 'density', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'density' },
7050
+ ],
7051
+ },
6558
7052
  ];
6559
7053
  function getModuleRecipe(id) {
6560
7054
  return moduleRecipes.find((r) => r.id === id);
@@ -6571,6 +7065,10 @@ function getEntityRecipe(id) {
6571
7065
  function getEntityRecipeByItemId(itemId) {
6572
7066
  return entityRecipes.find((r) => r.packedItemId === itemId);
6573
7067
  }
7068
+ function getEntitySlotLayout(packedItemId) {
7069
+ const recipe = getEntityRecipeByItemId(packedItemId);
7070
+ return recipe?.moduleSlots ?? [];
7071
+ }
6574
7072
  function getAllCraftableItems() {
6575
7073
  const items = [];
6576
7074
  for (const comp of components) {
@@ -6598,10 +7096,13 @@ function encodeStats(values) {
6598
7096
  }
6599
7097
  return seed;
6600
7098
  }
7099
+ function decodeStat(seed, index) {
7100
+ return Number((seed >> BigInt(index * 10)) & 0x3ffn);
7101
+ }
6601
7102
  function decodeStats(seed, count) {
6602
7103
  const stats = [];
6603
7104
  for (let i = 0; i < count; i++) {
6604
- stats.push(Number((seed >> BigInt(i * 10)) & 0x3ffn));
7105
+ stats.push(decodeStat(seed, i));
6605
7106
  }
6606
7107
  return stats;
6607
7108
  }
@@ -6682,6 +7183,55 @@ function decodeStackStats(itemId, seed) {
6682
7183
  const raw = deriveResourceStats(BigInt(seed.toString()));
6683
7184
  return { stat1: raw.stat1, stat2: raw.stat2, stat3: raw.stat3 };
6684
7185
  }
7186
+ const categoryItemMass = {
7187
+ metal: 30000,
7188
+ precious: 40000,
7189
+ gas: 15000,
7190
+ mineral: 22000,
7191
+ organic: 15000,
7192
+ };
7193
+ function computeInputMass(itemId, itemType) {
7194
+ if (itemType === 'component') {
7195
+ const comp = getComponentById(itemId);
7196
+ if (!comp)
7197
+ return 0;
7198
+ return comp.recipe.reduce((sum, input) => {
7199
+ const mass = input.category ? (categoryItemMass[input.category] ?? 0) : 0;
7200
+ return sum + mass * input.quantity;
7201
+ }, 0);
7202
+ }
7203
+ if (itemType === 'module') {
7204
+ const mod = getModuleRecipe(itemId);
7205
+ if (!mod)
7206
+ return 0;
7207
+ return mod.recipe.reduce((sum, input) => {
7208
+ const comp = input.itemId ? getComponentById(input.itemId) : undefined;
7209
+ return sum + (comp?.mass ?? 0) * input.quantity;
7210
+ }, 0);
7211
+ }
7212
+ if (itemType === 'entity') {
7213
+ const ent = getEntityRecipe(itemId);
7214
+ if (!ent)
7215
+ return 0;
7216
+ return ent.recipe.reduce((sum, input) => {
7217
+ const comp = input.itemId ? getComponentById(input.itemId) : undefined;
7218
+ return sum + (comp?.mass ?? 0) * input.quantity;
7219
+ }, 0);
7220
+ }
7221
+ return 0;
7222
+ }
7223
+ function blendCrossGroup(sources) {
7224
+ let weightedSum = 0;
7225
+ let totalWeight = 0;
7226
+ for (const src of sources) {
7227
+ weightedSum += src.value * src.weight;
7228
+ totalWeight += src.weight;
7229
+ }
7230
+ if (totalWeight === 0)
7231
+ return 1;
7232
+ const result = Math.floor(weightedSum / totalWeight);
7233
+ return Math.max(1, Math.min(999, result));
7234
+ }
6685
7235
  function blendCargoStacks(itemId, stacks) {
6686
7236
  const decoded = stacks.map((s) => ({
6687
7237
  quantity: s.quantity,
@@ -6814,7 +7364,7 @@ function calc_craft_energy(drain, duration) {
6814
7364
  }
6815
7365
 
6816
7366
  const categoryColors = {
6817
- metal: '#7B8D9E',
7367
+ metal: '#5B9BD5',
6818
7368
  precious: '#D4A843',
6819
7369
  gas: '#7EC8E3',
6820
7370
  mineral: '#B8A9C9',
@@ -6836,6 +7386,508 @@ const categoryIcons = {
6836
7386
  };
6837
7387
  const componentIcon = '▣';
6838
7388
  const moduleIcon = '⬢';
7389
+ const itemIcons = {
7390
+ 10001: 'HP',
7391
+ 10002: 'CL',
7392
+ 10003: 'TC',
7393
+ 10004: 'PC',
7394
+ 10005: 'DS',
7395
+ 10006: 'EP',
7396
+ 10007: 'CA',
7397
+ 10008: 'TB',
7398
+ 10009: 'RC',
7399
+ 10100: 'EN',
7400
+ 10101: 'GN',
7401
+ 10102: 'EX',
7402
+ 10103: 'LD',
7403
+ 10104: 'MF',
7404
+ 10105: 'ST',
7405
+ 10200: 'CT',
7406
+ 10201: 'SH',
7407
+ 10202: 'WH',
7408
+ 20001: 'HP',
7409
+ 20002: 'CL',
7410
+ 20200: 'CT',
7411
+ };
7412
+
7413
+ const ITEM_TYPE_RESOURCE = 0;
7414
+ const ITEM_TYPE_COMPONENT = 1;
7415
+ const ITEM_TYPE_MODULE = 2;
7416
+ const ITEM_TYPE_ENTITY = 3;
7417
+ function itemTypeCode(id) {
7418
+ switch (itemCategory(id)) {
7419
+ case 'resource': return ITEM_TYPE_RESOURCE;
7420
+ case 'component': return ITEM_TYPE_COMPONENT;
7421
+ case 'module': return ITEM_TYPE_MODULE;
7422
+ case 'entity': return ITEM_TYPE_ENTITY;
7423
+ }
7424
+ }
7425
+ function itemTier(id) {
7426
+ if (id < 10000)
7427
+ return 0;
7428
+ return Math.floor(id / 10000);
7429
+ }
7430
+ function itemOffset(id) {
7431
+ return id % 10000;
7432
+ }
7433
+ function itemCategory(id) {
7434
+ if (id < 10000)
7435
+ return 'resource';
7436
+ const offset = itemOffset(id);
7437
+ if (offset >= 200)
7438
+ return 'entity';
7439
+ if (offset >= 100)
7440
+ return 'module';
7441
+ return 'component';
7442
+ }
7443
+ function isRelatedItem(a, b) {
7444
+ if (a < 10000 || b < 10000)
7445
+ return false;
7446
+ return itemOffset(a) === itemOffset(b);
7447
+ }
7448
+ function isCraftedItem(id) {
7449
+ return id >= 10000;
7450
+ }
7451
+
7452
+ const categories = [
7453
+ {
7454
+ id: 'metal',
7455
+ name: 'Metals',
7456
+ label: 'Metal',
7457
+ description: 'Structural, strong, heavy — hulls, frames, load-bearing components',
7458
+ color: categoryColors.metal,
7459
+ },
7460
+ {
7461
+ id: 'precious',
7462
+ name: 'Precious Metals',
7463
+ label: 'Precious',
7464
+ description: 'Conductive, corrosion-resistant — electronics, energy systems, precision components',
7465
+ color: categoryColors.precious,
7466
+ },
7467
+ {
7468
+ id: 'gas',
7469
+ name: 'Gases',
7470
+ label: 'Gas',
7471
+ description: 'Energy, fuel, volatile/reactive — propulsion, thermal processing, chemical reactions',
7472
+ color: categoryColors.gas,
7473
+ },
7474
+ {
7475
+ id: 'mineral',
7476
+ name: 'Minerals',
7477
+ label: 'Mineral',
7478
+ description: 'Crystalline, hard, precise — sensors, optics, energy storage, cutting surfaces',
7479
+ color: categoryColors.mineral,
7480
+ },
7481
+ {
7482
+ id: 'organic',
7483
+ name: 'Organics',
7484
+ label: 'Organic',
7485
+ description: 'Adaptive, biological, polymer — insulation, composites, bio-processes',
7486
+ color: categoryColors.organic,
7487
+ },
7488
+ ];
7489
+ function getCategoryInfo(id) {
7490
+ if (id === undefined)
7491
+ return categories;
7492
+ return categories.find((c) => c.id === id);
7493
+ }
7494
+
7495
+ const planetSubtypes = [
7496
+ {
7497
+ id: 0,
7498
+ label: 'Gas Giant',
7499
+ description: 'Massive planets with thick atmospheres rich in gases',
7500
+ paletteType: 'gasGiant',
7501
+ },
7502
+ {
7503
+ id: 1,
7504
+ label: 'Rocky',
7505
+ description: 'Dense, mineral-rich worlds with metallic cores',
7506
+ paletteType: 'rocky',
7507
+ },
7508
+ {
7509
+ id: 2,
7510
+ label: 'Terrestrial',
7511
+ description: 'Earth-like planets with varied terrain and life potential',
7512
+ paletteType: 'terrestrial',
7513
+ },
7514
+ {
7515
+ id: 3,
7516
+ label: 'Icy',
7517
+ description: 'Frozen worlds with subsurface resources',
7518
+ paletteType: 'ice',
7519
+ },
7520
+ {
7521
+ id: 4,
7522
+ label: 'Ocean',
7523
+ description: 'Water worlds with dissolved minerals and organics',
7524
+ paletteType: 'ocean',
7525
+ },
7526
+ {
7527
+ id: 5,
7528
+ label: 'Industrial',
7529
+ description: 'Heavily processed worlds rich in refined materials',
7530
+ paletteType: 'industrial',
7531
+ },
7532
+ ];
7533
+ function getPlanetSubtypes() {
7534
+ return planetSubtypes;
7535
+ }
7536
+ function getPlanetSubtype(id) {
7537
+ return planetSubtypes.find((s) => s.id === id);
7538
+ }
7539
+
7540
+ const capabilityNames = [
7541
+ 'Hull',
7542
+ 'Storage',
7543
+ 'Movement',
7544
+ 'Energy',
7545
+ 'Loader',
7546
+ 'Extraction',
7547
+ 'Warp',
7548
+ 'Manufacturing',
7549
+ 'Launch',
7550
+ ];
7551
+ const capabilityAttributes = [
7552
+ { capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull' },
7553
+ { capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored' },
7554
+ { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
7555
+ { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
7556
+ { capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage' },
7557
+ { capability: 'Energy', attribute: 'recharge', description: 'Energy regeneration rate' },
7558
+ { capability: 'Loader', attribute: 'mass', description: 'Weight of the loader unit itself' },
7559
+ { capability: 'Loader', attribute: 'thrust', description: 'Loading speed/force' },
7560
+ { capability: 'Extraction', attribute: 'rate', description: 'Mass extracted per second' },
7561
+ { capability: 'Extraction', attribute: 'drain', description: 'Energy consumed per extraction' },
7562
+ { capability: 'Extraction', attribute: 'depth', description: 'Maximum extraction depth' },
7563
+ { capability: 'Extraction', attribute: 'drill', description: 'Drilling speed/penetration' },
7564
+ { capability: 'Warp', attribute: 'range', description: 'Maximum warp distance' },
7565
+ { capability: 'Manufacturing', attribute: 'speed', description: 'Crafting time per item' },
7566
+ {
7567
+ capability: 'Manufacturing',
7568
+ attribute: 'drain',
7569
+ description: 'Energy consumed per second while crafting',
7570
+ },
7571
+ { capability: 'Manufacturing', attribute: 'quality', description: 'Modifier on output quality' },
7572
+ { capability: 'Launch', attribute: 'range', description: 'Maximum launch distance' },
7573
+ { capability: 'Launch', attribute: 'capacity', description: 'Maximum mass per launch' },
7574
+ { capability: 'Launch', attribute: 'drain', description: 'Energy consumed per launch' },
7575
+ ];
7576
+ const statMappings = [
7577
+ {
7578
+ stat: 'Strength',
7579
+ capability: 'Extraction',
7580
+ attribute: 'rate',
7581
+ rationale: 'Raw mechanical force drives faster extraction',
7582
+ },
7583
+ {
7584
+ stat: 'Strength',
7585
+ capability: 'Storage',
7586
+ attribute: 'capacity',
7587
+ rationale: 'Stronger walls hold more capacity per mass',
7588
+ },
7589
+ {
7590
+ stat: 'Strength',
7591
+ capability: 'Launch',
7592
+ attribute: 'capacity',
7593
+ rationale: 'Stronger housing handles larger launch loads',
7594
+ },
7595
+ {
7596
+ stat: 'Tolerance',
7597
+ capability: 'Movement',
7598
+ attribute: 'thrust',
7599
+ rationale: 'Engine components that tolerate more can push harder',
7600
+ },
7601
+ {
7602
+ stat: 'Tolerance',
7603
+ capability: 'Energy',
7604
+ attribute: 'recharge',
7605
+ rationale: 'Generator housing withstands stress for faster recharge',
7606
+ },
7607
+ {
7608
+ stat: 'Tolerance',
7609
+ capability: 'Extraction',
7610
+ attribute: 'depth',
7611
+ rationale: 'Housing withstands pressure/heat at extreme depths',
7612
+ },
7613
+ {
7614
+ stat: 'Tolerance',
7615
+ capability: 'Warp',
7616
+ attribute: 'range',
7617
+ rationale: 'Warp drive housing withstands extreme forces',
7618
+ },
7619
+ {
7620
+ stat: 'Density',
7621
+ capability: 'Hull',
7622
+ attribute: 'mass',
7623
+ rationale: 'Lighter metal = lighter hull',
7624
+ },
7625
+ {
7626
+ stat: 'Density',
7627
+ capability: 'Loader',
7628
+ attribute: 'mass',
7629
+ rationale: 'Lighter metal = lighter loader units',
7630
+ },
7631
+ {
7632
+ stat: 'Density',
7633
+ capability: 'Movement',
7634
+ attribute: 'drain',
7635
+ rationale: 'Lighter components require less energy to move',
7636
+ },
7637
+ {
7638
+ stat: 'Conductivity',
7639
+ capability: 'Movement',
7640
+ attribute: 'drain',
7641
+ rationale: 'Efficient energy transfer reduces movement energy cost',
7642
+ },
7643
+ {
7644
+ stat: 'Conductivity',
7645
+ capability: 'Extraction',
7646
+ attribute: 'drain',
7647
+ rationale: 'Efficient energy transfer reduces extraction energy cost',
7648
+ },
7649
+ {
7650
+ stat: 'Conductivity',
7651
+ capability: 'Manufacturing',
7652
+ attribute: 'drain',
7653
+ rationale: 'Efficient energy transfer reduces manufacturing energy cost',
7654
+ },
7655
+ {
7656
+ stat: 'Conductivity',
7657
+ capability: 'Energy',
7658
+ attribute: 'recharge',
7659
+ rationale: 'Better conductivity speeds energy flow during recharge',
7660
+ },
7661
+ {
7662
+ stat: 'Ductility',
7663
+ capability: 'Manufacturing',
7664
+ attribute: 'quality',
7665
+ rationale: 'Precise shaping enables tighter manufacturing tolerances',
7666
+ },
7667
+ {
7668
+ stat: 'Ductility',
7669
+ capability: 'Extraction',
7670
+ attribute: 'rate',
7671
+ rationale: 'Precisely shaped drill components extract faster',
7672
+ },
7673
+ {
7674
+ stat: 'Ductility',
7675
+ capability: 'Storage',
7676
+ attribute: 'capacity',
7677
+ rationale: 'Precision-formed container walls maximize volume',
7678
+ },
7679
+ {
7680
+ stat: 'Ductility',
7681
+ capability: 'Loader',
7682
+ attribute: 'mass',
7683
+ rationale: 'Precision-formed precious metal reduces loader unit mass',
7684
+ },
7685
+ {
7686
+ stat: 'Reflectivity',
7687
+ capability: 'Extraction',
7688
+ attribute: 'depth',
7689
+ rationale: 'Reflective heat shielding protects equipment at depth',
7690
+ },
7691
+ {
7692
+ stat: 'Reflectivity',
7693
+ capability: 'Launch',
7694
+ attribute: 'range',
7695
+ rationale: 'Reflective surfaces focus electromagnetic launch energy',
7696
+ },
7697
+ {
7698
+ stat: 'Volatility',
7699
+ capability: 'Extraction',
7700
+ attribute: 'rate',
7701
+ rationale: 'Energy release powers faster extraction',
7702
+ },
7703
+ {
7704
+ stat: 'Volatility',
7705
+ capability: 'Movement',
7706
+ attribute: 'thrust',
7707
+ rationale: 'Energy release drives propulsion force',
7708
+ },
7709
+ {
7710
+ stat: 'Volatility',
7711
+ capability: 'Loader',
7712
+ attribute: 'thrust',
7713
+ rationale: 'Energy release powers loader motors',
7714
+ },
7715
+ {
7716
+ stat: 'Volatility',
7717
+ capability: 'Launch',
7718
+ attribute: 'capacity',
7719
+ rationale: 'Energy release enables launching heavier payloads',
7720
+ },
7721
+ {
7722
+ stat: 'Reactivity',
7723
+ capability: 'Manufacturing',
7724
+ attribute: 'speed',
7725
+ rationale: 'Reactive gases accelerate chemical/thermal processing',
7726
+ },
7727
+ {
7728
+ stat: 'Reactivity',
7729
+ capability: 'Extraction',
7730
+ attribute: 'drill',
7731
+ rationale: 'Reactive gases manage heat/friction during drilling',
7732
+ },
7733
+ {
7734
+ stat: 'Reactivity',
7735
+ capability: 'Launch',
7736
+ attribute: 'drain',
7737
+ rationale: 'Reactive gas medium reduces electromagnetic resistance',
7738
+ },
7739
+ {
7740
+ stat: 'Thermal',
7741
+ capability: 'Manufacturing',
7742
+ attribute: 'quality',
7743
+ rationale: 'Precise thermal control during fabrication',
7744
+ },
7745
+ {
7746
+ stat: 'Thermal',
7747
+ capability: 'Extraction',
7748
+ attribute: 'drain',
7749
+ rationale: 'Thermal management reduces energy waste during extraction',
7750
+ },
7751
+ {
7752
+ stat: 'Thermal',
7753
+ capability: 'Energy',
7754
+ attribute: 'capacity',
7755
+ rationale: 'Thermal management enables denser energy storage',
7756
+ },
7757
+ {
7758
+ stat: 'Resonance',
7759
+ capability: 'Energy',
7760
+ attribute: 'capacity',
7761
+ rationale: 'Resonating crystals store energy in fields',
7762
+ },
7763
+ {
7764
+ stat: 'Resonance',
7765
+ capability: 'Warp',
7766
+ attribute: 'range',
7767
+ rationale: 'Resonant crystals amplify warp field projection',
7768
+ },
7769
+ {
7770
+ stat: 'Resonance',
7771
+ capability: 'Launch',
7772
+ attribute: 'range',
7773
+ rationale: 'Resonant crystals focus electromagnetic launch field',
7774
+ },
7775
+ {
7776
+ stat: 'Resonance',
7777
+ capability: 'Launch',
7778
+ attribute: 'capacity',
7779
+ rationale: 'Stronger resonant field launches heavier payloads',
7780
+ },
7781
+ {
7782
+ stat: 'Hardness',
7783
+ capability: 'Manufacturing',
7784
+ attribute: 'speed',
7785
+ rationale: 'Hard tooling surfaces cut and shape materials faster',
7786
+ },
7787
+ {
7788
+ stat: 'Hardness',
7789
+ capability: 'Launch',
7790
+ attribute: 'drain',
7791
+ rationale: 'Hard rail surfaces reduce friction, less energy wasted',
7792
+ },
7793
+ {
7794
+ stat: 'Clarity',
7795
+ capability: 'Energy',
7796
+ attribute: 'recharge',
7797
+ rationale: 'Flawless crystals enable smoother energy flow during recharge',
7798
+ },
7799
+ {
7800
+ stat: 'Clarity',
7801
+ capability: 'Manufacturing',
7802
+ attribute: 'quality',
7803
+ rationale: 'Precision optics for calibration during fabrication',
7804
+ },
7805
+ {
7806
+ stat: 'Clarity',
7807
+ capability: 'Manufacturing',
7808
+ attribute: 'drain',
7809
+ rationale: 'Precision computing optimizes energy routing in factory',
7810
+ },
7811
+ {
7812
+ stat: 'Plasticity',
7813
+ capability: 'Manufacturing',
7814
+ attribute: 'speed',
7815
+ rationale: 'Easily reshaped materials speed up processing',
7816
+ },
7817
+ {
7818
+ stat: 'Plasticity',
7819
+ capability: 'Movement',
7820
+ attribute: 'thrust',
7821
+ rationale: 'Flexible polymer seals reduce friction in propulsion',
7822
+ },
7823
+ {
7824
+ stat: 'Plasticity',
7825
+ capability: 'Loader',
7826
+ attribute: 'thrust',
7827
+ rationale: 'Flexible joints improve loader force transfer',
7828
+ },
7829
+ {
7830
+ stat: 'Insulation',
7831
+ capability: 'Movement',
7832
+ attribute: 'drain',
7833
+ rationale: 'Better insulation reduces energy loss during movement',
7834
+ },
7835
+ {
7836
+ stat: 'Insulation',
7837
+ capability: 'Extraction',
7838
+ attribute: 'drain',
7839
+ rationale: 'Better insulation reduces energy loss during extraction',
7840
+ },
7841
+ {
7842
+ stat: 'Insulation',
7843
+ capability: 'Manufacturing',
7844
+ attribute: 'drain',
7845
+ rationale: 'Better insulation reduces energy loss during manufacturing',
7846
+ },
7847
+ {
7848
+ stat: 'Insulation',
7849
+ capability: 'Launch',
7850
+ attribute: 'drain',
7851
+ rationale: 'Better insulation reduces energy loss during launch',
7852
+ },
7853
+ {
7854
+ stat: 'Purity',
7855
+ capability: 'Storage',
7856
+ attribute: 'capacity',
7857
+ rationale: 'Purer composites make better containers',
7858
+ },
7859
+ {
7860
+ stat: 'Purity',
7861
+ capability: 'Extraction',
7862
+ attribute: 'drill',
7863
+ rationale: 'Purer bio-lubricants reduce friction during drilling',
7864
+ },
7865
+ {
7866
+ stat: 'Purity',
7867
+ capability: 'Energy',
7868
+ attribute: 'capacity',
7869
+ rationale: 'Purer organic electrolytes store more charge',
7870
+ },
7871
+ ];
7872
+ const invertedAttributes = new Set(['drain', 'mass']);
7873
+ function isInvertedAttribute(attribute) {
7874
+ return invertedAttributes.has(attribute);
7875
+ }
7876
+ function getCapabilityAttributes(capability) {
7877
+ if (capability) {
7878
+ return capabilityAttributes.filter((a) => a.capability === capability);
7879
+ }
7880
+ return capabilityAttributes;
7881
+ }
7882
+ function getStatMappings() {
7883
+ return statMappings;
7884
+ }
7885
+ function getStatMappingsForStat(stat) {
7886
+ return statMappings.filter((m) => m.stat === stat);
7887
+ }
7888
+ function getStatMappingsForCapability(capability) {
7889
+ return statMappings.filter((m) => m.capability === capability);
7890
+ }
6839
7891
 
6840
7892
  function computeShipHullCapabilities(stats) {
6841
7893
  const density = stats.density ?? 500;
@@ -6853,7 +7905,7 @@ function computeEngineCapabilities(stats) {
6853
7905
  const thm = stats.thermal ?? 500;
6854
7906
  return {
6855
7907
  thrust: 400 + Math.floor(vol * 3 / 4),
6856
- drain: Math.max(16, 30 - Math.floor(thm / 70)),
7908
+ drain: Math.max(30, 50 - Math.floor(thm / 70)),
6857
7909
  };
6858
7910
  }
6859
7911
  function computeGeneratorCapabilities(stats) {
@@ -6893,6 +7945,25 @@ function computeManufacturingCapabilities(stats) {
6893
7945
  drain: Math.max(5, 30 - Math.floor(clr / 33)),
6894
7946
  };
6895
7947
  }
7948
+ function computeStorageCapabilities(stats, baseCapacity) {
7949
+ const strength = stats.strength ?? 500;
7950
+ const ductility = stats.ductility ?? 500;
7951
+ const purity = stats.purity ?? 500;
7952
+ const statSum = strength + ductility + purity;
7953
+ const capacityBonus = Math.floor(baseCapacity * (10 + Math.floor(statSum * 10 / 2997)) / 100);
7954
+ return { capacityBonus };
7955
+ }
7956
+ function computeWarehouseHullCapabilities(stats) {
7957
+ const density = stats.density ?? 500;
7958
+ const strength = stats.strength ?? 500;
7959
+ const ductility = stats.ductility ?? 500;
7960
+ const purity = stats.purity ?? 500;
7961
+ const hullmass = 25000 + 75 * density;
7962
+ const statSum = strength + ductility + purity;
7963
+ const exponent = statSum / 2997.0;
7964
+ const capacity = Math.floor(20000000 * Math.pow(10, exponent));
7965
+ return { hullmass, capacity };
7966
+ }
6896
7967
 
6897
7968
  function toNum(v) {
6898
7969
  return Number(UInt16.from(v).value.toString());
@@ -6957,7 +8028,7 @@ function resolveComponent(id, seed) {
6957
8028
  return {
6958
8029
  itemId: id,
6959
8030
  name: comp.name,
6960
- icon: componentIcon,
8031
+ icon: itemIcons[id] ?? componentIcon,
6961
8032
  tier: 't1',
6962
8033
  mass: comp.mass,
6963
8034
  itemType: 'component',
@@ -7004,6 +8075,16 @@ function computeCapabilityGroup(moduleType, stats) {
7004
8075
  { label: 'Drain', value: caps.drain },
7005
8076
  ] };
7006
8077
  }
8078
+ case MODULE_STORAGE: {
8079
+ const str = stats.strength ?? 500;
8080
+ const duc = stats.ductility ?? 500;
8081
+ const pur = stats.purity ?? 500;
8082
+ const statSum = str + duc + pur;
8083
+ const pct = 10 + Math.floor(statSum * 10 / 2997);
8084
+ return { capability: 'Storage', attributes: [
8085
+ { label: 'Capacity Bonus', value: pct },
8086
+ ] };
8087
+ }
7007
8088
  default:
7008
8089
  return undefined;
7009
8090
  }
@@ -7021,7 +8102,7 @@ function resolveModule(id, seed) {
7021
8102
  return {
7022
8103
  itemId: id,
7023
8104
  name: recipe.name,
7024
- icon: moduleIcon,
8105
+ icon: itemIcons[id] ?? moduleIcon,
7025
8106
  tier: 't1',
7026
8107
  mass: 0,
7027
8108
  itemType: 'module',
@@ -7031,6 +8112,7 @@ function resolveModule(id, seed) {
7031
8112
  function resolveEntity(id, seed, modules) {
7032
8113
  const recipe = getEntityRecipeByItemId(id);
7033
8114
  let attributes;
8115
+ let moduleSlots;
7034
8116
  if (seed !== undefined) {
7035
8117
  const stats = decodeCraftedItemStats(id, toBigSeed(seed));
7036
8118
  attributes = [];
@@ -7049,28 +8131,35 @@ function resolveEntity(id, seed, modules) {
7049
8131
  { label: 'Capacity', value: containerCaps.capacity },
7050
8132
  ] });
7051
8133
  }
7052
- if (modules) {
7053
- for (const mod of modules) {
7054
- if (!mod.installed)
7055
- continue;
8134
+ }
8135
+ if (recipe.moduleSlots) {
8136
+ moduleSlots = recipe.moduleSlots.map((slot, i) => {
8137
+ const mod = modules?.[i];
8138
+ if (mod?.installed) {
7056
8139
  const modItemId = Number(mod.installed.item_id.value.toString());
7057
8140
  const modSeed = BigInt(mod.installed.seed.toString());
7058
8141
  const modStats = decodeCraftedItemStats(modItemId, modSeed);
7059
8142
  const modType = getModuleCapabilityType(modItemId);
7060
8143
  const group = computeCapabilityGroup(modType, modStats);
7061
- if (group)
7062
- attributes.push(group);
8144
+ const modRecipe = getModuleRecipeByItemId(modItemId);
8145
+ return {
8146
+ name: modRecipe?.name ?? 'Module',
8147
+ installed: true,
8148
+ attributes: group?.attributes,
8149
+ };
7063
8150
  }
7064
- }
8151
+ return { installed: false };
8152
+ });
7065
8153
  }
7066
8154
  return {
7067
8155
  itemId: id,
7068
8156
  name: recipe.name,
7069
- icon: componentIcon,
8157
+ icon: itemIcons[id] ?? componentIcon,
7070
8158
  tier: 't1',
7071
8159
  mass: 0,
7072
8160
  itemType: 'entity',
7073
8161
  attributes,
8162
+ moduleSlots,
7074
8163
  };
7075
8164
  }
7076
8165
  function resolveItem(itemId, seed, modules) {
@@ -7084,5 +8173,211 @@ function resolveItem(itemId, seed, modules) {
7084
8173
  return resolveResource(id, seed);
7085
8174
  }
7086
8175
 
7087
- export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CONTAINER_PACKED, ITEM_DOES_NOT_EXIST, ITEM_DRILL_SHAFT, ITEM_ENGINE_T1, ITEM_EXTRACTION_PROBE, ITEM_EXTRACTOR_T1, ITEM_GENERATOR_T1, ITEM_HULL_PLATES, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_EXTRACTOR, MODULE_GENERATOR, MODULE_LAUNCHER, MODULE_LOADER, MODULE_WARP, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendStacks, calcCargoMass, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capsHasCrafter, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoUtils, categoryColors, categoryIcons, componentIcon, components, computeComponentStats, computeContainerCapabilities, computeEngineCapabilities, computeEntityStats, computeExtractorCapabilities, computeGeneratorCapabilities, computeLoaderCapabilities, computeManufacturingCapabilities, computeShipHullCapabilities, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStats, Shipload as default, depthScaleFactor, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, distanceBetweenCoordinates, distanceBetweenPoints, encodeStats, energyPercent, entityRecipes, estimateDealTravelTime, estimateTravelTime, findNearbyPlanets, getAllCraftableItems, getComponentById, getComponentsForCategory, getComponentsForStat, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityRecipe, getEntityRecipeByItemId, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getModuleCapabilityType, getModuleRecipe, getModuleRecipeByItemId, getPositionAt, getResourceTier, getResourceWeight, getStatDefinitions, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isModuleItem, itemIds, lerp, makeContainer, makeShip, makeWarehouse, maxTravelDistance, moduleAccepts, moduleIcon, moduleRecipes, needsRecharge, projectEntity, projectEntityAt, resolveItem, resolveStats, rotation, schedule, tierColors, toLocation };
8176
+ function readCommonBase(data) {
8177
+ return {
8178
+ quantity: Number(data.quantity),
8179
+ seed: String(data.seed),
8180
+ origin_x: String(data.origin_x),
8181
+ origin_y: String(data.origin_y),
8182
+ };
8183
+ }
8184
+ function deserializeScalar(data, itemId) {
8185
+ const base = readCommonBase(data);
8186
+ return { item_id: itemId, quantity: base.quantity, seed: base.seed };
8187
+ }
8188
+ const deserializeResource = deserializeScalar;
8189
+ const deserializeComponent = deserializeScalar;
8190
+ const deserializeModule = deserializeScalar;
8191
+ function deserializeEntity(data, itemId) {
8192
+ const base = readCommonBase(data);
8193
+ const moduleItems = (data.module_items ?? []).map((v) => Number(v));
8194
+ const moduleSeeds = (data.module_seeds ?? []).map((v) => String(v));
8195
+ const layout = getEntitySlotLayout(itemId);
8196
+ const modules = layout.map((slot, i) => ({
8197
+ type: slot.type,
8198
+ installed: moduleItems[i] && moduleItems[i] !== 0
8199
+ ? { item_id: moduleItems[i], seed: moduleSeeds[i] }
8200
+ : undefined,
8201
+ }));
8202
+ return { item_id: itemId, quantity: base.quantity, seed: base.seed, modules };
8203
+ }
8204
+ function deserializeAsset(data, itemId) {
8205
+ const type = itemTypeCode(itemId);
8206
+ switch (type) {
8207
+ case ITEM_TYPE_RESOURCE:
8208
+ case ITEM_TYPE_COMPONENT:
8209
+ case ITEM_TYPE_MODULE:
8210
+ return deserializeScalar(data, itemId);
8211
+ case ITEM_TYPE_ENTITY:
8212
+ return deserializeEntity(data, itemId);
8213
+ default:
8214
+ throw new Error(`unknown item type ${type} for item ${itemId}`);
8215
+ }
8216
+ }
8217
+
8218
+ function idiv(a, b) {
8219
+ return Math.floor(a / b);
8220
+ }
8221
+ function computeBaseHullmass(seed) {
8222
+ const density = decodeStat(seed, 1);
8223
+ return 25000 + 75 * density;
8224
+ }
8225
+ function computeBaseCapacityShip(seed) {
8226
+ const s = decodeStat(seed, 0) + decodeStat(seed, 2) + decodeStat(seed, 3);
8227
+ return Math.floor(1000000 * Math.pow(10, s / 2997));
8228
+ }
8229
+ function computeBaseCapacityWarehouse(seed) {
8230
+ const s = decodeStat(seed, 0) + decodeStat(seed, 2) + decodeStat(seed, 3);
8231
+ return Math.floor(20000000 * Math.pow(10, s / 2997));
8232
+ }
8233
+ const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
8234
+ const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
8235
+ const computeGeneratorCap = (res) => 300 + idiv(res, 6);
8236
+ const computeGeneratorRech = (clr) => 5 + idiv(clr * 15, 1000);
8237
+ const computeExtractorRate = (str) => 200 + str;
8238
+ const computeExtractorDrain = (con) => Math.max(10, 50 - idiv(con, 20));
8239
+ const computeExtractorDepth = (tol) => 200 + idiv(tol * 3, 2);
8240
+ const computeExtractorDrill = (ref) => 100 + idiv(ref * 4, 5);
8241
+ const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
8242
+ const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
8243
+ const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
8244
+ const computeCrafterDrain = (clr) => Math.max(5, 30 - idiv(clr, 33));
8245
+ function entityDisplayName(itemId) {
8246
+ switch (itemId) {
8247
+ case ITEM_SHIP_T1_PACKED:
8248
+ return 'Ship T1';
8249
+ case ITEM_WAREHOUSE_T1_PACKED:
8250
+ return 'Warehouse T1';
8251
+ case ITEM_CONTAINER_T1_PACKED:
8252
+ return 'Container T1';
8253
+ case ITEM_CONTAINER_T2_PACKED:
8254
+ return 'Container T2';
8255
+ default:
8256
+ return 'Entity';
8257
+ }
8258
+ }
8259
+ function moduleDisplayName(itemId) {
8260
+ switch (itemId) {
8261
+ case ITEM_ENGINE_T1:
8262
+ return 'Engine T1';
8263
+ case ITEM_GENERATOR_T1:
8264
+ return 'Generator T1';
8265
+ case ITEM_EXTRACTOR_T1:
8266
+ return 'Extractor T1';
8267
+ case ITEM_LOADER_T1:
8268
+ return 'Loader T1';
8269
+ case ITEM_MANUFACTURING_T1:
8270
+ return 'Manufacturing T1';
8271
+ case ITEM_STORAGE_T1:
8272
+ return 'Storage T1';
8273
+ default:
8274
+ return 'Module';
8275
+ }
8276
+ }
8277
+ function formatModuleLine(slot, itemId, seed) {
8278
+ let out = `Slot ${slot} - `;
8279
+ if (itemId === 0) {
8280
+ out += '(empty)';
8281
+ return out;
8282
+ }
8283
+ out += moduleDisplayName(itemId);
8284
+ const subtype = getModuleCapabilityType(itemId);
8285
+ switch (subtype) {
8286
+ case MODULE_ENGINE: {
8287
+ const vol = decodeStat(seed, 0);
8288
+ const thm = decodeStat(seed, 1);
8289
+ out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
8290
+ break;
8291
+ }
8292
+ case MODULE_GENERATOR: {
8293
+ const res = decodeStat(seed, 0);
8294
+ const clr = decodeStat(seed, 1);
8295
+ out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
8296
+ break;
8297
+ }
8298
+ case MODULE_EXTRACTOR: {
8299
+ const str = decodeStat(seed, 0);
8300
+ const tol = decodeStat(seed, 1);
8301
+ const con = decodeStat(seed, 3);
8302
+ const ref = decodeStat(seed, 4);
8303
+ out += ` Rate ${computeExtractorRate(str)} Depth ${computeExtractorDepth(tol)} Drill ${computeExtractorDrill(ref)} Drain ${computeExtractorDrain(con)}`;
8304
+ break;
8305
+ }
8306
+ case MODULE_LOADER: {
8307
+ const duc = decodeStat(seed, 0);
8308
+ const pla = decodeStat(seed, 1);
8309
+ out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
8310
+ break;
8311
+ }
8312
+ case MODULE_CRAFTER: {
8313
+ const rea = decodeStat(seed, 0);
8314
+ const clr = decodeStat(seed, 1);
8315
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
8316
+ break;
8317
+ }
8318
+ case MODULE_STORAGE: {
8319
+ const str = decodeStat(seed, 0);
8320
+ const duc = decodeStat(seed, 1);
8321
+ const pur = decodeStat(seed, 2);
8322
+ const sum = str + duc + pur;
8323
+ const pct = 10 + idiv(sum * 10, 2997);
8324
+ out += ` +${pct}% capacity`;
8325
+ break;
8326
+ }
8327
+ }
8328
+ return out;
8329
+ }
8330
+ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
8331
+ const hullMass = computeBaseHullmass(hullSeed);
8332
+ let baseCapacity = 0;
8333
+ if (itemId === ITEM_SHIP_T1_PACKED) {
8334
+ baseCapacity = computeBaseCapacityShip(hullSeed);
8335
+ }
8336
+ else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
8337
+ baseCapacity = computeBaseCapacityWarehouse(hullSeed);
8338
+ }
8339
+ let out = entityDisplayName(itemId);
8340
+ out += ` - Hull ${hullMass} mass`;
8341
+ if (baseCapacity > 0) {
8342
+ out += ` * ${baseCapacity} capacity`;
8343
+ }
8344
+ out += '\n\n';
8345
+ for (let i = 0; i < moduleItems.length; i++) {
8346
+ out += formatModuleLine(i, moduleItems[i], moduleSeeds[i] ?? 0n);
8347
+ out += '\n';
8348
+ }
8349
+ return out;
8350
+ }
8351
+
8352
+ var index = /*#__PURE__*/Object.freeze({
8353
+ __proto__: null,
8354
+ readCommonBase: readCommonBase,
8355
+ deserializeScalar: deserializeScalar,
8356
+ deserializeResource: deserializeResource,
8357
+ deserializeComponent: deserializeComponent,
8358
+ deserializeModule: deserializeModule,
8359
+ deserializeEntity: deserializeEntity,
8360
+ deserializeAsset: deserializeAsset,
8361
+ computeBaseHullmass: computeBaseHullmass,
8362
+ computeBaseCapacityShip: computeBaseCapacityShip,
8363
+ computeBaseCapacityWarehouse: computeBaseCapacityWarehouse,
8364
+ computeEngineThrust: computeEngineThrust,
8365
+ computeEngineDrain: computeEngineDrain,
8366
+ computeGeneratorCap: computeGeneratorCap,
8367
+ computeGeneratorRech: computeGeneratorRech,
8368
+ computeExtractorRate: computeExtractorRate,
8369
+ computeExtractorDrain: computeExtractorDrain,
8370
+ computeExtractorDepth: computeExtractorDepth,
8371
+ computeExtractorDrill: computeExtractorDrill,
8372
+ computeLoaderMass: computeLoaderMass,
8373
+ computeLoaderThrust: computeLoaderThrust,
8374
+ computeCrafterSpeed: computeCrafterSpeed,
8375
+ computeCrafterDrain: computeCrafterDrain,
8376
+ entityDisplayName: entityDisplayName,
8377
+ moduleDisplayName: moduleDisplayName,
8378
+ formatModuleLine: formatModuleLine,
8379
+ buildEntityDescription: buildEntityDescription
8380
+ });
8381
+
8382
+ export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_DOES_NOT_EXIST, ITEM_DRILL_SHAFT, ITEM_ENGINE_T1, ITEM_EXTRACTION_PROBE, ITEM_EXTRACTOR_T1, ITEM_GENERATOR_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_EXTRACTOR, MODULE_GENERATOR, MODULE_LAUNCHER, MODULE_LOADER, MODULE_STORAGE, MODULE_WARP, index as NFT, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoMass, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capabilityAttributes, capabilityNames, capsHasCrafter, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoUtils, categoryColors, categoryIcons, categoryItemMass, componentIcon, components, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityStats, computeExtractorCapabilities, computeExtractorDepth, computeExtractorDrain, computeExtractorDrill, computeExtractorRate, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeInputMass, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeManufacturingCapabilities, computeShipHullCapabilities, computeStorageCapabilities, computeWarehouseHullCapabilities, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStat, decodeStats, Shipload as default, depthScaleFactor, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, deserializeAsset, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, distanceBetweenCoordinates, distanceBetweenPoints, encodeStats, energyPercent, entityDisplayName, entityRecipes, estimateDealTravelTime, estimateTravelTime, findNearbyPlanets, formatModuleLine, getAllCraftableItems, getCapabilityAttributes, getCategoryInfo, getComponentById, getComponentsForCategory, getComponentsForStat, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityRecipe, getEntityRecipeByItemId, getEntitySlotLayout, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getModuleCapabilityType, getModuleRecipe, getModuleRecipeByItemId, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getResourceTier, getResourceWeight, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, isCraftedItem, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isInvertedAttribute, isModuleItem, isRelatedItem, itemCategory, itemIcons, itemIds, itemOffset, itemTier, itemTypeCode, lerp, makeContainer, makeShip, makeWarehouse, maxTravelDistance, moduleAccepts, moduleDisplayName, moduleIcon, moduleRecipes, needsRecharge, projectEntity, projectEntityAt, readCommonBase, resolveItem, resolveStats, rotation, schedule, statMappings, tierColors, toLocation };
7088
8383
  //# sourceMappingURL=shipload.m.js.map