@fuel-ts/account 0.100.3 → 0.100.4

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 (60) hide show
  1. package/dist/account.d.ts +71 -3
  2. package/dist/account.d.ts.map +1 -1
  3. package/dist/index.global.js +1467 -217
  4. package/dist/index.global.js.map +1 -1
  5. package/dist/index.js +2165 -1005
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +1976 -818
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/predicate/predicate.d.ts +9 -4
  10. package/dist/predicate/predicate.d.ts.map +1 -1
  11. package/dist/providers/__generated__/operations.d.ts +1183 -87
  12. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  13. package/dist/providers/assemble-tx-helpers.d.ts +39 -0
  14. package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
  15. package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
  16. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  17. package/dist/providers/index.d.ts +1 -0
  18. package/dist/providers/index.d.ts.map +1 -1
  19. package/dist/providers/provider.d.ts +80 -6
  20. package/dist/providers/provider.d.ts.map +1 -1
  21. package/dist/providers/resource.d.ts +4 -1
  22. package/dist/providers/resource.d.ts.map +1 -1
  23. package/dist/providers/transaction-request/helpers.d.ts +3 -3
  24. package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
  25. package/dist/providers/transaction-request/input.d.ts +2 -0
  26. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  27. package/dist/providers/transaction-request/output.d.ts +6 -0
  28. package/dist/providers/transaction-request/output.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
  30. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  31. package/dist/providers/transaction-response/transaction-response.d.ts +38 -11
  32. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  33. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
  34. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  35. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  36. package/dist/providers/transaction-summary/status.d.ts +16 -2
  37. package/dist/providers/transaction-summary/status.d.ts.map +1 -1
  38. package/dist/providers/transaction-summary/types.d.ts +85 -4
  39. package/dist/providers/transaction-summary/types.d.ts.map +1 -1
  40. package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
  41. package/dist/providers/utils/index.d.ts +1 -0
  42. package/dist/providers/utils/index.d.ts.map +1 -1
  43. package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
  44. package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
  45. package/dist/providers/utils/serialization.d.ts +9 -0
  46. package/dist/providers/utils/serialization.d.ts.map +1 -1
  47. package/dist/test-utils/launchNode.d.ts.map +1 -1
  48. package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
  49. package/dist/test-utils.global.js +1461 -201
  50. package/dist/test-utils.global.js.map +1 -1
  51. package/dist/test-utils.js +2046 -891
  52. package/dist/test-utils.js.map +1 -1
  53. package/dist/test-utils.mjs +1892 -731
  54. package/dist/test-utils.mjs.map +1 -1
  55. package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
  56. package/dist/utils/split-coins-into-batches.d.ts +3 -0
  57. package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
  58. package/package.json +15 -15
  59. package/dist/providers/utils/helpers.d.ts +0 -14
  60. package/dist/providers/utils/helpers.d.ts.map +0 -1
@@ -7970,9 +7970,9 @@
7970
7970
  }
7971
7971
  });
7972
7972
 
