@bitgo-beta/sdk-coin-flrp 1.0.1-beta.9 → 1.0.1-beta.90

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 (91) hide show
  1. package/dist/src/flrp.d.ts +82 -61
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +293 -134
  4. package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -6
  5. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/atomicTransactionBuilder.js +233 -29
  7. package/dist/src/lib/constants.d.ts +160 -1
  8. package/dist/src/lib/constants.d.ts.map +1 -1
  9. package/dist/src/lib/constants.js +213 -3
  10. package/dist/src/lib/delegatorTxBuilder.d.ts +58 -0
  11. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/delegatorTxBuilder.js +224 -0
  13. package/dist/src/lib/exportInCTxBuilder.d.ts +1 -1
  14. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  15. package/dist/src/lib/exportInCTxBuilder.js +46 -17
  16. package/dist/src/lib/exportInPTxBuilder.d.ts +1 -1
  17. package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -1
  18. package/dist/src/lib/exportInPTxBuilder.js +70 -6
  19. package/dist/src/lib/iface.d.ts +52 -1
  20. package/dist/src/lib/iface.d.ts.map +1 -1
  21. package/dist/src/lib/iface.js +1 -1
  22. package/dist/src/lib/importInCTxBuilder.d.ts +67 -0
  23. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/importInCTxBuilder.js +403 -0
  25. package/dist/src/lib/importInPTxBuilder.d.ts +73 -0
  26. package/dist/src/lib/importInPTxBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/importInPTxBuilder.js +464 -0
  28. package/dist/src/lib/index.d.ts +7 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +15 -2
  31. package/dist/src/lib/keyPair.d.ts.map +1 -1
  32. package/dist/src/lib/keyPair.js +4 -6
  33. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +81 -0
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.js +248 -0
  36. package/dist/src/lib/transaction.d.ts +111 -0
  37. package/dist/src/lib/transaction.d.ts.map +1 -0
  38. package/dist/src/lib/transaction.js +322 -0
  39. package/dist/src/lib/transactionBuilder.d.ts +85 -0
  40. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/transactionBuilder.js +167 -0
  42. package/dist/src/lib/transactionBuilderFactory.d.ts +37 -0
  43. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  44. package/dist/src/lib/transactionBuilderFactory.js +91 -0
  45. package/dist/src/lib/types.d.ts +78 -0
  46. package/dist/src/lib/types.d.ts.map +1 -0
  47. package/dist/src/lib/types.js +5 -0
  48. package/dist/src/lib/utils.d.ts +59 -0
  49. package/dist/src/lib/utils.d.ts.map +1 -1
  50. package/dist/src/lib/utils.js +160 -52
  51. package/dist/src/lib/validatorTxBuilder.d.ts +40 -0
  52. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
  53. package/dist/src/lib/validatorTxBuilder.js +180 -0
  54. package/dist/test/unit/delegatorTxBuilder.test.d.ts +2 -0
  55. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +1 -0
  56. package/dist/test/unit/delegatorTxBuilder.test.js +233 -0
  57. package/dist/test/unit/lib/atomicTransactionBuilder.js +37 -11
  58. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
  59. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
  60. package/dist/test/unit/lib/exportInCTxBuilder.js +584 -0
  61. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
  62. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
  63. package/dist/test/unit/lib/exportInPTxBuilder.js +377 -0
  64. package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
  65. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
  66. package/dist/test/unit/lib/importInCTxBuilder.js +257 -0
  67. package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
  68. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
  69. package/dist/test/unit/lib/importInPTxBuilder.js +500 -0
  70. package/dist/test/unit/lib/transaction.d.ts +2 -0
  71. package/dist/test/unit/lib/transaction.d.ts.map +1 -0
  72. package/dist/test/unit/lib/transaction.js +460 -0
  73. package/dist/test/unit/lib/utils.js +55 -1
  74. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +2 -0
  75. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +1 -0
  76. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +271 -0
  77. package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
  78. package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
  79. package/dist/test/unit/transactionBuilder.test.js +114 -0
  80. package/dist/test/unit/validatorTxBuilder.test.d.ts +2 -0
  81. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +1 -0
  82. package/dist/test/unit/validatorTxBuilder.test.js +293 -0
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +11 -11
  85. package/.eslintignore +0 -5
  86. package/.eslintrc.json +0 -7
  87. package/.mocharc.yml +0 -8
  88. package/CHANGELOG.md +0 -0
  89. package/dist/test/unit/lib/exportTxBuilder.d.ts +0 -2
  90. package/dist/test/unit/lib/exportTxBuilder.d.ts.map +0 -1
  91. package/dist/test/unit/lib/exportTxBuilder.js +0 -45
@@ -2,8 +2,11 @@
2
2
  // Shared constants for Flare P-Chain (flrp) utilities and key handling.
3
3
  // Centralizing avoids magic numbers scattered across utils and keyPair implementations.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.HEX_REGEX = exports.ADDRESS_REGEX = exports.OUTPUT_INDEX_HEX_LENGTH = exports.PRIVATE_KEY_COMPRESSED_SUFFIX = exports.SUFFIXED_PRIVATE_KEY_LENGTH = exports.RAW_PRIVATE_KEY_LENGTH = exports.UNCOMPRESSED_PUBLIC_KEY_LENGTH = exports.COMPRESSED_PUBLIC_KEY_LENGTH = exports.SHORT_PUB_KEY_LENGTH = exports.DECODED_BLOCK_ID_LENGTH = void 0;
6
- exports.DECODED_BLOCK_ID_LENGTH = 36; // Expected decoded block identifier length
5
+ exports.HEX_PREFIX_LENGTH = exports.HEX_PREFIX = exports.EMPTY_BUFFER_SIZE = exports.FLARE_TESTNET_NETWORK_ID = exports.FLARE_MAINNET_NETWORK_ID = exports.DEFAULT_NETWORK_ID = exports.HEX_PATTERN_WITH_PREFIX = exports.HEX_PATTERN_NO_PREFIX = exports.HEX_CHAR_PATTERN = exports.HEX_REGEX = exports.ADDRESS_REGEX = exports.FIRST_ADDRESS_INDEX = exports.MEMO_BUFFER_SIZE = exports.DEFAULT_LOCKTIME = exports.DEFAULT_THRESHOLD = exports.ZERO_NUMBER = exports.ZERO_BIGINT = exports.EMPTY_STRING = exports.CREDENTIAL_VERSION = exports.STAKE_OUTPUT_TYPE = exports.SECP256K1_CREDENTIAL_TYPE = exports.DELEGATOR_STAKE_TYPE = exports.PRIMARY_DELEGATOR_TYPE = exports.DELEGATOR_TRANSACTION_TYPE = exports.TRANSACTION_ID_PREFIX = exports.PERCENTAGE_MULTIPLIER = exports.BASIS_POINTS_DIVISOR = exports.MIN_DELEGATION_FEE_BASIS_POINTS = exports.MINIMUM_FEE = exports.OUTPUT_FEE = exports.INPUT_FEE = exports.DEFAULT_EVM_GAS_FEE = exports.DEFAULT_BASE_FEE = exports.MAX_CHAIN_ID_LENGTH = exports.CHAIN_ID_HEX_LENGTH = exports.BLS_SIGNATURE_LENGTH = exports.BLS_PUBLIC_KEY_UNCOMPRESSED_LENGTH = exports.BLS_PUBLIC_KEY_COMPRESSED_LENGTH = exports.SECP256K1_SIGNATURE_LENGTH = exports.PRIVATE_KEY_HEX_LENGTH = exports.TRANSACTION_ID_HEX_LENGTH = exports.ASSET_ID_LENGTH = exports.OUTPUT_INDEX_HEX_LENGTH = exports.PRIVATE_KEY_COMPRESSED_SUFFIX = exports.SUFFIXED_PRIVATE_KEY_LENGTH = exports.RAW_PRIVATE_KEY_LENGTH = exports.UNCOMPRESSED_PUBLIC_KEY_LENGTH = exports.COMPRESSED_PUBLIC_KEY_LENGTH = exports.SHORT_PUB_KEY_LENGTH = exports.DECODED_BLOCK_ID_LENGTH = void 0;
6
+ exports.IMPORT_TX_TYPE = exports.PLATFORM_VM_ADD_VALIDATOR_TX = exports.PLATFORM_VM_IMPORT_TX = exports.PADSTART_CHAR = exports.HEX_PREFIX_REMOVE = exports.ZERO_ADDRESS = exports.FLARE_ADDRESS_PLACEHOLDER = exports.FLARE_ATOMIC_PARSED_PREFIX = exports.FLARE_ATOMIC_PREFIX = exports.CHAIN_SUFFIX = exports.X_CHAIN_FULL = exports.C_CHAIN_FULL = exports.P_CHAIN_FULL = exports.X_CHAIN = exports.C_CHAIN = exports.P_CHAIN = exports.UTF8_ENCODING = exports.HEX_ENCODING = exports.BIGINT_TYPE = exports.FUNCTION_TYPE = exports.NUMBER_TYPE = exports.STRING_TYPE = exports.OBJECT_TYPE_STRING = exports.ERROR_FAILED_INITIALIZE_BUILDER = exports.ERROR_TRANSACTION_PARSE_FAILED = exports.ERROR_BLOCKCHAIN_ID_MISMATCH = exports.ERROR_TRANSACTION_REQUIRED = exports.ERROR_EXPORT_AMOUNT_POSITIVE = exports.ERROR_DESTINATION_ADDRESSES_REQUIRED = exports.ERROR_SOURCE_ADDRESSES_REQUIRED = exports.ERROR_DESTINATION_CHAIN_REQUIRED = exports.ERROR_EXPORT_NOT_IMPLEMENTED = exports.ERROR_UNKNOWN = exports.ERROR_CREATE_CREDENTIAL_FAILED = exports.ERROR_FLAREJS_SIGNING_FAILED = exports.ERROR_ENHANCED_PARSE_FAILED = exports.ERROR_ENHANCED_BUILD_FAILED = exports.ERROR_UTXOS_REQUIRED_BUILD = exports.ERROR_INVALID_PRIVATE_KEY = exports.ERROR_SIGNATURES_EMPTY = exports.ERROR_SIGNATURES_ARRAY = exports.ERROR_UTXOS_REQUIRED = exports.ERROR_CREDENTIALS_ARRAY = exports.ERROR_AMOUNT_POSITIVE = exports.EXPORT_TRANSACTION_TYPE = exports.MAINNET_TYPE = exports.FIRST_ARRAY_INDEX = exports.AMOUNT_STRING_ZERO = exports.SIGNING_METHOD = exports.DECIMAL_RADIX = void 0;
7
+ exports.FLR_ASSET_ID = exports.DESTINATION_CHAIN_FIELD = exports.SOURCE_CHAIN_FIELD = exports.REWARD_ADDRESSES_FIELD = exports.MEMO_FIELD = exports.DISPLAY_ORDER_BASE = exports.ADD_PERMISSIONLESS_VALIDATOR_TYPE = exports.HEX_RADIX = exports.SIGNATURE_VERSION = exports.RECOVERY_VERSION = exports.RECOVERY_MODE = exports.NORMAL_MODE = exports.RECOVERY_KEY_METHOD = exports.SHA256_HASH = exports.DER_FORMAT = exports.SECP256K1_SIG_TYPE = exports.TYPE_FIELD = exports.FEE_FIELD = exports.CHANGE_OUTPUTS_FIELD = exports.OUTPUTS_FIELD = exports.CHANGE_AMOUNT_FIELD = exports.OUTPUT_AMOUNT_FIELD = exports.ID_FIELD = exports.OUTPUT_IDX_FIELD = exports.TXID_FIELD = exports.AMOUNT_FIELD = exports.OUTPUT_ID_FIELD = exports.GET_OUTPUT_METHOD = exports.BLOCKCHAIN_ID_PROP = exports.NETWORK_ID_PROP_ALT = exports.NETWORK_ID_PROP = exports.INS_PROP = exports.INPUTS_PROP = exports.OUTS_PROP = exports.EXPORTED_OUTPUTS_PROP = exports.DESTINATION_CHAIN_ID_PROP = exports.DESTINATION_CHAIN_PROP = exports.SECP256K1_TRANSFER_OUTPUT_TYPE = exports.SECP256K1_TRANSFER_INPUT_TYPE = exports.CREDENTIAL_TYPE = exports.TRANSFERABLE_INPUT_TYPE = exports.VALIDATOR_TRANSACTION_TYPES = exports.ADD_VALIDATOR_TX_TYPE = exports.ADDVALIDATOR_TYPE = exports.VALIDATOR_TYPE = exports.IMPORT_C_TYPE = exports.SEND_TYPE = exports.EXPORT_TYPE = exports.IMPORT_TYPE = exports.P_CHAIN_IMPORT_TYPE = void 0;
8
+ exports.UTXO_REQUIRED_FIELDS = exports.ERROR_UNKNOWN_PARSING = exports.ERROR_PARSE_RAW_TRANSACTION = exports.ERROR_UTXOS_REQUIRED_BUILDER = exports.ERROR_FROM_ADDRESSES_REQUIRED = exports.ERROR_UTXOS_MISSING_FIELD = exports.ERROR_UTXOS_EMPTY_ARRAY = exports.ERROR_INVALID_LOCKTIME = exports.ERROR_INVALID_THRESHOLD = exports.ERROR_BLOCKCHAIN_ID_MISMATCH_BUILDER = exports.ERROR_NETWORK_ID_MISMATCH = exports.VALID_P_CHAIN_IMPORT_TYPES = exports.VALID_IMPORT_SOURCE_CHAINS = exports.X_CHAIN_SHORT = exports.P_CHAIN_SHORT = exports.PLACEHOLDER_NODE_ID = exports.FLARE_TRANSACTION_ID_PLACEHOLDER = exports.FLARE_SIGNABLE_PAYLOAD = exports.FLARE_TX_HEX_PLACEHOLDER = void 0;
9
+ exports.DECODED_BLOCK_ID_LENGTH = 32; // Expected decoded block identifier length
7
10
  exports.SHORT_PUB_KEY_LENGTH = 50; // Placeholder (potential CB58 encoded form length)
