@shipload/sdk 1.0.0-next.50 → 1.0.0-next.52

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.
Files changed (58) hide show
  1. package/lib/shipload.d.ts +544 -149
  2. package/lib/shipload.js +2424 -448
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2390 -447
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +131 -7
  7. package/lib/testing.js +469 -11
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +470 -12
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.ts +10 -1
  13. package/src/capabilities/gathering.ts +1 -1
  14. package/src/capabilities/hauling.ts +0 -5
  15. package/src/capabilities/modules.ts +6 -0
  16. package/src/capabilities/movement.ts +1 -1
  17. package/src/contracts/server.ts +315 -8
  18. package/src/data/capabilities.ts +11 -2
  19. package/src/data/entities.json +235 -20
  20. package/src/data/item-ids.ts +10 -0
  21. package/src/data/items.json +61 -0
  22. package/src/data/kind-registry.json +53 -1
  23. package/src/data/kind-registry.ts +5 -0
  24. package/src/data/metadata.ts +74 -5
  25. package/src/data/recipes-runtime.ts +1 -0
  26. package/src/data/recipes.json +887 -118
  27. package/src/derivation/capabilities.test.ts +81 -4
  28. package/src/derivation/capabilities.ts +162 -57
  29. package/src/derivation/crafting.ts +2 -0
  30. package/src/derivation/recipe-usage.test.ts +10 -7
  31. package/src/derivation/rollups.ts +16 -0
  32. package/src/derivation/stat-scaling.ts +12 -0
  33. package/src/entities/makers.ts +10 -1
  34. package/src/index-module.ts +33 -3
  35. package/src/managers/actions.ts +89 -44
  36. package/src/managers/construction-types.ts +2 -2
  37. package/src/managers/construction.ts +15 -15
  38. package/src/managers/plot.ts +1 -1
  39. package/src/nft/buildImmutableData.ts +55 -9
  40. package/src/nft/description.ts +99 -36
  41. package/src/planner/planner.test.ts +50 -41
  42. package/src/resolution/resolve-item.test.ts +1 -1
  43. package/src/resolution/resolve-item.ts +26 -11
  44. package/src/scheduling/availability.ts +7 -6
  45. package/src/scheduling/cancel.test.ts +40 -6
  46. package/src/scheduling/cancel.ts +21 -29
  47. package/src/scheduling/jobs.ts +71 -0
  48. package/src/scheduling/lanes.ts +29 -0
  49. package/src/scheduling/projection.ts +42 -25
  50. package/src/scheduling/task-cargo.ts +1 -1
  51. package/src/testing/projection-parity.ts +2 -2
  52. package/src/travel/reach.ts +4 -6
  53. package/src/travel/route-planner.ts +60 -49
  54. package/src/travel/route-simulator.ts +170 -0
  55. package/src/travel/travel.ts +40 -5
  56. package/src/types/capabilities.ts +9 -3
  57. package/src/types.ts +8 -3
  58. package/src/managers/flatten-gather-plan.test.ts +0 -80
package/lib/shipload.js CHANGED
@@ -448,7 +448,7 @@ var platform = /*#__PURE__*/Object.freeze({
448
448
  Contract: Contract$1
449
449
  });
450
450
 
451
- const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDi/AQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQlidWlsZHBsb3QAAgpidWlsZGVyX2lkBnVpbnQ2NAdwbG90X2lkBnVpbnQ2NAZjYW5jZWwAAwJpZAZ1aW50NjQIbGFuZV9rZXkFdWludDgFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8JY2xhaW1fcm93AAEFb3duZXIEbmFtZQljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8FY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAWBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2DGdlbmVzaXNmbGVldAABCGVudGl0aWVzDGVudGl0eV9yb3dbXQpnZXRjbHVzdGVyAAEGaHViX2lkBnVpbnQ2NAlnZXRjb25maWcAAApnZXRkZXBvc2l0AAIFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQLZ2V0ZGlzdGFuY2UABAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAtnZXRlbGlnaWJsZQACBmNvb3Jkcwtjb29yZGluYXRlcwdzdHJhdHVtBnVpbnQxNglnZXRlbnRjbHMAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxnZXRmb290cHJpbnQAAQdpdGVtX2lkBnVpbnQxNgtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAAC2dldGl0ZW10eXBlAAEHaXRlbV9pZAZ1aW50MTYMZ2V0aXRlbXR5cGVzAAALZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQAQBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMg1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwlzZXRjb29yZHMAAwllbnRpdHlfaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAlzZXRuZnRjZmcAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUIc2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACgR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPwRob2xkB3VpbnQ2ND8OdGFyZ2V0X2l0ZW1faWQHdWludDE2Pwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NGEAAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAADINFbpTEQJY2xhaW1wbG90AHBVviZj6UxEDGNsYWltc3RhcnRlcgAAAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy4AAAANu0ilSghkZW1vbGlzaPEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlbW9saXNoCnN1bW1hcnk6ICdEZW1vbGlzaCBhIHN0YXRpb25hcnkgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZWNvbW1pc3Npb24gYW4gZW50aXR5LCBlcmFzaW5nIGl0IGZyb20gdGhlIGdhbWUuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlLCBoYXZlIGVtcHR5IGNhcmdvLCBhbmQgaGF2ZSBubyBpbnN0YWxsZWQgbW9kdWxlcyAocmVtb3ZlIGVhY2ggdmlhIHJtbW9kdWxlIGZpcnN0KS4gU2NoZWR1bGVzIGEgZGVtb2xpc2ggdGFzayB0aGF0IGVyYXNlcyB0aGUgZW50aXR5IG9uIHJlc29sdXRpb24uIE9ubHkgdmFsaWQgZm9yIGVudGl0aWVzIHRoYXQgY2Fubm90IG1vdmU7IHVzZSB1bmRlcGxveSBvciB3cmFwZW50aXR5IGZvciB0aGUgcmVzdC4AAAAAeBqrSgZkZXBsb3nsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXBsb3kKc3VtbWFyeTogJ0RlcGxveSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClVucGFjayBhIHBhY2tlZCBlbnRpdHkgaXRlbSAocGFja2VkIHNoaXAgb3IgcGFja2VkIGNvbnRhaW5lcikgZnJvbSBjYXJnbywgc2NoZWR1bGluZyBhIGRlcGxveSB0YXNrIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGVudGl0eSBhdCB0aGUgZGVwbG95aW5nIGVudGl0eSdzIGxvY2F0aW9uIHVwb24gcmVzb2x1dGlvbi4AgM8uT4WwSgpkZXNjZW50aXR5yQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVzY2VudGl0eQpzdW1tYXJ5OiAnRGVzY3JpYmUgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHN0cmluZyBmb3IgYSBwYWNrZWQgZW50aXR5LCBkZXJpdmVkIGZyb20gdGhlIGVudGl0eSBpdGVtIGlkLCBodWxsIHN0YXRzLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc3RhdHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLoCxkZRdg7pbDGZpeGNhcmdvbWFzc5ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGZpeGNhcmdvbWFzcwpzdW1tYXJ5OiAnREVCVUc6IHJlY29tcHV0ZSBlbnRpdHkgY2FyZ28gbWFzcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGFuZCByZXdyaXRlIGFuIGVudGl0eSdzIGNhcmdvIG1hc3MgZnJvbSBpdHMgY3VycmVudCBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LiBBdmFpbGFibGUgZm9yIHJlcGFpcmluZyBkcmlmdCBiZXR3ZWVuIGNhY2hlZCBjYXJnbyBtYXNzIGFuZCB0aGUgdHJ1ZSBtYXNzIGRlcml2ZWQgZnJvbSBjYXJnbyByb3dzLgCiUVtdhS5dC2ZvcmNlcmV2ZWFsvgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm9yY2VyZXZlYWwKc3VtbWFyeTogJ0RFQlVHOiBmb3JjZS1maW5hbGl6ZSBhbiBlcG9jaCBmcm9tIGV4aXN0aW5nIHJldmVhbHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkZpbmFsaXplIGEgc3R1Y2sgZXBvY2ggYnkgY29tcHV0aW5nIGl0cyBzZWVkIGZyb20gdGhlIHJldmVhbHMgYWxyZWFkeSBzdWJtaXR0ZWQsIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIFRoZSBzZWVkIGlzIGRlcml2ZWQgc29sZWx5IGZyb20gdGhlIHByZS1pbWFnZS1sb2NrZWQgcmV2ZWFscyBhbHJlYWR5IG9uIGNoYWluOyBubyBhZG1pbi1zdXBwbGllZCBlbnRyb3B5IGlzIGludHJvZHVjZWQuIFVzZWQgdG8gdW5ibG9jayBlcG9jaCBwcm9ncmVzc2lvbiB3aGVuIHRoZSB0aHJlc2hvbGQgY2Fubm90IG90aGVyd2lzZSBiZSBtZXQuAAAAAFzVsmEGZ2F0aGVylwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2F0aGVyCnN1bW1hcnk6ICdHYXRoZXIgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpHYXRoZXIgcmVzb3VyY2VzIGF0IHRoZSBzaGlwJ3MgY3VycmVudCBsb2NhdGlvbi4gT25seSB3b3JrcyBhdCBnYXRoZXJhYmxlIGxvY2F0aW9uIHR5cGVzLiBTY2hlZHVsZXMgYSBnYXRoZXIgdGFzayB0aGF0IGNvbnN1bWVzIGVuZXJneSBhbmQgeWllbGRzIGNhcmdvIGJhc2VkIG9uIHRoZSBzaGlwJ3MgZ2F0aGVyZXIgc3RhdHMgYW5kIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIGNvbXBvc2l0aW9uLpCVigs7rKZiDGdlbmVzaXNmbGVldKkELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdlbmVzaXNmbGVldApzdW1tYXJ5OiAnTWludCB0aGUgb25lLXRpbWUgZ2VuZXNpcyBmbGVldCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW1wbGFjZSB0aGUgb25lLXRpbWUgZ2VuZXNpcyBmbGVldDogYSBjYWxsZXItc3VwcGxpZWQgc2V0IG9mIGVudGl0aWVzIChzaGlwcywgc3RydWN0dXJlcywgYW5kIGNvbnRhaW5lcnMpIHdyaXR0ZW4gdG8gdGhlIHdvcmxkIGFzLWlzLiBWYWxpZCBvbmx5IGR1cmluZyB0aGUgcHJlLWdlbmVzaXMgd2luZG93LCBiZWZvcmUgZXBvY2ggMSBpcyBmaW5hbGl6ZWQuIFRoZSBzdXBwbGllZCBlbnRpdHkgaWRzIGFyZSBob25vcmVkIGFuZCB0aGUgaWQgc2VxdWVuY2UgaXMgYWR2YW5jZWQgcGFzdCB0aGVtOyBpZCAwIGlzIHJlc2VydmVkIGZvciB0aGUgR2VuZXNpcyBOZXh1cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgDAVRnriLJiCmdldGNsdXN0ZXIAAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AQHaYVpWyYgpnZXRkZXBvc2l0AAAUmiZjl7JiC2dldGRpc3RhbmNlAABUPI65qLJiC2dldGVsaWdpYmxlyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZWxpZ2libGUKc3VtbWFyeTogJ0dldCBlbGlnaWJsZSByZXNvdXJjZSBpdGVtIElEcyBhdCBhIGxvY2F0aW9uIGFuZCBzdHJhdHVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZXNvdXJjZSBpdGVtIElEcyBlbGlnaWJsZSB0byBiZSBnYXRoZXJlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgYW5kIHN0cmF0dW0gZGVwdGguIEl0ZW1zIGFyZSBnYXRlZCBieSBib3RoIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIHByb2ZpbGUgYW5kIHRoZSBkZXB0aCB0aHJlc2hvbGQgZm9yIGVhY2ggdGllci4AAMAR5amyYglnZXRlbnRjbHOMAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRjbHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgY2xhc3MgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBlbnRpdHkgY2xhc3MgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoT3JiaXRhbFZlc3NlbCwgUGxhbmV0YXJ5U3RydWN0dXJlKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgZW50aXR5IGNsYXNzIGlkZW50aWZpZXJzLgCwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLpCnuzVTurJiDGdldGZvb3RwcmludAAATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AVPVZquyyYgtnZXRpdGVtdHlwZQCAVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgAAADjTiLNiCGdldHNsb3RzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c2xvdHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc2xvdCBsYXlvdXRzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIHNsb3QgbGF5b3V0IGZvciBldmVyeSBlbnRpdHkgaXRlbSB0eXBlLCBsaXN0aW5nIHRoZSBvcmRlcmVkIHNsb3QgdHlwZXMgYXZhaWxhYmxlIGZvciBtb2R1bGUgaW5zdGFsbGF0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUgdHlwZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIGVudGl0eSBodWxsLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AVKRNXsqzYgtnZXR3b3JtaG9sZQCQHZ7m5qrpZQxncm91cHRyYW5zaXQAAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo+AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuACi7BuVLq3QLaW1wb3J0Y2FyZ28A4LPLU+VLq3QMaW1wb3J0ZW50aXR5AACqppflS6t0C2ltcG9ydGdyb3VwAHCVN7HmS6t0DGltcG9ydHBsYXllcgC6r8Lq5kurdA1pbXBvcnRyZXNlcnZlAABUNhnnS6t0C2ltcG9ydHN0YXRlAAAAAAAAMB19BGpvaW7EAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQAAAAANDS1iQZsYXVuY2gAAAAAAACQDI0EbG9hZAAAAAAquqw2lQhtb3ZldGlsZQAAAIhXM+nymgluZnRpbWd1cmyyAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBuZnRpbWd1cmwKc3VtbWFyeTogJ0dldCBORlQgaW1hZ2UgVVJMIGZvciBhIGNhcmdvIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBpbWFnZSBVUkwgdGhlIGNvbnRyYWN0IGVtaXRzIGZvciBhIGdpdmVuIGNhcmdvIGl0ZW0sIG9wdGlvbmFsbHkgc2NvcGVkIHRvIGEgbG9jYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZmV0Y2ggdGhlIGNhbm9uaWNhbCBhcnR3b3JrIGZvciBhbiBpdGVtIG9yIHBhY2tlZCBlbnRpdHkuAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAABl1yCFTKwKcGxhY2VjYXJnb8kELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlY2FyZ28Kc3VtbWFyeTogJ1Jlc3RvcmUgTkZUIGNhcmdvIG9udG8gYSBob3N0IGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc3RvcmVzIHRoZSBjYXJnbyByZWNvcmRlZCBpbiBhbiB1bndyYXBwZWQgTkZUIG9udG8gYSBob3N0IGVudGl0eS4gVmFsaWRhdGVzIGhvc3Qgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcmVtYWluaW5nIGNhcGFjaXR5LCBkZXNlcmlhbGl6ZXMgdGhlIE5GVCdzIGl0ZW0gZGF0YSwgYW5kIGFwcGVuZHMgYW4gdW53cmFwIHRhc2sgdG8gZGVsaXZlciB0aGUgY2FyZ28gdG8gdGhlIGhvc3QuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAHx2eSqFTKwLcGxhY2VlbnRpdHnABC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWVudGl0eQpzdW1tYXJ5OiAnTWF0ZXJpYWxpemUgYSBwYWNrZWQtZW50aXR5IE5GVCBhcyBhIGxpdmUgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gRW1wbGFjZXMgYSBsaXZlIG9yYml0YWwgdmVzc2VsIChzaGlwIG9yIGNvbnRhaW5lcikgZnJvbSBpdHMgcGFja2VkLWVudGl0eSBORlQgZGF0YSBhdCB0aGUgcmVjb3JkZWQgd3JhcCBvcmlnaW4sIHRoZW4gcXVldWVzIHRyYXZlbCBhbmQgcmVjaGFyZ2UgdGFza3MgdG8gZGVsaXZlciBpdCB0byB0aGUgdGFyZ2V0IG5leHVzIGF0IGZ1bGwgZW5lcmd5LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS7gs8tTNXyXugxyZWZyc2hlbnRpdHm4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWZyc2hlbnRpdHkKc3VtbWFyeTogJ1JlZnJlc2ggZGVyaXZlZCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlY29tcHV0ZSBkZXJpdmVkIGZpZWxkcyBvbiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBjYXJnbyBhbmQgbW9kdWxlcywgcmVmcmVzaGluZyBjYXBhYmlsaXR5IHN0YXRzIGFuZCBjYXJnbyBtYXNzLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVXNlZCB0byByZWNvbmNpbGUgZGVyaXZlZCBzdGF0ZSBhZnRlciBkYXRhIG1pZ3JhdGlvbnMgb3IgY29udHJhY3QgdXBncmFkZXMuoCIyl6pNpboMcmVtb3Zlb3JhY2xlAAAAAAAoaaa6BnJlbmFtZQAAAABA7UixugdyZXNvbHZl0AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVzb2x2ZQpzdW1tYXJ5OiAnQ29tcGxldGUgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXNvbHZlIGNvbXBsZXRlZCB0YXNrcyBpbiBhbiBlbnRpdHkncyBzY2hlZHVsZSwgYXBwbHlpbmcgdGhlaXIgZWZmZWN0cyAocmVjaGFyZ2UgZW5lcmd5LCB1cGRhdGUgbG9jYXRpb24sIGxvYWQvdW5sb2FkIGNhcmdvKS4gSWYgY291bnQgaXMgc3BlY2lmaWVkLCByZXNvbHZlIGV4YWN0bHkgdGhhdCBtYW55IHRhc2tzOyBvdGhlcndpc2UgcmVzb2x2ZSBhbGwgY29tcGxldGVkIHRhc2tzLiBGYWlscyBpZiBjb3VudCBleGNlZWRzIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRhc2tzLgBAjEbtSLG6CnJlc29sdmVhbGwAAAAAAESjtroGcmV2ZWFsAAAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADA6VKKssIJc2V0Y29vcmRzAAAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS6QIm1Y3ZazwgxzZXR0aHJlc2hvbGQAADKmqJrLs8ILc2V0d3JhcGNvc3QAAIBSq5rLs8IKc2V0d3JhcGZlZQAAAKDsGsRpxglzdG93Y2FyZ2/VBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93Y2FyZ28Kc3VtbWFyeTogJ1Jlc2VydmUgYSBjYXJnbyBzdGFjayBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhbmQgY29uc3VtZXMgYSBjYXJnbyBzdGFjayBvbiBhIGxpdmUgZW50aXR5IGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVC4gVmFsaWRhdGVzIGVudGl0eSBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCBwcmVzZW5jZSBhdCB0aGUgbmV4dXMsIGFuZCBjb25maXJtcyB0aGUgdGFyZ2V0IGNhcmdvIHN0YWNrIGlzIGF2YWlsYWJsZSBhbmQgbm90IHJlc2VydmVkIGJ5IGEgcGVuZGluZyB0YXNrLiBDb21wdXRlcyB0aGUgd3JhcCBjb3N0IGFuZCBmZWUsIGRlYml0cyB0aGVtIGZyb20gdGhlIG93bmVyJ3MgcGxhdGZvcm0gZGVwb3NpdCBiYWxhbmNlLCBkZXJpdmVzIHRoZSBORlQncyBpbW11dGFibGUgZGF0YSwgYW5kIG1pbnRzIHRoZSBORlQgaW5saW5lIGFzIHRoZSBnYW1lIGNvbnRyYWN0IGJlZm9yZSBjb25zdW1pbmcgdGhlIGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAIDPLk/FacYKc3Rvd2VudGl0eZkFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3dlbnRpdHkKc3VtbWFyeTogJ1Jlc2VydmUgYW4gZW50aXR5IGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGEgd2hvbGUgZW50aXR5IChzaGlwLCBjb250YWluZXIsIG9yIHBsYW5ldGFyeSBzdHJ1Y3R1cmUpIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVC4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnbyBhbmQgbm8gc2NoZWR1bGVkIHRhc2tzLiBDb21wdXRlcyB0aGUgd3JhcCBjb3N0IGFuZCBmZWUsIGRlYml0cyB0aGVtIGZyb20gdGhlIG93bmVyJ3MgcGxhdGZvcm0gZGVwb3NpdCBiYWxhbmNlLCBkZXJpdmVzIHRoZSBlbnRpdHkgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIG1pbnRzIHRoZSBORlQgaW5saW5lIGFzIHRoZSBnYW1lIGNvbnRyYWN0LCBhbmQgZXJhc2VzIHRoZSBlbnRpdHkgZnJvbSB0aGUgd29ybGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgIo6UVkNxwpzd2FwbW9kdWxlAAAAACq6XA3HCHN3YXB0aWxlAAAAACA7PM3NB3RyYW5zaXQAAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRIAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AACwCvvs8lQDaTY0AAAOZW50aXR5X3NlcV9yb3cAAAAAgIZoVQNpNjQAAAllcG9jaF9yb3cAAGBuTYrymgNpNjQAAA1uZnRjb25maWdfcm93AABgC6mIzKUDaTY0AAARb3JhY2xlX2NvbmZpZ19yb3cAAAAAq4jMpQNpNjQAAApvcmFjbGVfcm93AAAAAFzlTawDaTY0AAAKcGxheWVyX3JvdwAAAEDtq7C6A2k2NAAAC3Jlc2VydmVfcm93AAAAAESjtroDaTY0AAAKcmV2ZWFsX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAAArKrPA2k2NAAACXR5cGVzX3JvdwAAc2tSVM3lA2k2NAAADndyYXBjb25maWdfcm93AAAAGVNUzeUDaTY0AAAMd3JhcGNvc3Rfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAAD8AAMg01hSdPgx0YXNrX3Jlc3VsdHMAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAyDRW6UxEDHRhc2tfcmVzdWx0cwAAAACAvMxFDHRhc2tfcmVzdWx0cwAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQATFYyTQezYhBraW5kX21ldGFfcmVzdWx0ACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAsKo+JyqzYgtlbnVtX3Jlc3VsdAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AgMLm5DWzYghzdHJpbmdbXQAAXdPlNbNiDm5mdGluZm9fcmVzdWx0AAC4yptYs2ILcGxheWVyX2luZm+gssn40VuzYg9wcm9qZWN0ZWRfc3RhdGUAAFDVIXWzYg5yZWNpcGVzX3Jlc3VsdAAAVtUhdbNiDnJlY2lwZXNfcmVzdWx0AADOBmF1s2ILZW51bV9yZXN1bHQAsNpXYXWzYhNzdHJhdHVtX3JlbWFpbmluZ1tdgBW6mmJ1s2IQcmVzb3VyY2VzX3Jlc3VsdAAAADjTiLNiFWVudGl0eV9sYXlvdXRzX3Jlc3VsdACA1NncjLNiDHN0cmF0dW1fZGF0YYCVu0ZKjbNiEGVudGl0eV9zdW1tYXJ5W10AVKRNXsqzYg13b3JtaG9sZV9pbmZvkB2e5uaq6WUMdGFza19yZXN1bHRzAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAAA0NLWJDHRhc2tfcmVzdWx0cwAAAAAAkAyNDHRhc2tfcmVzdWx0cwAAACq6rDaVDHRhc2tfcmVzdWx0cwAAiFcz6fKaBnN0cmluZwAAZdcghUysDHRhc2tfcmVzdWx0cwB8dnkqhUysDHRhc2tfcmVzdWx0cwAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwBAjEbtSLG6EnJlc29sdmVhbGxfcmVzdWx0cwAAoOwaxGnGDHRhc2tfcmVzdWx0cwCAzy5PxWnGDHRhc2tfcmVzdWx0cwAAACq6XA3HDHRhc2tfcmVzdWx0cwAAACA7PM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAJ7GqtLUDHRhc2tfcmVzdWx0cwAAAAAkQ+PUDHRhc2tfcmVzdWx0cwAAAEAlc1nVDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cw==');
451
+ const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjWAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1pZ3JhdGV0YXNrcwABBWJhdGNoBnVpbnQzMgdtaWdzd2FwAAEFYmF0Y2gGdWludDMyDG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdDHJlZnJzaGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMcmVtb3Zlb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUGcmVuYW1lAAICaWQGdWludDY0BG5hbWUGc3RyaW5nC3Jlc2VydmVfcm93AAUCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUHcmVzb2x2ZQACAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAZ1aW50MzIUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8KcmVzb2x2ZWFsbAABBW93bmVyBG5hbWUScmVzb2x2ZWFsbF9yZXN1bHRzAAIHc2Nhbm5lZAZ1aW50MzIIcmVzb2x2ZWQGdWludDMyDXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdBnJldmVhbAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZyZXZlYWwLY2hlY2tzdW0yNTYKcmV2ZWFsX3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGcmV2ZWFsC2NoZWNrc3VtMjU2CHJtbW9kdWxlAAMJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgKdGFyZ2V0X3JlZgpjYXJnb19yZWY/CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYOcm91dGVfd2F5cG9pbnQAAgF4BWludDY0AXkFaW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nC3NlcnZpY2Vfcm93AAIGZW50aXR5BnVpbnQ2NAdzb2NrZXRzEHNlcnZpY2Vfc29ja2V0W10Oc2VydmljZV9zb2NrZXQAAQRvcGVuBGJvb2wIc2V0Y2l2aWMAAQdhY2NvdW50BG5hbWUJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawAKBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/CnRhc2tfZXZlbnQACgpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgGdWludDMyBHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQzMj8IbGFuZV9rZXkFdWludDgMdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdEXRlbXBsYXRlX21ldGFfcm93AAMHaXRlbV9pZAZ1aW50MTYEa2luZARuYW1lDWRpc3BsYXlfbGFiZWwGc3RyaW5nB3RyYW5zaXQABQJpZAZ1aW50NjQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQGdHJhdmVsAAQCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCnRyYXZlbHBsYW4AAwhlbnRpdGllcwxlbnRpdHlfcmVmW10Jd2F5cG9pbnRzEHJvdXRlX3dheXBvaW50W10IcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NG8AAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAAA49EWFpkEJY2FuY2Vsam9iAAAAAIc+6UxECGNsYWltam9iAAAAyDRW6UxECWNsYWltcGxvdABwVb4mY+lMRAxjbGFpbXN0YXJ0ZXIAAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAgCE2WWVzmZMMbWlncmF0ZXRhc2tzAAAAAKAajpmTB21pZ3N3YXAAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAAAAAABEo7a6BnJldmVhbAAAAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAMhth7LCCHNldGNpdmljAAAAwOlSirLCCXNldGNvb3JkcwAAAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADICiKKs8IJc2V0c29ja2V0AJAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAAEDFnHXDB3NodXR0bGUAAACg7BrEacYJc3Rvd2Nhcmdv1QUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2NhcmdvCnN1bW1hcnk6ICdSZXNlcnZlIGEgY2FyZ28gc3RhY2sgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYW5kIGNvbnN1bWVzIGEgY2FyZ28gc3RhY2sgb24gYSBsaXZlIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFZhbGlkYXRlcyBlbnRpdHkgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcHJlc2VuY2UgYXQgdGhlIG5leHVzLCBhbmQgY29uZmlybXMgdGhlIHRhcmdldCBjYXJnbyBzdGFjayBpcyBhdmFpbGFibGUgYW5kIG5vdCByZXNlcnZlZCBieSBhIHBlbmRpbmcgdGFzay4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIGFuZCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCBiZWZvcmUgY29uc3VtaW5nIHRoZSBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAzy5PxWnGCnN0b3dlbnRpdHmZBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93ZW50aXR5CnN1bW1hcnk6ICdSZXNlcnZlIGFuIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhIHdob2xlIGVudGl0eSAoc2hpcCwgY29udGFpbmVyLCBvciBwbGFuZXRhcnkgc3RydWN0dXJlKSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28gYW5kIG5vIHNjaGVkdWxlZCB0YXNrcy4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgZW50aXR5IE5GVCdzIGltbXV0YWJsZSBkYXRhLCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCwgYW5kIGVyYXNlcyB0aGUgZW50aXR5IGZyb20gdGhlIHdvcmxkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAICKOlFZDccKc3dhcG1vZHVsZQAAAAAqulwNxwhzd2FwdGlsZQAAAAAgOzzNzQd0cmFuc2l0AAAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AwDSxRrXNzQp0cmF2ZWxwbGFuAAAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRYAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAmFuTIuS2QwNpNjQAAA9jaXZpY2NvbmZpZ19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AABzEvjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABFAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
452
452
  const abi = antelope.ABI.from(abiBlob);