7973
- // ../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs
7973
+ // ../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs
7974
7974
  var require_node = __commonJS({
7975
- "../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7975
+ "../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7976
7976
  "use strict";
7977
7977
  var wasm$1;
7978
7978
  var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: /* @__PURE__ */ __name(() => {
@@ -8711,7 +8711,12 @@
8711
8711
  * r" Get memory address of base asset ID
8712
8712
  */
8713
8713
  BaseAssetId: 6,
8714
- "6": "BaseAssetId"
8714
+ "6": "BaseAssetId",
8715
+ /**
8716
+ * r" Get gas price for block
8717
+ */
8718
+ GetGasPrice: 7,
8719
+ "7": "GetGasPrice"
8715
8720
  });
8716
8721
  var GTFArgs2 = Object.freeze({
8717
8722
  /**
@@ -9043,7 +9048,82 @@
9043
9048
  * r" Set `$rA` to `tx.policies[count_ones(0b11111 & tx.policyTypes) - 1].expiration`
9044
9049
  */
9045
9050
  PolicyExpiration: 1285,
9046
- "1285": "PolicyExpiration"
9051
+ "1285": "PolicyExpiration",
9052
+ /**
9053
+ * r" Set `$rA` to `Memory address of tx.root`
9054
+ */
9055
+ UploadRoot: 1536,
9056
+ "1536": "UploadRoot",
9057
+ /**
9058
+ * r" Set `$rA` to `tx.witnessIndex`
9059
+ */
9060
+ UploadWitnessIndex: 1537,
9061
+ "1537": "UploadWitnessIndex",
9062
+ /**
9063
+ * r" Set `$rA` to `tx.subsectionIndex`
9064
+ */
9065
+ UploadSubsectionIndex: 1538,
9066
+ "1538": "UploadSubsectionIndex",
9067
+ /**
9068
+ * r" Set `$rA` to `tx.subsectionsNumber`
9069
+ */
9070
+ UploadSubsectionsCount: 1539,
9071
+ "1539": "UploadSubsectionsCount",
9072
+ /**
9073
+ * r" Set `$rA` to `tx.proofSetCount`
9074
+ */
9075
+ UploadProofSetCount: 1540,
9076
+ "1540": "UploadProofSetCount",
9077
+ /**
9078
+ * r" Set `$rA` to `Memory address of tx.proofSet[$rB]`
9079
+ */
9080
+ UploadProofSetAtIndex: 1541,
9081
+ "1541": "UploadProofSetAtIndex",
9082
+ /**
9083
+ * r" Set `$rA` to `Memory address of tx.id`
9084
+ */
9085
+ BlobId: 1792,
9086
+ "1792": "BlobId",
9087
+ /**
9088
+ * r" Set `$rA` to `tx.witnessIndex`
9089
+ */
9090
+ BlobWitnessIndex: 1793,
9091
+ "1793": "BlobWitnessIndex",
9092
+ /**
9093
+ * r" Set `$rA` to `Memory address of tx.purpose`
9094
+ */
9095
+ UpgradePurpose: 2048,
9096
+ "2048": "UpgradePurpose",
9097
+ /**
9098
+ * r" Set `$rA` to `tx.inputsCount`
9099
+ */
9100
+ TxInputsCount: 2304,
9101
+ "2304": "TxInputsCount",
9102
+ /**
9103
+ * r" Set `$rA` to `tx.outputsCount`
9104
+ */
9105
+ TxOutputsCount: 2305,
9106
+ "2305": "TxOutputsCount",
9107
+ /**
9108
+ * r" Set `$rA` to `tx.witnessesCount`
9109
+ */
9110
+ TxWitnessesCount: 2306,
9111
+ "2306": "TxWitnessesCount",
9112
+ /**
9113
+ * r" Set `$rA` to `Memory address of tx.inputs[$rB]`
9114
+ */
9115
+ TxInputAtIndex: 2307,
9116
+ "2307": "TxInputAtIndex",
9117
+ /**
9118
+ * r" Set `$rA` to `Memory address of t.outputs[$rB]`
9119
+ */
9120
+ TxOutputAtIndex: 2308,
9121
+ "2308": "TxOutputAtIndex",
9122
+ /**
9123
+ * r" Set `$rA` to `Memory address of tx.witnesses[$rB]`
9124
+ */
9125
+ TxWitnessAtIndex: 2309,
9126
+ "2309": "TxWitnessAtIndex"
9047
9127
  });
9048
9128
  var MathOp = Object.freeze({
9049
9129
  /**
@@ -9399,7 +9479,27 @@
9399
9479
  * r" Given input contract does not exist.
9400
9480
  */
9401
9481
  InputContractDoesNotExist: 60,
9402
- "60": "InputContractDoesNotExist"
9482
+ "60": "InputContractDoesNotExist",
9483
+ /**
9484
+ * r" Storage slot in Create not found
9485
+ */
9486
+ StorageSlotsNotFound: 61,
9487
+ "61": "StorageSlotsNotFound",
9488
+ /**
9489
+ * r" Proof in Upload not found
9490
+ */
9491
+ ProofInUploadNotFound: 62,
9492
+ "62": "ProofInUploadNotFound",
9493
+ /**
9494
+ * r" Invalid purpose type in Upgrade
9495
+ */
9496
+ InvalidUpgradePurposeType: 63,
9497
+ "63": "InvalidUpgradePurposeType",
9498
+ /**
9499
+ * r" Cannot get gas price in predicate
9500
+ */
9501
+ CanNotGetGasPriceInPredicate: 64,
9502
+ "64": "CanNotGetGasPriceInPredicate"
9403
9503
  });
9404
9504
  var ADDFinalization = typeof FinalizationRegistry === "undefined" ? { register: /* @__PURE__ */ __name(() => {
9405
9505
  }, "register"), unregister: /* @__PURE__ */ __name(() => {
@@ -16917,11 +17017,11 @@
16917
17017
  }
16918
17018
  __name(_loadWasmModule, "_loadWasmModule");
16919
17019
  function wasm(imports) {
16920
- return _loadWasmModule(1, null, "AGFzbQEAAAABOgpgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38AYAJ/fwF/YAABf2AFf39/f38Bf2ABfwBgA39/fwBgAAACGAEDd2JnEF9fd2JpbmRnZW5fdGhyb3cAAwOBAv8BAQEDAwMDAwMBAQMDAQEBAwMBAQEEAQMDAwEBAwEBAQQCAQMCAgICAgIDAwMEBAQEBAQEBAEBAQMDAAICBAQEBAQEBAQEBAABAQgDAwQBAQEBAQEBAgcDAQAAAQEDBwcBAwEDAgIBAQEAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBBQEBAQEEAAQBBgICAwMAAgAHAQgEAQQBCQMBAQcBBQUFBQUFBQUFBQUFBQUFBQUFBQMGBgICBAIGBgAACAAEBQMBABEGCQF/AUGAgMAACwe9Td0FBm1lbW9yeQIAFl9fd2JnX2NvbXBhcmVhcmdzX2ZyZWUAEBpfX3diZ19nZXRfY29tcGFyZWFyZ3NfbW9kZQBIGl9fd2JnX3NldF9jb21wYXJlYXJnc19tb2RlADgiX193YmdfZ2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBJIl9fd2JnX3NldF9jb21wYXJlYXJnc19pbmRpcmVjdF9yaHMASxJjb21wYXJlYXJnc190b19pbW0AWBRjb21wYXJlYXJnc19mcm9tX2ltbQAfFV9fd2JnX2dldF9tYXRoYXJnc19vcABIFV9fd2JnX3NldF9tYXRoYXJnc19vcAA5El9fd2JnX211bGFyZ3NfZnJlZQARHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X3JocwBIHl9fd2JnX3NldF9tdWxhcmdzX2luZGlyZWN0X3JocwBMEl9fd2JnX2RpdmFyZ3NfZnJlZQAjHl9fd2JnX2dldF9kaXZhcmdzX2luZGlyZWN0X3JocwC7AR5fX3diZ19zZXRfZGl2YXJnc19pbmRpcmVjdF9yaHMAYxtfX3diZ19wYW5pY2luc3RydWN0aW9uX2ZyZWUAFyFwYW5pY2luc3RydWN0aW9uX2Vycm9yX3R5cGVzY3JpcHQATRdwYW5pY2luc3RydWN0aW9uX3JlYXNvbgBbHHBhbmljaW5zdHJ1Y3Rpb25faW5zdHJ1Y3Rpb24AXAxnbV9mcm9tX2FyZ3MA1wENZ3RmX2Zyb21fYXJncwDPAQdnbV9hcmdzAIoBCGd0Zl9hcmdzAGkOd2RjbV9mcm9tX2FyZ3MAOw53ZG9wX2Zyb21fYXJncwA7DndkbWxfZnJvbV9hcmdzADwOd2Rkdl9mcm9tX2FyZ3MAywEJd2RjbV9hcmdzACQJd3FjbV9hcmdzACUJd2RvcF9hcmdzACYJd3FvcF9hcmdzACcJd2RtbF9hcmdzACgJd3FtbF9hcmdzACkJd2Rkdl9hcmdzAGQJd3Fkdl9hcmdzAGUQX193YmdfaW1tMDZfZnJlZQAqEF9fd2JnX2ltbTEyX2ZyZWUAKxBfX3diZ19pbW0xOF9mcmVlACwOX193YmdfYWRkX2ZyZWUAGA9fX3diZ19ub29wX2ZyZWUABxJhZGRfbmV3X3R5cGVzY3JpcHQAWQZhZGRfcmEANQZhZGRfcmIAEgZhZGRfcmMAGgNhZGQAxwEDYW5kAIwBA2RpdgCNAQJlcQCOAQNleHAAjwECZ3QAkAECbHQAkQEEbWxvZwCSAQRtcm9vAJMBBG1vZF8AlAEFbW92ZV8APQNtdWwAlQEDbm90AD4Cb3IAlgEDc2xsAJcBA3NybACYAQNzdWIAmQEDeG9yAJoBBG1sZHYAagNyZXQAvAEEcmV0ZAA/E2Fsb2NfbmV3X3R5cGVzY3JpcHQAYAdhbG9jX3JhACIEYWxvYwC9AQNtY2wAQANtY3AAmwEDbWVxAGsTYmhzaF9uZXdfdHlwZXNjcmlwdAAgBGJoc2gALQRiaGVpAL4BBGJ1cm4AQQRjYWxsAGwDY2NwAG0EY3JvbwBCBGNzaXoAQwJjYgC/AQNsZGMAbgNsb2cAbwRsb2dkAHAEbWludABEBHJ2cnQAwAEEc2N3cQCcAQNzcncAnQEEc3J3cQBxA3N3dwCeAQRzd3dxAHICdHIAnwEDdHJvAHMEZWNrMQCgAQRlY3IxAKEBBGVkMTkAdARrMjU2AKIBBHMyNTYAowEEdGltZQBFE25vb3BfbmV3X3R5cGVzY3JpcHQAwQEEbm9vcADfAQRmbGFnAMIBA2JhbACkAQNqbXAAwwEDam5lAKUBA3NtbwB1E2FkZGlfbmV3X3R5cGVzY3JpcHQAWgphZGRpX2ltbTEyAAkEYWRkaQCmAQRhbmRpAKcBBGRpdmkAqAEEZXhwaQCpAQRtb2RpAKoBBG11bGkAqwEDb3JpAKwBBHNsbGkArQEEc3JsaQCuAQRzdWJpAK8BBHhvcmkAsAEEam5laQCxAQJsYgCyAQJsdwCzAQJzYgC0AQJzdwC1AQRtY3BpALYBEmd0Zl9uZXdfdHlwZXNjcmlwdADRAQNndGYAtwEEbWNsaQAuEWdtX25ld190eXBlc2NyaXB0AEYIZ21faW1tMTgADQJnbQAvBG1vdmkAMARqbnppADEEam1wZgAyE2ptcGJfbmV3X3R5cGVzY3JpcHQAFQRqbXBiADMEam56ZgC4AQRqbnpiALkBBGpuZWYAdgpqbmViX2ltbTA2ADYEam5lYgB3AmppAE4TY2ZlaV9uZXdfdHlwZXNjcmlwdAA3CmNmZWlfaW1tMjQACgRjZmVpAE8EY2ZzaQBQA2NmZQDEAQNjZnMAxQEEcHNobABRBHBzaGgAUgRwb3BsAFMEcG9waABUE3dkY21fbmV3X3R5cGVzY3JpcHQAzAEEd2RjbQB4BHdxY20AeQR3ZG9wAHoEd3FvcAB7BHdkbWwAfAR3cW1sAH0Ed2RkdgB+BHdxZHYAfwR3ZG1kAIABBHdxbWQAgQEEd2RhbQCCAQR3cWFtAIMBBHdkbW0AhAEEd3FtbQCFAQRlY2FsAIYBBGJzaXoANBNibGRkX25ld190eXBlc2NyaXB0AFUHYmxkZF9yZAA2BGJsZGQAhwEEZWNvcACIAQRlcGFyAIkBFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADBRpbnN0cnVjdGlvbl90b19ieXRlcwAGEGluc3RydWN0aW9uX3NpemUA8QERcmVnaWRfbmV3X2NoZWNrZWQAugEJcmVnaWRfYmFsAOABCnJlZ2lkX2NnYXMA4QEJcmVnaWRfZXJyAOIBCnJlZ2lkX2ZsYWcA4wEIcmVnaWRfZnAA5AEKcmVnaWRfZ2dhcwDlAQhyZWdpZF9ocADmAQhyZWdpZF9pcwDnAQhyZWdpZF9vZgDoAQlyZWdpZF9vbmUA6QEIcmVnaWRfcGMA6gEJcmVnaWRfcmV0AOsBCnJlZ2lkX3JldGwA7AEIcmVnaWRfc3AA7QEJcmVnaWRfc3BwAO4BDnJlZ2lkX3dyaXRhYmxlAO8BCnJlZ2lkX3plcm8A8AEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA2wELcmVnaWRfdG9fdTgA3AESYW5kX25ld190eXBlc2NyaXB0AFkSZGl2X25ld190eXBlc2NyaXB0AFkRZXFfbmV3X3R5cGVzY3JpcHQAWRJleHBfbmV3X3R5cGVzY3JpcHQAWRFndF9uZXdfdHlwZXNjcmlwdABZEWx0X25ld190eXBlc2NyaXB0AFkTbWxvZ19uZXdfdHlwZXNjcmlwdABZE21yb29fbmV3X3R5cGVzY3JpcHQAWRJtb2RfbmV3X3R5cGVzY3JpcHQAWRJtdWxfbmV3X3R5cGVzY3JpcHQAWRFvcl9uZXdfdHlwZXNjcmlwdABZEnNsbF9uZXdfdHlwZXNjcmlwdABZEnNybF9uZXdfdHlwZXNjcmlwdABZEnN1Yl9uZXdfdHlwZXNjcmlwdABZEnhvcl9uZXdfdHlwZXNjcmlwdABZEm1jcF9uZXdfdHlwZXNjcmlwdABZE3Njd3FfbmV3X3R5cGVzY3JpcHQAWRJzcndfbmV3X3R5cGVzY3JpcHQAWRJzd3dfbmV3X3R5cGVzY3JpcHQAWRF0cl9uZXdfdHlwZXNjcmlwdABZE2VjazFfbmV3X3R5cGVzY3JpcHQAWRNlY3IxX25ld190eXBlc2NyaXB0AFkTazI1Nl9uZXdfdHlwZXNjcmlwdABZE3MyNTZfbmV3X3R5cGVzY3JpcHQAWRJiYWxfbmV3X3R5cGVzY3JpcHQAWRJqbmVfbmV3X3R5cGVzY3JpcHQAWRNhbmRpX25ld190eXBlc2NyaXB0AFoTZGl2aV9uZXdfdHlwZXNjcmlwdABaE2V4cGlfbmV3X3R5cGVzY3JpcHQAWhNtb2RpX25ld190eXBlc2NyaXB0AFoTbXVsaV9uZXdfdHlwZXNjcmlwdABaEm9yaV9uZXdfdHlwZXNjcmlwdABaE3NsbGlfbmV3X3R5cGVzY3JpcHQAWhNzcmxpX25ld190eXBlc2NyaXB0AFoTc3ViaV9uZXdfdHlwZXNjcmlwdABaE3hvcmlfbmV3X3R5cGVzY3JpcHQAWhNqbmVpX25ld190eXBlc2NyaXB0AFoRbGJfbmV3X3R5cGVzY3JpcHQAWhFsd19uZXdfdHlwZXNjcmlwdABaEXNiX25ld190eXBlc2NyaXB0AFoRc3dfbmV3X3R5cGVzY3JpcHQAWhNtY3BpX25ld190eXBlc2NyaXB0AFoTam56Zl9uZXdfdHlwZXNjcmlwdABaE2puemJfbmV3X3R5cGVzY3JpcHQAWhFqaV9uZXdfdHlwZXNjcmlwdAA3E2Nmc2lfbmV3X3R5cGVzY3JpcHQANxNwc2hsX25ld190eXBlc2NyaXB0ADcTcHNoaF9uZXdfdHlwZXNjcmlwdAA3E3BvcGxfbmV3X3R5cGVzY3JpcHQANxNwb3BoX25ld190eXBlc2NyaXB0ADcTbW92aV9uZXdfdHlwZXNjcmlwdAAVE21jbGlfbmV3X3R5cGVzY3JpcHQAFRNqbnppX25ld190eXBlc2NyaXB0ABUTam1wZl9uZXdfdHlwZXNjcmlwdAAVEm5vdF9uZXdfdHlwZXNjcmlwdAAgE3JldGRfbmV3X3R5cGVzY3JpcHQAIBNtb3ZlX25ld190eXBlc2NyaXB0ACASbWNsX25ld190eXBlc2NyaXB0ACATYnVybl9uZXdfdHlwZXNjcmlwdAAgE2Nyb29fbmV3X3R5cGVzY3JpcHQAIBNjc2l6X25ld190eXBlc2NyaXB0ACATbWludF9uZXdfdHlwZXNjcmlwdAAgE3RpbWVfbmV3X3R5cGVzY3JpcHQAIBNic2l6X25ld190eXBlc2NyaXB0ACAGcmV0X3JhACIHYmhlaV9yYQAiBWNiX3JhACIHcnZydF9yYQAiB2ZsYWdfcmEAIgZqbXBfcmEAIghqaV9pbW0yNAAKCmNmc2lfaW1tMjQACgZjZmVfcmEAIgZjZnNfcmEAIgpwc2hsX2ltbTI0AAoKcHNoaF9pbW0yNAAKCnBvcGxfaW1tMjQACgpwb3BoX2ltbTI0AAoTbWxkdl9uZXdfdHlwZXNjcmlwdABVEm1lcV9uZXdfdHlwZXNjcmlwdABVEmNjcF9uZXdfdHlwZXNjcmlwdABVEmxvZ19uZXdfdHlwZXNjcmlwdABVE2xvZ2RfbmV3X3R5cGVzY3JpcHQAVRNzcndxX25ld190eXBlc2NyaXB0AFUTc3d3cV9uZXdfdHlwZXNjcmlwdABVEnRyb19uZXdfdHlwZXNjcmlwdABVE2VkMTlfbmV3X3R5cGVzY3JpcHQAVRJzbW9fbmV3X3R5cGVzY3JpcHQAVRJsZGNfbmV3X3R5cGVzY3JpcHQAVRNqbmVmX25ld190eXBlc2NyaXB0AFUTd2RtZF9uZXdfdHlwZXNjcmlwdABVE3dxbWRfbmV3X3R5cGVzY3JpcHQAVRN3ZGFtX25ld190eXBlc2NyaXB0AFUTd3FhbV9uZXdfdHlwZXNjcmlwdABVE3dkbW1fbmV3X3R5cGVzY3JpcHQAVRN3cW1tX25ld190eXBlc2NyaXB0AFUTZWNhbF9uZXdfdHlwZXNjcmlwdABVE2NhbGxfbmV3X3R5cGVzY3JpcHQAVRNlY29wX25ld190eXBlc2NyaXB0AFUTZXBhcl9uZXdfdHlwZXNjcmlwdABVE19fd2JnX21hdGhhcmdzX2ZyZWUAEB9fX3diZ19zZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAEseX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAEsfX193YmdfZ2V0X21hdGhhcmdzX2luZGlyZWN0X3JocwBJHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X2xocwBJEnJldF9uZXdfdHlwZXNjcmlwdABgE2JoZWlfbmV3X3R5cGVzY3JpcHQAYBFjYl9uZXdfdHlwZXNjcmlwdABgE3J2cnRfbmV3X3R5cGVzY3JpcHQAYBNmbGFnX25ld190eXBlc2NyaXB0AGASam1wX25ld190eXBlc2NyaXB0AGASY2ZlX25ld190eXBlc2NyaXB0AGASY2ZzX25ld190eXBlc2NyaXB0AGAPX193Ymdfam1wZl9mcmVlABgPX193Ymdfc3ViaV9mcmVlABgNX193YmdfamlfZnJlZQAYD19fd2JnX2VjYWxfZnJlZQAYD19fd2JnX3BvcGxfZnJlZQAYDl9fd2JnX2xkY19mcmVlABgPX193Ymdfd2RtbF9mcmVlABgNX193YmdfbHdfZnJlZQAYD19fd2JnX3dxbWxfZnJlZQAYD19fd2JnX2V4cGlfZnJlZQAYD19fd2JnX2puZWZfZnJlZQAYDl9fd2JnX3Nyd19mcmVlABgPX193YmdfYmxkZF9mcmVlABgOX193YmdfbWNwX2ZyZWUAGA9fX3diZ193ZG9wX2ZyZWUAGA9fX3diZ190aW1lX2ZyZWUAGA9fX3diZ19zcndxX2ZyZWUAGA5fX3diZ19jZmVfZnJlZQAYDV9fd2JnX2x0X2ZyZWUAGA9fX3diZ19ydnJ0X2ZyZWUAGA9fX3diZ19kaXZpX2ZyZWUAGA9fX3diZ19tbGR2X2ZyZWUAGA1fX3diZ19sYl9mcmVlABgNX193YmdfY2JfZnJlZQAYDl9fd2JnX2xvZ19mcmVlABgOX193YmdfbWNsX2ZyZWUAGA9fX3diZ193cW1tX2ZyZWUAGA9fX3diZ19zd3dxX2ZyZWUAGA9fX3diZ19idXJuX2ZyZWUAGA5fX3diZ194b3JfZnJlZQAYDl9fd2JnX2V4cF9mcmVlABgPX193Ymdfd3FvcF9mcmVlABgPX193YmdfczI1Nl9mcmVlABgPX193Ymdfd2RhbV9mcmVlABgPX193Ymdfam5lYl9mcmVlABgPX193YmdfbW92aV9mcmVlABgOX193Ymdfam1wX2ZyZWUAGA5fX3diZ19zbW9fZnJlZQAYD19fd2JnX2Joc2hfZnJlZQAYD19fd2JnX211bGlfZnJlZQAYD19fd2JnX21vZGlfZnJlZQAYDl9fd2JnX3Ryb19mcmVlABgPX193Ymdfc2N3cV9mcmVlABgPX193Ymdfd3FjbV9mcmVlABgPX193Ymdfd3FtZF9mcmVlABgPX193YmdfZWNyMV9mcmVlABgNX193Ymdfc3dfZnJlZQAYD19fd2JnX2xvZ2RfZnJlZQAYD19fd2JnX21pbnRfZnJlZQAYD19fd2JnX3dkbWRfZnJlZQAYD19fd2JnX3hvcmlfZnJlZQAYD19fd2JnX2FuZGlfZnJlZQAYD19fd2JnX3NybGlfZnJlZQAYD19fd2JnX2NhbGxfZnJlZQAYD19fd2JnX21vdmVfZnJlZQAYDV9fd2JnX2VxX2ZyZWUAGA9fX3diZ19qbmVpX2ZyZWUAGA9fX3diZ19lZDE5X2ZyZWUAGA9fX3diZ19wc2hoX2ZyZWUAGA5fX3diZ19zbGxfZnJlZQAYD19fd2JnX2FkZGlfZnJlZQAYD19fd2JnX2puemJfZnJlZQAYDl9fd2JnX3N3d19mcmVlABgOX193YmdfY2NwX2ZyZWUAGA9fX3diZ19qbXBiX2ZyZWUAGA9fX3diZ19tbG9nX2ZyZWUAGA9fX3diZ19tY3BpX2ZyZWUAGA1fX3diZ19ndF9mcmVlABgPX193YmdfYnNpel9mcmVlABgPX193Ymdfam56aV9mcmVlABgOX193Ymdfc3ViX2ZyZWUAGA5fX3diZ19kaXZfZnJlZQAYDl9fd2JnX2puZV9mcmVlABgOX193YmdfcmV0X2ZyZWUAGA9fX3diZ19lY29wX2ZyZWUAGA9fX3diZ19yZXRkX2ZyZWUAGA1fX3diZ19vcl9mcmVlABgPX193YmdfY2ZzaV9mcmVlABgPX193YmdfcG9waF9mcmVlABgOX193YmdfYmFsX2ZyZWUAGA9fX3diZ193ZGR2X2ZyZWUAGA9fX3diZ19tcm9vX2ZyZWUAGA9fX3diZ19rMjU2X2ZyZWUAGA1fX3diZ190cl9mcmVlABgOX193YmdfY2ZzX2ZyZWUAGA9fX3diZ193cWFtX2ZyZWUAGA1fX3diZ19zYl9mcmVlABgOX193YmdfZ3RmX2ZyZWUAGA9fX3diZ19qbnpmX2ZyZWUAGA9fX3diZ19mbGFnX2ZyZWUAGA5fX3diZ19tZXFfZnJlZQAYD19fd2JnX2VwYXJfZnJlZQAYD19fd2JnX21jbGlfZnJlZQAYD19fd2JnX3dkY21fZnJlZQAYD19fd2JnX2NmZWlfZnJlZQAYD19fd2JnX2Fsb2NfZnJlZQAYDV9fd2JnX2dtX2ZyZWUAGA9fX3diZ193cWR2X2ZyZWUAGA5fX3diZ19zcmxfZnJlZQAYDl9fd2JnX25vdF9mcmVlABgPX193YmdfY3Npel9mcmVlABgOX193YmdfbW9kX2ZyZWUAGA9fX3diZ193ZG1tX2ZyZWUAGA9fX3diZ19zbGxpX2ZyZWUAGA9fX3diZ19iaGVpX2ZyZWUAGA9fX3diZ19lY2sxX2ZyZWUAGA9fX3diZ19wc2hsX2ZyZWUAGA9fX3diZ19jcm9vX2ZyZWUAGA5fX3diZ19tdWxfZnJlZQAYDl9fd2JnX2FuZF9mcmVlABgOX193Ymdfb3JpX2ZyZWUAGBN3cWR2X25ld190eXBlc2NyaXB0AMwBE3dxbWxfbmV3X3R5cGVzY3JpcHQAzAETd2RtbF9uZXdfdHlwZXNjcmlwdADMARN3cW9wX25ld190eXBlc2NyaXB0AMwBE3dkb3BfbmV3X3R5cGVzY3JpcHQAzAETd3FjbV9uZXdfdHlwZXNjcmlwdADMARN3ZGR2X25ld190eXBlc2NyaXB0AMwBDndxY21fZnJvbV9hcmdzADsKd3Fkdl9pbW0wNgA2CndxbWxfaW1tMDYANgp3ZG1sX2ltbTA2ADYKd3FvcF9pbW0wNgA2Cndkb3BfaW1tMDYANgp3cWNtX2ltbTA2ADYKd2Rkdl9pbW0wNgA2CndkY21faW1tMDYANgpqbmVmX2ltbTA2ADYJbGRjX2ltbTA2ADYOd3Fkdl9mcm9tX2FyZ3MAywEOd3FvcF9mcm9tX2FyZ3MAOwVnbV9yYQA1BWd0X3JjABoFZ3RfcmIAEgVndF9yYQA1BWxiX3JiABIFbGJfcmEANQVsdF9yYwAaBWx0X3JiABIFbHRfcmEANQhsd19pbW0xMgAJBWx3X3JiABIFbHdfcmEANQVvcl9yYwAaBW9yX3JiABIFb3JfcmEANQhzYl9pbW0xMgAJBXNiX3JiABIFc2JfcmEANQhzd19pbW0xMgAJBXN3X3JiABIFc3dfcmEANQV0cl9yYwAaBXRyX3JiABIFdHJfcmEANQVlcV9yYwAaBWVxX3JiABIFZXFfcmEANQZhbmRfcmMAGgZhbmRfcmIAEgZhbmRfcmEANQZiYWxfcmMAGgZiYWxfcmIAEgZiYWxfcmEANQZjY3BfcmMAGgZjY3BfcmIAEgZjY3BfcmEANQZkaXZfcmMAGgZkaXZfcmIAEgZkaXZfcmEANQZleHBfcmMAGgZleHBfcmIAEgZleHBfcmEANQhsYl9pbW0xMgAJBmd0Zl9yYgASBmd0Zl9yYQA1BmpuZV9yYwAaBmpuZV9yYgASBmpuZV9yYQA1BmxkY19yYwAaBmxkY19yYgASBmxkY19yYQA1BmxvZ19yZAA2BmxvZ19yYwAaBmxvZ19yYgASBmxvZ19yYQA1Bm1jbF9yYgASBm1jbF9yYQA1Bm1jcF9yYwAaBm1jcF9yYgASBm1jcF9yYQA1Bm1lcV9yZAA2Bm1lcV9yYwAaBm1lcV9yYgASBm1lcV9yYQA1Bm1vZF9yYwAaBm1vZF9yYgASBm1vZF9yYQA1Bm11bF9yYwAaBm11bF9yYgASBm11bF9yYQA1Bm5vdF9yYgASBm5vdF9yYQA1CW9yaV9pbW0xMgAJBm9yaV9yYgASBm9yaV9yYQA1BnNsbF9yYwAaBnNsbF9yYgASBnNsbF9yYQA1BnNtb19yZAA2BnNtb19yYwAaBnNtb19yYgASBnNtb19yYQA1BnNybF9yYwAaBnNybF9yYgASBnNybF9yYQA1BnNyd19yYwAaBnNyd19yYgASBnNyd19yYQA1BnN1Yl9yYwAaBnN1Yl9yYgASBnN1Yl9yYQA1BnN3d19yYwAaBnN3d19yYgASBnN3d19yYQA1BnRyb19yZAA2BnRyb19yYwAaBnRyb19yYgASBnRyb19yYQA1Bnhvcl9yYwAaBnhvcl9yYgASBnhvcl9yYQA1CWd0Zl9pbW0xMgAJB2FkZGlfcmIAEgdhZGRpX3JhADUKYW5kaV9pbW0xMgAJB2FuZGlfcmIAEgdhbmRpX3JhADUHYmhzaF9yYgASB2Joc2hfcmEANQZjY3BfcmQANgdibGRkX3JjABoHYmxkZF9yYgASB2JsZGRfcmEANQdic2l6X3JiABIHYnNpel9yYQA1B2J1cm5fcmIAEgdidXJuX3JhADUHY2FsbF9yZAA2B2NhbGxfcmMAGgdjYWxsX3JiABIHY2FsbF9yYQA1B2Nyb29fcmIAEgdjcm9vX3JhADUHY3Npel9yYgASB2NzaXpfcmEANQpkaXZpX2ltbTEyAAkHZGl2aV9yYgASB2RpdmlfcmEANQdlY2FsX3JkADYHZWNhbF9yYwAaB2VjYWxfcmIAEgdlY2FsX3JhADUHZWNrMV9yYwAaB2VjazFfcmIAEgdlY2sxX3JhADUHZWNvcF9yZAA2B2Vjb3BfcmMAGgdlY29wX3JiABIHZWNvcF9yYQA1B2VjcjFfcmMAGgdlY3IxX3JiABIHZWNyMV9yYQA1B2VkMTlfcmQANgdlZDE5X3JjABoHZWQxOV9yYgASB2VkMTlfcmEANQdlcGFyX3JkADYHZXBhcl9yYwAaB2VwYXJfcmIAEgdlcGFyX3JhADUKZXhwaV9pbW0xMgAJB2V4cGlfcmIAEgdleHBpX3JhADUKam1wYl9pbW0xOAANB2ptcGJfcmEANQpqbXBmX2ltbTE4AA0Ham1wZl9yYQA1B2puZWJfcmMAGgdqbmViX3JiABIHam5lYl9yYQA1B2puZWZfcmMAGgdqbmVmX3JiABIHam5lZl9yYQA1CmpuZWlfaW1tMTIACQdqbmVpX3JiABIHam5laV9yYQA1CmpuemJfaW1tMTIACQdqbnpiX3JiABIHam56Yl9yYQA1CmpuemZfaW1tMTIACQdqbnpmX3JiABIHam56Zl9yYQA1CmpuemlfaW1tMTgADQdqbnppX3JhADUHazI1Nl9yYwAaB2syNTZfcmIAEgdrMjU2X3JhADUHbG9nZF9yZAA2B2xvZ2RfcmMAGgdsb2dkX3JiABIHbG9nZF9yYQA1Cm1jbGlfaW1tMTgADQdtY2xpX3JhADUKbWNwaV9pbW0xMgAJB21jcGlfcmIAEgdtY3BpX3JhADUHbWludF9yYgASB21pbnRfcmEANQdtbGR2X3JkADYHbWxkdl9yYwAaB21sZHZfcmIAEgdtbGR2X3JhADUHbWxvZ19yYwAaB21sb2dfcmIAEgdtbG9nX3JhADUKbW9kaV9pbW0xMgAJB21vZGlfcmIAEgdtb2RpX3JhADUHbW92ZV9yYgASB21vdmVfcmEANQptb3ZpX2ltbTE4AA0HbW92aV9yYQA1B21yb29fcmMAGgdtcm9vX3JiABIHbXJvb19yYQA1Cm11bGlfaW1tMTIACQdtdWxpX3JiABIHbXVsaV9yYQA1B3JldGRfcmIAEgdyZXRkX3JhADUHczI1Nl9yYwAaB3MyNTZfcmIAEgdzMjU2X3JhADUHc2N3cV9yYwAaB3Njd3FfcmIAEgdzY3dxX3JhADUKc2xsaV9pbW0xMgAJB3NsbGlfcmIAEgdzbGxpX3JhADUKc3JsaV9pbW0xMgAJB3NybGlfcmIAEgdzcmxpX3JhADUHc3J3cV9yZAA2B3Nyd3FfcmMAGgdzcndxX3JiABIHc3J3cV9yYQA1CnN1YmlfaW1tMTIACQdzdWJpX3JiABIHc3ViaV9yYQA1B3N3d3FfcmQANgdzd3dxX3JjABoHc3d3cV9yYgASB3N3d3FfcmEANQd0aW1lX3JiABIHdGltZV9yYQA1B3dkYW1fcmQANgd3ZGFtX3JjABoHd2RhbV9yYgASB3dkYW1fcmEANQd3ZGNtX3JjABoHd2RjbV9yYgASB3dkY21fcmEANQd3ZGR2X3JjABoHd2Rkdl9yYgASB3dkZHZfcmEANQd3ZG1kX3JkADYHd2RtZF9yYwAaB3dkbWRfcmIAEgd3ZG1kX3JhADUHd2RtbF9yYwAaB3dkbWxfcmIAEgd3ZG1sX3JhADUHd2RtbV9yZAA2B3dkbW1fcmMAGgd3ZG1tX3JiABIHd2RtbV9yYQA1B3dkb3BfcmMAGgd3ZG9wX3JiABIHd2RvcF9yYQA1B3dxYW1fcmQANgd3cWFtX3Jj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AAssAQF/QRBBBBDIASIBQoGAgIAQNwIAIAEgAK1C////B4NCIIY3AgggAUEIagskACAAENIBIAAoAgAEQBDZAQALIABBADYCACAAIAFBAEc6AAQLKAAgAxAWIQMgABDJASABEMkBIAIQyQEgAxDQAUEIdEHkAHIQ0wEQZwsoACADEBYhAyAAEMkBIAEQyQEgAhDJASADENABQQh0QeUAchDTARBnCyAAIABBAWsiAEEFTQRAIABBAWoPC0HggsAAQRkQ2gEACykBAX9BEEEEEMgBIgEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCykBAX9BEEEEEMgBIgEgADoADCABQQA2AgggAUKBgICAEDcCACABQQhqCyIAIAIQAiECIAAQyQEgARDJASACEEdBCHRBygByENMBEGcLDwAgACABIAIgA0ESEPMBCw8AIAAgASACIANBGBDzAQsPACAAIAEgAiADQRwQ8wELDwAgACABIAIgA0EdEPMBCw8AIAAgASACIANBIRD0AQsPACAAIAEgAiADQSIQ8wELDwAgACABIAIgA0EjEPMBCw8AIAAgASACIANBKBDzAQsPACAAIAEgAiADQSoQ8wELDwAgACABIAIgA0EsEPMBCw8AIAAgASACIANBLxDzAQsPACAAIAEgAiADQTgQ8wELEAAgACABIAIgA0HTABD0AQsQACAAIAEgAiADQdQAEPQBCxAAIAAgASACIANB3gAQ9AELEAAgACABIAIgA0HfABD0AQsQACAAIAEgAiADQeAAEPQBCxAAIAAgASACIANB4QAQ9AELEAAgACABIAIgA0HiABD0AQsQACAAIAEgAiADQeMAEPQBCxAAIAAgASACIANB5AAQ9AELEAAgACABIAIgA0HlABD0AQsQACAAIAEgAiADQeYAEPMBCxAAIAAgASACIANB5wAQ8wELEAAgACABIAIgA0HoABDzAQsQACAAIAEgAiADQekAEPMBCxAAIAAgASACIANB6gAQ8wELEAAgACABIAIgA0HrABDzAQsQACAAIAEgAiADQewAEPMBCxAAIAAgASACIANB7gAQ8wELEAAgACABIAIgA0HvABDzAQsQACAAIAEgAiADQfAAEPMBCx4AIAEQZiEBIAAQyQEgARDGAUEIdEHMAHIQ0wEQZwsZACAAIAEgAkEgQQAgBBtBEEEAIAMbchAhCw0AIAAgASACQQEQ9QELDQAgACABIAJBAhD1AQsNACAAIAEgAkEDEPUBCw0AIAAgASACQQQQ9QELDQAgACABIAJBBRD1AQsNACAAIAEgAkEGEPUBCw0AIAAgASACQQcQ9QELDQAgACABIAJBCBD1AQsNACAAIAEgAkEJEPUBCw0AIAAgASACQQsQ9QELDQAgACABIAJBDRD1AQsNACAAIAEgAkEOEPUBCw0AIAAgASACQQ8Q9QELDQAgACABIAJBEBD1AQsNACAAIAEgAkEREPUBCw0AIAAgASACQRcQ9QELDQAgACABIAJBJhD1AQsNACAAIAEgAkEnEPUBCw0AIAAgASACQSkQ9QELDQAgACABIAJBKxD1AQsNACAAIAEgAkEtEPUBCw0AIAAgASACQS4Q9QELDQAgACABIAJBMBD1AQsNACAAIAEgAkExEPUBCw0AIAAgASACQTUQ9QELDQAgACABIAJBNxD1AQsNACAAIAEgAkE5EPYBCw0AIAAgASACQToQ9gELDQAgACABIAJBOxD2AQsNACAAIAEgAkE8EPYBCw0AIAAgASACQT0Q9gELDQAgACABIAJBPhD2AQsNACAAIAEgAkE/EPYBCw4AIAAgASACQcAAEPYBCw4AIAAgASACQcEAEPYBCw4AIAAgASACQcIAEPYBCw4AIAAgASACQcMAEPYBCw4AIAAgASACQcQAEPYBCw4AIAAgASACQcUAEPYBCw4AIAAgASACQcYAEPYBCw4AIAAgASACQccAEPYBCw4AIAAgASACQcgAEPYBCw4AIAAgASACQckAEPYBCw4AIAAgASACQcoAEPYBCw4AIAAgASACQdEAEPYBCw4AIAAgASACQdIAEPYBCxcBAX8gAEH/AXFBP00EfyAAEGgFQQALCxsAIAAQ0gEgACgCAEF/RgRAENkBAAsgAC0ABAsJACAAQRMQ9wELCQAgAEEVEPcBCwkAIABBGhD3AQsJACAAQSAQ9wELCQAgAEElEPcBCyIBAX9BEEEEEMgBIgBCADcCCCAAQoGAgIAQNwIAIABBCGoLCQAgAEE0EPcBCwkAIABBNhD3AQsKACAAQdgAEPcBCwoAIABB2QAQ9wELFwAgAUEQdEGAgPwDcSAAQQJ0QfwBcXILGwAgABDJASABEMkBIAIQyQEQOkEIdBDTARBnCxIAIAEgABDVASIABEAgAA8LAAt1AQF/IABB/wFxQcAATwRAIwBBEGsiASQAIAFBIjYCDCABQYCAwAA2AggjAEEgayIAJAAgAEEBNgIEIABB/IbAADYCACAAQgE3AgwgACABQQhqrUKAgICAwACENwMYIAAgAEEYajYCCCAAQbiAwAAQVwALIAALFAAgACABIAJBIEEAIAMbIARyECELFwAgABAbIAEQGyACEBsgAxAWENABEGILFgAgABAbIAEQGyACEBsgAxAbECEQYgsTACAAIAAoAgBBAWs2AgAgARBeCxMAIAAgACgCAEEBazYCACABEF8LEgAgABAbIAEQGyACEAIQRxBiCxEAIAAgASACQSBBACADGxAhCxIAIAAQGyABEBsgAhAdEEcQYgsTACAABEAPC0HcisAAQRsQ2gEACxQBAX9BBEEBEMgBIgEgADYAACABCw0AIAEEQCAAIAEQGQsLgQMBBX9BmY/AAC0AABoCfyAAQQlPBEACQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhADDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQAwsgAEEIaiEDCyADDAELIAEQAQsLDQAgABDeAUEKdkE/cQsPACAAEBsgARBmEMYBEGILCwAgACMAaiQAIwALDgBB94rAAEHPABDaAQALCQAgACABEAAACwkAIABBP3EQaAsKACAAEBtB/wFxCwgAIABBBBAZCwcAIABBCHQLCQBBMxDTARBnCwYAQQsQaAsGAEEKEGgLBgBBCBBoCwYAQQ8QaAsGAEEGEGgLBgBBCRBoCwYAQQcQ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", imports);
17020
+ return _loadWasmModule(1, null, "AGFzbQEAAAABRwxgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38Bf2ACf38AYAABf2ABfwBgBX9/f39/AX9gA39/fwBgAn5/AX9gBH9/f38AYAAAAhgBA3diZxBfX3diaW5kZ2VuX3Rocm93AAQDigKIAgEDCQEEBAQEBAEEAQQEAQMKAQEEAQQBAQEDAQQEAQEEAQEEAgEBBAICAgICAgQEBAMDAwMDAwMDAgEBBAQABAICAwAAAwMDAwMDAwMDAwABAQQEBAEBAQEBAQECAQYBAQEEBgYBAQEEBAICAQUAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEDAAEHAgIGBAQAAgAGCAMBAwELAwMDBAEBBAYBBQQFBQUFBQUFBQUFBQUFBQUFBQUEBwcCAgMCBwcAAAgAAwQFAXABCAgFAwEAEQYJAX8BQYCAwAALB8FN3QUGbWVtb3J5AgAWX193YmdfY29tcGFyZWFyZ3NfZnJlZQAUGl9fd2JnX2dldF9jb21wYXJlYXJnc19tb2RlAFAaX193Ymdfc2V0X2NvbXBhcmVhcmdzX21vZGUAPCJfX3diZ19nZXRfY29tcGFyZWFyZ3NfaW5kaXJlY3RfcmhzAFEiX193Ymdfc2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBTEmNvbXBhcmVhcmdzX3RvX2ltbQBfFGNvbXBhcmVhcmdzX2Zyb21faW1tABUVX193YmdfZ2V0X21hdGhhcmdzX29wAFAVX193Ymdfc2V0X21hdGhhcmdzX29wAD0SX193YmdfbXVsYXJnc19mcmVlABYeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFAeX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFQSX193YmdfZGl2YXJnc19mcmVlACceX193YmdfZ2V0X2RpdmFyZ3NfaW5kaXJlY3RfcmhzAMABHl9fd2JnX3NldF9kaXZhcmdzX2luZGlyZWN0X3JocwBpG19fd2JnX3BhbmljaW5zdHJ1Y3Rpb25fZnJlZQAcIXBhbmljaW5zdHJ1Y3Rpb25fZXJyb3JfdHlwZXNjcmlwdABCF3BhbmljaW5zdHJ1Y3Rpb25fcmVhc29uAGAccGFuaWNpbnN0cnVjdGlvbl9pbnN0cnVjdGlvbgBhDGdtX2Zyb21fYXJncwDbAQ1ndGZfZnJvbV9hcmdzANQBB2dtX2FyZ3MAjwEIZ3RmX2FyZ3MAbg53ZGNtX2Zyb21fYXJncwBADndkb3BfZnJvbV9hcmdzAEAOd2RtbF9mcm9tX2FyZ3MAQQ53ZGR2X2Zyb21fYXJncwDPAQl3ZGNtX2FyZ3MAKAl3cWNtX2FyZ3MAKQl3ZG9wX2FyZ3MAKgl3cW9wX2FyZ3MAKwl3ZG1sX2FyZ3MALAl3cW1sX2FyZ3MALQl3ZGR2X2FyZ3MAagl3cWR2X2FyZ3MAaxBfX3diZ19pbW0wNl9mcmVlAC4QX193YmdfaW1tMTJfZnJlZQAvEF9fd2JnX2ltbTE4X2ZyZWUAMA5fX3diZ19hZGRfZnJlZQAdD19fd2JnX25vb3BfZnJlZQAJEmFkZF9uZXdfdHlwZXNjcmlwdABDBmFkZF9yYQA6BmFkZF9yYgAXBmFkZF9yYwAeA2FkZADMAQNhbmQAkQEDZGl2AJIBAmVxAJMBA2V4cACUAQJndACVAQJsdACWAQRtbG9nAJcBBG1yb28AmAEEbW9kXwCZAQVtb3ZlXwBFA211bACaAQNub3QARgJvcgCbAQNzbGwAnAEDc3JsAJ0BA3N1YgCeAQN4b3IAnwEEbWxkdgBvA3JldADBAQRyZXRkAEcTYWxvY19uZXdfdHlwZXNjcmlwdABdB2Fsb2NfcmEAJQRhbG9jAMIBA21jbABIA21jcACgAQNtZXEAcBNiaHNoX25ld190eXBlc2NyaXB0ABoEYmhzaAAxBGJoZWkAwwEEYnVybgBJBGNhbGwAcQNjY3AAcgRjcm9vAEoEY3NpegBLAmNiAMQBA2xkYwBzA2xvZwB0BGxvZ2QAdQRtaW50AEwEcnZydADFAQRzY3dxAKEBA3NydwCiAQRzcndxAHYDc3d3AKMBBHN3d3EAdwJ0cgCkAQN0cm8AeARlY2sxAKUBBGVjcjEApgEEZWQxOQB5BGsyNTYApwEEczI1NgCoAQR0aW1lAE0Tbm9vcF9uZXdfdHlwZXNjcmlwdABtBG5vb3AA5wEEZmxhZwDGAQNiYWwAqQEDam1wAMcBA2puZQCqAQNzbW8AehNhZGRpX25ld190eXBlc2NyaXB0AEQKYWRkaV9pbW0xMgAKBGFkZGkAqwEEYW5kaQCsAQRkaXZpAK0BBGV4cGkArgEEbW9kaQCvAQRtdWxpALABA29yaQCxAQRzbGxpALIBBHNybGkAswEEc3ViaQC0AQR4b3JpALUBBGpuZWkAtgECbGIAtwECbHcAuAECc2IAuQECc3cAugEEbWNwaQC7ARJndGZfbmV3X3R5cGVzY3JpcHQA1gEDZ3RmALwBBG1jbGkAMhFnbV9uZXdfdHlwZXNjcmlwdABOCGdtX2ltbTE4AA8CZ20AMwRtb3ZpADQEam56aQA1BGptcGYANhNqbXBiX25ld190eXBlc2NyaXB0ABAEam1wYgA3BGpuemYAvQEEam56YgC+AQRqbmVmAHsKam5lYl9pbW0wNgA7BGpuZWIAfAJqaQBVE2NmZWlfbmV3X3R5cGVzY3JpcHQAJgpjZmVpX2ltbTI0AAwEY2ZlaQBWBGNmc2kAVwNjZmUAyAEDY2ZzAMkBBHBzaGwAWARwc2hoAFkEcG9wbABaBHBvcGgAWxN3ZGNtX25ld190eXBlc2NyaXB0ANABBHdkY20AfQR3cWNtAH4Ed2RvcAB/BHdxb3AAgAEEd2RtbACBAQR3cW1sAIIBBHdkZHYAgwEEd3FkdgCEAQR3ZG1kAIUBBHdxbWQAhgEEd2RhbQCHAQR3cWFtAIgBBHdkbW0AiQEEd3FtbQCKAQRlY2FsAIsBBGJzaXoAOBNibGRkX25ld190eXBlc2NyaXB0ADkHYmxkZF9yZAA7BGJsZGQAjAEEZWNvcACNAQRlcGFyAI4BFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADhRpbnN0cnVjdGlvbl90b19ieXRlcwAIEGluc3RydWN0aW9uX3NpemUA+gERcmVnaWRfbmV3X2NoZWNrZWQAvwEJcmVnaWRfYmFsAOkBCnJlZ2lkX2NnYXMA6gEJcmVnaWRfZXJyAOsBCnJlZ2lkX2ZsYWcA7AEIcmVnaWRfZnAA7QEKcmVnaWRfZ2dhcwDuAQhyZWdpZF9ocADvAQhyZWdpZF9pcwDwAQhyZWdpZF9vZgDxAQlyZWdpZF9vbmUA8gEIcmVnaWRfcGMA8wEJcmVnaWRfcmV0APQBCnJlZ2lkX3JldGwA9QEIcmVnaWRfc3AA9gEJcmVnaWRfc3BwAPcBDnJlZ2lkX3dyaXRhYmxlAPgBCnJlZ2lkX3plcm8A+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3JhADoHd2RvcF9yYwAeB3dkb3BfcmIAFwd3ZG9wX3JhADoHd3FhbV9yZAA7B3dxYW1fcmMAHgd3cWFtX3JiABcHd3FhbV9yYQA6B3dxY21fcmMAHgd3cWNtX3JiABcHd3FjbV9yYQA6B3dxZHZfcmMAHgd3cWR2X3JiABcHd3Fkdl9yYQA6B3dxbWRfcmQAOwd3cW1kX3JjAB4Hd3FtZF9yYgAXB3dxbWRfcmEAOgd3cW1sX3JjAB4Hd3FtbF9yYgAXB3dxbWxfcmEAOgd3cW1tX3JkADsHd3FtbV9yYwAeB3dxbW1fcmIAFwd3cW1tX3JhADoHd3FvcF9yYwAeB3dxb3BfcmIAFwd3cW9wX3JhADoKeG9yaV9pbW0xMgAKB3hvcmlfcmIAFwd4b3JpX3JhADoTam5lYl9uZXdfdHlwZXNjcmlwdAA5EF9fd2JnX3JlZ2lkX2ZyZWUALhBfX3diZ19pbW0yNF9mcmVlADAfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgDcARNfX3diaW5kZ2VuX2V4cG9ydF8wANgBCRMBAEEBCwcC3gHfAeAB6AHkAdEBCvOQAYgC7SICCH8BfgJAAkACQAJAAkACQAJAAkAgAEH1AU8EQCAAQc3/e08NBSAAQQtqIgBBeHEhBUHsj8AAKAIAIghFDQRBACAFayEEAn9BACAFQYACSQ0AGkEfIAVB////B0sNABogBUEGIABBCHZnIgBrdkEBcSAAQQF0a0E+agsiB0ECdEHQjMAAaigCACICRQRAQQAhAAwCC0EAIQAgBUEZIAdBAXZrQQAgB0EfRxt0IQMDQAJAIAIoAgRBeHEiBiAFSQ0AIAYgBWsiBiAETw0AIAIhASAGIgQNAEEAIQQgASEADAQLIAIoAhQiBiAAIAYgAiADQR12QQRxakEQaigCACICRxsgACAGGyEAIANBAXQhAyACDQALDAELQeiPwAAoAgAiAkEQIABBC2pB+ANxIABBC0kbIgVBA3YiAHYiAUEDcQRAAkAgAUF/c0EBcSAAaiIBQQN0IgBB4I3AAGoiAyAAQeiNwABqKAIAIgAoAggiBEcEQCAEIAM2AgwgAyAENgIIDAELQeiPwAAgAkF+IAF3cTYCAAsgACABQQN0IgFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMCAsgBUHwj8AAKAIATQ0DAkACQCABRQRAQeyPwAAoAgAiAEUNBiAAaEECdEHQjMAAaigCACIBKAIEQXhxIAVrIQQgASECA0ACQCABKAIQIgANACABKAIUIgANACACKAIYIQcCQAJAIAIgAigCDCIARgRAIAJBFEEQIAIoAhQiABtqKAIAIgENAUEAIQAMAgsgAigCCCIBIAA2AgwgACABNgIIDAELIAJBFGogAkEQaiAAGyEDA0AgAyEGIAEiAEEUaiAAQRBqIAAoAhQiARshAyAAQRRBECABG2ooAgAiAQ0ACyAGQQA2AgALIAdFDQQgAiACKAIcQQJ0QdCMwABqIgEoAgBHBEAgB0EQQRQgBygCECACRhtqIAA2AgAgAEUNBQwECyABIAA2AgAgAA0DQeyPwABB7I/AACgCAEF+IAIoAhx3cTYCAAwECyAAKAIEQXhxIAVrIgEgBCABIARJIgEbIQQgACACIAEbIQIgACEBDAALAAsCQEECIAB0IgNBACADa3IgASAAdHFoIgBBA3QiAUHgjcAAaiIDIAFB6I3AAGooAgAiASgCCCIERwRAIAQgAzYCDCADIAQ2AggMAQtB6I/AACACQX4gAHdxNgIACyABIAVBA3I2AgQgASAFaiIGIABBA3QiACAFayIEQQFyNgIEIAAgAWogBDYCAEHwj8AAKAIAIgIEQCACQXhxQeCNwABqIQBB+I/AACgCACEDAn9B6I/AACgCACIFQQEgAkEDdnQiAnFFBEBB6I/AACACIAVyNgIAIAAMAQsgACgCCAshAiAAIAM2AgggAiADNgIMIAMgADYCDCADIAI2AggLQfiPwAAgBjYCAEHwj8AAIAQ2AgAgAUEIag8LIAAgBzYCGCACKAIQIgEEQCAAIAE2AhAgASAANgIYCyACKAIUIgFFDQAgACABNgIUIAEgADYCGAsCQAJAIARBEE8EQCACIAVBA3I2AgQgAiAFaiIFIARBAXI2AgQgBCAFaiAENgIAQfCPwAAoAgAiA0UNASADQXhxQeCNwABqIQBB+I/AACgCACEBAn9B6I/AACgCACIGQQEgA0EDdnQiA3FFBEBB6I/AACADIAZyNgIAIAAMAQsgACgCCAshAyAAIAE2AgggAyABNgIMIAEgADYCDCABIAM2AggMAQsgAiAEIAVqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQtB+I/AACAFNgIAQfCPwAAgBDYCAAsgAkEIag8LIAAgAXJFBEBBACEBQQIgB3QiAEEAIABrciAIcSIARQ0DIABoQQJ0QdCMwABqKAIAIQALIABFDQELA0AgACABIAAoAgRBeHEiAyAFayIGIARJIgcbIQggACgCECICRQRAIAAoAhQhAgsgASAIIAMgBUkiABshASAEIAYgBCAHGyAAGyEEIAIiAA0ACwsgAUUNACAFQfCPwAAoAgAiAE0gBCAAIAVrT3ENACABKAIYIQcCQAJAIAEgASgCDCIARgRAIAFBFEEQIAEoAhQiABtqKAIAIgINAUEAIQAMAgsgASgCCCICIAA2AgwgACACNgIIDAELIAFBFGogAUEQaiAAGyEDA0AgAyEGIAIiAEEUaiAAQRBqIAAoAhQiAhshAyAAQRRBECACG2ooAgAiAg0ACyAGQQA2AgALIAdFDQMgASABKAIcQQJ0QdCMwABqIgIoAgBHBEAgB0EQQRQgBygCECABRhtqIAA2AgAgAEUNBAwDCyACIAA2AgAgAA0CQeyPwABB7I/AACgCAEF+IAEoAhx3cTYCAAwDCwJAAkACQAJAAkAgBUHwj8AAKAIAIgFLBEAgBUH0j8AAKAIAIgBPBEBBACEEIAVBr4AEaiIAQRB2QAAiAUF/RiIDDQcgAUEQdCICRQ0HQYCQwABBACAAQYCAfHEgAxsiBEGAkMAAKAIAaiIANgIAQYSQwABBhJDAACgCACIBIAAgACABSRs2AgACQAJAQfyPwAAoAgAiAwRAQdCNwAAhAANAIAAoAgAiASAAKAIEIgZqIAJGDQIgACgCCCIADQALDAILQYyQwAAoAgAiAEEAIAAgAk0bRQRAQYyQwAAgAjYCAAtBkJDAAEH/HzYCAEHUjcAAIAQ2AgBB0I3AACACNgIAQeyNwABB4I3AADYCAEH0jcAAQeiNwAA2AgBB6I3AAEHgjcAANgIAQfyNwABB8I3AADYCAEHwjcAAQeiNwAA2AgBBhI7AAEH4jcAANgIAQfiNwABB8I3AADYCAEGMjsAAQYCOwAA2AgBBgI7AAEH4jcAANgIAQZSOwABBiI7AADYCAEGIjsAAQYCOwAA2AgBBnI7AAEGQjsAANgIAQZCOwABBiI7AADYCAEGkjsAAQZiOwAA2AgBBmI7AAEGQjsAANgIAQdyNwABBADYCAEGsjsAAQaCOwAA2AgBBoI7AAEGYjsAANgIAQaiOwABBoI7AADYCAEG0jsAAQaiOwAA2AgBBsI7AAEGojsAANgIAQbyOwABBsI7AADYCAEG4jsAAQbCOwAA2AgBBxI7AAEG4jsAANgIAQcCOwABBuI7AADYCAEHMjsAAQcCOwAA2AgBByI7AAEHAjsAANgIAQdSOwABByI7AADYCAEHQjsAAQciOwAA2AgBB3I7AAEHQjsAANgIAQdiOwABB0I7AADYCAEHkjsAAQdiOwAA2AgBB4I7AAEHYjsAANgIAQeyOwABB4I7AADYCAEH0jsAAQeiOwAA2AgBB6I7AAEHgjsAANgIAQfyOwABB8I7AADYCAEHwjsAAQeiOwAA2AgBBhI/AAEH4jsAANgIAQfiOwABB8I7AADYCAEGMj8AAQYCPwAA2AgBBgI/AAEH4jsAANgIAQZSPwABBiI/AADYCAEGIj8AAQYCPwAA2AgBBnI/AAEGQj8AANgIAQZCPwABBiI/AADYCAEGkj8AAQZiPwAA2AgBBmI/AAEGQj8AANgIAQayPwABBoI/AADYCAEGgj8AAQZiPwAA2AgBBtI/AAEGoj8AANgIAQaiPwABBoI/AADYCAEG8j8AAQbCPwAA2AgBBsI/AAEGoj8AANgIAQcSPwABBuI/AADYCAEG4j8AAQbCPwAA2AgBBzI/AAEHAj8AANgIAQcCPwABBuI/AADYCAEHUj8AAQciPwAA2AgBByI/AAEHAj8AANgIAQdyPwABB0I/AADYCAEHQj8AAQciPwAA2AgBB5I/AAEHYj8AANgIAQdiPwABB0I/AADYCAEH8j8AAIAI2AgBB4I/AAEHYj8AANgIAQfSPwAAgBEEoayIANgIAIAIgAEEBcjYCBCAAIAJqQSg2AgRBiJDAAEGAgIABNgIADAgLIAIgA00gASADS3INACAAKAIMRQ0DC0GMkMAAQYyQwAAoAgAiACACIAAgAkkbNgIAIAIgBGohAUHQjcAAIQACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAAKAIMRQ0BC0HQjcAAIQADQAJAIAMgACgCACIBTwRAIAMgASAAKAIEaiIGSQ0BCyAAKAIIIQAMAQsLQfyPwAAgAjYCAEH0j8AAIARBKGsiADYCACACIABBAXI2AgQgACACakEoNgIEQYiQwABBgICAATYCACADIAZBIGtBeHFBCGsiACAAIANBEGpJGyIBQRs2AgRB0I3AACkCACEJIAFBEGpB2I3AACkCADcCACABIAk3AghB1I3AACAENgIAQdCNwAAgAjYCAEHYjcAAIAFBCGo2AgBB3I3AAEEANgIAIAFBHGohAANAIABBBzYCACAAQQRqIgAgBkkNAAsgASADRg0HIAEgASgCBEF+cTYCBCADIAEgA2siAEEBcjYCBCABIAA2AgAgAEGAAk8EQCADIAAQBwwICyAAQXhxQeCNwABqIQECf0Hoj8AAKAIAIgJBASAAQQN2dCIAcUUEQEHoj8AAIAAgAnI2AgAgAQwBCyABKAIICyEAIAEgAzYCCCAAIAM2AgwgAyABNgIMIAMgADYCCAwHCyAAIAI2AgAgACAAKAIEIARqNgIEIAIgBUEDcjYCBCABIAIgBWoiA2shBSABQfyPwAAoAgBGDQMgAUH4j8AAKAIARg0EIAEoAgQiBEEDcUEBRgRAIAEgBEF4cSIAEAYgACAFaiEFIAAgAWoiASgCBCEECyABIARBfnE2AgQgAyAFQQFyNgIEIAMgBWogBTYCACAFQYACTwRAIAMgBRAHDAYLIAVBeHFB4I3AAGohAAJ/QeiPwAAoAgAiAUEBIAVBA3Z0IgRxRQRAQeiPwAAgASAEcjYCACAADAELIAAoAggLIQUgACADNgIIIAUgAzYCDCADIAA2AgwgAyAFNgIIDAULQfSPwAAgACAFayIBNgIAQfyPwABB/I/AACgCACIAIAVqIgI2AgAgAiABQQFyNgIEIAAgBUEDcjYCBCAAQQhqIQQMBgtB+I/AACgCACEAAkAgASAFayICQQ9NBEBB+I/AAEEANgIAQfCPwABBADYCACAAIAFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMAQtB8I/AACACNgIAQfiPwAAgACAFaiIDNgIAIAMgAkEBcjYCBCAAIAFqIAI2AgAgACAFQQNyNgIECwwICyAAIAQgBmo2AgRB/I/AAEH8j8AAKAIAIgBBD2pBeHEiAUEIayICNgIAQfSPwABB9I/AACgCACAEaiIDIAAgAWtqQQhqIgE2AgAgAiABQQFyNgIEIAAgA2pBKDYCBEGIkMAAQYCAgAE2AgAMAwtB/I/AACADNgIAQfSPwABB9I/AACgCACAFaiIANgIAIAMgAEEBcjYCBAwBC0H4j8AAIAM2AgBB8I/AAEHwj8AAKAIAIAVqIgA2AgAgAyAAQQFyNgIEIAAgA2ogADYCAAsgAkEIag8LQQAhBEH0j8AAKAIAIgAgBU0NAEH0j8AAIAAgBWsiATYCAEH8j8AAQfyPwAAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAwsgBA8LIAAgBzYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABKAIUIgJFDQAgACACNgIUIAIgADYCGAsCQCAEQRBPBEAgASAFQQNyNgIEIAEgBWoiAiAEQQFyNgIEIAIgBGogBDYCACAEQYACTwRAIAIgBBAHDAILIARBeHFB4I3AAGohAAJ/QeiPwAAoAgAiA0EBIARBA3Z0IgRxRQRAQeiPwAAgAyAEcjYCACAADAELIAAoAggLIQQgACACNgIIIAQgAjYCDCACIAA2AgwgAiAENgIIDAELIAEgBCAFaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIECyABQQhqDwsgAEEIagueCgELfyAAKAIEIQggACgCACEGAkACQAJAIAEoAgAiAyABKAIIIgByBEACQCAARQ0AIAYgCGohBAJAIAEoAgwiCUUEQCAGIQIMAQsgBiECA0AgAiIAIARGDQICfyAAQQFqIAAsAAAiAkEATg0AGiAAQQJqIAJBYEkNABogAEEDaiACQXBJDQAaIABBBGoLIgIgAGsgBWohBSAJIAdBAWoiB0cNAAsLIAIgBEYNACACLAAAGgJAAkAgBUUNACAFIAhJBEBBACEAIAUgBmosAABBv39KDQEMAgtBACEAIAUgCEcNAQsgBiEACyAFIAggABshCCAAIAYgABshBgsgA0UNAyABKAIEIQsgCEEQTwRAIAggBiAGQQNqQXxxIgVrIgdqIgpBA3EhCUEAIQNBACEAIAUgBkcEQCAHQXxNBEBBACEEA0AgACAEIAZqIgIsAABBv39KaiACQQFqLAAAQb9/SmogAkECaiwAAEG/f0pqIAJBA2osAABBv39KaiEAIARBBGoiBA0ACwsgBiECA0AgACACLAAAQb9/SmohACACQQFqIQIgB0EBaiIHDQALCwJAIAlFDQAgBSAKQXxxaiICLAAAQb9/SiEDIAlBAUYNACADIAIsAAFBv39KaiEDIAlBAkYNACADIAIsAAJBv39KaiEDCyAKQQJ2IQQgACADaiEDA0AgBSEHIARFDQRBwAEgBCAEQcABTxsiCUEDcSEKIAlBAnQhBUEAIQIgBEEETwRAIAcgBUHwB3FqIQwgByEAA0AgAiAAKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIAAoAgQiAkF/c0EHdiACQQZ2ckGBgoQIcWogACgCCCICQX9zQQd2IAJBBnZyQYGChAhxaiAAKAIMIgJBf3NBB3YgAkEGdnJBgYKECHFqIQIgAEEQaiIAIAxHDQALCyAEIAlrIQQgBSAHaiEFIAJBCHZB/4H8B3EgAkH/gfwHcWpBgYAEbEEQdiADaiEDIApFDQALIAcgCUH8AXFBAnRqIgIoAgAiAEF/c0EHdiAAQQZ2ckGBgoQIcSEAIApBAUYNAiAAIAIoAgQiAEF/c0EHdiAAQQZ2ckGBgoQIcWohACAKQQJGDQIgACACKAIIIgBBf3NBB3YgAEEGdnJBgYKECHFqIQAMAgsgCEUEQEEAIQMMAwsgCEEDcSECAkAgCEEESQRAQQAhA0EAIQcMAQtBACEDIAYhACAIQQxxIgchBQNAIAMgACwAAEG/f0pqIABBAWosAABBv39KaiAAQQJqLAAAQb9/SmogAEEDaiwAAEG/f0pqIQMgAEEEaiEAIAVBBGsiBQ0ACwsgAkUNAiAGIAdqIQADQCADIAAsAABBv39KaiEDIABBAWohACACQQFrIgINAAsMAgsMAgsgAEEIdkH/gRxxIABB/4H8B3FqQYGABGxBEHYgA2ohAwsCQCADIAtJBEAgCyADayEEQQAhAAJAAkACQCABLQAgQQFrDgIAAQILIAQhAEEAIQQMAQsgBEEBdiEAIARBAWpBAXYhBAsgAEEBaiEAIAEoAhAhByABKAIYIQIgASgCFCEBA0AgAEEBayIARQ0CIAEgByACKAIQEQMARQ0AC0EBDwsMAQtBASEAIAEgBiAIIAIoAgwRAAAEf0EBBUEAIQACfwNAIAQgACAERg0BGiAAQQFqIQAgASAHIAIoAhARAwBFDQALIABBAWsLIARJCw8LIAEoAhQgBiAIIAEoAhgoAgwRAAALnQYCDX8BfiMAQTBrIgckAEEnIQICQCAAQpDOAFQEQCAAIQ8MAQsDQCAHQQlqIAJqIgZBBGsgAEKQzgCAIg9C8LEDfiAAfKciBEH//wNxQeQAbiIDQQF0QYSHwABqLwAAOwAAIAZBAmsgA0Gcf2wgBGpB//8DcUEBdEGEh8AAai8AADsAACACQQRrIQIgAEL/wdcvViAPIQANAAsLIA+nIgRB4wBLBEAgAkECayICIAdBCWpqIA+nIgNB//8DcUHkAG4iBEGcf2wgA2pB//8DcUEBdEGEh8AAai8AADsAAAsCQCAEQQpPBEAgAkECayICIAdBCWpqIARBAXRBhIfAAGovAAA7AAAMAQsgAkEBayICIAdBCWpqIARBMHI6AAALQScgAmshCEEBIQVBK0GAgMQAIAEoAhwiBEEBcSIMGyEJIARBBHFBAnYhCiAHQQlqIAJqIQsCQCABKAIARQRAIAEoAhQiAyABKAIYIgEgCSAKEFwNASADIAsgCCABKAIMEQAAIQUMAQsgASgCBCINIAggDGoiA00EQCABKAIUIgMgASgCGCIBIAkgChBcDQEgAyALIAggASgCDBEAACEFDAELIARBCHEEQCABKAIQIQQgAUEwNgIQIAEtACAhAyABQQE6ACAgASgCFCIOIAEoAhgiBiAJIAoQXA0BIAIgDWogDGtBJmshAgNAIAJBAWsiAgRAIA5BMCAGKAIQEQMARQ0BDAMLCyAOIAsgCCAGKAIMEQAADQEgASADOgAgIAEgBDYCEEEAIQUMAQsgDSADayEDAkACQAJAIAEtACAiAkEBaw4DAAEAAgsgAyECQQAhAwwBCyADQQF2IQIgA0EBakEBdiEDCyACQQFqIQIgASgCECEEIAEoAhghBiABKAIUIQECQANAIAJBAWsiAkUNASABIAQgBigCEBEDAEUNAAsMAQsgASAGIAkgChBcDQAgASALIAggBigCDBEAAA0AQQAhAgNAIAIgA0YEQEEAIQUMAgsgAkEBaiECIAEgBCAGKAIQEQMARQ0ACyACQQFrIANJIQULIAdBMGokACAFC6gGAQF/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEGABGsOJgECAwQFBgcIOwkKCwwNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Dg87OzsQAAtBASEBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFrDg5SAQIDBAUGUQcICQoLDAALAkAgAEHABGsODCcoKSorLC0uLzAxMgALAkAgAEGBAmsOCg0ODxAREhMUFRYACwJAIABBgAZrDgkzNDU2N1FRODkACwJAIABBgAprDgY8PT4/QEEACwJAIABBgAxrDgZCQ0RFRkcACwJAIABBgBJrDgZKS0xNTk8ACwJAIABBgAhrDgI6OwALIABBgA5rDgJHSE8LQQIPC0EDDwtBBA8LQQUPC0EGDwtBBw8LQQkPC0EKDwtBCw8LQQwPC0ENDwtBDg8LQYECDwtBggIPC0GDAg8LQYQCDwtBhQIPC0GGAg8LQYcCDwtBiAIPC0GJAg8LQYoCDwtBgAQPC0GBBA8LQYIEDwtBgwQPC0GEBA8LQYUEDwtBhgQPC0GHBA8LQYkEDwtBigQPC0GLBA8LQYwEDwtBjQQPC0GgBA8LQaEEDwtBpQQPC0HABA8LQcEEDwtBwgQPC0HDBA8LQcQEDwtBxQQPC0HGBA8LQccEDwtByAQPC0HJBA8LQcoEDwtBywQPC0GABg8LQYEGDwtBggYPC0GDBg8LQYQGDwtBhwYPC0GIBg8LQYAIDwtBgQgPC0GACg8LQYEKDwtBggoPC0GDCg8LQYQKDwtBhQoPC0GADA8LQYEMDwtBggwPC0GDDA8LQYQMDwtBhQwPC0GADg8LQYEODwtBgBIPC0GBEg8LQYISDwtBgxIPC0GEEg8LQYUSIQEMAgtBgBAhASAAQYAQRg0BC0HggsAAQRkQ4QEACyABC/gDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB+I/AACgCAEYEQCACKAIEQQNxQQNHDQFB8I/AACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxAGCwJAAkACQCACKAIEIgNBAnFFBEAgAkH8j8AAKAIARg0CIAJB+I/AACgCAEYNAyACIANBeHEiAhAGIAAgASACaiIBQQFyNgIEIAAgAWogATYCACAAQfiPwAAoAgBHDQFB8I/AACABNgIADwsgAiADQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFBgAJPBEAgACABEAcPCyABQXhxQeCNwABqIQICf0Hoj8AAKAIAIgNBASABQQN2dCIBcUUEQEHoj8AAIAEgA3I2AgAgAgwBCyACKAIICyEBIAIgADYCCCABIAA2AgwgACACNgIMIAAgATYCCA8LQfyPwAAgADYCAEH0j8AAQfSPwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEH4j8AAKAIARw0BQfCPwABBADYCAEH4j8AAQQA2AgAPC0H4j8AAIAA2AgBB8I/AAEHwj8AAKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAsL8QIBBH8gACgCDCECAkACQCABQYACTwRAIAAoAhghAwJAAkAgACACRgRAIABBFEEQIAAoAhQiAhtqKAIAIgENAUEAIQIMAgsgACgCCCIBIAI2AgwgAiABNgIIDAELIABBFGogAEEQaiACGyEEA0AgBCEFIAEiAkEUaiACQRBqIAIoAhQiARshBCACQRRBECABG2ooAgAiAQ0ACyAFQQA2AgALIANFDQIgACAAKAIcQQJ0QdCMwABqIgEoAgBHBEAgA0EQQRQgAygCECAARhtqIAI2AgAgAkUNAwwCCyABIAI2AgAgAg0BQeyPwABB7I/AACgCAEF+IAAoAhx3cTYCAAwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtB6I/AAEHoj8AAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYCwu6AgEEf0EfIQIgAEIANwIQIAFB////B00EQCABQQYgAUEIdmciA2t2QQFxIANBAXRrQT5qIQILIAAgAjYCHCACQQJ0QdCMwABqIQRBASACdCIDQeyPwAAoAgBxRQRAIAQgADYCACAAIAQ2AhggACAANgIMIAAgADYCCEHsj8AAQeyPwAAoAgAgA3I2AgAPCwJAAkAgASAEKAIAIgMoAgRBeHFGBEAgAyECDAELIAFBGSACQQF2a0EAIAJBH0cbdCEFA0AgAyAFQR12QQRxakEQaiIEKAIAIgJFDQIgBUEBdCEFIAIhAyACKAIEQXhxIAFHDQALCyACKAIIIgEgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAE2AggPCyAEIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggLlAEBBH8gARDXASABQQhrIgMgAygCAEEBaiICNgIAAkACQCACBEAgASgCACICQX9GDQEgASACQQFqNgIAIAEoAgQoAAAiBMBBAnRBuIPAAGooAgAhBUEBQQQQ2QEiAg0CCwALEN0BAAsgAiAFIARBgH5xcjYAACABIAEoAgBBAWs2AgAgAxBeIABBBDYCBCAAIAI2AgALiwEBAn8gABDXASAAQQhrIgIoAgAhAwJAAkAgAUUEQCADQQFGBEAgAkEANgIAIAJBf0YNAyAAQQRrIgAgACgCAEEBayIANgIAIABFDQIMAwtB+YLAAEE/EOEBAAsgAiADQQFrIgE2AgAgAQ0BIABBBGsiACAAKAIAQQFrIgA2AgAgAA0BCyACQRAQIwsLhAEBA38jAEEQayIBJAAgAUEEaiAAECAgASgCBCIAQQJqLQAAIQIgAC8AACEDIAEoAgggASgCDBDSAUEEQRAQ2QEiAEUEQAALIABBADYCCCAAQoGAgIAQNwIAIAAgAyACQRB0chDmASICQQh2QYAecSACQRh2cjsBDCABQRBqJAAgAEEIagt1AgF/AX4gARDXASABQQhrIgIoAgBBAUYEQCABNQIEIQMgAkEANgIAAkAgAkF/Rg0AIAFBBGsiASABKAIAQQFrIgE2AgAgAQ0AIAJBEBAjCyAAIANCAYM8AAAgACADp0EIdkEBcToAAQ8LQfmCwABBPxDhAQALbAECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ5gEhACABEGMgAEEIdkGA/gNxIABBGHZyIABBgP4DcUEIdHIQZg8LAAsQ3QEAC28BAn8gARDXASABQQhrIgIoAgBBAUYEQCABKAIEIQMgAkEANgIAAkAgAkF/Rg0AIAFBBGsiASABKAIAQQFrIgE2AgAgAQ0AIAJBEBAjCyAAIANBCHY6AAEgACADQQFxOgAADwtB+YLAAEE/EOEBAAtrAQF/IAAQ1wEgAEEIayECAkAgAUUEQCACKAIAQQFHDQEgACgCBCACQQA2AgACQCACQX9GDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAkEQECMLEOUBDwsgAhBeDwtB+YLAAEE/EOEBAAthAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQiAC8AACAAQQJqLQAAQRB0chDmASEAIAEoAgggASgCDBDSASAAQQh2QYD+A3EgAEEYdnIgAEGABnFBCHRyEGYgAUEQaiQAC2cBAX8gABAfIQIgARAiIQFBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgAUEQdEGAgPwHcSACQf8BcUESdCABciIBQYD+A3FBCHQgAUEIdkGA/gNxckEIdnKtQiCGNwIIIABBCGoLewEBfyMAQRBrIgMkAEHMjMAAQcyMwAAoAgAiBEEBajYCAAJAIARBAEgNAAJAQZiQwAAtAABFBEBBlJDAAEGUkMAAKAIAQQFqNgIAQciMwAAoAgBBAE4NAQwCCyADQQhqIAAgAREEAAALQZiQwABBADoAACACRQ0AAAsAC2oBAX8jAEEwayIBJAAgASAAOgAPIABB/wFxQcAATwRAIAFBAjYCFCABQfSAwAA2AhAgAUIBNwIcIAFBAjYCLCABIAFBKGo2AhggASABQQ9qNgIoIAFBEGpBhIHAABA/AAsgAUEwaiQAIAALawEBfyMAQTBrIgEkACABIAA7AQ4gAEH//wNxQYAgTwRAIAFBAjYCFCABQbiBwAA2AhAgAUIBNwIcIAFBAzYCLCABIAFBKGo2AhggASABQQ5qNgIoIAFBEGpByIHAABA/AAsgAUEwaiQAIAALYwECfyMAQRBrIgIkAAJAIAFFBEAgAkEIaiAAEA0MAQsgABDXASAAQQhrIgEgASgCAEEBayIDNgIAIAMNACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsgAkEQaiQAC1sBAn8CQAJAIAAQHyICQRhxDQAgAkEHcSIAQQdGDQBBBEEQENkBIgFFDQEgAUKBgICAEDcCACABIAJBBXZBAXGtQiCGIACtQiiGhDcCCCABQQhqIQELIAEPCwALYwECfyMAQRBrIgIkAAJAIAFFBEAgAkEIaiAAEAsMAQsgABDXASAAQQhrIgEgASgCAEEBayIDNgIAIAMNACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsgAkEQaiQAC14BAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyEOYBIQAgASgCCCABKAIMENIBIABBCHZBgOADcSAAQYAGcUEIdHJBDHYQZyABQRBqJAALFQAgAEGMgsAAQfyBwABBgIAQEIECCxYAIABB0ILAAEHAgsAAQYCAgAgQgQILXgEBfyAAEB8hAiABEB8hAUEEQRAQ2QEiAEUEQAALIABCgYCAgBA3AgAgACABQf8BcUEMdCACQRJ0ciIBQYDgA3FBCHQgAUEIdkGA/gNxckEIdq1CIIY3AgggAEEIagtcAQJ/IAAQ1wEgAEEIayIBKAIAQQFGBEAgAC0ABCABQQA2AgACQCABQX9GDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLQQFxDwtB+YLAAEE/EOEBAAtgAQF/IAAQ1wEgAEEIayECAkAgAUUEQCACKAIAQQFGBEAgAkEANgIAIAJBf0YNAiAAQQRrIgAgACgCAEEBayIANgIAIAANAiACQRQQIw8LQfmCwABBPxDhAQALIAIQZAsLYAEBfyAAENcBIABBCGshAgJAIAFFBEAgAigCAEEBRgRAIAJBADYCACACQX9GDQIgAEEEayIAIAAoAgBBAWsiADYCACAADQIgAkEQECMPC0H5gsAAQT8Q4QEACyACEGMLC1UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyEOYBIQAgASgCCCABKAIMENIBIABBDnZBPHEgAEEednIQZyABQRBqJAALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAtAAQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALWQECfyABENcBIAFBCGsiAyADKAIAQQFqIgI2AgACQCACBEAgASgCACICQX9GDQEgACADNgIIIAAgATYCBCAAIAFBBGo2AgAgASACQQFqNgIADwsACxDdAQALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAvAQQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAoAgQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALzQYBBH8CQCAAQQRrKAIAIgQiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIABBCGsiASAEIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQfiPwAAoAgBGBEAgAigCBEEDcUEDRw0BQfCPwAAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAAwCCyABIAMQBgsCQAJAAkACQAJAIAIoAgQiA0ECcUUEQCACQfyPwAAoAgBGDQIgAkH4j8AAKAIARg0DIAIgA0F4cSICEAYgASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFB+I/AACgCAEcNAUHwj8AAIAA2AgAMBgsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEAdBACEBQZCQwABBkJDAACgCAEEBayIANgIAIAANBEHYjcAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQZCQwABB/x8gASABQf8fTRs2AgAMBAtB/I/AACABNgIAQfSPwABB9I/AACgCACAAaiIANgIAIAEgAEEBcjYCBEH4j8AAKAIAIAFGBEBB8I/AAEEANgIAQfiPwABBADYCAAsgAEGIkMAAKAIAIgNNDQNB/I/AACgCACICRQ0DQQAhAEH0j8AAKAIAIgRBKUkNAkHQjcAAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQfiPwAAgATYCAEHwj8AAQfCPwAAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADAILIABBeHFB4I3AAGohAgJ/QeiPwAAoAgAiA0EBIABBA3Z0IgBxRQRAQeiPwAAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDAELQdiNwAAoAgAiAQRAA0AgAEEBaiEAIAEoAggiAQ0ACwtBkJDAAEH/HyAAIABB/x9NGzYCACADIARPDQBBiJDAAEF/NgIACw8LQfWIwABBpInAABBSAAtBtInAAEHkicAAEFIAC0wAIANB/wFxIAFB/wFxQQx0IABB/wFxQRJ0ciIAIAJB/wFxQQZ0cnIiAUEQdEGAgPwHcSAAQQh2QYD+A3EgAUGA/gNxQQh0ckEIdnILTwECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ2gEgARBjEGcPCwALEN0BAAtVAQF/IAAQIiEAQQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIABBEHRBgID8B3EgAEEIdkGA/gNxIABBgP4DcUEIdHJBCHZyrUIghjcCCCABQQhqC04BAX8gAUUEQCAAEBsaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsQACAAIAEgAiADQd4AEIICCxAAIAAgASACIANB3wAQggILEAAgACABIAIgA0HgABCCAgsQACAAIAEgAiADQeEAEIICCxAAIAAgASACIANB4gAQgwILEAAgACABIAIgA0HjABCDAgtOAQF/IAFFBEAgABAfGg8LIAAQ1wEgAEEIayIBIAEoAgBBAWsiAjYCAAJAIAINACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsLTgEBfyABRQRAIAAQIRoPCyAAENcBIABBCGsiASABKAIAQQFrIgI2AgACQCACDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLC04BAX8gAUUEQCAAECIaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsPACAAIAFBgICAyAEQhAILDAAgACABQcsAEIUCCwwAIAAgAUHMABCFAgsMACAAIAFBzQAQhQILDAAgACABQc4AEIUCCwwAIAAgAUHPABCFAgsMACAAIAFB0AAQhQILDwAgACABQYCAgOgGEIQCC1MBAX8gABAfIQQgARAfIQEgAhAfIQIgAxAfIQNBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgBCABIAIgAxAkrUL///8Hg0IghjcCCCAAQQhqC0UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyENoBIAEoAgggASgCDBDSARBnIAFBEGokAAtLAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQi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AUKBgICAEDcCACABIACtQv///weDQiCGNwIIIAFBCGoLMAEBf0EEQRAQ2QEiAUUEQAALIAEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCzABAX9BBEEQENkBIgFFBEAACyABIAA6AAwgAUEANgIIIAFCgYCAgBA3AgAgAUEIagsoACABKAIARQRAIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsQ3QEACyQAIAAQ1wEgACgCAARAEN0BAAsgAEEANgIAIAAgAUEARzoABAsoACADEBshAyAAEM0BIAEQzQEgAhDNASADENUBQQh0QeQAchDKARBmCygAIAMQGyEDIAAQzQEgARDNASACEM0BIAMQ1QFBCHRB5QByEMoBEGYLIAAgAEEBayIAQQZNBEAgAEEBag8LQeCCwABBGRDhAQALKQEBf0EEQRAQ2QEiAEUEQAALIABCADcCCCAAQoGAgIAQNwIAIABBCGoLIgAgAhAEIQIgABDNASABEM0BIAIQT0EIdEHKAHIQygEQZgsPACAAIAEgAiADQRIQ/AELDwAgACABIAIgA0EYEPwBCw8AIAAgASACIANBHBD8AQsPACAAIAEgAiADQR0Q/AELDwAgACABIAIgA0EhEP0BCw8AIAAgASACIANBIhD8AQsPACAAIAEgAiADQSMQ/AELDwAgACABIAIgA0EoEPwBCw8AIAAgASACIANBKhD8AQsPACAAIAEgAiADQSwQ/AELDwAgACABIAIgA0EvEPwBCw8AIAAgASACIANBOBD8AQsQACAAIAEgAiADQdMAEP0BCxAAIAAgASACIANB1AAQ/QELEAAgACABIAIgA0HeABD9AQsQACAAIAEgAiADQd8AEP0BCxAAIAAgASACIANB4AAQ/QELEAAgACABIAIgA0HhABD9AQsQACAAIAEgAiADQeIAEP0BCxAAIAAgASACIANB4wAQ/QELEAAgACABIAIgA0HkABD9AQsQACAAIAEgAiADQeUAEP0BCxAAIAAgASACIANB5gAQ/AELEAAgACABIAIgA0HnABD8AQsQACAAIAEgAiADQegAEPwBCxAAIAAgASACIANB6QAQ/AELEAAgACABIAIgA0HqABD8AQsQACAAIAEgAiADQesAEPwBCxAAIAAgASACIANB7AAQ/AELEAAgACABIAIgA0HuABD8AQsQACAAIAEgAiADQe8AEPwBCxAAIAAgASACIANB8AAQ/AELHgAgARBsIQEgABDNASABEMsBQQh0QcwAchDKARBmCxkAIAAgASACQSBBACAEG0EQQQAgAxtyECQLDQAgACABIAJBARD+AQsNACAAIAEgAkECEP4BCw0AIAAgASACQQMQ/gELDQAgACABIAJBBBD+AQsNACAAIAEgAkEFEP4BCw0AIAAgASACQQYQ/gELDQAgACABIAJBBxD+AQsNACAAIAEgAkEIEP4BCw0AIAAgASACQQkQ/gELDQAgACABIAJBCxD+AQsNACAAIAEgAkENEP4BCw0AIAAgASACQQ4Q/gELDQAgACABIAJBDxD+AQsNACAAIAEgAkEQEP4BCw0AIAAgASACQREQ/gELDQAgACABIAJBFxD+AQsNACAAIAEgAkEmEP4BCw0AIAAgASACQScQ/gELDQAgACABIAJBKRD+AQsNACAAIAEgAkErEP4BCw0AIAAgASACQS0Q/gELDQAgACABIAJBLhD+AQsNACAAIAEgAkEwEP4BCw0AIAAgASACQTEQ/gELDQAgACABIAJBNRD+AQsNACAAIAEgAkE3EP4BCw0AIAAgASACQTkQ/wELDQAgACABIAJBOhD/AQsNACAAIAEgAkE7EP8BCw0AIAAgASACQTwQ/wELDQAgACABIAJBPRD/AQsNACAAIAEgAkE+EP8BCw0AIAAgASACQT8Q/wELDgAgACABIAJBwAAQ/wELDgAgACABIAJBwQAQ/wELDgAgACABIAJBwgAQ/wELDgAgACABIAJBwwAQ/wELDgAgACABIAJBxAAQ/wELDgAgACABIAJBxQAQ/wELDgAgACABIAJBxgAQ/wELDgAgACABIAJBxwAQ/wELDgAgACABIAJByAAQ/wELDgAgACABIAJByQAQ/wELDgAgACABIAJBygAQ/wELDgAgACABIAJB0QAQ/wELDgAgACABIAJB0gAQ/wELFwEBfyAAQf8BcUE/TQR/IAAQZwVBAAsLGwAgABDXASAAKAIAQX9GBEAQ3QEACyAALQAECwkAIABBExCAAgsJACAAQRUQgAILCQAgAEEaEIACCwkAIABBIBCAAgsJACAAQSUQgAILCQAgAEE0EIACCwkAIABBNhCAAgsKACAAQdgAEIACCwoAIABB2QAQgAILGwEBf0EBQQQQ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", imports);
16921
17021
  }
16922
17022
  __name(wasm, "wasm");
16923
17023
  async function initWasm2() {
16924
- return await __wbg_init(wasm());
17024
+ return await __wbg_init({ module_or_path: wasm() });
16925
17025
  }
16926
17026
  __name(initWasm2, "initWasm");
16927
17027
  initWasm2();
@@ -17187,9 +17287,9 @@
17187
17287
  var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
17188
17288
  function getBuiltinVersions() {
17189
17289
  return {
17190
- FUEL_CORE: "0.41.9",
17191
- FORC: "0.67.0",
17192
- FUELS: "0.100.3"
17290
+ FUEL_CORE: "0.43.1",
17291
+ FORC: "0.68.1",
17292
+ FUELS: "0.100.4"
17193
17293
  };
17194
17294
  }
17195
17295
  __name(getBuiltinVersions, "getBuiltinVersions");
@@ -17342,6 +17442,8 @@ This unreleased fuel-core build may include features and updates not yet support
17342
17442
  ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
17343
17443
  ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
17344
17444
  ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
17445
+ ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
17446
+ ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
17345
17447
  ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
17346
17448
  ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
17347
17449
  ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
@@ -17351,9 +17453,12 @@ This unreleased fuel-core build may include features and updates not yet support
17351
17453
  ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
17352
17454
  ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
17353
17455
  ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
17456
+ ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
17457
+ ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
17354
17458
  ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
17355
17459
  ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
17356
17460
  ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
17461
+ ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
17357
17462
  ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
17358
17463
  ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
17359
17464
  ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
@@ -23248,6 +23353,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
23248
23353
  const poaInstant = poaInstantFlagValue === "true" || poaInstantFlagValue === void 0;
23249
23354
  const nativeExecutorVersion = getFlagValueFromArgs(args, "--native-executor-version") || "0";
23250
23355
  const minGasPrice = getFlagValueFromArgs(args, "--min-gas-price") || "1";
23356
+ const startingGasPrice = getFlagValueFromArgs(args, "--starting-gas-price") || "1";
23251
23357
  const graphQLStartSubstring = "Binding GraphQL provider to";
23252
23358
  const command = fuelCorePath || "fuel-core";
23253
23359
  const ipToUse = ip || "0.0.0.0";
@@ -23289,6 +23395,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
23289
23395
  ["--port", portToUse],
23290
23396
  useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDir],
23291
23397
  ["--min-gas-price", minGasPrice],
23398
+ ["--starting-gas-price", startingGasPrice],
23292
23399
  poaInstant ? ["--poa-instant", "true"] : [],
23293
23400
  ["--native-executor-version", nativeExecutorVersion],
23294
23401
  ["--consensus-key", consensusKey],
@@ -28903,6 +29010,83 @@ spurious results.`);
28903
29010
  var lib_default2 = gql;
28904
29011
 
28905
29012
  // src/providers/__generated__/operations.ts
29013
+ var InputCoinFragmentDoc = lib_default2`
29014
+ fragment InputCoinFragment on InputCoin {
29015
+ type: __typename
29016
+ utxoId
29017
+ owner
29018
+ amount
29019
+ assetId
29020
+ txPointer
29021
+ coinWitnessIndex: witnessIndex
29022
+ predicateGasUsed
29023
+ predicate
29024
+ predicateData
29025
+ }
29026
+ `;
29027
+ var InputMessageFragmentDoc = lib_default2`
29028
+ fragment InputMessageFragment on InputMessage {
29029
+ type: __typename
29030
+ sender
29031
+ recipient
29032
+ amount
29033
+ nonce
29034
+ messageWitnessIndex: witnessIndex
29035
+ predicateGasUsed
29036
+ data
29037
+ predicate
29038
+ predicateData
29039
+ }
29040
+ `;
29041
+ var InputContractFragmentDoc = lib_default2`
29042
+ fragment InputContractFragment on InputContract {
29043
+ type: __typename
29044
+ utxoId
29045
+ balanceRoot
29046
+ stateRoot
29047
+ txPointer
29048
+ contractId
29049
+ }
29050
+ `;
29051
+ var OutputCoinFragmentDoc = lib_default2`
29052
+ fragment OutputCoinFragment on CoinOutput {
29053
+ type: __typename
29054
+ to
29055
+ amount
29056
+ assetId
29057
+ }
29058
+ `;
29059
+ var OutputContractFragmentDoc = lib_default2`
29060
+ fragment OutputContractFragment on ContractOutput {
29061
+ type: __typename
29062
+ inputIndex
29063
+ balanceRoot
29064
+ stateRoot
29065
+ }
29066
+ `;
29067
+ var OutputChangeFragmentDoc = lib_default2`
29068
+ fragment OutputChangeFragment on ChangeOutput {
29069
+ type: __typename
29070
+ to
29071
+ amount
29072
+ assetId
29073
+ }
29074
+ `;
29075
+ var OutputVariableFragmentDoc = lib_default2`
29076
+ fragment OutputVariableFragment on VariableOutput {
29077
+ type: __typename
29078
+ to
29079
+ amount
29080
+ assetId
29081
+ }
29082
+ `;
29083
+ var OutputContractCreatedFragmentDoc = lib_default2`
29084
+ fragment OutputContractCreatedFragment on ContractCreated {
29085
+ type: __typename
29086
+ contract
29087
+ stateRoot
29088
+ }
29089
+ `;
28906
29090
  var SubmittedStatusFragmentDoc = lib_default2`
28907
29091
  fragment SubmittedStatusFragment on SubmittedStatus {
28908
29092
  type: __typename
@@ -29031,6 +29215,87 @@ spurious results.`);
29031
29215
  reason
29032
29216
  }
29033
29217
  `;
29218
+ var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
29219
+ fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
29220
+ type: __typename
29221
+ totalGas
29222
+ totalFee
29223
+ resolvedOutputs {
29224
+ utxoId
29225
+ output {
29226
+ type: __typename
29227
+ ... on CoinOutput {
29228
+ to
29229
+ amount
29230
+ assetId
29231
+ }
29232
+ ... on ContractOutput {
29233
+ inputIndex
29234
+ balanceRoot
29235
+ stateRoot
29236
+ }
29237
+ ... on ChangeOutput {
29238
+ to
29239
+ amount
29240
+ assetId
29241
+ }
29242
+ ... on VariableOutput {
29243
+ to
29244
+ amount
29245
+ assetId
29246
+ }
29247
+ ... on ContractCreated {
29248
+ contract
29249
+ stateRoot
29250
+ }
29251
+ }
29252
+ }
29253
+ preconfirmationReceipts: receipts {
29254
+ ...receiptFragment
29255
+ }
29256
+ }
29257
+ ${ReceiptFragmentDoc}`;
29258
+ var PreconfirmationFailureStatusFragmentDoc = lib_default2`
29259
+ fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
29260
+ type: __typename
29261
+ reason
29262
+ totalGas
29263
+ totalFee
29264
+ resolvedOutputs {
29265
+ utxoId
29266
+ output {
29267
+ type: __typename
29268
+ ... on CoinOutput {
29269
+ to
29270
+ amount
29271
+ assetId
29272
+ }
29273
+ ... on ContractOutput {
29274
+ inputIndex
29275
+ balanceRoot
29276
+ stateRoot
29277
+ }
29278
+ ... on ChangeOutput {
29279
+ to
29280
+ amount
29281
+ assetId
29282
+ }
29283
+ ... on VariableOutput {
29284
+ to
29285
+ amount
29286
+ assetId
29287
+ }
29288
+ ... on ContractCreated {
29289
+ contract
29290
+ stateRoot
29291
+ }
29292
+ }
29293
+ }
29294
+ preconfirmationReceipts: receipts {
29295
+ ...receiptFragment
29296
+ }
29297
+ }
29298
+ ${ReceiptFragmentDoc}`;
29034
29299
  var TransactionStatusSubscriptionFragmentDoc = lib_default2`
29035
29300
  fragment transactionStatusSubscriptionFragment on TransactionStatus {
29036
29301
  ... on SubmittedStatus {
@@ -29051,12 +29316,20 @@ spurious results.`);
29051
29316
  ... on SqueezedOutStatus {
29052
29317
  ...SqueezedOutStatusFragment
29053
29318
  }
29319
+ ... on PreconfirmationSuccessStatus {
29320
+ ...PreconfirmationSuccessStatusFragment
29321
+ }
29322
+ ... on PreconfirmationFailureStatus {
29323
+ ...PreconfirmationFailureStatusFragment
29324
+ }
29054
29325
  }
29055
29326
  ${SubmittedStatusFragmentDoc}
29056
29327
  ${SuccessStatusWithBlockIdFragmentDoc}
29057
29328
  ${MalleableTransactionFieldsFragmentDoc}
29058
29329
  ${FailureStatusWithBlockIdFragmentDoc}
29059
- ${SqueezedOutStatusFragmentDoc}`;
29330
+ ${SqueezedOutStatusFragmentDoc}
29331
+ ${PreconfirmationSuccessStatusFragmentDoc}
29332
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29060
29333
  var TransactionStatusFragmentDoc = lib_default2`
29061
29334
  fragment transactionStatusFragment on TransactionStatus {
29062
29335
  ... on SubmittedStatus {
@@ -29108,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
29108
29381
  }
29109
29382
  }
29110
29383
  ${InputEstimatePredicatesFragmentDoc}`;
29384
+ var DryRunFailureAssembleTxFragmentDoc = lib_default2`
29385
+ fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
29386
+ type: __typename
29387
+ reason
29388
+ receipts {
29389
+ ...receiptFragment
29390
+ }
29391
+ }
29392
+ ${ReceiptFragmentDoc}`;
29393
+ var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
29394
+ fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
29395
+ type: __typename
29396
+ receipts {
29397
+ ...receiptFragment
29398
+ }
29399
+ }
29400
+ ${ReceiptFragmentDoc}`;
29111
29401
  var DryRunFailureStatusFragmentDoc = lib_default2`
29112
29402
  fragment dryRunFailureStatusFragment on DryRunFailureStatus {
29113
29403
  type: __typename
@@ -29464,13 +29754,21 @@ ${NodeInfoFragmentDoc}`;
29464
29754
  ... on SqueezedOutStatus {
29465
29755
  ...SqueezedOutStatusFragment
29466
29756
  }
29757
+ ... on PreconfirmationSuccessStatus {
29758
+ ...PreconfirmationSuccessStatusFragment
29759
+ }
29760
+ ... on PreconfirmationFailureStatus {
29761
+ ...PreconfirmationFailureStatusFragment
29762
+ }
29467
29763
  }
29468
29764
  }
29469
29765
  }
29470
29766
  ${SubmittedStatusFragmentDoc}
29471
29767
  ${SuccessStatusWithBlockIdFragmentDoc}
29472
29768
  ${FailureStatusWithBlockIdFragmentDoc}
29473
- ${SqueezedOutStatusFragmentDoc}`;
29769
+ ${SqueezedOutStatusFragmentDoc}
29770
+ ${PreconfirmationSuccessStatusFragmentDoc}
29771
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29474
29772
  var GetTransactionsDocument = lib_default2`
29475
29773
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
29476
29774
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -29761,6 +30059,77 @@ ${GetMessageFragmentDoc}`;
29761
30059
  }
29762
30060
  }
29763
30061
  `;
30062
+ var AssembleTxDocument = lib_default2`
30063
+ query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
30064
+ assembleTx(
30065
+ tx: $tx
30066
+ blockHorizon: $blockHorizon
30067
+ requiredBalances: $requiredBalances
30068
+ feeAddressIndex: $feeAddressIndex
30069
+ excludeInput: $excludeInput
30070
+ estimatePredicates: $estimatePredicates
30071
+ reserveGas: $reserveGas
30072
+ ) {
30073
+ transaction {
30074
+ id
30075
+ inputs {
30076
+ ... on InputCoin {
30077
+ ...InputCoinFragment
30078
+ }
30079
+ ... on InputContract {
30080
+ ...InputContractFragment
30081
+ }
30082
+ ... on InputMessage {
30083
+ ...InputMessageFragment
30084
+ }
30085
+ }
30086
+ outputs {
30087
+ ... on CoinOutput {
30088
+ ...OutputCoinFragment
30089
+ }
30090
+ ... on ContractOutput {
30091
+ ...OutputContractFragment
30092
+ }
30093
+ ... on ChangeOutput {
30094
+ ...OutputChangeFragment
30095
+ }
30096
+ ... on VariableOutput {
30097
+ ...OutputVariableFragment
30098
+ }
30099
+ ... on ContractCreated {
30100
+ ...OutputContractCreatedFragment
30101
+ }
30102
+ }
30103
+ policies {
30104
+ tip
30105
+ witnessLimit
30106
+ maturity
30107
+ maxFee
30108
+ }
30109
+ witnesses
30110
+ scriptGasLimit
30111
+ }
30112
+ status {
30113
+ ... on DryRunFailureStatus {
30114
+ ...dryRunFailureAssembleTxFragment
30115
+ }
30116
+ ... on DryRunSuccessStatus {
30117
+ ...dryRunSuccessAssembleTxFragment
30118
+ }
30119
+ }
30120
+ gasPrice
30121
+ }
30122
+ }
30123
+ ${InputCoinFragmentDoc}
30124
+ ${InputContractFragmentDoc}
30125
+ ${InputMessageFragmentDoc}
30126
+ ${OutputCoinFragmentDoc}
30127
+ ${OutputContractFragmentDoc}
30128
+ ${OutputChangeFragmentDoc}
30129
+ ${OutputVariableFragmentDoc}
30130
+ ${OutputContractCreatedFragmentDoc}
30131
+ ${DryRunFailureAssembleTxFragmentDoc}
30132
+ ${DryRunSuccessAssembleTxFragmentDoc}`;
29764
30133
  var DryRunDocument = lib_default2`
29765
30134
  mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
29766
30135
  dryRun(
@@ -29819,15 +30188,22 @@ ${GetMessageFragmentDoc}`;
29819
30188
  }
29820
30189
  `;
29821
30190
  var SubmitAndAwaitStatusDocument = lib_default2`
29822
- subscription submitAndAwaitStatus($encodedTransaction: HexString!) {
29823
- submitAndAwaitStatus(tx: $encodedTransaction) {
30191
+ subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
30192
+ submitAndAwaitStatus(
30193
+ tx: $encodedTransaction
30194
+ estimatePredicates: $estimatePredicates
30195
+ includePreconfirmation: $includePreConfirmation
30196
+ ) {
29824
30197
  ...transactionStatusSubscriptionFragment
29825
30198
  }
29826
30199
  }
29827
30200
  ${TransactionStatusSubscriptionFragmentDoc}`;
29828
30201
  var StatusChangeDocument = lib_default2`
29829
- subscription statusChange($transactionId: TransactionId!) {
29830
- statusChange(id: $transactionId) {
30202
+ subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
30203
+ statusChange(
30204
+ id: $transactionId
30205
+ includePreconfirmation: $includePreConfirmation
30206
+ ) {
29831
30207
  ...transactionStatusSubscriptionFragment
29832
30208
  }
29833
30209
  }
@@ -29930,6 +30306,9 @@ ${GetMessageFragmentDoc}`;
29930
30306
  getAssetDetails(variables, options) {
29931
30307
  return requester(GetAssetDetailsDocument, variables, options);
29932
30308
  },
30309
+ assembleTx(variables, options) {
30310
+ return requester(AssembleTxDocument, variables, options);
30311
+ },
29933
30312
  dryRun(variables, options) {
29934
30313
  return requester(DryRunDocument, variables, options);
29935
30314
  },
@@ -29958,9 +30337,67 @@ ${GetMessageFragmentDoc}`;
29958
30337
  }
29959
30338
  __name(getSdk, "getSdk");
29960
30339
 
30340
+ // src/providers/assemble-tx-helpers.ts
30341
+ var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
30342
+ const assembleTxAccount = {};
30343
+ const accountIsPredicate = "bytes" in account;
30344
+ if (accountIsPredicate) {
30345
+ assembleTxAccount.predicate = {
30346
+ predicate: hexlify(account.bytes),
30347
+ predicateAddress: account.address.toB256(),
30348
+ predicateData: hexlify(account.getPredicateData())
30349
+ };
30350
+ } else {
30351
+ assembleTxAccount.address = account.address.toB256();
30352
+ }
30353
+ return assembleTxAccount;
30354
+ }, "resolveAccountForAssembleTxParams");
30355
+ var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
30356
+ const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
30357
+ const gasLimitSpecified = isDefined(setGasLimit);
30358
+ const maxFeeSpecified = isDefined(setMaxFee);
30359
+ const isScriptTx = transactionRequest.type === TransactionType.Script;
30360
+ if (gasLimitSpecified && isScriptTx) {
30361
+ const requiredGasLimit = transactionRequest.gasLimit;
30362
+ if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
30363
+ throw new FuelError(
30364
+ ErrorCode.GAS_LIMIT_TOO_LOW,
30365
+ `Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
30366
+ );
30367
+ }
30368
+ transactionRequest.gasLimit = bn(setGasLimit);
30369
+ }
30370
+ if (maxFeeSpecified) {
30371
+ const requiredMaxFee = transactionRequest.maxFee;
30372
+ if (bn(setMaxFee).lt(requiredMaxFee)) {
30373
+ throw new FuelError(
30374
+ ErrorCode.MAX_FEE_TOO_LOW,
30375
+ `Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
30376
+ );
30377
+ }
30378
+ transactionRequest.maxFee = bn(setMaxFee);
30379
+ }
30380
+ if (gasLimitSpecified && !maxFeeSpecified) {
30381
+ const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
30382
+ transactionRequest,
30383
+ gasPrice
30384
+ });
30385
+ transactionRequest.maxFee = feeForGasPrice;
30386
+ }
30387
+ return transactionRequest;
30388
+ }, "setAndValidateGasAndFeeForAssembledTx");
30389
+
29961
30390
  // src/providers/utils/handle-gql-error-message.ts
30391
+ var gqlErrorMessage = {
30392
+ RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
30393
+ NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
30394
+ ASSET_NOT_FOUND: /resource was not found in table/,
30395
+ MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
30396
+ DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
30397
+ INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
30398
+ };
29962
30399
  var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
29963
- if (new RegExp("the target cannot be met due to no coins available or exceeding the \\d+ coin limit." /* NOT_ENOUGH_COINS_MAX_COINS */).test(error2.message)) {
30400
+ if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
29964
30401
  return new FuelError(
29965
30402
  ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
29966
30403
  `Insufficient funds or too many small value coins. Consider combining UTXOs.`,
@@ -29968,7 +30405,25 @@ ${GetMessageFragmentDoc}`;
29968
30405
  error2
29969
30406
  );
29970
30407
  }
29971
- if (new RegExp("resource was not found in table" /* ASSET_NOT_FOUND */).test(error2.message)) {
30408
+ if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
30409
+ const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
30410
+ const assetId = match?.[1] || "";
30411
+ return new FuelError(
30412
+ ErrorCode.CHANGE_OUTPUT_COLLISION,
30413
+ `OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
30414
+ {},
30415
+ error2
30416
+ );
30417
+ }
30418
+ if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
30419
+ return new FuelError(
30420
+ ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
30421
+ `The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
30422
+ {},
30423
+ error2
30424
+ );
30425
+ }
30426
+ if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
29972
30427
  return new FuelError(
29973
30428
  ErrorCode.ASSET_NOT_FOUND,
29974
30429
  `Asset not found for given asset id.`,
@@ -29976,6 +30431,13 @@ ${GetMessageFragmentDoc}`;
29976
30431
  error2
29977
30432
  );
29978
30433
  }
30434
+ if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
30435
+ return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
30436
+ }
30437
+ if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
30438
+ const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
30439
+ return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
30440
+ }
29979
30441
  return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
29980
30442
  }, "mapGqlErrorMessage");
29981
30443
  var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
@@ -30008,8 +30470,9 @@ ${incompatibleNodeVersionMessage}`,
30008
30470
 
30009
30471
  // src/providers/fuel-graphql-subscriber.ts
30010
30472
  var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
30011
- constructor(stream) {
30473
+ constructor(stream, onEvent) {
30012
30474
  this.stream = stream;
30475
+ this.onEvent = onEvent;
30013
30476
  }
30014
30477
  static {
30015
30478
  __name(this, "FuelGraphqlSubscriber");
@@ -30017,12 +30480,13 @@ ${incompatibleNodeVersionMessage}`,
30017
30480
  static incompatibleNodeVersionMessage = false;
30018
30481
  static textDecoder = new TextDecoder();
30019
30482
  static async create(options) {
30020
- const { url, query, variables, fetchFn } = options;
30483
+ const { url, query, variables, fetchFn, operationName, onEvent } = options;
30021
30484
  const response = await fetchFn(`${url}-sub`, {
30022
30485
  method: "POST",
30023
30486
  body: JSON.stringify({
30024
30487
  query: print(query),
30025
- variables
30488
+ variables,
30489
+ operationName
30026
30490
  }),
30027
30491
  headers: {
30028
30492
  "Content-Type": "application/json",
@@ -30031,39 +30495,71 @@ ${incompatibleNodeVersionMessage}`,
30031
30495
  });
30032
30496
  const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
30033
30497
  await new _FuelGraphqlSubscriber(errorReader).next();
30034
- return new _FuelGraphqlSubscriber(resultReader);
30498
+ return new _FuelGraphqlSubscriber(resultReader, onEvent);
30035
30499
  }
30036
- events = [];
30037
- parsingLeftover = "";
30038
- async next() {
30500
+ /**
30501
+ * This method will take a stream reader and parse the event from the stream.
30502
+ *
30503
+ * @param reader - The reader of the SSE stream
30504
+ * @param parsingLeftover - The leftover string from parsing the previous event
30505
+ * @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
30506
+ */
30507
+ static async readEvent(reader, parsingLeftover = "") {
30508
+ let text = parsingLeftover;
30509
+ const regex = /data:.*\n\n/g;
30039
30510
  while (true) {
30040
- if (this.events.length > 0) {
30041
- const { data, errors: errors2 } = this.events.shift();
30042
- assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
30043
- return { value: data, done: false };
30044
- }
30045
- const { value, done } = await this.stream.read();
30046
- if (done) {
30047
- return { value, done };
30048
- }
30049
- const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30050
- if (decoded === "") {
30051
- continue;
30052
- }
30053
- const text = `${this.parsingLeftover}${decoded}`;
30054
- const regex = /data:.*\n\n/g;
30055
30511
  const matches = [...text.matchAll(regex)].flatMap((match) => match);
30056
- matches.forEach((match) => {
30512
+ if (matches.length > 0) {
30057
30513
  try {
30058
- this.events.push(JSON.parse(match.replace(/^data:/, "")));
30514
+ const event = JSON.parse(matches[0].replace(/^data:/, ""));
30515
+ return {
30516
+ event,
30517
+ done: false,
30518
+ parsingLeftover: text.replace(matches[0], "")
30519
+ };
30059
30520
  } catch (e) {
30060
30521
  throw new FuelError(
30061
30522
  ErrorCode.STREAM_PARSING_ERROR,
30062
30523
  `Error while parsing stream data response: ${text}`
30063
30524
  );
30064
30525
  }
30065
- });
30066
- this.parsingLeftover = text.replace(matches.join(), "");
30526
+ }
30527
+ const { value, done } = await reader.read();
30528
+ if (done) {
30529
+ return { event: void 0, done, parsingLeftover: "" };
30530
+ }
30531
+ const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30532
+ text += decoded;
30533
+ }
30534
+ }
30535
+ events = [];
30536
+ parsingLeftover = "";
30537
+ /**
30538
+ * Gets automatically called when iterating in a `for-await-of` loop.
30539
+ * It can also be called manually.
30540
+ *
30541
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
30542
+ */
30543
+ async next() {
30544
+ while (true) {
30545
+ const nextEvent = this.events.shift();
30546
+ if (nextEvent) {
30547
+ this.onEvent?.(nextEvent);
30548
+ assertGqlResponseHasNoErrors(
30549
+ nextEvent.errors,
30550
+ _FuelGraphqlSubscriber.incompatibleNodeVersionMessage
30551
+ );
30552
+ return { value: nextEvent.data, done: false };
30553
+ }
30554
+ const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
30555
+ this.stream,
30556
+ this.parsingLeftover
30557
+ );
30558
+ this.parsingLeftover = parsingLeftover;
30559
+ if (done) {
30560
+ return { value: void 0, done: true };
30561
+ }
30562
+ this.events.push(event);
30067
30563
  }
30068
30564
  }
30069
30565
  /**
@@ -30109,7 +30605,7 @@ ${incompatibleNodeVersionMessage}`,
30109
30605
  case InputType.Contract: {
30110
30606
  return {
30111
30607
  type: InputType.Contract,
30112
- txID: ZeroBytes32,
30608
+ txID: hexlify(value.txID || ZeroBytes32),
30113
30609
  outputIndex: 0,
30114
30610
  balanceRoot: ZeroBytes32,
30115
30611
  stateRoot: ZeroBytes32,
@@ -30180,9 +30676,9 @@ ${incompatibleNodeVersionMessage}`,
30180
30676
  case OutputType.Variable: {
30181
30677
  return {
30182
30678
  type: OutputType.Variable,
30183
- to: ZeroBytes32,
30184
- amount: bn(0),
30185
- assetId: ZeroBytes32
30679
+ to: hexlify(value.to || ZeroBytes32),
30680
+ amount: bn(value.amount),
30681
+ assetId: hexlify(value.assetId || ZeroBytes32)
30186
30682
  };
30187
30683
  }
30188
30684
  case OutputType.ContractCreated: {
@@ -30226,6 +30722,7 @@ ${incompatibleNodeVersionMessage}`,
30226
30722
  "BlobIdAlreadyUploaded",
30227
30723
  "BlobNotFound",
30228
30724
  "BytecodeAlreadyUploaded",
30725
+ "CanNotGetGasPriceInPredicate",
30229
30726
  "ContractIdAlreadyDeployed",
30230
30727
  "ContractInstructionNotAllowed",
30231
30728
  "ContractMaxSize",
@@ -30249,6 +30746,7 @@ ${incompatibleNodeVersionMessage}`,
30249
30746
  "InvalidImmediateValue",
30250
30747
  "InvalidInstruction",
30251
30748
  "InvalidMetadataIdentifier",
30749
+ "InvalidUpgradePurposeType",
30252
30750
  "MalformedCallStructure",
30253
30751
  "MaxStaticContractsReached",
30254
30752
  "MemoryGrowthOverlap",
@@ -30265,8 +30763,10 @@ ${incompatibleNodeVersionMessage}`,
30265
30763
  "PolicyIsNotSet",
30266
30764
  "PolicyNotFound",
30267
30765
  "PredicateReturnedNonOne",
30766
+ "ProofInUploadNotFound",
30268
30767
  "ReservedRegisterNotWritable",
30269
30768
  "Revert",
30769
+ "StorageSlotsNotFound",
30270
30770
  "ThePartIsNotSequentiallyConnected",
30271
30771
  "TooManyReceipts",
30272
30772
  "TooManySlots",
@@ -30620,16 +31120,151 @@ ${incompatibleNodeVersionMessage}`,
30620
31120
  throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
30621
31121
  }
30622
31122
  }, "deserializeReceipt");
30623
-
30624
- // src/providers/utils/receipts.ts
30625
- var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
30626
- var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
30627
- var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
30628
- (memo, receipt) => {
30629
- if (doesReceiptHaveMissingOutputVariables(receipt)) {
30630
- memo.missingOutputVariables.push(receipt);
30631
- }
30632
- if (doesReceiptHaveMissingContractId(receipt)) {
31123
+ var deserializeInput = /* @__PURE__ */ __name((input) => {
31124
+ let parsedInput;
31125
+ switch (input.type) {
31126
+ case "InputCoin":
31127
+ parsedInput = {
31128
+ type: InputType.Coin,
31129
+ id: input.utxoId,
31130
+ amount: bn(input.amount),
31131
+ assetId: input.assetId,
31132
+ owner: input.owner,
31133
+ txPointer: `0x${input.txPointer}`,
31134
+ witnessIndex: Number(input.coinWitnessIndex),
31135
+ predicate: input.predicate,
31136
+ predicateData: input.predicateData,
31137
+ predicateGasUsed: bn(input.predicateGasUsed)
31138
+ };
31139
+ break;
31140
+ case "InputMessage":
31141
+ parsedInput = {
31142
+ type: InputType.Message,
31143
+ nonce: input.nonce,
31144
+ amount: bn(input.amount),
31145
+ recipient: input.recipient,
31146
+ sender: input.sender,
31147
+ data: input.data,
31148
+ witnessIndex: Number(input.messageWitnessIndex),
31149
+ predicate: input.predicate,
31150
+ predicateData: input.predicateData,
31151
+ predicateGasUsed: bn(input.predicateGasUsed)
31152
+ };
31153
+ break;
31154
+ case "InputContract":
31155
+ parsedInput = {
31156
+ type: InputType.Contract,
31157
+ contractId: input.contractId,
31158
+ txPointer: `0x${input.txPointer}`,
31159
+ txID: hexlify(arrayify(input.utxoId).slice(0, 32))
31160
+ };
31161
+ break;
31162
+ default:
31163
+ assertUnreachable(input);
31164
+ }
31165
+ return parsedInput;
31166
+ }, "deserializeInput");
31167
+ var deserializeOutput = /* @__PURE__ */ __name((output) => {
31168
+ let parsedOutput;
31169
+ switch (output.type) {
31170
+ case "CoinOutput":
31171
+ parsedOutput = {
31172
+ type: OutputType.Coin,
31173
+ amount: bn(output.amount),
31174
+ assetId: output.assetId,
31175
+ to: output.to
31176
+ };
31177
+ break;
31178
+ case "ContractOutput":
31179
+ parsedOutput = {
31180
+ type: OutputType.Contract,
31181
+ inputIndex: Number(output.inputIndex)
31182
+ };
31183
+ break;
31184
+ case "ChangeOutput":
31185
+ parsedOutput = {
31186
+ type: OutputType.Change,
31187
+ assetId: output.assetId,
31188
+ to: output.to
31189
+ };
31190
+ break;
31191
+ case "ContractCreated":
31192
+ parsedOutput = {
31193
+ type: OutputType.ContractCreated,
31194
+ stateRoot: output.stateRoot,
31195
+ contractId: output.contract
31196
+ };
31197
+ break;
31198
+ case "VariableOutput":
31199
+ parsedOutput = {
31200
+ type: OutputType.Variable,
31201
+ amount: bn(output.amount),
31202
+ assetId: output.assetId,
31203
+ to: output.to
31204
+ };
31205
+ break;
31206
+ default:
31207
+ assertUnreachable(output);
31208
+ }
31209
+ return parsedOutput;
31210
+ }, "deserializeOutput");
31211
+ var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
31212
+ let parsedOutput;
31213
+ switch (output.type) {
31214
+ case "CoinOutput":
31215
+ parsedOutput = {
31216
+ type: OutputType.Coin,
31217
+ amount: bn(output.amount),
31218
+ assetId: output.assetId,
31219
+ to: output.to
31220
+ };
31221
+ break;
31222
+ case "ContractOutput":
31223
+ parsedOutput = {
31224
+ type: OutputType.Contract,
31225
+ inputIndex: Number(output.inputIndex),
31226
+ balanceRoot: output.balanceRoot,
31227
+ stateRoot: output.stateRoot
31228
+ };
31229
+ break;
31230
+ case "ChangeOutput":
31231
+ parsedOutput = {
31232
+ type: OutputType.Change,
31233
+ assetId: output.assetId,
31234
+ to: output.to,
31235
+ amount: bn(output.amount)
31236
+ };
31237
+ break;
31238
+ case "ContractCreated":
31239
+ parsedOutput = {
31240
+ type: OutputType.ContractCreated,
31241
+ stateRoot: output.stateRoot,
31242
+ contractId: output.contract
31243
+ };
31244
+ break;
31245
+ case "VariableOutput":
31246
+ parsedOutput = {
31247
+ type: OutputType.Variable,
31248
+ amount: bn(output.amount),
31249
+ assetId: output.assetId,
31250
+ to: output.to
31251
+ };
31252
+ break;
31253
+ default:
31254
+ assertUnreachable(output);
31255
+ }
31256
+ return parsedOutput;
31257
+ }, "deserializeProcessedTxOutput");
31258
+
31259
+ // src/providers/utils/receipts.ts
31260
+ var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
31261
+ var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
31262
+ var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
31263
+ (memo, receipt) => {
31264
+ if (doesReceiptHaveMissingOutputVariables(receipt)) {
31265
+ memo.missingOutputVariables.push(receipt);
31266
+ }
31267
+ if (doesReceiptHaveMissingContractId(receipt)) {
30633
31268
  memo.missingOutputContractIds.push(receipt);
30634
31269
  }
30635
31270
  return memo;
@@ -30900,6 +31535,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30900
31535
  return assembleRevertError(receipts, logs, metadata);
30901
31536
  }, "extractTxError");