8
11
  exports.COMPRESSED_PUBLIC_KEY_LENGTH = 66; // 33 bytes (compressed) hex encoded
9
12
  exports.UNCOMPRESSED_PUBLIC_KEY_LENGTH = 130; // 65 bytes (uncompressed) hex encoded
@@ -11,7 +14,214 @@ exports.RAW_PRIVATE_KEY_LENGTH = 64; // 32 bytes hex encoded
11
14
  exports.SUFFIXED_PRIVATE_KEY_LENGTH = 66; // 32 bytes + compression flag suffix
12
15
  exports.PRIVATE_KEY_COMPRESSED_SUFFIX = '01';
13
16
  exports.OUTPUT_INDEX_HEX_LENGTH = 8; // 4 bytes serialized to hex length
17
+ // Asset and transaction constants
18
+ exports.ASSET_ID_LENGTH = 32; // Asset ID length in bytes (standard for AVAX/Flare networks)
19
+ exports.TRANSACTION_ID_HEX_LENGTH = 64; // Transaction ID length in hex characters (32 bytes)
20
+ exports.PRIVATE_KEY_HEX_LENGTH = 64; // Private key length in hex characters (32 bytes)
21
+ exports.SECP256K1_SIGNATURE_LENGTH = 65; // SECP256K1 signature length in bytes
22
+ exports.BLS_PUBLIC_KEY_COMPRESSED_LENGTH = 96; // BLS public key compressed length in hex chars (48 bytes)
23
+ exports.BLS_PUBLIC_KEY_UNCOMPRESSED_LENGTH = 192; // BLS public key uncompressed length in hex chars (96 bytes)
24
+ exports.BLS_SIGNATURE_LENGTH = 192; // BLS signature length in hex characters (96 bytes)
25
+ exports.CHAIN_ID_HEX_LENGTH = 64; // Chain ID length in hex characters (32 bytes)
26
+ exports.MAX_CHAIN_ID_LENGTH = 128; // Maximum chain ID string length
27
+ // Fee constants (in nanoFLR)
28
+ exports.DEFAULT_BASE_FEE = '1000000'; // 1M nanoFLR default base fee
29
+ exports.DEFAULT_EVM_GAS_FEE = '21000'; // Standard EVM transfer gas fee
30
+ exports.INPUT_FEE = '100000'; // 100K nanoFLR per input (FlareJS standard)
31
+ exports.OUTPUT_FEE = '50000'; // 50K nanoFLR per output (FlareJS standard)
32
+ exports.MINIMUM_FEE = '1000000'; // 1M nanoFLR minimum fee
33
+ // Validator constants
34
+ exports.MIN_DELEGATION_FEE_BASIS_POINTS = 20000; // 2% minimum delegation fee
35
+ exports.BASIS_POINTS_DIVISOR = 10000; // Divisor to convert basis points to decimal
36
+ exports.PERCENTAGE_MULTIPLIER = 100; // Multiplier to convert decimal to percentage
37
+ // Transaction ID prefix
38
+ exports.TRANSACTION_ID_PREFIX = 'flare-atomic-tx-'; // Prefix for transaction IDs
39
+ // Transaction type constants
40
+ exports.DELEGATOR_TRANSACTION_TYPE = 'PlatformVM.AddDelegatorTx'; // Delegator transaction type
41
+ // Delegator type constants
42
+ exports.PRIMARY_DELEGATOR_TYPE = 'primary'; // Primary delegator type
43
+ exports.DELEGATOR_STAKE_TYPE = 'delegator'; // Delegator stake type
44
+ exports.SECP256K1_CREDENTIAL_TYPE = 'secp256k1fx.Credential'; // SECP256K1 credential type
45
+ exports.STAKE_OUTPUT_TYPE = 'stake'; // Stake output type
46
+ exports.CREDENTIAL_VERSION = '1.0.0'; // Credential version
47
+ // Default values and thresholds
48
+ exports.EMPTY_STRING = ''; // Empty string default
49
+ exports.ZERO_BIGINT = 0n; // Zero BigInt default
50
+ exports.ZERO_NUMBER = 0; // Zero number default
51
+ exports.DEFAULT_THRESHOLD = 1; // Default signature threshold
52
+ exports.DEFAULT_LOCKTIME = 0n; // Default locktime
53
+ exports.MEMO_BUFFER_SIZE = 0; // Empty memo buffer size
54
+ exports.FIRST_ADDRESS_INDEX = 0; // First address index
14
55
  // Regex patterns
15
56
  exports.ADDRESS_REGEX = /^(^P||NodeID)-[a-zA-Z0-9]+$/;
16
57
  exports.HEX_REGEX = /^(0x){0,1}([0-9a-f])+$/i;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdFQUF3RTtBQUN4RSx3RkFBd0Y7OztBQUUzRSxRQUFBLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztBQUN6RSxRQUFBLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDLG1EQUFtRDtBQUM5RSxRQUFBLDRCQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztBQUN2RSxRQUFBLDhCQUE4QixHQUFHLEdBQUcsQ0FBQyxDQUFDLHNDQUFzQztBQUM1RSxRQUFBLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtBQUNwRCxRQUFBLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztBQUN2RSxRQUFBLDZCQUE2QixHQUFHLElBQUksQ0FBQztBQUNyQyxRQUFBLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztBQUU3RSxpQkFBaUI7QUFDSixRQUFBLGFBQWEsR0FBRyw2QkFBNkIsQ0FBQztBQUM5QyxRQUFBLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoYXJlZCBjb25zdGFudHMgZm9yIEZsYXJlIFAtQ2hhaW4gKGZscnApIHV0aWxpdGllcyBhbmQga2V5IGhhbmRsaW5nLlxuLy8gQ2VudHJhbGl6aW5nIGF2b2lkcyBtYWdpYyBudW1iZXJzIHNjYXR0ZXJlZCBhY3Jvc3MgdXRpbHMgYW5kIGtleVBhaXIgaW1wbGVtZW50YXRpb25zLlxuXG5leHBvcnQgY29uc3QgREVDT0RFRF9CTE9DS19JRF9MRU5HVEggPSAzNjsgLy8gRXhwZWN0ZWQgZGVjb2RlZCBibG9jayBpZGVudGlmaWVyIGxlbmd0aFxuZXhwb3J0IGNvbnN0IFNIT1JUX1BVQl9LRVlfTEVOR1RIID0gNTA7IC8vIFBsYWNlaG9sZGVyIChwb3RlbnRpYWwgQ0I1OCBlbmNvZGVkIGZvcm0gbGVuZ3RoKVxuZXhwb3J0IGNvbnN0IENPTVBSRVNTRURfUFVCTElDX0tFWV9MRU5HVEggPSA2NjsgLy8gMzMgYnl0ZXMgKGNvbXByZXNzZWQpIGhleCBlbmNvZGVkXG5leHBvcnQgY29uc3QgVU5DT01QUkVTU0VEX1BVQkxJQ19LRVlfTEVOR1RIID0gMTMwOyAvLyA2NSBieXRlcyAodW5jb21wcmVzc2VkKSBoZXggZW5jb2RlZFxuZXhwb3J0IGNvbnN0IFJBV19QUklWQVRFX0tFWV9MRU5HVEggPSA2NDsgLy8gMzIgYnl0ZXMgaGV4IGVuY29kZWRcbmV4cG9ydCBjb25zdCBTVUZGSVhFRF9QUklWQVRFX0tFWV9MRU5HVEggPSA2NjsgLy8gMzIgYnl0ZXMgKyBjb21wcmVzc2lvbiBmbGFnIHN1ZmZpeFxuZXhwb3J0IGNvbnN0IFBSSVZBVEVfS0VZX0NPTVBSRVNTRURfU1VGRklYID0gJzAxJztcbmV4cG9ydCBjb25zdCBPVVRQVVRfSU5ERVhfSEVYX0xFTkdUSCA9IDg7IC8vIDQgYnl0ZXMgc2VyaWFsaXplZCB0byBoZXggbGVuZ3RoXG5cbi8vIFJlZ2V4IHBhdHRlcm5zXG5leHBvcnQgY29uc3QgQUREUkVTU19SRUdFWCA9IC9eKF5QfHxOb2RlSUQpLVthLXpBLVowLTldKyQvO1xuZXhwb3J0IGNvbnN0IEhFWF9SRUdFWCA9IC9eKDB4KXswLDF9KFswLTlhLWZdKSskL2k7XG4iXX0=