453
453
  exports.ServerTypes = void 0;
454
454
  (function (Types) {
@@ -569,6 +569,24 @@ exports.ServerTypes = void 0;
569
569
  antelope.Struct.type('blend')
570
570
  ], blend);
571
571
  Types.blend = blend;
572
+ let builder_lane = class builder_lane extends antelope.Struct {
573
+ };
574
+ tslib.__decorate([
575
+ antelope.Struct.field(antelope.UInt8)
576
+ ], builder_lane.prototype, "slot_index", void 0);
577
+ tslib.__decorate([
578
+ antelope.Struct.field(antelope.UInt16)
579
+ ], builder_lane.prototype, "speed", void 0);
580
+ tslib.__decorate([
581
+ antelope.Struct.field(antelope.UInt32)
582
+ ], builder_lane.prototype, "drain", void 0);
583
+ tslib.__decorate([
584
+ antelope.Struct.field(antelope.UInt16)
585
+ ], builder_lane.prototype, "output_pct", void 0);
586
+ builder_lane = tslib.__decorate([
587
+ antelope.Struct.type('builder_lane')
588
+ ], builder_lane);
589
+ Types.builder_lane = builder_lane;
572
590
  let buildplot = class buildplot extends antelope.Struct {
573
591
  };
574
592
  tslib.__decorate([
@@ -632,6 +650,18 @@ exports.ServerTypes = void 0;
632
650
  antelope.Struct.type('cancel_results')
633
651
  ], cancel_results);
634
652
  Types.cancel_results = cancel_results;
653
+ let canceljob = class canceljob extends antelope.Struct {
654
+ };
655
+ tslib.__decorate([
656
+ antelope.Struct.field(antelope.UInt64)
657
+ ], canceljob.prototype, "job_id", void 0);
658
+ tslib.__decorate([
659
+ antelope.Struct.field(antelope.UInt64)
660
+ ], canceljob.prototype, "ship_id", void 0);
661
+ canceljob = tslib.__decorate([
662
+ antelope.Struct.type('canceljob')
663
+ ], canceljob);
664
+ Types.canceljob = canceljob;
635
665
  let cargo_row = class cargo_row extends antelope.Struct {
636
666
  };
637
667
  tslib.__decorate([
@@ -683,6 +713,15 @@ exports.ServerTypes = void 0;
683
713
  antelope.Struct.type('cargo_view')
684
714
  ], cargo_view);
685
715
  Types.cargo_view = cargo_view;
716
+ let civicconfig_row = class civicconfig_row extends antelope.Struct {
717
+ };
718
+ tslib.__decorate([
719
+ antelope.Struct.field(antelope.Name)
720
+ ], civicconfig_row.prototype, "civic_owner", void 0);
721
+ civicconfig_row = tslib.__decorate([
722
+ antelope.Struct.type('civicconfig_row')
723
+ ], civicconfig_row);
724
+ Types.civicconfig_row = civicconfig_row;
686
725
  let claim_row = class claim_row extends antelope.Struct {
687
726
  };
688
727
  tslib.__decorate([
@@ -692,6 +731,18 @@ exports.ServerTypes = void 0;
692
731
  antelope.Struct.type('claim_row')
693
732
  ], claim_row);
694
733
  Types.claim_row = claim_row;
734
+ let claimjob = class claimjob extends antelope.Struct {
735
+ };
736
+ tslib.__decorate([
737
+ antelope.Struct.field(antelope.UInt64)
738
+ ], claimjob.prototype, "job_id", void 0);
739
+ tslib.__decorate([
740
+ antelope.Struct.field(antelope.UInt64)
741
+ ], claimjob.prototype, "ship_id", void 0);
742
+ claimjob = tslib.__decorate([
743
+ antelope.Struct.type('claimjob')
744
+ ], claimjob);
745
+ Types.claimjob = claimjob;
695
746
  let cluster_slot = class cluster_slot extends antelope.Struct {
696
747
  };
697
748
  tslib.__decorate([
@@ -890,6 +941,21 @@ exports.ServerTypes = void 0;
890
941
  antelope.Struct.type('coordinates')
891
942
  ], coordinates);
892
943
  Types.coordinates = coordinates;
944
+ let coupling = class coupling extends antelope.Struct {
945
+ };
946
+ tslib.__decorate([
947
+ antelope.Struct.field(entity_ref)
948
+ ], coupling.prototype, "counterpart", void 0);
949
+ tslib.__decorate([
950
+ antelope.Struct.field(antelope.UInt64)
951
+ ], coupling.prototype, "hold", void 0);
952
+ tslib.__decorate([
953
+ antelope.Struct.field(antelope.UInt8)
954
+ ], coupling.prototype, "kind", void 0);
955
+ coupling = tslib.__decorate([
956
+ antelope.Struct.type('coupling')
957
+ ], coupling);
958
+ Types.coupling = coupling;
893
959
  let craft = class craft extends antelope.Struct {
894
960
  };
895
961
  tslib.__decorate([
@@ -932,6 +998,39 @@ exports.ServerTypes = void 0;
932
998
  antelope.Struct.type('crafter_lane')
933
999
  ], crafter_lane);
934
1000
  Types.crafter_lane = crafter_lane;
1001
+ let craftjob = class craftjob extends antelope.Struct {
1002
+ };
1003
+ tslib.__decorate([
1004
+ antelope.Struct.field(antelope.UInt64)
1005
+ ], craftjob.prototype, "ship_id", void 0);
1006
+ tslib.__decorate([
1007
+ antelope.Struct.field(antelope.UInt64)
1008
+ ], craftjob.prototype, "workshop_id", void 0);
1009
+ tslib.__decorate([
1010
+ antelope.Struct.field(antelope.UInt8)
1011
+ ], craftjob.prototype, "slot", void 0);
1012
+ tslib.__decorate([
1013
+ antelope.Struct.field(antelope.UInt16)
1014
+ ], craftjob.prototype, "recipe_id", void 0);
1015
+ tslib.__decorate([
1016
+ antelope.Struct.field(antelope.UInt32)
1017
+ ], craftjob.prototype, "quantity", void 0);
1018
+ tslib.__decorate([
1019
+ antelope.Struct.field(cargo_item, { array: true })
1020
+ ], craftjob.prototype, "inputs", void 0);
1021
+ craftjob = tslib.__decorate([
1022
+ antelope.Struct.type('craftjob')
1023
+ ], craftjob);
1024
+ Types.craftjob = craftjob;
1025
+ let delentity = class delentity extends antelope.Struct {
1026
+ };
1027
+ tslib.__decorate([
1028
+ antelope.Struct.field(antelope.UInt64)
1029
+ ], delentity.prototype, "entity_id", void 0);
1030
+ delentity = tslib.__decorate([
1031
+ antelope.Struct.type('delentity')
1032
+ ], delentity);
1033
+ Types.delentity = delentity;
935
1034
  let demolish = class demolish extends antelope.Struct {
936
1035
  };
937
1036
  tslib.__decorate([
@@ -1129,18 +1228,18 @@ exports.ServerTypes = void 0;
1129
1228
  tslib.__decorate([
1130
1229
  antelope.Struct.field(cargo_item, { array: true })
1131
1230
  ], task.prototype, "cargo", void 0);
1231
+ tslib.__decorate([
1232
+ antelope.Struct.field(coupling, { array: true })
1233
+ ], task.prototype, "couplings", void 0);
1132
1234
  tslib.__decorate([
1133
1235
  antelope.Struct.field(entity_ref, { optional: true })
1134
- ], task.prototype, "entitytarget", void 0);
1236
+ ], task.prototype, "subject", void 0);
1135
1237
  tslib.__decorate([
1136
1238
  antelope.Struct.field(antelope.UInt64, { optional: true })
1137
1239
  ], task.prototype, "entitygroup", void 0);
1138
1240
  tslib.__decorate([
1139
1241
  antelope.Struct.field(antelope.UInt32, { optional: true })
1140
1242
  ], task.prototype, "energy_cost", void 0);
1141
- tslib.__decorate([
1142
- antelope.Struct.field(antelope.UInt64, { optional: true })
1143
- ], task.prototype, "hold", void 0);
1144
1243
  tslib.__decorate([
1145
1244
  antelope.Struct.field(antelope.UInt16, { optional: true })
1146
1245
  ], task.prototype, "target_item_id", void 0);
@@ -1249,6 +1348,9 @@ exports.ServerTypes = void 0;
1249
1348
  tslib.__decorate([
1250
1349
  antelope.Struct.field(crafter_lane, { array: true })
1251
1350
  ], entity_info.prototype, "crafter_lanes", void 0);
1351
+ tslib.__decorate([
1352
+ antelope.Struct.field(builder_lane, { array: true })
1353
+ ], entity_info.prototype, "builder_lanes", void 0);
1252
1354
  tslib.__decorate([
1253
1355
  antelope.Struct.field(loader_lane, { array: true })
1254
1356
  ], entity_info.prototype, "loader_lanes", void 0);
@@ -1288,6 +1390,9 @@ exports.ServerTypes = void 0;
1288
1390
  tslib.__decorate([
1289
1391
  antelope.Struct.field(slot_def, { array: true })
1290
1392
  ], entity_layout.prototype, "slots", void 0);
1393
+ tslib.__decorate([
1394
+ antelope.Struct.field(antelope.UInt32)
1395
+ ], entity_layout.prototype, "base_hullmass", void 0);
1291
1396
  entity_layout = tslib.__decorate([
1292
1397
  antelope.Struct.type('entity_layout')
1293
1398
  ], entity_layout);
@@ -1391,7 +1496,7 @@ exports.ServerTypes = void 0;
1391
1496
  antelope.Struct.field(antelope.Name)
1392
1497
  ], entity_task_info.prototype, "entity_type", void 0);
1393
1498
  tslib.__decorate([
1394
- antelope.Struct.field(antelope.UInt8)
1499
+ antelope.Struct.field(antelope.UInt32)
1395
1500
  ], entity_task_info.prototype, "task_count", void 0);
1396
1501
  tslib.__decorate([
1397
1502
  antelope.Struct.field(antelope.TimePoint)
@@ -1511,6 +1616,30 @@ exports.ServerTypes = void 0;
1511
1616
  antelope.Struct.type('gather')
1512
1617
  ], gather);
1513
1618
  Types.gather = gather;
1619
+ let gatherplan = class gatherplan extends antelope.Struct {
1620
+ };
1621
+ tslib.__decorate([
1622
+ antelope.Struct.field(antelope.UInt64)
1623
+ ], gatherplan.prototype, "source_id", void 0);
1624
+ tslib.__decorate([
1625
+ antelope.Struct.field(antelope.UInt64)
1626
+ ], gatherplan.prototype, "destination_id", void 0);
1627
+ tslib.__decorate([
1628
+ antelope.Struct.field(antelope.UInt16)
1629
+ ], gatherplan.prototype, "stratum", void 0);
1630
+ tslib.__decorate([
1631
+ antelope.Struct.field(antelope.UInt32)
1632
+ ], gatherplan.prototype, "quantity", void 0);
1633
+ tslib.__decorate([
1634
+ antelope.Struct.field('bool')
1635
+ ], gatherplan.prototype, "recharge", void 0);
1636
+ tslib.__decorate([
1637
+ antelope.Struct.field(antelope.Bytes)
1638
+ ], gatherplan.prototype, "slots", void 0);
1639
+ gatherplan = tslib.__decorate([
1640
+ antelope.Struct.type('gatherplan')
1641
+ ], gatherplan);
1642
+ Types.gatherplan = gatherplan;
1514
1643
  let genesisfleet = class genesisfleet extends antelope.Struct {
1515
1644
  };
1516
1645
  tslib.__decorate([
@@ -1646,6 +1775,15 @@ exports.ServerTypes = void 0;
1646
1775
  antelope.Struct.type('getitemtypes')
1647
1776
  ], getitemtypes);
1648
1777
  Types.getitemtypes = getitemtypes;
1778
+ let getjobs = class getjobs extends antelope.Struct {
1779
+ };
1780
+ tslib.__decorate([
1781
+ antelope.Struct.field(antelope.UInt64)
1782
+ ], getjobs.prototype, "workshop_id", void 0);
1783
+ getjobs = tslib.__decorate([
1784
+ antelope.Struct.type('getjobs')
1785
+ ], getjobs);
1786
+ Types.getjobs = getjobs;
1649
1787
  let getkindmeta = class getkindmeta extends antelope.Struct {
1650
1788
  };
1651
1789
  getkindmeta = tslib.__decorate([
@@ -1778,6 +1916,15 @@ exports.ServerTypes = void 0;
1778
1916
  antelope.Struct.type('getresources')
1779
1917
  ], getresources);
1780
1918
  Types.getresources = getresources;
1919
+ let getservice = class getservice extends antelope.Struct {
1920
+ };
1921
+ tslib.__decorate([
1922
+ antelope.Struct.field(antelope.UInt64)
1923
+ ], getservice.prototype, "workshop_id", void 0);
1924
+ getservice = tslib.__decorate([
1925
+ antelope.Struct.type('getservice')
1926
+ ], getservice);
1927
+ Types.getservice = getservice;
1781
1928
  let getslots = class getslots extends antelope.Struct {
1782
1929
  };
1783
1930
  getslots = tslib.__decorate([
@@ -1889,6 +2036,24 @@ exports.ServerTypes = void 0;
1889
2036
  antelope.Struct.type('importcargo')
1890
2037
  ], importcargo);
1891
2038
  Types.importcargo = importcargo;
2039
+ let importcell = class importcell extends antelope.Struct {
2040
+ };
2041
+ tslib.__decorate([
2042
+ antelope.Struct.field(antelope.UInt64)
2043
+ ], importcell.prototype, "root", void 0);
2044
+ tslib.__decorate([
2045
+ antelope.Struct.field(antelope.Int8)
2046
+ ], importcell.prototype, "gx", void 0);
2047
+ tslib.__decorate([
2048
+ antelope.Struct.field(antelope.Int8)
2049
+ ], importcell.prototype, "gy", void 0);
2050
+ tslib.__decorate([
2051
+ antelope.Struct.field(antelope.UInt64)
2052
+ ], importcell.prototype, "entity_id", void 0);
2053
+ importcell = tslib.__decorate([
2054
+ antelope.Struct.type('importcell')
2055
+ ], importcell);
2056
+ Types.importcell = importcell;
1892
2057
  let importentity = class importentity extends antelope.Struct {
1893
2058
  };
1894
2059
  tslib.__decorate([
@@ -2099,6 +2264,72 @@ exports.ServerTypes = void 0;
2099
2264
  antelope.Struct.type('items_info')
2100
2265
  ], items_info);
2101
2266
  Types.items_info = items_info;
2267
+ let job_receipt = class job_receipt extends antelope.Struct {
2268
+ };
2269
+ tslib.__decorate([
2270
+ antelope.Struct.field(antelope.UInt64)
2271
+ ], job_receipt.prototype, "job_id", void 0);
2272
+ tslib.__decorate([
2273
+ antelope.Struct.field(antelope.TimePoint)
2274
+ ], job_receipt.prototype, "starts_at", void 0);
2275
+ tslib.__decorate([
2276
+ antelope.Struct.field(antelope.TimePoint)
2277
+ ], job_receipt.prototype, "completes_at", void 0);
2278
+ job_receipt = tslib.__decorate([
2279
+ antelope.Struct.type('job_receipt')
2280
+ ], job_receipt);
2281
+ Types.job_receipt = job_receipt;
2282
+ let job_row = class job_row extends antelope.Struct {
2283
+ };
2284
+ tslib.__decorate([
2285
+ antelope.Struct.field(antelope.UInt64)
2286
+ ], job_row.prototype, "id", void 0);
2287
+ tslib.__decorate([
2288
+ antelope.Struct.field(antelope.UInt64)
2289
+ ], job_row.prototype, "workshop", void 0);
2290
+ tslib.__decorate([
2291
+ antelope.Struct.field(antelope.UInt8)
2292
+ ], job_row.prototype, "socket", void 0);
2293
+ tslib.__decorate([
2294
+ antelope.Struct.field(antelope.Name)
2295
+ ], job_row.prototype, "owner", void 0);
2296
+ tslib.__decorate([
2297
+ antelope.Struct.field(antelope.UInt64)
2298
+ ], job_row.prototype, "ship_id", void 0);
2299
+ tslib.__decorate([
2300
+ antelope.Struct.field(coordinates)
2301
+ ], job_row.prototype, "coords", void 0);
2302
+ tslib.__decorate([
2303
+ antelope.Struct.field(antelope.TimePoint)
2304
+ ], job_row.prototype, "starts_at", void 0);
2305
+ tslib.__decorate([
2306
+ antelope.Struct.field(antelope.TimePoint)
2307
+ ], job_row.prototype, "completes_at", void 0);
2308
+ tslib.__decorate([
2309
+ antelope.Struct.field(antelope.UInt16)
2310
+ ], job_row.prototype, "recipe_id", void 0);
2311
+ tslib.__decorate([
2312
+ antelope.Struct.field(antelope.UInt32)
2313
+ ], job_row.prototype, "quantity", void 0);
2314
+ tslib.__decorate([
2315
+ antelope.Struct.field(antelope.UInt32)
2316
+ ], job_row.prototype, "energy_paid", void 0);
2317
+ tslib.__decorate([
2318
+ antelope.Struct.field(cargo_item, { array: true })
2319
+ ], job_row.prototype, "cargo", void 0);
2320
+ job_row = tslib.__decorate([
2321
+ antelope.Struct.type('job_row')
2322
+ ], job_row);
2323
+ Types.job_row = job_row;
2324
+ let jobs_result = class jobs_result extends antelope.Struct {
2325
+ };
2326
+ tslib.__decorate([
2327
+ antelope.Struct.field(job_row, { array: true })
2328
+ ], jobs_result.prototype, "jobs", void 0);
2329
+ jobs_result = tslib.__decorate([
2330
+ antelope.Struct.type('jobs_result')
2331
+ ], jobs_result);
2332
+ Types.jobs_result = jobs_result;
2102
2333
  let join = class join extends antelope.Struct {
2103
2334
  };
2104
2335
  tslib.__decorate([
@@ -2234,6 +2465,24 @@ exports.ServerTypes = void 0;
2234
2465
  antelope.Struct.type('location_info')
2235
2466
  ], location_info);
2236
2467
  Types.location_info = location_info;
2468
+ let migratetasks = class migratetasks extends antelope.Struct {
2469
+ };
2470
+ tslib.__decorate([
2471
+ antelope.Struct.field(antelope.UInt32)
2472
+ ], migratetasks.prototype, "batch", void 0);
2473
+ migratetasks = tslib.__decorate([
2474
+ antelope.Struct.type('migratetasks')
2475
+ ], migratetasks);
2476
+ Types.migratetasks = migratetasks;
2477
+ let migswap = class migswap extends antelope.Struct {
2478
+ };
2479
+ tslib.__decorate([
2480
+ antelope.Struct.field(antelope.UInt32)
2481
+ ], migswap.prototype, "batch", void 0);
2482
+ migswap = tslib.__decorate([
2483
+ antelope.Struct.type('migswap')
2484
+ ], migswap);
2485
+ Types.migswap = migswap;
2237
2486
  let module_info = class module_info extends antelope.Struct {
2238
2487
  };
2239
2488
  tslib.__decorate([
@@ -2587,6 +2836,9 @@ exports.ServerTypes = void 0;
2587
2836
  tslib.__decorate([
2588
2837
  antelope.Struct.field(crafter_lane, { array: true })
2589
2838
  ], projected_state.prototype, "crafter_lanes", void 0);
2839
+ tslib.__decorate([
2840
+ antelope.Struct.field(builder_lane, { array: true })
2841
+ ], projected_state.prototype, "builder_lanes", void 0);
2590
2842
  tslib.__decorate([
2591
2843
  antelope.Struct.field(loader_lane, { array: true })
2592
2844
  ], projected_state.prototype, "loader_lanes", void 0);
@@ -2795,6 +3047,48 @@ exports.ServerTypes = void 0;
2795
3047
  antelope.Struct.type('rmnftcfg')
2796
3048
  ], rmnftcfg);
2797
3049
  Types.rmnftcfg = rmnftcfg;
3050
+ let route_waypoint = class route_waypoint extends antelope.Struct {
3051
+ };
3052
+ tslib.__decorate([
3053
+ antelope.Struct.field(antelope.Int64)
3054
+ ], route_waypoint.prototype, "x", void 0);
3055
+ tslib.__decorate([
3056
+ antelope.Struct.field(antelope.Int64)
3057
+ ], route_waypoint.prototype, "y", void 0);
3058
+ route_waypoint = tslib.__decorate([
3059
+ antelope.Struct.type('route_waypoint')
3060
+ ], route_waypoint);
3061
+ Types.route_waypoint = route_waypoint;
3062
+ let service_socket = class service_socket extends antelope.Struct {
3063
+ };
3064
+ tslib.__decorate([
3065
+ antelope.Struct.field('bool')
3066
+ ], service_socket.prototype, "open", void 0);
3067
+ service_socket = tslib.__decorate([
3068
+ antelope.Struct.type('service_socket')
3069
+ ], service_socket);
3070
+ Types.service_socket = service_socket;
3071
+ let service_row = class service_row extends antelope.Struct {
3072
+ };
3073
+ tslib.__decorate([
3074
+ antelope.Struct.field(antelope.UInt64)
3075
+ ], service_row.prototype, "entity", void 0);
3076
+ tslib.__decorate([
3077
+ antelope.Struct.field(service_socket, { array: true })
3078
+ ], service_row.prototype, "sockets", void 0);
3079
+ service_row = tslib.__decorate([
3080
+ antelope.Struct.type('service_row')
3081
+ ], service_row);
3082
+ Types.service_row = service_row;
3083
+ let setcivic = class setcivic extends antelope.Struct {
3084
+ };
3085
+ tslib.__decorate([
3086
+ antelope.Struct.field(antelope.Name)
3087
+ ], setcivic.prototype, "account", void 0);
3088
+ setcivic = tslib.__decorate([
3089
+ antelope.Struct.type('setcivic')
3090
+ ], setcivic);
3091
+ Types.setcivic = setcivic;
2798
3092
  let setcoords = class setcoords extends antelope.Struct {
2799
3093
  };
2800
3094
  tslib.__decorate([
@@ -2825,6 +3119,21 @@ exports.ServerTypes = void 0;
2825
3119
  antelope.Struct.type('setnftcfg')
2826
3120
  ], setnftcfg);
2827
3121
  Types.setnftcfg = setnftcfg;
3122
+ let setsocket = class setsocket extends antelope.Struct {
3123
+ };
3124
+ tslib.__decorate([
3125
+ antelope.Struct.field(antelope.UInt64)
3126
+ ], setsocket.prototype, "workshop_id", void 0);
3127
+ tslib.__decorate([
3128
+ antelope.Struct.field(antelope.UInt8)
3129
+ ], setsocket.prototype, "slot", void 0);
3130
+ tslib.__decorate([
3131
+ antelope.Struct.field('bool')
3132
+ ], setsocket.prototype, "open", void 0);
3133
+ setsocket = tslib.__decorate([
3134
+ antelope.Struct.type('setsocket')
3135
+ ], setsocket);
3136
+ Types.setsocket = setsocket;
2828
3137
  let setthreshold = class setthreshold extends antelope.Struct {
2829
3138
  };
2830
3139
  tslib.__decorate([
@@ -2861,6 +3170,24 @@ exports.ServerTypes = void 0;
2861
3170
  antelope.Struct.type('setwrapfee')
2862
3171
  ], setwrapfee);
2863
3172
  Types.setwrapfee = setwrapfee;
3173
+ let shuttle = class shuttle extends antelope.Struct {
3174
+ };
3175
+ tslib.__decorate([
3176
+ antelope.Struct.field(antelope.UInt64)
3177
+ ], shuttle.prototype, "carrier", void 0);
3178
+ tslib.__decorate([
3179
+ antelope.Struct.field(antelope.UInt64)
3180
+ ], shuttle.prototype, "from_id", void 0);
3181
+ tslib.__decorate([
3182
+ antelope.Struct.field(antelope.UInt64)
3183
+ ], shuttle.prototype, "to_id", void 0);
3184
+ tslib.__decorate([
3185
+ antelope.Struct.field(cargo_item, { array: true })
3186
+ ], shuttle.prototype, "items", void 0);
3187
+ shuttle = tslib.__decorate([
3188
+ antelope.Struct.type('shuttle')
3189
+ ], shuttle);
3190
+ Types.shuttle = shuttle;
2864
3191
  let stowcargo = class stowcargo extends antelope.Struct {
2865
3192
  };
2866
3193
  tslib.__decorate([
@@ -3029,6 +3356,21 @@ exports.ServerTypes = void 0;
3029
3356
  antelope.Struct.type('travel')
3030
3357
  ], travel);
3031
3358
  Types.travel = travel;
3359
+ let travelplan = class travelplan extends antelope.Struct {
3360
+ };
3361
+ tslib.__decorate([
3362
+ antelope.Struct.field(entity_ref, { array: true })
3363
+ ], travelplan.prototype, "entities", void 0);
3364
+ tslib.__decorate([
3365
+ antelope.Struct.field(route_waypoint, { array: true })
3366
+ ], travelplan.prototype, "waypoints", void 0);
3367
+ tslib.__decorate([
3368
+ antelope.Struct.field('bool')
3369
+ ], travelplan.prototype, "recharge", void 0);
3370
+ travelplan = tslib.__decorate([
3371
+ antelope.Struct.type('travelplan')
3372
+ ], travelplan);
3373
+ Types.travelplan = travelplan;
3032
3374
  let types_row = class types_row extends antelope.Struct {
3033
3375
  };
3034
3376
  tslib.__decorate([
@@ -3164,19 +3506,23 @@ exports.ServerTypes = void 0;
3164
3506
  })(exports.ServerTypes || (exports.ServerTypes = {}));