30902
31537
 
31538
+ // src/providers/utils/merge-quantities.ts
31539
+ var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
31540
+ const resultMap = {};
31541
+ function addToMap({ amount, assetId }) {
31542
+ if (resultMap[assetId]) {
31543
+ resultMap[assetId] = resultMap[assetId].add(amount);
31544
+ } else {
31545
+ resultMap[assetId] = amount;
31546
+ }
31547
+ }
31548
+ __name(addToMap, "addToMap");
31549
+ coinQuantities.forEach((arr) => arr.forEach(addToMap));
31550
+ return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
31551
+ }, "mergeQuantities");
31552
+
30903
31553
  // src/providers/transaction-request/errors.ts
30904
31554
  var NoWitnessAtIndexError = class extends Error {
30905
31555
  constructor(index) {
@@ -31819,6 +32469,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31819
32469
  * @param account - The account to fund the transaction.
31820
32470
  * @param params - The parameters for the transaction cost.
31821
32471
  * @returns The current instance of the `ScriptTransactionRequest` funded.
32472
+ *
32473
+ * @deprecated Use `provider.assembleTx` instead.
32474
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
31822
32475
  */
31823
32476
  async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
31824
32477
  const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
@@ -31902,6 +32555,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31902
32555
  }
31903
32556
  return this.outputs.length - 1;
31904
32557
  }
