@shipload/sdk 2.0.0-rc13 → 2.0.0-rc15
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.d.ts +148 -60
- package/lib/shipload.js +970 -606
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +956 -605
- package/lib/shipload.m.js.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/modules.ts +3 -3
- package/src/capabilities/storage.ts +6 -9
- package/src/contracts/server.ts +37 -34
- package/src/data/categories.ts +22 -25
- package/src/data/colors.ts +28 -10
- package/src/data/items.json +15 -15
- package/src/data/recipes.ts +93 -87
- package/src/derivation/crafting.ts +50 -36
- package/src/derivation/resources.ts +23 -23
- package/src/derivation/stats.ts +29 -29
- package/src/derivation/stratum.ts +12 -0
- package/src/entities/container.ts +7 -6
- package/src/entities/makers.ts +126 -11
- package/src/entities/ship-deploy.ts +25 -30
- package/src/entities/ship.ts +16 -4
- package/src/entities/warehouse.ts +36 -1
- package/src/format.ts +12 -0
- package/src/index-module.ts +26 -4
- package/src/managers/actions.ts +48 -8
- package/src/market/items.ts +1 -1
- package/src/nft/description.ts +47 -46
- package/src/nft/deserializers.ts +8 -8
- package/src/resolution/describe-module.ts +165 -0
- package/src/resolution/display-name.ts +57 -0
- package/src/resolution/resolve-item.ts +68 -45
- package/src/scheduling/projection.ts +3 -1
- package/src/types/capabilities.ts +5 -0
- package/src/types.ts +1 -1
package/lib/shipload.js
CHANGED
|
@@ -213,7 +213,7 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
213
213
|
Contract: Contract$1
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNglodWxsX3NlZWQGdWludDY0DG1vZHVsZV9pdGVtcwh1aW50MTZbXQxtb2R1bGVfc2VlZHMIdWludDY0W10GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAFEndhcmVob3VzZV9jYXBhY2l0eQZ1aW50MzILd2FyZWhvdXNlX3oGdWludDE2EmNvbnRhaW5lcl9odWxsbWFzcwZ1aW50MzISY29udGFpbmVyX2NhcGFjaXR5BnVpbnQzMgtjb250YWluZXJfegZ1aW50MTYLZW50aXR5X2luZm8AGAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10LZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OAxnZXRyZXNvdXJjZXMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnBhY2tlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYJaHVsbF9zZWVkBnVpbnQ2NAlpbnN0YWxsZWQMY2FyZ29fc2VlZFtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0NAAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAQKFpdjIHYWR2YW5jZdMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkdmFuY2UKc3VtbWFyeTogJ0FkdmFuY2UgdHVybicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWR2YW5jZSB0aGUgZ2FtZSB0byB0aGUgbmV4dCB0dXJuLgAAAACANFU8BWJsZW5k/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBhIG5ldyBibGVuZGVkIHNlZWQuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0efwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzZWVkLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc2VlZHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YdwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVztAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAABd0+U1s2IKZ2V0bmZ0aW5mb6QELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AALjKm1izYglnZXRwbGF5ZXL9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwbGF5ZXIKc3VtbWFyeTogJ0dldCBwbGF5ZXIgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwbGF5ZXIgaW5jbHVkaW5nIGJhbGFuY2UsIGRlYnQsIG5ldHdvcnRoLCBlbnRpdHkgY291bnRzLCBhbmQgcHJpY2luZyBmb3IgbmV4dCBwdXJjaGFzZXMuIFJldHVybnMgaXNfcGxheWVyPWZhbHNlIGlmIHRoZSBhY2NvdW50IGhhcyBub3Qgam9pbmVkIHRoZSBnYW1lLgAAUNUhdbNiCWdldHJlY2lwZdoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAABW1SF1s2IKZ2V0cmVjaXBlc+ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4AAABA7UixugdyZXNvbHZl0AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVzb2x2ZQpzdW1tYXJ5OiAnQ29tcGxldGUgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXNvbHZlIGNvbXBsZXRlZCB0YXNrcyBpbiBhbiBlbnRpdHkncyBzY2hlZHVsZSwgYXBwbHlpbmcgdGhlaXIgZWZmZWN0cyAocmVjaGFyZ2UgZW5lcmd5LCB1cGRhdGUgbG9jYXRpb24sIGxvYWQvdW5sb2FkIGNhcmdvKS4gSWYgY291bnQgaXMgc3BlY2lmaWVkLCByZXNvbHZlIGV4YWN0bHkgdGhhdCBtYW55IHRhc2tzOyBvdGhlcndpc2UgcmVzb2x2ZSBhbGwgY29tcGxldGVkIHRhc2tzLiBGYWlscyBpZiBjb3VudCBleGNlZWRzIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRhc2tzLgAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAACQo8EEc2FsdNgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNhbHQKc3VtbWFyeTogJ0FwcGVuZCBTYWx0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZGQgYWRkaXRpb25hbCBzYWx0IHRvIHRoZSBuZXh0IGVwb2NoIHNlZWQuAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4NAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAAAArLuaA2k2NAAACW5leHVzX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAAArKrPA2k2NAAACXR5cGVzX3JvdwAAUFjTpq7hA2k2NAAADXdhcmVob3VzZV9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAHgAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8ATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAABYquyyYgppdGVtc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHSAFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHM=');
|
|
216
|
+
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C2VudGl0eV9uYW1lBnN0cmluZwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDE2CHJlY2hhcmdlBnVpbnQxNhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MTYPZW50aXR5X2RlZmF1bHRzAAUSd2FyZWhvdXNlX2NhcGFjaXR5BnVpbnQzMgt3YXJlaG91c2VfegZ1aW50MTYSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAYBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdBmdhdGhlcgAEBnNvdXJjZQplbnRpdHlfcmVmC2Rlc3RpbmF0aW9uCmVudGl0eV9yZWYHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyDmdhdGhlcmVyX3N0YXRzAAQFeWllbGQGdWludDE2BWRyYWluBnVpbnQxNgVkZXB0aAZ1aW50MTYFc3BlZWQGdWludDE2CWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMAAwhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MTYEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYABQJpZAZ1aW50MTYEbWFzcwZ1aW50MzIEdHlwZQV1aW50OAdzdWJ0eXBlBXVpbnQ4BHRpZXIFdWludDgPaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwpzcGF3bmNhcmdvAAMJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQLc3Bhd25wYWNrZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDE2Cmh1bGxfc3RhdHMGdWludDY0CWluc3RhbGxlZA9wYWNrZWRfbW9kdWxlW10Lc3Bhd25zZWVkZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnDXdhcmVob3VzZV9yb3cACwJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/CWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycw1sb2FkZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAEd3JhcAAFBW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQ0AABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHn9Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgCwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgBMNkmq7LJiC2dldGl0ZW1kYXRh3AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAAVlEnKrNiCmdldG1vZHVsZXO0Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R1bGVzCnN1bW1hcnk6ICdHZXQgYWxsIG1vZHVsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIG1vZHVsZXMsIGluY2x1ZGluZyBlYWNoIG1vZHVsZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgaW5zdGFsbGFibGUgZXF1aXBtZW50LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZvpAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAABQ1SF1s2IJZ2V0cmVjaXBl2gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlCnN1bW1hcnk6ICdHZXQgYSBzaW5nbGUgY3JhZnRpbmcgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcmVjaXBlIHdob3NlIG91dHB1dCBtYXRjaGVzIHRoZSBnaXZlbiBpdGVtIGlkLCBpbmNsdWRpbmcgaXRzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRpc3BsYXkgY3JhZnRpbmcgcmVxdWlyZW1lbnRzLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAFbVIXWzYgpnZXRyZWNpcGVz4AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS6AFbqaYnWzYgxnZXRyZXNvdXJjZXO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAAJCjwQRzYWx02AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4AAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABl16DJTcUKc3Bhd25jYXJnb8UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduY2FyZ28Kc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkoLI1MlNxQtzcGF3bnBhY2tlZOcBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXducGFja2VkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gYSBwYWNrZWQgZW50aXR5IHdpdGggaW5zdGFsbGVkIG1vZHVsZXMgb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJJKSuHJTcULc3Bhd25zZWVkZWTNAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnNlZWRlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIHNlZWRlZCBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAABXLTzNzQh0cmFuc2ZlcsgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYW5zZmVyCnN1bW1hcnk6ICdUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIGVudGl0aWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIHR3byBlbnRpdGllcyBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gQm90aCBlbnRpdGllcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGF0IGxlYXN0IG9uZSBtdXN0IGhhdmUgbG9hZGVycy4gQ3JlYXRlcyBsb2FkIGFuZCB1bmxvYWQgdGFza3Mgb24gYm90aCBlbnRpdGllcyB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIGNvbWJpbmVkIGxvYWRlciBjYXBhY2l0eSBhbmQgWi1kaXN0YW5jZSBiZXR3ZWVuIHRoZW0uAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0toNBU2iqsquMMd2lwZXNlcXVlbmNlwgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZXNlcXVlbmNlCnN1bW1hcnk6ICdERUJVRzogd2lwZXNlcXVlbmNlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAUM3lBHdyYXD+Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwCnN1bW1hcnk6ICdXcmFwIGNhcmdvIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGEgcXVhbnRpdHkgb2YgY2FyZ28gZnJvbSBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byB0aGUgc3BlY2lmaWVkIG93bmVyLiBUaGUgZW50aXR5IG11c3QgYmUgYXQgYSBuZXh1cywgaGF2ZSBsb2FkZXJzLCBhbmQgY29udGFpbiBlbm91Z2ggb2YgdGhlIHJlcXVlc3RlZCBjYXJnby4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIHJlbW92ZXMgdGhlIGNhcmdvIGZyb20gdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCB1c2luZyB0aGUgdGVtcGxhdGUgY29uZmlndXJlZCBmb3IgdGhhdCBpdGVtIGlkLg0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAeAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAgM8uT4WwSgZzdHJpbmcAAAAAXNWyYQx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
217
217
|
const abi = antelope.ABI.from(abiBlob);
|
|
218
218
|
var Types;
|
|
219
219
|
(function (Types) {
|
|
@@ -265,25 +265,25 @@ var Types;
|
|
|
265
265
|
antelope.Struct.type('advance')
|
|
266
266
|
], advance);
|
|
267
267
|
Types.advance = advance;
|
|
268
|
-
let
|
|
268
|
+
let packed_module = class packed_module extends antelope.Struct {
|
|
269
269
|
};
|
|
270
270
|
tslib.__decorate([
|
|
271
271
|
antelope.Struct.field(antelope.UInt16)
|
|
272
|
-
],
|
|
272
|
+
], packed_module.prototype, "item_id", void 0);
|
|
273
273
|
tslib.__decorate([
|
|
274
274
|
antelope.Struct.field(antelope.UInt64)
|
|
275
|
-
],
|
|
276
|
-
|
|
277
|
-
antelope.Struct.type('
|
|
278
|
-
],
|
|
279
|
-
Types.
|
|
275
|
+
], packed_module.prototype, "stats", void 0);
|
|
276
|
+
packed_module = tslib.__decorate([
|
|
277
|
+
antelope.Struct.type('packed_module')
|
|
278
|
+
], packed_module);
|
|
279
|
+
Types.packed_module = packed_module;
|
|
280
280
|
let module_entry = class module_entry extends antelope.Struct {
|
|
281
281
|
};
|
|
282
282
|
tslib.__decorate([
|
|
283
283
|
antelope.Struct.field(antelope.UInt8)
|
|
284
284
|
], module_entry.prototype, "type", void 0);
|
|
285
285
|
tslib.__decorate([
|
|
286
|
-
antelope.Struct.field(
|
|
286
|
+
antelope.Struct.field(packed_module, { optional: true })
|
|
287
287
|
], module_entry.prototype, "installed", void 0);
|
|
288
288
|
module_entry = tslib.__decorate([
|
|
289
289
|
antelope.Struct.type('module_entry')
|
|
@@ -298,8 +298,8 @@ var Types;
|
|
|
298
298
|
antelope.Struct.field(antelope.UInt32)
|
|
299
299
|
], cargo_item.prototype, "quantity", void 0);
|
|
300
300
|
tslib.__decorate([
|
|
301
|
-
antelope.Struct.field(antelope.UInt64
|
|
302
|
-
], cargo_item.prototype, "
|
|
301
|
+
antelope.Struct.field(antelope.UInt64)
|
|
302
|
+
], cargo_item.prototype, "stats", void 0);
|
|
303
303
|
tslib.__decorate([
|
|
304
304
|
antelope.Struct.field(module_entry, { array: true })
|
|
305
305
|
], cargo_item.prototype, "modules", void 0);
|
|
@@ -389,7 +389,7 @@ var Types;
|
|
|
389
389
|
], cargo_row.prototype, "quantity", void 0);
|
|
390
390
|
tslib.__decorate([
|
|
391
391
|
antelope.Struct.field(antelope.UInt64)
|
|
392
|
-
], cargo_row.prototype, "
|
|
392
|
+
], cargo_row.prototype, "stats", void 0);
|
|
393
393
|
tslib.__decorate([
|
|
394
394
|
antelope.Struct.field(module_entry, { array: true })
|
|
395
395
|
], cargo_row.prototype, "modules", void 0);
|
|
@@ -653,7 +653,7 @@ var Types;
|
|
|
653
653
|
], deploy.prototype, "packed_item_id", void 0);
|
|
654
654
|
tslib.__decorate([
|
|
655
655
|
antelope.Struct.field(antelope.UInt64)
|
|
656
|
-
], deploy.prototype, "
|
|
656
|
+
], deploy.prototype, "stats", void 0);
|
|
657
657
|
tslib.__decorate([
|
|
658
658
|
antelope.Struct.field('string')
|
|
659
659
|
], deploy.prototype, "entity_name", void 0);
|
|
@@ -668,13 +668,13 @@ var Types;
|
|
|
668
668
|
], descentity.prototype, "item_id", void 0);
|
|
669
669
|
tslib.__decorate([
|
|
670
670
|
antelope.Struct.field(antelope.UInt64)
|
|
671
|
-
], descentity.prototype, "
|
|
671
|
+
], descentity.prototype, "hull_stats", void 0);
|
|
672
672
|
tslib.__decorate([
|
|
673
673
|
antelope.Struct.field(antelope.UInt16, { array: true })
|
|
674
674
|
], descentity.prototype, "module_items", void 0);
|
|
675
675
|
tslib.__decorate([
|
|
676
676
|
antelope.Struct.field(antelope.UInt64, { array: true })
|
|
677
|
-
], descentity.prototype, "
|
|
677
|
+
], descentity.prototype, "module_stats", void 0);
|
|
678
678
|
descentity = tslib.__decorate([
|
|
679
679
|
antelope.Struct.type('descentity')
|
|
680
680
|
], descentity);
|
|
@@ -922,11 +922,11 @@ var Types;
|
|
|
922
922
|
let gather = class gather extends antelope.Struct {
|
|
923
923
|
};
|
|
924
924
|
tslib.__decorate([
|
|
925
|
-
antelope.Struct.field(
|
|
926
|
-
], gather.prototype, "
|
|
925
|
+
antelope.Struct.field(entity_ref)
|
|
926
|
+
], gather.prototype, "source", void 0);
|
|
927
927
|
tslib.__decorate([
|
|
928
|
-
antelope.Struct.field(
|
|
929
|
-
], gather.prototype, "
|
|
928
|
+
antelope.Struct.field(entity_ref)
|
|
929
|
+
], gather.prototype, "destination", void 0);
|
|
930
930
|
tslib.__decorate([
|
|
931
931
|
antelope.Struct.field(antelope.UInt16)
|
|
932
932
|
], gather.prototype, "stratum", void 0);
|
|
@@ -1742,7 +1742,7 @@ var Types;
|
|
|
1742
1742
|
], ship_row.prototype, "name", void 0);
|
|
1743
1743
|
tslib.__decorate([
|
|
1744
1744
|
antelope.Struct.field(antelope.UInt64)
|
|
1745
|
-
], ship_row.prototype, "
|
|
1745
|
+
], ship_row.prototype, "stats", void 0);
|
|
1746
1746
|
tslib.__decorate([
|
|
1747
1747
|
antelope.Struct.field(coordinates)
|
|
1748
1748
|
], ship_row.prototype, "coordinates", void 0);
|
|
@@ -1814,9 +1814,9 @@ var Types;
|
|
|
1814
1814
|
], spawnpacked.prototype, "item_id", void 0);
|
|
1815
1815
|
tslib.__decorate([
|
|
1816
1816
|
antelope.Struct.field(antelope.UInt64)
|
|
1817
|
-
], spawnpacked.prototype, "
|
|
1817
|
+
], spawnpacked.prototype, "hull_stats", void 0);
|
|
1818
1818
|
tslib.__decorate([
|
|
1819
|
-
antelope.Struct.field(
|
|
1819
|
+
antelope.Struct.field(packed_module, { array: true })
|
|
1820
1820
|
], spawnpacked.prototype, "installed", void 0);
|
|
1821
1821
|
spawnpacked = tslib.__decorate([
|
|
1822
1822
|
antelope.Struct.type('spawnpacked')
|
|
@@ -1835,7 +1835,7 @@ var Types;
|
|
|
1835
1835
|
], spawnseeded.prototype, "quantity", void 0);
|
|
1836
1836
|
tslib.__decorate([
|
|
1837
1837
|
antelope.Struct.field(antelope.UInt64)
|
|
1838
|
-
], spawnseeded.prototype, "
|
|
1838
|
+
], spawnseeded.prototype, "stats", void 0);
|
|
1839
1839
|
spawnseeded = tslib.__decorate([
|
|
1840
1840
|
antelope.Struct.type('spawnseeded')
|
|
1841
1841
|
], spawnseeded);
|
|
@@ -1920,6 +1920,9 @@ var Types;
|
|
|
1920
1920
|
tslib.__decorate([
|
|
1921
1921
|
antelope.Struct.field(antelope.UInt16)
|
|
1922
1922
|
], transfer.prototype, "item_id", void 0);
|
|
1923
|
+
tslib.__decorate([
|
|
1924
|
+
antelope.Struct.field(antelope.UInt64)
|
|
1925
|
+
], transfer.prototype, "stats", void 0);
|
|
1923
1926
|
tslib.__decorate([
|
|
1924
1927
|
antelope.Struct.field(antelope.UInt32)
|
|
1925
1928
|
], transfer.prototype, "quantity", void 0);
|
|
@@ -1976,7 +1979,7 @@ var Types;
|
|
|
1976
1979
|
], warehouse_row.prototype, "name", void 0);
|
|
1977
1980
|
tslib.__decorate([
|
|
1978
1981
|
antelope.Struct.field(antelope.UInt64)
|
|
1979
|
-
], warehouse_row.prototype, "
|
|
1982
|
+
], warehouse_row.prototype, "stats", void 0);
|
|
1980
1983
|
tslib.__decorate([
|
|
1981
1984
|
antelope.Struct.field(coordinates)
|
|
1982
1985
|
], warehouse_row.prototype, "coordinates", void 0);
|
|
@@ -2278,21 +2281,21 @@ const PLANET_SUBTYPE_ICY = 3;
|
|
|
2278
2281
|
const PLANET_SUBTYPE_OCEAN = 4;
|
|
2279
2282
|
const PLANET_SUBTYPE_INDUSTRIAL = 5;
|
|
2280
2283
|
const RESOURCE_CATALOG = [
|
|
2281
|
-
{ id:
|
|
2282
|
-
{ id:
|
|
2283
|
-
{ id:
|
|
2284
|
-
{ id:
|
|
2285
|
-
{ id:
|
|
2286
|
-
{ id:
|
|
2287
|
-
{ id:
|
|
2288
|
-
{ id:
|
|
2289
|
-
{ id:
|
|
2290
|
-
{ id:
|
|
2291
|
-
{ id:
|
|
2292
|
-
{ id:
|
|
2293
|
-
{ id:
|
|
2294
|
-
{ id:
|
|
2295
|
-
{ id:
|
|
2284
|
+
{ id: 101, tier: 't1' },
|
|
2285
|
+
{ id: 102, tier: 't2' },
|
|
2286
|
+
{ id: 103, tier: 't3' },
|
|
2287
|
+
{ id: 201, tier: 't1' },
|
|
2288
|
+
{ id: 202, tier: 't2' },
|
|
2289
|
+
{ id: 203, tier: 't3' },
|
|
2290
|
+
{ id: 301, tier: 't1' },
|
|
2291
|
+
{ id: 302, tier: 't2' },
|
|
2292
|
+
{ id: 303, tier: 't3' },
|
|
2293
|
+
{ id: 401, tier: 't1' },
|
|
2294
|
+
{ id: 402, tier: 't2' },
|
|
2295
|
+
{ id: 403, tier: 't3' },
|
|
2296
|
+
{ id: 501, tier: 't1' },
|
|
2297
|
+
{ id: 502, tier: 't2' },
|
|
2298
|
+
{ id: 503, tier: 't3' },
|
|
2296
2299
|
];
|
|
2297
2300
|
function getDepthThreshold(tier) {
|
|
2298
2301
|
switch (tier) {
|
|
@@ -2349,14 +2352,14 @@ function getResourceWeight(itemId, stratum) {
|
|
|
2349
2352
|
return 10;
|
|
2350
2353
|
}
|
|
2351
2354
|
}
|
|
2352
|
-
const ASTEROID_RESOURCES = [
|
|
2353
|
-
const NEBULA_RESOURCES = [
|
|
2354
|
-
const GAS_GIANT_RESOURCES = [
|
|
2355
|
-
const ROCKY_RESOURCES = [
|
|
2356
|
-
const TERRESTRIAL_RESOURCES = [
|
|
2357
|
-
const ICY_RESOURCES = [
|
|
2358
|
-
const OCEAN_RESOURCES = [
|
|
2359
|
-
const INDUSTRIAL_RESOURCES = [
|
|
2355
|
+
const ASTEROID_RESOURCES = [101, 102, 103, 201, 202];
|
|
2356
|
+
const NEBULA_RESOURCES = [202, 203, 301, 302, 303];
|
|
2357
|
+
const GAS_GIANT_RESOURCES = [301, 302, 303, 401, 501];
|
|
2358
|
+
const ROCKY_RESOURCES = [101, 102, 103, 401, 402, 403, 503];
|
|
2359
|
+
const TERRESTRIAL_RESOURCES = [201, 202, 401, 402, 501, 502, 503];
|
|
2360
|
+
const ICY_RESOURCES = [101, 301, 302, 401, 403, 501, 502];
|
|
2361
|
+
const OCEAN_RESOURCES = [201, 203, 301, 303, 501, 502, 503];
|
|
2362
|
+
const INDUSTRIAL_RESOURCES = [101, 102, 103, 201, 203, 402, 403];
|
|
2360
2363
|
function getLocationCandidates(locationType, subtype) {
|
|
2361
2364
|
if (locationType === 2)
|
|
2362
2365
|
return ASTEROID_RESOURCES;
|
|
@@ -4777,139 +4780,139 @@ class BaseManager {
|
|
|
4777
4780
|
|
|
4778
4781
|
var itemsData = [
|
|
4779
4782
|
{
|
|
4780
|
-
id:
|
|
4781
|
-
name: "
|
|
4782
|
-
description: "
|
|
4783
|
+
id: 101,
|
|
4784
|
+
name: "",
|
|
4785
|
+
description: "",
|
|
4783
4786
|
mass: 30000,
|
|
4784
|
-
category: "
|
|
4787
|
+
category: "ore",
|
|
4785
4788
|
tier: "t1",
|
|
4786
|
-
color: "#
|
|
4789
|
+
color: "#C26D3F"
|
|
4787
4790
|
},
|
|
4788
4791
|
{
|
|
4789
|
-
id:
|
|
4790
|
-
name: "
|
|
4791
|
-
description: "
|
|
4792
|
+
id: 102,
|
|
4793
|
+
name: "",
|
|
4794
|
+
description: "",
|
|
4792
4795
|
mass: 27000,
|
|
4793
|
-
category: "
|
|
4796
|
+
category: "ore",
|
|
4794
4797
|
tier: "t2",
|
|
4795
|
-
color: "#
|
|
4798
|
+
color: "#C26D3F"
|
|
4796
4799
|
},
|
|
4797
4800
|
{
|
|
4798
|
-
id:
|
|
4799
|
-
name: "
|
|
4800
|
-
description: "
|
|
4801
|
+
id: 103,
|
|
4802
|
+
name: "",
|
|
4803
|
+
description: "",
|
|
4801
4804
|
mass: 52000,
|
|
4802
|
-
category: "
|
|
4805
|
+
category: "ore",
|
|
4803
4806
|
tier: "t3",
|
|
4804
|
-
color: "#
|
|
4807
|
+
color: "#C26D3F"
|
|
4805
4808
|
},
|
|
4806
4809
|
{
|
|
4807
|
-
id:
|
|
4808
|
-
name: "
|
|
4809
|
-
description: "
|
|
4810
|
+
id: 201,
|
|
4811
|
+
name: "",
|
|
4812
|
+
description: "",
|
|
4810
4813
|
mass: 40000,
|
|
4811
|
-
category: "
|
|
4814
|
+
category: "crystal",
|
|
4812
4815
|
tier: "t1",
|
|
4813
|
-
color: "#
|
|
4816
|
+
color: "#4ADBFF"
|
|
4814
4817
|
},
|
|
4815
4818
|
{
|
|
4816
|
-
id:
|
|
4817
|
-
name: "
|
|
4818
|
-
description: "
|
|
4819
|
+
id: 202,
|
|
4820
|
+
name: "",
|
|
4821
|
+
description: "",
|
|
4819
4822
|
mass: 55000,
|
|
4820
|
-
category: "
|
|
4823
|
+
category: "crystal",
|
|
4821
4824
|
tier: "t2",
|
|
4822
|
-
color: "#
|
|
4825
|
+
color: "#4ADBFF"
|
|
4823
4826
|
},
|
|
4824
4827
|
{
|
|
4825
|
-
id:
|
|
4826
|
-
name: "
|
|
4827
|
-
description: "
|
|
4828
|
+
id: 203,
|
|
4829
|
+
name: "",
|
|
4830
|
+
description: "",
|
|
4828
4831
|
mass: 70000,
|
|
4829
|
-
category: "
|
|
4832
|
+
category: "crystal",
|
|
4830
4833
|
tier: "t3",
|
|
4831
|
-
color: "#
|
|
4834
|
+
color: "#4ADBFF"
|
|
4832
4835
|
},
|
|
4833
4836
|
{
|
|
4834
|
-
id:
|
|
4835
|
-
name: "
|
|
4836
|
-
description: "
|
|
4837
|
+
id: 301,
|
|
4838
|
+
name: "",
|
|
4839
|
+
description: "",
|
|
4837
4840
|
mass: 15000,
|
|
4838
4841
|
category: "gas",
|
|
4839
4842
|
tier: "t1",
|
|
4840
|
-
color: "#
|
|
4843
|
+
color: "#B8E4A0"
|
|
4841
4844
|
},
|
|
4842
4845
|
{
|
|
4843
|
-
id:
|
|
4844
|
-
name: "
|
|
4845
|
-
description: "
|
|
4846
|
+
id: 302,
|
|
4847
|
+
name: "",
|
|
4848
|
+
description: "",
|
|
4846
4849
|
mass: 2000,
|
|
4847
4850
|
category: "gas",
|
|
4848
4851
|
tier: "t2",
|
|
4849
|
-
color: "#
|
|
4852
|
+
color: "#B8E4A0"
|
|
4850
4853
|
},
|
|
4851
4854
|
{
|
|
4852
|
-
id:
|
|
4853
|
-
name: "
|
|
4854
|
-
description: "
|
|
4855
|
+
id: 303,
|
|
4856
|
+
name: "",
|
|
4857
|
+
description: "",
|
|
4855
4858
|
mass: 8000,
|
|
4856
4859
|
category: "gas",
|
|
4857
4860
|
tier: "t3",
|
|
4858
|
-
color: "#
|
|
4861
|
+
color: "#B8E4A0"
|
|
4859
4862
|
},
|
|
4860
4863
|
{
|
|
4861
|
-
id:
|
|
4862
|
-
name: "
|
|
4863
|
-
description: "
|
|
4864
|
+
id: 401,
|
|
4865
|
+
name: "",
|
|
4866
|
+
description: "",
|
|
4864
4867
|
mass: 22000,
|
|
4865
|
-
category: "
|
|
4868
|
+
category: "regolith",
|
|
4866
4869
|
tier: "t1",
|
|
4867
|
-
color: "#
|
|
4870
|
+
color: "#C4A57B"
|
|
4868
4871
|
},
|
|
4869
4872
|
{
|
|
4870
|
-
id:
|
|
4871
|
-
name: "
|
|
4872
|
-
description: "
|
|
4873
|
+
id: 402,
|
|
4874
|
+
name: "",
|
|
4875
|
+
description: "",
|
|
4873
4876
|
mass: 35000,
|
|
4874
|
-
category: "
|
|
4877
|
+
category: "regolith",
|
|
4875
4878
|
tier: "t2",
|
|
4876
|
-
color: "#
|
|
4879
|
+
color: "#C4A57B"
|
|
4877
4880
|
},
|
|
4878
4881
|
{
|
|
4879
|
-
id:
|
|
4880
|
-
name: "
|
|
4881
|
-
description: "
|
|
4882
|
+
id: 403,
|
|
4883
|
+
name: "",
|
|
4884
|
+
description: "",
|
|
4882
4885
|
mass: 45000,
|
|
4883
|
-
category: "
|
|
4886
|
+
category: "regolith",
|
|
4884
4887
|
tier: "t3",
|
|
4885
|
-
color: "#
|
|
4888
|
+
color: "#C4A57B"
|
|
4886
4889
|
},
|
|
4887
4890
|
{
|
|
4888
|
-
id:
|
|
4889
|
-
name: "
|
|
4890
|
-
description: "
|
|
4891
|
+
id: 501,
|
|
4892
|
+
name: "",
|
|
4893
|
+
description: "",
|
|
4891
4894
|
mass: 15000,
|
|
4892
|
-
category: "
|
|
4895
|
+
category: "biomass",
|
|
4893
4896
|
tier: "t1",
|
|
4894
|
-
color: "#
|
|
4897
|
+
color: "#5A8B3E"
|
|
4895
4898
|
},
|
|
4896
4899
|
{
|
|
4897
|
-
id:
|
|
4898
|
-
name: "
|
|
4899
|
-
description: "
|
|
4900
|
+
id: 502,
|
|
4901
|
+
name: "",
|
|
4902
|
+
description: "",
|
|
4900
4903
|
mass: 30000,
|
|
4901
|
-
category: "
|
|
4904
|
+
category: "biomass",
|
|
4902
4905
|
tier: "t2",
|
|
4903
|
-
color: "#
|
|
4906
|
+
color: "#5A8B3E"
|
|
4904
4907
|
},
|
|
4905
4908
|
{
|
|
4906
|
-
id:
|
|
4907
|
-
name: "
|
|
4908
|
-
description: "
|
|
4909
|
+
id: 503,
|
|
4910
|
+
name: "",
|
|
4911
|
+
description: "",
|
|
4909
4912
|
mass: 25000,
|
|
4910
|
-
category: "
|
|
4913
|
+
category: "biomass",
|
|
4911
4914
|
tier: "t3",
|
|
4912
|
-
color: "#
|
|
4915
|
+
color: "#5A8B3E"
|
|
4913
4916
|
}
|
|
4914
4917
|
];
|
|
4915
4918
|
|
|
@@ -4977,38 +4980,38 @@ const components = [
|
|
|
4977
4980
|
{
|
|
4978
4981
|
id: ITEM_HULL_PLATES,
|
|
4979
4982
|
name: 'Hull Plates',
|
|
4980
|
-
description: 'Structural plating formed from
|
|
4983
|
+
description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
|
|
4981
4984
|
color: '#7B8D9E',
|
|
4982
4985
|
mass: 50000,
|
|
4983
4986
|
stats: [
|
|
4984
|
-
{ key: 'strength', source: '
|
|
4985
|
-
{ key: 'density', source: '
|
|
4987
|
+
{ key: 'strength', source: 'ore' },
|
|
4988
|
+
{ key: 'density', source: 'ore' },
|
|
4986
4989
|
],
|
|
4987
|
-
recipe: [{ category: '
|
|
4990
|
+
recipe: [{ category: 'ore', quantity: 15 }],
|
|
4988
4991
|
usedIn: [
|
|
4989
4992
|
{ type: 'entity', name: 'Container' },
|
|
4990
|
-
{ type: 'entity', name: 'Warehouse
|
|
4991
|
-
{ type: 'entity', name: 'Ship
|
|
4993
|
+
{ type: 'entity', name: 'Warehouse' },
|
|
4994
|
+
{ type: 'entity', name: 'Ship' },
|
|
4992
4995
|
],
|
|
4993
4996
|
},
|
|
4994
4997
|
{
|
|
4995
4998
|
id: ITEM_CARGO_LINING,
|
|
4996
4999
|
name: 'Cargo Lining',
|
|
4997
|
-
description: '
|
|
4998
|
-
color: '#
|
|
5000
|
+
description: 'Composite lining formed from fine regolith bound in biomass polymer. Dense enough to seal cargo holds, flexible enough to absorb vibration.',
|
|
5001
|
+
color: '#C4A57B',
|
|
4999
5002
|
mass: 30000,
|
|
5000
5003
|
stats: [
|
|
5001
|
-
{ key: '
|
|
5002
|
-
{ key: '
|
|
5004
|
+
{ key: 'fineness', source: 'regolith' },
|
|
5005
|
+
{ key: 'saturation', source: 'biomass' },
|
|
5003
5006
|
],
|
|
5004
5007
|
recipe: [
|
|
5005
|
-
{ category: '
|
|
5006
|
-
{ category: '
|
|
5008
|
+
{ category: 'regolith', quantity: 10 },
|
|
5009
|
+
{ category: 'biomass', quantity: 20 },
|
|
5007
5010
|
],
|
|
5008
5011
|
usedIn: [
|
|
5009
5012
|
{ type: 'entity', name: 'Container' },
|
|
5010
|
-
{ type: '
|
|
5011
|
-
{ type: '
|
|
5013
|
+
{ type: 'module', name: 'Loader' },
|
|
5014
|
+
{ type: 'module', name: 'Storage' },
|
|
5012
5015
|
],
|
|
5013
5016
|
},
|
|
5014
5017
|
{
|
|
@@ -5027,73 +5030,76 @@ const components = [
|
|
|
5027
5030
|
{
|
|
5028
5031
|
id: ITEM_POWER_CELL,
|
|
5029
5032
|
name: 'Power Cell',
|
|
5030
|
-
description: 'Crystalline energy storage matrix
|
|
5031
|
-
color: '#
|
|
5033
|
+
description: 'Crystalline energy storage matrix. Resonant lattices retain and release charge.',
|
|
5034
|
+
color: '#4ADBFF',
|
|
5032
5035
|
mass: 30000,
|
|
5033
5036
|
stats: [
|
|
5034
|
-
{ key: 'resonance', source: '
|
|
5035
|
-
{ key: '
|
|
5037
|
+
{ key: 'resonance', source: 'crystal' },
|
|
5038
|
+
{ key: 'reflectivity', source: 'crystal' },
|
|
5039
|
+
],
|
|
5040
|
+
recipe: [{ category: 'crystal', quantity: 20 }],
|
|
5041
|
+
usedIn: [
|
|
5042
|
+
{ type: 'module', name: 'Generator' },
|
|
5043
|
+
{ type: 'module', name: 'Hauler' },
|
|
5036
5044
|
],
|
|
5037
|
-
recipe: [{ category: 'mineral', quantity: 20 }],
|
|
5038
|
-
usedIn: [{ type: 'module', name: 'Generator' }],
|
|
5039
5045
|
},
|
|
5040
5046
|
{
|
|
5041
5047
|
id: ITEM_MATTER_CONDUIT,
|
|
5042
5048
|
name: 'Matter Conduit',
|
|
5043
|
-
description: 'Heavy-duty
|
|
5049
|
+
description: 'Heavy-duty ore shaft used in gathering equipment.',
|
|
5044
5050
|
color: '#7B8D9E',
|
|
5045
5051
|
mass: 50000,
|
|
5046
5052
|
stats: [
|
|
5047
|
-
{ key: 'strength', source: '
|
|
5048
|
-
{ key: 'tolerance', source: '
|
|
5053
|
+
{ key: 'strength', source: 'ore' },
|
|
5054
|
+
{ key: 'tolerance', source: 'ore' },
|
|
5049
5055
|
],
|
|
5050
|
-
recipe: [{ category: '
|
|
5056
|
+
recipe: [{ category: 'ore', quantity: 15 }],
|
|
5051
5057
|
usedIn: [{ type: 'module', name: 'Gatherer' }],
|
|
5052
5058
|
},
|
|
5053
5059
|
{
|
|
5054
5060
|
id: ITEM_SURVEY_PROBE,
|
|
5055
5061
|
name: 'Survey Probe',
|
|
5056
|
-
description: '
|
|
5057
|
-
color: '#
|
|
5062
|
+
description: 'Crystal-lattice sensor array for deep resource detection.',
|
|
5063
|
+
color: '#4ADBFF',
|
|
5058
5064
|
mass: 30000,
|
|
5059
5065
|
stats: [
|
|
5060
|
-
{ key: 'conductivity', source: '
|
|
5061
|
-
{ key: 'reflectivity', source: '
|
|
5066
|
+
{ key: 'conductivity', source: 'crystal' },
|
|
5067
|
+
{ key: 'reflectivity', source: 'crystal' },
|
|
5062
5068
|
],
|
|
5063
|
-
recipe: [{ category: '
|
|
5069
|
+
recipe: [{ category: 'crystal', quantity: 10 }],
|
|
5064
5070
|
usedIn: [{ type: 'module', name: 'Gatherer' }],
|
|
5065
5071
|
},
|
|
5066
5072
|
{
|
|
5067
5073
|
id: ITEM_CARGO_ARM,
|
|
5068
5074
|
name: 'Cargo Arm',
|
|
5069
|
-
description: 'Flexible
|
|
5070
|
-
color: '#
|
|
5075
|
+
description: 'Flexible biomass composite arm for cargo handling.',
|
|
5076
|
+
color: '#5A8B3E',
|
|
5071
5077
|
mass: 30000,
|
|
5072
5078
|
stats: [
|
|
5073
|
-
{ key: 'plasticity', source: '
|
|
5074
|
-
{ key: 'insulation', source: '
|
|
5079
|
+
{ key: 'plasticity', source: 'biomass' },
|
|
5080
|
+
{ key: 'insulation', source: 'biomass' },
|
|
5075
5081
|
],
|
|
5076
|
-
recipe: [{ category: '
|
|
5082
|
+
recipe: [{ category: 'biomass', quantity: 32 }],
|
|
5077
5083
|
usedIn: [{ type: 'module', name: 'Loader' }],
|
|
5078
5084
|
},
|
|
5079
5085
|
{
|
|
5080
5086
|
id: ITEM_TOOL_BIT,
|
|
5081
5087
|
name: 'Tool Bit',
|
|
5082
|
-
description: 'Dense
|
|
5083
|
-
color: '#
|
|
5088
|
+
description: 'Dense regolith cutting head for manufacturing operations.',
|
|
5089
|
+
color: '#C4A57B',
|
|
5084
5090
|
mass: 30000,
|
|
5085
5091
|
stats: [
|
|
5086
|
-
{ key: 'hardness', source: '
|
|
5087
|
-
{ key: '
|
|
5092
|
+
{ key: 'hardness', source: 'regolith' },
|
|
5093
|
+
{ key: 'composition', source: 'regolith' },
|
|
5088
5094
|
],
|
|
5089
|
-
recipe: [{ category: '
|
|
5095
|
+
recipe: [{ category: 'regolith', quantity: 20 }],
|
|
5090
5096
|
usedIn: [{ type: 'module', name: 'Manufacturing' }],
|
|
5091
5097
|
},
|
|
5092
5098
|
{
|
|
5093
5099
|
id: ITEM_REACTION_CHAMBER,
|
|
5094
5100
|
name: 'Reaction Chamber',
|
|
5095
5101
|
description: 'Gas-pressurized vessel for controlled manufacturing reactions.',
|
|
5096
|
-
color: '#
|
|
5102
|
+
color: '#B8E4A0',
|
|
5097
5103
|
mass: 50000,
|
|
5098
5104
|
stats: [
|
|
5099
5105
|
{ key: 'reactivity', source: 'gas' },
|
|
@@ -5105,48 +5111,48 @@ const components = [
|
|
|
5105
5111
|
{
|
|
5106
5112
|
id: ITEM_FOCUSING_ARRAY,
|
|
5107
5113
|
name: 'Focusing Array',
|
|
5108
|
-
description: "Precision-formed
|
|
5109
|
-
color: '#
|
|
5114
|
+
description: "Precision-formed crystal lens array. Routes the haul beam's energy efficiently to the target lock.",
|
|
5115
|
+
color: '#4ADBFF',
|
|
5110
5116
|
mass: 40000,
|
|
5111
5117
|
stats: [
|
|
5112
|
-
{ key: 'conductivity', source: '
|
|
5113
|
-
{ key: '
|
|
5118
|
+
{ key: 'conductivity', source: 'crystal' },
|
|
5119
|
+
{ key: 'resonance', source: 'crystal' },
|
|
5114
5120
|
],
|
|
5115
|
-
recipe: [{ category: '
|
|
5116
|
-
usedIn: [{ type: 'module', name: 'Hauler
|
|
5121
|
+
recipe: [{ category: 'crystal', quantity: 25 }],
|
|
5122
|
+
usedIn: [{ type: 'module', name: 'Hauler' }],
|
|
5117
5123
|
},
|
|
5118
5124
|
{
|
|
5119
5125
|
id: ITEM_HULL_PLATES_T2,
|
|
5120
5126
|
name: 'Hull Plates T2',
|
|
5121
|
-
description: 'Advanced structural plating reinforced with tier 2
|
|
5127
|
+
description: 'Advanced structural plating reinforced with tier 2 ore.',
|
|
5122
5128
|
color: '#9BADB8',
|
|
5123
5129
|
mass: 50000,
|
|
5124
5130
|
stats: [
|
|
5125
|
-
{ key: 'strength', source: '
|
|
5126
|
-
{ key: 'density', source: '
|
|
5131
|
+
{ key: 'strength', source: 'ore' },
|
|
5132
|
+
{ key: 'density', source: 'ore' },
|
|
5127
5133
|
],
|
|
5128
5134
|
recipe: [
|
|
5129
5135
|
{ itemId: ITEM_HULL_PLATES, quantity: 2 },
|
|
5130
|
-
{ category: '
|
|
5136
|
+
{ category: 'ore', quantity: 15 },
|
|
5131
5137
|
],
|
|
5132
|
-
usedIn: [{ type: 'entity', name: 'Container
|
|
5138
|
+
usedIn: [{ type: 'entity', name: 'Container' }],
|
|
5133
5139
|
},
|
|
5134
5140
|
{
|
|
5135
5141
|
id: ITEM_CARGO_LINING_T2,
|
|
5136
|
-
name: 'Cargo Lining
|
|
5137
|
-
description: 'Advanced composite lining with
|
|
5138
|
-
color: '#
|
|
5139
|
-
mass:
|
|
5142
|
+
name: 'Cargo Lining',
|
|
5143
|
+
description: 'Advanced composite lining reinforced with tier 2 regolith and biomass polymer.',
|
|
5144
|
+
color: '#C4A57B',
|
|
5145
|
+
mass: 45000,
|
|
5140
5146
|
stats: [
|
|
5141
|
-
{ key: '
|
|
5142
|
-
{ key: '
|
|
5147
|
+
{ key: 'fineness', source: 'regolith' },
|
|
5148
|
+
{ key: 'saturation', source: 'biomass' },
|
|
5143
5149
|
],
|
|
5144
5150
|
recipe: [
|
|
5145
5151
|
{ itemId: ITEM_CARGO_LINING, quantity: 2 },
|
|
5146
|
-
{ category: '
|
|
5147
|
-
{ category: '
|
|
5152
|
+
{ category: 'regolith', quantity: 5 },
|
|
5153
|
+
{ category: 'biomass', quantity: 10 },
|
|
5148
5154
|
],
|
|
5149
|
-
usedIn: [{ type: 'entity', name: 'Container
|
|
5155
|
+
usedIn: [{ type: 'entity', name: 'Container' }],
|
|
5150
5156
|
},
|
|
5151
5157
|
];
|
|
5152
5158
|
const entityRecipes = [
|
|
@@ -5163,13 +5169,13 @@ const entityRecipes = [
|
|
|
5163
5169
|
stats: [
|
|
5164
5170
|
{ key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
|
|
5165
5171
|
{ key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
|
|
5166
|
-
{ key: '
|
|
5167
|
-
{ key: '
|
|
5172
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
|
|
5173
|
+
{ key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
|
|
5168
5174
|
],
|
|
5169
5175
|
},
|
|
5170
5176
|
{
|
|
5171
5177
|
id: 'ship-t1',
|
|
5172
|
-
name: 'Ship
|
|
5178
|
+
name: 'Ship',
|
|
5173
5179
|
description: 'General-purpose vessel with 5 module slots.',
|
|
5174
5180
|
color: '#4AE898',
|
|
5175
5181
|
packedItemId: ITEM_SHIP_T1_PACKED,
|
|
@@ -5180,8 +5186,8 @@ const entityRecipes = [
|
|
|
5180
5186
|
stats: [
|
|
5181
5187
|
{ key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
|
|
5182
5188
|
{ key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
|
|
5183
|
-
{ key: '
|
|
5184
|
-
{ key: '
|
|
5189
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
|
|
5190
|
+
{ key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
|
|
5185
5191
|
],
|
|
5186
5192
|
moduleSlots: [
|
|
5187
5193
|
{ type: MODULE_ANY },
|
|
@@ -5193,7 +5199,7 @@ const entityRecipes = [
|
|
|
5193
5199
|
},
|
|
5194
5200
|
{
|
|
5195
5201
|
id: 'warehouse-t1',
|
|
5196
|
-
name: 'Warehouse
|
|
5202
|
+
name: 'Warehouse',
|
|
5197
5203
|
description: 'Massive stationary storage facility with a single loader module slot.',
|
|
5198
5204
|
color: '#EAB308',
|
|
5199
5205
|
packedItemId: ITEM_WAREHOUSE_T1_PACKED,
|
|
@@ -5204,8 +5210,8 @@ const entityRecipes = [
|
|
|
5204
5210
|
stats: [
|
|
5205
5211
|
{ key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
|
|
5206
5212
|
{ key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
|
|
5207
|
-
{ key: '
|
|
5208
|
-
{ key: '
|
|
5213
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
|
|
5214
|
+
{ key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
|
|
5209
5215
|
],
|
|
5210
5216
|
moduleSlots: [
|
|
5211
5217
|
{ type: MODULE_LOADER, label: 'Loader' },
|
|
@@ -5217,7 +5223,7 @@ const entityRecipes = [
|
|
|
5217
5223
|
},
|
|
5218
5224
|
{
|
|
5219
5225
|
id: 'container-t2',
|
|
5220
|
-
name: 'Container
|
|
5226
|
+
name: 'Container',
|
|
5221
5227
|
description: 'Advanced cargo container with improved capacity formulas.',
|
|
5222
5228
|
color: '#9BADB8',
|
|
5223
5229
|
packedItemId: ITEM_CONTAINER_T2_PACKED,
|
|
@@ -5228,8 +5234,12 @@ const entityRecipes = [
|
|
|
5228
5234
|
stats: [
|
|
5229
5235
|
{ key: 'strength', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'strength' },
|
|
5230
5236
|
{ key: 'density', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'density' },
|
|
5231
|
-
{ key: '
|
|
5232
|
-
{
|
|
5237
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'fineness' },
|
|
5238
|
+
{
|
|
5239
|
+
key: 'saturation',
|
|
5240
|
+
sourceComponentId: ITEM_CARGO_LINING_T2,
|
|
5241
|
+
sourceStatKey: 'saturation',
|
|
5242
|
+
},
|
|
5233
5243
|
],
|
|
5234
5244
|
},
|
|
5235
5245
|
];
|
|
@@ -5250,14 +5260,14 @@ const moduleRecipes = [
|
|
|
5250
5260
|
{
|
|
5251
5261
|
id: 'generator-t1',
|
|
5252
5262
|
name: 'Generator',
|
|
5253
|
-
description: 'Basic energy system. Stores and recharges energy from resonant
|
|
5254
|
-
color: '#
|
|
5263
|
+
description: 'Basic energy system. Stores and recharges energy from resonant crystals.',
|
|
5264
|
+
color: '#4ADBFF',
|
|
5255
5265
|
itemId: ITEM_GENERATOR_T1,
|
|
5256
5266
|
moduleType: MODULE_GENERATOR,
|
|
5257
5267
|
recipe: [{ itemId: ITEM_POWER_CELL, quantity: 5 }],
|
|
5258
5268
|
stats: [
|
|
5259
5269
|
{ key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
|
|
5260
|
-
{ key: '
|
|
5270
|
+
{ key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
|
|
5261
5271
|
],
|
|
5262
5272
|
},
|
|
5263
5273
|
{
|
|
@@ -5295,7 +5305,7 @@ const moduleRecipes = [
|
|
|
5295
5305
|
id: 'loader-t1',
|
|
5296
5306
|
name: 'Loader',
|
|
5297
5307
|
description: 'Basic cargo handling system. Loads and unloads cargo with articulated arms.',
|
|
5298
|
-
color: '#
|
|
5308
|
+
color: '#5A8B3E',
|
|
5299
5309
|
itemId: ITEM_LOADER_T1,
|
|
5300
5310
|
moduleType: MODULE_LOADER,
|
|
5301
5311
|
recipe: [
|
|
@@ -5303,7 +5313,7 @@ const moduleRecipes = [
|
|
|
5303
5313
|
{ itemId: ITEM_CARGO_ARM, quantity: 3 },
|
|
5304
5314
|
],
|
|
5305
5315
|
stats: [
|
|
5306
|
-
{ key: '
|
|
5316
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
|
|
5307
5317
|
{ key: 'plasticity', sourceComponentId: ITEM_CARGO_ARM, sourceStatKey: 'plasticity' },
|
|
5308
5318
|
],
|
|
5309
5319
|
},
|
|
@@ -5311,7 +5321,7 @@ const moduleRecipes = [
|
|
|
5311
5321
|
id: 'manufacturing-t1',
|
|
5312
5322
|
name: 'Manufacturing',
|
|
5313
5323
|
description: 'Basic crafting system. Processes materials using reaction chambers and cutting tools.',
|
|
5314
|
-
color: '#
|
|
5324
|
+
color: '#B8E4A0',
|
|
5315
5325
|
itemId: ITEM_MANUFACTURING_T1,
|
|
5316
5326
|
moduleType: MODULE_CRAFTER,
|
|
5317
5327
|
recipe: [
|
|
@@ -5324,7 +5334,7 @@ const moduleRecipes = [
|
|
|
5324
5334
|
sourceComponentId: ITEM_REACTION_CHAMBER,
|
|
5325
5335
|
sourceStatKey: 'reactivity',
|
|
5326
5336
|
},
|
|
5327
|
-
{ key: '
|
|
5337
|
+
{ key: 'composition', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'composition' },
|
|
5328
5338
|
],
|
|
5329
5339
|
},
|
|
5330
5340
|
{
|
|
@@ -5340,16 +5350,16 @@ const moduleRecipes = [
|
|
|
5340
5350
|
],
|
|
5341
5351
|
stats: [
|
|
5342
5352
|
{ key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
|
|
5343
|
-
{ key: '
|
|
5344
|
-
{ key: '
|
|
5345
|
-
{ key: '
|
|
5353
|
+
{ key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
|
|
5354
|
+
{ key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
|
|
5355
|
+
{ key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
|
|
5346
5356
|
],
|
|
5347
5357
|
},
|
|
5348
5358
|
{
|
|
5349
5359
|
id: 'hauler-t1',
|
|
5350
|
-
name: 'Hauler
|
|
5360
|
+
name: 'Hauler',
|
|
5351
5361
|
description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
|
|
5352
|
-
color: '#
|
|
5362
|
+
color: '#4ADBFF',
|
|
5353
5363
|
itemId: ITEM_HAULER_T1,
|
|
5354
5364
|
moduleType: MODULE_HAULER,
|
|
5355
5365
|
recipe: [
|
|
@@ -5357,14 +5367,13 @@ const moduleRecipes = [
|
|
|
5357
5367
|
{ itemId: ITEM_FOCUSING_ARRAY, quantity: 3 },
|
|
5358
5368
|
],
|
|
5359
5369
|
stats: [
|
|
5360
|
-
{ key: '
|
|
5370
|
+
{ key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
|
|
5371
|
+
{ key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
|
|
5361
5372
|
{
|
|
5362
|
-
key: '
|
|
5373
|
+
key: 'conductivity',
|
|
5363
5374
|
sourceComponentId: ITEM_FOCUSING_ARRAY,
|
|
5364
5375
|
sourceStatKey: 'conductivity',
|
|
5365
5376
|
},
|
|
5366
|
-
{ key: 'drain', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
|
|
5367
|
-
{ key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
|
|
5368
5377
|
],
|
|
5369
5378
|
},
|
|
5370
5379
|
];
|
|
@@ -5425,7 +5434,7 @@ function getComponentsForStat(statKey) {
|
|
|
5425
5434
|
return components.filter((c) => c.stats.some((s) => s.key === statKey));
|
|
5426
5435
|
}
|
|
5427
5436
|
|
|
5428
|
-
const
|
|
5437
|
+
const ORE_STATS = [
|
|
5429
5438
|
{
|
|
5430
5439
|
key: 'strength',
|
|
5431
5440
|
label: 'Strength',
|
|
@@ -5446,24 +5455,24 @@ const METAL_STATS = [
|
|
|
5446
5455
|
inverted: true,
|
|
5447
5456
|
},
|
|
5448
5457
|
];
|
|
5449
|
-
const
|
|
5458
|
+
const CRYSTAL_STATS = [
|
|
5450
5459
|
{
|
|
5451
5460
|
key: 'conductivity',
|
|
5452
5461
|
label: 'Conductivity',
|
|
5453
5462
|
abbreviation: 'CON',
|
|
5454
|
-
purpose: 'Efficiency of energy/signal transfer',
|
|
5463
|
+
purpose: 'Efficiency of energy/signal transfer through crystalline lattice',
|
|
5455
5464
|
},
|
|
5456
5465
|
{
|
|
5457
|
-
key: '
|
|
5458
|
-
label: '
|
|
5459
|
-
abbreviation: '
|
|
5460
|
-
purpose: '
|
|
5466
|
+
key: 'resonance',
|
|
5467
|
+
label: 'Resonance',
|
|
5468
|
+
abbreviation: 'RES',
|
|
5469
|
+
purpose: 'Frequency tuning and piezoelectric response — storage and amplification',
|
|
5461
5470
|
},
|
|
5462
5471
|
{
|
|
5463
5472
|
key: 'reflectivity',
|
|
5464
5473
|
label: 'Reflectivity',
|
|
5465
5474
|
abbreviation: 'REF',
|
|
5466
|
-
purpose: '
|
|
5475
|
+
purpose: 'Optical refraction and reflection — lenses, mirrors, focus',
|
|
5467
5476
|
},
|
|
5468
5477
|
];
|
|
5469
5478
|
const GAS_STATS = [
|
|
@@ -5486,52 +5495,52 @@ const GAS_STATS = [
|
|
|
5486
5495
|
purpose: 'Heat capacity for thermal management',
|
|
5487
5496
|
},
|
|
5488
5497
|
];
|
|
5489
|
-
const
|
|
5498
|
+
const REGOLITH_STATS = [
|
|
5490
5499
|
{
|
|
5491
|
-
key: '
|
|
5492
|
-
label: '
|
|
5493
|
-
abbreviation: '
|
|
5494
|
-
purpose: '
|
|
5500
|
+
key: 'composition',
|
|
5501
|
+
label: 'Composition',
|
|
5502
|
+
abbreviation: 'COM',
|
|
5503
|
+
purpose: 'Mineral/metal mix — drives sensor, chip, and optic crafting quality',
|
|
5495
5504
|
},
|
|
5496
5505
|
{
|
|
5497
5506
|
key: 'hardness',
|
|
5498
5507
|
label: 'Hardness',
|
|
5499
5508
|
abbreviation: 'HRD',
|
|
5500
|
-
purpose: '
|
|
5509
|
+
purpose: 'Particle hardness — cutting surfaces, abrasives, wear resistance',
|
|
5501
5510
|
},
|
|
5502
5511
|
{
|
|
5503
|
-
key: '
|
|
5504
|
-
label: '
|
|
5505
|
-
abbreviation: '
|
|
5506
|
-
purpose: '
|
|
5512
|
+
key: 'fineness',
|
|
5513
|
+
label: 'Fineness',
|
|
5514
|
+
abbreviation: 'FIN',
|
|
5515
|
+
purpose: 'Grain size — fine powder for smooth composites and sintering',
|
|
5507
5516
|
},
|
|
5508
5517
|
];
|
|
5509
|
-
const
|
|
5518
|
+
const BIOMASS_STATS = [
|
|
5510
5519
|
{
|
|
5511
5520
|
key: 'plasticity',
|
|
5512
5521
|
label: 'Plasticity',
|
|
5513
5522
|
abbreviation: 'PLA',
|
|
5514
|
-
purpose: '
|
|
5523
|
+
purpose: 'Flexibility and deformation under load',
|
|
5515
5524
|
},
|
|
5516
5525
|
{
|
|
5517
5526
|
key: 'insulation',
|
|
5518
5527
|
label: 'Insulation',
|
|
5519
5528
|
abbreviation: 'INS',
|
|
5520
|
-
purpose: '
|
|
5529
|
+
purpose: 'Thermal and electrical blocking capacity',
|
|
5521
5530
|
},
|
|
5522
5531
|
{
|
|
5523
|
-
key: '
|
|
5524
|
-
label: '
|
|
5525
|
-
abbreviation: '
|
|
5526
|
-
purpose: '
|
|
5532
|
+
key: 'saturation',
|
|
5533
|
+
label: 'Saturation',
|
|
5534
|
+
abbreviation: 'SAT',
|
|
5535
|
+
purpose: 'Concentration of useful organic compounds per unit',
|
|
5527
5536
|
},
|
|
5528
5537
|
];
|
|
5529
5538
|
const STAT_MAP = {
|
|
5530
|
-
|
|
5531
|
-
|
|
5539
|
+
ore: ORE_STATS,
|
|
5540
|
+
crystal: CRYSTAL_STATS,
|
|
5532
5541
|
gas: GAS_STATS,
|
|
5533
|
-
|
|
5534
|
-
|
|
5542
|
+
regolith: REGOLITH_STATS,
|
|
5543
|
+
biomass: BIOMASS_STATS,
|
|
5535
5544
|
};
|
|
5536
5545
|
function getStatDefinitions(category) {
|
|
5537
5546
|
return STAT_MAP[category];
|
|
@@ -5676,40 +5685,40 @@ function deriveResourceStats(seed) {
|
|
|
5676
5685
|
}
|
|
5677
5686
|
|
|
5678
5687
|
function encodeStats(values) {
|
|
5679
|
-
let
|
|
5688
|
+
let stats = 0n;
|
|
5680
5689
|
for (let i = 0; i < values.length && i < 6; i++) {
|
|
5681
|
-
|
|
5690
|
+
stats |= BigInt(values[i] & 0x3ff) << BigInt(i * 10);
|
|
5682
5691
|
}
|
|
5683
|
-
return
|
|
5692
|
+
return stats;
|
|
5684
5693
|
}
|
|
5685
|
-
function decodeStat(
|
|
5686
|
-
return Number((
|
|
5694
|
+
function decodeStat(stats, index) {
|
|
5695
|
+
return Number((stats >> BigInt(index * 10)) & 0x3ffn);
|
|
5687
5696
|
}
|
|
5688
|
-
function decodeStats(
|
|
5689
|
-
const
|
|
5697
|
+
function decodeStats(stats, count) {
|
|
5698
|
+
const result = [];
|
|
5690
5699
|
for (let i = 0; i < count; i++) {
|
|
5691
|
-
|
|
5700
|
+
result.push(decodeStat(stats, i));
|
|
5692
5701
|
}
|
|
5693
|
-
return
|
|
5702
|
+
return result;
|
|
5694
5703
|
}
|
|
5695
|
-
function mapStatsToKeys(
|
|
5696
|
-
const values = decodeStats(
|
|
5704
|
+
function mapStatsToKeys(stats, statDefs) {
|
|
5705
|
+
const values = decodeStats(stats, statDefs.length);
|
|
5697
5706
|
const result = {};
|
|
5698
5707
|
for (let i = 0; i < statDefs.length; i++) {
|
|
5699
5708
|
result[statDefs[i].key] = values[i];
|
|
5700
5709
|
}
|
|
5701
5710
|
return result;
|
|
5702
5711
|
}
|
|
5703
|
-
function decodeCraftedItemStats(itemId,
|
|
5712
|
+
function decodeCraftedItemStats(itemId, stats) {
|
|
5704
5713
|
const comp = getComponentById(itemId);
|
|
5705
5714
|
if (comp)
|
|
5706
|
-
return mapStatsToKeys(
|
|
5715
|
+
return mapStatsToKeys(stats, comp.stats);
|
|
5707
5716
|
const entityRecipe = entityRecipes.find((r) => r.packedItemId === itemId);
|
|
5708
5717
|
if (entityRecipe)
|
|
5709
|
-
return mapStatsToKeys(
|
|
5718
|
+
return mapStatsToKeys(stats, entityRecipe.stats);
|
|
5710
5719
|
const moduleRecipe = moduleRecipes.find((r) => r.itemId === itemId);
|
|
5711
5720
|
if (moduleRecipe)
|
|
5712
|
-
return mapStatsToKeys(
|
|
5721
|
+
return mapStatsToKeys(stats, moduleRecipe.stats);
|
|
5713
5722
|
return {};
|
|
5714
5723
|
}
|
|
5715
5724
|
function blendStacks(stacks, statKey) {
|
|
@@ -5762,19 +5771,19 @@ function computeEntityStats(entityRecipeId, componentStacks) {
|
|
|
5762
5771
|
return { key: stat.key, value: Math.max(1, Math.min(999, value)) };
|
|
5763
5772
|
});
|
|
5764
5773
|
}
|
|
5765
|
-
function decodeStackStats(itemId,
|
|
5774
|
+
function decodeStackStats(itemId, stats) {
|
|
5766
5775
|
if (itemId >= 10000) {
|
|
5767
|
-
return decodeCraftedItemStats(itemId, BigInt(
|
|
5776
|
+
return decodeCraftedItemStats(itemId, BigInt(stats.toString()));
|
|
5768
5777
|
}
|
|
5769
|
-
const
|
|
5770
|
-
return { stat1:
|
|
5778
|
+
const s = BigInt(stats.toString());
|
|
5779
|
+
return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
|
|
5771
5780
|
}
|
|
5772
5781
|
const categoryItemMass = {
|
|
5773
|
-
|
|
5774
|
-
|
|
5782
|
+
ore: 30000,
|
|
5783
|
+
crystal: 40000,
|
|
5775
5784
|
gas: 15000,
|
|
5776
|
-
|
|
5777
|
-
|
|
5785
|
+
regolith: 22000,
|
|
5786
|
+
biomass: 15000,
|
|
5778
5787
|
};
|
|
5779
5788
|
function computeInputMass(itemId, itemType) {
|
|
5780
5789
|
if (itemType === 'component') {
|
|
@@ -5821,25 +5830,24 @@ function blendCrossGroup(sources) {
|
|
|
5821
5830
|
function blendCargoStacks(itemId, stacks) {
|
|
5822
5831
|
const decoded = stacks.map((s) => ({
|
|
5823
5832
|
quantity: s.quantity,
|
|
5824
|
-
stats: decodeStackStats(itemId, s.
|
|
5833
|
+
stats: decodeStackStats(itemId, s.stats),
|
|
5825
5834
|
}));
|
|
5826
5835
|
const allKeys = Object.keys(decoded[0]?.stats ?? {});
|
|
5827
5836
|
const blended = allKeys.map((key) => Math.max(1, Math.min(999, blendStacks(decoded, key))));
|
|
5828
5837
|
return antelope.UInt64.from(encodeStats(blended));
|
|
5829
5838
|
}
|
|
5830
|
-
function decodeRawStackToCategoryStats(
|
|
5831
|
-
const raw = deriveResourceStats(seed);
|
|
5839
|
+
function decodeRawStackToCategoryStats(stats, category) {
|
|
5832
5840
|
const defs = getStatDefinitions(category);
|
|
5833
5841
|
const result = {};
|
|
5834
5842
|
if (defs[0])
|
|
5835
|
-
result[defs[0].key] =
|
|
5843
|
+
result[defs[0].key] = decodeStat(stats, 0);
|
|
5836
5844
|
if (defs[1])
|
|
5837
|
-
result[defs[1].key] =
|
|
5845
|
+
result[defs[1].key] = decodeStat(stats, 1);
|
|
5838
5846
|
if (defs[2])
|
|
5839
|
-
result[defs[2].key] =
|
|
5847
|
+
result[defs[2].key] = decodeStat(stats, 2);
|
|
5840
5848
|
return result;
|
|
5841
5849
|
}
|
|
5842
|
-
function
|
|
5850
|
+
function computeCraftedOutputStats(outputItemId, slotInputs) {
|
|
5843
5851
|
var _a;
|
|
5844
5852
|
const component = getComponentById(outputItemId);
|
|
5845
5853
|
if (component) {
|
|
@@ -5851,8 +5859,8 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5851
5859
|
const stacks = slot.stacks.map((s) => ({
|
|
5852
5860
|
quantity: s.quantity,
|
|
5853
5861
|
stats: slotIsComponent
|
|
5854
|
-
? decodeCraftedItemStats(slot.itemId, s.
|
|
5855
|
-
: decodeRawStackToCategoryStats(s.
|
|
5862
|
+
? decodeCraftedItemStats(slot.itemId, s.stats)
|
|
5863
|
+
: decodeRawStackToCategoryStats(s.stats, slot.category),
|
|
5856
5864
|
}));
|
|
5857
5865
|
categoryStacks.push({ category: slot.category, stacks });
|
|
5858
5866
|
}
|
|
@@ -5874,7 +5882,7 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5874
5882
|
for (const s of slot.stacks) {
|
|
5875
5883
|
list.push({
|
|
5876
5884
|
quantity: s.quantity,
|
|
5877
|
-
stats: decodeCraftedItemStats(slot.itemId, s.
|
|
5885
|
+
stats: decodeCraftedItemStats(slot.itemId, s.stats),
|
|
5878
5886
|
});
|
|
5879
5887
|
}
|
|
5880
5888
|
}
|
|
@@ -5885,7 +5893,11 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5885
5893
|
});
|
|
5886
5894
|
return antelope.UInt64.from(encodeStats(ordered));
|
|
5887
5895
|
}
|
|
5888
|
-
throw new Error(`
|
|
5896
|
+
throw new Error(`computeCraftedOutputStats: no recipe found for outputItemId=${outputItemId}`);
|
|
5897
|
+
}
|
|
5898
|
+
function encodeGatheredCargoStats(depositSeed) {
|
|
5899
|
+
const raw = deriveResourceStats(depositSeed);
|
|
5900
|
+
return antelope.UInt64.from(encodeStats([raw.stat1, raw.stat2, raw.stat3]));
|
|
5889
5901
|
}
|
|
5890
5902
|
|
|
5891
5903
|
const itemsById = new Map();
|
|
@@ -5909,7 +5921,7 @@ function synthesizeItem(id, source) {
|
|
|
5909
5921
|
name: source.name,
|
|
5910
5922
|
description: source.description,
|
|
5911
5923
|
mass: source.mass,
|
|
5912
|
-
category: '
|
|
5924
|
+
category: 'ore',
|
|
5913
5925
|
tier: 't1',
|
|
5914
5926
|
color: source.color,
|
|
5915
5927
|
});
|
|
@@ -6259,6 +6271,9 @@ function capsHasGatherer(caps) {
|
|
|
6259
6271
|
function capsHasMass(caps) {
|
|
6260
6272
|
return caps.hullmass !== undefined;
|
|
6261
6273
|
}
|
|
6274
|
+
function capsHasHauler(caps) {
|
|
6275
|
+
return caps.hauler !== undefined;
|
|
6276
|
+
}
|
|
6262
6277
|
|
|
6263
6278
|
function calcCargoItemMass(item) {
|
|
6264
6279
|
const itemDef = getItem(item.item_id);
|
|
@@ -6313,7 +6328,7 @@ function cargoItemToStack(item) {
|
|
|
6313
6328
|
return {
|
|
6314
6329
|
item_id: antelope.UInt16.from(item.item_id),
|
|
6315
6330
|
quantity: antelope.UInt32.from(item.quantity),
|
|
6316
|
-
|
|
6331
|
+
stats: item.stats,
|
|
6317
6332
|
modules: item.modules ?? [],
|
|
6318
6333
|
};
|
|
6319
6334
|
}
|
|
@@ -6321,23 +6336,18 @@ function stackToCargoItem(stack) {
|
|
|
6321
6336
|
return Types.cargo_item.from({
|
|
6322
6337
|
item_id: stack.item_id,
|
|
6323
6338
|
quantity: stack.quantity,
|
|
6324
|
-
|
|
6339
|
+
stats: stack.stats,
|
|
6325
6340
|
modules: stack.modules,
|
|
6326
6341
|
});
|
|
6327
6342
|
}
|
|
6328
|
-
function
|
|
6329
|
-
if (!a && !b)
|
|
6330
|
-
return true;
|
|
6331
|
-
if (!a || !b)
|
|
6332
|
-
return false;
|
|
6343
|
+
function statsEquals(a, b) {
|
|
6333
6344
|
return a.equals(b);
|
|
6334
6345
|
}
|
|
6335
6346
|
function stackIdentityEqual(a, b) {
|
|
6336
|
-
return a.item_id.equals(b.item_id) &&
|
|
6347
|
+
return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
|
|
6337
6348
|
}
|
|
6338
6349
|
function stackKey(s) {
|
|
6339
|
-
|
|
6340
|
-
return `${s.item_id.toNumber()}:${seedVal}`;
|
|
6350
|
+
return `${s.item_id.toNumber()}:${s.stats.toString()}`;
|
|
6341
6351
|
}
|
|
6342
6352
|
function stacksEqual(a, b) {
|
|
6343
6353
|
return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
|
|
@@ -6661,7 +6671,9 @@ function applyGatherTask(projected, task, options) {
|
|
|
6661
6671
|
if (!options.complete)
|
|
6662
6672
|
return;
|
|
6663
6673
|
applyEnergyCost(projected, task);
|
|
6664
|
-
|
|
6674
|
+
if (!task.entitytarget) {
|
|
6675
|
+
applyAddCargoTask(projected, task);
|
|
6676
|
+
}
|
|
6665
6677
|
}
|
|
6666
6678
|
function applyCraftTask(projected, task) {
|
|
6667
6679
|
applyEnergyCost(projected, task);
|
|
@@ -6957,9 +6969,19 @@ function needsRecharge(entity) {
|
|
|
6957
6969
|
}
|
|
6958
6970
|
|
|
6959
6971
|
class Ship extends Types.entity_info {
|
|
6972
|
+
constructor() {
|
|
6973
|
+
super(...arguments);
|
|
6974
|
+
this._modules = [];
|
|
6975
|
+
}
|
|
6960
6976
|
get name() {
|
|
6961
6977
|
return this.entity_name;
|
|
6962
6978
|
}
|
|
6979
|
+
get modules() {
|
|
6980
|
+
return this._modules;
|
|
6981
|
+
}
|
|
6982
|
+
setModules(modules) {
|
|
6983
|
+
this._modules = modules;
|
|
6984
|
+
}
|
|
6963
6985
|
get inv() {
|
|
6964
6986
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
6965
6987
|
}
|
|
@@ -7078,10 +7100,188 @@ class Ship extends Types.entity_info {
|
|
|
7078
7100
|
}
|
|
7079
7101
|
}
|
|
7080
7102
|
|
|
7103
|
+
function computeShipHullCapabilities(stats) {
|
|
7104
|
+
const density = stats.density ?? 500;
|
|
7105
|
+
const strength = stats.strength ?? 500;
|
|
7106
|
+
const fineness = stats.fineness ?? 500;
|
|
7107
|
+
const saturation = stats.saturation ?? 500;
|
|
7108
|
+
const hullmass = 25000 + 75 * density;
|
|
7109
|
+
const statSum = strength + fineness + saturation;
|
|
7110
|
+
const exponent = statSum / 2997.0;
|
|
7111
|
+
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
7112
|
+
return { hullmass, capacity };
|
|
7113
|
+
}
|
|
7114
|
+
function computeEngineCapabilities(stats) {
|
|
7115
|
+
const vol = stats.volatility ?? 500;
|
|
7116
|
+
const thm = stats.thermal ?? 500;
|
|
7117
|
+
return {
|
|
7118
|
+
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
7119
|
+
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
7120
|
+
};
|
|
7121
|
+
}
|
|
7122
|
+
function computeGeneratorCapabilities(stats) {
|
|
7123
|
+
const res = stats.resonance ?? 500;
|
|
7124
|
+
const ref = stats.reflectivity ?? 500;
|
|
7125
|
+
return {
|
|
7126
|
+
capacity: 300 + Math.floor(res / 6),
|
|
7127
|
+
recharge: 1 + Math.floor((ref * 3) / 1000),
|
|
7128
|
+
};
|
|
7129
|
+
}
|
|
7130
|
+
function computeGathererCapabilities(stats) {
|
|
7131
|
+
const str = stats.strength ?? 500;
|
|
7132
|
+
const con = stats.conductivity ?? 500;
|
|
7133
|
+
const ref = stats.reflectivity ?? 500;
|
|
7134
|
+
const tol = stats.tolerance ?? 500;
|
|
7135
|
+
return {
|
|
7136
|
+
yield: 200 + str,
|
|
7137
|
+
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
7138
|
+
depth: 200 + Math.floor((tol * 3) / 2),
|
|
7139
|
+
speed: 100 + Math.floor((ref * 4) / 5),
|
|
7140
|
+
};
|
|
7141
|
+
}
|
|
7142
|
+
function computeLoaderCapabilities(stats) {
|
|
7143
|
+
const fin = stats.fineness ?? 500;
|
|
7144
|
+
const pla = stats.plasticity ?? 500;
|
|
7145
|
+
return {
|
|
7146
|
+
mass: Math.max(200, 2000 - Math.floor(fin * 2)),
|
|
7147
|
+
thrust: 1 + Math.floor(pla / 500),
|
|
7148
|
+
quantity: 1,
|
|
7149
|
+
};
|
|
7150
|
+
}
|
|
7151
|
+
function computeManufacturingCapabilities(stats) {
|
|
7152
|
+
const rea = stats.reactivity ?? 500;
|
|
7153
|
+
const com = stats.composition ?? 500;
|
|
7154
|
+
return {
|
|
7155
|
+
speed: 100 + Math.floor((rea * 4) / 5),
|
|
7156
|
+
drain: Math.max(5, 30 - Math.floor(com / 33)),
|
|
7157
|
+
};
|
|
7158
|
+
}
|
|
7159
|
+
function computeHaulerCapabilities(stats) {
|
|
7160
|
+
const res = stats.resonance ?? 500;
|
|
7161
|
+
const con = stats.conductivity ?? 500;
|
|
7162
|
+
const ref = stats.reflectivity ?? 500;
|
|
7163
|
+
return {
|
|
7164
|
+
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
7165
|
+
efficiency: 2000 + con * 6,
|
|
7166
|
+
drain: Math.max(3, 15 - Math.floor(ref / 80)),
|
|
7167
|
+
};
|
|
7168
|
+
}
|
|
7169
|
+
function computeStorageCapabilities(stats, baseCapacity) {
|
|
7170
|
+
const strength = stats.strength ?? 500;
|
|
7171
|
+
const fineness = stats.fineness ?? 500;
|
|
7172
|
+
const saturation = stats.saturation ?? 500;
|
|
7173
|
+
const statSum = strength + fineness + saturation;
|
|
7174
|
+
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
7175
|
+
return { capacityBonus };
|
|
7176
|
+
}
|
|
7177
|
+
function computeWarehouseHullCapabilities(stats) {
|
|
7178
|
+
const density = stats.density ?? 500;
|
|
7179
|
+
const strength = stats.strength ?? 500;
|
|
7180
|
+
const fineness = stats.fineness ?? 500;
|
|
7181
|
+
const saturation = stats.saturation ?? 500;
|
|
7182
|
+
const hullmass = 25000 + 75 * density;
|
|
7183
|
+
const statSum = strength + fineness + saturation;
|
|
7184
|
+
const exponent = statSum / 2997.0;
|
|
7185
|
+
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
7186
|
+
return { hullmass, capacity };
|
|
7187
|
+
}
|
|
7188
|
+
function computeShipCapabilities(modules) {
|
|
7189
|
+
const ship = {};
|
|
7190
|
+
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
7191
|
+
if (engineModules.length > 0) {
|
|
7192
|
+
let totalThrust = 0;
|
|
7193
|
+
let totalDrain = 0;
|
|
7194
|
+
for (const m of engineModules) {
|
|
7195
|
+
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7196
|
+
totalThrust += caps.thrust;
|
|
7197
|
+
totalDrain += caps.drain;
|
|
7198
|
+
}
|
|
7199
|
+
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
7200
|
+
}
|
|
7201
|
+
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
7202
|
+
if (generatorModules.length > 0) {
|
|
7203
|
+
let totalCapacity = 0;
|
|
7204
|
+
let totalRecharge = 0;
|
|
7205
|
+
for (const m of generatorModules) {
|
|
7206
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7207
|
+
totalCapacity += caps.capacity;
|
|
7208
|
+
totalRecharge += caps.recharge;
|
|
7209
|
+
}
|
|
7210
|
+
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
7211
|
+
}
|
|
7212
|
+
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
7213
|
+
if (gathererModules.length > 0) {
|
|
7214
|
+
let totalYield = 0;
|
|
7215
|
+
let totalDrain = 0;
|
|
7216
|
+
let totalDepth = 0;
|
|
7217
|
+
let totalSpeed = 0;
|
|
7218
|
+
for (const m of gathererModules) {
|
|
7219
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7220
|
+
totalYield += caps.yield;
|
|
7221
|
+
totalDrain += caps.drain;
|
|
7222
|
+
totalDepth += caps.depth;
|
|
7223
|
+
totalSpeed += caps.speed;
|
|
7224
|
+
}
|
|
7225
|
+
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
7226
|
+
}
|
|
7227
|
+
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
7228
|
+
if (haulerModules.length > 0) {
|
|
7229
|
+
let totalCapacity = 0;
|
|
7230
|
+
let weightedEffNum = 0;
|
|
7231
|
+
let totalDrain = 0;
|
|
7232
|
+
for (const m of haulerModules) {
|
|
7233
|
+
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7234
|
+
totalCapacity += caps.capacity;
|
|
7235
|
+
weightedEffNum += caps.efficiency * caps.capacity;
|
|
7236
|
+
totalDrain += caps.drain;
|
|
7237
|
+
}
|
|
7238
|
+
ship.hauler = {
|
|
7239
|
+
capacity: totalCapacity,
|
|
7240
|
+
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
7241
|
+
drain: totalDrain,
|
|
7242
|
+
};
|
|
7243
|
+
}
|
|
7244
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7245
|
+
if (loaderModules.length > 0) {
|
|
7246
|
+
let totalMass = 0;
|
|
7247
|
+
let totalThrust = 0;
|
|
7248
|
+
let totalQuantity = 0;
|
|
7249
|
+
for (const m of loaderModules) {
|
|
7250
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7251
|
+
totalMass += caps.mass;
|
|
7252
|
+
totalThrust += caps.thrust;
|
|
7253
|
+
totalQuantity += caps.quantity;
|
|
7254
|
+
}
|
|
7255
|
+
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7256
|
+
}
|
|
7257
|
+
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
7258
|
+
if (crafterModules.length > 0) {
|
|
7259
|
+
let totalSpeed = 0;
|
|
7260
|
+
let totalDrain = 0;
|
|
7261
|
+
for (const m of crafterModules) {
|
|
7262
|
+
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7263
|
+
totalSpeed += caps.speed;
|
|
7264
|
+
totalDrain += caps.drain;
|
|
7265
|
+
}
|
|
7266
|
+
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
7267
|
+
}
|
|
7268
|
+
return ship;
|
|
7269
|
+
}
|
|
7270
|
+
|
|
7081
7271
|
class Warehouse extends Types.entity_info {
|
|
7272
|
+
constructor() {
|
|
7273
|
+
super(...arguments);
|
|
7274
|
+
this._modules = [];
|
|
7275
|
+
}
|
|
7082
7276
|
get name() {
|
|
7083
7277
|
return this.entity_name;
|
|
7084
7278
|
}
|
|
7279
|
+
get modules() {
|
|
7280
|
+
return this._modules;
|
|
7281
|
+
}
|
|
7282
|
+
setModules(modules) {
|
|
7283
|
+
this._modules = modules;
|
|
7284
|
+
}
|
|
7085
7285
|
get inv() {
|
|
7086
7286
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
7087
7287
|
}
|
|
@@ -7130,6 +7330,23 @@ class Warehouse extends Types.entity_info {
|
|
|
7130
7330
|
return hull.adding(this.totalCargoMass);
|
|
7131
7331
|
}
|
|
7132
7332
|
}
|
|
7333
|
+
function computeWarehouseCapabilities(modules) {
|
|
7334
|
+
const warehouse = {};
|
|
7335
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7336
|
+
if (loaderModules.length > 0) {
|
|
7337
|
+
let totalMass = 0;
|
|
7338
|
+
let totalThrust = 0;
|
|
7339
|
+
let totalQuantity = 0;
|
|
7340
|
+
for (const m of loaderModules) {
|
|
7341
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7342
|
+
totalMass += caps.mass;
|
|
7343
|
+
totalThrust += caps.thrust;
|
|
7344
|
+
totalQuantity += caps.quantity;
|
|
7345
|
+
}
|
|
7346
|
+
warehouse.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7347
|
+
}
|
|
7348
|
+
return warehouse;
|
|
7349
|
+
}
|
|
7133
7350
|
|
|
7134
7351
|
class Container extends Types.entity_info {
|
|
7135
7352
|
get name() {
|
|
@@ -7173,10 +7390,10 @@ class Container extends Types.entity_info {
|
|
|
7173
7390
|
function computeContainerCapabilities(stats) {
|
|
7174
7391
|
const density = stats['density'] ?? 500;
|
|
7175
7392
|
const strength = stats['strength'] ?? 500;
|
|
7176
|
-
const
|
|
7177
|
-
const
|
|
7393
|
+
const fineness = stats['fineness'] ?? 500;
|
|
7394
|
+
const saturation = stats['saturation'] ?? 500;
|
|
7178
7395
|
const hullmass = 25000 + 75 * density;
|
|
7179
|
-
const statSum = strength +
|
|
7396
|
+
const statSum = strength + fineness + saturation;
|
|
7180
7397
|
const exponent = statSum / 2997;
|
|
7181
7398
|
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
7182
7399
|
return { hullmass, capacity };
|
|
@@ -7184,10 +7401,10 @@ function computeContainerCapabilities(stats) {
|
|
|
7184
7401
|
function computeContainerT2Capabilities(stats) {
|
|
7185
7402
|
const strength = stats['strength'] ?? 0;
|
|
7186
7403
|
const density = stats['density'] ?? 0;
|
|
7187
|
-
const
|
|
7188
|
-
const
|
|
7404
|
+
const fineness = stats['fineness'] ?? 0;
|
|
7405
|
+
const saturation = stats['saturation'] ?? 0;
|
|
7189
7406
|
const hullmass = 20000 + 50 * density;
|
|
7190
|
-
const statSum = strength +
|
|
7407
|
+
const statSum = strength + fineness + saturation;
|
|
7191
7408
|
const exponent = statSum / 2500;
|
|
7192
7409
|
const capacity = Math.floor(1500000 * Math.pow(10, exponent));
|
|
7193
7410
|
return { hullmass, capacity };
|
|
@@ -7390,13 +7607,14 @@ class ActionsManager extends BaseManager {
|
|
|
7390
7607
|
id: antelope.UInt64.from(shipId),
|
|
7391
7608
|
});
|
|
7392
7609
|
}
|
|
7393
|
-
transfer(sourceType, sourceId, destType, destId,
|
|
7610
|
+
transfer(sourceType, sourceId, destType, destId, itemId, stats, quantity) {
|
|
7394
7611
|
return this.server.action('transfer', {
|
|
7395
7612
|
source_type: sourceType,
|
|
7396
7613
|
source_id: antelope.UInt64.from(sourceId),
|
|
7397
7614
|
dest_type: destType,
|
|
7398
7615
|
dest_id: antelope.UInt64.from(destId),
|
|
7399
|
-
item_id: antelope.UInt16.from(
|
|
7616
|
+
item_id: antelope.UInt16.from(itemId),
|
|
7617
|
+
stats: antelope.UInt64.from(stats),
|
|
7400
7618
|
quantity: antelope.UInt32.from(quantity),
|
|
7401
7619
|
});
|
|
7402
7620
|
}
|
|
@@ -7411,10 +7629,16 @@ class ActionsManager extends BaseManager {
|
|
|
7411
7629
|
account: antelope.Name.from(account),
|
|
7412
7630
|
});
|
|
7413
7631
|
}
|
|
7414
|
-
gather(
|
|
7632
|
+
gather(source, destination, stratum, quantity) {
|
|
7415
7633
|
return this.server.action('gather', {
|
|
7416
|
-
|
|
7417
|
-
|
|
7634
|
+
source: Types.entity_ref.from({
|
|
7635
|
+
entity_type: source.entityType,
|
|
7636
|
+
entity_id: antelope.UInt64.from(source.entityId),
|
|
7637
|
+
}),
|
|
7638
|
+
destination: Types.entity_ref.from({
|
|
7639
|
+
entity_type: destination.entityType,
|
|
7640
|
+
entity_id: antelope.UInt64.from(destination.entityId),
|
|
7641
|
+
}),
|
|
7418
7642
|
stratum: antelope.UInt16.from(stratum),
|
|
7419
7643
|
quantity: antelope.UInt32.from(quantity),
|
|
7420
7644
|
});
|
|
@@ -7447,12 +7671,12 @@ class ActionsManager extends BaseManager {
|
|
|
7447
7671
|
inputs: cargoInputs,
|
|
7448
7672
|
});
|
|
7449
7673
|
}
|
|
7450
|
-
deploy(entityType, entityId, packedItemId,
|
|
7674
|
+
deploy(entityType, entityId, packedItemId, stats, entityName) {
|
|
7451
7675
|
return this.server.action('deploy', {
|
|
7452
7676
|
entity_type: entityType,
|
|
7453
7677
|
id: antelope.UInt64.from(entityId),
|
|
7454
7678
|
packed_item_id: antelope.UInt16.from(packedItemId),
|
|
7455
|
-
|
|
7679
|
+
stats: antelope.UInt64.from(stats),
|
|
7456
7680
|
entity_name: entityName,
|
|
7457
7681
|
});
|
|
7458
7682
|
}
|
|
@@ -7473,6 +7697,15 @@ class ActionsManager extends BaseManager {
|
|
|
7473
7697
|
target_cargo_id: antelope.UInt64.from(targetCargoId),
|
|
7474
7698
|
});
|
|
7475
7699
|
}
|
|
7700
|
+
wrap(owner, entityType, entityId, cargoId, quantity) {
|
|
7701
|
+
return this.server.action('wrap', {
|
|
7702
|
+
owner: antelope.Name.from(owner),
|
|
7703
|
+
entity_type: entityType,
|
|
7704
|
+
entity_id: antelope.UInt64.from(entityId),
|
|
7705
|
+
cargo_id: antelope.UInt64.from(cargoId),
|
|
7706
|
+
quantity: antelope.UInt64.from(quantity),
|
|
7707
|
+
});
|
|
7708
|
+
}
|
|
7476
7709
|
joinGame(account, companyName) {
|
|
7477
7710
|
return [this.foundCompany(account, companyName), this.join(account)];
|
|
7478
7711
|
}
|
|
@@ -7612,6 +7845,51 @@ class Shipload {
|
|
|
7612
7845
|
}
|
|
7613
7846
|
}
|
|
7614
7847
|
|
|
7848
|
+
function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
7849
|
+
const slots = getEntitySlotLayout(packedEntityItemId);
|
|
7850
|
+
const result = slots.map((s) => ({ type: s.type, installed: undefined }));
|
|
7851
|
+
for (const mod of modules) {
|
|
7852
|
+
const itemId = Number(antelope.UInt16.from(mod.itemId).value.toString());
|
|
7853
|
+
const modType = getModuleCapabilityType(itemId);
|
|
7854
|
+
const slotIdx = result.findIndex((r) => !r.installed && moduleAccepts(r.type, modType));
|
|
7855
|
+
if (slotIdx === -1) {
|
|
7856
|
+
const recipe = getModuleRecipeByItemId(itemId);
|
|
7857
|
+
const modName = recipe?.name ?? `item ${itemId}`;
|
|
7858
|
+
throw new Error(`No compatible slot for module ${modName} (type ${modType}) on ${entityLabel}`);
|
|
7859
|
+
}
|
|
7860
|
+
result[slotIdx].installed = Types.packed_module.from({
|
|
7861
|
+
item_id: antelope.UInt16.from(mod.itemId),
|
|
7862
|
+
stats: antelope.UInt64.from(mod.stats),
|
|
7863
|
+
});
|
|
7864
|
+
}
|
|
7865
|
+
return result.map((r) => Types.module_entry.from({
|
|
7866
|
+
type: antelope.UInt8.from(r.type),
|
|
7867
|
+
installed: r.installed,
|
|
7868
|
+
}));
|
|
7869
|
+
}
|
|
7870
|
+
function decodePackedInput(m) {
|
|
7871
|
+
return {
|
|
7872
|
+
itemId: Number(antelope.UInt16.from(m.itemId).value.toString()),
|
|
7873
|
+
stats: BigInt(antelope.UInt64.from(m.stats).toString()),
|
|
7874
|
+
};
|
|
7875
|
+
}
|
|
7876
|
+
function computeStorageBonus(decoded, baseCapacity) {
|
|
7877
|
+
let totalBonus = 0;
|
|
7878
|
+
for (const m of decoded) {
|
|
7879
|
+
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
7880
|
+
continue;
|
|
7881
|
+
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
7882
|
+
const { capacityBonus } = computeStorageCapabilities(stats, baseCapacity);
|
|
7883
|
+
totalBonus += capacityBonus;
|
|
7884
|
+
}
|
|
7885
|
+
return totalBonus;
|
|
7886
|
+
}
|
|
7887
|
+
function deriveShipFromModules(modules, baseCapacity) {
|
|
7888
|
+
const decoded = modules.map(decodePackedInput);
|
|
7889
|
+
const capabilities = computeShipCapabilities(decoded);
|
|
7890
|
+
const totalBonus = computeStorageBonus(decoded, baseCapacity);
|
|
7891
|
+
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
7892
|
+
}
|
|
7615
7893
|
function makeShip(state) {
|
|
7616
7894
|
const info = {
|
|
7617
7895
|
type: antelope.Name.from('ship'),
|
|
@@ -7628,20 +7906,38 @@ function makeShip(state) {
|
|
|
7628
7906
|
};
|
|
7629
7907
|
if (state.hullmass !== undefined)
|
|
7630
7908
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7631
|
-
if (state.capacity !== undefined)
|
|
7632
|
-
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7633
7909
|
if (state.energy !== undefined)
|
|
7634
7910
|
info.energy = antelope.UInt16.from(state.energy);
|
|
7635
|
-
if (state.engines)
|
|
7636
|
-
info.engines = state.engines;
|
|
7637
|
-
if (state.generator)
|
|
7638
|
-
info.generator = state.generator;
|
|
7639
|
-
if (state.loaders)
|
|
7640
|
-
info.loaders = state.loaders;
|
|
7641
7911
|
if (state.schedule)
|
|
7642
7912
|
info.schedule = state.schedule;
|
|
7913
|
+
let moduleEntries = [];
|
|
7914
|
+
if (state.modules && state.modules.length > 0) {
|
|
7915
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
7916
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(state.modules, state.capacity ?? 0);
|
|
7917
|
+
if (capabilities.engines)
|
|
7918
|
+
info.engines = capabilities.engines;
|
|
7919
|
+
if (capabilities.generator)
|
|
7920
|
+
info.generator = capabilities.generator;
|
|
7921
|
+
if (capabilities.gatherer)
|
|
7922
|
+
info.gatherer = capabilities.gatherer;
|
|
7923
|
+
if (capabilities.hauler)
|
|
7924
|
+
info.hauler = capabilities.hauler;
|
|
7925
|
+
if (capabilities.loaders)
|
|
7926
|
+
info.loaders = capabilities.loaders;
|
|
7927
|
+
if (capabilities.crafter)
|
|
7928
|
+
info.crafter = capabilities.crafter;
|
|
7929
|
+
if (state.capacity !== undefined)
|
|
7930
|
+
info.capacity = antelope.UInt32.from(finalCapacity);
|
|
7931
|
+
}
|
|
7932
|
+
else {
|
|
7933
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, [], 'Ship T1');
|
|
7934
|
+
if (state.capacity !== undefined)
|
|
7935
|
+
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7936
|
+
}
|
|
7643
7937
|
const entityInfo = Types.entity_info.from(info);
|
|
7644
|
-
|
|
7938
|
+
const ship = new Ship(entityInfo);
|
|
7939
|
+
ship.setModules(moduleEntries);
|
|
7940
|
+
return ship;
|
|
7645
7941
|
}
|
|
7646
7942
|
function makeWarehouse(state) {
|
|
7647
7943
|
const info = {
|
|
@@ -7660,12 +7956,25 @@ function makeWarehouse(state) {
|
|
|
7660
7956
|
};
|
|
7661
7957
|
if (state.hullmass !== undefined)
|
|
7662
7958
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7663
|
-
if (state.loaders)
|
|
7664
|
-
info.loaders = state.loaders;
|
|
7665
7959
|
if (state.schedule)
|
|
7666
7960
|
info.schedule = state.schedule;
|
|
7961
|
+
let moduleEntries = [];
|
|
7962
|
+
if (state.modules && state.modules.length > 0) {
|
|
7963
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
7964
|
+
const decoded = state.modules.map(decodePackedInput);
|
|
7965
|
+
const capabilities = computeWarehouseCapabilities(decoded);
|
|
7966
|
+
if (capabilities.loaders)
|
|
7967
|
+
info.loaders = capabilities.loaders;
|
|
7968
|
+
const totalBonus = computeStorageBonus(decoded, state.capacity);
|
|
7969
|
+
info.capacity = antelope.UInt32.from(state.capacity + totalBonus);
|
|
7970
|
+
}
|
|
7971
|
+
else {
|
|
7972
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, [], 'Warehouse T1');
|
|
7973
|
+
}
|
|
7667
7974
|
const entityInfo = Types.entity_info.from(info);
|
|
7668
|
-
|
|
7975
|
+
const warehouse = new Warehouse(entityInfo);
|
|
7976
|
+
warehouse.setModules(moduleEntries);
|
|
7977
|
+
return warehouse;
|
|
7669
7978
|
}
|
|
7670
7979
|
function makeContainer(state) {
|
|
7671
7980
|
const entityInfo = Types.entity_info.from({
|
|
@@ -7677,7 +7986,7 @@ function makeContainer(state) {
|
|
|
7677
7986
|
hullmass: antelope.UInt32.from(state.hullmass),
|
|
7678
7987
|
capacity: antelope.UInt32.from(state.capacity),
|
|
7679
7988
|
cargomass: antelope.UInt32.from(state.cargomass || 0),
|
|
7680
|
-
cargo: [],
|
|
7989
|
+
cargo: state.cargo || [],
|
|
7681
7990
|
is_idle: !state.schedule,
|
|
7682
7991
|
current_task_elapsed: antelope.UInt32.from(0),
|
|
7683
7992
|
current_task_remaining: antelope.UInt32.from(0),
|
|
@@ -7824,11 +8133,11 @@ function computeHaulerDrain(distance, drain, haulCount) {
|
|
|
7824
8133
|
}
|
|
7825
8134
|
|
|
7826
8135
|
const categoryColors = {
|
|
7827
|
-
|
|
7828
|
-
|
|
7829
|
-
gas: '#
|
|
7830
|
-
|
|
7831
|
-
|
|
8136
|
+
ore: '#C26D3F',
|
|
8137
|
+
crystal: '#4ADBFF',
|
|
8138
|
+
gas: '#B8E4A0',
|
|
8139
|
+
regolith: '#C4A57B',
|
|
8140
|
+
biomass: '#5A8B3E',
|
|
7832
8141
|
};
|
|
7833
8142
|
const tierColors = {
|
|
7834
8143
|
t1: '#8b8b8b',
|
|
@@ -7837,16 +8146,30 @@ const tierColors = {
|
|
|
7837
8146
|
t4: '#c084fc',
|
|
7838
8147
|
t5: '#fbbf24',
|
|
7839
8148
|
};
|
|
8149
|
+
const tierLabels = {
|
|
8150
|
+
t1: 'Common',
|
|
8151
|
+
t2: 'Uncommon',
|
|
8152
|
+
t3: 'Rare',
|
|
8153
|
+
t4: 'Epic',
|
|
8154
|
+
t5: 'Legendary',
|
|
8155
|
+
};
|
|
7840
8156
|
const categoryIcons = {
|
|
7841
|
-
|
|
7842
|
-
|
|
8157
|
+
ore: '⬡',
|
|
8158
|
+
crystal: '◈',
|
|
7843
8159
|
gas: '◎',
|
|
7844
|
-
|
|
7845
|
-
|
|
8160
|
+
regolith: '■',
|
|
8161
|
+
biomass: '❋',
|
|
8162
|
+
};
|
|
8163
|
+
const categoryIconShapes = {
|
|
8164
|
+
ore: 'hex',
|
|
8165
|
+
crystal: 'diamond',
|
|
8166
|
+
gas: 'circle',
|
|
8167
|
+
regolith: 'square',
|
|
8168
|
+
biomass: 'star',
|
|
7846
8169
|
};
|
|
7847
8170
|
const componentIcon = '▣';
|
|
7848
8171
|
const moduleIcon = '⬢';
|
|
7849
|
-
const
|
|
8172
|
+
const itemAbbreviations = {
|
|
7850
8173
|
10001: 'HP',
|
|
7851
8174
|
10002: 'CL',
|
|
7852
8175
|
10003: 'TC',
|
|
@@ -7916,39 +8239,39 @@ function isCraftedItem(id) {
|
|
|
7916
8239
|
|
|
7917
8240
|
const categories = [
|
|
7918
8241
|
{
|
|
7919
|
-
id: '
|
|
7920
|
-
name: '
|
|
7921
|
-
label: '
|
|
7922
|
-
description: 'Structural
|
|
7923
|
-
color: categoryColors.
|
|
8242
|
+
id: 'ore',
|
|
8243
|
+
name: 'Ore',
|
|
8244
|
+
label: 'Ore',
|
|
8245
|
+
description: 'Structural metal-bearing rock — hulls, frames, load-bearing components',
|
|
8246
|
+
color: categoryColors.ore,
|
|
7924
8247
|
},
|
|
7925
8248
|
{
|
|
7926
|
-
id: '
|
|
7927
|
-
name: '
|
|
7928
|
-
label: '
|
|
7929
|
-
description: '
|
|
7930
|
-
color: categoryColors.
|
|
8249
|
+
id: 'crystal',
|
|
8250
|
+
name: 'Crystal',
|
|
8251
|
+
label: 'Crystal',
|
|
8252
|
+
description: 'Crystalline lattice — conductors, energy storage, resonant systems',
|
|
8253
|
+
color: categoryColors.crystal,
|
|
7931
8254
|
},
|
|
7932
8255
|
{
|
|
7933
8256
|
id: 'gas',
|
|
7934
|
-
name: '
|
|
8257
|
+
name: 'Gas',
|
|
7935
8258
|
label: 'Gas',
|
|
7936
|
-
description: '
|
|
8259
|
+
description: 'Atmospheric volatile — propulsion, thermal processing, chemical reactions',
|
|
7937
8260
|
color: categoryColors.gas,
|
|
7938
8261
|
},
|
|
7939
8262
|
{
|
|
7940
|
-
id: '
|
|
7941
|
-
name: '
|
|
7942
|
-
label: '
|
|
7943
|
-
description: '
|
|
7944
|
-
color: categoryColors.
|
|
8263
|
+
id: 'regolith',
|
|
8264
|
+
name: 'Regolith',
|
|
8265
|
+
label: 'Regolith',
|
|
8266
|
+
description: 'Surface mineral dust — sensors, optics, computation, cutting surfaces',
|
|
8267
|
+
color: categoryColors.regolith,
|
|
7945
8268
|
},
|
|
7946
8269
|
{
|
|
7947
|
-
id: '
|
|
7948
|
-
name: '
|
|
7949
|
-
label: '
|
|
7950
|
-
description: '
|
|
7951
|
-
color: categoryColors.
|
|
8270
|
+
id: 'biomass',
|
|
8271
|
+
name: 'Biomass',
|
|
8272
|
+
label: 'Biomass',
|
|
8273
|
+
description: 'Organic polymer — insulation, composites, bio-processes',
|
|
8274
|
+
color: categoryColors.biomass,
|
|
7952
8275
|
},
|
|
7953
8276
|
];
|
|
7954
8277
|
function getCategoryInfo(id) {
|
|
@@ -8388,194 +8711,21 @@ function getStatMappingsForCapability(capability) {
|
|
|
8388
8711
|
return statMappings.filter((m) => m.capability === capability);
|
|
8389
8712
|
}
|
|
8390
8713
|
|
|
8391
|
-
function computeShipHullCapabilities(stats) {
|
|
8392
|
-
const density = stats.density ?? 500;
|
|
8393
|
-
const strength = stats.strength ?? 500;
|
|
8394
|
-
const ductility = stats.ductility ?? 500;
|
|
8395
|
-
const purity = stats.purity ?? 500;
|
|
8396
|
-
const hullmass = 25000 + 75 * density;
|
|
8397
|
-
const statSum = strength + ductility + purity;
|
|
8398
|
-
const exponent = statSum / 2997.0;
|
|
8399
|
-
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
8400
|
-
return { hullmass, capacity };
|
|
8401
|
-
}
|
|
8402
|
-
function computeEngineCapabilities(stats) {
|
|
8403
|
-
const vol = stats.volatility ?? 500;
|
|
8404
|
-
const thm = stats.thermal ?? 500;
|
|
8405
|
-
return {
|
|
8406
|
-
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8407
|
-
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8408
|
-
};
|
|
8409
|
-
}
|
|
8410
|
-
function computeGeneratorCapabilities(stats) {
|
|
8411
|
-
const res = stats.resonance ?? 500;
|
|
8412
|
-
const clr = stats.clarity ?? 500;
|
|
8413
|
-
return {
|
|
8414
|
-
capacity: 300 + Math.floor(res / 6),
|
|
8415
|
-
recharge: 5 + Math.floor((clr * 15) / 1000),
|
|
8416
|
-
};
|
|
8417
|
-
}
|
|
8418
|
-
function computeGathererCapabilities(stats) {
|
|
8419
|
-
const str = stats.strength ?? 500;
|
|
8420
|
-
const con = stats.conductivity ?? 500;
|
|
8421
|
-
const ref = stats.reflectivity ?? 500;
|
|
8422
|
-
const tol = stats.tolerance ?? 500;
|
|
8423
|
-
return {
|
|
8424
|
-
yield: 200 + str,
|
|
8425
|
-
drain: Math.max(10, 50 - Math.floor(con / 20)),
|
|
8426
|
-
depth: 200 + Math.floor((tol * 3) / 2),
|
|
8427
|
-
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8428
|
-
};
|
|
8429
|
-
}
|
|
8430
|
-
function computeLoaderCapabilities(stats) {
|
|
8431
|
-
const duc = stats.ductility ?? 500;
|
|
8432
|
-
const pla = stats.plasticity ?? 500;
|
|
8433
|
-
return {
|
|
8434
|
-
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
8435
|
-
thrust: 1 + Math.floor(pla / 500),
|
|
8436
|
-
quantity: 1,
|
|
8437
|
-
};
|
|
8438
|
-
}
|
|
8439
|
-
function computeManufacturingCapabilities(stats) {
|
|
8440
|
-
const rea = stats.reactivity ?? 500;
|
|
8441
|
-
const clr = stats.clarity ?? 500;
|
|
8442
|
-
return {
|
|
8443
|
-
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8444
|
-
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
8445
|
-
};
|
|
8446
|
-
}
|
|
8447
|
-
function computeHaulerCapabilities(stats) {
|
|
8448
|
-
const res = stats.resonance ?? 500;
|
|
8449
|
-
const con = stats.conductivity ?? 500;
|
|
8450
|
-
const clr = stats.clarity ?? 500;
|
|
8451
|
-
return {
|
|
8452
|
-
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
8453
|
-
efficiency: 2000 + con * 6,
|
|
8454
|
-
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
8455
|
-
};
|
|
8456
|
-
}
|
|
8457
|
-
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8458
|
-
const strength = stats.strength ?? 500;
|
|
8459
|
-
const ductility = stats.ductility ?? 500;
|
|
8460
|
-
const purity = stats.purity ?? 500;
|
|
8461
|
-
const statSum = strength + ductility + purity;
|
|
8462
|
-
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8463
|
-
return { capacityBonus };
|
|
8464
|
-
}
|
|
8465
|
-
function computeWarehouseHullCapabilities(stats) {
|
|
8466
|
-
const density = stats.density ?? 500;
|
|
8467
|
-
const strength = stats.strength ?? 500;
|
|
8468
|
-
const ductility = stats.ductility ?? 500;
|
|
8469
|
-
const purity = stats.purity ?? 500;
|
|
8470
|
-
const hullmass = 25000 + 75 * density;
|
|
8471
|
-
const statSum = strength + ductility + purity;
|
|
8472
|
-
const exponent = statSum / 2997.0;
|
|
8473
|
-
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
8474
|
-
return { hullmass, capacity };
|
|
8475
|
-
}
|
|
8476
|
-
function computeShipCapabilities(modules) {
|
|
8477
|
-
const ship = {};
|
|
8478
|
-
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8479
|
-
if (engineModules.length > 0) {
|
|
8480
|
-
let totalThrust = 0;
|
|
8481
|
-
let totalDrain = 0;
|
|
8482
|
-
for (const m of engineModules) {
|
|
8483
|
-
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8484
|
-
totalThrust += caps.thrust;
|
|
8485
|
-
totalDrain += caps.drain;
|
|
8486
|
-
}
|
|
8487
|
-
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
8488
|
-
}
|
|
8489
|
-
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
8490
|
-
if (generatorModules.length > 0) {
|
|
8491
|
-
let totalCapacity = 0;
|
|
8492
|
-
let totalRecharge = 0;
|
|
8493
|
-
for (const m of generatorModules) {
|
|
8494
|
-
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8495
|
-
totalCapacity += caps.capacity;
|
|
8496
|
-
totalRecharge += caps.recharge;
|
|
8497
|
-
}
|
|
8498
|
-
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
8499
|
-
}
|
|
8500
|
-
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8501
|
-
if (gathererModules.length > 0) {
|
|
8502
|
-
let totalYield = 0;
|
|
8503
|
-
let totalDrain = 0;
|
|
8504
|
-
let totalDepth = 0;
|
|
8505
|
-
let totalSpeed = 0;
|
|
8506
|
-
for (const m of gathererModules) {
|
|
8507
|
-
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8508
|
-
totalYield += caps.yield;
|
|
8509
|
-
totalDrain += caps.drain;
|
|
8510
|
-
totalDepth += caps.depth;
|
|
8511
|
-
totalSpeed += caps.speed;
|
|
8512
|
-
}
|
|
8513
|
-
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
8514
|
-
}
|
|
8515
|
-
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8516
|
-
if (haulerModules.length > 0) {
|
|
8517
|
-
let totalCapacity = 0;
|
|
8518
|
-
let weightedEffNum = 0;
|
|
8519
|
-
let totalDrain = 0;
|
|
8520
|
-
for (const m of haulerModules) {
|
|
8521
|
-
const decoded = decodeCraftedItemStats(m.itemId, m.seed);
|
|
8522
|
-
const caps = computeHaulerCapabilities({
|
|
8523
|
-
resonance: decoded.capacity,
|
|
8524
|
-
conductivity: decoded.efficiency,
|
|
8525
|
-
clarity: decoded.drain,
|
|
8526
|
-
});
|
|
8527
|
-
totalCapacity += caps.capacity;
|
|
8528
|
-
weightedEffNum += caps.efficiency * caps.capacity;
|
|
8529
|
-
totalDrain += caps.drain;
|
|
8530
|
-
}
|
|
8531
|
-
ship.hauler = {
|
|
8532
|
-
capacity: totalCapacity,
|
|
8533
|
-
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
8534
|
-
drain: totalDrain,
|
|
8535
|
-
};
|
|
8536
|
-
}
|
|
8537
|
-
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8538
|
-
if (loaderModules.length > 0) {
|
|
8539
|
-
let totalMass = 0;
|
|
8540
|
-
let totalThrust = 0;
|
|
8541
|
-
let totalQuantity = 0;
|
|
8542
|
-
for (const m of loaderModules) {
|
|
8543
|
-
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8544
|
-
totalMass += caps.mass;
|
|
8545
|
-
totalThrust += caps.thrust;
|
|
8546
|
-
totalQuantity += caps.quantity;
|
|
8547
|
-
}
|
|
8548
|
-
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
8549
|
-
}
|
|
8550
|
-
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8551
|
-
if (crafterModules.length > 0) {
|
|
8552
|
-
let totalSpeed = 0;
|
|
8553
|
-
let totalDrain = 0;
|
|
8554
|
-
for (const m of crafterModules) {
|
|
8555
|
-
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8556
|
-
totalSpeed += caps.speed;
|
|
8557
|
-
totalDrain += caps.drain;
|
|
8558
|
-
}
|
|
8559
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
8560
|
-
}
|
|
8561
|
-
return ship;
|
|
8562
|
-
}
|
|
8563
|
-
|
|
8564
8714
|
function toNum(v) {
|
|
8565
8715
|
return Number(antelope.UInt16.from(v).value.toString());
|
|
8566
8716
|
}
|
|
8567
|
-
function
|
|
8717
|
+
function toBigStats(v) {
|
|
8568
8718
|
return BigInt(antelope.UInt64.from(v).toString());
|
|
8569
8719
|
}
|
|
8570
|
-
function resolveResource(id,
|
|
8720
|
+
function resolveResource(id, stats) {
|
|
8571
8721
|
const item = getItem(id);
|
|
8572
8722
|
const cat = item.category;
|
|
8573
|
-
let
|
|
8574
|
-
if (
|
|
8575
|
-
const
|
|
8723
|
+
let resolvedStats;
|
|
8724
|
+
if (stats !== undefined) {
|
|
8725
|
+
const bigStats = toBigStats(stats);
|
|
8576
8726
|
const defs = getStatDefinitions(cat);
|
|
8577
|
-
const values = [
|
|
8578
|
-
|
|
8727
|
+
const values = [decodeStat(bigStats, 0), decodeStat(bigStats, 1), decodeStat(bigStats, 2)];
|
|
8728
|
+
resolvedStats = defs.map((d, i) => ({
|
|
8579
8729
|
key: d.key,
|
|
8580
8730
|
label: d.label,
|
|
8581
8731
|
abbreviation: d.abbreviation,
|
|
@@ -8589,27 +8739,28 @@ function resolveResource(id, seed) {
|
|
|
8589
8739
|
itemId: id,
|
|
8590
8740
|
name: String(item.name),
|
|
8591
8741
|
icon: categoryIcons[cat] ?? '⬡',
|
|
8742
|
+
abbreviation: null,
|
|
8592
8743
|
category: cat,
|
|
8593
8744
|
tier: item.tier,
|
|
8594
8745
|
mass: Number(item.mass.value.toString()),
|
|
8595
8746
|
itemType: 'resource',
|
|
8596
|
-
stats,
|
|
8747
|
+
stats: resolvedStats,
|
|
8597
8748
|
};
|
|
8598
8749
|
}
|
|
8599
|
-
function resolveComponent(id,
|
|
8750
|
+
function resolveComponent(id, stats) {
|
|
8600
8751
|
const comp = getComponentById(id);
|
|
8601
|
-
let
|
|
8602
|
-
if (
|
|
8603
|
-
const decoded = decodeCraftedItemStats(id,
|
|
8604
|
-
|
|
8605
|
-
const allDefs = getStatDefinitions('
|
|
8606
|
-
.concat(getStatDefinitions('
|
|
8752
|
+
let resolvedStats;
|
|
8753
|
+
if (stats !== undefined) {
|
|
8754
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8755
|
+
resolvedStats = Object.entries(decoded).map(([key, value]) => {
|
|
8756
|
+
const allDefs = getStatDefinitions('ore')
|
|
8757
|
+
.concat(getStatDefinitions('crystal'))
|
|
8607
8758
|
.concat(getStatDefinitions('gas'))
|
|
8608
|
-
.concat(getStatDefinitions('
|
|
8609
|
-
.concat(getStatDefinitions('
|
|
8759
|
+
.concat(getStatDefinitions('regolith'))
|
|
8760
|
+
.concat(getStatDefinitions('biomass'));
|
|
8610
8761
|
const def = allDefs.find((d) => d.key === key);
|
|
8611
8762
|
const statDef = comp.stats.find((s) => s.key === key);
|
|
8612
|
-
const cat = (statDef?.source ?? '
|
|
8763
|
+
const cat = (statDef?.source ?? 'ore');
|
|
8613
8764
|
return {
|
|
8614
8765
|
key,
|
|
8615
8766
|
label: def?.label ?? key,
|
|
@@ -8624,11 +8775,12 @@ function resolveComponent(id, seed) {
|
|
|
8624
8775
|
return {
|
|
8625
8776
|
itemId: id,
|
|
8626
8777
|
name: comp.name,
|
|
8627
|
-
icon:
|
|
8778
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8779
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8628
8780
|
tier: 't1',
|
|
8629
8781
|
mass: comp.mass,
|
|
8630
8782
|
itemType: 'component',
|
|
8631
|
-
stats,
|
|
8783
|
+
stats: resolvedStats,
|
|
8632
8784
|
};
|
|
8633
8785
|
}
|
|
8634
8786
|
function computeCapabilityGroup(moduleType, stats) {
|
|
@@ -8686,11 +8838,22 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8686
8838
|
],
|
|
8687
8839
|
};
|
|
8688
8840
|
}
|
|
8841
|
+
case MODULE_HAULER: {
|
|
8842
|
+
const caps = computeHaulerCapabilities(stats);
|
|
8843
|
+
return {
|
|
8844
|
+
capability: 'Hauler',
|
|
8845
|
+
attributes: [
|
|
8846
|
+
{ label: 'Capacity', value: caps.capacity },
|
|
8847
|
+
{ label: 'Efficiency', value: caps.efficiency },
|
|
8848
|
+
{ label: 'Drain', value: caps.drain },
|
|
8849
|
+
],
|
|
8850
|
+
};
|
|
8851
|
+
}
|
|
8689
8852
|
case MODULE_STORAGE: {
|
|
8690
8853
|
const str = stats.strength ?? 500;
|
|
8691
|
-
const
|
|
8692
|
-
const
|
|
8693
|
-
const statSum = str +
|
|
8854
|
+
const fin = stats.fineness ?? 500;
|
|
8855
|
+
const sat = stats.saturation ?? 500;
|
|
8856
|
+
const statSum = str + fin + sat;
|
|
8694
8857
|
const pct = 10 + Math.floor((statSum * 10) / 2997);
|
|
8695
8858
|
return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
|
|
8696
8859
|
}
|
|
@@ -8698,36 +8861,37 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8698
8861
|
return undefined;
|
|
8699
8862
|
}
|
|
8700
8863
|
}
|
|
8701
|
-
function resolveModule(id,
|
|
8864
|
+
function resolveModule(id, stats) {
|
|
8702
8865
|
const recipe = getModuleRecipeByItemId(id);
|
|
8703
8866
|
let attributes;
|
|
8704
|
-
if (
|
|
8705
|
-
const
|
|
8867
|
+
if (stats !== undefined) {
|
|
8868
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8706
8869
|
const modType = getModuleCapabilityType(id);
|
|
8707
|
-
const group = computeCapabilityGroup(modType,
|
|
8870
|
+
const group = computeCapabilityGroup(modType, decoded);
|
|
8708
8871
|
if (group)
|
|
8709
8872
|
attributes = [group];
|
|
8710
8873
|
}
|
|
8711
8874
|
return {
|
|
8712
8875
|
itemId: id,
|
|
8713
8876
|
name: recipe.name,
|
|
8714
|
-
icon:
|
|
8877
|
+
icon: itemAbbreviations[id] ?? moduleIcon,
|
|
8878
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8715
8879
|
tier: 't1',
|
|
8716
8880
|
mass: 0,
|
|
8717
8881
|
itemType: 'module',
|
|
8718
8882
|
attributes,
|
|
8719
8883
|
};
|
|
8720
8884
|
}
|
|
8721
|
-
function resolveEntity(id,
|
|
8885
|
+
function resolveEntity(id, stats, modules) {
|
|
8722
8886
|
const recipe = getEntityRecipeByItemId(id);
|
|
8723
8887
|
let attributes;
|
|
8724
8888
|
let moduleSlots;
|
|
8725
|
-
if (
|
|
8726
|
-
const
|
|
8889
|
+
if (stats !== undefined) {
|
|
8890
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8727
8891
|
attributes = [];
|
|
8728
8892
|
const isShip = recipe.id === 'ship-t1';
|
|
8729
8893
|
if (isShip) {
|
|
8730
|
-
const hullCaps = computeShipHullCapabilities(
|
|
8894
|
+
const hullCaps = computeShipHullCapabilities(decoded);
|
|
8731
8895
|
attributes.push({
|
|
8732
8896
|
capability: 'Hull',
|
|
8733
8897
|
attributes: [
|
|
@@ -8737,7 +8901,7 @@ function resolveEntity(id, seed, modules) {
|
|
|
8737
8901
|
});
|
|
8738
8902
|
}
|
|
8739
8903
|
else {
|
|
8740
|
-
const containerCaps = computeContainerCapabilities(
|
|
8904
|
+
const containerCaps = computeContainerCapabilities(decoded);
|
|
8741
8905
|
attributes.push({
|
|
8742
8906
|
capability: 'Hull',
|
|
8743
8907
|
attributes: [
|
|
@@ -8752,10 +8916,10 @@ function resolveEntity(id, seed, modules) {
|
|
|
8752
8916
|
const mod = modules?.[i];
|
|
8753
8917
|
if (mod?.installed) {
|
|
8754
8918
|
const modItemId = Number(mod.installed.item_id.value.toString());
|
|
8755
|
-
const
|
|
8756
|
-
const
|
|
8919
|
+
const modStats = BigInt(mod.installed.stats.toString());
|
|
8920
|
+
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
8757
8921
|
const modType = getModuleCapabilityType(modItemId);
|
|
8758
|
-
const group = computeCapabilityGroup(modType,
|
|
8922
|
+
const group = computeCapabilityGroup(modType, decodedStats);
|
|
8759
8923
|
const modRecipe = getModuleRecipeByItemId(modItemId);
|
|
8760
8924
|
return {
|
|
8761
8925
|
name: modRecipe?.name ?? 'Module',
|
|
@@ -8769,7 +8933,8 @@ function resolveEntity(id, seed, modules) {
|
|
|
8769
8933
|
return {
|
|
8770
8934
|
itemId: id,
|
|
8771
8935
|
name: recipe.name,
|
|
8772
|
-
icon:
|
|
8936
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8937
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8773
8938
|
tier: 't1',
|
|
8774
8939
|
mass: 0,
|
|
8775
8940
|
itemType: 'entity',
|
|
@@ -8777,28 +8942,157 @@ function resolveEntity(id, seed, modules) {
|
|
|
8777
8942
|
moduleSlots,
|
|
8778
8943
|
};
|
|
8779
8944
|
}
|
|
8780
|
-
function resolveItem(itemId,
|
|
8945
|
+
function resolveItem(itemId, stats, modules) {
|
|
8781
8946
|
const id = toNum(itemId);
|
|
8782
8947
|
if (isModuleItem(id))
|
|
8783
|
-
return resolveModule(id,
|
|
8948
|
+
return resolveModule(id, stats);
|
|
8784
8949
|
if (getComponentById(id))
|
|
8785
|
-
return resolveComponent(id,
|
|
8950
|
+
return resolveComponent(id, stats);
|
|
8786
8951
|
if (getEntityRecipeByItemId(id))
|
|
8787
|
-
return resolveEntity(id,
|
|
8788
|
-
return resolveResource(id,
|
|
8952
|
+
return resolveEntity(id, stats, modules);
|
|
8953
|
+
return resolveResource(id, stats);
|
|
8954
|
+
}
|
|
8955
|
+
|
|
8956
|
+
const TEMPLATES = {
|
|
8957
|
+
engine: {
|
|
8958
|
+
id: 'module.engine.description',
|
|
8959
|
+
template: 'generates {thrust} thrust for travel while draining {drain} energy per distance travelled',
|
|
8960
|
+
params: [
|
|
8961
|
+
['thrust', 'Thrust'],
|
|
8962
|
+
['drain', 'Drain'],
|
|
8963
|
+
],
|
|
8964
|
+
highlightKeys: ['thrust', 'drain'],
|
|
8965
|
+
},
|
|
8966
|
+
generator: {
|
|
8967
|
+
id: 'module.generator.description',
|
|
8968
|
+
template: 'holds {capacity} maximum energy and restores {recharge} per second while recharging',
|
|
8969
|
+
params: [
|
|
8970
|
+
['capacity', 'Capacity'],
|
|
8971
|
+
['recharge', 'Recharge'],
|
|
8972
|
+
],
|
|
8973
|
+
highlightKeys: ['capacity', 'recharge'],
|
|
8974
|
+
},
|
|
8975
|
+
gatherer: {
|
|
8976
|
+
id: 'module.gatherer.description',
|
|
8977
|
+
template: 'mines resources at {yield} speed to a max depth of {depth} with {speed} gather speed while draining {drain} energy per second',
|
|
8978
|
+
params: [
|
|
8979
|
+
['yield', 'Yield'],
|
|
8980
|
+
['drain', 'Drain'],
|
|
8981
|
+
['depth', 'Depth'],
|
|
8982
|
+
['speed', 'Speed'],
|
|
8983
|
+
],
|
|
8984
|
+
highlightKeys: ['yield', 'depth', 'speed', 'drain'],
|
|
8985
|
+
},
|
|
8986
|
+
loader: {
|
|
8987
|
+
id: 'module.loader.description',
|
|
8988
|
+
template: '{quantity} loader that generates {thrust} thrust with a weight of {mass} per unit',
|
|
8989
|
+
params: [
|
|
8990
|
+
['quantity', 'Quantity'],
|
|
8991
|
+
['thrust', 'Thrust'],
|
|
8992
|
+
['mass', 'Mass'],
|
|
8993
|
+
],
|
|
8994
|
+
highlightKeys: ['quantity', 'thrust', 'mass'],
|
|
8995
|
+
},
|
|
8996
|
+
manufacturing: {
|
|
8997
|
+
id: 'module.manufacturing.description',
|
|
8998
|
+
template: 'manufactures items at {speed} speed while draining {drain} energy per second',
|
|
8999
|
+
params: [
|
|
9000
|
+
['speed', 'Speed'],
|
|
9001
|
+
['drain', 'Drain'],
|
|
9002
|
+
],
|
|
9003
|
+
highlightKeys: ['speed', 'drain'],
|
|
9004
|
+
},
|
|
9005
|
+
storage: {
|
|
9006
|
+
id: 'module.storage.description',
|
|
9007
|
+
template: 'boosts cargo capacity by {bonus}%',
|
|
9008
|
+
params: [['bonus', 'Capacity Bonus']],
|
|
9009
|
+
highlightKeys: ['bonus'],
|
|
9010
|
+
},
|
|
9011
|
+
hauler: {
|
|
9012
|
+
id: 'module.hauler.description',
|
|
9013
|
+
template: 'locks onto up to {capacity} targets at {efficiency} efficiency while draining {drain} energy per distance travelled per target',
|
|
9014
|
+
params: [
|
|
9015
|
+
['capacity', 'Capacity'],
|
|
9016
|
+
['efficiency', 'Efficiency'],
|
|
9017
|
+
['drain', 'Drain'],
|
|
9018
|
+
],
|
|
9019
|
+
highlightKeys: ['capacity', 'efficiency', 'drain'],
|
|
9020
|
+
},
|
|
9021
|
+
};
|
|
9022
|
+
function describeModule(input) {
|
|
9023
|
+
if (!input.attributes || input.attributes.length === 0)
|
|
9024
|
+
return null;
|
|
9025
|
+
const key = input.capability.toLowerCase();
|
|
9026
|
+
const spec = TEMPLATES[key];
|
|
9027
|
+
if (!spec)
|
|
9028
|
+
return null;
|
|
9029
|
+
const params = {};
|
|
9030
|
+
for (const [paramName, attrLabel] of spec.params) {
|
|
9031
|
+
const attr = input.attributes.find((a) => a.label === attrLabel);
|
|
9032
|
+
if (attr)
|
|
9033
|
+
params[paramName] = attr.value;
|
|
9034
|
+
}
|
|
9035
|
+
return {
|
|
9036
|
+
id: spec.id,
|
|
9037
|
+
template: spec.template,
|
|
9038
|
+
params,
|
|
9039
|
+
highlightKeys: spec.highlightKeys,
|
|
9040
|
+
};
|
|
9041
|
+
}
|
|
9042
|
+
function describeModuleForItem(resolved) {
|
|
9043
|
+
if (resolved.itemType !== 'module')
|
|
9044
|
+
return null;
|
|
9045
|
+
const group = resolved.attributes?.[0];
|
|
9046
|
+
if (!group)
|
|
9047
|
+
return null;
|
|
9048
|
+
return describeModule({ capability: group.capability, attributes: group.attributes });
|
|
9049
|
+
}
|
|
9050
|
+
function describeModuleForSlot(slot) {
|
|
9051
|
+
if (!slot.installed || !slot.name || !slot.attributes)
|
|
9052
|
+
return null;
|
|
9053
|
+
return describeModule({ capability: slot.name, attributes: slot.attributes });
|
|
9054
|
+
}
|
|
9055
|
+
function renderDescription(desc, options) {
|
|
9056
|
+
const translate = options?.translate ?? ((_id, fallback) => fallback);
|
|
9057
|
+
const formatNumber = options?.formatNumber ?? ((n) => n.toLocaleString('en-US'));
|
|
9058
|
+
const tpl = translate(desc.id, desc.template);
|
|
9059
|
+
const spans = [];
|
|
9060
|
+
const regex = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
9061
|
+
let lastIndex = 0;
|
|
9062
|
+
let m;
|
|
9063
|
+
while ((m = regex.exec(tpl)) !== null) {
|
|
9064
|
+
if (m.index > lastIndex) {
|
|
9065
|
+
spans.push({ text: tpl.slice(lastIndex, m.index) });
|
|
9066
|
+
}
|
|
9067
|
+
const paramName = m[1] ?? '';
|
|
9068
|
+
const raw = desc.params[paramName];
|
|
9069
|
+
if (raw === undefined) {
|
|
9070
|
+
spans.push({ text: `{${paramName}}` });
|
|
9071
|
+
}
|
|
9072
|
+
else {
|
|
9073
|
+
const formatted = typeof raw === 'number' ? formatNumber(raw) : raw;
|
|
9074
|
+
const highlight = desc.highlightKeys.includes(paramName);
|
|
9075
|
+
spans.push(highlight ? { text: formatted, highlight: true } : { text: formatted });
|
|
9076
|
+
}
|
|
9077
|
+
lastIndex = m.index + m[0].length;
|
|
9078
|
+
}
|
|
9079
|
+
if (lastIndex < tpl.length) {
|
|
9080
|
+
spans.push({ text: tpl.slice(lastIndex) });
|
|
9081
|
+
}
|
|
9082
|
+
return spans;
|
|
8789
9083
|
}
|
|
8790
9084
|
|
|
8791
9085
|
function readCommonBase(data) {
|
|
8792
9086
|
return {
|
|
8793
9087
|
quantity: Number(data.quantity),
|
|
8794
|
-
|
|
9088
|
+
stats: String(data.stats),
|
|
8795
9089
|
origin_x: String(data.origin_x),
|
|
8796
9090
|
origin_y: String(data.origin_y),
|
|
8797
9091
|
};
|
|
8798
9092
|
}
|
|
8799
9093
|
function deserializeScalar(data, itemId) {
|
|
8800
9094
|
const base = readCommonBase(data);
|
|
8801
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9095
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats };
|
|
8802
9096
|
}
|
|
8803
9097
|
const deserializeResource = deserializeScalar;
|
|
8804
9098
|
const deserializeComponent = deserializeScalar;
|
|
@@ -8806,15 +9100,15 @@ const deserializeModule = deserializeScalar;
|
|
|
8806
9100
|
function deserializeEntity(data, itemId) {
|
|
8807
9101
|
const base = readCommonBase(data);
|
|
8808
9102
|
const moduleItems = (data.module_items ?? []).map((v) => Number(v));
|
|
8809
|
-
const
|
|
9103
|
+
const moduleStats = (data.module_stats ?? []).map((v) => String(v));
|
|
8810
9104
|
const layout = getEntitySlotLayout(itemId);
|
|
8811
9105
|
const modules = layout.map((slot, i) => ({
|
|
8812
9106
|
type: slot.type,
|
|
8813
9107
|
installed: moduleItems[i] && moduleItems[i] !== 0
|
|
8814
|
-
? { item_id: moduleItems[i],
|
|
9108
|
+
? { item_id: moduleItems[i], stats: moduleStats[i] }
|
|
8815
9109
|
: undefined,
|
|
8816
9110
|
}));
|
|
8817
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9111
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats, modules };
|
|
8818
9112
|
}
|
|
8819
9113
|
function deserializeAsset(data, itemId) {
|
|
8820
9114
|
const type = itemTypeCode(itemId);
|
|
@@ -8833,40 +9127,40 @@ function deserializeAsset(data, itemId) {
|
|
|
8833
9127
|
function idiv(a, b) {
|
|
8834
9128
|
return Math.floor(a / b);
|
|
8835
9129
|
}
|
|
8836
|
-
function computeBaseHullmass(
|
|
8837
|
-
const density = decodeStat(
|
|
9130
|
+
function computeBaseHullmass(stats) {
|
|
9131
|
+
const density = decodeStat(stats, 1);
|
|
8838
9132
|
return 25000 + 75 * density;
|
|
8839
9133
|
}
|
|
8840
|
-
function computeBaseCapacityShip(
|
|
8841
|
-
const s = decodeStat(
|
|
9134
|
+
function computeBaseCapacityShip(stats) {
|
|
9135
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8842
9136
|
return Math.floor(1000000 * Math.pow(10, s / 2997));
|
|
8843
9137
|
}
|
|
8844
|
-
function computeBaseCapacityWarehouse(
|
|
8845
|
-
const s = decodeStat(
|
|
9138
|
+
function computeBaseCapacityWarehouse(stats) {
|
|
9139
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8846
9140
|
return Math.floor(20000000 * Math.pow(10, s / 2997));
|
|
8847
9141
|
}
|
|
8848
9142
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
8849
9143
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
8850
9144
|
const computeGeneratorCap = (res) => 300 + idiv(res, 6);
|
|
8851
|
-
const computeGeneratorRech = (
|
|
9145
|
+
const computeGeneratorRech = (ref) => 1 + idiv(ref * 3, 1000);
|
|
8852
9146
|
const computeGathererYield = (str) => 200 + str;
|
|
8853
|
-
const computeGathererDrain = (con) => Math.max(
|
|
9147
|
+
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
8854
9148
|
const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
|
|
8855
9149
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
8856
|
-
const computeLoaderMass = (
|
|
9150
|
+
const computeLoaderMass = (fin) => Math.max(200, 2000 - fin * 2);
|
|
8857
9151
|
const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
|
|
8858
9152
|
const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
|
|
8859
|
-
const computeCrafterDrain = (
|
|
9153
|
+
const computeCrafterDrain = (com) => Math.max(5, 30 - idiv(com, 33));
|
|
8860
9154
|
function entityDisplayName(itemId) {
|
|
8861
9155
|
switch (itemId) {
|
|
8862
9156
|
case ITEM_SHIP_T1_PACKED:
|
|
8863
|
-
return 'Ship
|
|
9157
|
+
return 'Ship';
|
|
8864
9158
|
case ITEM_WAREHOUSE_T1_PACKED:
|
|
8865
|
-
return 'Warehouse
|
|
9159
|
+
return 'Warehouse';
|
|
8866
9160
|
case ITEM_CONTAINER_T1_PACKED:
|
|
8867
|
-
return 'Container
|
|
9161
|
+
return 'Container';
|
|
8868
9162
|
case ITEM_CONTAINER_T2_PACKED:
|
|
8869
|
-
return 'Container
|
|
9163
|
+
return 'Container';
|
|
8870
9164
|
default:
|
|
8871
9165
|
return 'Entity';
|
|
8872
9166
|
}
|
|
@@ -8874,22 +9168,22 @@ function entityDisplayName(itemId) {
|
|
|
8874
9168
|
function moduleDisplayName(itemId) {
|
|
8875
9169
|
switch (itemId) {
|
|
8876
9170
|
case ITEM_ENGINE_T1:
|
|
8877
|
-
return 'Engine
|
|
9171
|
+
return 'Engine';
|
|
8878
9172
|
case ITEM_GENERATOR_T1:
|
|
8879
|
-
return 'Generator
|
|
9173
|
+
return 'Generator';
|
|
8880
9174
|
case ITEM_GATHERER_T1:
|
|
8881
|
-
return 'Gatherer
|
|
9175
|
+
return 'Gatherer';
|
|
8882
9176
|
case ITEM_LOADER_T1:
|
|
8883
|
-
return 'Loader
|
|
9177
|
+
return 'Loader';
|
|
8884
9178
|
case ITEM_MANUFACTURING_T1:
|
|
8885
|
-
return 'Manufacturing
|
|
9179
|
+
return 'Manufacturing';
|
|
8886
9180
|
case ITEM_STORAGE_T1:
|
|
8887
|
-
return 'Storage
|
|
9181
|
+
return 'Storage';
|
|
8888
9182
|
default:
|
|
8889
9183
|
return 'Module';
|
|
8890
9184
|
}
|
|
8891
9185
|
}
|
|
8892
|
-
function formatModuleLine(slot, itemId,
|
|
9186
|
+
function formatModuleLine(slot, itemId, stats) {
|
|
8893
9187
|
let out = `Slot ${slot} - `;
|
|
8894
9188
|
if (itemId === 0) {
|
|
8895
9189
|
out += '(empty)';
|
|
@@ -8899,42 +9193,42 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8899
9193
|
const subtype = getModuleCapabilityType(itemId);
|
|
8900
9194
|
switch (subtype) {
|
|
8901
9195
|
case MODULE_ENGINE: {
|
|
8902
|
-
const vol = decodeStat(
|
|
8903
|
-
const thm = decodeStat(
|
|
9196
|
+
const vol = decodeStat(stats, 0);
|
|
9197
|
+
const thm = decodeStat(stats, 1);
|
|
8904
9198
|
out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
|
|
8905
9199
|
break;
|
|
8906
9200
|
}
|
|
8907
9201
|
case MODULE_GENERATOR: {
|
|
8908
|
-
const res = decodeStat(
|
|
8909
|
-
const
|
|
8910
|
-
out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(
|
|
9202
|
+
const res = decodeStat(stats, 0);
|
|
9203
|
+
const ref = decodeStat(stats, 1);
|
|
9204
|
+
out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
|
|
8911
9205
|
break;
|
|
8912
9206
|
}
|
|
8913
9207
|
case MODULE_GATHERER: {
|
|
8914
|
-
const str = decodeStat(
|
|
8915
|
-
const tol = decodeStat(
|
|
8916
|
-
const con = decodeStat(
|
|
8917
|
-
const ref = decodeStat(
|
|
9208
|
+
const str = decodeStat(stats, 0);
|
|
9209
|
+
const tol = decodeStat(stats, 1);
|
|
9210
|
+
const con = decodeStat(stats, 3);
|
|
9211
|
+
const ref = decodeStat(stats, 4);
|
|
8918
9212
|
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
8919
9213
|
break;
|
|
8920
9214
|
}
|
|
8921
9215
|
case MODULE_LOADER: {
|
|
8922
|
-
const
|
|
8923
|
-
const pla = decodeStat(
|
|
8924
|
-
out += ` Mass ${computeLoaderMass(
|
|
9216
|
+
const fin = decodeStat(stats, 0);
|
|
9217
|
+
const pla = decodeStat(stats, 1);
|
|
9218
|
+
out += ` Mass ${computeLoaderMass(fin)} Thrust ${computeLoaderThrust(pla)}`;
|
|
8925
9219
|
break;
|
|
8926
9220
|
}
|
|
8927
9221
|
case MODULE_CRAFTER: {
|
|
8928
|
-
const rea = decodeStat(
|
|
8929
|
-
const
|
|
8930
|
-
out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(
|
|
9222
|
+
const rea = decodeStat(stats, 0);
|
|
9223
|
+
const com = decodeStat(stats, 1);
|
|
9224
|
+
out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(com)}`;
|
|
8931
9225
|
break;
|
|
8932
9226
|
}
|
|
8933
9227
|
case MODULE_STORAGE: {
|
|
8934
|
-
const str = decodeStat(
|
|
8935
|
-
const
|
|
8936
|
-
const
|
|
8937
|
-
const sum = str +
|
|
9228
|
+
const str = decodeStat(stats, 0);
|
|
9229
|
+
const fin = decodeStat(stats, 2);
|
|
9230
|
+
const sat = decodeStat(stats, 3);
|
|
9231
|
+
const sum = str + fin + sat;
|
|
8938
9232
|
const pct = 10 + idiv(sum * 10, 2997);
|
|
8939
9233
|
out += ` +${pct}% capacity`;
|
|
8940
9234
|
break;
|
|
@@ -8942,14 +9236,14 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8942
9236
|
}
|
|
8943
9237
|
return out;
|
|
8944
9238
|
}
|
|
8945
|
-
function buildEntityDescription(itemId,
|
|
8946
|
-
const hullMass = computeBaseHullmass(
|
|
9239
|
+
function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
9240
|
+
const hullMass = computeBaseHullmass(hullStats);
|
|
8947
9241
|
let baseCapacity = 0;
|
|
8948
9242
|
if (itemId === ITEM_SHIP_T1_PACKED) {
|
|
8949
|
-
baseCapacity = computeBaseCapacityShip(
|
|
9243
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
8950
9244
|
}
|
|
8951
9245
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
8952
|
-
baseCapacity = computeBaseCapacityWarehouse(
|
|
9246
|
+
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
8953
9247
|
}
|
|
8954
9248
|
let out = entityDisplayName(itemId);
|
|
8955
9249
|
out += ` - Hull ${hullMass} mass`;
|
|
@@ -8958,7 +9252,7 @@ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
|
|
|
8958
9252
|
}
|
|
8959
9253
|
out += '\n\n';
|
|
8960
9254
|
for (let i = 0; i < moduleItems.length; i++) {
|
|
8961
|
-
out += formatModuleLine(i, moduleItems[i],
|
|
9255
|
+
out += formatModuleLine(i, moduleItems[i], moduleStats[i] ?? 0n);
|
|
8962
9256
|
out += '\n';
|
|
8963
9257
|
}
|
|
8964
9258
|
return out;
|
|
@@ -8994,6 +9288,63 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
8994
9288
|
buildEntityDescription: buildEntityDescription
|
|
8995
9289
|
});
|
|
8996
9290
|
|
|
9291
|
+
function formatMass(kg) {
|
|
9292
|
+
const t = kg / 1000;
|
|
9293
|
+
const fixed = t.toFixed(2);
|
|
9294
|
+
const trimmed = fixed.replace(/\.?0+$/, '');
|
|
9295
|
+
return `${trimmed} t`;
|
|
9296
|
+
}
|
|
9297
|
+
function formatMassDelta(kg) {
|
|
9298
|
+
if (kg === 0)
|
|
9299
|
+
return '0 t';
|
|
9300
|
+
const sign = kg > 0 ? '+' : '-';
|
|
9301
|
+
return `${sign}${formatMass(Math.abs(kg))}`;
|
|
9302
|
+
}
|
|
9303
|
+
|
|
9304
|
+
const TIER_ADJECTIVES = {
|
|
9305
|
+
1: 'Crude',
|
|
9306
|
+
2: 'Dense',
|
|
9307
|
+
3: 'Pure',
|
|
9308
|
+
4: 'Prime',
|
|
9309
|
+
5: 'Pristine',
|
|
9310
|
+
6: 'Radiant',
|
|
9311
|
+
7: 'Exotic',
|
|
9312
|
+
8: 'Mythic',
|
|
9313
|
+
9: 'Cosmic',
|
|
9314
|
+
10: 'Ascendant',
|
|
9315
|
+
};
|
|
9316
|
+
const CATEGORY_LABELS = {
|
|
9317
|
+
ore: 'Ore',
|
|
9318
|
+
crystal: 'Crystal',
|
|
9319
|
+
gas: 'Gas',
|
|
9320
|
+
regolith: 'Regolith',
|
|
9321
|
+
biomass: 'Biomass',
|
|
9322
|
+
};
|
|
9323
|
+
function tierNumber(tier) {
|
|
9324
|
+
return Number(String(tier).replace(/^t/i, ''));
|
|
9325
|
+
}
|
|
9326
|
+
function displayName(resolved) {
|
|
9327
|
+
if (resolved.itemType === 'resource') {
|
|
9328
|
+
const tierNum = tierNumber(resolved.tier);
|
|
9329
|
+
const adj = TIER_ADJECTIVES[tierNum] ?? 'Unknown';
|
|
9330
|
+
const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
|
|
9331
|
+
return `${adj} ${cat}`;
|
|
9332
|
+
}
|
|
9333
|
+
return resolved.name;
|
|
9334
|
+
}
|
|
9335
|
+
function describeItem(resolved, opts) {
|
|
9336
|
+
const massFmt = opts?.formatMass ?? formatMass;
|
|
9337
|
+
const mass = massFmt(resolved.mass);
|
|
9338
|
+
const tier = `T${tierNumber(resolved.tier)}`;
|
|
9339
|
+
if (resolved.itemType === 'resource') {
|
|
9340
|
+
const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
|
|
9341
|
+
const header = `${tier} ${cat}`;
|
|
9342
|
+
const stats = resolved.stats?.map((s) => `${s.label} ${s.value}`).join(', ');
|
|
9343
|
+
return [header, stats, mass].filter(Boolean).join(' · ');
|
|
9344
|
+
}
|
|
9345
|
+
return `${tier} ${resolved.name} · ${mass}`;
|
|
9346
|
+
}
|
|
9347
|
+
|
|
8997
9348
|
exports.ActionsManager = ActionsManager;
|
|
8998
9349
|
exports.BASE_ORBITAL_MASS = BASE_ORBITAL_MASS;
|
|
8999
9350
|
exports.COMMIT_ALREADY_SET = COMMIT_ALREADY_SET;
|
|
@@ -9162,6 +9513,7 @@ exports.capabilityAttributes = capabilityAttributes;
|
|
|
9162
9513
|
exports.capabilityNames = capabilityNames;
|
|
9163
9514
|
exports.capsHasCrafter = capsHasCrafter;
|
|
9164
9515
|
exports.capsHasGatherer = capsHasGatherer;
|
|
9516
|
+
exports.capsHasHauler = capsHasHauler;
|
|
9165
9517
|
exports.capsHasLoaders = capsHasLoaders;
|
|
9166
9518
|
exports.capsHasMass = capsHasMass;
|
|
9167
9519
|
exports.capsHasMovement = capsHasMovement;
|
|
@@ -9169,6 +9521,7 @@ exports.capsHasStorage = capsHasStorage;
|
|
|
9169
9521
|
exports.cargoItemToStack = cargoItemToStack;
|
|
9170
9522
|
exports.cargoUtils = cargoUtils;
|
|
9171
9523
|
exports.categoryColors = categoryColors;
|
|
9524
|
+
exports.categoryIconShapes = categoryIconShapes;
|
|
9172
9525
|
exports.categoryIcons = categoryIcons;
|
|
9173
9526
|
exports.categoryItemMass = categoryItemMass;
|
|
9174
9527
|
exports.componentIcon = componentIcon;
|
|
@@ -9179,7 +9532,7 @@ exports.computeBaseHullmass = computeBaseHullmass;
|
|
|
9179
9532
|
exports.computeComponentStats = computeComponentStats;
|
|
9180
9533
|
exports.computeContainerCapabilities = computeContainerCapabilities;
|
|
9181
9534
|
exports.computeContainerT2Capabilities = computeContainerT2Capabilities;
|
|
9182
|
-
exports.
|
|
9535
|
+
exports.computeCraftedOutputStats = computeCraftedOutputStats;
|
|
9183
9536
|
exports.computeCrafterDrain = computeCrafterDrain;
|
|
9184
9537
|
exports.computeCrafterSpeed = computeCrafterSpeed;
|
|
9185
9538
|
exports.computeEngineCapabilities = computeEngineCapabilities;
|
|
@@ -9205,6 +9558,7 @@ exports.computeManufacturingCapabilities = computeManufacturingCapabilities;
|
|
|
9205
9558
|
exports.computeShipCapabilities = computeShipCapabilities;
|
|
9206
9559
|
exports.computeShipHullCapabilities = computeShipHullCapabilities;
|
|
9207
9560
|
exports.computeStorageCapabilities = computeStorageCapabilities;
|
|
9561
|
+
exports.computeWarehouseCapabilities = computeWarehouseCapabilities;
|
|
9208
9562
|
exports.computeWarehouseHullCapabilities = computeWarehouseHullCapabilities;
|
|
9209
9563
|
exports.coordsToLocationId = coordsToLocationId;
|
|
9210
9564
|
exports.createInventoryAccessor = createInventoryAccessor;
|
|
@@ -9220,13 +9574,19 @@ exports.deriveLocationSize = deriveLocationSize;
|
|
|
9220
9574
|
exports.deriveLocationStatic = deriveLocationStatic;
|
|
9221
9575
|
exports.deriveResourceStats = deriveResourceStats;
|
|
9222
9576
|
exports.deriveStratum = deriveStratum;
|
|
9577
|
+
exports.describeItem = describeItem;
|
|
9578
|
+
exports.describeModule = describeModule;
|
|
9579
|
+
exports.describeModuleForItem = describeModuleForItem;
|
|
9580
|
+
exports.describeModuleForSlot = describeModuleForSlot;
|
|
9223
9581
|
exports.deserializeAsset = deserializeAsset;
|
|
9224
9582
|
exports.deserializeComponent = deserializeComponent;
|
|
9225
9583
|
exports.deserializeEntity = deserializeEntity;
|
|
9226
9584
|
exports.deserializeModule = deserializeModule;
|
|
9227
9585
|
exports.deserializeResource = deserializeResource;
|
|
9586
|
+
exports.displayName = displayName;
|
|
9228
9587
|
exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
|
|
9229
9588
|
exports.distanceBetweenPoints = distanceBetweenPoints;
|
|
9589
|
+
exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
|
|
9230
9590
|
exports.encodeStats = encodeStats;
|
|
9231
9591
|
exports.energyPercent = energyPercent;
|
|
9232
9592
|
exports.entityDisplayName = entityDisplayName;
|
|
@@ -9234,6 +9594,8 @@ exports.entityRecipes = entityRecipes;
|
|
|
9234
9594
|
exports.estimateDealTravelTime = estimateDealTravelTime;
|
|
9235
9595
|
exports.estimateTravelTime = estimateTravelTime;
|
|
9236
9596
|
exports.findNearbyPlanets = findNearbyPlanets;
|
|
9597
|
+
exports.formatMass = formatMass;
|
|
9598
|
+
exports.formatMassDelta = formatMassDelta;
|
|
9237
9599
|
exports.formatModuleLine = formatModuleLine;
|
|
9238
9600
|
exports.getAllCraftableItems = getAllCraftableItems;
|
|
9239
9601
|
exports.getCapabilityAttributes = getCapabilityAttributes;
|
|
@@ -9288,8 +9650,8 @@ exports.isGatherableLocation = isGatherableLocation;
|
|
|
9288
9650
|
exports.isInvertedAttribute = isInvertedAttribute;
|
|
9289
9651
|
exports.isModuleItem = isModuleItem;
|
|
9290
9652
|
exports.isRelatedItem = isRelatedItem;
|
|
9653
|
+
exports.itemAbbreviations = itemAbbreviations;
|
|
9291
9654
|
exports.itemCategory = itemCategory;
|
|
9292
|
-
exports.itemIcons = itemIcons;
|
|
9293
9655
|
exports.itemIds = itemIds;
|
|
9294
9656
|
exports.itemOffset = itemOffset;
|
|
9295
9657
|
exports.itemTier = itemTier;
|
|
@@ -9309,6 +9671,7 @@ exports.projectEntity = projectEntity;
|
|
|
9309
9671
|
exports.projectEntityAt = projectEntityAt;
|
|
9310
9672
|
exports.readCommonBase = readCommonBase;
|
|
9311
9673
|
exports.removeFromStacks = removeFromStacks;
|
|
9674
|
+
exports.renderDescription = renderDescription;
|
|
9312
9675
|
exports.resolveItem = resolveItem;
|
|
9313
9676
|
exports.resolveStats = resolveStats;
|
|
9314
9677
|
exports.rollTier = rollTier;
|
|
@@ -9320,6 +9683,7 @@ exports.stackToCargoItem = stackToCargoItem;
|
|
|
9320
9683
|
exports.stacksEqual = stacksEqual;
|
|
9321
9684
|
exports.statMappings = statMappings;
|
|
9322
9685
|
exports.tierColors = tierColors;
|
|
9686
|
+
exports.tierLabels = tierLabels;
|
|
9323
9687
|
exports.toLocation = toLocation;
|
|
9324
9688
|
exports.validateSchedule = validateSchedule;
|
|
9325
9689
|
//# sourceMappingURL=shipload.js.map
|