3165
3507
  const TableMap = {
3166
3508
  cargo: exports.ServerTypes.cargo_row,
3509
+ civicconfig: exports.ServerTypes.civicconfig_row,
3167
3510
  claims: exports.ServerTypes.claim_row,
3168
3511
  cluster: exports.ServerTypes.cluster_row,
3169
3512
  commit: exports.ServerTypes.commit_row,
3170
3513
  entity: exports.ServerTypes.entity_row,
3514
+ 'entity.mig': exports.ServerTypes.entity_row,
3171
3515
  entitygroup: exports.ServerTypes.entitygroup_row,
3172
3516
  entityseq: exports.ServerTypes.entity_seq_row,
3173
3517
  epoch: exports.ServerTypes.epoch_row,
3518
+ jobs: exports.ServerTypes.job_row,
3174
3519
  nftconfig: exports.ServerTypes.nftconfig_row,
3175
3520
  oraclecfg: exports.ServerTypes.oracle_config_row,
3176
3521
  oracles: exports.ServerTypes.oracle_row,
3177
3522
  player: exports.ServerTypes.player_row,
3178
3523
  reserve: exports.ServerTypes.reserve_row,
3179
3524
  reveal: exports.ServerTypes.reveal_row,
3525
+ service: exports.ServerTypes.service_row,
3180
3526
  state: exports.ServerTypes.state_row,
3181
3527
  types: exports.ServerTypes.types_row,
3182
3528
  wrapconfig: exports.ServerTypes.wrapconfig_row,
@@ -3297,11 +3643,13 @@ const INSUFFICIENT_BALANCE = 'Insufficient balance.';
3297
3643
  const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
3298
3644
  const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
3299
3645
 
3300
- const PRECISION$1 = 10000;
3646
+ const PRECISION = 10000;
3301
3647
  const CRAFT_ENERGY_DIVISOR = 150000;
3302
3648
  const PLANETARY_STRUCTURE_Z = 0;
3303
3649
  const CONTAINER_Z = 300;
3304
3650
  const TRAVEL_MAX_DURATION = 86400;
3651
+ const BASE_HAUL_PENALTY_MILLI$1 = 300;
3652
+ const HAULER_EFFICIENCY_DENOM$1 = 10000;
3305
3653
  const MIN_ORBITAL_ALTITUDE = 800;
3306
3654
  const MAX_ORBITAL_ALTITUDE = 3000;
3307
3655
  const BASE_ORBITAL_MASS = 100000;
@@ -3317,15 +3665,15 @@ exports.TaskType = void 0;
3317
3665
  TaskType[TaskType["GATHER"] = 5] = "GATHER";
3318
3666
  TaskType[TaskType["WARP"] = 6] = "WARP";
3319
3667
  TaskType[TaskType["CRAFT"] = 7] = "CRAFT";
3320
- TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
3321
3668
  TaskType[TaskType["TRANSIT"] = 9] = "TRANSIT";
3322
3669
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
3323
3670
  TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
3671
+ TaskType[TaskType["LAUNCH"] = 12] = "LAUNCH";
3324
3672
  TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
3325
- TaskType[TaskType["CLAIMPLOT"] = 14] = "CLAIMPLOT";
3326
3673
  TaskType[TaskType["BUILDPLOT"] = 15] = "BUILDPLOT";
3327
3674
  TaskType[TaskType["CHARGE"] = 16] = "CHARGE";
3328
3675
  TaskType[TaskType["UPGRADE"] = 17] = "UPGRADE";
3676
+ TaskType[TaskType["SHUTTLE"] = 18] = "SHUTTLE";
3329
3677
  })(exports.TaskType || (exports.TaskType = {}));
3330
3678
  exports.HoldKind = void 0;
3331
3679
  (function (HoldKind) {
@@ -3333,6 +3681,7 @@ exports.HoldKind = void 0;
3333
3681
  HoldKind[HoldKind["PUSH"] = 2] = "PUSH";
3334
3682
  HoldKind[HoldKind["GATHER"] = 3] = "GATHER";
3335
3683
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3684
+ HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3336
3685
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3337
3686
  })(exports.HoldKind || (exports.HoldKind = {}));
3338
3687
  exports.LocationType = void 0;
@@ -3467,6 +3816,7 @@ const ITEM_HAULER_T1 = 10106;
3467
3816
  const ITEM_WARP_T1 = 10107;
3468
3817
  const ITEM_BATTERY_T1 = 10108;
3469
3818
  const ITEM_LAUNCHER_T1 = 10109;
3819
+ const ITEM_BUILDER_T1 = 10110;
3470
3820
  const ITEM_CONTAINER_T1_PACKED = 10200;
3471
3821
  const ITEM_SHIP_T1_PACKED = 10201;
3472
3822
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
@@ -3475,6 +3825,15 @@ const ITEM_FACTORY_T1_PACKED = 10204;
3475
3825
  const ITEM_MASS_DRIVER_T1_PACKED = 10205;
3476
3826
  const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3477
3827
  const ITEM_HUB_T1_PACKED = 10207;
3828
+ const ITEM_WORKSHOP_T1_PACKED = 10208;
3829
+ const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3830
+ const ITEM_PROSPECTOR_T1_PACKED = 10211;
3831
+ const ITEM_TENDER_T1_PACKED = 10212;
3832
+ const ITEM_WRIGHT_T1_PACKED = 10213;
3833
+ const ITEM_TUG_T1_PACKED = 10214;
3834
+ const ITEM_PORTER_T1_PACKED = 10215;
3835
+ const ITEM_WRANGLER_T1_PACKED = 10216;
3836
+ const ITEM_DREDGER_T1_PACKED = 10217;
3478
3837
  const ITEM_PLATE_T2 = 20001;
3479
3838
  const ITEM_FRAME_T2 = 20002;
3480
3839
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -4278,47 +4637,31 @@ var recipes = [
4278
4637
  ]
4279
4638
  },
4280
4639
  {
4281
- outputItemId: 10200,
4282
- outputMass: 1900000,
4640
+ outputItemId: 10110,
4641
+ outputMass: 960000,
4283
4642
  inputs: [
4284
4643
  {
4285
- itemId: 10001,
4286
- quantity: 600
4644
+ itemId: 10005,
4645
+ quantity: 300
4287
4646
  },
4288
4647
  {
4289
- itemId: 10008,
4290
- quantity: 600
4648
+ itemId: 10002,
4649
+ quantity: 300
4291
4650
  }
4292
4651
  ],
4293
4652
  statSlots: [
4294
- {
4295
- sources: [
4296
- {
4297
- inputIndex: 0,
4298
- statIndex: 0
4299
- }
4300
- ]
4301
- },
4302
- {
4303
- sources: [
4304
- {
4305
- inputIndex: 0,
4306
- statIndex: 1
4307
- }
4308
- ]
4309
- },
4310
4653
  {
4311
4654
  sources: [
4312
4655
  {
4313
4656
  inputIndex: 1,
4314
- statIndex: 0
4657
+ statIndex: 1
4315
4658
  }
4316
4659
  ]
4317
4660
  },
4318
4661
  {
4319
4662
  sources: [
4320
4663
  {
4321
- inputIndex: 1,
4664
+ inputIndex: 0,
4322
4665
  statIndex: 1
4323
4666
  }
4324
4667
  ]
@@ -4328,28 +4671,16 @@ var recipes = [
4328
4671
  ]
4329
4672
  },
4330
4673
  {
4331
- outputItemId: 10201,
4332
- outputMass: 2400000,
4674
+ outputItemId: 10200,
4675
+ outputMass: 1900000,
4333
4676
  inputs: [
4334
4677
  {
4335
4678
  itemId: 10001,
4336
- quantity: 300
4679
+ quantity: 600
4337
4680
  },
4338
4681
  {
4339
4682
  itemId: 10008,
4340
- quantity: 300
4341
- },
4342
- {
4343
- itemId: 10007,
4344
- quantity: 300
4345
- },
4346
- {
4347
- itemId: 10003,
4348
- quantity: 300
4349
- },
4350
- {
4351
- itemId: 10006,
4352
- quantity: 300
4683
+ quantity: 600
4353
4684
  }
4354
4685
  ],
4355
4686
  statSlots: [
@@ -4371,10 +4702,18 @@ var recipes = [
4371
4702
  },
4372
4703
  {
4373
4704
  sources: [
4705
+ {
4706
+ inputIndex: 1,
4707
+ statIndex: 0
4708
+ }
4374
4709
  ]
4375
4710
  },
4376
4711
  {
4377
4712
  sources: [
4713
+ {
4714
+ inputIndex: 1,
4715
+ statIndex: 1
4716
+ }
4378
4717
  ]
4379
4718
  }
4380
4719
  ],
@@ -4546,12 +4885,28 @@ var recipes = [
4546
4885
  ]
4547
4886
  },
4548
4887
  {
4549
- outputItemId: 20001,
4550
- outputMass: 4800,
4888
+ outputItemId: 10210,
4889
+ outputMass: 1600000,
4551
4890
  inputs: [
4552
4891
  {
4553
- itemId: 102,
4554
- quantity: 12
4892
+ itemId: 10001,
4893
+ quantity: 200
4894
+ },
4895
+ {
4896
+ itemId: 10008,
4897
+ quantity: 200
4898
+ },
4899
+ {
4900
+ itemId: 10007,
4901
+ quantity: 200
4902
+ },
4903
+ {
4904
+ itemId: 10003,
4905
+ quantity: 200
4906
+ },
4907
+ {
4908
+ itemId: 10006,
4909
+ quantity: 200
4555
4910
  }
4556
4911
  ],
4557
4912
  statSlots: [
@@ -4566,27 +4921,746 @@ var recipes = [
4566
4921
  {
4567
4922
  sources: [
4568
4923
  {
4569
- inputIndex: 0,
4570
- statIndex: 2
4924
+ inputIndex: 1,
4925
+ statIndex: 0
4571
4926
  }
4572
4927
  ]
4573
4928
  },
4574
4929
  {
4575
4930
  sources: [
4576
4931
  {
4577
- inputIndex: 0,
4578
- statIndex: 1
4932
+ inputIndex: 2,
4933
+ statIndex: 0
4579
4934
  }
4580
4935
  ]
4581
- }
4582
- ],
4583
- blendWeights: [
4584
- ]
4585
- },
4586
- {
4587
- outputItemId: 20002,
4588
- outputMass: 4800,
4589
- inputs: [
4936
+ },
4937
+ {
4938
+ sources: [
4939
+ {
4940
+ inputIndex: 3,
4941
+ statIndex: 0
4942
+ }
4943
+ ]
4944
+ },
4945
+ {
4946
+ sources: [
4947
+ {
4948
+ inputIndex: 4,
4949
+ statIndex: 0
4950
+ }
4951
+ ]
4952
+ }
4953
+ ],
4954
+ blendWeights: [
4955
+ ]
4956
+ },
4957
+ {
4958
+ outputItemId: 10211,
4959
+ outputMass: 2400000,
4960
+ inputs: [
4961
+ {
4962
+ itemId: 10005,
4963
+ quantity: 100
4964
+ },
4965
+ {
4966
+ itemId: 10002,
4967
+ quantity: 100
4968
+ },
4969
+ {
4970
+ itemId: 10010,
4971
+ quantity: 100
4972
+ },
4973
+ {
4974
+ itemId: 10009,
4975
+ quantity: 100
4976
+ },
4977
+ {
4978
+ itemId: 10004,
4979
+ quantity: 100
4980
+ },
4981
+ {
4982
+ itemId: 10210,
4983
+ quantity: 1
4984
+ }
4985
+ ],
4986
+ statSlots: [
4987
+ {
4988
+ sources: [
4989
+ {
4990
+ inputIndex: 0,
4991
+ statIndex: 0
4992
+ },
4993
+ {
4994
+ inputIndex: 5,
4995
+ statIndex: 0
4996
+ }
4997
+ ]
4998
+ },
4999
+ {
5000
+ sources: [
5001
+ {
5002
+ inputIndex: 1,
5003
+ statIndex: 0
5004
+ },
5005
+ {
5006
+ inputIndex: 5,
5007
+ statIndex: 1
5008
+ }
5009
+ ]
5010
+ },
5011
+ {
5012
+ sources: [
5013
+ {
5014
+ inputIndex: 2,
5015
+ statIndex: 0
5016
+ },
5017
+ {
5018
+ inputIndex: 5,
5019
+ statIndex: 2
5020
+ }
5021
+ ]
5022
+ },
5023
+ {
5024
+ sources: [
5025
+ {
5026
+ inputIndex: 3,
5027
+ statIndex: 0
5028
+ },
5029
+ {
5030
+ inputIndex: 5,
5031
+ statIndex: 3
5032
+ }
5033
+ ]
5034
+ },
5035
+ {
5036
+ sources: [
5037
+ {
5038
+ inputIndex: 4,
5039
+ statIndex: 0
5040
+ },
5041
+ {
5042
+ inputIndex: 5,
5043
+ statIndex: 4
5044
+ }
5045
+ ]
5046
+ }
5047
+ ],
5048
+ blendWeights: [
5049
+ ],
5050
+ sourceSubclass: 10210
5051
+ },
5052
+ {
5053
+ outputItemId: 10212,
5054
+ outputMass: 2400000,
5055
+ inputs: [
5056
+ {
5057
+ itemId: 10005,
5058
+ quantity: 100
5059
+ },
5060
+ {
5061
+ itemId: 10002,
5062
+ quantity: 100
5063
+ },
5064
+ {
5065
+ itemId: 10010,
5066
+ quantity: 100
5067
+ },
5068
+ {
5069
+ itemId: 10009,
5070
+ quantity: 100
5071
+ },
5072
+ {
5073
+ itemId: 10004,
5074
+ quantity: 100
5075
+ },
5076
+ {
5077
+ itemId: 10210,
5078
+ quantity: 1
5079
+ }
5080
+ ],
5081
+ statSlots: [
5082
+ {
5083
+ sources: [
5084
+ {
5085
+ inputIndex: 0,
5086
+ statIndex: 0
5087
+ },
5088
+ {
5089
+ inputIndex: 5,
5090
+ statIndex: 0
5091
+ }
5092
+ ]
5093
+ },
5094
+ {
5095
+ sources: [
5096
+ {
5097
+ inputIndex: 1,
5098
+ statIndex: 0
5099
+ },
5100
+ {
5101
+ inputIndex: 5,
5102
+ statIndex: 1
5103
+ }
5104
+ ]
5105
+ },
5106
+ {
5107
+ sources: [
5108
+ {
5109
+ inputIndex: 2,
5110
+ statIndex: 0
5111
+ },
5112
+ {
5113
+ inputIndex: 5,
5114
+ statIndex: 2
5115
+ }
5116
+ ]
5117
+ },
5118
+ {
5119
+ sources: [
5120
+ {
5121
+ inputIndex: 3,
5122
+ statIndex: 0
5123
+ },
5124
+ {
5125
+ inputIndex: 5,
5126
+ statIndex: 3
5127
+ }
5128
+ ]
5129
+ },
5130
+ {
5131
+ sources: [
5132
+ {
5133
+ inputIndex: 4,
5134
+ statIndex: 0
5135
+ },
5136
+ {
5137
+ inputIndex: 5,
5138
+ statIndex: 4
5139
+ }
5140
+ ]
5141
+ }
5142
+ ],
5143
+ blendWeights: [
5144
+ ],
5145
+ sourceSubclass: 10210
5146
+ },
5147
+ {
5148
+ outputItemId: 10213,
5149
+ outputMass: 2400000,
5150
+ inputs: [
5151
+ {
5152
+ itemId: 10005,
5153
+ quantity: 100
5154
+ },
5155
+ {
5156
+ itemId: 10002,
5157
+ quantity: 100
5158
+ },
5159
+ {
5160
+ itemId: 10010,
5161
+ quantity: 100
5162
+ },
5163
+ {
5164
+ itemId: 10009,
5165
+ quantity: 100
5166
+ },
5167
+ {
5168
+ itemId: 10004,
5169
+ quantity: 100
5170
+ },
5171
+ {
5172
+ itemId: 10210,
5173
+ quantity: 1
5174
+ }
5175
+ ],
5176
+ statSlots: [
5177
+ {
5178
+ sources: [
5179
+ {
5180
+ inputIndex: 0,
5181
+ statIndex: 0
5182
+ },
5183
+ {
5184
+ inputIndex: 5,
5185
+ statIndex: 0
5186
+ }
5187
+ ]
5188
+ },
5189
+ {
5190
+ sources: [
5191
+ {
5192
+ inputIndex: 1,
5193
+ statIndex: 0
5194
+ },
5195
+ {
5196
+ inputIndex: 5,
5197
+ statIndex: 1
5198
+ }
5199
+ ]
5200
+ },
5201
+ {
5202
+ sources: [
5203
+ {
5204
+ inputIndex: 2,
5205
+ statIndex: 0
5206
+ },
5207
+ {
5208
+ inputIndex: 5,
5209
+ statIndex: 2
5210
+ }
5211
+ ]
5212
+ },
5213
+ {
5214
+ sources: [
5215
+ {
5216
+ inputIndex: 3,
5217
+ statIndex: 0
5218
+ },
5219
+ {
5220
+ inputIndex: 5,
5221
+ statIndex: 3
5222
+ }
5223
+ ]
5224
+ },
5225
+ {
5226
+ sources: [
5227
+ {
5228
+ inputIndex: 4,
5229
+ statIndex: 0
5230
+ },
5231
+ {
5232
+ inputIndex: 5,
5233
+ statIndex: 4
5234
+ }
5235
+ ]
5236
+ }
5237
+ ],
5238
+ blendWeights: [
5239
+ ],
5240
+ sourceSubclass: 10210
5241
+ },
5242
+ {
5243
+ outputItemId: 10214,
5244
+ outputMass: 2400000,
5245
+ inputs: [
5246
+ {
5247
+ itemId: 10005,
5248
+ quantity: 100
5249
+ },
5250
+ {
5251
+ itemId: 10002,
5252
+ quantity: 100
5253
+ },
5254
+ {
5255
+ itemId: 10010,
5256
+ quantity: 100
5257
+ },
5258
+ {
5259
+ itemId: 10009,
5260
+ quantity: 100
5261
+ },
5262
+ {
5263
+ itemId: 10004,
5264
+ quantity: 100
5265
+ },
5266
+ {
5267
+ itemId: 10210,
5268
+ quantity: 1
5269
+ }
5270
+ ],
5271
+ statSlots: [
5272
+ {
5273
+ sources: [
5274
+ {
5275
+ inputIndex: 0,
5276
+ statIndex: 0
5277
+ },
5278
+ {
5279
+ inputIndex: 5,
5280
+ statIndex: 0
5281
+ }
5282
+ ]
5283
+ },
5284
+ {
5285
+ sources: [
5286
+ {
5287
+ inputIndex: 1,
5288
+ statIndex: 0
5289
+ },
5290
+ {
5291
+ inputIndex: 5,
5292
+ statIndex: 1
5293
+ }
5294
+ ]
5295
+ },
5296
+ {
5297
+ sources: [
5298
+ {
5299
+ inputIndex: 2,
5300
+ statIndex: 0
5301
+ },
5302
+ {
5303
+ inputIndex: 5,
5304
+ statIndex: 2
5305
+ }
5306
+ ]
5307
+ },
5308
+ {
5309
+ sources: [
5310
+ {
5311
+ inputIndex: 3,
5312
+ statIndex: 0
5313
+ },
5314
+ {
5315
+ inputIndex: 5,
5316
+ statIndex: 3
5317
+ }
5318
+ ]
5319
+ },
5320
+ {
5321
+ sources: [
5322
+ {
5323
+ inputIndex: 4,
5324
+ statIndex: 0
5325
+ },
5326
+ {
5327
+ inputIndex: 5,
5328
+ statIndex: 4
5329
+ }
5330
+ ]
5331
+ }
5332
+ ],
5333
+ blendWeights: [
5334
+ ],
5335
+ sourceSubclass: 10210
5336
+ },
5337
+ {
5338
+ outputItemId: 10215,
5339
+ outputMass: 2400000,
5340
+ inputs: [
5341
+ {
5342
+ itemId: 10005,
5343
+ quantity: 100
5344
+ },
5345
+ {
5346
+ itemId: 10002,
5347
+ quantity: 100
5348
+ },
5349
+ {
5350
+ itemId: 10010,
5351
+ quantity: 100
5352
+ },
5353
+ {
5354
+ itemId: 10009,
5355
+ quantity: 100
5356
+ },
5357
+ {
5358
+ itemId: 10004,
5359
+ quantity: 100
5360
+ },
5361
+ {
5362
+ itemId: 10210,
5363
+ quantity: 1
5364
+ }
5365
+ ],
5366
+ statSlots: [
5367
+ {
5368
+ sources: [
5369
+ {
5370
+ inputIndex: 0,
5371
+ statIndex: 0
5372
+ },
5373
+ {
5374
+ inputIndex: 5,
5375
+ statIndex: 0
5376
+ }
5377
+ ]
5378
+ },
5379
+ {
5380
+ sources: [
5381
+ {
5382
+ inputIndex: 1,
5383
+ statIndex: 0
5384
+ },
5385
+ {
5386
+ inputIndex: 5,
5387
+ statIndex: 1
5388
+ }
5389
+ ]
5390
+ },
5391
+ {
5392
+ sources: [
5393
+ {
5394
+ inputIndex: 2,
5395
+ statIndex: 0
5396
+ },
5397
+ {
5398
+ inputIndex: 5,
5399
+ statIndex: 2
5400
+ }
5401
+ ]
5402
+ },
5403
+ {
5404
+ sources: [
5405
+ {
5406
+ inputIndex: 3,
5407
+ statIndex: 0
5408
+ },
5409
+ {
5410
+ inputIndex: 5,
5411
+ statIndex: 3
5412
+ }
5413
+ ]
5414
+ },
5415
+ {
5416
+ sources: [
5417
+ {
5418
+ inputIndex: 4,
5419
+ statIndex: 0
5420
+ },
5421
+ {
5422
+ inputIndex: 5,
5423
+ statIndex: 4
5424
+ }
5425
+ ]
5426
+ }
5427
+ ],
5428
+ blendWeights: [
5429
+ ],
5430
+ sourceSubclass: 10210
5431
+ },
5432
+ {
5433
+ outputItemId: 10216,
5434
+ outputMass: 3600000,
5435
+ inputs: [
5436
+ {
5437
+ itemId: 10005,
5438
+ quantity: 150
5439
+ },
5440
+ {
5441
+ itemId: 10002,
5442
+ quantity: 150
5443
+ },
5444
+ {
5445
+ itemId: 10010,
5446
+ quantity: 150
5447
+ },
5448
+ {
5449
+ itemId: 10009,
5450
+ quantity: 150
5451
+ },
5452
+ {
5453
+ itemId: 10004,
5454
+ quantity: 150
5455
+ },
5456
+ {
5457
+ itemId: 10211,
5458
+ quantity: 1
5459
+ }
5460
+ ],
5461
+ statSlots: [
5462
+ {
5463
+ sources: [
5464
+ {
5465
+ inputIndex: 0,
5466
+ statIndex: 0
5467
+ },
5468
+ {
5469
+ inputIndex: 5,
5470
+ statIndex: 0
5471
+ }
5472
+ ]
5473
+ },
5474
+ {
5475
+ sources: [
5476
+ {
5477
+ inputIndex: 1,
5478
+ statIndex: 0
5479
+ },
5480
+ {
5481
+ inputIndex: 5,
5482
+ statIndex: 1
5483
+ }
5484
+ ]
5485
+ },
5486
+ {
5487
+ sources: [
5488
+ {
5489
+ inputIndex: 2,
5490
+ statIndex: 0
5491
+ },
5492
+ {
5493
+ inputIndex: 5,
5494
+ statIndex: 2
5495
+ }
5496
+ ]
5497
+ },
5498
+ {
5499
+ sources: [
5500
+ {
5501
+ inputIndex: 3,
5502
+ statIndex: 0
5503
+ },
5504
+ {
5505
+ inputIndex: 5,
5506
+ statIndex: 3
5507
+ }
5508
+ ]
5509
+ },
5510
+ {
5511
+ sources: [
5512
+ {
5513
+ inputIndex: 4,
5514
+ statIndex: 0
5515
+ },
5516
+ {
5517
+ inputIndex: 5,
5518
+ statIndex: 4
5519
+ }
5520
+ ]
5521
+ }
5522
+ ],
5523
+ blendWeights: [
5524
+ ],
5525
+ sourceSubclass: 10211
5526
+ },
5527
+ {
5528
+ outputItemId: 10217,
5529
+ outputMass: 3600000,
5530
+ inputs: [
5531
+ {
5532
+ itemId: 10005,
5533
+ quantity: 150
5534
+ },
5535
+ {
5536
+ itemId: 10002,
5537
+ quantity: 150
5538
+ },
5539
+ {
5540
+ itemId: 10010,
5541
+ quantity: 150
5542
+ },
5543
+ {
5544
+ itemId: 10009,
5545
+ quantity: 150
5546
+ },
5547
+ {
5548
+ itemId: 10004,
5549
+ quantity: 150
5550
+ },
5551
+ {
5552
+ itemId: 10211,
5553
+ quantity: 1
5554
+ }
5555
+ ],
5556
+ statSlots: [
5557
+ {
5558
+ sources: [
5559
+ {
5560
+ inputIndex: 0,
5561
+ statIndex: 0
5562
+ },
5563
+ {
5564
+ inputIndex: 5,
5565
+ statIndex: 0
5566
+ }
5567
+ ]
5568
+ },
5569
+ {
5570
+ sources: [
5571
+ {
5572
+ inputIndex: 1,
5573
+ statIndex: 0
5574
+ },
5575
+ {
5576
+ inputIndex: 5,
5577
+ statIndex: 1
5578
+ }
5579
+ ]
5580
+ },
5581
+ {
5582
+ sources: [
5583
+ {
5584
+ inputIndex: 2,
5585
+ statIndex: 0
5586
+ },
5587
+ {
5588
+ inputIndex: 5,
5589
+ statIndex: 2
5590
+ }
5591
+ ]
5592
+ },
5593
+ {
5594
+ sources: [
5595
+ {
5596
+ inputIndex: 3,
5597
+ statIndex: 0
5598
+ },
5599
+ {
5600
+ inputIndex: 5,
5601
+ statIndex: 3
5602
+ }
5603
+ ]
5604
+ },
5605
+ {
5606
+ sources: [
5607
+ {
5608
+ inputIndex: 4,
5609
+ statIndex: 0
5610
+ },
5611
+ {
5612
+ inputIndex: 5,
5613
+ statIndex: 4
5614
+ }
5615
+ ]
5616
+ }
5617
+ ],
5618
+ blendWeights: [
5619
+ ],
5620
+ sourceSubclass: 10211
5621
+ },
5622
+ {
5623
+ outputItemId: 20001,
5624
+ outputMass: 4800,
5625
+ inputs: [
5626
+ {
5627
+ itemId: 102,
5628
+ quantity: 12
5629
+ }
5630
+ ],
5631
+ statSlots: [
5632
+ {
5633
+ sources: [
5634
+ {
5635
+ inputIndex: 0,
5636
+ statIndex: 0
5637
+ }
5638
+ ]
5639
+ },
5640
+ {
5641
+ sources: [
5642
+ {
5643
+ inputIndex: 0,
5644
+ statIndex: 2
5645
+ }
5646
+ ]
5647
+ },
5648
+ {
5649
+ sources: [
5650
+ {
5651
+ inputIndex: 0,
5652
+ statIndex: 1
5653
+ }
5654
+ ]
5655
+ }
5656
+ ],
5657
+ blendWeights: [
5658
+ ]
5659
+ },
5660
+ {
5661
+ outputItemId: 20002,
5662
+ outputMass: 4800,
5663
+ inputs: [
4590
5664
  {
4591
5665
  itemId: 402,
4592
5666
  quantity: 6
@@ -5145,27 +6219,27 @@ var recipes = [
5145
6219
  outputMass: 3840000,
5146
6220
  inputs: [
5147
6221
  {
5148
- itemId: 20001,
5149
- quantity: 300
6222
+ itemId: 20005,
6223
+ quantity: 150
5150
6224
  },
5151
6225
  {
5152
- itemId: 20008,
5153
- quantity: 300
6226
+ itemId: 20002,
6227
+ quantity: 150
5154
6228
  },
5155
6229
  {
5156
- itemId: 20007,
5157
- quantity: 300
6230
+ itemId: 20010,
6231
+ quantity: 150
5158
6232
  },
5159
6233
  {
5160
- itemId: 20003,
5161
- quantity: 300
6234
+ itemId: 20009,
6235
+ quantity: 150
5162
6236
  },
5163
6237
  {
5164
- itemId: 20006,
5165
- quantity: 300
6238
+ itemId: 20004,
6239
+ quantity: 150
5166
6240
  },
5167
6241
  {
5168
- itemId: 10201,
6242
+ itemId: 10211,
5169
6243
  quantity: 1
5170
6244
  }
5171
6245
  ],
@@ -5185,8 +6259,8 @@ var recipes = [
5185
6259
  {
5186
6260
  sources: [
5187
6261
  {
5188
- inputIndex: 0,
5189
- statIndex: 1
6262
+ inputIndex: 1,
6263
+ statIndex: 0
5190
6264
  },
5191
6265
  {
5192
6266
  inputIndex: 5,
@@ -5196,43 +6270,71 @@ var recipes = [
5196
6270
  },
5197
6271
  {
5198
6272
  sources: [
6273
+ {
6274
+ inputIndex: 2,
6275
+ statIndex: 0
6276
+ },
6277
+ {
6278
+ inputIndex: 5,
6279
+ statIndex: 2
6280
+ }
6281
+ ]
6282
+ },
6283
+ {
6284
+ sources: [
6285
+ {
6286
+ inputIndex: 3,
6287
+ statIndex: 0
6288
+ },
6289
+ {
6290
+ inputIndex: 5,
6291
+ statIndex: 3
6292
+ }
5199
6293
  ]
5200
6294
  },
5201
6295
  {
5202
6296
  sources: [
6297
+ {
6298
+ inputIndex: 4,
6299
+ statIndex: 0
6300
+ },
6301
+ {
6302
+ inputIndex: 5,
6303
+ statIndex: 4
6304
+ }
5203
6305
  ]
5204
6306
  }
5205
6307
  ],
5206
6308
  blendWeights: [
5207
6309
  ],
5208
- sourceSubclass: 10201
6310
+ sourceSubclass: 10211
5209
6311
  },
5210
6312
  {
5211
6313
  outputItemId: 20211,
5212
6314
  outputMass: 3840000,
5213
6315
  inputs: [
5214
6316
  {
5215
- itemId: 20001,
5216
- quantity: 300
6317
+ itemId: 20005,
6318
+ quantity: 150
5217
6319
  },
5218
6320
  {
5219
6321
  itemId: 20002,
5220
- quantity: 300
6322
+ quantity: 150
5221
6323
  },
5222
6324
  {
5223
- itemId: 20008,
5224
- quantity: 300
6325
+ itemId: 20010,
6326
+ quantity: 150
5225
6327
  },
5226
6328
  {
5227
- itemId: 20010,
5228
- quantity: 300
6329
+ itemId: 20009,
6330
+ quantity: 150
5229
6331
  },
5230
6332
  {
5231
6333
  itemId: 20004,
5232
- quantity: 300
6334
+ quantity: 150
5233
6335
  },
5234
6336
  {
5235
- itemId: 10201,
6337
+ itemId: 10214,
5236
6338
  quantity: 1
5237
6339
  }
5238
6340
  ],
@@ -5252,8 +6354,8 @@ var recipes = [
5252
6354
  {
5253
6355
  sources: [
5254
6356
  {
5255
- inputIndex: 0,
5256
- statIndex: 1
6357
+ inputIndex: 1,
6358
+ statIndex: 0
5257
6359
  },
5258
6360
  {
5259
6361
  inputIndex: 5,
@@ -5262,141 +6364,390 @@ var recipes = [
5262
6364
  ]
5263
6365
  },
5264
6366
  {
5265
- sources: [
5266
- ]
6367
+ sources: [
6368
+ {
6369
+ inputIndex: 2,
6370
+ statIndex: 0
6371
+ },
6372
+ {
6373
+ inputIndex: 5,
6374
+ statIndex: 2
6375
+ }
6376
+ ]
6377
+ },
6378
+ {
6379
+ sources: [
6380
+ {
6381
+ inputIndex: 3,
6382
+ statIndex: 0
6383
+ },
6384
+ {
6385
+ inputIndex: 5,
6386
+ statIndex: 3
6387
+ }
6388
+ ]
6389
+ },
6390
+ {
6391
+ sources: [
6392
+ {
6393
+ inputIndex: 4,
6394
+ statIndex: 0
6395
+ },
6396
+ {
6397
+ inputIndex: 5,
6398
+ statIndex: 4
6399
+ }
6400
+ ]
6401
+ }
6402
+ ],
6403
+ blendWeights: [
6404
+ ],
6405
+ sourceSubclass: 10214
6406
+ }
6407
+ ];
6408
+
6409
+ var entities = [
6410
+ {
6411
+ entityItemId: 10200,
6412
+ slots: [
6413
+ ],
6414
+ baseHullmass: 100000
6415
+ },
6416
+ {
6417
+ entityItemId: 10201,
6418
+ slots: [
6419
+ {
6420
+ type: "any",
6421
+ outputPct: 80,
6422
+ maxTier: 1
6423
+ },
6424
+ {
6425
+ type: "any",
6426
+ outputPct: 80,
6427
+ maxTier: 1
6428
+ },
6429
+ {
6430
+ type: "any",
6431
+ outputPct: 80,
6432
+ maxTier: 1
6433
+ },
6434
+ {
6435
+ type: "any",
6436
+ outputPct: 80,
6437
+ maxTier: 1
6438
+ },
6439
+ {
6440
+ type: "any",
6441
+ outputPct: 80,
6442
+ maxTier: 1
6443
+ }
6444
+ ],
6445
+ baseHullmass: 4000000
6446
+ },
6447
+ {
6448
+ entityItemId: 10202,
6449
+ slots: [
6450
+ {
6451
+ type: "loader",
6452
+ outputPct: 100,
6453
+ maxTier: 1
6454
+ },
6455
+ {
6456
+ type: "storage",
6457
+ outputPct: 100,
6458
+ maxTier: 1
6459
+ },
6460
+ {
6461
+ type: "storage",
6462
+ outputPct: 100,
6463
+ maxTier: 1
6464
+ },
6465
+ {
6466
+ type: "storage",
6467
+ outputPct: 100,
6468
+ maxTier: 1
6469
+ },
6470
+ {
6471
+ type: "storage",
6472
+ outputPct: 100,
6473
+ maxTier: 1
6474
+ }
6475
+ ],
6476
+ baseHullmass: 100000
6477
+ },
6478
+ {
6479
+ entityItemId: 10203,
6480
+ slots: [
6481
+ {
6482
+ type: "generator",
6483
+ outputPct: 200,
6484
+ maxTier: 1
6485
+ },
6486
+ {
6487
+ type: "gatherer",
6488
+ outputPct: 200,
6489
+ maxTier: 1
6490
+ }
6491
+ ],
6492
+ baseHullmass: 100000
6493
+ },
6494
+ {
6495
+ entityItemId: 10204,
6496
+ slots: [
6497
+ {
6498
+ type: "generator",
6499
+ outputPct: 200,
6500
+ maxTier: 1
6501
+ },
6502
+ {
6503
+ type: "crafter",
6504
+ outputPct: 200,
6505
+ maxTier: 1
6506
+ }
6507
+ ],
6508
+ baseHullmass: 100000
6509
+ },
6510
+ {
6511
+ entityItemId: 10205,
6512
+ slots: [
6513
+ {
6514
+ type: "generator",
6515
+ outputPct: 200,
6516
+ maxTier: 1
6517
+ },
6518
+ {
6519
+ type: "launcher",
6520
+ outputPct: 200,
6521
+ maxTier: 1
6522
+ }
6523
+ ],
6524
+ baseHullmass: 100000
6525
+ },
6526
+ {
6527
+ entityItemId: 10206,
6528
+ slots: [
6529
+ {
6530
+ type: "storage",
6531
+ outputPct: 100,
6532
+ maxTier: 1
6533
+ },
6534
+ {
6535
+ type: "storage",
6536
+ outputPct: 100,
6537
+ maxTier: 1
6538
+ },
6539
+ {
6540
+ type: "storage",
6541
+ outputPct: 100,
6542
+ maxTier: 1
6543
+ }
6544
+ ],
6545
+ baseHullmass: 100000
6546
+ },
6547
+ {
6548
+ entityItemId: 10207,
6549
+ slots: [
6550
+ ],
6551
+ baseHullmass: 100000
6552
+ },
6553
+ {
6554
+ entityItemId: 10208,
6555
+ slots: [
6556
+ {
6557
+ type: "crafter",
6558
+ outputPct: 75,
6559
+ maxTier: 1
6560
+ },
6561
+ {
6562
+ type: "crafter",
6563
+ outputPct: 75,
6564
+ maxTier: 1
5267
6565
  },
5268
6566
  {
5269
- sources: [
5270
- ]
6567
+ type: "crafter",
6568
+ outputPct: 75,
6569
+ maxTier: 1
6570
+ },
6571
+ {
6572
+ type: "crafter",
6573
+ outputPct: 75,
6574
+ maxTier: 1
6575
+ },
6576
+ {
6577
+ type: "crafter",
6578
+ outputPct: 75,
6579
+ maxTier: 1
5271
6580
  }
5272
6581
  ],
5273
- blendWeights: [
5274
- ],
5275
- sourceSubclass: 10201
5276
- }
5277
- ];
5278
-
5279
- var entities = [
5280
- {
5281
- entityItemId: 10200,
5282
- slots: [
5283
- ]
6582
+ baseHullmass: 100000
5284
6583
  },
5285
6584
  {
5286
- entityItemId: 10201,
6585
+ entityItemId: 10210,
5287
6586
  slots: [
5288
6587
  {
5289
- type: "any",
6588
+ type: "generator",
5290
6589
  outputPct: 80,
5291
6590
  maxTier: 1
5292
6591
  },
5293
6592
  {
5294
- type: "any",
6593
+ type: "engine",
5295
6594
  outputPct: 80,
5296
6595
  maxTier: 1
5297
6596
  },
5298
6597
  {
5299
6598
  type: "any",
5300
- outputPct: 80,
6599
+ outputPct: 60,
6600
+ maxTier: 1
6601
+ }
6602
+ ],
6603
+ baseHullmass: 3200000
6604
+ },
6605
+ {
6606
+ entityItemId: 10211,
6607
+ slots: [
6608
+ {
6609
+ type: "generator",
6610
+ outputPct: 85,
5301
6611
  maxTier: 1
5302
6612
  },
5303
6613
  {
5304
- type: "any",
5305
- outputPct: 80,
6614
+ type: "engine",
6615
+ outputPct: 85,
5306
6616
  maxTier: 1
5307
6617
  },
5308
6618
  {
5309
- type: "any",
5310
- outputPct: 80,
6619
+ type: "gatherer",
6620
+ outputPct: 100,
5311
6621
  maxTier: 1
5312
6622
  }
5313
- ]
6623
+ ],
6624
+ baseHullmass: 3600000
5314
6625
  },
5315
6626
  {
5316
- entityItemId: 10202,
6627
+ entityItemId: 10212,
5317
6628
  slots: [
5318
6629
  {
5319
- type: "loader",
5320
- outputPct: 100,
6630
+ type: "generator",
6631
+ outputPct: 85,
5321
6632
  maxTier: 1
5322
6633
  },
5323
6634
  {
5324
- type: "storage",
5325
- outputPct: 100,
6635
+ type: "engine",
6636
+ outputPct: 85,
5326
6637
  maxTier: 1
5327
6638
  },
5328
6639
  {
5329
- type: "storage",
6640
+ type: "loader",
5330
6641
  outputPct: 100,
5331
6642
  maxTier: 1
6643
+ }
6644
+ ],
6645
+ baseHullmass: 3600000
6646
+ },
6647
+ {
6648
+ entityItemId: 10213,
6649
+ slots: [
6650
+ {
6651
+ type: "generator",
6652
+ outputPct: 85,
6653
+ maxTier: 1
5332
6654
  },
5333
6655
  {
5334
- type: "storage",
5335
- outputPct: 100,
6656
+ type: "engine",
6657
+ outputPct: 85,
5336
6658
  maxTier: 1
5337
6659
  },
5338
6660
  {
5339
- type: "storage",
6661
+ type: "builder",
5340
6662
  outputPct: 100,
5341
6663
  maxTier: 1
5342
6664
  }
5343
- ]
6665
+ ],
6666
+ baseHullmass: 4400000
5344
6667
  },
5345
6668
  {
5346
- entityItemId: 10203,
6669
+ entityItemId: 10214,
5347
6670
  slots: [
5348
6671
  {
5349
6672
  type: "generator",
5350
- outputPct: 200,
6673
+ outputPct: 85,
5351
6674
  maxTier: 1
5352
6675
  },
5353
6676
  {
5354
- type: "gatherer",
5355
- outputPct: 200,
6677
+ type: "engine",
6678
+ outputPct: 85,
6679
+ maxTier: 1
6680
+ },
6681
+ {
6682
+ type: "hauler",
6683
+ outputPct: 100,
5356
6684
  maxTier: 1
5357
6685
  }
5358
- ]
6686
+ ],
6687
+ baseHullmass: 4400000
5359
6688
  },
5360
6689
  {
5361
- entityItemId: 10204,
6690
+ entityItemId: 10215,
5362
6691
  slots: [
5363
6692
  {
5364
6693
  type: "generator",
5365
- outputPct: 200,
6694
+ outputPct: 85,
5366
6695
  maxTier: 1
5367
6696
  },
5368
6697
  {
5369
- type: "crafter",
5370
- outputPct: 200,
6698
+ type: "engine",
6699
+ outputPct: 85,
6700
+ maxTier: 1
6701
+ },
6702
+ {
6703
+ type: "storage",
6704
+ outputPct: 100,
5371
6705
  maxTier: 1
5372
6706
  }
5373
- ]
6707
+ ],
6708
+ baseHullmass: 5000000
5374
6709
  },
5375
6710
  {
5376
- entityItemId: 10205,
6711
+ entityItemId: 10216,
5377
6712
  slots: [
5378
6713
  {
5379
6714
  type: "generator",
5380
- outputPct: 200,
6715
+ outputPct: 90,
5381
6716
  maxTier: 1
5382
6717
  },
5383
6718
  {
5384
- type: "launcher",
5385
- outputPct: 200,
6719
+ type: "engine",
6720
+ outputPct: 90,
6721
+ maxTier: 1
6722
+ },
6723
+ {
6724
+ type: "gatherer",
6725
+ outputPct: 100,
6726
+ maxTier: 1
6727
+ },
6728
+ {
6729
+ type: "gatherer",
6730
+ outputPct: 100,
5386
6731
  maxTier: 1
5387
6732
  }
5388
- ]
6733
+ ],
6734
+ baseHullmass: 4000000
5389
6735
  },
5390
6736
  {
5391
- entityItemId: 10206,
6737
+ entityItemId: 10217,
5392
6738
  slots: [
5393
6739
  {
5394
- type: "storage",
5395
- outputPct: 100,
6740
+ type: "generator",
6741
+ outputPct: 90,
5396
6742
  maxTier: 1
5397
6743
  },
5398
6744
  {
5399
- type: "storage",
6745
+ type: "engine",
6746
+ outputPct: 90,
6747
+ maxTier: 1
6748
+ },
6749
+ {
6750
+ type: "gatherer",
5400
6751
  outputPct: 100,
5401
6752
  maxTier: 1
5402
6753
  },
@@ -5405,23 +6756,20 @@ var entities = [
5405
6756
  outputPct: 100,
5406
6757
  maxTier: 1
5407
6758
  }
5408
- ]
5409
- },
5410
- {
5411
- entityItemId: 10207,
5412
- slots: [
5413
- ]
6759
+ ],
6760
+ baseHullmass: 4800000
5414
6761
  },
5415
6762
  {
5416
6763
  entityItemId: 20200,
5417
6764
  slots: [
5418
- ]
6765
+ ],
6766
+ baseHullmass: 100000
5419
6767
  },
5420
6768
  {
5421
6769
  entityItemId: 20210,
5422
6770
  slots: [
5423
6771
  {
5424
- type: "engine",
6772
+ type: "generator",
5425
6773
  outputPct: 100,
5426
6774
  maxTier: 2
5427
6775
  },
@@ -5431,7 +6779,7 @@ var entities = [
5431
6779
  maxTier: 2
5432
6780
  },
5433
6781
  {
5434
- type: "gatherer",
6782
+ type: "engine",
5435
6783
  outputPct: 100,
5436
6784
  maxTier: 2
5437
6785
  },
@@ -5439,24 +6787,20 @@ var entities = [
5439
6787
  type: "gatherer",
5440
6788
  outputPct: 100,
5441
6789
  maxTier: 2
5442
- },
5443
- {
5444
- type: "any",
5445
- outputPct: 80,
5446
- maxTier: 1
5447
6790
  }
5448
- ]
6791
+ ],
6792
+ baseHullmass: 5760000
5449
6793
  },
5450
6794
  {
5451
6795
  entityItemId: 20211,
5452
6796
  slots: [
5453
6797
  {
5454
- type: "engine",
6798
+ type: "generator",
5455
6799
  outputPct: 100,
5456
6800
  maxTier: 2
5457
6801
  },
5458
6802
  {
5459
- type: "generator",
6803
+ type: "engine",
5460
6804
  outputPct: 100,
5461
6805
  maxTier: 2
5462
6806
  },
@@ -5470,7 +6814,8 @@ var entities = [
5470
6814
  outputPct: 100,
5471
6815
  maxTier: 2
5472
6816
  }
5473
- ]
6817
+ ],
6818
+ baseHullmass: 7040000
5474
6819
  }
5475
6820
  ];