32558
+ /**
32559
+ * Adds a variable output to the transaction request.
32560
+ *
32561
+ * @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32562
+ * @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
32563
+ * @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32564
+ */
32565
+ addVariableOutput(to, amount, assetId) {
32566
+ this.pushOutput({
32567
+ type: OutputType.Variable,
32568
+ to,
32569
+ amount,
32570
+ assetId
32571
+ });
32572
+ }
31905
32573
  /**
31906
32574
  * Calculates the maximum gas for the transaction.
31907
32575
  *
@@ -32978,6 +33646,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32978
33646
  return "submitted" /* submitted */;
32979
33647
  case "SqueezedOutStatus":
32980
33648
  return "squeezedout" /* squeezedout */;
33649
+ case "PreconfirmationSuccessStatus":
33650
+ return "preconfirmationSuccess" /* preconfirmationSuccess */;
33651
+ case "PreconfirmationFailureStatus":
33652
+ return "preconfirmationFailure" /* preconfirmationFailure */;
32981
33653
  default:
32982
33654
  throw new FuelError(
32983
33655
  ErrorCode.INVALID_TRANSACTION_STATUS,
@@ -32985,15 +33657,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32985
33657
  );
32986
33658
  }
32987
33659
  }, "getTransactionStatusName");
33660
+ var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
33661
+ const resolvedOutputs = [];
33662
+ serializedOutputs?.forEach(
33663
+ ({ utxoId, output }) => resolvedOutputs.push({
33664
+ utxoId,
33665
+ output: deserializeProcessedTxOutput(output)
33666
+ })
33667
+ );
33668
+ return resolvedOutputs;
33669
+ }, "extractResolvedOutputs");
32988
33670
  var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