58
+ // Hex pattern components for building dynamic regexes
59
+ exports.HEX_CHAR_PATTERN = '[0-9a-fA-F]';
60
+ exports.HEX_PATTERN_NO_PREFIX = `^${exports.HEX_CHAR_PATTERN}*$`;
61
+ exports.HEX_PATTERN_WITH_PREFIX = `^0x${exports.HEX_CHAR_PATTERN}`;
62
+ // Network and buffer constants
63
+ exports.DEFAULT_NETWORK_ID = 0; // Default network ID
64
+ exports.FLARE_MAINNET_NETWORK_ID = 1; // Flare mainnet network ID
65
+ exports.FLARE_TESTNET_NETWORK_ID = 5; // Flare testnet network ID
66
+ exports.EMPTY_BUFFER_SIZE = 0; // Empty buffer allocation size
67
+ exports.HEX_PREFIX = '0x'; // Hex prefix
68
+ exports.HEX_PREFIX_LENGTH = 2; // Length of hex prefix
69
+ exports.DECIMAL_RADIX = 10; // Decimal radix for parseInt
70
+ exports.SIGNING_METHOD = 'secp256k1'; // Default signing method
71
+ exports.AMOUNT_STRING_ZERO = '0'; // Zero amount as string
72
+ exports.FIRST_ARRAY_INDEX = 0; // First array index
73
+ exports.MAINNET_TYPE = 'mainnet'; // Mainnet type string
74
+ // Transaction type constants for export
75
+ exports.EXPORT_TRANSACTION_TYPE = 'PlatformVM.ExportTx'; // Export transaction type
76
+ // Error messages
77
+ exports.ERROR_AMOUNT_POSITIVE = 'Amount must be positive';
78
+ exports.ERROR_CREDENTIALS_ARRAY = 'Credentials must be an array';
79
+ exports.ERROR_UTXOS_REQUIRED = 'UTXOs are required for creating inputs and outputs';
80
+ exports.ERROR_SIGNATURES_ARRAY = 'Signatures must be an array';
81
+ exports.ERROR_SIGNATURES_EMPTY = 'Signatures array cannot be empty';
82
+ exports.ERROR_INVALID_PRIVATE_KEY = 'Invalid private key format';
83
+ exports.ERROR_UTXOS_REQUIRED_BUILD = 'UTXOs are required for transaction building';
84
+ exports.ERROR_ENHANCED_BUILD_FAILED = 'Enhanced FlareJS transaction building failed';
85
+ exports.ERROR_ENHANCED_PARSE_FAILED = 'Enhanced FlareJS transaction parsing failed';
86
+ exports.ERROR_FLAREJS_SIGNING_FAILED = 'FlareJS signing failed';
87
+ exports.ERROR_CREATE_CREDENTIAL_FAILED = 'Failed to create credential';
88
+ exports.ERROR_UNKNOWN = 'unknown error';
89
+ exports.ERROR_EXPORT_NOT_IMPLEMENTED = 'Flare P-chain export transaction build not implemented';
90
+ exports.ERROR_DESTINATION_CHAIN_REQUIRED = 'Destination chain ID must be set for P-chain export';
91
+ exports.ERROR_SOURCE_ADDRESSES_REQUIRED = 'Source addresses must be set for P-chain export';
92
+ exports.ERROR_DESTINATION_ADDRESSES_REQUIRED = 'Destination addresses must be set for P-chain export';
93
+ exports.ERROR_EXPORT_AMOUNT_POSITIVE = 'Export amount must be positive';
94
+ exports.ERROR_TRANSACTION_REQUIRED = 'Transaction is required for initialization';
95
+ exports.ERROR_BLOCKCHAIN_ID_MISMATCH = 'Blockchain ID mismatch';
96
+ exports.ERROR_TRANSACTION_PARSE_FAILED = 'Transaction cannot be parsed or has an unsupported transaction type';
97
+ exports.ERROR_FAILED_INITIALIZE_BUILDER = 'Failed to initialize builder from transaction';
98
+ // Type checking constants
99
+ exports.OBJECT_TYPE_STRING = 'object'; // Object type string for typeof checks
100
+ exports.STRING_TYPE = 'string'; // String type for typeof checks
101
+ exports.NUMBER_TYPE = 'number'; // Number type for typeof checks
102
+ exports.FUNCTION_TYPE = 'function'; // Function type for typeof checks
103
+ exports.BIGINT_TYPE = 'bigint'; // BigInt type for typeof checks
104
+ exports.HEX_ENCODING = 'hex'; // Hex encoding string
105
+ exports.UTF8_ENCODING = 'utf8'; // UTF8 encoding string
106
+ // Chain identifiers
107
+ exports.P_CHAIN = 'P'; // P-chain identifier
108
+ exports.C_CHAIN = 'C'; // C-chain identifier
109
+ exports.X_CHAIN = 'X'; // X-chain identifier
110
+ exports.P_CHAIN_FULL = 'P-chain'; // P-chain full name
111
+ exports.C_CHAIN_FULL = 'C-chain'; // C-chain full name
112
+ exports.X_CHAIN_FULL = 'X-chain'; // X-chain full name
113
+ exports.CHAIN_SUFFIX = '-chain'; // Chain name suffix
114
+ // Atomic transaction prefixes
115
+ exports.FLARE_ATOMIC_PREFIX = 'flare-atomic-'; // Prefix for atomic transaction IDs
116
+ exports.FLARE_ATOMIC_PARSED_PREFIX = 'flare-atomic-parsed-'; // Prefix for parsed transaction IDs
117
+ // Placeholder values
118
+ exports.FLARE_ADDRESS_PLACEHOLDER = 'flare-address-placeholder'; // Placeholder for address conversion
119
+ exports.ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; // Zero address
120
+ exports.HEX_PREFIX_REMOVE = '0x'; // Hex prefix to remove
121
+ exports.PADSTART_CHAR = '0'; // Character used for padding
122
+ // FlareJS transaction types
123
+ exports.PLATFORM_VM_IMPORT_TX = 'PlatformVM.ImportTx'; // Platform VM import transaction
124
+ exports.PLATFORM_VM_ADD_VALIDATOR_TX = 'PlatformVM.AddValidatorTx'; // Platform VM add validator transaction
125
+ exports.IMPORT_TX_TYPE = 'ImportTx'; // Import transaction type
126
+ exports.P_CHAIN_IMPORT_TYPE = 'P-chain-import'; // P-chain import type
127
+ // Transaction types and values
128
+ exports.IMPORT_TYPE = 'import'; // Import transaction type
129
+ exports.EXPORT_TYPE = 'export'; // Export transaction type
130
+ exports.SEND_TYPE = 'send'; // Send transaction type
131
+ exports.IMPORT_C_TYPE = 'import-c'; // Import C-chain transaction type
132
+ exports.VALIDATOR_TYPE = 'validator'; // Validator type
133
+ exports.ADDVALIDATOR_TYPE = 'addValidator'; // Add validator type
134
+ exports.ADD_VALIDATOR_TX_TYPE = 'AddValidatorTx'; // Add validator transaction type
135
+ // Validator transaction type arrays
136
+ exports.VALIDATOR_TRANSACTION_TYPES = [
137
+ exports.PLATFORM_VM_ADD_VALIDATOR_TX,
138
+ exports.ADD_VALIDATOR_TX_TYPE,
139
+ exports.ADDVALIDATOR_TYPE,
140
+ exports.VALIDATOR_TYPE,
141
+ ]; // Valid validator transaction types
142
+ // Transfer types
143
+ exports.TRANSFERABLE_INPUT_TYPE = 'TransferableInput'; // Transferable input type
144
+ exports.CREDENTIAL_TYPE = 'Credential'; // Credential type
145
+ exports.SECP256K1_TRANSFER_INPUT_TYPE = 'secp256k1fx.TransferInput'; // SECP256K1 transfer input type
146
+ exports.SECP256K1_TRANSFER_OUTPUT_TYPE = 'secp256k1fx.TransferOutput'; // SECP256K1 transfer output type
147
+ // Property names for object checks
148
+ exports.DESTINATION_CHAIN_PROP = 'destinationChain'; // Destination chain property
149
+ exports.DESTINATION_CHAIN_ID_PROP = 'destinationChainID'; // Destination chain ID property
150
+ exports.EXPORTED_OUTPUTS_PROP = 'exportedOutputs'; // Exported outputs property
151
+ exports.OUTS_PROP = 'outs'; // Outputs property short name
152
+ exports.INPUTS_PROP = 'inputs'; // Inputs property
153
+ exports.INS_PROP = 'ins'; // Inputs property short name
154
+ exports.NETWORK_ID_PROP = 'networkID'; // Network ID property
155
+ exports.NETWORK_ID_PROP_ALT = 'networkId'; // Alternative network ID property
156
+ exports.BLOCKCHAIN_ID_PROP = 'blockchainID'; // Blockchain ID property
157
+ exports.GET_OUTPUT_METHOD = 'getOutput'; // Get output method name
158
+ // UTXO field names
159
+ exports.OUTPUT_ID_FIELD = 'outputID'; // Output ID field
160
+ exports.AMOUNT_FIELD = 'amount'; // Amount field
161
+ exports.TXID_FIELD = 'txid'; // Transaction ID field
162
+ exports.OUTPUT_IDX_FIELD = 'outputidx'; // Output index field
163
+ // Transaction explanation field names
164
+ exports.ID_FIELD = 'id'; // ID field name
165
+ exports.OUTPUT_AMOUNT_FIELD = 'outputAmount'; // Output amount field
166
+ exports.CHANGE_AMOUNT_FIELD = 'changeAmount'; // Change amount field
167
+ exports.OUTPUTS_FIELD = 'outputs'; // Outputs field
168
+ exports.CHANGE_OUTPUTS_FIELD = 'changeOutputs'; // Change outputs field
169
+ exports.FEE_FIELD = 'fee'; // Fee field
170
+ exports.TYPE_FIELD = 'type'; // Type field
171
+ // Signature and hash methods
172
+ exports.SECP256K1_SIG_TYPE = 'secp256k1'; // SECP256K1 signature type
173
+ exports.DER_FORMAT = 'der'; // DER format
174
+ exports.SHA256_HASH = 'sha256'; // SHA256 hash function
175
+ exports.RECOVERY_KEY_METHOD = 'recovery-key'; // Recovery key signing method
176
+ exports.NORMAL_MODE = 'normal'; // Normal mode
177
+ exports.RECOVERY_MODE = 'recovery'; // Recovery mode
178
+ // Version strings
179
+ exports.RECOVERY_VERSION = '1.0.0'; // Recovery version
180
+ exports.SIGNATURE_VERSION = '1.0.0'; // Signature version
181
+ // Numeric radix
182
+ exports.HEX_RADIX = 16; // Hexadecimal radix
183
+ // Transaction type identifiers (additional)
184
+ exports.ADD_PERMISSIONLESS_VALIDATOR_TYPE = 'addPermissionlessValidator'; // Add permissionless validator type
185
+ // Display order for transaction explanations
186
+ exports.DISPLAY_ORDER_BASE = [
187
+ 'id',
188
+ 'inputs',
189
+ 'outputAmount',
190
+ 'changeAmount',
191
+ 'outputs',
192
+ 'changeOutputs',
193
+ 'fee',
194
+ 'type',
195
+ ]; // Base display order
196
+ exports.MEMO_FIELD = 'memo'; // Memo field name
197
+ exports.REWARD_ADDRESSES_FIELD = 'rewardAddresses'; // Reward addresses field
198
+ exports.SOURCE_CHAIN_FIELD = 'sourceChain'; // Source chain field
199
+ exports.DESTINATION_CHAIN_FIELD = 'destinationChain'; // Destination chain field
200
+ // Asset and network constants
201
+ exports.FLR_ASSET_ID = 'FLR'; // Default FLR asset ID
202
+ // Placeholder constants for development
203
+ exports.FLARE_TX_HEX_PLACEHOLDER = 'flare-tx-hex-placeholder'; // Transaction hex placeholder
204
+ exports.FLARE_SIGNABLE_PAYLOAD = 'flare-signable-payload'; // Signable payload placeholder
205
+ exports.FLARE_TRANSACTION_ID_PLACEHOLDER = 'flare-transaction-id-placeholder'; // Transaction ID placeholder
206
+ exports.PLACEHOLDER_NODE_ID = 'placeholder-node-id'; // Node ID placeholder
207
+ // Chain identifiers (short forms)
208
+ exports.P_CHAIN_SHORT = 'P'; // P-chain short name
209
+ exports.X_CHAIN_SHORT = 'X'; // X-chain short name
210
+ // Valid source chains for imports
211
+ exports.VALID_IMPORT_SOURCE_CHAINS = [exports.P_CHAIN_SHORT, exports.P_CHAIN_FULL, exports.X_CHAIN_SHORT, exports.X_CHAIN_FULL]; // Valid source chains for C-chain imports
212
+ // Valid P-chain import types
213
+ exports.VALID_P_CHAIN_IMPORT_TYPES = [exports.PLATFORM_VM_IMPORT_TX, exports.IMPORT_TX_TYPE, exports.IMPORT_TYPE, exports.P_CHAIN_IMPORT_TYPE]; // Valid P-chain import types
214
+ // Error messages for transactionBuilder
215
+ exports.ERROR_NETWORK_ID_MISMATCH = 'Network ID mismatch'; // Network ID validation error
216
+ exports.ERROR_BLOCKCHAIN_ID_MISMATCH_BUILDER = 'Blockchain ID mismatch'; // Blockchain ID validation error
217
+ exports.ERROR_INVALID_THRESHOLD = 'Invalid transaction: threshold must be set to 2'; // Threshold validation error
218
+ exports.ERROR_INVALID_LOCKTIME = 'Invalid transaction: locktime must be 0 or higher'; // Locktime validation error
219
+ exports.ERROR_UTXOS_EMPTY_ARRAY = "Utxos can't be empty array"; // Empty UTXOS array error
220
+ exports.ERROR_UTXOS_MISSING_FIELD = 'Utxos required'; // Missing UTXO field error
221
+ exports.ERROR_FROM_ADDRESSES_REQUIRED = 'from addresses are required'; // Missing from addresses error
222
+ exports.ERROR_UTXOS_REQUIRED_BUILDER = 'utxos are required'; // Missing UTXOs error
223
+ exports.ERROR_PARSE_RAW_TRANSACTION = 'Failed to parse raw transaction'; // Raw transaction parsing error
224
+ exports.ERROR_UNKNOWN_PARSING = 'Unknown error'; // Unknown parsing error
225
+ // UTXO field validation
226
+ exports.UTXO_REQUIRED_FIELDS = ['outputID', 'amount', 'txid', 'outputidx']; // Required UTXO fields
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdFQUF3RTtBQUN4RSx3RkFBd0Y7Ozs7OztBQUUzRSxRQUFBLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztBQUN6RSxRQUFBLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDLG1EQUFtRDtBQUM5RSxRQUFBLDRCQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztBQUN2RSxRQUFBLDhCQUE4QixHQUFHLEdBQUcsQ0FBQyxDQUFDLHNDQUFzQztBQUM1RSxRQUFBLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtBQUNwRCxRQUFBLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztBQUN2RSxRQUFBLDZCQUE2QixHQUFHLElBQUksQ0FBQztBQUNyQyxRQUFBLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztBQUU3RSxrQ0FBa0M7QUFDckIsUUFBQSxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUMsOERBQThEO0FBQ3BGLFFBQUEseUJBQXlCLEdBQUcsRUFBRSxDQUFDLENBQUMscURBQXFEO0FBQ3JGLFFBQUEsc0JBQXNCLEdBQUcsRUFBRSxDQUFDLENBQUMsa0RBQWtEO0FBQy9FLFFBQUEsMEJBQTBCLEdBQUcsRUFBRSxDQUFDLENBQUMsc0NBQXNDO0FBQ3ZFLFFBQUEsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDLENBQUMsMkRBQTJEO0FBQ2xHLFFBQUEsa0NBQWtDLEdBQUcsR0FBRyxDQUFDLENBQUMsNkRBQTZEO0FBQ3ZHLFFBQUEsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLENBQUMsb0RBQW9EO0FBQ2hGLFFBQUEsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLENBQUMsK0NBQStDO0FBQ3pFLFFBQUEsbUJBQW1CLEdBQUcsR0FBRyxDQUFD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QUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hhcmVkIGNvbnN0YW50cyBmb3IgRmxhcmUgUC1DaGFpbiAoZmxycCkgdXRpbGl0aWVzIGFuZCBrZXkgaGFuZGxpbmcuXG4vLyBDZW50cmFsaXppbmcgYXZvaWRzIG1hZ2ljIG51bWJlcnMgc2NhdHRlcmVkIGFjcm9zcyB1dGlscyBhbmQga2V5UGFpciBpbXBsZW1lbnRhdGlvbnMuXG5cbmV4cG9ydCBjb25zdCBERUNPREVEX0JMT0NLX0lEX0xFTkdUSCA9IDMyOyAvLyBFeHBlY3RlZCBkZWNvZGVkIGJsb2NrIGlkZW50aWZpZXIgbGVuZ3RoXG5leHBvcnQgY29uc3QgU0hPUlRfUFVCX0tFWV9MRU5HVEggPSA1MDsgLy8gUGxhY2Vob2xkZXIgKHBvdGVudGlhbCBDQjU4IGVuY29kZWQgZm9ybSBsZW5ndGgpXG5leHBvcnQgY29uc3QgQ09NUFJFU1NFRF9QVUJMSUNfS0VZX0xFTkdUSCA9IDY2OyAvLyAzMyBieXRlcyAoY29tcHJlc3NlZCkgaGV4IGVuY29kZWRcbmV4cG9ydCBjb25zdCBVTkNPTVBSRVNTRURfUFVCTElDX0tFWV9MRU5HVEggPSAxMzA7IC8vIDY1IGJ5dGVzICh1bmNvbXByZXNzZWQpIGhleCBlbmNvZGVkXG5leHBvcnQgY29uc3QgUkFXX1BSSVZBVEVfS0VZX0xFTkdUSCA9IDY0OyAvLyAzMiBieXRlcyBoZXggZW5jb2RlZFxuZXhwb3J0IGNvbnN0IFNVRkZJWEVEX1BSSVZBVEVfS0VZX0xFTkdUSCA9IDY2OyAvLyAzMiBieXRlcyArIGNvbXByZXNzaW9uIGZsYWcgc3VmZml4XG5leHBvcnQgY29uc3QgUFJJVkFURV9LRVlfQ09NUFJFU1NFRF9TVUZGSVggPSAnMDEnO1xuZXhwb3J0IGNvbnN0IE9VVFBVVF9JTkRFWF9IRVhfTEVOR1RIID0gODsgLy8gNCBieXRlcyBzZXJpYWxpemVkIHRvIGhleCBsZW5ndGhcblxuLy8gQXNzZXQgYW5kIHRyYW5zYWN0aW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IEFTU0VUX0lEX0xFTkdUSCA9IDMyOyAvLyBBc3NldCBJRCBsZW5ndGggaW4gYnl0ZXMgKHN0YW5kYXJkIGZvciBBVkFYL0ZsYXJlIG5ldHdvcmtzKVxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX0lEX0hFWF9MRU5HVEggPSA2NDsgLy8gVHJhbnNhY3Rpb24gSUQgbGVuZ3RoIGluIGhleCBjaGFyYWN0ZXJzICgzMiBieXRlcylcbmV4cG9ydCBjb25zdCBQUklWQVRFX0tFWV9IRVhfTEVOR1RIID0gNjQ7IC8vIFByaXZhdGUga2V5IGxlbmd0aCBpbiBoZXggY2hhcmFjdGVycyAoMzIgYnl0ZXMpXG5leHBvcnQgY29uc3QgU0VDUDI1NksxX1NJR05BVFVSRV9MRU5HVEggPSA2NTsgLy8gU0VDUDI1NksxIHNpZ25hdHVyZSBsZW5ndGggaW4gYnl0ZXNcbmV4cG9ydCBjb25zdCBCTFNfUFVCTElDX0tFWV9DT01QUkVTU0VEX0xFTkdUSCA9IDk2OyAvLyBCTFMgcHVibGljIGtleSBjb21wcmVzc2VkIGxlbmd0aCBpbiBoZXggY2hhcnMgKDQ4IGJ5dGVzKVxuZXhwb3J0IGNvbnN0IEJMU19QVUJMSUNfS0VZX1VOQ09NUFJFU1NFRF9MRU5HVEggPSAxOTI7IC8vIEJMUyBwdWJsaWMga2V5IHVuY29tcHJlc3NlZCBsZW5ndGggaW4gaGV4IGNoYXJzICg5NiBieXRlcylcbmV4cG9ydCBjb25zdCBCTFNfU0lHTkFUVVJFX0xFTkdUSCA9IDE5MjsgLy8gQkxTIHNpZ25hdHVyZSBsZW5ndGggaW4gaGV4IGNoYXJhY3RlcnMgKDk2IGJ5dGVzKVxuZXhwb3J0IGNvbnN0IENIQUlOX0lEX0hFWF9MRU5HVEggPSA2NDsgLy8gQ2hhaW4gSUQgbGVuZ3RoIGluIGhleCBjaGFyYWN0ZXJzICgzMiBieXRlcylcbmV4cG9ydCBjb25zdCBNQVhfQ0hBSU5fSURfTEVOR1RIID0gMTI4OyAvLyBNYXhpbXVtIGNoYWluIElEIHN0cmluZyBsZW5ndGhcblxuLy8gRmVlIGNvbnN0YW50cyAoaW4gbmFub0ZMUilcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfRkVFID0gJzEwMDAwMDAnOyAvLyAxTSBuYW5vRkxSIGRlZmF1bHQgYmFzZSBmZWVcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VWTV9HQVNfRkVFID0gJzIxMDAwJzsgLy8gU3RhbmRhcmQgRVZNIHRyYW5zZmVyIGdhcyBmZWVcbmV4cG9ydCBjb25zdCBJTlBVVF9GRUUgPSAnMTAwMDAwJzsgLy8gMTAwSyBuYW5vRkxSIHBlciBpbnB1dCAoRmxhcmVKUyBzdGFuZGFyZClcbmV4cG9ydCBjb25zdCBPVVRQVVRfRkVFID0gJzUwMDAwJzsgLy8gNTBLIG5hbm9GTFIgcGVyIG91dHB1dCAoRmxhcmVKUyBzdGFuZGFyZClcbmV4cG9ydCBjb25zdCBNSU5JTVVNX0ZFRSA9ICcxMDAwMDAwJzsgLy8gMU0gbmFub0ZMUiBtaW5pbXVtIGZlZVxuXG4vLyBWYWxpZGF0b3IgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgTUlOX0RFTEVHQVRJT05fRkVFX0JBU0lTX1BPSU5UUyA9IDIwMDAwOyAvLyAyJSBtaW5pbXVtIGRlbGVnYXRpb24gZmVlXG5leHBvcnQgY29uc3QgQkFTSVNfUE9JTlRTX0RJVklTT1IgPSAxMDAwMDsgLy8gRGl2aXNvciB0byBjb252ZXJ0IGJhc2lzIHBvaW50cyB0byBkZWNpbWFsXG5leHBvcnQgY29uc3QgUEVSQ0VOVEFHRV9NVUxUSVBMSUVSID0gMTAwOyAvLyBNdWx0aXBsaWVyIHRvIGNvbnZlcnQgZGVjaW1hbCB0byBwZXJjZW50YWdlXG5cbi8vIFRyYW5zYWN0aW9uIElEIHByZWZpeFxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX0lEX1BSRUZJWCA9ICdmbGFyZS1hdG9taWMtdHgtJzsgLy8gUHJlZml4IGZvciB0cmFuc2FjdGlvbiBJRHNcblxuLy8gVHJhbnNhY3Rpb24gdHlwZSBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBERUxFR0FUT1JfVFJBTlNBQ1RJT05fVFlQRSA9ICdQbGF0Zm9ybVZNLkFkZERlbGVnYXRvclR4JzsgLy8gRGVsZWdhdG9yIHRyYW5zYWN0aW9uIHR5cGVcblxuLy8gRGVsZWdhdG9yIHR5cGUgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgUFJJTUFSWV9ERUxFR0FUT1JfVFlQRSA9ICdwcmltYXJ5JzsgLy8gUHJpbWFyeSBkZWxlZ2F0b3IgdHlwZVxuZXhwb3J0IGNvbnN0IERFTEVHQVRPUl9TVEFLRV9UWVBFID0gJ2RlbGVnYXRvcic7IC8vIERlbGVnYXRvciBzdGFrZSB0eXBlXG5leHBvcnQgY29uc3QgU0VDUDI1NksxX0NSRURFTlRJQUxfVFlQRSA9ICdzZWNwMjU2azFmeC5DcmVkZW50aWFsJzsgLy8gU0VDUDI1NksxIGNyZWRlbnRpYWwgdHlwZVxuZXhwb3J0IGNvbnN0IFNUQUtFX09VVFBVVF9UWVBFID0gJ3N0YWtlJzsgLy8gU3Rha2Ugb3V0cHV0IHR5cGVcbmV4cG9ydCBjb25zdCBDUkVERU5USUFMX1ZFUlNJT04gPSAnMS4wLjAnOyAvLyBDcmVkZW50aWFsIHZlcnNpb25cblxuLy8gRGVmYXVsdCB2YWx1ZXMgYW5kIHRocmVzaG9sZHNcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSAnJzsgLy8gRW1wdHkgc3RyaW5nIGRlZmF1bHRcbmV4cG9ydCBjb25zdCBaRVJPX0JJR0lOVCA9IDBuOyAvLyBaZXJvIEJpZ0ludCBkZWZhdWx0XG5leHBvcnQgY29uc3QgWkVST19OVU1CRVIgPSAwOyAvLyBaZXJvIG51bWJlciBkZWZhdWx0XG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJFU0hPTEQgPSAxOyAvLyBEZWZhdWx0IHNpZ25hdHVyZSB0aHJlc2hvbGRcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQ0tUSU1FID0gMG47IC8vIERlZmF1bHQgbG9ja3RpbWVcbmV4cG9ydCBjb25zdCBNRU1PX0JVRkZFUl9TSVpFID0gMDsgLy8gRW1wdHkgbWVtbyBidWZmZXIgc2l6ZVxuZXhwb3J0IGNvbnN0IEZJUlNUX0FERFJFU1NfSU5ERVggPSAwOyAvLyBGaXJzdCBhZGRyZXNzIGluZGV4XG5cbi8vIFJlZ2V4IHBhdHRlcm5zXG5leHBvcnQgY29uc3QgQUREUkVTU19SRUdFWCA9IC9eKF5QfHxOb2RlSUQpLVthLXpBLVowLTldKyQvO1xuZXhwb3J0IGNvbnN0IEhFWF9SRUdFWCA9IC9eKDB4KXswLDF9KFswLTlhLWZdKSskL2k7XG5cbi8vIEhleCBwYXR0ZXJuIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIGR5bmFtaWMgcmVnZXhlc1xuZXhwb3J0IGNvbnN0IEhFWF9DSEFSX1BBVFRFUk4gPSAnWzAtOWEtZkEtRl0nO1xuZXhwb3J0IGNvbnN0IEhFWF9QQVRURVJOX05PX1BSRUZJWCA9IGBeJHtIRVhfQ0hBUl9QQVRURVJOfSokYDtcbmV4cG9ydCBjb25zdCBIRVhfUEFUVEVSTl9XSVRIX1BSRUZJWCA9IGBeMHgke0hFWF9DSEFSX1BBVFRFUk59YDtcblxuLy8gTmV0d29yayBhbmQgYnVmZmVyIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkVUV09SS19JRCA9IDA7IC8vIERlZmF1bHQgbmV0d29yayBJRFxuZXhwb3J0IGNvbnN0IEZMQVJFX01BSU5ORVRfTkVUV09SS19JRCA9IDE7IC8vIEZsYXJlIG1haW5uZXQgbmV0d29yayBJRFxuZXhwb3J0IGNvbnN0IEZMQVJFX1RFU1RORVRfTkVUV09SS19JRCA9IDU7IC8vIEZsYXJlIHRlc3RuZXQgbmV0d29yayBJRFxuZXhwb3J0IGNvbnN0IEVNUFRZX0JVRkZFUl9TSVpFID0gMDsgLy8gRW1wdHkgYnVmZmVyIGFsbG9jYXRpb24gc2l6ZVxuZXhwb3J0IGNvbnN0IEhFWF9QUkVGSVggPSAnMHgnOyAvLyBIZXggcHJlZml4XG5leHBvcnQgY29uc3QgSEVYX1BSRUZJWF9MRU5HVEggPSAyOyAvLyBMZW5ndGggb2YgaGV4IHByZWZpeFxuZXhwb3J0IGNvbnN0IERFQ0lNQUxfUkFESVggPSAxMDsgLy8gRGVjaW1hbCByYWRpeCBmb3IgcGFyc2VJbnRcbmV4cG9ydCBjb25zdCBTSUdOSU5HX01FVEhPRCA9ICdzZWNwMjU2azEnOyAvLyBEZWZhdWx0IHNpZ25pbmcgbWV0aG9kXG5leHBvcnQgY29uc3QgQU1PVU5UX1NUUklOR19aRVJPID0gJzAnOyAvLyBaZXJvIGFtb3VudCBhcyBzdHJpbmdcbmV4cG9ydCBjb25zdCBGSVJTVF9BUlJBWV9JTkRFWCA9IDA7IC8vIEZpcnN0IGFycmF5IGluZGV4XG5leHBvcnQgY29uc3QgTUFJTk5FVF9UWVBFID0gJ21haW5uZXQnOyAvLyBNYWlubmV0IHR5cGUgc3RyaW5nXG5cbi8vIFRyYW5zYWN0aW9uIHR5cGUgY29uc3RhbnRzIGZvciBleHBvcnRcbmV4cG9ydCBjb25zdCBFWFBPUlRfVFJBTlNBQ1RJT05fVFlQRSA9ICdQbGF0Zm9ybVZNLkV4cG9ydFR4JzsgLy8gRXhwb3J0IHRyYW5zYWN0aW9uIHR5cGVcblxuLy8gRXJyb3IgbWVzc2FnZXNcbmV4cG9ydCBjb25zdCBFUlJPUl9BTU9VTlRfUE9TSVRJVkUgPSAnQW1vdW50IG11c3QgYmUgcG9zaXRpdmUnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NSRURFTlRJQUxTX0FSUkFZID0gJ0NyZWRlbnRpYWxzIG11c3QgYmUgYW4gYXJyYXknO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VUWE9TX1JFUVVJUkVEID0gJ1VUWE9zIGFyZSByZXF1aXJlZCBmb3IgY3JlYXRpbmcgaW5wdXRzIGFuZCBvdXRwdXRzJztcbmV4cG9ydCBjb25zdCBFUlJPUl9TSUdOQVRVUkVTX0FSUkFZID0gJ1NpZ25hdHVyZXMgbXVzdCBiZSBhbiBhcnJheSc7XG5leHBvcnQgY29uc3QgRVJST1JfU0lHTkFUVVJFU19FTVBUWSA9ICdTaWduYXR1cmVzIGFycmF5IGNhbm5vdCBiZSBlbXB0eSc7XG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QUklWQVRFX0tFWSA9ICdJbnZhbGlkIHByaXZhdGUga2V5IGZvcm1hdCc7XG5leHBvcnQgY29uc3QgRVJST1JfVVRYT1NfUkVRVUlSRURfQlVJTEQgPSAnVVRYT3MgYXJlIHJlcXVpcmVkIGZvciB0cmFuc2FjdGlvbiBidWlsZGluZyc7XG5leHBvcnQgY29uc3QgRVJST1JfRU5IQU5DRURfQlVJTERfRkFJTEVEID0gJ0VuaGFuY2VkIEZsYXJlSlMgdHJhbnNhY3Rpb24gYnVpbGRpbmcgZmFpbGVkJztcbmV4cG9ydCBjb25zdCBFUlJPUl9FTkhBTkNFRF9QQVJTRV9GQUlMRUQgPSAnRW5oYW5jZWQgRmxhcmVKUyB0cmFuc2FjdGlvbiBwYXJzaW5nIGZhaWxlZCc7XG5leHBvcnQgY29uc3QgRVJST1JfRkxBUkVKU19TSUdOSU5HX0ZBSUxFRCA9ICdGbGFyZUpTIHNpZ25pbmcgZmFpbGVkJztcbmV4cG9ydCBjb25zdCBFUlJPUl9DUkVBVEVfQ1JFREVOVElBTF9GQUlMRUQgPSAnRmFpbGVkIHRvIGNyZWF0ZSBjcmVkZW50aWFsJztcbmV4cG9ydCBjb25zdCBFUlJPUl9VTktOT1dOID0gJ3Vua25vd24gZXJyb3InO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VYUE9SVF9OT1RfSU1QTEVNRU5URUQgPSAnRmxhcmUgUC1jaGFpbiBleHBvcnQgdHJhbnNhY3Rpb24gYnVpbGQgbm90IGltcGxlbWVudGVkJztcbmV4cG9ydCBjb25zdCBFUlJPUl9ERVNUSU5BVElPTl9DSEFJTl9SRVFVSVJFRCA9ICdEZXN0aW5hdGlvbiBjaGFpbiBJRCBtdXN0IGJlIHNldCBmb3IgUC1jaGFpbiBleHBvcnQnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NPVVJDRV9BRERSRVNTRVNfUkVRVUlSRUQgPSAnU291cmNlIGFkZHJlc3NlcyBtdXN0IGJlIHNldCBmb3IgUC1jaGFpbiBleHBvcnQnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NFU19SRVFVSVJFRCA9ICdEZXN0aW5hdGlvbiBhZGRyZXNzZXMgbXVzdCBiZSBzZXQgZm9yIFAtY2hhaW4gZXhwb3J0JztcbmV4cG9ydCBjb25zdCBFUlJPUl9FWFBPUlRfQU1PVU5UX1BPU0lUSVZFID0gJ0V4cG9ydCBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSc7XG5leHBvcnQgY29uc3QgRVJST1JfVFJBTlNBQ1RJT05fUkVRVUlSRUQgPSAnVHJhbnNhY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGluaXRpYWxpemF0aW9uJztcbmV4cG9ydCBjb25zdCBFUlJPUl9CTE9DS0NIQUlOX0lEX01JU01BVENIID0gJ0Jsb2NrY2hhaW4gSUQgbWlzbWF0Y2gnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RSQU5TQUNUSU9OX1BBUlNFX0ZBSUxFRCA9ICdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJztcbmV4cG9ydCBjb25zdCBFUlJPUl9GQUlMRURfSU5JVElBTElaRV9CVUlMREVSID0gJ0ZhaWxlZCB0byBpbml0aWFsaXplIGJ1aWxkZXIgZnJvbSB0cmFuc2FjdGlvbic7XG5cbi8vIFR5cGUgY2hlY2tpbmcgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgT0JKRUNUX1RZUEVfU1RSSU5HID0gJ29iamVjdCc7IC8vIE9iamVjdCB0eXBlIHN0cmluZyBmb3IgdHlwZW9mIGNoZWNrc1xuZXhwb3J0IGNvbnN0IFNUUklOR19UWVBFID0gJ3N0cmluZyc7IC8vIFN0cmluZyB0eXBlIGZvciB0eXBlb2YgY2hlY2tzXG5leHBvcnQgY29uc3QgTlVNQkVSX1RZUEUgPSAnbnVtYmVyJzsgLy8gTnVtYmVyIHR5cGUgZm9yIHR5cGVvZiBjaGVja3NcbmV4cG9ydCBjb25zdCBGVU5DVElPTl9UWVBFID0gJ2Z1bmN0aW9uJzsgLy8gRnVuY3Rpb24gdHlwZSBmb3IgdHlwZW9mIGNoZWNrc1xuZXhwb3J0IGNvbnN0IEJJR0lOVF9UWVBFID0gJ2JpZ2ludCc7IC8vIEJpZ0ludCB0eXBlIGZvciB0eXBlb2YgY2hlY2tzXG5leHBvcnQgY29uc3QgSEVYX0VOQ09ESU5HID0gJ2hleCc7IC8vIEhleCBlbmNvZGluZyBzdHJpbmdcbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gJ3V0ZjgnOyAvLyBVVEY4IGVuY29kaW5nIHN0cmluZ1xuXG4vLyBDaGFpbiBpZGVudGlmaWVyc1xuZXhwb3J0IGNvbnN0IFBfQ0hBSU4gPSAnUCc7IC8vIFAtY2hhaW4gaWRlbnRpZmllclxuZXhwb3J0IGNvbnN0IENfQ0hBSU4gPSAnQyc7IC8vIEMtY2hhaW4gaWRlbnRpZmllclxuZXhwb3J0IGNvbnN0IFhfQ0hBSU4gPSAnWCc7IC8vIFgtY2hhaW4gaWRlbnRpZmllclxuZXhwb3J0IGNvbnN0IFBfQ0hBSU5fRlVMTCA9ICdQLWNoYWluJzsgLy8gUC1jaGFpbiBmdWxsIG5hbWVcbmV4cG9ydCBjb25zdCBDX0NIQUlOX0ZVTEwgPSAnQy1jaGFpbic7IC8vIEMtY2hhaW4gZnVsbCBuYW1lXG5leHBvcnQgY29uc3QgWF9DSEFJTl9GVUxMID0gJ1gtY2hhaW4nOyAvLyBYLWNoYWluIGZ1bGwgbmFtZVxuZXhwb3J0IGNvbnN0IENIQUlOX1NVRkZJWCA9ICctY2hhaW4nOyAvLyBDaGFpbiBuYW1lIHN1ZmZpeFxuXG4vLyBBdG9taWMgdHJhbnNhY3Rpb24gcHJlZml4ZXNcbmV4cG9ydCBjb25zdCBGTEFSRV9BVE9NSUNfUFJFRklYID0gJ2ZsYXJlLWF0b21pYy0nOyAvLyBQcmVmaXggZm9yIGF0b21pYyB0cmFuc2FjdGlvbiBJRHNcbmV4cG9ydCBjb25zdCBGTEFSRV9BVE9NSUNfUEFSU0VEX1BSRUZJWCA9ICdmbGFyZS1hdG9taWMtcGFyc2VkLSc7IC8vIFByZWZpeCBmb3IgcGFyc2VkIHRyYW5zYWN0aW9uIElEc1xuXG4vLyBQbGFjZWhvbGRlciB2YWx1ZXNcbmV4cG9ydCBjb25zdCBGTEFSRV9BRERSRVNTX1BMQUNFSE9MREVSID0gJ2ZsYXJlLWFkZHJlc3MtcGxhY2Vob2xkZXInOyAvLyBQbGFjZWhvbGRlciBmb3IgYWRkcmVzcyBjb252ZXJzaW9uXG5leHBvcnQgY29uc3QgWkVST19BRERSRVNTID0gJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIFplcm8gYWRkcmVzc1xuZXhwb3J0IGNvbnN0IEhFWF9QUkVGSVhfUkVNT1ZFID0gJzB4JzsgLy8gSGV4IHByZWZpeCB0byByZW1vdmVcbmV4cG9ydCBjb25zdCBQQURTVEFSVF9DSEFSID0gJzAnOyAvLyBDaGFyYWN0ZXIgdXNlZCBmb3IgcGFkZGluZ1xuXG4vLyBGbGFyZUpTIHRyYW5zYWN0aW9uIHR5cGVzXG5leHBvcnQgY29uc3QgUExBVEZPUk1fVk1fSU1QT1JUX1RYID0gJ1BsYXRmb3JtVk0uSW1wb3J0VHgnOyAvLyBQbGF0Zm9ybSBWTSBpbXBvcnQgdHJhbnNhY3Rpb25cbmV4cG9ydCBjb25zdCBQTEFURk9STV9WTV9BRERfVkFMSURBVE9SX1RYID0gJ1BsYXRmb3JtVk0uQWRkVmFsaWRhdG9yVHgnOyAvLyBQbGF0Zm9ybSBWTSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uXG5leHBvcnQgY29uc3QgSU1QT1JUX1RYX1RZUEUgPSAnSW1wb3J0VHgnOyAvLyBJbXBvcnQgdHJhbnNhY3Rpb24gdHlwZVxuZXhwb3J0IGNvbnN0IFBfQ0hBSU5fSU1QT1JUX1RZUEUgPSAnUC1jaGFpbi1pbXBvcnQnOyAvLyBQLWNoYWluIGltcG9ydCB0eXBlXG5cbi8vIFRyYW5zYWN0aW9uIHR5cGVzIGFuZCB2YWx1ZXNcbmV4cG9ydCBjb25zdCBJTVBPUlRfVFlQRSA9ICdpbXBvcnQnOyAvLyBJbXBvcnQgdHJhbnNhY3Rpb24gdHlwZVxuZXhwb3J0IGNvbnN0IEVYUE9SVF9UWVBFID0gJ2V4cG9ydCc7IC8vIEV4cG9ydCB0cmFuc2FjdGlvbiB0eXBlXG5leHBvcnQgY29uc3QgU0VORF9UWVBFID0gJ3NlbmQnOyAvLyBTZW5kIHRyYW5zYWN0aW9uIHR5cGVcbmV4cG9ydCBjb25zdCBJTVBPUlRfQ19UWVBFID0gJ2ltcG9ydC1jJzsgLy8gSW1wb3J0IEMtY2hhaW4gdHJhbnNhY3Rpb24gdHlwZVxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUl9UWVBFID0gJ3ZhbGlkYXRvcic7IC8vIFZhbGlkYXRvciB0eXBlXG5leHBvcnQgY29uc3QgQUREVkFMSURBVE9SX1RZUEUgPSAnYWRkVmFsaWRhdG9yJzsgLy8gQWRkIHZhbGlkYXRvciB0eXBlXG5leHBvcnQgY29uc3QgQUREX1ZBTElEQVRPUl9UWF9UWVBFID0gJ0FkZFZhbGlkYXRvclR4JzsgLy8gQWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvbiB0eXBlXG5cbi8vIFZhbGlkYXRvciB0cmFuc2FjdGlvbiB0eXBlIGFycmF5c1xuZXhwb3J0IGNvbnN0IFZBTElEQVRPUl9UUkFOU0FDVElPTl9UWVBFUyA9IFtcbiAgUExBVEZPUk1fVk1fQUREX1ZBTElEQVRPUl9UWCxcbiAgQUREX1ZBTElEQVRPUl9UWF9UWVBFLFxuICBBRERWQUxJREFUT1JfVFlQRSxcbiAgVkFMSURBVE9SX1RZUEUsXG5dOyAvLyBWYWxpZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb24gdHlwZXNcblxuLy8gVHJhbnNmZXIgdHlwZXNcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUkFCTEVfSU5QVVRfVFlQRSA9ICdUcmFuc2ZlcmFibGVJbnB1dCc7IC8vIFRyYW5zZmVyYWJsZSBpbnB1dCB0eXBlXG5leHBvcnQgY29uc3QgQ1JFREVOVElBTF9UWVBFID0gJ0NyZWRlbnRpYWwnOyAvLyBDcmVkZW50aWFsIHR5cGVcbmV4cG9ydCBjb25zdCBTRUNQMjU2SzFfVFJBTlNGRVJfSU5QVVRfVFlQRSA9ICdzZWNwMjU2azFmeC5UcmFuc2ZlcklucHV0JzsgLy8gU0VDUDI1NksxIHRyYW5zZmVyIGlucHV0IHR5cGVcbmV4cG9ydCBjb25zdCBTRUNQMjU2SzFfVFJBTlNGRVJfT1VUUFVUX1RZUEUgPSAnc2VjcDI1NmsxZnguVHJhbnNmZXJPdXRwdXQnOyAvLyBTRUNQMjU2SzEgdHJhbnNmZXIgb3V0cHV0IHR5cGVcblxuLy8gUHJvcGVydHkgbmFtZXMgZm9yIG9iamVjdCBjaGVja3NcbmV4cG9ydCBjb25zdCBERVNUSU5BVElPTl9DSEFJTl9QUk9QID0gJ2Rlc3RpbmF0aW9uQ2hhaW4nOyAvLyBEZXN0aW5hdGlvbiBjaGFpbiBwcm9wZXJ0eVxuZXhwb3J0IGNvbnN0IERFU1RJTkFUSU9OX0NIQUlOX0lEX1BST1AgPSAnZGVzdGluYXRpb25DaGFpbklEJzsgLy8gRGVzdGluYXRpb24gY2hhaW4gSUQgcHJvcGVydHlcbmV4cG9ydCBjb25zdCBFWFBPUlRFRF9PVVRQVVRTX1BST1AgPSAnZXhwb3J0ZWRPdXRwdXRzJzsgLy8gRXhwb3J0ZWQgb3V0cHV0cyBwcm9wZXJ0eVxuZXhwb3J0IGNvbnN0IE9VVFNfUFJPUCA9ICdvdXRzJzsgLy8gT3V0cHV0cyBwcm9wZXJ0eSBzaG9ydCBuYW1lXG5leHBvcnQgY29uc3QgSU5QVVRTX1BST1AgPSAnaW5wdXRzJzsgLy8gSW5wdXRzIHByb3BlcnR5XG5leHBvcnQgY29uc3QgSU5TX1BST1AgPSAnaW5zJzsgLy8gSW5wdXRzIHByb3BlcnR5IHNob3J0IG5hbWVcbmV4cG9ydCBjb25zdCBORVRXT1JLX0lEX1BST1AgPSAnbmV0d29ya0lEJzsgLy8gTmV0d29yayBJRCBwcm9wZXJ0eVxuZXhwb3J0IGNvbnN0IE5FVFdPUktfSURfUFJPUF9BTFQgPSAnbmV0d29ya0lkJzsgLy8gQWx0ZXJuYXRpdmUgbmV0d29yayBJRCBwcm9wZXJ0eVxuZXhwb3J0IGNvbnN0IEJMT0NLQ0hBSU5fSURfUFJPUCA9ICdibG9ja2NoYWluSUQnOyAvLyBCbG9ja2NoYWluIElEIHByb3BlcnR5XG5leHBvcnQgY29uc3QgR0VUX09VVFBVVF9NRVRIT0QgPSAnZ2V0T3V0cHV0JzsgLy8gR2V0IG91dHB1dCBtZXRob2QgbmFtZVxuXG4vLyBVVFhPIGZpZWxkIG5hbWVzXG5leHBvcnQgY29uc3QgT1VUUFVUX0lEX0ZJRUxEID0gJ291dHB1dElEJzsgLy8gT3V0cHV0IElEIGZpZWxkXG5leHBvcnQgY29uc3QgQU1PVU5UX0ZJRUxEID0gJ2Ftb3VudCc7IC8vIEFtb3VudCBmaWVsZFxuZXhwb3J0IGNvbnN0IFRYSURfRklFTEQgPSAndHhpZCc7IC8vIFRyYW5zYWN0aW9uIElEIGZpZWxkXG5leHBvcnQgY29uc3QgT1VUUFVUX0lEWF9GSUVMRCA9ICdvdXRwdXRpZHgnOyAvLyBPdXRwdXQgaW5kZXggZmllbGRcblxuLy8gVHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gZmllbGQgbmFtZXNcbmV4cG9ydCBjb25zdCBJRF9GSUVMRCA9ICdpZCc7IC8vIElEIGZpZWxkIG5hbWVcbmV4cG9ydCBjb25zdCBPVVRQVVRfQU1PVU5UX0ZJRUxEID0gJ291dHB1dEFtb3VudCc7IC8vIE91dHB1dCBhbW91bnQgZmllbGRcbmV4cG9ydCBjb25zdCBDSEFOR0VfQU1PVU5UX0ZJRUxEID0gJ2NoYW5nZUFtb3VudCc7IC8vIENoYW5nZSBhbW91bnQgZmllbGRcbmV4cG9ydCBjb25zdCBPVVRQVVRTX0ZJRUxEID0gJ291dHB1dHMnOyAvLyBPdXRwdXRzIGZpZWxkXG5leHBvcnQgY29uc3QgQ0hBTkdFX09VVFBVVFNfRklFTEQgPSAnY2hhbmdlT3V0cHV0cyc7IC8vIENoYW5nZSBvdXRwdXRzIGZpZWxkXG5leHBvcnQgY29uc3QgRkVFX0ZJRUxEID0gJ2ZlZSc7IC8vIEZlZSBmaWVsZFxuZXhwb3J0IGNvbnN0IFRZUEVfRklFTEQgPSAndHlwZSc7IC8vIFR5cGUgZmllbGRcblxuLy8gU2lnbmF0dXJlIGFuZCBoYXNoIG1ldGhvZHNcbmV4cG9ydCBjb25zdCBTRUNQMjU2SzFfU0lHX1RZUEUgPSAnc2VjcDI1NmsxJzsgLy8gU0VDUDI1NksxIHNpZ25hdHVyZSB0eXBlXG5leHBvcnQgY29uc3QgREVSX0ZPUk1BVCA9ICdkZXInOyAvLyBERVIgZm9ybWF0XG5leHBvcnQgY29uc3QgU0hBMjU2X0hBU0ggPSAnc2hhMjU2JzsgLy8gU0hBMjU2IGhhc2ggZnVuY3Rpb25cbmV4cG9ydCBjb25zdCBSRUNPVkVSWV9LRVlfTUVUSE9EID0gJ3JlY292ZXJ5LWtleSc7IC8vIFJlY292ZXJ5IGtleSBzaWduaW5nIG1ldGhvZFxuZXhwb3J0IGNvbnN0IE5PUk1BTF9NT0RFID0gJ25vcm1hbCc7IC8vIE5vcm1hbCBtb2RlXG5leHBvcnQgY29uc3QgUkVDT1ZFUllfTU9ERSA9ICdyZWNvdmVyeSc7IC8vIFJlY292ZXJ5IG1vZGVcblxuLy8gVmVyc2lvbiBzdHJpbmdzXG5leHBvcnQgY29uc3QgUkVDT1ZFUllfVkVSU0lPTiA9ICcxLjAuMCc7IC8vIFJlY292ZXJ5IHZlcnNpb25cbmV4cG9ydCBjb25zdCBTSUdOQVRVUkVfVkVSU0lPTiA9ICcxLjAuMCc7IC8vIFNpZ25hdHVyZSB2ZXJzaW9uXG5cbi8vIE51bWVyaWMgcmFkaXhcbmV4cG9ydCBjb25zdCBIRVhfUkFESVggPSAxNjsgLy8gSGV4YWRlY2ltYWwgcmFkaXhcblxuLy8gVHJhbnNhY3Rpb24gdHlwZSBpZGVudGlmaWVycyAoYWRkaXRpb25hbClcbmV4cG9ydCBjb25zdCBBRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1RZUEUgPSAnYWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3InOyAvLyBBZGQgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHR5cGVcblxuLy8gRGlzcGxheSBvcmRlciBmb3IgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb25zXG5leHBvcnQgY29uc3QgRElTUExBWV9PUkRFUl9CQVNFID0gW1xuICAnaWQnLFxuICAnaW5wdXRzJyxcbiAgJ291dHB1dEFtb3VudCcsXG4gICdjaGFuZ2VBbW91bnQnLFxuICAnb3V0cHV0cycsXG4gICdjaGFuZ2VPdXRwdXRzJyxcbiAgJ2ZlZScsXG4gICd0eXBlJyxcbl07IC8vIEJhc2UgZGlzcGxheSBvcmRlclxuZXhwb3J0IGNvbnN0IE1FTU9fRklFTEQgPSAnbWVtbyc7IC8vIE1lbW8gZmllbGQgbmFtZVxuZXhwb3J0IGNvbnN0IFJFV0FSRF9BRERSRVNTRVNfRklFTEQgPSAncmV3YXJkQWRkcmVzc2VzJzsgLy8gUmV3YXJkIGFkZHJlc3NlcyBmaWVsZFxuZXhwb3J0IGNvbnN0IFNPVVJDRV9DSEFJTl9GSUVMRCA9ICdzb3VyY2VDaGFpbic7IC8vIFNvdXJjZSBjaGFpbiBmaWVsZFxuZXhwb3J0IGNvbnN0IERFU1RJTkFUSU9OX0NIQUlOX0ZJRUxEID0gJ2Rlc3RpbmF0aW9uQ2hhaW4nOyAvLyBEZXN0aW5hdGlvbiBjaGFpbiBmaWVsZFxuXG4vLyBBc3NldCBhbmQgbmV0d29yayBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBGTFJfQVNTRVRfSUQgPSAnRkxSJzsgLy8gRGVmYXVsdCBGTFIgYXNzZXQgSURcblxuLy8gUGxhY2Vob2xkZXIgY29uc3RhbnRzIGZvciBkZXZlbG9wbWVudFxuZXhwb3J0IGNvbnN0IEZMQVJFX1RYX0hFWF9QTEFDRUhPTERFUiA9ICdmbGFyZS10eC1oZXgtcGxhY2Vob2xkZXInOyAvLyBUcmFuc2FjdGlvbiBoZXggcGxhY2Vob2xkZXJcbmV4cG9ydCBjb25zdCBGTEFSRV9TSUdOQUJMRV9QQVlMT0FEID0gJ2ZsYXJlLXNpZ25hYmxlLXBheWxvYWQnOyAvLyBTaWduYWJsZSBwYXlsb2FkIHBsYWNlaG9sZGVyXG5leHBvcnQgY29uc3QgRkxBUkVfVFJBTlNBQ1RJT05fSURfUExBQ0VIT0xERVIgPSAnZmxhcmUtdHJhbnNhY3Rpb24taWQtcGxhY2Vob2xkZXInOyAvLyBUcmFuc2FjdGlvbiBJRCBwbGFjZWhvbGRlclxuZXhwb3J0IGNvbnN0IFBMQUNFSE9MREVSX05PREVfSUQgPSAncGxhY2Vob2xkZXItbm9kZS1pZCc7IC8vIE5vZGUgSUQgcGxhY2Vob2xkZXJcblxuLy8gQ2hhaW4gaWRlbnRpZmllcnMgKHNob3J0IGZvcm1zKVxuZXhwb3J0IGNvbnN0IFBfQ0hBSU5fU0hPUlQgPSAnUCc7IC8vIFAtY2hhaW4gc2hvcnQgbmFtZVxuZXhwb3J0IGNvbnN0IFhfQ0hBSU5fU0hPUlQgPSAnWCc7IC8vIFgtY2hhaW4gc2hvcnQgbmFtZVxuXG4vLyBWYWxpZCBzb3VyY2UgY2hhaW5zIGZvciBpbXBvcnRzXG5leHBvcnQgY29uc3QgVkFMSURfSU1QT1JUX1NPVVJDRV9DSEFJTlMgPSBbUF9DSEFJTl9TSE9SVCwgUF9DSEFJTl9GVUxMLCBYX0NIQUlOX1NIT1JULCBYX0NIQUlOX0ZVTExdOyAvLyBWYWxpZCBzb3VyY2UgY2hhaW5zIGZvciBDLWNoYWluIGltcG9ydHNcblxuLy8gVmFsaWQgUC1jaGFpbiBpbXBvcnQgdHlwZXNcbmV4cG9ydCBjb25zdCBWQUxJRF9QX0NIQUlOX0lNUE9SVF9UWVBFUyA9IFtQTEFURk9STV9WTV9JTVBPUlRfVFgsIElNUE9SVF9UWF9UWVBFLCBJTVBPUlRfVFlQRSwgUF9DSEFJTl9JTVBPUlRfVFlQRV07IC8vIFZhbGlkIFAtY2hhaW4gaW1wb3J0IHR5cGVzXG5cbi8vIEVycm9yIG1lc3NhZ2VzIGZvciB0cmFuc2FjdGlvbkJ1aWxkZXJcbmV4cG9ydCBjb25zdCBFUlJPUl9ORVRXT1JLX0lEX01JU01BVENIID0gJ05ldHdvcmsgSUQgbWlzbWF0Y2gnOyAvLyBOZXR3b3JrIElEIHZhbGlkYXRpb24gZXJyb3JcbmV4cG9ydCBjb25zdCBFUlJPUl9CTE9DS0NIQUlOX0lEX01JU01BVENIX0JVSUxERVIgPSAnQmxvY2tjaGFpbiBJRCBtaXNtYXRjaCc7IC8vIEJsb2NrY2hhaW4gSUQgdmFsaWRhdGlvbiBlcnJvclxuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfVEhSRVNIT0xEID0gJ0ludmFsaWQgdHJhbnNhY3Rpb246IHRocmVzaG9sZCBtdXN0IGJlIHNldCB0byAyJzsgLy8gVGhyZXNob2xkIHZhbGlkYXRpb24gZXJyb3JcbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0xPQ0tUSU1FID0gJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInOyAvLyBMb2NrdGltZSB2YWxpZGF0aW9uIGVycm9yXG5leHBvcnQgY29uc3QgRVJST1JfVVRYT1NfRU1QVFlfQVJSQVkgPSBcIlV0eG9zIGNhbid0IGJlIGVtcHR5IGFycmF5XCI7IC8vIEVtcHR5IFVUWE9TIGFycmF5IGVycm9yXG5leHBvcnQgY29uc3QgRVJST1JfVVRYT1NfTUlTU0lOR19GSUVMRCA9ICdVdHhvcyByZXF1aXJlZCc7IC8vIE1pc3NpbmcgVVRYTyBmaWVsZCBlcnJvclxuZXhwb3J0IGNvbnN0IEVSUk9SX0ZST01fQUREUkVTU0VTX1JFUVVJUkVEID0gJ2Zyb20gYWRkcmVzc2VzIGFyZSByZXF1aXJlZCc7IC8vIE1pc3NpbmcgZnJvbSBhZGRyZXNzZXMgZXJyb3JcbmV4cG9ydCBjb25zdCBFUlJPUl9VVFhPU19SRVFVSVJFRF9CVUlMREVSID0gJ3V0eG9zIGFyZSByZXF1aXJlZCc7IC8vIE1pc3NpbmcgVVRYT3MgZXJyb3JcbmV4cG9ydCBjb25zdCBFUlJPUl9QQVJTRV9SQVdfVFJBTlNBQ1RJT04gPSAnRmFpbGVkIHRvIHBhcnNlIHJhdyB0cmFuc2FjdGlvbic7IC8vIFJhdyB0cmFuc2FjdGlvbiBwYXJzaW5nIGVycm9yXG5leHBvcnQgY29uc3QgRVJST1JfVU5LTk9XTl9QQVJTSU5HID0gJ1Vua25vd24gZXJyb3InOyAvLyBVbmtub3duIHBhcnNpbmcgZXJyb3JcblxuLy8gVVRYTyBmaWVsZCB2YWxpZGF0aW9uXG5leHBvcnQgY29uc3QgVVRYT19SRVFVSVJFRF9GSUVMRFMgPSBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddOyAvLyBSZXF1aXJlZCBVVFhPIGZpZWxkc1xuIl19
@@ -0,0 +1,58 @@
1
+ import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
4
+ import { Tx } from './iface';
5
+ export declare class DelegatorTxBuilder extends AtomicTransactionBuilder {
6
+ protected _nodeID: string;
7
+ protected _startTime: bigint;
8
+ protected _endTime: bigint;
9
+ protected _stakeAmount: bigint;
10
+ /**
11
+ * @param coinConfig
12
+ */
13
+ constructor(coinConfig: Readonly<CoinConfig>);
14
+ /**
15
+ * get transaction type
16
+ * @protected
17
+ */
18
+ protected get transactionType(): TransactionType;
19
+ /**
20
+ * Set the node ID for delegation
21
+ * @param nodeID - The node ID to delegate to
22
+ */
23
+ nodeID(nodeID: string): this;
24
+ /**
25
+ * Set the start time for delegation
26
+ * @param startTime - Unix timestamp for when delegation starts
27
+ */
28
+ startTime(startTime: string | number | bigint): this;
29
+ /**
30
+ * Set the end time for delegation
31
+ * @param endTime - Unix timestamp for when delegation ends
32
+ */
33
+ endTime(endTime: string | number | bigint): this;
34
+ /**
35
+ * Set the stake amount for delegation
36
+ * @param amount - Amount to stake (in nFLR)
37
+ */
38
+ stakeAmount(amount: string | number | bigint): this;
39
+ /**
40
+ * Set reward addresses where delegation rewards should be sent
41
+ * @param addresses - Array of reward addresses
42
+ */
43
+ rewardAddresses(addresses: string[]): this;
44
+ /** @inheritdoc */
45
+ initBuilder(tx: Tx): this;
46
+ /**
47
+ * Verify if the transaction is a delegator transaction
48
+ * @param tx
49
+ */
50
+ static verifyTxType(tx: unknown): boolean;
51
+ verifyTxType(tx: unknown): boolean;
52
+ /**
53
+ * Build the delegator transaction using FlareJS PVM API
54
+ * @protected
55
+ */
56
+ protected buildFlareTransaction(): Promise<void>;
57
+ }
58
+ //# sourceMappingURL=delegatorTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/delegatorTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkB7B,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B;;OAEG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ5C;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBpD;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBhD;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IASnD;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAS1C,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IA0BzB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAMzC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAIlC;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAoGvD"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DelegatorTxBuilder = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
6
+ const constants_1 = require("./constants");
7
+ class DelegatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
8
+ /**
9
+ * @param coinConfig
10
+ */
11
+ constructor(coinConfig) {
12
+ super(coinConfig);
13
+ this._nodeID = constants_1.EMPTY_STRING;
14
+ this._startTime = constants_1.ZERO_BIGINT;
15
+ this._endTime = constants_1.ZERO_BIGINT;
16
+ this._stakeAmount = constants_1.ZERO_BIGINT;
17
+ }
18
+ /**
19
+ * get transaction type
20
+ * @protected
21
+ */
22
+ get transactionType() {
23
+ return sdk_core_1.TransactionType.AddDelegator;
24
+ }
25
+ /**
26
+ * Set the node ID for delegation
27
+ * @param nodeID - The node ID to delegate to
28
+ */
29
+ nodeID(nodeID) {
30
+ if (!nodeID || nodeID.length === constants_1.ZERO_NUMBER) {
31
+ throw new sdk_core_1.BuildTransactionError('Node ID cannot be empty');
32
+ }
33
+ this._nodeID = nodeID;
34
+ return this;
35
+ }
36
+ /**
37
+ * Set the start time for delegation
38
+ * @param startTime - Unix timestamp for when delegation starts
39
+ */
40
+ startTime(startTime) {
41
+ const time = BigInt(startTime);
42
+ // Validate that start time is positive
43
+ if (time <= constants_1.ZERO_NUMBER) {
44
+ throw new sdk_core_1.BuildTransactionError('Start time must be positive');
45
+ }
46
+ // Validate that start time is before end time (if end time is already set)
47
+ if (this._endTime > constants_1.ZERO_NUMBER && time >= this._endTime) {
48
+ throw new sdk_core_1.BuildTransactionError('Start time must be before end time');
49
+ }
50
+ this._startTime = time;
51
+ return this;
52
+ }
53
+ /**
54
+ * Set the end time for delegation
55
+ * @param endTime - Unix timestamp for when delegation ends
56
+ */
57
+ endTime(endTime) {
58
+ const time = BigInt(endTime);
59
+ // Validate that end time is positive
60
+ if (time <= constants_1.ZERO_NUMBER) {
61
+ throw new sdk_core_1.BuildTransactionError('End time must be positive');
62
+ }
63
+ // Validate that end time is after start time (if start time is already set)
64
+ if (this._startTime > constants_1.ZERO_NUMBER && time <= this._startTime) {
65
+ throw new sdk_core_1.BuildTransactionError('End time must be after start time');
66
+ }
67
+ this._endTime = time;
68
+ return this;
69
+ }
70
+ /**
71
+ * Set the stake amount for delegation
72
+ * @param amount - Amount to stake (in nFLR)
73
+ */
74
+ stakeAmount(amount) {
75
+ const stake = BigInt(amount);
76
+ if (stake <= constants_1.ZERO_NUMBER) {
77
+ throw new sdk_core_1.BuildTransactionError('Stake amount must be positive');
78
+ }
79
+ this._stakeAmount = stake;
80
+ return this;
81
+ }
82
+ /**
83
+ * Set reward addresses where delegation rewards should be sent
84
+ * @param addresses - Array of reward addresses
85
+ */
86
+ rewardAddresses(addresses) {
87
+ if (!addresses || addresses.length === constants_1.ZERO_NUMBER) {
88
+ throw new sdk_core_1.BuildTransactionError('At least one reward address is required');
89
+ }
90
+ // Store reward addresses in the transaction (we'll need to extend the type)
91
+ this.transaction._rewardAddresses = addresses;
92
+ return this;
93
+ }
94
+ /** @inheritdoc */
95
+ initBuilder(tx) {
96
+ super.initBuilder(tx);
97
+ // Extract delegator-specific fields from transaction
98
+ const txData = tx;
99
+ const delegatorData = txData;
100
+ if (delegatorData.nodeID) {
101
+ this._nodeID = delegatorData.nodeID;
102
+ }
103
+ if (delegatorData.startTime) {
104
+ this._startTime = BigInt(delegatorData.startTime);
105
+ }
106
+ if (delegatorData.endTime) {
107
+ this._endTime = BigInt(delegatorData.endTime);
108
+ }
109
+ if (delegatorData.stakeAmount) {
110
+ this._stakeAmount = BigInt(delegatorData.stakeAmount);
111
+ }
112
+ if (delegatorData.rewardAddresses) {
113
+ this.transaction._rewardAddresses = delegatorData.rewardAddresses;
114
+ }
115
+ return this;
116
+ }
117
+ /**
118
+ * Verify if the transaction is a delegator transaction
119
+ * @param tx
120
+ */
121
+ static verifyTxType(tx) {
122
+ // Check if transaction has delegator-specific properties
123
+ const delegatorData = tx;
124
+ return !!(delegatorData && delegatorData.nodeID && delegatorData.stakeAmount);
125
+ }
126
+ verifyTxType(tx) {
127
+ return DelegatorTxBuilder.verifyTxType(tx);
128
+ }
129
+ /**
130
+ * Build the delegator transaction using FlareJS PVM API
131
+ * @protected
132
+ */
133
+ async buildFlareTransaction() {
134
+ // Basic validation
135
+ if (!this._nodeID) {
136
+ throw new sdk_core_1.BuildTransactionError('Node ID is required for delegator transaction');
137
+ }
138
+ if (!this._startTime) {
139
+ throw new sdk_core_1.BuildTransactionError('Start time is required for delegator transaction');
140
+ }
141
+ if (!this._endTime) {
142
+ throw new sdk_core_1.BuildTransactionError('End time is required for delegator transaction');
143
+ }
144
+ if (!this._stakeAmount) {
145
+ throw new sdk_core_1.BuildTransactionError('Stake amount is required for delegator transaction');
146
+ }
147
+ const rewardAddresses = this.transaction._rewardAddresses;
148
+ if (!rewardAddresses || rewardAddresses.length === constants_1.ZERO_NUMBER) {
149
+ throw new sdk_core_1.BuildTransactionError('Reward addresses are required for delegator transaction');
150
+ }
151
+ // Validate time range
152
+ if (this._endTime <= this._startTime) {
153
+ throw new sdk_core_1.BuildTransactionError('End time must be after start time');
154
+ }
155
+ try {
156
+ // FlareJS PVM API implementation for delegator transactions
157
+ // This creates a structured delegator transaction with proper credential handling
158
+ const enhancedDelegatorTx = {
159
+ type: constants_1.DELEGATOR_TRANSACTION_TYPE,
160
+ networkID: this.transaction._networkID,
161
+ blockchainID: this.transaction._blockchainID,
162
+ // Enhanced delegator information structure
163
+ delegator: {
164
+ nodeID: this._nodeID,
165
+ startTime: this._startTime,
166
+ endTime: this._endTime,
167
+ stakeAmount: this._stakeAmount,
168
+ rewardAddress: rewardAddresses[constants_1.FIRST_ADDRESS_INDEX],
169
+ // FlareJS delegator markers
170
+ _delegatorType: constants_1.PRIMARY_DELEGATOR_TYPE,
171
+ _flareJSReady: true,
172
+ _pvmCompatible: true,
173
+ },
174
+ // Enhanced stake information with credentials
175
+ stake: {
176
+ assetID: this.getAssetId(),
177
+ amount: this._stakeAmount,
178
+ addresses: this.transaction._fromAddresses,
179
+ threshold: this.transaction._threshold || constants_1.DEFAULT_THRESHOLD,
180
+ locktime: this.transaction._locktime || constants_1.DEFAULT_LOCKTIME,
181
+ // FlareJS stake markers
182
+ _stakeType: constants_1.DELEGATOR_STAKE_TYPE,
183
+ _flareJSReady: true,
184
+ },
185
+ // Enhanced credential structure for delegators
186
+ // This provides proper FlareJS-compatible credential management
187
+ credentials: this.transaction._fromAddresses.map((address, index) => ({
188
+ signatures: [], // Will be populated by FlareJS signing process
189
+ addressIndices: [index], // Index of the signing address
190
+ threshold: constants_1.DEFAULT_THRESHOLD, // Signature threshold for this credential
191
+ // FlareJS credential markers
192
+ _credentialType: constants_1.SECP256K1_CREDENTIAL_TYPE,
193
+ _delegatorCredential: true,
194
+ _addressIndex: index,
195
+ _signingAddress: address,
196
+ _flareJSReady: true,
197
+ _credentialVersion: constants_1.CREDENTIAL_VERSION,
198
+ })),
199
+ // Enhanced outputs for delegator rewards
200
+ outputs: [
201
+ {
202
+ assetID: this.getAssetId(),
203
+ amount: this._stakeAmount,
204
+ addresses: [rewardAddresses[constants_1.FIRST_ADDRESS_INDEX]],
205
+ threshold: constants_1.DEFAULT_THRESHOLD,
206
+ locktime: this.transaction._locktime || constants_1.DEFAULT_LOCKTIME,
207
+ // FlareJS output markers
208
+ _outputType: constants_1.STAKE_OUTPUT_TYPE,
209
+ _rewardOutput: true,
210
+ _flareJSReady: true,
211
+ },
212
+ ],
213
+ // Transaction metadata
214
+ memo: Buffer.alloc(constants_1.MEMO_BUFFER_SIZE),
215
+ };
216
+ this.transaction.setTransaction(enhancedDelegatorTx);
217
+ }
218
+ catch (error) {
219
+ throw new sdk_core_1.BuildTransactionError(`Failed to build delegator transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
220
+ }
221
+ }
222
+ }
223
+ exports.DelegatorTxBuilder = DelegatorTxBuilder;
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdG9yVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWxlZ2F0b3JUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQThFO0FBRTlFLHlFQUFzRTtBQUd0RSwyQ0FjcUI7QUFFckIsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFNOUQ7O09BRUc7SUFDSCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLHdCQUFZLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyx1QkFBVyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQVcsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLHVCQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBYztRQUNuQixJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssdUJBQVcsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsU0FBbUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9CLHVDQUF1QztRQUN2QyxJQUFJLElBQUksSUFBSSx1QkFBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVE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QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FDckcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExUEQsZ0RBMFBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmF3VHJhbnNhY3Rpb25EYXRhLCBTdGFraW5nRXh0ZW5kZWRUcmFuc2FjdGlvbiwgRGVsZWdhdG9yUmF3VHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBERUxFR0FUT1JfVFJBTlNBQ1RJT05fVFlQRSxcbiAgUFJJTUFSWV9ERUxFR0FUT1JfVFlQRSxcbiAgREVMRUdBVE9SX1NUQUtFX1RZUEUsXG4gIFNFQ1AyNTZLMV9DUkVERU5USUFMX1RZUEUsXG4gIFNUQUtFX09VVFBVVF9UWVBFLFxuICBDUkVERU5USUFMX1ZFUlNJT04sXG4gIEVNUFRZX1NUUklORyxcbiAgWkVST19CSUdJTlQsXG4gIFpFUk9fTlVNQkVSLFxuICBERUZBVUxUX1RIUkVTSE9MRCxcbiAgREVGQVVMVF9MT0NLVElNRSxcbiAgTUVNT19CVUZGRVJfU0laRSxcbiAgRklSU1RfQUREUkVTU19JTkRFWCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgRGVsZWdhdG9yVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9ub2RlSUQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zdGFydFRpbWU6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIF9lbmRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfc3Rha2VBbW91bnQ6IGJpZ2ludDtcblxuICAvKipcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbm9kZUlEID0gRU1QVFlfU1RSSU5HO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IFpFUk9fQklHSU5UO1xuICAgIHRoaXMuX2VuZFRpbWUgPSBaRVJPX0JJR0lOVDtcbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IFpFUk9fQklHSU5UO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGREZWxlZ2F0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBub2RlIElEIGZvciBkZWxlZ2F0aW9uXG4gICAqIEBwYXJhbSBub2RlSUQgLSBUaGUgbm9kZSBJRCB0byBkZWxlZ2F0ZSB0b1xuICAgKi9cbiAgbm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFub2RlSUQgfHwgbm9kZUlELmxlbmd0aCA9PT0gWkVST19OVU1CRVIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIGRlbGVnYXRpb25cbiAgICogQHBhcmFtIHN0YXJ0VGltZSAtIFVuaXggdGltZXN0YW1wIGZvciB3aGVuIGRlbGVnYXRpb24gc3RhcnRzXG4gICAqL1xuICBzdGFydFRpbWUoc3RhcnRUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCB0aW1lID0gQmlnSW50KHN0YXJ0VGltZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHN0YXJ0IHRpbWUgaXMgcG9zaXRpdmVcbiAgICBpZiAodGltZSA8PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBzdGFydCB0aW1lIGlzIGJlZm9yZSBlbmQgdGltZSAoaWYgZW5kIHRpbWUgaXMgYWxyZWFkeSBzZXQpXG4gICAgaWYgKHRoaXMuX2VuZFRpbWUgPiBaRVJPX05VTUJFUiAmJiB0aW1lID49IHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1N0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgZW5kIHRpbWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kIHRpbWUgZm9yIGRlbGVnYXRpb25cbiAgICogQHBhcmFtIGVuZFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiBkZWxlZ2F0aW9uIGVuZHNcbiAgICovXG4gIGVuZFRpbWUoZW5kVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChlbmRUaW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgZW5kIHRpbWUgaXMgcG9zaXRpdmVcbiAgICBpZiAodGltZSA8PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgZW5kIHRpbWUgaXMgYWZ0ZXIgc3RhcnQgdGltZSAoaWYgc3RhcnQgdGltZSBpcyBhbHJlYWR5IHNldClcbiAgICBpZiAodGhpcy5fc3RhcnRUaW1lID4gWkVST19OVU1CRVIgJiYgdGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZScpO1xuICAgIH1cblxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3Rha2UgYW1vdW50IGZvciBkZWxlZ2F0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gc3Rha2UgKGluIG5GTFIpXG4gICAqL1xuICBzdGFrZUFtb3VudChhbW91bnQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IHN0YWtlID0gQmlnSW50KGFtb3VudCk7XG4gICAgaWYgKHN0YWtlIDw9IFpFUk9fTlVNQkVSKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IHN0YWtlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXdhcmQgYWRkcmVzc2VzIHdoZXJlIGRlbGVnYXRpb24gcmV3YXJkcyBzaG91bGQgYmUgc2VudFxuICAgKiBAcGFyYW0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgcmV3YXJkIGFkZHJlc3Nlc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3NlcyB8fCBhZGRyZXNzZXMubGVuZ3RoID09PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQXQgbGVhc3Qgb25lIHJld2FyZCBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIC8vIFN0b3JlIHJld2FyZCBhZGRyZXNzZXMgaW4gdGhlIHRyYW5zYWN0aW9uICh3ZSdsbCBuZWVkIHRvIGV4dGVuZCB0aGUgdHlwZSlcbiAgICAodGhpcy50cmFuc2FjdGlvbiBhcyB1bmtub3duIGFzIFN0YWtpbmdFeHRlbmRlZFRyYW5zYWN0aW9uKS5fcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcblxuICAgIC8vIEV4dHJhY3QgZGVsZWdhdG9yLXNwZWNpZmljIGZpZWxkcyBmcm9tIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHhEYXRhID0gdHggYXMgdW5rbm93biBhcyBSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgY29uc3QgZGVsZWdhdG9yRGF0YSA9IHR4RGF0YSBhcyBEZWxlZ2F0b3JSYXdUcmFuc2FjdGlvbkRhdGE7XG5cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5ub2RlSUQpIHtcbiAgICAgIHRoaXMuX25vZGVJRCA9IGRlbGVnYXRvckRhdGEubm9kZUlEO1xuICAgIH1cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5zdGFydFRpbWUpIHtcbiAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IEJpZ0ludChkZWxlZ2F0b3JEYXRhLnN0YXJ0VGltZSk7XG4gICAgfVxuICAgIGlmIChkZWxlZ2F0b3JEYXRhLmVuZFRpbWUpIHtcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQoZGVsZWdhdG9yRGF0YS5lbmRUaW1lKTtcbiAgICB9XG4gICAgaWYgKGRlbGVnYXRvckRhdGEuc3Rha2VBbW91bnQpIHtcbiAgICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gQmlnSW50KGRlbGVnYXRvckRhdGEuc3Rha2VBbW91bnQpO1xuICAgIH1cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5yZXdhcmRBZGRyZXNzZXMpIHtcbiAgICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgU3Rha2luZ0V4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXMgPSBkZWxlZ2F0b3JEYXRhLnJld2FyZEFkZHJlc3NlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGEgZGVsZWdhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB0eFxuICAgKi9cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eDogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRyYW5zYWN0aW9uIGhhcyBkZWxlZ2F0b3Itc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIGNvbnN0IGRlbGVnYXRvckRhdGEgPSB0eCBhcyBEZWxlZ2F0b3JSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgcmV0dXJuICEhKGRlbGVnYXRvckRhdGEgJiYgZGVsZWdhdG9yRGF0YS5ub2RlSUQgJiYgZGVsZWdhdG9yRGF0YS5zdGFrZUFtb3VudCk7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGVsZWdhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlbGVnYXRvciB0cmFuc2FjdGlvbiB1c2luZyBGbGFyZUpTIFBWTSBBUElcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgaWYgKCF0aGlzLl9ub2RlSUQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgZGVsZWdhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZW5kVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YWtlQW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJld2FyZEFkZHJlc3NlcyA9ICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgU3Rha2luZ0V4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXM7XG4gICAgaWYgKCFyZXdhcmRBZGRyZXNzZXMgfHwgcmV3YXJkQWRkcmVzc2VzLmxlbmd0aCA9PT0gWkVST19OVU1CRVIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1Jld2FyZCBhZGRyZXNzZXMgYXJlIHJlcXVpcmVkIGZvciBkZWxlZ2F0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aW1lIHJhbmdlXG4gICAgaWYgKHRoaXMuX2VuZFRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmxhcmVKUyBQVk0gQVBJIGltcGxlbWVudGF0aW9uIGZvciBkZWxlZ2F0b3IgdHJhbnNhY3Rpb25zXG4gICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBzdHJ1Y3R1cmVkIGRlbGVnYXRvciB0cmFuc2FjdGlvbiB3aXRoIHByb3BlciBjcmVkZW50aWFsIGhhbmRsaW5nXG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkRGVsZWdhdG9yVHggPSB7XG4gICAgICAgIHR5cGU6IERFTEVHQVRPUl9UUkFOU0FDVElPTl9UWVBFLFxuICAgICAgICBuZXR3b3JrSUQ6IHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCxcbiAgICAgICAgYmxvY2tjaGFpbklEOiB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZGVsZWdhdG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZVxuICAgICAgICBkZWxlZ2F0b3I6IHtcbiAgICAgICAgICBub2RlSUQ6IHRoaXMuX25vZGVJRCxcbiAgICAgICAgICBzdGFydFRpbWU6IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgICAgICBlbmRUaW1lOiB0aGlzLl9lbmRUaW1lLFxuICAgICAgICAgIHN0YWtlQW1vdW50OiB0aGlzLl9zdGFrZUFtb3VudCxcbiAgICAgICAgICByZXdhcmRBZGRyZXNzOiByZXdhcmRBZGRyZXNzZXNbRklSU1RfQUREUkVTU19JTkRFWF0sXG4gICAgICAgICAgLy8gRmxhcmVKUyBkZWxlZ2F0b3IgbWFya2Vyc1xuICAgICAgICAgIF9kZWxlZ2F0b3JUeXBlOiBQUklNQVJZX0RFTEVHQVRPUl9UWVBFLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgICAgX3B2bUNvbXBhdGlibGU6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgc3Rha2UgaW5mb3JtYXRpb24gd2l0aCBjcmVkZW50aWFsc1xuICAgICAgICBzdGFrZToge1xuICAgICAgICAgIGFzc2V0SUQ6IHRoaXMuZ2V0QXNzZXRJZCgpLFxuICAgICAgICAgIGFtb3VudDogdGhpcy5fc3Rha2VBbW91bnQsXG4gICAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLFxuICAgICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkIHx8IERFRkFVTFRfVEhSRVNIT0xELFxuICAgICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSB8fCBERUZBVUxUX0xPQ0tUSU1FLFxuICAgICAgICAgIC8vIEZsYXJlSlMgc3Rha2UgbWFya2Vyc1xuICAgICAgICAgIF9zdGFrZVR5cGU6IERFTEVHQVRPUl9TVEFLRV9UWVBFLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY3JlZGVudGlhbCBzdHJ1Y3R1cmUgZm9yIGRlbGVnYXRvcnNcbiAgICAgICAgLy8gVGhpcyBwcm92aWRlcyBwcm9wZXIgRmxhcmVKUy1jb21wYXRpYmxlIGNyZWRlbnRpYWwgbWFuYWdlbWVudFxuICAgICAgICBjcmVkZW50aWFsczogdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIHNpZ25hdHVyZXM6IFtdLCAvLyBXaWxsIGJlIHBvcHVsYXRlZCBieSBGbGFyZUpTIHNpZ25pbmcgcHJvY2Vzc1xuICAgICAgICAgIGFkZHJlc3NJbmRpY2VzOiBbaW5kZXhdLCAvLyBJbmRleCBvZiB0aGUgc2lnbmluZyBhZGRyZXNzXG4gICAgICAgICAgdGhyZXNob2xkOiBERUZBVUxUX1RIUkVTSE9MRCwgLy8gU2lnbmF0dXJlIHRocmVzaG9sZCBmb3IgdGhpcyBjcmVkZW50aWFsXG4gICAgICAgICAgLy8gRmxhcmVKUyBjcmVkZW50aWFsIG1hcmtlcnNcbiAgICAgICAgICBfY3JlZGVudGlhbFR5cGU6IFNFQ1AyNTZLMV9DUkVERU5USUFMX1RZUEUsXG4gICAgICAgICAgX2RlbGVnYXRvckNyZWRlbnRpYWw6IHRydWUsXG4gICAgICAgICAgX2FkZHJlc3NJbmRleDogaW5kZXgsXG4gICAgICAgICAgX3NpZ25pbmdBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgICAgX2NyZWRlbnRpYWxWZXJzaW9uOiBDUkVERU5USUFMX1ZFUlNJT04sXG4gICAgICAgIH0pKSxcblxuICAgICAgICAvLyBFbmhhbmNlZCBvdXRwdXRzIGZvciBkZWxlZ2F0b3IgcmV3YXJkc1xuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXNzZXRJRDogdGhpcy5nZXRBc3NldElkKCksXG4gICAgICAgICAgICBhbW91bnQ6IHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbcmV3YXJkQWRkcmVzc2VzW0ZJUlNUX0FERFJFU1NfSU5ERVhdXSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogREVGQVVMVF9USFJFU0hPTEQsXG4gICAgICAgICAgICBsb2NrdGltZTogdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgfHwgREVGQVVMVF9MT0NLVElNRSxcbiAgICAgICAgICAgIC8vIEZsYXJlSlMgb3V0cHV0IG1hcmtlcnNcbiAgICAgICAgICAgIF9vdXRwdXRUeXBlOiBTVEFLRV9PVVRQVVRfVFlQRSxcbiAgICAgICAgICAgIF9yZXdhcmRPdXRwdXQ6IHRydWUsXG4gICAgICAgICAgICBfZmxhcmVKU1JlYWR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICAgICAgLy8gVHJhbnNhY3Rpb24gbWV0YWRhdGFcbiAgICAgICAgbWVtbzogQnVmZmVyLmFsbG9jKE1FTU9fQlVGRkVSX1NJWkUpLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihlbmhhbmNlZERlbGVnYXRvclR4KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBidWlsZCBkZWxlZ2F0b3IgdHJhbnNhY3Rpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==