5476
6821
 
@@ -5995,6 +7340,13 @@ var items = [
5995
7340
  tier: 1,
5996
7341
  subtype: "launcher"
5997
7342
  },
7343
+ {
7344
+ id: 10110,
7345
+ mass: 960000,
7346
+ type: "module",
7347
+ tier: 1,
7348
+ subtype: "builder"
7349
+ },
5998
7350
  {
5999
7351
  id: 10200,
6000
7352
  mass: 1900000,
@@ -6043,6 +7395,60 @@ var items = [
6043
7395
  type: "entity",
6044
7396
  tier: 1
6045
7397
  },
7398
+ {
7399
+ id: 10208,
7400
+ mass: 1900000,
7401
+ type: "entity",
7402
+ tier: 1
7403
+ },
7404
+ {
7405
+ id: 10210,
7406
+ mass: 1600000,
7407
+ type: "entity",
7408
+ tier: 1
7409
+ },
7410
+ {
7411
+ id: 10211,
7412
+ mass: 2400000,
7413
+ type: "entity",
7414
+ tier: 1
7415
+ },
7416
+ {
7417
+ id: 10212,
7418
+ mass: 2400000,
7419
+ type: "entity",
7420
+ tier: 1
7421
+ },
7422
+ {
7423
+ id: 10213,
7424
+ mass: 2400000,
7425
+ type: "entity",
7426
+ tier: 1
7427
+ },
7428
+ {
7429
+ id: 10214,
7430
+ mass: 2400000,
7431
+ type: "entity",
7432
+ tier: 1
7433
+ },
7434
+ {
7435
+ id: 10215,
7436
+ mass: 2400000,
7437
+ type: "entity",
7438
+ tier: 1
7439
+ },
7440
+ {
7441
+ id: 10216,
7442
+ mass: 3600000,
7443
+ type: "entity",
7444
+ tier: 1
7445
+ },
7446
+ {
7447
+ id: 10217,
7448
+ mass: 3600000,
7449
+ type: "entity",
7450
+ tier: 1
7451
+ },
6046
7452
  {
6047
7453
  id: 20001,
6048
7454
  mass: 4800,
@@ -6306,7 +7712,7 @@ const itemMetadata = {
6306
7712
  },
6307
7713
  10106: {
6308
7714
  name: 'Tractor Beam',
6309
- description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
7715
+ description: 'Projects a haul beam to lock onto and transport containers through group travel.',
6310
7716
  color: '#4ADBFF',
6311
7717
  },
6312
7718
  10107: {
@@ -6324,13 +7730,18 @@ const itemMetadata = {
6324
7730
  description: 'Accelerates and launches cargo payloads toward a remote mass catcher.',
6325
7731
  color: '#E86344',
6326
7732
  },
7733
+ 10110: {
7734
+ name: 'Assembly Arm',
7735
+ description: 'Heavy manipulator arms for on-site construction work. Claims build sites, builds them out, and upgrades ships in place.',
7736
+ color: '#FFB347',
7737
+ },
6327
7738
  10200: {
6328
7739
  name: 'Container',
6329
7740
  description: 'Passive floating cargo storage in space. Towed by ships.',
6330
7741
  color: '#7B8D9E',
6331
7742
  },
6332
7743
  10201: {
6333
- name: 'Roustabout',
7744
+ name: 'Ship',
6334
7745
  description: 'General-purpose vessel with 5 module slots.',
6335
7746
  color: '#4AE898',
6336
7747
  },
@@ -6364,6 +7775,51 @@ const itemMetadata = {
6364
7775
  description: 'Orbital command structure. Anchors a player station cluster.',
6365
7776
  color: '#A0B8D0',
6366
7777
  },
7778
+ 10208: {
7779
+ name: 'Workshop',
7780
+ description: 'A station workshop with five independent workers. Visiting ships bring materials and power, and the workshop does the crafting.',
7781
+ color: '#B877FF',
7782
+ },
7783
+ 10210: {
7784
+ name: 'Roustabout',
7785
+ description: 'A basic starter ship. One engine, one power core, and one open slot to fit as you like.',
7786
+ color: '#4AE898',
7787
+ },
7788
+ 10211: {
7789
+ name: 'Prospector',
7790
+ description: 'A light gathering ship. One engine, one power core, one gathering rig.',
7791
+ color: '#4AE898',
7792
+ },
7793
+ 10212: {
7794
+ name: 'Tender',
7795
+ description: 'A logistics ship with a shuttle bay for moving cargo between ships and stations.',
7796
+ color: '#4AE898',
7797
+ },
7798
+ 10213: {
7799
+ name: 'Wright',
7800
+ description: 'A construction ship with an assembly arm for building structures and upgrading ships.',
7801
+ color: '#4AE898',
7802
+ },
7803
+ 10214: {
7804
+ name: 'Tug',
7805
+ description: 'A logistics ship with a tractor beam for towing containers from place to place.',
7806
+ color: '#4AE898',
7807
+ },
7808
+ 10215: {
7809
+ name: 'Porter',
7810
+ description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
7811
+ color: '#4AE898',
7812
+ },
7813
+ 10216: {
7814
+ name: 'Wrangler',
7815
+ description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7816
+ color: '#4AE898',
7817
+ },
7818
+ 10217: {
7819
+ name: 'Dredger',
7820
+ description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7821
+ color: '#4AE898',
7822
+ },
6367
7823
  20001: {
6368
7824
  name: 'Plate',
6369
7825
  description: 'Advanced structural plating reinforced with tier 2 ore.',
@@ -6435,13 +7891,21 @@ const itemMetadata = {
6435
7891
  color: '#4AE898',
6436
7892
  },
6437
7893
  20211: {
6438
- name: 'Hauler',
7894
+ name: 'Tug',
6439
7895
  description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
6440
7896
  color: '#4AE898',
6441
7897
  },
6442
7898
  };
6443
7899
  const entityMetadata = {
6444
7900
  10201: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Shuttle Bay', 'Cargo Hold'] },
7901
+ 10210: { moduleSlotLabels: ['Power Core', 'Engine', 'Utility Bay'] },
7902
+ 10211: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
7903
+ 10212: { moduleSlotLabels: ['Power Core', 'Engine', 'Shuttle Bay'] },
7904
+ 10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
7905
+ 10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
7906
+ 10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
7907
+ 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
7908
+ 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
6445
7909
  10202: {
6446
7910
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
6447
7911
  },
@@ -6449,8 +7913,11 @@ const entityMetadata = {
6449
7913
  10204: { moduleSlotLabels: ['Power Core', 'Fabricator'] },
6450
7914
  10205: { moduleSlotLabels: ['Power Core', 'Drive Coil'] },
6451
7915
  10206: { moduleSlotLabels: ['Cargo Hold', 'Cargo Hold', 'Cargo Hold'] },
6452
- 20210: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Limpet Bay', 'Flex Slot'] },
6453
- 20211: { moduleSlotLabels: ['Engine', 'Power Core', 'Tractor Beam', 'Tractor Beam'] },
7916
+ 10208: {
7917
+ moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
7918
+ },
7919
+ 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
7920
+ 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
6454
7921
  };
6455
7922
  for (const item of items) {
6456
7923
  if (!itemMetadata[item.id]) {
@@ -9336,18 +10803,65 @@ var kinds = [
9336
10803
  defaultLabel: "Plot"
9337
10804
  },
9338
10805
  {
9339
- kind: "hub",
9340
- classification: "OrbitalStructure",
9341
- capabilityFlags: 4,
9342
- zCoord: 0,
9343
- defaultLabel: "Station Hub"
9344
- }
9345
- ];
9346
- var templates = [
10806
+ kind: "hub",
10807
+ classification: "OrbitalStructure",
10808
+ capabilityFlags: 4,
10809
+ zCoord: 0,
10810
+ defaultLabel: "Station Hub"
10811
+ },
10812
+ {
10813
+ kind: "workshop",
10814
+ classification: "OrbitalStructure",
10815
+ capabilityFlags: 20,
10816
+ zCoord: 0,
10817
+ defaultLabel: "Workshop"
10818
+ }
10819
+ ];
10820
+ var templates = [
10821
+ {
10822
+ itemId: 10201,
10823
+ kind: "ship",
10824
+ displayLabel: "Ship"
10825
+ },
10826
+ {
10827
+ itemId: 10210,
10828
+ kind: "ship",
10829
+ displayLabel: "Roustabout"
10830
+ },
10831
+ {
10832
+ itemId: 10211,
10833
+ kind: "ship",
10834
+ displayLabel: "Prospector"
10835
+ },
10836
+ {
10837
+ itemId: 10212,
10838
+ kind: "ship",
10839
+ displayLabel: "Tender"
10840
+ },
10841
+ {
10842
+ itemId: 10213,
10843
+ kind: "ship",
10844
+ displayLabel: "Wright"
10845
+ },
10846
+ {
10847
+ itemId: 10214,
10848
+ kind: "ship",
10849
+ displayLabel: "Tug"
10850
+ },
10851
+ {
10852
+ itemId: 10215,
10853
+ kind: "ship",
10854
+ displayLabel: "Porter"
10855
+ },
9347
10856
  {
9348
- itemId: 10201,
10857
+ itemId: 10216,
9349
10858
  kind: "ship",
9350
- displayLabel: "Roustabout"
10859
+ displayLabel: "Wrangler"
10860
+ },
10861
+ {
10862
+ itemId: 10217,
10863
+ kind: "ship",
10864
+ displayLabel: "Dredger"
9351
10865
  },
9352
10866
  {
9353
10867
  itemId: 10202,
@@ -9389,6 +10903,11 @@ var templates = [
9389
10903
  kind: "hub",
9390
10904
  displayLabel: ""
9391
10905
  },
10906
+ {
10907
+ itemId: 10208,
10908
+ kind: "workshop",
10909
+ displayLabel: ""
10910
+ },
9392
10911
  {
9393
10912
  itemId: 20210,
9394
10913
  kind: "ship",
@@ -9397,7 +10916,7 @@ var templates = [
9397
10916
  {
9398
10917
  itemId: 20211,
9399
10918
  kind: "ship",
9400
- displayLabel: "Hauler"
10919
+ displayLabel: "Tug"
9401
10920
  }
9402
10921
  ];
9403
10922
  var kindRegistryJson = {
@@ -9481,6 +11000,7 @@ const ENTITY_SHIP = antelope.Name.from('ship');
9481
11000
  const ENTITY_WAREHOUSE = antelope.Name.from('warehouse');
9482
11001
  const ENTITY_EXTRACTOR = antelope.Name.from('extractor');
9483
11002
  const ENTITY_FACTORY = antelope.Name.from('factory');
11003
+ const ENTITY_WORKSHOP = antelope.Name.from('workshop');
9484
11004
  const ENTITY_CONTAINER = antelope.Name.from('container');
9485
11005
  const ENTITY_NEXUS = antelope.Name.from('nexus');
9486
11006
  const ENTITY_PLOT = antelope.Name.from('plot');
@@ -9499,6 +11019,9 @@ function isExtractor(entity) {
9499
11019
  function isFactory(entity) {
9500
11020
  return entity.type?.equals(ENTITY_FACTORY) ?? false;
9501
11021
  }
11022
+ function isWorkshop(entity) {
11023
+ return entity.type?.equals(ENTITY_WORKSHOP) ?? false;
11024
+ }
9502
11025
  function isContainer(entity) {
9503
11026
  return entity.type?.equals(ENTITY_CONTAINER) ?? false;
9504
11027
  }
@@ -9980,7 +11503,7 @@ function distanceBetweenCoordinates(origin, destination) {
9980
11503
  function distanceBetweenPoints(x1, y1, x2, y2) {
9981
11504
  const x = (x1 - x2) ** 2;
9982
11505
  const y = (y1 - y2) ** 2;
9983
- return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION$1);
11506
+ return antelope.UInt64.from(Math.sqrt(x + y) * PRECISION);
9984
11507
  }
9985
11508
  function lerp$1(origin, destination, time) {
9986
11509
  return {
@@ -10026,9 +11549,9 @@ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
10026
11549
  function rotation(origin, destination) {
10027
11550
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
10028
11551
  }
10029
- function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION$1) {
11552
+ function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION) {
10030
11553
  const nearbySystems = [];
10031
- const max = antelope.UInt64.from(maxDistance / PRECISION$1);
11554
+ const max = antelope.UInt64.from(maxDistance / PRECISION);
10032
11555
  const xMin = antelope.Int64.from(origin.x).subtracting(max);
10033
11556
  const xMax = antelope.Int64.from(origin.x).adding(max);
10034
11557
  const yMin = antelope.Int64.from(origin.y).subtracting(max);
@@ -10054,19 +11577,28 @@ function calc_rechargetime(capacity, energy, recharge) {
10054
11577
  const eng = antelope.UInt32.from(energy);
10055
11578
  if (eng.gte(cap))
10056
11579
  return antelope.UInt32.zero;
10057
- return cap.subtracting(eng).dividing(recharge);
11580
+ const ticks = cap.subtracting(eng).dividing(recharge);
11581
+ return ticks.equals(antelope.UInt32.zero) ? antelope.UInt32.from(1) : ticks;
10058
11582
  }
10059
11583
  function calc_ship_rechargetime(ship) {
10060
11584
  if (!ship.generator)
10061
11585
  return antelope.UInt32.from(0);
10062
- return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt16.from(0), ship.generator.recharge);
11586
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? antelope.UInt32.from(0), ship.generator.recharge);
10063
11587
  }
10064
11588
  function calc_flighttime(distance, acceleration) {
10065
11589
  return antelope.UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
10066
11590
  }
11591
+ function calc_travel_flighttime(distance, acceleration) {
11592
+ const cruiseTransitionDistance = 2 * PRECISION;
11593
+ if (Number(distance) <= cruiseTransitionDistance) {
11594
+ return calc_flighttime(distance, acceleration);
11595
+ }
11596
+ const cruiseVelocity = Math.sqrt(acceleration * cruiseTransitionDistance);
11597
+ return antelope.UInt32.from(Number(distance) / cruiseVelocity + cruiseVelocity / acceleration);
11598
+ }
10067
11599
  function calc_transit_duration(ax, ay, bx, by) {
10068
11600
  const distance = distanceBetweenPoints(ax, ay, bx, by);
10069
- return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION$1 * WH.TRANSIT_SPEED)));
11601
+ return antelope.UInt32.from(Math.floor(distance.toNumber() / (PRECISION * WH.TRANSIT_SPEED)));
10070
11602
  }
10071
11603
  function shipLoaderLane(ship) {
10072
11604
  const lanes = ship.loader_lanes ?? [];
@@ -10090,14 +11622,14 @@ function calc_loader_acceleration(ship, mass) {
10090
11622
  }
10091
11623
  function calc_ship_flighttime(ship, mass, distance) {
10092
11624
  const acceleration = calc_ship_acceleration(ship, mass);
10093
- return calc_flighttime(distance, acceleration);
11625
+ return calc_travel_flighttime(distance, acceleration);
10094
11626
  }
10095
11627
  function calc_ship_acceleration(ship, mass) {
10096
11628
  const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
10097
11629
  return calc_acceleration(thrust, Number(mass));
10098
11630
  }
10099
11631
  function calc_acceleration(thrust, mass) {
10100
- return (thrust / mass) * PRECISION$1;
11632
+ return (thrust / mass) * PRECISION;
10101
11633
  }
10102
11634
  function calc_ship_mass(ship, cargos) {
10103
11635
  const mass = antelope.UInt64.from(0);
@@ -10113,8 +11645,20 @@ function calc_ship_mass(ship, cargos) {
10113
11645
  }
10114
11646
  return mass;
10115
11647
  }
11648
+ function calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHaulEffNum, totalMass, distance) {
11649
+ const avgHaulEff = pooledHaulCap > 0 ? Math.trunc(weightedHaulEffNum / pooledHaulCap) : 0;
11650
+ let effectiveThrust = totalThrust;
11651
+ if (haulCount > 0) {
11652
+ const penaltyMilli = 1000 +
11653
+ Math.trunc((haulCount * BASE_HAUL_PENALTY_MILLI$1 * (HAULER_EFFICIENCY_DENOM$1 - avgHaulEff)) /
11654
+ HAULER_EFFICIENCY_DENOM$1);
11655
+ effectiveThrust = Math.trunc((totalThrust * 1000) / penaltyMilli);
11656
+ }
11657
+ const acceleration = calc_acceleration(effectiveThrust, totalMass);
11658
+ return calc_travel_flighttime(distance, acceleration);
11659
+ }
10116
11660
  function calc_energyusage(distance, drain) {
10117
- return antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(drain);
11661
+ return antelope.UInt64.from(distance).multiplying(drain).dividing(PRECISION);
10118
11662
  }
10119
11663
  function calculateTransferTime(ship, cargos, quantities) {
10120
11664
  let mass = antelope.UInt64.from(0);
@@ -10214,7 +11758,7 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
10214
11758
  function hasEnergyForDistance(ship, distance) {
10215
11759
  if (!ship.engines)
10216
11760
  return false;
10217
- const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION$1).multiplying(ship.engines.drain);
11761
+ const energyNeeded = antelope.UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
10218
11762
  return antelope.UInt64.from(ship.energy ?? 0).gte(energyNeeded);
10219
11763
  }
10220
11764
  function toNum$1(v) {
@@ -10921,6 +12465,8 @@ function getItemStatKeys(itemId) {
10921
12465
  return [];
10922
12466
  return getStatDefinitions(item.category).map((d) => d.key);
10923
12467
  }
12468
+ if (itemId === ITEM_SHIP_T1_PACKED)
12469
+ return ['strength', 'density', '', ''];
10924
12470
  const recipe = getRecipe(itemId);
10925
12471
  if (!recipe)
10926
12472
  return [];
@@ -11731,6 +13277,7 @@ const MODULE_LAUNCHER = 7;
11731
13277
  const MODULE_STORAGE = 8;
11732
13278
  const MODULE_HAULER = 9;
11733
13279
  const MODULE_BATTERY = 10;
13280
+ const MODULE_BUILDER = 12;
11734
13281
  function moduleAccepts(slotType, moduleType) {
11735
13282
  return slotType === MODULE_ANY || slotType === moduleType;
11736
13283
  }
@@ -11747,6 +13294,8 @@ function getModuleCapabilityType(itemId) {
11747
13294
  return MODULE_LOADER;
11748
13295
  case ITEM_CRAFTER_T1:
11749
13296
  return MODULE_CRAFTER;
13297
+ case ITEM_BUILDER_T1:
13298
+ return MODULE_BUILDER;
11750
13299
  case ITEM_STORAGE_T1:
11751
13300
  return MODULE_STORAGE;
11752
13301
  case ITEM_HAULER_T1:
@@ -11781,6 +13330,8 @@ function moduleSlotTypeToCode(slotType) {
11781
13330
  return MODULE_WARP;
11782
13331
  case 'crafter':
11783
13332
  return MODULE_CRAFTER;
13333
+ case 'builder':
13334
+ return MODULE_BUILDER;
11784
13335
  case 'launcher':
11785
13336
  return MODULE_LAUNCHER;
11786
13337
  case 'storage':
@@ -13424,7 +14975,7 @@ const UINT32_MAX = 4294967295;
13424
14975
  const UINT32_MAX_BIGINT = 4294967295n;
13425
14976
  const UINT32_MOD = 4294967296n;
13426
14977
  const UINT64_MAX = 18446744073709551615n;
13427
- const PRECISION_BIGINT = BigInt(PRECISION$1);
14978
+ const PRECISION_BIGINT = BigInt(PRECISION);
13428
14979
  function toNumber(value) {
13429
14980
  if (typeof value === 'number')
13430
14981
  return Math.trunc(value);
@@ -13473,7 +15024,7 @@ function calcDistance(origin, destination) {
13473
15024
  const b = Coordinates.from(destination);
13474
15025
  const dx = toNumber(a.x) - toNumber(b.x);
13475
15026
  const dy = toNumber(a.y) - toNumber(b.y);
13476
- return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION$1));
15027
+ return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION));
13477
15028
  }
13478
15029
  function calcCargoItemMassUint32(item) {
13479
15030
  let mass = toUint32(BigInt(getItem(item.item_id).mass) * toUint32(toBigInt(item.quantity)));
@@ -13543,6 +15094,15 @@ class ActionsManager extends BaseManager {
13543
15094
  recharge,
13544
15095
  });
13545
15096
  }
15097
+ travelplan(entities, waypoints, recharge = true) {
15098
+ const entityRefs = this.entityRefs(entities);
15099
+ const wps = waypoints.map((w) => exports.ServerTypes.route_waypoint.from({ x: antelope.Int64.from(w.x), y: antelope.Int64.from(w.y) }));
15100
+ return this.server.action('travelplan', {
15101
+ entities: entityRefs,
15102
+ waypoints: wps,
15103
+ recharge,
15104
+ });
15105
+ }
13546
15106
  transit(shipId, entrance, exit) {
13547
15107
  return this.server.action('transit', {
13548
15108
  id: antelope.UInt64.from(shipId),
@@ -13624,6 +15184,14 @@ class ActionsManager extends BaseManager {
13624
15184
  items,
13625
15185
  });
13626
15186
  }
15187
+ shuttle(carrierId, fromId, toId, items) {
15188
+ return this.server.action('shuttle', {
15189
+ carrier: antelope.UInt64.from(carrierId),
15190
+ from_id: antelope.UInt64.from(fromId),
15191
+ to_id: antelope.UInt64.from(toId),
15192
+ items,
15193
+ });
15194
+ }
13627
15195
  launch(launcherId, catcherId, items) {
13628
15196
  return this.server.action('launch', {
13629
15197
  launcher_id: antelope.UInt64.from(launcherId),
@@ -13672,26 +15240,16 @@ class ActionsManager extends BaseManager {
13672
15240
  }
13673
15241
  return this.server.action('gather', params);
13674
15242
  }
13675
- bundleGather(gathers) {
13676
- const actions = gathers.map(({ sourceId, destinationId, stratum, quantity, slot }) => this.gather(sourceId, destinationId, stratum, quantity, slot));
13677
- return antelope.Transaction.from({
13678
- expiration: 0,
13679
- ref_block_num: 0,
13680
- ref_block_prefix: 0,
13681
- actions,
15243
+ gatherplan(sourceId, destinationId, stratum, quantity, recharge = true, slots = []) {
15244
+ return this.server.action('gatherplan', {
15245
+ source_id: antelope.UInt64.from(sourceId),
15246
+ destination_id: antelope.UInt64.from(destinationId),
15247
+ stratum: antelope.UInt16.from(stratum),
15248
+ quantity: antelope.UInt32.from(quantity),
15249
+ recharge,
15250
+ slots: antelope.Bytes.from(slots),
13682
15251
  });
13683
15252
  }
13684
- flattenGatherPlan(plan, ctx) {
13685
- const actions = [];
13686
- for (const cycle of plan.cycles) {
13687
- if (cycle.rechargeBefore)
13688
- actions.push(this.recharge(ctx.sourceId));
13689
- for (const limpet of cycle.limpets) {
13690
- actions.push(this.gather(ctx.sourceId, ctx.destinationId, ctx.stratum, limpet.quantity, limpet.slot));
13691
- }
13692
- }
13693
- return actions;
13694
- }
13695
15253
  warp(entityId, destination) {
13696
15254
  const x = antelope.Int64.from(destination.x);
13697
15255
  const y = antelope.Int64.from(destination.y);
@@ -13716,6 +15274,39 @@ class ActionsManager extends BaseManager {
13716
15274
  }
13717
15275
  return this.server.action('craft', params);
13718
15276
  }
15277
+ craftjob(shipId, workshopId, slot, recipeId, quantity, inputs) {
15278
+ const params = {
15279
+ ship_id: antelope.UInt64.from(shipId),
15280
+ workshop_id: antelope.UInt64.from(workshopId),
15281
+ slot: antelope.UInt8.from(slot),
15282
+ recipe_id: antelope.UInt16.from(recipeId),
15283
+ quantity: antelope.UInt32.from(quantity),
15284
+ inputs,
15285
+ };
15286
+ return this.server.action('craftjob', params);
15287
+ }
15288
+ claimjob(jobId, shipId) {
15289
+ const params = {
15290
+ job_id: antelope.UInt64.from(jobId),
15291
+ ship_id: antelope.UInt64.from(shipId),
15292
+ };
15293
+ return this.server.action('claimjob', params);
15294
+ }
15295
+ canceljob(jobId, shipId) {
15296
+ const params = {
15297
+ job_id: antelope.UInt64.from(jobId),
15298
+ ship_id: antelope.UInt64.from(shipId),
15299
+ };
15300
+ return this.server.action('canceljob', params);
15301
+ }
15302
+ setsocket(workshopId, slot, open) {
15303
+ const params = {
15304
+ workshop_id: antelope.UInt64.from(workshopId),
15305
+ slot: antelope.UInt8.from(slot),
15306
+ open,
15307
+ };
15308
+ return this.server.action('setsocket', params);
15309
+ }
13719
15310
  blend(entityId, inputs) {
13720
15311
  return this.server.action('blend', {
13721
15312
  id: antelope.UInt64.from(entityId),
@@ -14630,6 +16221,15 @@ class Shipload {
14630
16221
  }
14631
16222
  }
14632
16223
 
16224
+ const MODULE_STAT_SCALING_ANCHOR = 213;
16225
+ const MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = 40;
16226
+ function computeEffectiveModuleStat(stat) {
16227
+ if (stat <= MODULE_STAT_SCALING_ANCHOR)
16228
+ return stat;
16229
+ return (MODULE_STAT_SCALING_ANCHOR +
16230
+ Math.floor(((stat - MODULE_STAT_SCALING_ANCHOR) * MODULE_STAT_SCALING_POST_ANCHOR_PERCENT) / 100));
16231
+ }
16232
+
14633
16233
  const U16_MAX = 65535;
14634
16234
  function packedModulesToInstalled(entries) {
14635
16235
  const installed = [];
@@ -14661,13 +16261,27 @@ function getSlotAmp(layout, slotIndex) {
14661
16261
  function idiv(a, b) {
14662
16262
  return Math.floor(a / b);
14663
16263
  }
14664
- function computeBaseHullmass$1(stats) {
16264
+ function toWholeEnergy$1(milli) {
16265
+ return idiv(milli + 500, 1000);
16266
+ }
16267
+ function isShipHull$1(itemId) {
16268
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16269
+ }
16270
+ function sumPackedShipChannels(stats) {
16271
+ let sum = 0;
16272
+ for (let slot = 0; slot < 5; slot++)
16273
+ sum += decodeStat(stats, slot);
16274
+ return sum;
16275
+ }
16276
+ function computeBaseHullmass$1(itemId, stats) {
16277
+ if (isShipHull$1(itemId)) {
16278
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumPackedShipChannels(stats))) / 10000);
16279
+ }
14665
16280
  const density = decodeStat(stats, 1);
14666
- return 100000 - 75 * density;
16281
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - density)) / 2000);
14667
16282
  }
14668
16283
  function computeBaseCapacityShip(stats) {
14669
- const s = decodeStat(stats, 0) + decodeStat(stats, 2);
14670
- return Math.floor(5000000 * 6 ** (s / 1998));
16284
+ return Math.floor(5000000 * 6 ** (sumPackedShipChannels(stats) / 4995));
14671
16285
  }
14672
16286
  function computeBaseCapacityContainer(stats) {
14673
16287
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
@@ -14679,35 +16293,57 @@ function computeBaseCapacityWarehouse(stats) {
14679
16293
  }
14680
16294
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
14681
16295
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
14682
- const ENGINE_DRAIN_BASE = 118;
16296
+ const ENGINE_DRAIN_BASE = 156;
14683
16297
  const ENGINE_DRAIN_REF_THRUST = 775;
14684
16298
  const ENGINE_DRAIN_REF_THM = 500;
14685
16299
  const computeTravelDrain = (totalThrust, avgThm) => {
14686
16300
  if (totalThrust <= 0)
14687
16301
  return 0;
14688
- const num = ENGINE_DRAIN_BASE * ENGINE_DRAIN_REF_THRUST * computeEngineDrain(avgThm);
14689
- const den = totalThrust * computeEngineDrain(ENGINE_DRAIN_REF_THM);
14690
- return idiv(num, den);
16302
+ const thermalFactor = computeEngineDrain(avgThm) / computeEngineDrain(ENGINE_DRAIN_REF_THM);
16303
+ const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16304
+ return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
14691
16305
  };
14692
- const computeGeneratorCap = (com) => 1300 + idiv(com, 2);
14693
- const computeGeneratorRech = (fin) => 2 * (1 + idiv(fin * 3, 1000));
16306
+ const computeGeneratorCap = (com) => 1300000 + com * 500;
16307
+ const computeGeneratorRech = (fin) => 2000 + fin * 6;
14694
16308
  const computeGathererYield = (str) => 200 + str;
14695
- const computeGathererDrain = (con) => 2 * Math.max(250, 1250 - idiv(con * 25, 20));
16309
+ const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
14696
16310
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
14697
16311
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
14698
16312
  const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
14699
16313
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
14700
- const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
16314
+ const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16315
+ const computeBuilderSpeed = (coh) => 100 + idiv(coh * 4, 5);
16316
+ const computeBuilderDrain = (tol) => Math.max(5000, 30000 - idiv(tol * 1000, 33));
14701
16317
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
14702
16318
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
14703
- const computeHaulerDrain$1 = (com) => Math.max(3, 15 - idiv(com, 80));
16319
+ const supportDrainTierPercent = (tier) => {
16320
+ const clampedTier = Math.min(10, Math.max(1, Math.trunc(tier)));
16321
+ return Math.max(50, 110 - clampedTier * 10);
16322
+ };
16323
+ const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16324
+ const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16325
+ const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
14704
16326
  const computeWarpRange = (stat) => 100 + stat * 3;
14705
- const computeCargoBayCapacity = (strength, density, hardness, cohesion) => 10000000 + idiv((strength + density + hardness + cohesion) * 50000000, 3996);
14706
- const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500 + idiv((volatility + thermal + plasticity + insulation) * 7500, 3996);
16327
+ const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16328
+ const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
14707
16329
  function entityDisplayName(itemId) {
14708
16330
  switch (itemId) {
14709
16331
  case ITEM_SHIP_T1_PACKED:
16332
+ return 'Ship';
16333
+ case ITEM_ROUSTABOUT_T1_PACKED:
14710
16334
  return 'Roustabout';
16335
+ case ITEM_PROSPECTOR_T1_PACKED:
16336
+ return 'Prospector';
16337
+ case ITEM_TENDER_T1_PACKED:
16338
+ return 'Tender';
16339
+ case ITEM_TUG_T1_PACKED:
16340
+ return 'Tug';
16341
+ case ITEM_PORTER_T1_PACKED:
16342
+ return 'Porter';
16343
+ case ITEM_WRANGLER_T1_PACKED:
16344
+ return 'Wrangler';
16345
+ case ITEM_DREDGER_T1_PACKED:
16346
+ return 'Dredger';
14711
16347
  case ITEM_WAREHOUSE_T1_PACKED:
14712
16348
  return 'Warehouse';
14713
16349
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -14721,7 +16357,7 @@ function entityDisplayName(itemId) {
14721
16357
  case ITEM_PROSPECTOR_T2_PACKED:
14722
16358
  return 'Prospector';
14723
16359
  case ITEM_HAULER_SHIP_T2_PACKED:
14724
- return 'Hauler';
16360
+ return 'Tug';
14725
16361
  default:
14726
16362
  return 'Entity';
14727
16363
  }
@@ -14739,6 +16375,8 @@ function moduleDisplayName(itemId) {
14739
16375
  return 'Shuttle Bay';
14740
16376
  case ITEM_CRAFTER_T1:
14741
16377
  return 'Fabricator';
16378
+ case ITEM_BUILDER_T1:
16379
+ return 'Assembly Arm';
14742
16380
  case ITEM_STORAGE_T1:
14743
16381
  return 'Cargo Hold';
14744
16382
  case ITEM_HAULER_T1:
@@ -14764,15 +16402,15 @@ function formatModuleLine(slot, itemId, stats) {
14764
16402
  const subtype = getModuleCapabilityType(itemId);
14765
16403
  switch (subtype) {
14766
16404
  case MODULE_ENGINE: {
14767
- const vol = decodeStat(stats, 0);
14768
- const thm = decodeStat(stats, 1);
16405
+ const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16406
+ const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
14769
16407
  out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
14770
16408
  break;
14771
16409
  }
14772
16410
  case MODULE_GENERATOR: {
14773
- const res = decodeStat(stats, 0);
14774
- const ref = decodeStat(stats, 1);
14775
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
16411
+ const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16412
+ const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16413
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
14776
16414
  break;
14777
16415
  }
14778
16416
  case MODULE_GATHERER: {
@@ -14780,7 +16418,7 @@ function formatModuleLine(slot, itemId, stats) {
14780
16418
  const tol = decodeStat(stats, 1);
14781
16419
  const con = decodeStat(stats, 2);
14782
16420
  const tier = getItem(itemId).tier;
14783
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${computeGathererDrain(con)}`;
16421
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
14784
16422
  break;
14785
16423
  }
14786
16424
  case MODULE_LOADER: {
@@ -14792,23 +16430,30 @@ function formatModuleLine(slot, itemId, stats) {
14792
16430
  case MODULE_CRAFTER: {
14793
16431
  const rea = decodeStat(stats, 0);
14794
16432
  const con = decodeStat(stats, 1);
14795
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(con)}`;
16433
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16434
+ break;
16435
+ }
16436
+ case MODULE_BUILDER: {
16437
+ const coh = decodeStat(stats, 0);
16438
+ const tol = decodeStat(stats, 1);
16439
+ out += ` Speed ${computeBuilderSpeed(coh)} Drain ${toWholeEnergy$1(computeBuilderDrain(tol))}`;
14796
16440
  break;
14797
16441
  }
14798
16442
  case MODULE_STORAGE: {
14799
16443
  const str = decodeStat(stats, 0);
14800
16444
  const den = decodeStat(stats, 1);
14801
16445
  const hrd = decodeStat(stats, 2);
14802
- const com = decodeStat(stats, 3);
14803
- out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd, com)}`;
16446
+ const coh = decodeStat(stats, 3);
16447
+ const tier = getItem(itemId).tier;
16448
+ out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd)} Drain ${toWholeEnergy$1(computeCargoBayDrain(coh, tier))}`;
14804
16449
  break;
14805
16450
  }
14806
16451
  case MODULE_HAULER: {
14807
16452
  const res = decodeStat(stats, 0);
14808
16453
  const pla = decodeStat(stats, 1);
14809
- const ref = decodeStat(stats, 2);
16454
+ const con = decodeStat(stats, 2);
14810
16455
  const tier = getItem(itemId).tier;
14811
- out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${computeHaulerDrain$1(ref)}`;
16456
+ out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${toWholeEnergy$1(computeHaulerDrain(con, tier))}`;
14812
16457
  break;
14813
16458
  }
14814
16459
  case MODULE_WARP: {
@@ -14821,18 +16466,16 @@ function formatModuleLine(slot, itemId, stats) {
14821
16466
  const thm = decodeStat(stats, 1);
14822
16467
  const pla = decodeStat(stats, 2);
14823
16468
  const ins = decodeStat(stats, 3);
14824
- out += ` Energy Capacity ${computeBatteryBankCapacity(vol, thm, pla, ins)}`;
16469
+ out += ` Energy Capacity ${toWholeEnergy$1(computeBatteryBankCapacity(vol, thm, pla, ins))}`;
14825
16470
  break;
14826
16471
  }
14827
16472
  }
14828
16473
  return out;
14829
16474
  }
14830
16475
  function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14831
- const hullMass = computeBaseHullmass$1(hullStats);
16476
+ const hullMass = computeBaseHullmass$1(itemId, hullStats);
14832
16477
  let baseCapacity = 0;
14833
- if (itemId === ITEM_SHIP_T1_PACKED ||
14834
- itemId === ITEM_PROSPECTOR_T2_PACKED ||
14835
- itemId === ITEM_HAULER_SHIP_T2_PACKED) {
16478
+ if (isShipHull$1(itemId)) {
14836
16479
  baseCapacity = computeBaseCapacityShip(hullStats);
14837
16480
  }
14838
16481
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
@@ -14857,31 +16500,45 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14857
16500
  return out;
14858
16501
  }
14859
16502
 
14860
- function computeBaseHullmass(stats) {
14861
- return 100000 - 75 * stats.density;
16503
+ const DEFAULT_BASE_HULLMASS = 100000;
16504
+ function getBaseHullmassFor(itemId) {
16505
+ return getEntityLayout(itemId)?.baseHullmass ?? DEFAULT_BASE_HULLMASS;
14862
16506
  }
14863
- function computeShipHullCapabilities(stats) {
14864
- const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
14865
- const exponent = statSum / 1998.0;
16507
+ function isShipHull(itemId) {
16508
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16509
+ }
16510
+ function sumHullStats(stats) {
16511
+ return Object.values(stats).reduce((sum, value) => sum + value, 0);
16512
+ }
16513
+ function computeBaseHullmass(itemId, stats) {
16514
+ if (isShipHull(itemId)) {
16515
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumHullStats(stats))) / 10000);
16516
+ }
16517
+ const lightness = stats.density ?? stats.hardness ?? 0;
16518
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - lightness)) / 2000);
16519
+ }
16520
+ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16521
+ const statSum = sumHullStats(stats);
16522
+ const exponent = statSum / 4995.0;
14866
16523
  return {
14867
- hullmass: computeBaseHullmass(stats),
16524
+ hullmass: computeBaseHullmass(itemId, stats),
14868
16525
  capacity: Math.floor(5000000 * 6 ** exponent),
14869
16526
  };
14870
16527
  }
14871
16528
  function computeEngineCapabilities(stats) {
14872
- const vol = stats.volatility;
14873
- const thm = stats.thermal;
16529
+ const vol = computeEffectiveModuleStat(stats.volatility);
16530
+ const thm = computeEffectiveModuleStat(stats.thermal);
14874
16531
  return {
14875
16532
  thrust: 400 + Math.floor((vol * 3) / 4),
14876
16533
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
14877
16534
  };
14878
16535
  }
14879
16536
  function computeGeneratorCapabilities(stats) {
14880
- const res = stats.resonance;
14881
- const ref = stats.reflectivity;
16537
+ const res = computeEffectiveModuleStat(stats.resonance);
16538
+ const ref = computeEffectiveModuleStat(stats.reflectivity);
14882
16539
  return {
14883
- capacity: 1300 + Math.floor(res / 2),
14884
- recharge: 2 * (1 + Math.floor((ref * 3) / 1000)),
16540
+ capacity: 1300000 + res * 500,
16541
+ recharge: 2000 + ref * 6,
14885
16542
  };
14886
16543
  }
14887
16544
  const GATHERER_DEPTH_TABLE = [
@@ -14907,11 +16564,11 @@ function gathererDepthForTier(tol, tier) {
14907
16564
  function computeGathererCapabilities(stats, tier) {
14908
16565
  const str = stats.strength;
14909
16566
  const con = stats.saturation;
14910
- const hrd = stats.hardness;
16567
+ const tol = stats.tolerance ?? stats.hardness;
14911
16568
  return {
14912
16569
  yield: 200 + str,
14913
- drain: 2 * Math.max(250, 1250 - Math.floor((con * 25) / 20)),
14914
- depth: gathererDepthForTier(hrd, tier),
16570
+ drain: 2 * Math.max(250000, 1250000 - con * 1250),
16571
+ depth: gathererDepthForTier(tol, tier),
14915
16572
  };
14916
16573
  }
14917
16574
  function computeLoaderCapabilities(stats) {
@@ -14928,7 +16585,15 @@ function computeCrafterCapabilities(stats) {
14928
16585
  const con = stats.conductivity;
14929
16586
  return {
14930
16587
  speed: 100 + Math.floor((fin * 4) / 5),
14931
- drain: Math.max(5, 30 - Math.floor(con / 33)),
16588
+ drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16589
+ };
16590
+ }
16591
+ function computeBuilderCapabilities(stats) {
16592
+ const coh = stats.cohesion;
16593
+ const tol = stats.tolerance;
16594
+ return {
16595
+ speed: 100 + Math.floor((coh * 4) / 5),
16596
+ drain: Math.max(5000, 30000 - Math.floor((tol * 1000) / 33)),
14932
16597
  };
14933
16598
  }
14934
16599
  function computeHaulerCapabilities(stats, tier) {
@@ -14938,7 +16603,7 @@ function computeHaulerCapabilities(stats, tier) {
14938
16603
  return {
14939
16604
  capacity: computeHaulerCapacity(resonance, tier),
14940
16605
  efficiency: 2000 + plasticity * 6,
14941
- drain: Math.max(3, 15 - Math.floor(conductivity / 80)),
16606
+ drain: computeHaulerDrain(conductivity, tier),
14942
16607
  };
14943
16608
  }
14944
16609
  function computeLauncherCapabilities(stats, amp = 100) {
@@ -14948,13 +16613,11 @@ function computeLauncherCapabilities(stats, amp = 100) {
14948
16613
  drain: stats.drain,
14949
16614
  };
14950
16615
  }
14951
- function computeStorageCapabilities(stats) {
14952
- const strength = stats.strength ?? 0;
14953
- const density = stats.density ?? 0;
14954
- const hardness = stats.hardness ?? 0;
14955
- const cohesion = stats.cohesion ?? 0;
14956
- const statSum = strength + density + hardness + cohesion;
14957
- return { capacity: 10000000 + Math.floor((statSum * 50000000) / 3996) };
16616
+ function computeStorageCapabilities(stats, tier) {
16617
+ return {
16618
+ capacity: computeCargoBayCapacity(stats.strength ?? 0, stats.density ?? 0, stats.hardness ?? 0),
16619
+ drain: computeCargoBayDrain(stats.cohesion ?? 0, tier),
16620
+ };
14958
16621
  }
14959
16622
  function computeBatteryCapabilities(stats) {
14960
16623
  const volatility = stats.volatility ?? 0;
@@ -14962,7 +16625,7 @@ function computeBatteryCapabilities(stats) {
14962
16625
  const plasticity = stats.plasticity ?? 0;
14963
16626
  const insulation = stats.insulation ?? 0;
14964
16627
  const statSum = volatility + thermal + plasticity + insulation;
14965
- return { capacity: 2500 + Math.floor((statSum * 7500) / 3996) };
16628
+ return { capacity: 2500000 + Math.floor((statSum * 7500000) / 3996) };
14966
16629
  }
14967
16630
  const CAPACITY_TIER_TABLE = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0, 3.4, 3.8, 4.2, 4.6];
14968
16631
  function capacityTierMultiplier(tier) {
@@ -14974,25 +16637,25 @@ function applyCapacityTier(baseCapacity, tier) {
14974
16637
  }
14975
16638
  function computeBaseCapacity(itemId, stats) {
14976
16639
  let base;
14977
- switch (itemId) {
14978
- case ITEM_SHIP_T1_PACKED:
14979
- case ITEM_PROSPECTOR_T2_PACKED:
14980
- case ITEM_HAULER_SHIP_T2_PACKED:
14981
- base = computeShipHullCapabilities(stats).capacity;
14982
- break;
14983
- case ITEM_EXTRACTOR_T1_PACKED:
14984
- case ITEM_FACTORY_T1_PACKED:
14985
- case ITEM_MASS_DRIVER_T1_PACKED:
14986
- case ITEM_MASS_CATCHER_T1_PACKED:
14987
- case ITEM_CONTAINER_T1_PACKED:
14988
- case ITEM_CONTAINER_T2_PACKED:
14989
- base = computeContainerCapabilities(stats).capacity;
14990
- break;
14991
- case ITEM_WAREHOUSE_T1_PACKED:
14992
- base = computeWarehouseHullCapabilities(stats).capacity;
14993
- break;
14994
- default:
14995
- return 0;
16640
+ if (isShipHull(itemId)) {
16641
+ base = computeShipHullCapabilities(stats, itemId).capacity;
16642
+ }
16643
+ else {
16644
+ switch (itemId) {
16645
+ case ITEM_EXTRACTOR_T1_PACKED:
16646
+ case ITEM_FACTORY_T1_PACKED:
16647
+ case ITEM_MASS_DRIVER_T1_PACKED:
16648
+ case ITEM_MASS_CATCHER_T1_PACKED:
16649
+ case ITEM_CONTAINER_T1_PACKED:
16650
+ case ITEM_CONTAINER_T2_PACKED:
16651
+ base = computeContainerCapabilities(stats).capacity;
16652
+ break;
16653
+ case ITEM_WAREHOUSE_T1_PACKED:
16654
+ base = computeWarehouseHullCapabilities(stats).capacity;
16655
+ break;
16656
+ default:
16657
+ return 0;
16658
+ }
14996
16659
  }
14997
16660
  return applyCapacityTier(base, getItem(itemId).tier);
14998
16661
  }
@@ -15004,7 +16667,7 @@ function computeWarehouseHullCapabilities(stats) {
15004
16667
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15005
16668
  const exponent = statSum / 1998.0;
15006
16669
  return {
15007
- hullmass: computeBaseHullmass(stats),
16670
+ hullmass: computeBaseHullmass(ITEM_WAREHOUSE_T1_PACKED, stats),
15008
16671
  capacity: Math.floor(100000000 * 6 ** exponent),
15009
16672
  };
15010
16673
  }
@@ -15025,11 +16688,15 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15025
16688
  let maxGathDepth = 0;
15026
16689
  let hasGatherer = false;
15027
16690
  let totalStorageCapacity = 0;
16691
+ let totalCargoHoldDrain = 0;
15028
16692
  const baseCapacity = computeBaseCapacity(itemId, stats);
15029
16693
  let installedModuleMass = 0;
15030
16694
  let totalCrafterSpeed = 0;
15031
16695
  let totalCrafterDrain = 0;
15032
16696
  let hasCrafter = false;
16697
+ let totalBuilderSpeed = 0;
16698
+ let totalBuilderDrain = 0;
16699
+ let hasBuilder = false;
15033
16700
  let totalHaulerCapacity = 0;
15034
16701
  let weightedHaulerEffNum = 0n;
15035
16702
  let totalHaulerDrain = 0;
@@ -15044,6 +16711,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15044
16711
  let totalBatteryCapacity = 0;
15045
16712
  const gathererLanes = [];
15046
16713
  const crafterLanes = [];
16714
+ const builderLanes = [];
15047
16715
  const loaderLanes = [];
15048
16716
  for (const mod of modules) {
15049
16717
  const item = getItem(mod.itemId);
@@ -15055,19 +16723,23 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15055
16723
  hasEngine = true;
15056
16724
  const caps = computeEngineCapabilities(decodedStats);
15057
16725
  totalThrust += applySlotMultiplier(caps.thrust, amp);
15058
- totalEngineThm += decodedStats.thermal ?? 0;
16726
+ totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
15059
16727
  engineCount += 1;
15060
16728
  }
15061
16729
  else if (modType === MODULE_GENERATOR) {
15062
16730
  hasGenerator = true;
15063
16731
  const caps = computeGeneratorCapabilities(decodedStats);
15064
- totalGenCapacity += applySlotMultiplier(caps.capacity, amp);
15065
- totalGenRecharge += applySlotMultiplier(caps.recharge, amp);
16732
+ totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16733
+ totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
15066
16734
  }
15067
16735
  else if (modType === MODULE_GATHERER) {
15068
16736
  hasGatherer = true;
15069
16737
  const tier = item.tier;
15070
- const caps = computeGathererCapabilities(decodedStats, tier);
16738
+ const caps = computeGathererCapabilities({
16739
+ strength: decodeStat(mod.stats, 0),
16740
+ tolerance: decodeStat(mod.stats, 1),
16741
+ saturation: decodeStat(mod.stats, 2),
16742
+ }, tier);
15071
16743
  const scaledYield = applySlotMultiplier(caps.yield, amp);
15072
16744
  totalGathYield += scaledYield;
15073
16745
  totalGathDrain += caps.drain;
@@ -15095,8 +16767,9 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15095
16767
  });
15096
16768
  }
15097
16769
  else if (modType === MODULE_STORAGE) {
15098
- const caps = computeStorageCapabilities(decodedStats);
16770
+ const caps = computeStorageCapabilities(decodedStats, item.tier);
15099
16771
  totalStorageCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16772
+ totalCargoHoldDrain += caps.drain;
15100
16773
  }
15101
16774
  else if (modType === MODULE_CRAFTER) {
15102
16775
  hasCrafter = true;
@@ -15111,6 +16784,19 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15111
16784
  outputPct: amp,
15112
16785
  });
15113
16786
  }
16787
+ else if (modType === MODULE_BUILDER) {
16788
+ hasBuilder = true;
16789
+ const caps = computeBuilderCapabilities(decodedStats);
16790
+ const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16791
+ totalBuilderSpeed += scaledSpeed;
16792
+ totalBuilderDrain += caps.drain;
16793
+ builderLanes.push({
16794
+ slotIndex: mod.slotIndex,
16795
+ speed: scaledSpeed,
16796
+ drain: caps.drain,
16797
+ outputPct: amp,
16798
+ });
16799
+ }
15114
16800
  else if (modType === MODULE_HAULER) {
15115
16801
  hasHauler = true;
15116
16802
  const caps = computeHaulerCapabilities(decodedStats, item.tier);
@@ -15145,12 +16831,20 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15145
16831
  totalGenCapacity += totalBatteryCapacity;
15146
16832
  }
15147
16833
  const result = {
15148
- hullmass: computeBaseHullmass(stats) + installedModuleMass,
16834
+ hullmass: computeBaseHullmass(itemId, stats) + installedModuleMass,
15149
16835
  capacity: clampUint32(baseCapacity + totalStorageCapacity),
15150
16836
  };
15151
16837
  if (hasEngine) {
15152
16838
  const avgThm = engineCount > 0 ? Math.trunc(totalEngineThm / engineCount) : 0;
15153
- result.engines = { thrust: totalThrust, drain: computeTravelDrain(totalThrust, avgThm) };
16839
+ const engineDrain = computeTravelDrain(totalThrust, avgThm);
16840
+ const totalDrain = clampUint32(engineDrain + totalCargoHoldDrain + totalHaulerDrain);
16841
+ result.engines = { thrust: totalThrust, drain: totalDrain };
16842
+ result.travelDrain = {
16843
+ engine: engineDrain,
16844
+ cargoHolds: totalCargoHoldDrain,
16845
+ tractorBeams: totalHaulerDrain,
16846
+ total: totalDrain,
16847
+ };
15154
16848
  }
15155
16849
  if (hasGenerator) {
15156
16850
  result.generator = {
@@ -15178,6 +16872,10 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15178
16872
  result.crafter = { speed: clampUint16(totalCrafterSpeed), drain: totalCrafterDrain };
15179
16873
  result.crafterLanes = crafterLanes;
15180
16874
  }
16875
+ if (hasBuilder) {
16876
+ result.builder = { speed: clampUint16(totalBuilderSpeed), drain: totalBuilderDrain };
16877
+ result.builderLanes = builderLanes;
16878
+ }
15181
16879
  if (hasHauler) {
15182
16880
  const efficiency = totalHaulerCapacity > 0 ? Number(weightedHaulerEffNum / BigInt(totalHaulerCapacity)) : 0;
15183
16881
  result.hauler = {
@@ -15205,7 +16903,7 @@ function computeContainerCapabilities(stats) {
15205
16903
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15206
16904
  const exponent = statSum / 1998.0;
15207
16905
  return {
15208
- hullmass: computeBaseHullmass(stats),
16906
+ hullmass: computeBaseHullmass(ITEM_CONTAINER_T1_PACKED, stats),
15209
16907
  capacity: Math.floor(22000000 * 6 ** exponent),
15210
16908
  };
15211
16909
  }
@@ -15271,7 +16969,7 @@ function makeEntity(packedItemId, state) {
15271
16969
  holds: [],
15272
16970
  };
15273
16971
  if (state.energy !== undefined)
15274
- info.energy = antelope.UInt16.from(state.energy);
16972
+ info.energy = antelope.UInt32.from(state.energy);
15275
16973
  if (kind === 'container') {
15276
16974
  info.modules = [];
15277
16975
  if (state.hullmass !== undefined)
@@ -15331,6 +17029,12 @@ function makeEntity(packedItemId, state) {
15331
17029
  drain: l.drain,
15332
17030
  output_pct: l.outputPct,
15333
17031
  }));
17032
+ info.builder_lanes = (caps.builderLanes ?? []).map((l) => exports.ServerTypes.builder_lane.from({
17033
+ slot_index: l.slotIndex,
17034
+ speed: l.speed,
17035
+ drain: l.drain,
17036
+ output_pct: l.outputPct,
17037
+ }));
15334
17038
  info.loader_lanes = (caps.loaderLanes ?? []).map((l) => exports.ServerTypes.loader_lane.from({
15335
17039
  slot_index: l.slotIndex,
15336
17040
  mass: l.mass,
@@ -15342,6 +17046,8 @@ function makeEntity(packedItemId, state) {
15342
17046
  info.gatherer_lanes = [];
15343
17047
  if (!info.crafter_lanes)
15344
17048
  info.crafter_lanes = [];
17049
+ if (!info.builder_lanes)
17050
+ info.builder_lanes = [];
15345
17051
  if (!info.loader_lanes)
15346
17052
  info.loader_lanes = [];
15347
17053
  const entityInfo = exports.ServerTypes.entity_info.from(info);
@@ -15357,7 +17063,13 @@ function calc_craft_duration(speed, totalInputMass) {
15357
17063
  }
15358
17064
  function calc_craft_energy(drain, totalInputMass) {
15359
17065
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
15360
- return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1), 4294967295));
17066
+ return antelope.UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
17067
+ }
17068
+ function calc_build_duration(speed, totalInputMass) {
17069
+ return calc_craft_duration(speed, totalInputMass);
17070
+ }
17071
+ function calc_build_energy(drain, totalInputMass) {
17072
+ return calc_craft_energy(drain, totalInputMass);
15361
17073
  }
15362
17074
 
15363
17075
  class PlotManager extends BaseManager {
@@ -15420,7 +17132,7 @@ class PlotManager extends BaseManager {
15420
17132
  recipe,
15421
17133
  progress,
15422
17134
  finalizeAction: antelope.Name.from('buildplot'),
15423
- finalizerCapability: 'crafter',
17135
+ finalizerCapability: 'builder',
15424
17136
  activeTask,
15425
17137
  scheduledBuild,
15426
17138
  };
@@ -15468,16 +17180,16 @@ class ConstructionManager extends BaseManager {
15468
17180
  continue;
15469
17181
  if (!coordsEqual(entity.coordinates, target.coordinates))
15470
17182
  continue;
15471
- const crafterLanes = entity.crafter_lanes ?? [];
15472
- if (crafterLanes.length === 0)
17183
+ const builderLanes = entity.builder_lanes ?? [];
17184
+ if (builderLanes.length === 0)
15473
17185
  continue;
15474
- const speed = crafterLanes.reduce((s, l) => s + Number(l.speed), 0);
17186
+ const speed = builderLanes.reduce((s, l) => s + Number(l.speed), 0);
15475
17187
  out.push({
15476
17188
  entityId: entity.id,
15477
17189
  entityType: entity.type,
15478
17190
  name: entity.entity_name,
15479
- capability: 'crafter',
15480
- crafterSpeed: speed,
17191
+ capability: 'builder',
17192
+ builderSpeed: speed,
15481
17193
  estimatedDuration: this.estimateFinalizeDuration(target, speed),
15482
17194
  });
15483
17195
  }
@@ -15499,12 +17211,12 @@ class ConstructionManager extends BaseManager {
15499
17211
  cumulativeSec += task.duration.toNumber();
15500
17212
  if (!isPushTask(task))
15501
17213
  continue;
15502
- if (!task.entitytarget)
17214
+ if (task.couplings.length === 0)
15503
17215
  continue;
15504
17216
  const projectedEndMs = startedMs + cumulativeSec * 1000;
15505
17217
  if (projectedEndMs < nowMs)
15506
17218
  continue;
15507
- const targetIdStr = task.entitytarget.entity_id.toString();
17219
+ const targetIdStr = task.couplings[0].counterpart.entity_id.toString();
15508
17220
  const etaSeconds = Math.max(0, Math.round((projectedEndMs - nowMs) / 1000));
15509
17221
  let perTarget = buckets.get(targetIdStr);
15510
17222
  if (!perTarget) {
@@ -15629,8 +17341,8 @@ class ConstructionManager extends BaseManager {
15629
17341
  return [];
15630
17342
  return reservationsOf(source);
15631
17343
  }
15632
- estimateFinalizeDuration(target, crafterSpeed) {
15633
- return calc_craft_duration(crafterSpeed, target.progress.massRequired);
17344
+ estimateFinalizeDuration(target, builderSpeed) {
17345
+ return calc_build_duration(builderSpeed, target.progress.massRequired);
15634
17346
  }
15635
17347
  static isConstructionKind(kind) {
15636
17348
  return CONSTRUCTION_KINDS.has(kind);
@@ -15723,18 +17435,18 @@ function isPushTask(task) {
15723
17435
  }
15724
17436
  function isBuildOfPlot(task, plotId) {
15725
17437
  return (task.type.toNumber() === exports.TaskType.BUILDPLOT &&
15726
- task.entitytarget !== undefined &&
15727
- task.entitytarget.entity_id.equals(plotId));
17438
+ task.couplings.length > 0 &&
17439
+ task.couplings[0].counterpart.entity_id.equals(plotId));
15728
17440
  }
15729
17441
  function reservationsOf(source) {
15730
17442
  const out = new Map();
15731
17443
  for (const task of getTasks(source)) {
15732
17444
  if (!isPushTask(task))
15733
17445
  continue;
15734
- if (!task.entitytarget)
17446
+ if (task.couplings.length === 0)
15735
17447
  continue;
15736
- const targetType = task.entitytarget.entity_type;
15737
- const targetId = task.entitytarget.entity_id;
17448
+ const targetType = task.couplings[0].counterpart.entity_type;
17449
+ const targetId = task.couplings[0].counterpart.entity_id;
15738
17450
  for (const c of task.cargo) {
15739
17451
  const itemId = c.item_id.toNumber();
15740
17452
  const quantity = c.quantity.toNumber();
@@ -15823,11 +17535,23 @@ function planRoute(params) {
15823
17535
  return { ok: false, reason: 'empty-destination' };
15824
17536
  }
15825
17537
  const straightLine = dist(origin, dest);
15826
- const heuristic = (c) => Math.ceil(dist(c, dest) / perLegReach);
17538
+ if (straightLine <= perLegReach) {
17539
+ const directCost = params.legCost?.({
17540
+ from: origin,
17541
+ to: dest,
17542
+ distance: straightLine,
17543
+ isDestination: true,
17544
+ });
17545
+ if (directCost !== null) {
17546
+ return { ok: true, waypoints: [dest], legs: 1, totalDistance: straightLine };
17547
+ }
17548
+ }
17549
+ const heuristic = (c) => params.heuristicCost?.(c, dest) ??
17550
+ (params.legCost ? 0 : Math.ceil(dist(c, dest) / perLegReach));
15827
17551
  const gScore = new Map([[key(origin), 0]]);
15828
17552
  const cameFrom = new Map();
15829
17553
  const frontier = [
15830
- { coord: origin, g: 0, f: heuristic(origin), remaining: straightLine },
17554
+ { coord: origin, legs: 0, cost: 0, f: heuristic(origin), remaining: straightLine },
15831
17555
  ];
15832
17556
  let furthest = origin;
15833
17557
  let furthestRemaining = dist(origin, dest);
@@ -15843,6 +17567,8 @@ function planRoute(params) {
15843
17567
  }
15844
17568
  }
15845
17569
  const current = frontier.splice(bestIdx, 1)[0];
17570
+ if (current.cost !== gScore.get(key(current.coord)))
17571
+ continue;
15846
17572
  if (sameCoord(current.coord, dest)) {
15847
17573
  return reconstruct(cameFrom, origin, dest);
15848
17574
  }
@@ -15856,20 +17582,33 @@ function planRoute(params) {
15856
17582
  const inCorridor = dist(origin, n.coord) + dist(n.coord, dest) <= straightLine + corridorSlack;
15857
17583
  if (!inCorridor)
15858
17584
  continue;
15859
- const tentativeG = current.g + 1;
15860
- if (tentativeG > maxLegs) {
17585
+ const tentativeLegs = current.legs + 1;
17586
+ if (tentativeLegs > maxLegs) {
15861
17587
  cappedByMaxLegs = true;
15862
17588
  continue;
15863
17589
  }
17590
+ const evaluatedCost = params.legCost?.({
17591
+ from: current.coord,
17592
+ to: n.coord,
17593
+ distance: n.dist,
17594
+ isDestination: sameCoord(n.coord, dest),
17595
+ });
17596
+ if (evaluatedCost === null)
17597
+ continue;
17598
+ const legCost = evaluatedCost ?? 1;
17599
+ if (!(legCost >= 0) || !Number.isFinite(legCost))
17600
+ continue;
15864
17601
  const nk = key(n.coord);
15865
- if (tentativeG < (gScore.get(nk) ?? Infinity)) {
15866
- gScore.set(nk, tentativeG);
17602
+ const nextCost = current.cost + legCost;
17603
+ if (nextCost < (gScore.get(nk) ?? Infinity)) {
17604
+ gScore.set(nk, nextCost);
15867
17605
  cameFrom.set(nk, current.coord);
15868
17606
  const remaining = dist(n.coord, dest);
15869
17607
  frontier.push({
15870
17608
  coord: n.coord,
15871
- g: tentativeG,
15872
- f: tentativeG + Math.ceil(remaining / perLegReach),
17609
+ legs: tentativeLegs,
17610
+ cost: nextCost,
17611
+ f: nextCost + heuristic(n.coord),
15873
17612
  remaining,
15874
17613
  });
15875
17614
  }
@@ -15919,47 +17658,22 @@ function reconstruct(cameFrom, origin, dest) {
15919
17658
  const waypoints = path.slice(1);
15920
17659
  return { ok: true, waypoints, legs: waypoints.length, totalDistance };
15921
17660
  }
15922
- let scanProvider = null;
15923
- const graphCache = new Map();
15924
- function setScanProvider(provider) {
15925
- scanProvider = provider;
15926
- graphCache.clear();
15927
- }
15928
- function sdkSystemGraph(seed) {
17661
+ const graphCache = new WeakMap();
17662
+ function sdkSystemGraph(seed, scan) {
15929
17663
  const s = antelope.Checksum256.from(seed);
15930
17664
  const seedHex = s.toString();
15931
- const cached = graphCache.get(seedHex);
17665
+ let bySeed = graphCache.get(scan);
17666
+ if (!bySeed) {
17667
+ bySeed = new Map();
17668
+ graphCache.set(scan, bySeed);
17669
+ }
17670
+ const cached = bySeed.get(seedHex);
15932
17671
  if (cached)
15933
17672
  return cached;
15934
- const graph = scanProvider ? wasmSystemGraph(s, seedHex, scanProvider) : jsSystemGraph(s);
15935
- graphCache.set(seedHex, graph);
17673
+ const graph = wasmSystemGraph(s, seedHex, scan);
17674
+ bySeed.set(seedHex, graph);
15936
17675
  return graph;
15937
17676
  }
15938
- function jsSystemGraph(s) {
15939
- return {
15940
- hasSystem: (c) => hasSystem(s, { x: c.x, y: c.y }) || wormholeAt(s, c.x, c.y) !== null,
15941
- nearby: (c, reachTiles) => {
15942
- const seen = new Set([`${c.x},${c.y}`]);
15943
- const out = [];
15944
- for (const d of findNearbyPlanets(s, { x: c.x, y: c.y }, reachTiles * PRECISION$1)) {
15945
- const coord = { x: Number(d.destination.x), y: Number(d.destination.y) };
15946
- const k = `${coord.x},${coord.y}`;
15947
- if (seen.has(k))
15948
- continue;
15949
- seen.add(k);
15950
- out.push({ coord, dist: Number(d.distance) / PRECISION$1 });
15951
- }
15952
- for (const coord of nearbyWormholes(s, c.x, c.y, reachTiles)) {
15953
- const k = `${coord.x},${coord.y}`;
15954
- if (seen.has(k))
15955
- continue;
15956
- seen.add(k);
15957
- out.push({ coord, dist: Math.hypot(coord.x - c.x, coord.y - c.y) });
15958
- }
15959
- return out;
15960
- },
15961
- };
15962
- }
15963
17677
  const SCAN_BUCKET = 48;
15964
17678
  function wasmSystemGraph(s, seedHex, scan) {
15965
17679
  const bucketCache = new Map();
@@ -16012,21 +17726,120 @@ function wasmSystemGraph(s, seedHex, scan) {
16012
17726
  };
16013
17727
  }
16014
17728
 
16015
- function computePerLegReach(s, haulCount = 0) {
17729
+ function computePerLegReach(s) {
16016
17730
  const capacity = s.generator?.capacity;
16017
17731
  const drain = s.engines?.drain;
16018
17732
  if (capacity === undefined || drain === undefined || drain === 0n) {
16019
17733
  throw new Error('entity has no usable engine/generator (cannot compute per-leg reach)');
16020
17734
  }
16021
- const haulDrain = s.hauler && haulCount > 0 ? s.hauler.drain * BigInt(haulCount) : 0n;
16022
- return Number(capacity) / Number(drain + haulDrain);
17735
+ return Number(capacity) / Number(drain);
16023
17736
  }
16024
- function computeGroupPerLegReach(participants, haulCount) {
17737
+ function computeGroupPerLegReach(participants) {
16025
17738
  const movers = participants.filter((p) => p.engines !== undefined && p.engines.drain !== 0n);
16026
17739
  if (movers.length === 0) {
16027
17740
  throw new Error('group has no moving entity (cannot compute per-leg reach)');
16028
17741
  }
16029
- return Math.min(...movers.map((p) => computePerLegReach(p, haulCount)));
17742
+ return Math.min(...movers.map(computePerLegReach));
17743
+ }
17744
+
17745
+ function simulateRoute(movers, waypoints, origin, recharge) {
17746
+ const totalThrust = movers
17747
+ .filter((m) => m.hasMovement && m.engines)
17748
+ .reduce((sum, m) => sum + m.engines.thrust, 0);
17749
+ const totalMass = movers.reduce((sum, m) => sum + m.mass, 0);
17750
+ const haulCount = movers.filter((m) => !m.hasMovement).length;
17751
+ const pooledHaulCap = movers
17752
+ .filter((m) => m.hasMovement && m.hauler)
17753
+ .reduce((sum, m) => sum + m.hauler.capacity, 0);
17754
+ const weightedHaulEffNum = movers
17755
+ .filter((m) => m.hasMovement && m.hauler)
17756
+ .reduce((sum, m) => sum + m.hauler.efficiency * m.hauler.capacity, 0);
17757
+ const energyByMover = new Map(movers.map((m) => [String(m.ref.entityId), m.energy]));
17758
+ let reachable = true;
17759
+ const legs = [];
17760
+ const mobilityBarrier = movers
17761
+ .filter((m) => m.hasMovement)
17762
+ .reduce((mx, m) => Math.max(mx, m.priorMobilityEnd, m.narrowBarrierEnd), 0);
17763
+ const rechargeFloor = movers
17764
+ .filter((m) => m.hasMovement && m.generator)
17765
+ .reduce((mx, m) => Math.max(mx, m.allLanesEnd ?? 0), 0);
17766
+ let clock = 0;
17767
+ let from = origin;
17768
+ for (const to of waypoints) {
17769
+ const distance = distanceBetweenPoints(from.x, from.y, to.x, to.y);
17770
+ const distanceNum = Number(distance);
17771
+ const distanceCells = distanceNum / PRECISION;
17772
+ const energyCostByMover = {};
17773
+ for (const m of movers) {
17774
+ if (!m.hasMovement || !m.engines)
17775
+ continue;
17776
+ const key = String(m.ref.entityId);
17777
+ energyCostByMover[key] = Number(calc_energyusage(distance, m.engines.drain));
17778
+ }
17779
+ let rechargeBefore = false;
17780
+ let rechargeSeconds = 0;
17781
+ if (recharge) {
17782
+ let maxDur = 0;
17783
+ for (const m of movers) {
17784
+ if (!m.hasMovement || !m.generator)
17785
+ continue;
17786
+ const key = String(m.ref.entityId);
17787
+ const curEnergy = energyByMover.get(key) ?? 0;
17788
+ const dur = Number(calc_rechargetime(m.generator.capacity, curEnergy, m.generator.recharge));
17789
+ if (dur > maxDur)
17790
+ maxDur = dur;
17791
+ }
17792
+ rechargeSeconds = maxDur;
17793
+ rechargeBefore = rechargeSeconds > 0;
17794
+ if (rechargeBefore) {
17795
+ for (const m of movers) {
17796
+ if (!m.hasMovement || !m.generator)
17797
+ continue;
17798
+ const key = String(m.ref.entityId);
17799
+ energyByMover.set(key, m.generator.capacity);
17800
+ }
17801
+ clock = Math.max(clock, rechargeFloor) + rechargeSeconds;
17802
+ }
17803
+ }
17804
+ for (const m of movers) {
17805
+ if (!m.hasMovement || !m.engines)
17806
+ continue;
17807
+ const key = String(m.ref.entityId);
17808
+ const cost = energyCostByMover[key] ?? 0;
17809
+ const curEnergy = energyByMover.get(key) ?? 0;
17810
+ if (recharge && m.generator) {
17811
+ if (cost > m.generator.capacity)
17812
+ reachable = false;
17813
+ }
17814
+ else {
17815
+ if (cost > curEnergy)
17816
+ reachable = false;
17817
+ }
17818
+ }
17819
+ const flightSeconds = Number(calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHaulEffNum, totalMass, distance));
17820
+ if (flightSeconds > TRAVEL_MAX_DURATION)
17821
+ reachable = false;
17822
+ for (const m of movers) {
17823
+ if (!m.hasMovement || !m.engines)
17824
+ continue;
17825
+ const key = String(m.ref.entityId);
17826
+ const cost = energyCostByMover[key] ?? 0;
17827
+ const curEnergy = energyByMover.get(key) ?? 0;
17828
+ energyByMover.set(key, Math.max(0, curEnergy - cost));
17829
+ }
17830
+ clock = Math.max(clock, mobilityBarrier) + flightSeconds;
17831
+ legs.push({
17832
+ from,
17833
+ to,
17834
+ distanceCells,
17835
+ energyCostByMover,
17836
+ rechargeBefore,
17837
+ rechargeSeconds,
17838
+ flightSeconds,
17839
+ });
17840
+ from = to;
17841
+ }
17842
+ return { legs, totalSeconds: clock, reachable };
16030
17843
  }
16031
17844
 
16032
17845
  function laneKeyForModule(slotIndex) {
@@ -16082,6 +17895,23 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
16082
17895
  const drain = computeCrafterDrain(fin);
16083
17896
  return { slotIndex: idx, speed, drain, outputPct: amp };
16084
17897
  }
17898
+ function resolveLaneBuilder(modules, entityItemId, laneKey) {
17899
+ const idx = laneKey - 1;
17900
+ const installed = idx >= 0 && idx < modules.length ? modules[idx].installed : undefined;
17901
+ if (!installed)
17902
+ throw new Error('builder lane has no module');
17903
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
17904
+ if (item.moduleType !== 'builder')
17905
+ throw new Error('lane module is not a builder');
17906
+ const stats = BigInt(installed.stats.toString());
17907
+ const coh = decodeStat(stats, 0);
17908
+ const tol = decodeStat(stats, 1);
17909
+ const layout = getEntityLayout(entityItemId)?.slots ?? [];
17910
+ const amp = getSlotAmp(layout, idx);
17911
+ const speed = applySlotMultiplier(computeBuilderSpeed(coh), amp);
17912
+ const drain = computeBuilderDrain(tol);
17913
+ return { slotIndex: idx, speed, drain, outputPct: amp };
17914
+ }
16085
17915
  function resolveLaneLoader(modules, entityItemId, laneKey) {
16086
17916
  if (laneKey === LANE_MOBILITY) {
16087
17917
  return { slotIndex: -1, thrust: 0, mass: 0, outputPct: 0, valid: false };
@@ -16389,6 +18219,10 @@ function recomputeCaps(entity) {
16389
18219
  hullStats.strength = decodeStat(entity.stats, 0);
16390
18220
  if (hullStats.hardness === undefined)
16391
18221
  hullStats.hardness = decodeStat(entity.stats, 2);
18222
+ if (itemId === ITEM_SHIP_T1_PACKED) {
18223
+ hullStats.__legacyShipChannel3 = decodeStat(entity.stats, 3);
18224
+ hullStats.__legacyShipChannel4 = decodeStat(entity.stats, 4);
18225
+ }
16392
18226
  const layout = getEntityLayout(itemId)?.slots ?? [];
16393
18227
  const installed = toInstalledModules(entity.modules);
16394
18228
  const caps = computeEntityCapabilities(hullStats, itemId, installed, layout);
@@ -16411,6 +18245,12 @@ function recomputeCaps(entity) {
16411
18245
  drain: l.drain,
16412
18246
  output_pct: l.outputPct,
16413
18247
  });
18248
+ const toBuilderLane = (l) => exports.ServerTypes.builder_lane.from({
18249
+ slot_index: l.slotIndex,
18250
+ speed: l.speed,
18251
+ drain: l.drain,
18252
+ output_pct: l.outputPct,
18253
+ });
16414
18254
  return {
16415
18255
  hullmass: antelope.UInt32.from(caps.hullmass),
16416
18256
  capacity: antelope.UInt32.from(caps.capacity),
@@ -16421,6 +18261,7 @@ function recomputeCaps(entity) {
16421
18261
  loaderLanes: (caps.loaderLanes ?? []).map(toLoaderLane),
16422
18262
  gathererLanes: (caps.gathererLanes ?? []).map(toGathererLane),
16423
18263
  crafterLanes: (caps.crafterLanes ?? []).map(toCrafterLane),
18264
+ builderLanes: (caps.builderLanes ?? []).map(toBuilderLane),
16424
18265
  hauler: caps.hauler
16425
18266
  ? exports.ServerTypes.hauler_stats.from({
16426
18267
  capacity: caps.hauler.capacity,
@@ -16457,6 +18298,7 @@ function createProjectedEntity(entity) {
16457
18298
  const loaderLanes = entity.loader_lanes ?? caps?.loaderLanes ?? [];
16458
18299
  const gathererLanes = entity.gatherer_lanes ?? caps?.gathererLanes ?? [];
16459
18300
  const crafterLanes = entity.crafter_lanes ?? caps?.crafterLanes ?? [];
18301
+ const builderLanes = entity.builder_lanes ?? caps?.builderLanes ?? [];
16460
18302
  const engines = entity.engines ?? caps?.engines;
16461
18303
  const generator = entity.generator ?? caps?.generator;
16462
18304
  const hauler = entity.hauler ?? caps?.hauler;
@@ -16465,7 +18307,7 @@ function createProjectedEntity(entity) {
16465
18307
  const cargo = entity.cargo.map(cargoItemToStack);
16466
18308
  const projected = {
16467
18309
  location: Coordinates.from(entity.coordinates),
16468
- energy: antelope.UInt16.from(entity.energy ?? 0),
18310
+ energy: antelope.UInt32.from(entity.energy ?? 0),
16469
18311
  cargo,
16470
18312
  shipMass,
16471
18313
  capacity: capacity ? antelope.UInt64.from(capacity) : undefined,
@@ -16476,6 +18318,7 @@ function createProjectedEntity(entity) {
16476
18318
  loaderLanes,
16477
18319
  gathererLanes,
16478
18320
  crafterLanes,
18321
+ builderLanes,
16479
18322
  get cargoMass() {
16480
18323
  return calcStacksMass(this.cargo);
16481
18324
  },
@@ -16521,13 +18364,13 @@ function applyRechargeTask(projected, _task, options) {
16521
18364
  if (!projected.generator)
16522
18365
  return;
16523
18366
  if (options.complete) {
16524
- projected.energy = antelope.UInt16.from(projected.generator.capacity);
18367
+ projected.energy = antelope.UInt32.from(projected.generator.capacity);
16525
18368
  }
16526
18369
  else if (options.progress !== undefined) {
16527
18370
  const capacity = Number(projected.generator.capacity);
16528
18371
  const currentEnergy = Number(projected.energy);
16529
18372
  const rechargeAmount = (capacity - currentEnergy) * options.progress;
16530
- projected.energy = antelope.UInt16.from(Math.min(capacity, currentEnergy + rechargeAmount));
18373
+ projected.energy = antelope.UInt32.from(Math.min(capacity, currentEnergy + rechargeAmount));
16531
18374
  }
16532
18375
  }
16533
18376
  function applyFlightTask(projected, task, options) {
@@ -16546,8 +18389,8 @@ function applyFlightTask(projected, task, options) {
16546
18389
  });
16547
18390
  const partialEnergy = antelope.UInt64.from(Math.floor(Number(task.energy_cost ?? 0) * options.progress));
16548
18391
  projected.energy = projected.energy.gt(partialEnergy)
16549
- ? antelope.UInt16.from(projected.energy.subtracting(partialEnergy))
16550
- : antelope.UInt16.from(0);
18392
+ ? antelope.UInt32.from(projected.energy.subtracting(partialEnergy))
18393
+ : antelope.UInt32.from(0);
16551
18394
  }
16552
18395
  }
16553
18396
  function addCargoItem(projected, item) {
@@ -16569,16 +18412,16 @@ function applyRemoveCargoTask(projected, task) {
16569
18412
  function applyEnergyCost(projected, task) {
16570
18413
  if (!task.energy_cost)
16571
18414
  return;
16572
- const energyCost = antelope.UInt16.from(task.energy_cost);
18415
+ const energyCost = antelope.UInt32.from(task.energy_cost);
16573
18416
  projected.energy = projected.energy.gt(energyCost)
16574
- ? antelope.UInt16.from(projected.energy.subtracting(energyCost))
16575
- : antelope.UInt16.from(0);
18417
+ ? antelope.UInt32.from(projected.energy.subtracting(energyCost))
18418
+ : antelope.UInt32.from(0);
16576
18419
  }
16577
18420
  function applyGatherTask(projected, task, options) {
16578
18421
  if (!options.complete)
16579
18422
  return;
16580
18423
  applyEnergyCost(projected, task);
16581
- if (!task.entitytarget) {
18424
+ if (task.couplings.length === 0) {
16582
18425
  applyAddCargoTask(projected, task);
16583
18426
  }
16584
18427
  }
@@ -16589,12 +18432,8 @@ function applyCraftTask(projected, task) {
16589
18432
  for (let i = 0; i < task.cargo.length - 1; i++) {
16590
18433
  removeCargoItem(projected, task.cargo[i]);
16591
18434
  }
16592
- addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16593
- }
16594
- function applyDeployTask(projected, task) {
16595
- applyEnergyCost(projected, task);
16596
- if (task.cargo.length > 0) {
16597
- removeCargoItem(projected, task.cargo[0]);
18435
+ if (task.couplings.length === 0) {
18436
+ addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16598
18437
  }
16599
18438
  }
16600
18439
  function applyTask(projected, task) {
@@ -16620,9 +18459,6 @@ function applyTask(projected, task) {
16620
18459
  case exports.TaskType.CRAFT:
16621
18460
  applyCraftTask(projected, task);
16622
18461
  break;
16623
- case exports.TaskType.DEPLOY:
16624
- applyDeployTask(projected, task);
16625
- break;
16626
18462
  case exports.TaskType.UNDEPLOY:
16627
18463
  case exports.TaskType.DEMOLISH:
16628
18464
  break;
@@ -16760,10 +18596,6 @@ function projectEntityAt(entity, now) {
16760
18596
  if (taskComplete)
16761
18597
  applyCraftTask(projected, task);
16762
18598
  break;
16763
- case exports.TaskType.DEPLOY:
16764
- if (taskComplete)
16765
- applyDeployTask(projected, task);
16766
- break;
16767
18599
  case exports.TaskType.UNDEPLOY:
16768
18600
  case exports.TaskType.DEMOLISH:
16769
18601
  break;
@@ -16790,7 +18622,7 @@ function taskCargoChanges(task) {
16790
18622
  case exports.TaskType.UNWRAP:
16791
18623
  return items.map((i) => toChange(i, 'in'));
16792
18624
  case exports.TaskType.GATHER:
16793
- return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
18625
+ return task.couplings.length > 0 ? [] : items.map((i) => toChange(i, 'in'));
16794
18626
  case exports.TaskType.UNLOAD:
16795
18627
  return items.map((i) => toChange(i, 'out'));
16796
18628
  case exports.TaskType.CRAFT:
@@ -16803,6 +18635,49 @@ function taskCargoChanges(task) {
16803
18635
  }
16804
18636
  }
16805
18637
 
18638
+ const JOB_QUEUE_CAP = 25;
18639
+ function activeOn(jobs, socket, now) {
18640
+ return jobs
18641
+ .filter((j) => j.socket === socket && j.completesAt > now)
18642
+ .sort((a, b) => a.startsAt.getTime() - b.startsAt.getTime());
18643
+ }
18644
+ function jobsToLanes(jobs, socketCount, now) {
18645
+ const lanes = [];
18646
+ for (let socket = 0; socket < socketCount; socket++) {
18647
+ const entries = [];
18648
+ let cursor = null;
18649
+ for (const j of activeOn(jobs, socket, now)) {
18650
+ if (cursor && j.startsAt > cursor) {
18651
+ entries.push({ kind: 'idle', startsAt: cursor, completesAt: j.startsAt });
18652
+ }
18653
+ entries.push({ kind: 'job', startsAt: j.startsAt, completesAt: j.completesAt, job: j });
18654
+ cursor = j.completesAt;
18655
+ }
18656
+ lanes.push({ socket, entries });
18657
+ }
18658
+ return lanes;
18659
+ }
18660
+ function socketTail(jobs, socket, now) {
18661
+ const active = activeOn(jobs, socket, now);
18662
+ const last = active[active.length - 1];
18663
+ return last && last.completesAt > now ? last.completesAt : now;
18664
+ }
18665
+ function pickFabricator(jobs, sockets, durationBySocketMinutes, now) {
18666
+ let best = null;
18667
+ for (let slot = 0; slot < sockets.length; slot++) {
18668
+ if (!sockets[slot].open)
18669
+ continue;
18670
+ if (activeOn(jobs, slot, now).length >= JOB_QUEUE_CAP)
18671
+ continue;
18672
+ const startsAt = socketTail(jobs, slot, now);
18673
+ const completesAt = new Date(startsAt.getTime() + durationBySocketMinutes[slot] * 60000);
18674
+ if (!best || completesAt < best.completesAt) {
18675
+ best = { slot, startsAt, completesAt };
18676
+ }
18677
+ }
18678
+ return best;
18679
+ }
18680
+
16806
18681
  function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
16807
18682
  const ids = [];
16808
18683
  const seen = new Set();
@@ -16837,15 +18712,16 @@ function taskCargoEffect(task) {
16837
18712
  case exports.TaskType.UNLOAD:
16838
18713
  return { added: [], removed: task.cargo };
16839
18714
  case exports.TaskType.GATHER:
16840
- return task.entitytarget ? { added: [], removed: [] } : { added: task.cargo, removed: [] };
18715
+ return task.couplings.length > 0
18716
+ ? { added: [], removed: [] }
18717
+ : { added: task.cargo, removed: [] };
16841
18718
  case exports.TaskType.CRAFT:
16842
18719
  if (task.cargo.length === 0)
16843
18720
  return { added: [], removed: [] };
16844
- return { added: [task.cargo[task.cargo.length - 1]], removed: task.cargo.slice(0, -1) };
16845
- case exports.TaskType.DEPLOY:
16846
- return task.cargo.length > 0
16847
- ? { added: [], removed: [task.cargo[0]] }
16848
- : { added: [], removed: [] };
18721
+ return {
18722
+ added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18723
+ removed: task.cargo.slice(0, -1),
18724
+ };
16849
18725
  default:
16850
18726
  return { added: [], removed: [] };
16851
18727
  }
@@ -17023,31 +18899,24 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
17023
18899
  effects.abandonsRunning = true;
17024
18900
  if (t.energy_cost)
17025
18901
  energyForfeited += t.energy_cost.toNumber();
17026
- if (t.type.equals(exports.TaskType.BUILDPLOT) && t.entitytarget)
17027
- effects.keepsPlotDeposits = { plot: t.entitytarget };
17028
- if (t.hold && t.entitytarget) {
17029
- const counterpart = input.counterparts?.get(t.entitytarget.entity_id.toString());
17030
- const hold = (counterpart?.holds ?? []).find((h) => h.id.equals(t.hold)) ??
17031
- (entity.holds ?? []).find((h) => h.id.equals(t.hold));
17032
- if (hold) {
17033
- const kind = hold.kind.toNumber();
17034
- effects.releasedHolds.push({ counterpart: t.entitytarget, kind });
17035
- if (kind === 1 ) {
17036
- effects.refunds.push({ giver: t.entitytarget, cargo: t.cargo });
17037
- const giver = counterpart;
17038
- if (giver) {
17039
- const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
17040
- const cap = giver.capacity
17041
- ? giver.capacity.toNumber()
17042
- : Number.MAX_SAFE_INTEGER;
17043
- if (giver.cargomass.toNumber() + returned > cap) {
17044
- return {
17045
- ok: false,
17046
- blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
17047
- range,
17048
- effects: { ...EMPTY_EFFECTS },
17049
- };
17050
- }
18902
+ if (t.type.equals(exports.TaskType.BUILDPLOT) && t.couplings.length > 0)
18903
+ effects.keepsPlotDeposits = { plot: t.couplings[0].counterpart };
18904
+ for (const c of t.couplings) {
18905
+ const kind = c.kind.toNumber();
18906
+ effects.releasedHolds.push({ counterpart: c.counterpart, kind });
18907
+ if (kind === exports.HoldKind.PULL) {
18908
+ effects.refunds.push({ giver: c.counterpart, cargo: t.cargo });
18909
+ const giver = input.counterparts?.get(c.counterpart.entity_id.toString());
18910
+ if (giver) {
18911
+ const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
18912
+ const cap = giver.capacity ? giver.capacity.toNumber() : Number.MAX_SAFE_INTEGER;
18913
+ if (giver.cargomass.toNumber() + returned > cap) {
18914
+ return {
18915
+ ok: false,
18916
+ blockedReason: exports.CancelBlockReason.WOULD_OVERFILL,
18917
+ range,
18918
+ effects: { ...EMPTY_EFFECTS },
18919
+ };
17051
18920
  }
17052
18921
  }
17053
18922
  }
@@ -17080,7 +18949,7 @@ function derivedLoaders(lanes) {
17080
18949
  function acceleration(thrust, mass) {
17081
18950
  if (mass <= 0)
17082
18951
  return 0;
17083
- return (thrust / mass) * PRECISION$1;
18952
+ return (thrust / mass) * PRECISION;
17084
18953
  }
17085
18954
  function flightTime(distance, accel) {
17086
18955
  if (accel <= 0 || distance <= 0)
@@ -17090,7 +18959,7 @@ function flightTime(distance, accel) {
17090
18959
  function distance2d(ax, ay, bx, by) {
17091
18960
  const dx = ax - bx;
17092
18961
  const dy = ay - by;
17093
- return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION$1);
18962
+ return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION);
17094
18963
  }
17095
18964
  function unwrapTransitDuration(itemMass, origin, dest) {
17096
18965
  if (itemMass <= 0)
@@ -17255,10 +19124,10 @@ function hasGatherer(e) {
17255
19124
  function maxTravelDistance(entity) {
17256
19125
  return antelope.UInt32.from(entity.generator.capacity)
17257
19126
  .dividing(entity.engines.drain)
17258
- .multiplying(PRECISION$1);
19127
+ .multiplying(PRECISION);
17259
19128
  }
17260
19129
  function calcEnergyUsage(entity, distance) {
17261
- return distance.dividing(PRECISION$1).multiplying(entity.engines.drain);
19130
+ return distance.multiplying(entity.engines.drain).dividing(PRECISION);
17262
19131
  }
17263
19132
  function energyPercent(entity) {
17264
19133
  return (Number(entity.energy) / Number(entity.generator.capacity)) * 100;
@@ -17293,13 +19162,12 @@ function calc_gather_rate(gatherer, itemMass, stratum, richness) {
17293
19162
  function calc_gather_energy(gatherer, duration) {
17294
19163
  if (duration <= 0)
17295
19164
  return antelope.UInt32.from(0);
17296
- const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION$1);
17297
- return antelope.UInt32.from(Math.min(Math.max(raw, 1), 4294967295));
19165
+ const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION);
19166
+ return antelope.UInt32.from(Math.min(Math.max(raw, 1000), 4294967295));
17298
19167
  }
17299
19168
 
17300
19169
  const BASE_HAUL_PENALTY_MILLI = 300;
17301
19170
  const HAULER_EFFICIENCY_DENOM = 10000;
17302
- const PRECISION = 10000;
17303
19171
  function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17304
19172
  if (haulCount === 0)
17305
19173
  return totalThrust;
@@ -17308,9 +19176,6 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17308
19176
  HAULER_EFFICIENCY_DENOM);
17309
19177
  return Math.floor((totalThrust * 1000) / penaltyMilli);
17310
19178
  }
17311
- function computeHaulerDrain(distance, drain, haulCount) {
17312
- return Math.floor(distance / PRECISION) * drain * haulCount;
17313
- }
17314
19179
 
17315
19180
  const categoryColors = {
17316
19181
  ore: '#C26D3F',
@@ -17467,8 +19332,17 @@ const capabilityAttributes = [
17467
19332
  attribute: 'capacity',
17468
19333
  description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
17469
19334
  },
19335
+ {
19336
+ capability: 'Storage',
19337
+ attribute: 'drain',
19338
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
19339
+ },
17470
19340
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
17471
- { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
19341
+ {
19342
+ capability: 'Movement',
19343
+ attribute: 'drain',
19344
+ description: 'Total installed energy consumed per tile of normal travel',
19345
+ },
17472
19346
  {
17473
19347
  capability: 'Energy',
17474
19348
  attribute: 'capacity',
@@ -17509,7 +19383,7 @@ const capabilityAttributes = [
17509
19383
  {
17510
19384
  capability: 'Hauling',
17511
19385
  attribute: 'drain',
17512
- description: 'Energy consumed per target during haul-beam operation',
19386
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
17513
19387
  },
17514
19388
  ];
17515
19389
  const invertedAttributes = new Set(['drain', 'mass']);
@@ -17875,6 +19749,20 @@ function rollupCrafter(lanes) {
17875
19749
  drain: antelope.UInt32.from(totalDrain),
17876
19750
  };
17877
19751
  }
19752
+ function rollupBuilder(lanes) {
19753
+ if (lanes.length === 0)
19754
+ return undefined;
19755
+ let totalSpeed = 0;
19756
+ let totalDrain = 0;
19757
+ for (const l of lanes) {
19758
+ totalSpeed += Number(l.speed);
19759
+ totalDrain += Number(l.drain);
19760
+ }
19761
+ return {
19762
+ speed: antelope.UInt16.from(Math.min(totalSpeed, 65535)),
19763
+ drain: antelope.UInt32.from(totalDrain),
19764
+ };
19765
+ }
17878
19766
  function rollupLoaders(lanes) {
17879
19767
  if (lanes.length === 0)
17880
19768
  return undefined;
@@ -17978,8 +19866,8 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
17978
19866
  return {
17979
19867
  capability: 'Generator',
17980
19868
  attributes: [
17981
- { label: 'Capacity', value: caps.capacity },
17982
- { label: 'Recharge', value: caps.recharge },
19869
+ { label: 'Capacity', value: toWholeEnergy$1(caps.capacity) },
19870
+ { label: 'Recharge', value: toWholeEnergy$1(caps.recharge) },
17983
19871
  ],
17984
19872
  };
17985
19873
  }
@@ -17989,7 +19877,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
17989
19877
  capability: 'Gatherer',
17990
19878
  attributes: [
17991
19879
  { label: 'Yield', value: caps.yield },
17992
- { label: 'Drain', value: caps.drain },
19880
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
17993
19881
  { label: 'Depth', value: caps.depth },
17994
19882
  ],
17995
19883
  };
@@ -18011,7 +19899,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18011
19899
  capability: 'Crafting',
18012
19900
  attributes: [
18013
19901
  { label: 'Speed', value: caps.speed },
18014
- { label: 'Drain', value: caps.drain },
19902
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18015
19903
  ],
18016
19904
  };
18017
19905
  }
@@ -18022,12 +19910,12 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18022
19910
  attributes: [
18023
19911
  { label: 'Capacity', value: caps.capacity },
18024
19912
  { label: 'Efficiency', value: caps.efficiency },
18025
- { label: 'Drain', value: caps.drain },
19913
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18026
19914
  ],
18027
19915
  };
18028
19916
  }
18029
19917
  case MODULE_STORAGE: {
18030
- const caps = computeStorageCapabilities(stats);
19918
+ const caps = computeStorageCapabilities(stats, tier);
18031
19919
  return {
18032
19920
  capability: 'Storage',
18033
19921
  attributes: [
@@ -18035,6 +19923,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18035
19923
  label: 'Cargo Capacity',
18036
19924
  value: applySlotMultiplierUint32(caps.capacity, outputPct),
18037
19925
  },
19926
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18038
19927
  ],
18039
19928
  };
18040
19929
  }
@@ -18045,7 +19934,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18045
19934
  attributes: [
18046
19935
  {
18047
19936
  label: 'Energy Capacity',
18048
- value: applySlotMultiplierUint32(caps.capacity, outputPct),
19937
+ value: toWholeEnergy$1(applySlotMultiplierUint32(caps.capacity, outputPct)),
18049
19938
  },
18050
19939
  ],
18051
19940
  };
@@ -18087,10 +19976,19 @@ function resolveModule(id, stats) {
18087
19976
  attributes,
18088
19977
  };
18089
19978
  }
18090
- function hullCapsForEntity(itemId, decoded) {
19979
+ function hullCapsForEntity(itemId, decoded, packedStats) {
19980
+ const hullStats = getPackedEntityType(itemId)?.equals(ENTITY_SHIP)
19981
+ ? {
19982
+ strength: decodeStat(packedStats, 0),
19983
+ hardness: decodeStat(packedStats, 1),
19984
+ plasticity: decodeStat(packedStats, 2),
19985
+ volatility: decodeStat(packedStats, 3),
19986
+ conductivity: decodeStat(packedStats, 4),
19987
+ }
19988
+ : decoded;
18091
19989
  return {
18092
- hullmass: computeBaseHullmass(decoded),
18093
- capacity: computeBaseCapacity(itemId, decoded),
19990
+ hullmass: computeBaseHullmass(itemId, hullStats),
19991
+ capacity: computeBaseCapacity(itemId, hullStats),
18094
19992
  };
18095
19993
  }
18096
19994
  function resolveEntity(id, stats, modules) {
@@ -18107,7 +20005,7 @@ function resolveEntity(id, stats, modules) {
18107
20005
  decoded.density = decodeStat(bigStats, 1);
18108
20006
  if (decoded.hardness === undefined)
18109
20007
  decoded.hardness = decodeStat(bigStats, 2);
18110
- const hullCaps = hullCapsForEntity(id, decoded);
20008
+ const hullCaps = hullCapsForEntity(id, decoded, bigStats);
18111
20009
  attributes = [
18112
20010
  {
18113
20011
  capability: 'Hull',
@@ -18343,6 +20241,9 @@ function moduleSlotsForImmutable(modules) {
18343
20241
  }));
18344
20242
  }
18345
20243
  const IMAGE_HOST_URL = 'https://item.shiploadgame.com/item';
20244
+ function toWholeEnergy(milli) {
20245
+ return Math.floor((milli + 500) / 1000);
20246
+ }
18346
20247
  function bytesToBase64Url(bytes) {
18347
20248
  let binary = '';
18348
20249
  for (let i = 0; i < bytes.byteLength; i++)
@@ -18408,8 +20309,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18408
20309
  const thm = decodeStat(stats, 1);
18409
20310
  base.push({ first: 'volatility', second: ['uint16', vol] });
18410
20311
  base.push({ first: 'thermal', second: ['uint16', thm] });
18411
- base.push({ first: 'thrust', second: ['uint32', computeEngineThrust(vol)] });
18412
- base.push({ first: 'drain', second: ['uint16', computeEngineDrain(thm)] });
20312
+ base.push({
20313
+ first: 'thrust',
20314
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
20315
+ });
20316
+ base.push({
20317
+ first: 'drain',
20318
+ second: ['uint16', computeEngineDrain(computeEffectiveModuleStat(thm))],
20319
+ });
18413
20320
  break;
18414
20321
  }
18415
20322
  case MODULE_GENERATOR: {
@@ -18417,8 +20324,20 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18417
20324
  const ref = decodeStat(stats, 1);
18418
20325
  base.push({ first: 'resonance', second: ['uint16', res] });
18419
20326
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
18420
- base.push({ first: 'capacity', second: ['uint16', computeGeneratorCap(res)] });
18421
- base.push({ first: 'recharge', second: ['uint16', computeGeneratorRech(ref)] });
20327
+ base.push({
20328
+ first: 'capacity',
20329
+ second: [
20330
+ 'uint16',
20331
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
20332
+ ],
20333
+ });
20334
+ base.push({
20335
+ first: 'recharge',
20336
+ second: [
20337
+ 'uint16',
20338
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
20339
+ ],
20340
+ });
18422
20341
  break;
18423
20342
  }
18424
20343
  case MODULE_GATHERER: {
@@ -18429,7 +20348,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18429
20348
  base.push({ first: 'hardness', second: ['uint16', hrd] });
18430
20349
  base.push({ first: 'saturation', second: ['uint16', sat] });
18431
20350
  base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
18432
- base.push({ first: 'drain', second: ['uint16', computeGathererDrain(sat)] });
20351
+ base.push({
20352
+ first: 'drain',
20353
+ second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
20354
+ });
18433
20355
  base.push({ first: 'depth', second: ['uint16', computeGathererDepth(hrd, item.tier)] });
18434
20356
  break;
18435
20357
  }
@@ -18454,7 +20376,16 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18454
20376
  base.push({ first: 'fineness', second: ['uint16', fin] });
18455
20377
  base.push({ first: 'conductivity', second: ['uint16', con] });
18456
20378
  base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
18457
- base.push({ first: 'drain', second: ['uint16', computeCrafterDrain(con)] });
20379
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20380
+ break;
20381
+ }
20382
+ case MODULE_BUILDER: {
20383
+ const coh = decodeStat(stats, 0);
20384
+ const tol = decodeStat(stats, 1);
20385
+ base.push({ first: 'cohesion', second: ['uint16', coh] });
20386
+ base.push({ first: 'tolerance', second: ['uint16', tol] });
20387
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(coh)] });
20388
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(tol))] });
18458
20389
  break;
18459
20390
  }
18460
20391
  case MODULE_STORAGE: {
@@ -18468,7 +20399,11 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18468
20399
  base.push({ first: 'cohesion', second: ['uint16', com] });
18469
20400
  base.push({
18470
20401
  first: 'capacity',
18471
- second: ['uint32', computeCargoBayCapacity(str, den, hrd, com)],
20402
+ second: ['uint32', computeCargoBayCapacity(str, den, hrd)],
20403
+ });
20404
+ base.push({
20405
+ first: 'drain',
20406
+ second: ['uint16', toWholeEnergy(computeCargoBayDrain(com, item.tier))],
18472
20407
  });
18473
20408
  break;
18474
20409
  }
@@ -18483,7 +20418,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18483
20418
  base.push({ first: 'insulation', second: ['uint16', ins] });
18484
20419
  base.push({
18485
20420
  first: 'capacity',
18486
- second: ['uint32', computeBatteryBankCapacity(vol, thm, pla, ins)],
20421
+ second: ['uint32', toWholeEnergy(computeBatteryBankCapacity(vol, thm, pla, ins))],
18487
20422
  });
18488
20423
  break;
18489
20424
  }
@@ -18496,7 +20431,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18496
20431
  base.push({ first: 'conductivity', second: ['uint16', con] });
18497
20432
  base.push({ first: 'capacity', second: ['uint8', computeHaulerCapacity(res, item.tier)] });
18498
20433
  base.push({ first: 'efficiency', second: ['uint16', computeHaulerEfficiency(pla)] });
18499
- base.push({ first: 'drain', second: ['uint16', computeHaulerDrain$1(con)] });
20434
+ base.push({
20435
+ first: 'drain',
20436
+ second: ['uint16', toWholeEnergy(computeHaulerDrain(con, item.tier))],
20437
+ });
18500
20438
  break;
18501
20439
  }
18502
20440
  }
@@ -18549,6 +20487,7 @@ var index = /*#__PURE__*/Object.freeze({
18549
20487
  deserializeModule: deserializeModule,
18550
20488
  deserializeEntity: deserializeEntity,
18551
20489
  deserializeAsset: deserializeAsset,
20490
+ toWholeEnergy: toWholeEnergy$1,
18552
20491
  computeBaseHullmass: computeBaseHullmass$1,
18553
20492
  computeBaseCapacityShip: computeBaseCapacityShip,
18554
20493
  computeBaseCapacityContainer: computeBaseCapacityContainer,
@@ -18568,9 +20507,13 @@ var index = /*#__PURE__*/Object.freeze({
18568
20507
  computeLoaderThrust: computeLoaderThrust,
18569
20508
  computeCrafterSpeed: computeCrafterSpeed,
18570
20509
  computeCrafterDrain: computeCrafterDrain,
20510
+ computeBuilderSpeed: computeBuilderSpeed,
20511
+ computeBuilderDrain: computeBuilderDrain,
18571
20512
  computeHaulerCapacity: computeHaulerCapacity,
18572
20513
  computeHaulerEfficiency: computeHaulerEfficiency,
18573
- computeHaulerDrain: computeHaulerDrain$1,
20514
+ supportDrainTierPercent: supportDrainTierPercent,
20515
+ computeHaulerDrain: computeHaulerDrain,
20516
+ computeCargoBayDrain: computeCargoBayDrain,
18574
20517
  computeWarpRange: computeWarpRange,
18575
20518
  computeCargoBayCapacity: computeCargoBayCapacity,
18576
20519
  computeBatteryBankCapacity: computeBatteryBankCapacity,
@@ -18819,6 +20762,7 @@ function planParallelTransfer(entity, target) {
18819
20762
  exports.ALL_ENTITY_TYPES = ALL_ENTITY_TYPES;
18820
20763
  exports.ATOMICASSETS_ACCOUNT = ATOMICASSETS_ACCOUNT;
18821
20764
  exports.ActionsManager = ActionsManager;
20765
+ exports.BASE_HAUL_PENALTY_MILLI = BASE_HAUL_PENALTY_MILLI$1;
18822
20766
  exports.BASE_ORBITAL_MASS = BASE_ORBITAL_MASS;
18823
20767
  exports.BLEND_INPUTS_MUST_MATCH = BLEND_INPUTS_MUST_MATCH;
18824
20768
  exports.BLEND_REQUIRES_MULTIPLE = BLEND_REQUIRES_MULTIPLE;
@@ -18846,6 +20790,7 @@ exports.CRAFT_NOT_ENOUGH_ENERGY = CRAFT_NOT_ENOUGH_ENERGY;
18846
20790
  exports.ClusterManager = ClusterManager;
18847
20791
  exports.ConstructionManager = ConstructionManager;
18848
20792
  exports.Coordinates = Coordinates;
20793
+ exports.DEFAULT_BASE_HULLMASS = DEFAULT_BASE_HULLMASS;
18849
20794
  exports.DEPLOY_ENTITY_HAS_SCHEDULE = DEPLOY_ENTITY_HAS_SCHEDULE;
18850
20795
  exports.DEPTH_THRESHOLD_T1 = DEPTH_THRESHOLD_T1;
18851
20796
  exports.DEPTH_THRESHOLD_T2 = DEPTH_THRESHOLD_T2;
@@ -18873,6 +20818,7 @@ exports.ENTITY_NOT_ENOUGH_ENERGY_CAPACITY = ENTITY_NOT_ENOUGH_ENERGY_CAPACITY;
18873
20818
  exports.ENTITY_NO_CRAFTER = ENTITY_NO_CRAFTER;
18874
20819
  exports.ENTITY_SHIP = ENTITY_SHIP;
18875
20820
  exports.ENTITY_WAREHOUSE = ENTITY_WAREHOUSE;
20821
+ exports.ENTITY_WORKSHOP = ENTITY_WORKSHOP;
18876
20822
  exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
18877
20823
  exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
18878
20824
  exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
@@ -18898,6 +20844,7 @@ exports.GROUP_NOT_SAME_LOCATION = GROUP_NOT_SAME_LOCATION;
18898
20844
  exports.GROUP_NOT_SAME_OWNER = GROUP_NOT_SAME_OWNER;
18899
20845
  exports.GROUP_NO_THRUST = GROUP_NO_THRUST;
18900
20846
  exports.GameState = GameState;
20847
+ exports.HAULER_EFFICIENCY_DENOM = HAULER_EFFICIENCY_DENOM$1;
18901
20848
  exports.INSUFFICIENT_BALANCE = INSUFFICIENT_BALANCE;
18902
20849
  exports.INSUFFICIENT_ITEM_QUANTITY = INSUFFICIENT_ITEM_QUANTITY;
18903
20850
  exports.INSUFFICIENT_ITEM_SUPPLY = INSUFFICIENT_ITEM_SUPPLY;
@@ -18915,6 +20862,7 @@ exports.ITEM_BIOMASS_T6 = ITEM_BIOMASS_T6;
18915
20862
  exports.ITEM_BIOMASS_T7 = ITEM_BIOMASS_T7;
18916
20863
  exports.ITEM_BIOMASS_T8 = ITEM_BIOMASS_T8;
18917
20864
  exports.ITEM_BIOMASS_T9 = ITEM_BIOMASS_T9;
20865
+ exports.ITEM_BUILDER_T1 = ITEM_BUILDER_T1;
18918
20866
  exports.ITEM_CERAMIC = ITEM_CERAMIC;
18919
20867
  exports.ITEM_CERAMIC_T2 = ITEM_CERAMIC_T2;
18920
20868
  exports.ITEM_CONTAINER_T1_PACKED = ITEM_CONTAINER_T1_PACKED;
@@ -18931,6 +20879,7 @@ exports.ITEM_CRYSTAL_T7 = ITEM_CRYSTAL_T7;
18931
20879
  exports.ITEM_CRYSTAL_T8 = ITEM_CRYSTAL_T8;
18932
20880
  exports.ITEM_CRYSTAL_T9 = ITEM_CRYSTAL_T9;
18933
20881
  exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
20882
+ exports.ITEM_DREDGER_T1_PACKED = ITEM_DREDGER_T1_PACKED;
18934
20883
  exports.ITEM_ENGINE_T1 = ITEM_ENGINE_T1;
18935
20884
  exports.ITEM_EXTRACTOR_T1_PACKED = ITEM_EXTRACTOR_T1_PACKED;
18936
20885
  exports.ITEM_FACTORY_T1_PACKED = ITEM_FACTORY_T1_PACKED;
@@ -18976,6 +20925,8 @@ exports.ITEM_PLATE = ITEM_PLATE;
18976
20925
  exports.ITEM_PLATE_T2 = ITEM_PLATE_T2;
18977
20926
  exports.ITEM_POLYMER = ITEM_POLYMER;
18978
20927
  exports.ITEM_POLYMER_T2 = ITEM_POLYMER_T2;
20928
+ exports.ITEM_PORTER_T1_PACKED = ITEM_PORTER_T1_PACKED;
20929
+ exports.ITEM_PROSPECTOR_T1_PACKED = ITEM_PROSPECTOR_T1_PACKED;
18979
20930
  exports.ITEM_PROSPECTOR_T2_PACKED = ITEM_PROSPECTOR_T2_PACKED;
18980
20931
  exports.ITEM_REACTOR = ITEM_REACTOR;
18981
20932
  exports.ITEM_REACTOR_T2 = ITEM_REACTOR_T2;
@@ -18993,17 +20944,24 @@ exports.ITEM_RESIN = ITEM_RESIN;
18993
20944
  exports.ITEM_RESIN_T2 = ITEM_RESIN_T2;
18994
20945
  exports.ITEM_RESONATOR = ITEM_RESONATOR;
18995
20946
  exports.ITEM_RESONATOR_T2 = ITEM_RESONATOR_T2;
20947
+ exports.ITEM_ROUSTABOUT_T1_PACKED = ITEM_ROUSTABOUT_T1_PACKED;
18996
20948
  exports.ITEM_SENSOR = ITEM_SENSOR;
18997
20949
  exports.ITEM_SENSOR_T2 = ITEM_SENSOR_T2;
18998
20950
  exports.ITEM_SHIP_T1_PACKED = ITEM_SHIP_T1_PACKED;
18999
20951
  exports.ITEM_STORAGE_T1 = ITEM_STORAGE_T1;
20952
+ exports.ITEM_TENDER_T1_PACKED = ITEM_TENDER_T1_PACKED;
20953
+ exports.ITEM_TUG_T1_PACKED = ITEM_TUG_T1_PACKED;
19000
20954
  exports.ITEM_TYPE_COMPONENT = ITEM_TYPE_COMPONENT;
19001
20955
  exports.ITEM_TYPE_ENTITY = ITEM_TYPE_ENTITY;
19002
20956
  exports.ITEM_TYPE_MODULE = ITEM_TYPE_MODULE;
19003
20957
  exports.ITEM_TYPE_RESOURCE = ITEM_TYPE_RESOURCE;
19004
20958
  exports.ITEM_WAREHOUSE_T1_PACKED = ITEM_WAREHOUSE_T1_PACKED;
19005
20959
  exports.ITEM_WARP_T1 = ITEM_WARP_T1;
20960
+ exports.ITEM_WORKSHOP_T1_PACKED = ITEM_WORKSHOP_T1_PACKED;
20961
+ exports.ITEM_WRANGLER_T1_PACKED = ITEM_WRANGLER_T1_PACKED;
20962
+ exports.ITEM_WRIGHT_T1_PACKED = ITEM_WRIGHT_T1_PACKED;
19006
20963
  exports.InventoryAccessor = InventoryAccessor;
20964
+ exports.JOB_QUEUE_CAP = JOB_QUEUE_CAP;
19007
20965
  exports.LANE_BARRIER = LANE_BARRIER;
19008
20966
  exports.LANE_MOBILITY = LANE_MOBILITY;
19009
20967
  exports.LOCAL_HALF = LOCAL_HALF;
@@ -19020,6 +20978,7 @@ exports.MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = MIN_TRANSFER_DISTANCE_ORBITAL_VES
19020
20978
  exports.MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE;
19021
20979
  exports.MODULE_ANY = MODULE_ANY;
19022
20980
  exports.MODULE_BATTERY = MODULE_BATTERY;
20981
+ exports.MODULE_BUILDER = MODULE_BUILDER;
19023
20982
  exports.MODULE_CARGO_NOT_FOUND = MODULE_CARGO_NOT_FOUND;
19024
20983
  exports.MODULE_CRAFTER = MODULE_CRAFTER;
19025
20984
  exports.MODULE_ENGINE = MODULE_ENGINE;
@@ -19033,6 +20992,8 @@ exports.MODULE_NOT_MODULE = MODULE_NOT_MODULE;
19033
20992
  exports.MODULE_SLOT_EMPTY = MODULE_SLOT_EMPTY;
19034
20993
  exports.MODULE_SLOT_INVALID = MODULE_SLOT_INVALID;
19035
20994
  exports.MODULE_SLOT_OCCUPIED = MODULE_SLOT_OCCUPIED;
20995
+ exports.MODULE_STAT_SCALING_ANCHOR = MODULE_STAT_SCALING_ANCHOR;
20996
+ exports.MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = MODULE_STAT_SCALING_POST_ANCHOR_PERCENT;
19036
20997
  exports.MODULE_STORAGE = MODULE_STORAGE;
19037
20998
  exports.MODULE_TIER_PREFIXES = MODULE_TIER_PREFIXES;
19038
20999
  exports.MODULE_TYPE_MISMATCH = MODULE_TYPE_MISMATCH;
@@ -19050,7 +21011,7 @@ exports.PLANET_SUBTYPE_TERRESTRIAL = PLANET_SUBTYPE_TERRESTRIAL;
19050
21011
  exports.PLAYER_ALREADY_JOINED = PLAYER_ALREADY_JOINED;
19051
21012
  exports.PLAYER_NOT_FOUND = PLAYER_NOT_FOUND;
19052
21013
  exports.PLAYER_NOT_JOINED = PLAYER_NOT_JOINED;
19053
- exports.PRECISION = PRECISION$1;
21014
+ exports.PRECISION = PRECISION;
19054
21015
  exports.PlatformContract = platform;
19055
21016
  exports.Player = Player;
19056
21017
  exports.PlayersManager = PlayersManager;
@@ -19129,6 +21090,8 @@ exports.calcCargoMass = calcCargoMass;
19129
21090
  exports.calcEnergyUsage = calcEnergyUsage;
19130
21091
  exports.calcStacksMass = calcStacksMass;
19131
21092
  exports.calc_acceleration = calc_acceleration;
21093
+ exports.calc_build_duration = calc_build_duration;
21094
+ exports.calc_build_energy = calc_build_energy;
19132
21095
  exports.calc_craft_duration = calc_craft_duration;
19133
21096
  exports.calc_craft_energy = calc_craft_energy;
19134
21097
  exports.calc_energyusage = calc_energyusage;
@@ -19136,6 +21099,7 @@ exports.calc_flighttime = calc_flighttime;
19136
21099
  exports.calc_gather_duration = calc_gather_duration;
19137
21100
  exports.calc_gather_energy = calc_gather_energy;
19138
21101
  exports.calc_gather_rate = calc_gather_rate;
21102
+ exports.calc_group_flighttime = calc_group_flighttime;
19139
21103
  exports.calc_loader_acceleration = calc_loader_acceleration;
19140
21104
  exports.calc_loader_flighttime = calc_loader_flighttime;
19141
21105
  exports.calc_onesided_duration = calc_onesided_duration;
@@ -19147,6 +21111,7 @@ exports.calc_ship_mass = calc_ship_mass;
19147
21111
  exports.calc_ship_rechargetime = calc_ship_rechargetime;
19148
21112
  exports.calc_transfer_duration = calc_transfer_duration;
19149
21113
  exports.calc_transit_duration = calc_transit_duration;
21114
+ exports.calc_travel_flighttime = calc_travel_flighttime;
19150
21115
  exports.calculateFlightTime = calculateFlightTime;
19151
21116
  exports.calculateLoadTimeBreakdown = calculateLoadTimeBreakdown;
19152
21117
  exports.calculateRefuelingTime = calculateRefuelingTime;
@@ -19178,16 +21143,21 @@ exports.compareByStars = compareByStars;
19178
21143
  exports.componentIcon = componentIcon;
19179
21144
  exports.composeIdleResolve = composeIdleResolve;
19180
21145
  exports.computeBaseCapacity = computeBaseCapacity;
21146
+ exports.computeBaseCapacityContainer = computeBaseCapacityContainer;
19181
21147
  exports.computeBaseCapacityShip = computeBaseCapacityShip;
19182
21148
  exports.computeBaseCapacityWarehouse = computeBaseCapacityWarehouse;
19183
21149
  exports.computeBaseHullmass = computeBaseHullmass$1;
19184
21150
  exports.computeBatteryCapabilities = computeBatteryCapabilities;
21151
+ exports.computeBuilderCapabilities = computeBuilderCapabilities;
21152
+ exports.computeBuilderDrain = computeBuilderDrain;
21153
+ exports.computeBuilderSpeed = computeBuilderSpeed;
19185
21154
  exports.computeComponentStats = computeComponentStats;
19186
21155
  exports.computeContainerCapabilities = computeContainerCapabilities;
19187
21156
  exports.computeCraftedOutputStats = computeCraftedOutputStats;
19188
21157
  exports.computeCrafterCapabilities = computeCrafterCapabilities;
19189
21158
  exports.computeCrafterDrain = computeCrafterDrain;
19190
21159
  exports.computeCrafterSpeed = computeCrafterSpeed;
21160
+ exports.computeEffectiveModuleStat = computeEffectiveModuleStat;
19191
21161
  exports.computeEngineCapabilities = computeEngineCapabilities;
19192
21162
  exports.computeEngineDrain = computeEngineDrain;
19193
21163
  exports.computeEngineThrust = computeEngineThrust;
@@ -19205,7 +21175,6 @@ exports.computeGroupPerLegReach = computeGroupPerLegReach;
19205
21175
  exports.computeHaulPenalty = computeHaulPenalty;
19206
21176
  exports.computeHaulerCapabilities = computeHaulerCapabilities;
19207
21177
  exports.computeHaulerCapacity = computeHaulerCapacity;
19208
- exports.computeHaulerDrain = computeHaulerDrain;
19209
21178
  exports.computeHaulerEfficiency = computeHaulerEfficiency;
19210
21179
  exports.computeInputMass = computeInputMass;
19211
21180
  exports.computeLauncherCapabilities = computeLauncherCapabilities;
@@ -19283,6 +21252,7 @@ exports.formatTier = formatTier;
19283
21252
  exports.gatherEnergyCost = gatherEnergyCost;
19284
21253
  exports.gathererDepthForTier = gathererDepthForTier;
19285
21254
  exports.getAllRecipes = getAllRecipes;
21255
+ exports.getBaseHullmassFor = getBaseHullmassFor;
19286
21256
  exports.getCapabilityAttributeRows = getCapabilityAttributeRows;
19287
21257
  exports.getCapabilityAttributes = getCapabilityAttributes;
19288
21258
  exports.getCategoryInfo = getCategoryInfo;
@@ -19361,12 +21331,14 @@ exports.isShip = isShip;
19361
21331
  exports.isSubscriptionsDebugEnabled = isSubscriptionsDebugEnabled;
19362
21332
  exports.isValidWormholePair = isValidWormholePair;
19363
21333
  exports.isWarehouse = isWarehouse;
21334
+ exports.isWorkshop = isWorkshop;
19364
21335
  exports.itemAbbreviations = itemAbbreviations;
19365
21336
  exports.itemCategory = itemCategory;
19366
21337
  exports.itemIds = itemIds;
19367
21338
  exports.itemOffset = itemOffset;
19368
21339
  exports.itemTier = itemTier;
19369
21340
  exports.itemTypeCode = itemTypeCode;
21341
+ exports.jobsToLanes = jobsToLanes;
19370
21342
  exports.kindCan = kindCan;
19371
21343
  exports.laneKeyForModule = laneKeyForModule;
19372
21344
  exports.lerp = lerp$1;
@@ -19385,6 +21357,7 @@ exports.needsRecharge = needsRecharge;
19385
21357
  exports.normalizeDisplayName = normalizeDisplayName;
19386
21358
  exports.parseWireEntity = parseWireEntity;
19387
21359
  exports.partnerRegion = partnerRegion;
21360
+ exports.pickFabricator = pickFabricator;
19388
21361
  exports.planParallelTransfer = planParallelTransfer;
19389
21362
  exports.planRoute = planRoute;
19390
21363
  exports.projectEntity = projectEntity;
@@ -19400,6 +21373,7 @@ exports.removeFromStacks = removeFromStacks;
19400
21373
  exports.renderDescription = renderDescription;
19401
21374
  exports.resolveItem = resolveItem;
19402
21375
  exports.resolveItemCategory = resolveItemCategory;
21376
+ exports.resolveLaneBuilder = resolveLaneBuilder;
19403
21377
  exports.resolveLaneCrafter = resolveLaneCrafter;
19404
21378
  exports.resolveLaneGatherer = resolveLaneGatherer;
19405
21379
  exports.resolveLaneLoader = resolveLaneLoader;
@@ -19407,6 +21381,7 @@ exports.resolveLockedAmount = resolveLockedAmount;
19407
21381
  exports.resolveStats = resolveStats;
19408
21382
  exports.rollTier = rollTier;
19409
21383
  exports.rollWithinTier = rollWithinTier;
21384
+ exports.rollupBuilder = rollupBuilder;
19410
21385
  exports.rollupCrafter = rollupCrafter;
19411
21386
  exports.rollupGatherer = rollupGatherer;
19412
21387
  exports.rollupLoaders = rollupLoaders;
@@ -19414,9 +21389,10 @@ exports.rotation = rotation;
19414
21389
  exports.schedule = schedule;
19415
21390
  exports.sdkSystemGraph = sdkSystemGraph;
19416
21391
  exports.selectGatherLane = selectGatherLane;
19417
- exports.setScanProvider = setScanProvider;
19418
21392
  exports.setSubscriptionsDebug = setSubscriptionsDebug;
21393
+ exports.simulateRoute = simulateRoute;
19419
21394
  exports.slotAcceptsModule = slotAcceptsModule;
21395
+ exports.socketTail = socketTail;
19420
21396
  exports.sourceLabelForOutput = sourceLabelForOutput;
19421
21397
  exports.splitCost = splitCost;
19422
21398
  exports.stackKey = stackKey;