32989
33671
  let time;
32990
33672
  let blockId;
32991
33673
  let status;
32992
33674
  let totalFee;
32993
33675
  let totalGas;
33676
+ let receipts;
33677
+ let resolvedOutputs = [];
33678
+ let errorReason;
32994
33679
  let isStatusFailure = false;
32995
33680
  let isStatusSuccess = false;
32996
33681
  let isStatusPending = false;
33682
+ let isStatusPreConfirmationSuccess = false;
33683
+ let isStatusPreConfirmationFailure = false;
32997
33684
  if (gqlTransactionStatus?.type) {
32998
33685
  status = getTransactionStatusName(gqlTransactionStatus.type);
32999
33686
  switch (gqlTransactionStatus.type) {
@@ -33001,6 +33688,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33001
33688
  time = gqlTransactionStatus.time;
33002
33689
  blockId = gqlTransactionStatus.block?.id;
33003
33690
  isStatusSuccess = true;
33691
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33004
33692
  totalFee = bn(gqlTransactionStatus.totalFee);
33005
33693
  totalGas = bn(gqlTransactionStatus.totalGas);
33006
33694
  break;
@@ -33009,12 +33697,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33009
33697
  blockId = gqlTransactionStatus.block?.id;
33010
33698
  isStatusFailure = true;
33011
33699
  totalFee = bn(gqlTransactionStatus.totalFee);
33700
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33012
33701
  totalGas = bn(gqlTransactionStatus.totalGas);
33013
33702
  break;
33014
33703
  case "SubmittedStatus":
33015
33704
  time = gqlTransactionStatus.time;
33016
33705
  isStatusPending = true;
33017
33706
  break;
33707
+ case "PreconfirmationSuccessStatus":
33708
+ isStatusPreConfirmationSuccess = true;
33709
+ totalFee = bn(gqlTransactionStatus.totalFee);
33710
+ totalGas = bn(gqlTransactionStatus.totalGas);
33711
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33712
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33713
+ break;
33714
+ case "PreconfirmationFailureStatus":
33715
+ isStatusPreConfirmationFailure = true;
33716
+ totalFee = bn(gqlTransactionStatus.totalFee);
33717
+ totalGas = bn(gqlTransactionStatus.totalGas);
33718
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33719
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33720
+ errorReason = gqlTransactionStatus.reason;
33721
+ break;
33018
33722
  default:
33019
33723
  }
33020
33724
  }
@@ -33024,9 +33728,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33024
33728
  status,
33025
33729
  totalFee,
33026
33730
  totalGas,
33731
+ receipts,
33027
33732
  isStatusFailure,
33028
33733
  isStatusSuccess,
33029
- isStatusPending
33734
+ isStatusPending,
33735
+ isStatusPreConfirmationSuccess,
33736
+ isStatusPreConfirmationFailure,
33737
+ resolvedOutputs,
33738
+ errorReason
33030
33739
  };
33031
33740
  return processedGraphqlStatus;
33032
33741
  }, "processGraphqlStatus");
@@ -33111,6 +33820,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33111
33820
  return transactionSummary;
33112
33821
  }
33113
33822
  __name(assembleTransactionSummary, "assembleTransactionSummary");
33823
+ function assemblePreConfirmationTransactionSummary(params) {
33824
+ const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
33825
+ let type3;
33826
+ let operations;
33827
+ let gasUsed;
33828
+ let tip;
33829
+ let transaction;
33830
+ let mintedAssets;
33831
+ let burnedAssets;
33832
+ const {
33833
+ isStatusFailure,
33834
+ isStatusSuccess,
33835
+ isStatusPending,
33836
+ status,
33837
+ receipts,
33838
+ resolvedOutputs,
33839
+ errorReason,
33840
+ totalFee,
33841
+ isStatusPreConfirmationFailure,
33842
+ isStatusPreConfirmationSuccess
33843
+ } = processGraphqlStatus(gqlTransactionStatus);
33844
+ if (receipts) {
33845
+ gasUsed = getGasUsedFromReceipts(receipts);
33846
+ mintedAssets = extractMintedAssetsFromReceipts(receipts);
33847
+ burnedAssets = extractBurnedAssetsFromReceipts(receipts);
33848
+ }
33849
+ if (transactionRequest) {
33850
+ transaction = transactionRequest.toTransaction();
33851
+ type3 = getTransactionTypeName(transaction.type);
33852
+ tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
33853
+ if (receipts) {
33854
+ const rawPayload = hexlify(new TransactionCoder().encode(transaction));
33855
+ operations = getOperations({
33856
+ transactionType: transaction.type,
33857
+ inputs: transaction.inputs || [],
33858
+ outputs: transaction.outputs || [],
33859
+ receipts,
33860
+ rawPayload,
33861
+ abiMap,
33862
+ maxInputs,
33863
+ baseAssetId
33864
+ });
33865
+ }
33866
+ }
33867
+ const transactionSummary = {
33868
+ id,
33869
+ fee: totalFee,
33870
+ type: type3,
33871
+ status,
33872
+ receipts,
33873
+ gasUsed,
33874
+ tip,
33875
+ isStatusPreConfirmationFailure,
33876
+ isStatusPreConfirmationSuccess,
33877
+ isStatusFailure,
33878
+ isStatusSuccess,
33879
+ isStatusPending,
33880
+ ...transaction && {
33881
+ isTypeMint: isTypeMint(transaction.type),
33882
+ isTypeCreate: isTypeCreate(transaction.type),
33883
+ isTypeScript: isTypeScript(transaction.type),
33884
+ isTypeUpgrade: isTypeUpgrade(transaction.type),
33885
+ isTypeUpload: isTypeUpload(transaction.type),
33886
+ isTypeBlob: isTypeBlob(transaction.type)
33887
+ },
33888
+ mintedAssets,
33889
+ burnedAssets,
33890
+ resolvedOutputs,
33891
+ errorReason,
33892
+ transaction,
33893
+ operations
33894
+ };
33895
+ return transactionSummary;
33896
+ }
33897
+ __name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
33114
33898
 
33115
33899
  // src/providers/transaction-response/getAllDecodedLogs.ts
33116
33900
  function getAllDecodedLogs(opts) {
@@ -33143,37 +33927,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33143
33927
  __name(getAllDecodedLogs, "getAllDecodedLogs");
33144
33928
 
33145
33929
  // src/providers/transaction-response/transaction-response.ts
33146
- function mapGqlOutputsToTxOutputs(outputs) {
33147
- return outputs.map((o) => {
33148
- const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
33149
- switch (obj.type) {
33150
- case "CoinOutput":
33151
- return { ...obj, type: OutputType.Coin };
33152
- case "ContractOutput":
33153
- return {
33154
- ...obj,
33155
- type: OutputType.Contract,
33156
- inputIndex: parseInt(obj.inputIndex, 10)
33157
- };
33158
- case "ChangeOutput":
33159
- return {
33160
- ...obj,
33161
- type: OutputType.Change
33162
- };
33163
- case "VariableOutput":
33164
- return { ...obj, type: OutputType.Variable };
33165
- case "ContractCreated":
33166
- return {
33167
- ...obj,
33168
- type: OutputType.ContractCreated,
33169
- contractId: obj.contract
33170
- };
33171
- default:
33172
- return assertUnreachable(obj);
33173
- }
33174
- });
33175
- }
33176
- __name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
33177
33930
  var TransactionResponse = class _TransactionResponse {
33178
33931
  /**
33179
33932
  * Constructor for `TransactionResponse`.
@@ -33183,11 +33936,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33183
33936
  */
33184
33937
  constructor(tx, provider, chainId, abis, submitTxSubscription) {
33185
33938
  this.submitTxSubscription = submitTxSubscription;
33186
- this.id = typeof tx === "string" ? tx : tx.getTransactionId(chainId);
33939
+ if (typeof tx === "string") {
33940
+ this.id = tx;
33941
+ } else {
33942
+ this.id = tx.getTransactionId(chainId);
33943
+ this.request = tx;
33944
+ }
33187
33945
  this.provider = provider;
33188
33946
  this.abis = abis;
33189
- this.request = typeof tx === "string" ? void 0 : tx;
33190
33947
  this.waitForResult = this.waitForResult.bind(this);
33948
+ this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
33191
33949
  }
33192
33950
  static {
33193
33951
  __name(this, "TransactionResponse");
@@ -33203,6 +33961,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33203
33961
  request;
33204
33962
  status;
33205
33963
  abis;
33964
+ waitingForStreamData = false;
33965
+ statusResolvers = /* @__PURE__ */ new Map();
33966
+ preConfirmationStatus;
33206
33967
  /**
33207
33968
  * Async constructor for `TransactionResponse`. This method can be used to create
33208
33969
  * an instance of `TransactionResponse` and wait for the transaction to be fetched
@@ -33234,29 +33995,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33234
33995
  }
33235
33996
  return input;
33236
33997
  });
33237
- tx.outputs = mapGqlOutputsToTxOutputs(status.transaction.outputs);
33238
- if ("receiptsRoot" in status.transaction) {
33998
+ tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
33999
+ if (status.transaction.receiptsRoot) {
33239
34000
  tx.receiptsRoot = status.transaction.receiptsRoot;
33240
34001
  }
33241
34002
  }
33242
34003
  }
33243
34004
  async getTransaction() {
33244
34005
  if (this.request) {
33245
- const tx = this.request.toTransaction();
33246
- this.applyMalleableSubscriptionFields(tx);
34006
+ const tx2 = this.request.toTransaction();
34007
+ this.applyMalleableSubscriptionFields(tx2);
33247
34008
  return {
33248
- tx,
34009
+ tx: tx2,
33249
34010
  bytes: this.request.toTransactionBytes()
33250
34011
  };
33251
34012
  }
33252
34013
  const gqlTransaction = this.gqlTransaction ?? await this.fetch();
34014
+ const { rawPayload } = gqlTransaction;
34015
+ const bytes = arrayify(rawPayload);
34016
+ const [tx] = new TransactionCoder().decode(bytes, 0);
33253
34017
  return {
33254
- tx: this.decodeTransaction(gqlTransaction),
33255
- bytes: arrayify(gqlTransaction.rawPayload)
34018
+ tx,
34019
+ bytes
33256
34020
  };
33257
34021
  }
34022
+ /**
34023
+ *
34024
+ * NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
34025
+ * Since `getTransaction` only resolves once the transaction has been processed,
34026
+ * the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
34027
+ */
33258
34028
  getReceipts() {
33259
- const status = this.status ?? this.gqlTransaction?.status;
34029
+ const status = this.getTransactionStatus();
33260
34030
  switch (status?.type) {
33261
34031
  case "SuccessStatus":
33262
34032
  case "FailureStatus":
@@ -33289,18 +34059,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33289
34059
  this.gqlTransaction = response.transaction;
33290
34060
  return response.transaction;
33291
34061
  }
33292
- /**
33293
- * Decode the raw payload of the transaction.
33294
- *
33295
- * @param transactionWithReceipts - The transaction with receipts object.
33296
- * @returns The decoded transaction.
33297
- */
33298
- decodeTransaction(transactionWithReceipts) {
33299
- return new TransactionCoder().decode(
33300
- arrayify(transactionWithReceipts.rawPayload),
33301
- 0
33302
- )?.[0];
33303
- }
33304
34062
  /**
33305
34063
  * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
33306
34064
  * fetch it from the provider
@@ -33311,7 +34069,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33311
34069
  async getTransactionSummary(contractsAbiMap) {
33312
34070
  const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
33313
34071
  const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
33314
- const totalFee = getTotalFeeFromStatus(this.status ?? this.gqlTransaction?.status);
34072
+ const transactionStatus = this.getTransactionStatus();
34073
+ const totalFee = getTotalFeeFromStatus(transactionStatus);
33315
34074
  const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
33316
34075
  const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
33317
34076
  const baseAssetId = await this.provider.getBaseAssetId();
@@ -33320,7 +34079,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33320
34079
  receipts: this.getReceipts(),
33321
34080
  transaction,
33322
34081
  transactionBytes,
33323
- gqlTransactionStatus: this.status ?? this.gqlTransaction?.status,
34082
+ gqlTransactionStatus: transactionStatus,
33324
34083
  gasPerByte,
33325
34084
  gasPriceFactor,
33326
34085
  abiMap: contractsAbiMap,
@@ -33332,29 +34091,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33332
34091
  });
33333
34092
  return transactionSummary;
33334
34093
  }
34094
+ async getPreConfirmationTransactionSummary(contractsAbiMap) {
34095
+ const baseAssetId = await this.provider.getBaseAssetId();
34096
+ const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
34097
+ const transactionSummary = assemblePreConfirmationTransactionSummary({
34098
+ id: this.id,
34099
+ gqlTransactionStatus: this.preConfirmationStatus || this.status,
34100
+ baseAssetId,
34101
+ maxInputs,
34102
+ abiMap: contractsAbiMap,
34103
+ transactionRequest: this.request
34104
+ });
34105
+ return transactionSummary;
34106
+ }
34107
+ resolveStatus(type3) {
34108
+ const resolvers = this.statusResolvers.get(type3) || [];
34109
+ resolvers.forEach((resolve) => resolve());
34110
+ this.statusResolvers.delete(type3);
34111
+ }
34112
+ async waitForStatus(type3) {
34113
+ return new Promise((resolve, reject) => {
34114
+ const resolvers = this.statusResolvers.get(type3) || [];
34115
+ resolvers.push(() => {
34116
+ resolve();
34117
+ });
34118
+ this.statusResolvers.set(type3, resolvers);
34119
+ this.waitForStatusChange().catch(reject);
34120
+ });
34121
+ }
34122
+ /**
34123
+ * Waits for the status change of the transaction.
34124
+ * If the transaction is already in a final state, it will return immediately.
34125
+ * If the transaction is not in a final state, it will wait for the status change.
34126
+ * If we are already subscribed to the status change, it will return immediately.
34127
+ */
33335
34128
  async waitForStatusChange() {
33336
- const status = this.gqlTransaction?.status?.type;
33337
- if (status && status !== "SubmittedStatus") {
34129
+ const type3 = this.status?.type;
34130
+ if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
34131
+ this.resolveStatus("preConfirmation");
34132
+ this.resolveStatus("confirmation");
34133
+ return;
34134
+ }
34135
+ if (this.waitingForStreamData) {
33338
34136
  return;
33339
34137
  }
34138
+ this.waitingForStreamData = true;
33340
34139
  const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
33341
- transactionId: this.id
34140
+ transactionId: this.id,
34141
+ includePreConfirmation: true
33342
34142
  });
33343
34143
  for await (const sub of subscription) {
33344
34144
  const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
33345
34145
  this.status = statusChange;
33346
34146
  if (statusChange.type === "SqueezedOutStatus") {
33347
- this.unsetResourceCache();
33348
34147
  throw new FuelError(
33349
34148
  ErrorCode.TRANSACTION_SQUEEZED_OUT,
33350
34149
  `Transaction Squeezed Out with reason: ${statusChange.reason}`
33351
34150
  );
33352
34151
  }
33353
- if (statusChange.type !== "SubmittedStatus") {
34152
+ if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
34153
+ this.preConfirmationStatus = statusChange;
34154
+ this.resolveStatus("preConfirmation");
34155
+ }
34156
+ if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
34157
+ this.resolveStatus("confirmation");
34158
+ this.resolveStatus("preConfirmation");
34159
+ this.waitingForStreamData = false;
33354
34160
  break;
33355
34161
  }
33356
34162
  }
33357
34163
  }
34164
+ async waitForConfirmationStatuses() {
34165
+ try {
34166
+ await this.waitForStatus("confirmation");
34167
+ } catch (error2) {
34168
+ this.unsetResourceCache();
34169
+ throw error2;
34170
+ }
34171
+ }
34172
+ async waitForPreConfirmationStatuses() {
34173
+ try {
34174
+ await this.waitForStatus("preConfirmation");
34175
+ } catch (error2) {
34176
+ this.unsetResourceCache();
34177
+ throw error2;
34178
+ }
34179
+ }
33358
34180
  /**
33359
34181
  * Assembles the result of a transaction by retrieving the transaction summary,
33360
34182
  * decoding logs (if available), and handling transaction failure.
@@ -33383,7 +34205,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33383
34205
  transactionResult.groupedLogs = groupedLogs;
33384
34206
  }
33385
34207
  const { receipts } = transactionResult;
33386
- const status = this.status ?? this.gqlTransaction?.status;
34208
+ const status = this.getTransactionStatus();
33387
34209
  if (status?.type === "FailureStatus") {
33388
34210
  const { reason } = status;
33389
34211
  throw extractTxError({
@@ -33395,16 +34217,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33395
34217
  }
33396
34218
  return transactionResult;
33397
34219
  }
34220
+ async assemblePreConfirmationResult(contractsAbiMap) {
34221
+ const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
34222
+ const transactionResult = {
34223
+ ...transactionSummary,
34224
+ logs: [],
34225
+ groupedLogs: {}
34226
+ };
34227
+ let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
34228
+ if (this.abis && transactionSummary.receipts) {
34229
+ ({ logs, groupedLogs } = getAllDecodedLogs({
34230
+ receipts: transactionSummary.receipts,
34231
+ mainAbi: this.abis.main,
34232
+ externalAbis: this.abis.otherContractsAbis
34233
+ }));
34234
+ transactionResult.logs = logs;
34235
+ transactionResult.groupedLogs = groupedLogs;
34236
+ }
34237
+ return transactionResult;
34238
+ }
33398
34239
  /**
33399
34240
  * Waits for transaction to complete and returns the result.
33400
34241
  *
33401
34242
  * @returns The completed transaction result
33402
34243
  */
33403
34244
  async waitForResult(contractsAbiMap) {
33404
- await this.waitForStatusChange();
34245
+ await this.waitForConfirmationStatuses();
33405
34246
  this.unsetResourceCache();
33406
34247
  return this.assembleResult(contractsAbiMap);
33407
34248
  }
34249
+ /**
34250
+ * Waits for the transaction's pre-confirmation and returns the result.
34251
+ *
34252
+ * @param contractsAbiMap - The contracts ABI map.
34253
+ * @returns The pre-confirmed transaction result
34254
+ */
34255
+ async waitForPreConfirmation(contractsAbiMap) {
34256
+ await this.waitForPreConfirmationStatuses();
34257
+ this.unsetResourceCache();
34258
+ return this.assemblePreConfirmationResult(contractsAbiMap);
34259
+ }
33408
34260
  /**
33409
34261
  * Waits for transaction to complete and returns the result.
33410
34262
  *
@@ -33416,6 +34268,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33416
34268
  unsetResourceCache() {
33417
34269
  this.provider.cache?.unset(this.id);
33418
34270
  }
34271
+ getTransactionStatus() {
34272
+ return this.status ?? this.gqlTransaction?.status;
34273
+ }
33419
34274
  };
33420
34275
 
33421
34276
  // src/providers/utils/auto-retry-fetch.ts
@@ -33456,21 +34311,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33456
34311
  }
33457
34312
  __name(autoRetryFetch, "autoRetryFetch");
33458
34313
 
33459
- // src/providers/utils/helpers.ts
33460
- var adjustResourcesToExclude = /* @__PURE__ */ __name((params) => {
33461
- const { userInput, cached, maxInputs } = params;
33462
- const final = { ...userInput };
33463
- let total = final.utxos.length + final.messages.length;
33464
- if (total >= maxInputs) {
33465
- return final;
33466
- }
33467
- final.utxos = [...final.utxos, ...cached.utxos.slice(0, maxInputs - total)];
33468
- total = final.utxos.length + final.messages.length;
33469
- if (total < maxInputs) {
33470
- final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
34314
+ // src/providers/utils/parse-graphql-response.ts
34315
+ var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
34316
+ const { response, isSubscription } = options;
34317
+ let extensions;
34318
+ const responseClone = response.clone();
34319
+ if (isSubscription) {
34320
+ const reader = responseClone.body?.getReader();
34321
+ const { event } = await FuelGraphqlSubscriber.readEvent(reader);
34322
+ extensions = event?.extensions;
34323
+ } else {
34324
+ extensions = (await responseClone.json()).extensions;
33471
34325
  }
33472
- return final;
33473
- }, "adjustResourcesToExclude");
34326
+ return {
34327
+ extensions
34328
+ };
34329
+ }, "parseGraphqlResponse");
33474
34330
 
33475
34331
  // src/providers/utils/validate-pagination-args.ts
33476
34332
  var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
@@ -33515,22 +34371,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33515
34371
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
33516
34372
  var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
33517
34373
  var GAS_USED_MODIFIER = 1.2;
34374
+ var WRITE_OPERATIONS = [
34375
+ "submit",
34376
+ "submitAndAwaitStatus",
34377
+ "produceBlocks"
34378
+ ];
33518
34379
  var Provider = class _Provider {
33519
34380
  static {
33520
34381
  __name(this, "Provider");
33521
34382
  }
33522
34383
  operations;
33523
34384
  cache;
33524
- /** @hidden */
33525
- static clearChainAndNodeCaches() {
34385
+ /**
34386
+ * @hidden
34387
+ * @param url - If provided, clears cache only for given url
34388
+ */
34389
+ static clearChainAndNodeCaches(url) {
34390
+ if (url) {
34391
+ delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
34392
+ delete _Provider.chainInfoCache[url];
34393
+ delete _Provider.nodeInfoCache[url];
34394
+ delete _Provider.currentBlockHeightCache[url];
34395
+ return;
34396
+ }
33526
34397
  _Provider.inflightFetchChainAndNodeInfoRequests = {};
33527
34398
  _Provider.nodeInfoCache = {};
33528
34399
  _Provider.chainInfoCache = {};
34400
+ _Provider.currentBlockHeightCache = {};
33529
34401
  }
33530
34402
  /** @hidden */
33531
34403
  url;
33532
34404
  /** @hidden */
33533
34405
  urlWithoutAuth;
34406
+ /**
34407
+ * Governs whether to include the required block height in the request body
34408
+ * for block-sensitive operations like when submitting a transaction.
34409
+ *
34410
+ * This ensures that the operation is executed at the correct block height,
34411
+ * regardless of which node in the network the request is routed to.
34412
+ *
34413
+ * `true` by default.
34414
+ */
34415
+ static ENABLE_RPC_CONSISTENCY = true;
33534
34416
  /** @hidden */
33535
34417
  static inflightFetchChainAndNodeInfoRequests = {};
33536
34418
  /** @hidden */
@@ -33538,6 +34420,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33538
34420
  /** @hidden */
33539
34421
  static nodeInfoCache = {};
33540
34422
  /** @hidden */
34423
+ static currentBlockHeightCache = {};
34424
+ /** @hidden */
33541
34425
  static incompatibleNodeVersionMessage = "";
33542
34426
  /** @hidden */
33543
34427
  consensusParametersTimestamp;
@@ -33549,6 +34433,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33549
34433
  headers: void 0,
33550
34434
  cache: void 0
33551
34435
  };
34436
+ static extractOperationName(body) {
34437
+ return body?.toString().match(/"operationName":"(.+)"/)?.[1];
34438
+ }
34439
+ static isWriteOperation(body) {
34440
+ return WRITE_OPERATIONS.includes(this.extractOperationName(body));
34441
+ }
34442
+ static normalizeUrl(url) {
34443
+ return url.replace(/-sub$/, "");
34444
+ }
34445
+ static hasWriteOperationHappened(url) {
34446
+ return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
34447
+ }
33552
34448
  /**
33553
34449
  * @hidden
33554
34450
  */
@@ -33566,9 +34462,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33566
34462
  if (options.requestMiddleware) {
33567
34463
  fullRequest = await options.requestMiddleware(fullRequest);
33568
34464
  }
33569
- return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);
34465
+ if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
34466
+ _Provider.applyBlockHeight(fullRequest, url);
34467
+ }
34468
+ return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
33570
34469
  }, retryOptions);
33571
34470
  }
34471
+ static applyBlockHeight(request, url) {
34472
+ const normalizedUrl = this.normalizeUrl(url);
34473
+ const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
34474
+ request.body = request.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
34475
+ }
34476
+ static async fetchAndProcessBlockHeight(url, request, options) {
34477
+ const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request, options) : fetch(url, request), "fetchFn");
34478
+ const isWriteOperation = _Provider.isWriteOperation(request.body);
34479
+ if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
34480
+ _Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
34481
+ }
34482
+ let response = await fetchFn();
34483
+ if (!_Provider.ENABLE_RPC_CONSISTENCY) {
34484
+ return response;
34485
+ }
34486
+ const retryOptions = {
34487
+ maxRetries: 5,
34488
+ baseDelay: 500
34489
+ };
34490
+ for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
34491
+ const { extensions } = await parseGraphqlResponse({
34492
+ response,
34493
+ isSubscription: url.endsWith("-sub")
34494
+ });
34495
+ _Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
34496
+ if (!extensions?.fuel_block_height_precondition_failed) {
34497
+ break;
34498
+ }
34499
+ const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
34500
+ const sleepTime = getWaitDelay(retryOptions, retryAttempt);
34501
+ await sleep(sleepTime);
34502
+ response = await fetchFn();
34503
+ }
34504
+ return response;
34505
+ }
34506
+ static setCurrentBlockHeight(url, height) {
34507
+ const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
34508
+ if (!isDefined(height) || !writeOperationHappened) {
34509
+ return;
34510
+ }
34511
+ const normalizedUrl = _Provider.normalizeUrl(url);
34512
+ if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
34513
+ _Provider.currentBlockHeightCache[normalizedUrl] = height;
34514
+ }
34515
+ }
33572
34516
  /**
33573
34517
  * Constructor to initialize a Provider.
33574
34518
  *
@@ -33654,6 +34598,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33654
34598
  * Returns some helpful parameters related to gas fees.
33655
34599
  */
33656
34600
  async getGasConfig() {
34601
+ await this.init();
33657
34602
  const {
33658
34603
  txParameters: { maxGasPerTx },
33659
34604
  predicateParameters: { maxGasPerPredicate },
@@ -33778,7 +34723,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33778
34723
  url: this.urlWithoutAuth,
33779
34724
  query,
33780
34725
  fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
33781
- variables: vars
34726
+ variables: vars,
34727
+ operationName: opDefinition.name.value,
34728
+ onEvent: /* @__PURE__ */ __name((event) => {
34729
+ _Provider.setCurrentBlockHeight(
34730
+ this.urlWithoutAuth,
34731
+ event.extensions?.current_fuel_block_height
34732
+ );
34733
+ }, "onEvent")
33782
34734
  });
33783
34735
  }
33784
34736
  return gqlClient.request(query, vars);
@@ -33936,7 +34888,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33936
34888
  * @param sendTransactionParams - The provider send transaction parameters (optional).
33937
34889
  * @returns A promise that resolves to the transaction response object.
33938
34890
  */
33939
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, enableAssetBurn } = {}) {
34891
+ async sendTransaction(transactionRequestLike, {
34892
+ enableAssetBurn,
34893
+ estimateTxDependencies = true,
34894
+ includePreConfirmation: _includePreConfirmation = true
34895
+ } = {}) {
33940
34896
  const transactionRequest = transactionRequestify(transactionRequestLike);
33941
34897
  validateTransactionForAssetBurn(
33942
34898
  await this.getBaseAssetId(),
@@ -33952,7 +34908,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33952
34908
  if (isTransactionTypeScript(transactionRequest)) {
33953
34909
  abis = transactionRequest.abis;
33954
34910
  }
33955
- const subscription = await this.operations.submitAndAwaitStatus({ encodedTransaction });
34911
+ const subscription = await this.operations.submitAndAwaitStatus({
34912
+ encodedTransaction,
34913
+ includePreConfirmation: true
34914
+ });
33956
34915
  this.#cacheInputs(
33957
34916
  transactionRequest.inputs,
33958
34917
  transactionRequest.getTransactionId(await this.getChainId())
@@ -34304,6 +35263,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34304
35263
  * @param transactionCostParams - The transaction cost parameters (optional).
34305
35264
  *
34306
35265
  * @returns A promise that resolves to the transaction cost object.
35266
+ *
35267
+ * @deprecated Use provider.assembleTx instead
35268
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
34307
35269
  */
34308
35270
  async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
34309
35271
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -34346,7 +35308,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34346
35308
  }
34347
35309
  ({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
34348
35310
  if (dryRunStatus && "reason" in dryRunStatus) {
34349
- throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
35311
+ throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
34350
35312
  }
34351
35313
  const { maxGasPerTx } = await this.getGasConfig();
34352
35314
  const pristineGasUsed = getGasUsedFromReceipts(receipts);
@@ -34379,6 +35341,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34379
35341
  transactionSummary
34380
35342
  };
34381
35343
  }
35344
+ /**
35345
+ * Assembles a transaction by completely estimating and funding it.
35346
+ *
35347
+ * @param params - Parameters used to assemble the transaction.
35348
+ *
35349
+ * @returns The assembled transaction request, estimated gas price, and receipts
35350
+ */
35351
+ async assembleTx(params) {
35352
+ const {
35353
+ request,
35354
+ reserveGas,
35355
+ resourcesIdsToIgnore,
35356
+ feePayerAccount,
35357
+ blockHorizon = 10,
35358
+ estimatePredicates = true,
35359
+ accountCoinQuantities = []
35360
+ } = params;
35361
+ const allAddresses = /* @__PURE__ */ new Set();
35362
+ const baseAssetId = await this.getBaseAssetId();
35363
+ let feePayerIndex = -1;
35364
+ let baseAssetChange;
35365
+ const requiredBalances = accountCoinQuantities.map((quantity, index) => {
35366
+ const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
35367
+ const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
35368
+ allAddresses.add(account.address.toB256());
35369
+ const changePolicy = {
35370
+ change: changeAccountAddress
35371
+ };
35372
+ if (assetId === baseAssetId) {
35373
+ baseAssetChange = changePolicy.change;
35374
+ }
35375
+ if (account.address.equals(feePayerAccount.address)) {
35376
+ feePayerIndex = index;
35377
+ }
35378
+ const requiredBalance = {
35379
+ account: resolveAccountForAssembleTxParams(account),
35380
+ amount: bn(amount).toString(10),
35381
+ assetId,
35382
+ changePolicy
35383
+ };
35384
+ return requiredBalance;
35385
+ });
35386
+ if (feePayerIndex === -1) {
35387
+ allAddresses.add(feePayerAccount.address.toB256());
35388
+ const newLength = requiredBalances.push({
35389
+ account: resolveAccountForAssembleTxParams(feePayerAccount),
35390
+ amount: bn(0).toString(10),
35391
+ // Since the correct fee amount cannot be determined yet, we can use 0
35392
+ assetId: baseAssetId,
35393
+ changePolicy: {
35394
+ change: baseAssetChange || feePayerAccount.address.toB256()
35395
+ }
35396
+ });
35397
+ feePayerIndex = newLength - 1;
35398
+ }
35399
+ const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
35400
+ Array.from(allAddresses),
35401
+ resourcesIdsToIgnore
35402
+ );
35403
+ const {
35404
+ assembleTx: { status, transaction: gqlTransaction, gasPrice }
35405
+ } = await this.operations.assembleTx({
35406
+ tx: hexlify(request.toTransactionBytes()),
35407
+ blockHorizon: String(blockHorizon),
35408
+ feeAddressIndex: String(feePayerIndex),
35409
+ requiredBalances,
35410
+ estimatePredicates,
35411
+ excludeInput,
35412
+ reserveGas: reserveGas ? reserveGas.toString(10) : void 0
35413
+ });
35414
+ if (status.type === "DryRunFailureStatus") {
35415
+ const parsedReceipts = status.receipts.map(deserializeReceipt);
35416
+ throw this.extractDryRunError(request, parsedReceipts, status.reason);
35417
+ }
35418
+ request.witnesses = gqlTransaction.witnesses || request.witnesses;
35419
+ request.inputs = gqlTransaction.inputs?.map(deserializeInput) || request.inputs;
35420
+ request.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request.outputs;
35421
+ if (gqlTransaction.policies?.maxFee) {
35422
+ request.maxFee = bn(gqlTransaction.policies.maxFee);
35423
+ }
35424
+ if (gqlTransaction.scriptGasLimit) {
35425
+ request.gasLimit = bn(gqlTransaction.scriptGasLimit);
35426
+ }
35427
+ const rawReceipts = status.receipts;
35428
+ const chainId = await this.getChainId();
35429
+ request.updateState(chainId, "funded", {
35430
+ gasPrice: gasPrice.toString(),
35431
+ receipts: rawReceipts
35432
+ });
35433
+ return {
35434
+ assembledRequest: request,
35435
+ gasPrice: bn(gasPrice),
35436
+ receipts: status.receipts.map(deserializeReceipt),
35437
+ rawReceipts
35438
+ };
35439
+ }
34382
35440
  /**
34383
35441
  * Returns coins for the given owner.
34384
35442
  *
@@ -34417,30 +35475,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34417
35475
  *
34418
35476
  * @param owner - The address to get resources for.
34419
35477
  * @param quantities - The coin quantities to get.
34420
- * @param excludedIds - IDs of excluded resources from the selection (optional).
35478
+ * @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
34421
35479
  * @returns A promise that resolves to the resources.
34422
35480
  */
34423
- async getResourcesToSpend(owner, quantities, excludedIds) {
35481
+ async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
34424
35482
  const ownerAddress = new Address(owner);
34425
- let idsToExclude = {
34426
- messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],
34427
- utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || []
34428
- };
34429
- if (this.cache) {
34430
- const cached = this.cache.getActiveData(ownerAddress.toB256());
34431
- if (cached.utxos.length || cached.messages.length) {
34432
- const {
34433
- consensusParameters: {
34434
- txParameters: { maxInputs }
34435
- }
34436
- } = await this.getChain();
34437
- idsToExclude = adjustResourcesToExclude({
34438
- userInput: idsToExclude,
34439
- cached,
34440
- maxInputs: maxInputs.toNumber()
34441
- });
34442
- }
34443
- }
35483
+ const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
35484
+ [ownerAddress.b256Address],
35485
+ resourcesIdsToIgnore
35486
+ );
34444
35487
  const coinsQuery = {
34445
35488
  owner: ownerAddress.toB256(),
34446
35489
  queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
@@ -34448,7 +35491,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34448
35491
  amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
34449
35492
  max: maxPerAsset ? maxPerAsset.toString(10) : void 0
34450
35493
  })),
34451
- excludedIds: idsToExclude
35494
+ excludedIds
34452
35495
  };
34453
35496
  const result = await this.operations.getCoinsToSpend(coinsQuery);
34454
35497
  const coins = result.coinsToSpend.flat().map((coin) => {
@@ -35015,11 +36058,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35015
36058
  /**
35016
36059
  * @hidden
35017
36060
  */
35018
- extractDryRunError(transactionRequest, receipts, dryRunStatus) {
35019
- const status = dryRunStatus;
36061
+ extractDryRunError(transactionRequest, receipts, reason) {
35020
36062
  let logs = [];
35021
36063
  let groupedLogs = {};
35022
- if (transactionRequest.abis) {
36064
+ if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
35023
36065
  ({ logs, groupedLogs } = getAllDecodedLogs({
35024
36066
  receipts,
35025
36067
  mainAbi: transactionRequest.abis.main,
@@ -35030,7 +36072,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35030
36072
  logs,
35031
36073
  groupedLogs,
35032
36074
  receipts,
35033
- statusReason: status.reason
36075
+ statusReason: reason
35034
36076
  });
35035
36077
  }
35036
36078
  /**
@@ -35057,6 +36099,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35057
36099
  }
35058
36100
  return transactionRequest;
35059
36101
  }
36102
+ /**
36103
+ * @hidden
36104
+ *
36105
+ * This helper adjusts the resources to be excluded for a given set of addresses.
36106
+ * Supporting multiple addresses is important because of the `assembleTx` method,
36107
+ * which may be invoked with different addresses. It handles both messages and UTXOs,
36108
+ * ensuring the total number of inputs does not exceed the maximum allowed by the chain's
36109
+ * consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
36110
+ * over those retrieved from the cache.
36111
+ */
36112
+ async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
36113
+ const final = {
36114
+ messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
36115
+ utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
36116
+ };
36117
+ if (this.cache) {
36118
+ const cache2 = this.cache;
36119
+ const allCached = addresses.map((address) => cache2.getActiveData(address));
36120
+ const {
36121
+ consensusParameters: {
36122
+ txParameters: { maxInputs: maxInputsBn }
36123
+ }
36124
+ } = await this.getChain();
36125
+ const maxInputs = maxInputsBn.toNumber();
36126
+ for (let i = 0; i < allCached.length; i++) {
36127
+ let total = final.utxos.length + final.messages.length;
36128
+ if (total >= maxInputs) {
36129
+ break;
36130
+ }
36131
+ final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
36132
+ total = final.utxos.length + final.messages.length;
36133
+ if (total >= maxInputs) {
36134
+ break;
36135
+ }
36136
+ final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
36137
+ }
36138
+ }
36139
+ return final;
36140
+ }
35060
36141
  };
35061
36142
 
35062
36143
  // src/test-utils/test-asset-id.ts
@@ -35082,21 +36163,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35082
36163
  }
35083
36164
  };
35084
36165
 
35085
- // src/providers/utils/merge-quantities.ts
35086
- var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
35087
- const resultMap = {};
35088
- function addToMap({ amount, assetId }) {
35089
- if (resultMap[assetId]) {
35090
- resultMap[assetId] = resultMap[assetId].add(amount);
35091
- } else {
35092
- resultMap[assetId] = amount;
35093
- }
35094
- }
35095
- __name(addToMap, "addToMap");
35096
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
35097
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
35098
- }, "mergeQuantities");
35099
-
35100
36166
  // src/types.ts
35101
36167
  var AbstractAccount = class {
35102
36168
  static {
@@ -35141,6 +36207,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35141
36207
  return { script, scriptData };
35142
36208
  }, "assembleTransferToContractScript");
35143
36209
 
36210
+ // src/utils/split-coins-into-batches.ts
36211
+ var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
36212
+ const batchesNum = Math.ceil(coins.length / maxBatchLength);
36213
+ const batches = [];
36214
+ for (let i = 0; i < batchesNum; i += 1) {
36215
+ const batchStart = i * maxBatchLength;
36216
+ const batchEnd = (i + 1) * maxBatchLength;
36217
+ batches.push(coins.slice(batchStart, batchEnd));
36218
+ }
36219
+ return batches;
36220
+ }, "splitCoinsIntoBatches");
36221
+
35144
36222
  // src/account.ts
35145
36223
  var MAX_FUNDING_ATTEMPTS = 5;
35146
36224
  var Account = class extends AbstractAccount {
@@ -35207,11 +36285,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35207
36285
  * Retrieves resources satisfying the spend query for the account.
35208
36286
  *
35209
36287
  * @param quantities - Quantities of resources to be obtained.
35210
- * @param excludedIds - IDs of resources to be excluded from the query (optional).
36288
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
35211
36289
  * @returns A promise that resolves to an array of Resources.
35212
36290
  */
35213
- async getResourcesToSpend(quantities, excludedIds) {
35214
- return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);
36291
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
36292
+ return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
35215
36293
  }
35216
36294
  /**
35217
36295
  * Retrieves coins owned by the account.
@@ -35256,6 +36334,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35256
36334
  * @param request - The transaction request to fund.
35257
36335
  * @param params - The estimated transaction parameters.
35258
36336
  * @returns A promise that resolves to the funded transaction request.
36337
+ *
36338
+ * @deprecated Use provider.assembleTx instead
36339
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35259
36340
  */
35260
36341
  async fund(request, params) {
35261
36342
  const {
@@ -35378,7 +36459,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35378
36459
  amount,
35379
36460
  assetId: assetId || await this.provider.getBaseAssetId()
35380
36461
  });
35381
- request = await this.estimateAndFundTransaction(request, txParams);
36462
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36463
+ request = await setAndValidateGasAndFeeForAssembledTx({
36464
+ gasPrice,
36465
+ provider: this.provider,
36466
+ transactionRequest,
36467
+ setGasLimit: txParams?.gasLimit,
36468
+ setMaxFee: txParams?.maxFee
36469
+ });
35382
36470
  return request;
35383
36471
  }
35384
36472
  /**
@@ -35404,7 +36492,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35404
36492
  async batchTransfer(transferParams, txParams = {}) {
35405
36493
  let request = new ScriptTransactionRequest(txParams);
35406
36494
  request = this.addBatchTransfer(request, transferParams);
35407
- request = await this.estimateAndFundTransaction(request, txParams);
36495
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36496
+ request = await setAndValidateGasAndFeeForAssembledTx({
36497
+ gasPrice,
36498
+ provider: this.provider,
36499
+ transactionRequest,
36500
+ setGasLimit: txParams?.gasLimit,
36501
+ setMaxFee: txParams?.maxFee
36502
+ });
35408
36503
  return this.sendTransaction(request, { estimateTxDependencies: false });
35409
36504
  }
35410
36505
  /**
@@ -35476,7 +36571,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35476
36571
  const { script, scriptData } = await assembleTransferToContractScript(transferParams);
35477
36572
  request.script = script;
35478
36573
  request.scriptData = scriptData;
35479
- request = await this.estimateAndFundTransaction(request, txParams, { quantities });
36574
+ const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
36575
+ request = await setAndValidateGasAndFeeForAssembledTx({
36576
+ gasPrice,
36577
+ provider: this.provider,
36578
+ transactionRequest,
36579
+ setGasLimit: txParams?.gasLimit,
36580
+ setMaxFee: txParams?.maxFee
36581
+ });
35480
36582
  return this.sendTransaction(request);
35481
36583
  }
35482
36584
  /**
@@ -35504,16 +36606,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35504
36606
  const baseAssetId = await this.provider.getBaseAssetId();
35505
36607
  let request = new ScriptTransactionRequest(params);
35506
36608
  const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
35507
- const txCost = await this.getTransactionCost(request, { quantities });
35508
- request = this.validateGasLimitAndMaxFee({
35509
- transactionRequest: request,
35510
- gasUsed: txCost.gasUsed,
35511
- maxFee: txCost.maxFee,
35512
- txParams
36609
+ const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
36610
+ request = await setAndValidateGasAndFeeForAssembledTx({
36611
+ gasPrice,
36612
+ provider: this.provider,
36613
+ transactionRequest,
36614
+ setGasLimit: txParams?.gasLimit,
36615
+ setMaxFee: txParams?.maxFee
35513
36616
  });
35514
- await this.fund(request, txCost);
35515
36617
  return this.sendTransaction(request);
35516
36618
  }
36619
+ /**
36620
+ * Consolidates base asset UTXOs into fewer, larger ones.
36621
+ *
36622
+ * Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
36623
+ * assembles consolidation transactions, and submits them to the network.
36624
+ *
36625
+ * Note: This method currently supports only the base asset.
36626
+ *
36627
+ * @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
36628
+ * @returns A promise that resolves to the response of the submitted transactions.
36629
+ * @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
36630
+ */
36631
+ async consolidateCoins(params) {
36632
+ const { assetId } = params;
36633
+ const { coins } = await this.getCoins(assetId);
36634
+ const baseAssetId = await this.provider.getBaseAssetId();
36635
+ const isBaseAsset = baseAssetId === assetId;
36636
+ let submitAll;
36637
+ const consolidationParams = {
36638
+ coins,
36639
+ mode: params.mode,
36640
+ outputNum: params.outputNum
36641
+ };
36642
+ if (isBaseAsset) {
36643
+ ({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
36644
+ } else {
36645
+ throw new FuelError(
36646
+ ErrorCode.UNSUPPORTED_FEATURE,
36647
+ "Consolidation for non-base assets is not supported yet."
36648
+ );
36649
+ }
36650
+ return submitAll();
36651
+ }
36652
+ /**
36653
+ * Assembles transactions for consolidating base asset coins into fewer UTXOs.
36654
+ *
36655
+ * This method splits the provided coins into batches and creates transaction requests
36656
+ * to consolidate them. It calculates the necessary fee and sets up the transactions
36657
+ * to be submitted either in parallel (default) or sequentially.
36658
+ *
36659
+ * @param params - The parameters for assembling base asset consolidation transactions.
36660
+ *
36661
+ * @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
36662
+ */
36663
+ async assembleBaseAssetConsolidationTxs(params) {
36664
+ const { coins, mode = "parallel", outputNum = 1 } = params;
36665
+ const baseAssetId = await this.provider.getBaseAssetId();
36666
+ this.validateConsolidationTxsCoins(coins, baseAssetId);
36667
+ const chainInfo = await this.provider.getChain();
36668
+ const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
36669
+ let totalFeeCost = bn(0);
36670
+ const txs = [];
36671
+ const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
36672
+ const gasPrice = await this.provider.estimateGasPrice(10);
36673
+ const consolidateMoreThanOneCoin = outputNum > 1;
36674
+ coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
36675
+ const request = new ScriptTransactionRequest({
36676
+ script: "0x"
36677
+ });
36678
+ request.addResources(coinBatch);
36679
+ if (consolidateMoreThanOneCoin) {
36680
+ Array.from({ length: outputNum - 1 }).forEach(() => {
36681
+ request.addCoinOutput(this.address, 0, baseAssetId);
36682
+ });
36683
+ }
36684
+ const minGas = request.calculateMinGas(chainInfo);
36685
+ const fee = calculateGasFee({
36686
+ gasPrice,
36687
+ gas: minGas,
36688
+ priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
36689
+ tip: request.tip
36690
+ });
36691
+ request.maxFee = fee;
36692
+ if (consolidateMoreThanOneCoin) {
36693
+ const total = request.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
36694
+ const amountPerNewUtxo = total.div(outputNum + 1);
36695
+ request.outputs.forEach((output) => {
36696
+ if (output.type === OutputType.Coin) {
36697
+ output.amount = amountPerNewUtxo;
36698
+ }
36699
+ });
36700
+ }
36701
+ totalFeeCost = totalFeeCost.add(fee);
36702
+ txs.push(request);
36703
+ });
36704
+ const submitAll = this.prepareSubmitAll({ txs, mode });
36705
+ return { txs, totalFeeCost, submitAll };
36706
+ }
36707
+ /**
36708
+ * Prepares a function to submit all transactions either sequentially or in parallel.
36709
+ *
36710
+ * @param params - The parameters for preparing the submitAll callback.
36711
+ *
36712
+ * @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
36713
+ */
36714
+ prepareSubmitAll = /* @__PURE__ */ __name((params) => {
36715
+ const { txs, mode = "sequential" } = params;
36716
+ return async () => {
36717
+ const txResponses = [];
36718
+ const errors2 = [];
36719
+ if (mode === "sequential") {
36720
+ for (const tx of txs) {
36721
+ try {
36722
+ const submit = await this.sendTransaction(tx);
36723
+ const response = await submit.waitForResult();
36724
+ txResponses.push(response);
36725
+ } catch (error2) {
36726
+ errors2.push(error2);
36727
+ }
36728
+ }
36729
+ } else {
36730
+ const results = await Promise.allSettled(
36731
+ txs.map(async (tx) => {
36732
+ const submit = await this.sendTransaction(tx);
36733
+ return submit.waitForResult();
36734
+ })
36735
+ );
36736
+ results.forEach((result) => {
36737
+ if (result.status === "fulfilled") {
36738
+ txResponses.push(result.value);
36739
+ } else {
36740
+ errors2.push(result.reason);
36741
+ }
36742
+ });
36743
+ }
36744
+ return { txResponses, errors: errors2 };
36745
+ };
36746
+ }, "prepareSubmitAll");
35517
36747
  /**
35518
36748
  * Returns a transaction cost to enable user
35519
36749
  * to set gasLimit and also reserve balance amounts
@@ -35523,6 +36753,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35523
36753
  * @param transactionCostParams - The transaction cost parameters (optional).
35524
36754
  *
35525
36755
  * @returns A promise that resolves to the transaction cost object.
36756
+ *
36757
+ * @deprecated Use provider.assembleTx instead
36758
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35526
36759
  */
35527
36760
  async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
35528
36761
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -35684,6 +36917,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35684
36917
  } : void 0;
35685
36918
  }
35686
36919
  /** @hidden * */
36920
+ async assembleTx(transactionRequest, quantities = []) {
36921
+ const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
36922
+ transactionRequest.gasLimit = bn(0);
36923
+ transactionRequest.maxFee = bn(0);
36924
+ const { assembledRequest, gasPrice } = await this.provider.assembleTx({
36925
+ request: transactionRequest,
36926
+ accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
36927
+ feePayerAccount: this
36928
+ });
36929
+ return { transactionRequest: assembledRequest, gasPrice };
36930
+ }
36931
+ /** @hidden * */
35687
36932
  validateTransferAmount(amount) {
35688
36933
  if (bn(amount).lte(0)) {
35689
36934
  throw new FuelError(
@@ -35731,6 +36976,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35731
36976
  }
35732
36977
  return request;
35733
36978
  }
36979
+ /** @hidden * */
36980
+ validateConsolidationTxsCoins(coins, assetId) {
36981
+ if (coins.length <= 1) {
36982
+ throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
36983
+ }
36984
+ if (!coins.every((c) => c.assetId === assetId)) {
36985
+ throw new FuelError(
36986
+ ErrorCode.COINS_ASSET_ID_MISMATCH,
36987
+ "All coins to consolidate must be from the same asset id."
36988
+ );
36989
+ }
36990
+ }
35734
36991
  };
35735
36992
 
35736
36993
  // src/wallet/keystore-wallet.ts
@@ -38800,23 +40057,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
38800
40057
  ),
38801
40058
  port: nodeOptions.port || "0"
38802
40059
  };
38803
- let cleanup;
40060
+ let killNode;
38804
40061
  let url;
38805
40062
  if (launchNodeServerPort) {
38806
40063
  const serverUrl = `http://localhost:${launchNodeServerPort}`;
38807
40064
  url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
38808
- cleanup = /* @__PURE__ */ __name(() => {
40065
+ killNode = /* @__PURE__ */ __name(() => {
38809
40066
  fetch(`${serverUrl}/cleanup/${url}`);
38810
- }, "cleanup");
40067
+ }, "killNode");
38811
40068
  } else {
38812
40069
  const settings = await launchNode(launchNodeOptions);
38813
40070
  url = settings.url;
38814
- cleanup = settings.cleanup;
40071
+ killNode = settings.cleanup;
38815
40072
  }
40073
+ const cleanup = /* @__PURE__ */ __name(() => {
40074
+ Provider.clearChainAndNodeCaches(url);
40075
+ killNode();
40076
+ }, "cleanup");
38816
40077
  let provider;
38817
40078
  try {
38818
40079
  provider = new Provider(url, providerOptions);
38819
- await provider.init();
38820
40080
  } catch (err) {
38821
40081
  cleanup();
38822
40082
  throw err;