@bitgo-beta/sdk-coin-sol 7.6.4-beta.677 → 7.6.4-beta.678

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.
@@ -23,4 +23,5 @@ export { MessageBuilderFactory } from './messages';
23
23
  export { explainSolTransaction, ExplainTransactionWasmOptions } from './explainTransactionWasm';
24
24
  export { MintExtensionReadResult, extensionTypeNames, mapModeledExtensions, parseMintExtensions, readMintExtensions, } from './tokenExtensions';
25
25
  export { ResolvePermissionlessThawResult, SolAccountFetcher, buildSolAccountConnection, resolvePermissionlessThaw, resolveTransferHookAccounts, } from './token2022Resolve';
26
+ export { rawToUiAmountString, uiAmountToRaw } from './scaledUiAmount';
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.resolveTransferHookAccounts = exports.resolvePermissionlessThaw = exports.buildSolAccountConnection = exports.readMintExtensions = exports.parseMintExtensions = exports.mapModeledExtensions = exports.extensionTypeNames = exports.explainSolTransaction = exports.MessageBuilderFactory = exports.Utils = exports.Interface = exports.WalletInitializationBuilder = exports.TransferBuilderV2 = exports.TransferBuilder = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.TokenTransferBuilder = exports.StakingWithdrawBuilder = exports.StakingRawMsgAuthorizeBuilder = exports.StakingDelegateBuilder = exports.StakingDeactivateBuilder = exports.StakingAuthorizeBuilder = exports.StakingActivateBuilder = exports.KeyPair = exports.CustomInstructionBuilder = exports.ConfidentialTransferBuilder = exports.CloseAtaBuilder = exports.AtaInitializationBuilder = void 0;
36
+ exports.uiAmountToRaw = exports.rawToUiAmountString = exports.resolveTransferHookAccounts = exports.resolvePermissionlessThaw = exports.buildSolAccountConnection = exports.readMintExtensions = exports.parseMintExtensions = exports.mapModeledExtensions = exports.extensionTypeNames = exports.explainSolTransaction = exports.MessageBuilderFactory = exports.Utils = exports.Interface = exports.WalletInitializationBuilder = exports.TransferBuilderV2 = exports.TransferBuilder = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.TokenTransferBuilder = exports.StakingWithdrawBuilder = exports.StakingRawMsgAuthorizeBuilder = exports.StakingDelegateBuilder = exports.StakingDeactivateBuilder = exports.StakingAuthorizeBuilder = exports.StakingActivateBuilder = exports.KeyPair = exports.CustomInstructionBuilder = exports.ConfidentialTransferBuilder = exports.CloseAtaBuilder = exports.AtaInitializationBuilder = void 0;
37
37
  const Interface = __importStar(require("./iface"));
38
38
  exports.Interface = Interface;
39
39
  const Utils = __importStar(require("./utils"));
@@ -87,4 +87,7 @@ var token2022Resolve_1 = require("./token2022Resolve");
87
87
  Object.defineProperty(exports, "buildSolAccountConnection", { enumerable: true, get: function () { return token2022Resolve_1.buildSolAccountConnection; } });
88
88
  Object.defineProperty(exports, "resolvePermissionlessThaw", { enumerable: true, get: function () { return token2022Resolve_1.resolvePermissionlessThaw; } });
89
89
  Object.defineProperty(exports, "resolveTransferHookAccounts", { enumerable: true, get: function () { return token2022Resolve_1.resolveTransferHookAccounts; } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFxQztBQXFCNUIsOEJBQVM7QUFwQmxCLCtDQUFpQztBQW9CYixzQkFBSztBQWxCekIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIsNkVBQTRFO0FBQW5FLDBJQUFBLDJCQUEyQixPQUFBO0FBQ3BDLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxQ0FBb0M7QUFBM0Isa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1FQUFrRTtBQUF6RCxnSUFBQSxzQkFBc0IsT0FBQTtBQUMvQixxRUFBb0U7QUFBM0Qsa0lBQUEsdUJBQXVCLE9BQUE7QUFDaEMsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLG1FQUFrRTtBQUF6RCxnSUFBQSxzQkFBc0IsT0FBQTtBQUMvQixpRkFBZ0Y7QUFBdkUsOElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLCtEQUE4RDtBQUFyRCw0SEFBQSxvQkFBb0IsT0FBQTtBQUM3Qiw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLDJEQUEwRDtBQUFqRCx3SEFBQSxrQkFBa0IsT0FBQTtBQUMzQix5RUFBd0U7QUFBL0Qsc0lBQUEseUJBQXlCLE9BQUE7QUFDbEMscURBQW9EO0FBQTNDLGtIQUFBLGVBQWUsT0FBQTtBQUN4Qix5REFBd0Q7QUFBL0Msc0hBQUEsaUJBQWlCLE9BQUE7QUFDMUIsNkVBQTRFO0FBQW5FLDBJQUFBLDJCQUEyQixPQUFBO0FBRXBDLHVDQUFtRDtBQUExQyxpSEFBQSxxQkFBcUIsT0FBQTtBQUM5QixtRUFBZ0c7QUFBdkYsK0hBQUEscUJBQXFCLE9BQUE7QUFDOUIscURBTTJCO0FBSnpCLHFIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLHNIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHFIQUFBLGtCQUFrQixPQUFBO0FBRXBCLHVEQU00QjtBQUgxQiw2SEFBQSx5QkFBeUIsT0FBQTtBQUN6Qiw2SEFBQSx5QkFBeUIsT0FBQTtBQUN6QiwrSEFBQSwyQkFBMkIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEludGVyZmFjZSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgeyBBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0YUluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBDbG9zZUF0YUJ1aWxkZXIgfSBmcm9tICcuL2Nsb3NlQXRhQnVpbGRlcic7XG5leHBvcnQgeyBDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2NvbmZpZGVudGlhbFRyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2N1c3RvbUluc3RydWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmV4cG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ0F1dGhvcml6ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdBdXRob3JpemVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlciB9IGZyb20gJy4vc3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdEZWxlZ2F0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1Jhd01zZ0F1dGhvcml6ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdSYXdNc2dBdXRob3JpemVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdXaXRoZHJhd0J1aWxkZXInO1xuZXhwb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Rva2VuVHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlclYyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXJWMic7XG5leHBvcnQgeyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3dhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBJbnRlcmZhY2UsIFV0aWxzIH07XG5leHBvcnQgeyBNZXNzYWdlQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL21lc3NhZ2VzJztcbmV4cG9ydCB7IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbiwgRXhwbGFpblRyYW5zYWN0aW9uV2FzbU9wdGlvbnMgfSBmcm9tICcuL2V4cGxhaW5UcmFuc2FjdGlvbldhc20nO1xuZXhwb3J0IHtcbiAgTWludEV4dGVuc2lvblJlYWRSZXN1bHQsXG4gIGV4dGVuc2lvblR5cGVOYW1lcyxcbiAgbWFwTW9kZWxlZEV4dGVuc2lvbnMsXG4gIHBhcnNlTWludEV4dGVuc2lvbnMsXG4gIHJlYWRNaW50RXh0ZW5zaW9ucyxcbn0gZnJvbSAnLi90b2tlbkV4dGVuc2lvbnMnO1xuZXhwb3J0IHtcbiAgUmVzb2x2ZVBlcm1pc3Npb25sZXNzVGhhd1Jlc3VsdCxcbiAgU29sQWNjb3VudEZldGNoZXIsXG4gIGJ1aWxkU29sQWNjb3VudENvbm5lY3Rpb24sXG4gIHJlc29sdmVQZXJtaXNzaW9ubGVzc1RoYXcsXG4gIHJlc29sdmVUcmFuc2Zlckhvb2tBY2NvdW50cyxcbn0gZnJvbSAnLi90b2tlbjIwMjJSZXNvbHZlJztcbiJdfQ==
90
+ var scaledUiAmount_1 = require("./scaledUiAmount");
91
+ Object.defineProperty(exports, "rawToUiAmountString", { enumerable: true, get: function () { return scaledUiAmount_1.rawToUiAmountString; } });
92
+ Object.defineProperty(exports, "uiAmountToRaw", { enumerable: true, get: function () { return scaledUiAmount_1.uiAmountToRaw; } });
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFxQztBQXFCNUIsOEJBQVM7QUFwQmxCLCtDQUFpQztBQW9CYixzQkFBSztBQWxCekIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIsNkVBQTRFO0FBQW5FLDBJQUFBLDJCQUEyQixPQUFBO0FBQ3BDLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxQ0FBb0M7QUFBM0Isa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1FQUFrRTtBQUF6RCxnSUFBQSxzQkFBc0IsT0FBQTtBQUMvQixxRUFBb0U7QUFBM0Qsa0lBQUEsdUJBQXVCLE9BQUE7QUFDaEMsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLG1FQUFrRTtBQUF6RCxnSUFBQSxzQkFBc0IsT0FBQTtBQUMvQixpRkFBZ0Y7QUFBdkUsOElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLCtEQUE4RDtBQUFyRCw0SEFBQSxvQkFBb0IsT0FBQTtBQUM3Qiw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLDJEQUEwRDtBQUFqRCx3SEFBQSxrQkFBa0IsT0FBQTtBQUMzQix5RUFBd0U7QUFBL0Qsc0lBQUEseUJBQXlCLE9BQUE7QUFDbEMscURBQW9EO0FBQTNDLGtIQUFBLGVBQWUsT0FBQTtBQUN4Qix5REFBd0Q7QUFBL0Msc0hBQUEsaUJBQWlCLE9BQUE7QUFDMUIsNkVBQTRFO0FBQW5FLDBJQUFBLDJCQUEyQixPQUFBO0FBRXBDLHVDQUFtRDtBQUExQyxpSEFBQSxxQkFBcUIsT0FBQTtBQUM5QixtRUFBZ0c7QUFBdkYsK0hBQUEscUJBQXFCLE9BQUE7QUFDOUIscURBTTJCO0FBSnpCLHFIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLHNIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHFIQUFBLGtCQUFrQixPQUFBO0FBRXBCLHVEQU00QjtBQUgxQiw2SEFBQSx5QkFBeUIsT0FBQTtBQUN6Qiw2SEFBQSx5QkFBeUIsT0FBQTtBQUN6QiwrSEFBQSwyQkFBMkIsT0FBQTtBQUU3QixtREFBc0U7QUFBN0QscUhBQUEsbUJBQW1CLE9BQUE7QUFBRSwrR0FBQSxhQUFhLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJbnRlcmZhY2UgZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHsgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyIH0gZnJvbSAnLi9hdGFJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgQ2xvc2VBdGFCdWlsZGVyIH0gZnJvbSAnLi9jbG9zZUF0YUJ1aWxkZXInO1xuZXhwb3J0IHsgQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXInO1xuZXhwb3J0IHsgQ3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9jdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBTdGFraW5nQWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQWN0aXZhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdBdXRob3JpemVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQXV0aG9yaXplQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nRGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nRGVsZWdhdGVCdWlsZGVyJztcbmV4cG9ydCB7IFN0YWtpbmdSYXdNc2dBdXRob3JpemVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nUmF3TXNnQXV0aG9yaXplQnVpbGRlcic7XG5leHBvcnQgeyBTdGFraW5nV2l0aGRyYXdCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nV2l0aGRyYXdCdWlsZGVyJztcbmV4cG9ydCB7IFRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90b2tlblRyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5leHBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2ZlckJ1aWxkZXJWMiB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyVjInO1xuZXhwb3J0IHsgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIH0gZnJvbSAnLi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgSW50ZXJmYWNlLCBVdGlscyB9O1xuZXhwb3J0IHsgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgeyBleHBsYWluU29sVHJhbnNhY3Rpb24sIEV4cGxhaW5UcmFuc2FjdGlvbldhc21PcHRpb25zIH0gZnJvbSAnLi9leHBsYWluVHJhbnNhY3Rpb25XYXNtJztcbmV4cG9ydCB7XG4gIE1pbnRFeHRlbnNpb25SZWFkUmVzdWx0LFxuICBleHRlbnNpb25UeXBlTmFtZXMsXG4gIG1hcE1vZGVsZWRFeHRlbnNpb25zLFxuICBwYXJzZU1pbnRFeHRlbnNpb25zLFxuICByZWFkTWludEV4dGVuc2lvbnMsXG59IGZyb20gJy4vdG9rZW5FeHRlbnNpb25zJztcbmV4cG9ydCB7XG4gIFJlc29sdmVQZXJtaXNzaW9ubGVzc1RoYXdSZXN1bHQsXG4gIFNvbEFjY291bnRGZXRjaGVyLFxuICBidWlsZFNvbEFjY291bnRDb25uZWN0aW9uLFxuICByZXNvbHZlUGVybWlzc2lvbmxlc3NUaGF3LFxuICByZXNvbHZlVHJhbnNmZXJIb29rQWNjb3VudHMsXG59IGZyb20gJy4vdG9rZW4yMDIyUmVzb2x2ZSc7XG5leHBvcnQgeyByYXdUb1VpQW1vdW50U3RyaW5nLCB1aUFtb3VudFRvUmF3IH0gZnJvbSAnLi9zY2FsZWRVaUFtb3VudCc7XG4iXX0=
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Copyright 2026 BitGo, Inc. All Rights Reserved.
3
+ */
4
+ /**
5
+ * Convert a raw base-unit amount to its scaled UI denomination.
6
+ *
7
+ * Exact by construction: the result is `raw * multiplier / 10^decimals`, whose
8
+ * exact decimal expansion never exceeds `multiplier scale + decimals` fraction
9
+ * digits, so no rounding ever occurs.
10
+ *
11
+ * @param raw Amount in raw base units (integer, >= 0)
12
+ * @param multiplier The mint's UiAmountMultiplier as a decimal string (> 0)
13
+ * @param decimals The mint's decimals (>= 0)
14
+ * @returns The exact UI amount as a decimal string
15
+ * @throws if any argument is malformed, the multiplier is not positive, or raw/decimals are negative
16
+ */
17
+ export declare function rawToUiAmountString(raw: bigint, multiplier: string, decimals: number): string;
18
+ /**
19
+ * Convert a scaled UI denomination to raw base units. Inverse of
20
+ * {@link rawToUiAmountString}: flooring an exact ui string reproduces the
21
+ * original raw amount.
22
+ *
23
+ * @param uiAmount The UI amount as a decimal string (>= 0)
24
+ * @param multiplier The mint's UiAmountMultiplier as a decimal string (> 0)
25
+ * @param decimals The mint's decimals (>= 0)
26
+ * @returns The raw amount in base units, floored to the integer unit
27
+ * @throws if any argument is malformed, the ui amount is negative, or the multiplier is not positive
28
+ */
29
+ export declare function uiAmountToRaw(uiAmount: string, multiplier: string, decimals: number): bigint;
30
+ //# sourceMappingURL=scaledUiAmount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaledUiAmount.d.ts","sourceRoot":"","sources":["../../../../src/lib/scaledUiAmount.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2DH;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB5F"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2026 BitGo, Inc. All Rights Reserved.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.rawToUiAmountString = rawToUiAmountString;
7
+ exports.uiAmountToRaw = uiAmountToRaw;
8
+ const DECIMAL_LITERAL_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/;
9
+ /**
10
+ * Parse an exact decimal string into scaled-integer parts. Rejects scientific
11
+ * notation, empty strings, NaN/Infinity, and non-numeric input.
12
+ *
13
+ * @param value The decimal literal, e.g. "0.001"; "1e-9" must be written as "0.000000001"
14
+ */
15
+ function parseDecimal(value, what) {
16
+ if (typeof value !== 'string' || !DECIMAL_LITERAL_PATTERN.test(value)) {
17
+ throw new Error(`Invalid ${what} '${value}': expected a finite decimal string`);
18
+ }
19
+ const negative = value.startsWith('-');
20
+ const unsigned = negative || value.startsWith('+') ? value.slice(1) : value;
21
+ const [intPart = '0', fracPart = ''] = unsigned.split('.');
22
+ const digits = BigInt(intPart + fracPart || '0');
23
+ return { negative, digits, scale: fracPart.length };
24
+ }
25
+ /** Render ±digits/10^scale as a normalized decimal string (no trailing zeros, no "-0"). */
26
+ function toDecimalString({ negative, digits, scale }) {
27
+ if (digits === 0n) {
28
+ return '0';
29
+ }
30
+ let s = digits.toString().padStart(scale + 1, '0');
31
+ if (scale > 0) {
32
+ s = `${s.slice(0, -scale)}.${s.slice(-scale)}`;
33
+ s = s.replace(/0+$/, '').replace(/\.$/, '');
34
+ }
35
+ return negative ? `-${s}` : s;
36
+ }
37
+ /**
38
+ * Convert a raw base-unit amount to its scaled UI denomination.
39
+ *
40
+ * Exact by construction: the result is `raw * multiplier / 10^decimals`, whose
41
+ * exact decimal expansion never exceeds `multiplier scale + decimals` fraction
42
+ * digits, so no rounding ever occurs.
43
+ *
44
+ * @param raw Amount in raw base units (integer, >= 0)
45
+ * @param multiplier The mint's UiAmountMultiplier as a decimal string (> 0)
46
+ * @param decimals The mint's decimals (>= 0)
47
+ * @returns The exact UI amount as a decimal string
48
+ * @throws if any argument is malformed, the multiplier is not positive, or raw/decimals are negative
49
+ */
50
+ function rawToUiAmountString(raw, multiplier, decimals) {
51
+ if (typeof raw !== 'bigint') {
52
+ throw new Error(`Invalid raw amount '${String(raw)}': expected a BigInt of base units`);
53
+ }
54
+ if (raw < 0n) {
55
+ throw new Error(`Invalid raw amount '${raw}': must be non-negative`);
56
+ }
57
+ if (!Number.isInteger(decimals) || decimals < 0) {
58
+ throw new Error(`Invalid decimals '${decimals}': must be a non-negative integer`);
59
+ }
60
+ const mult = parseDecimal(multiplier, 'multiplier');
61
+ if (mult.negative || mult.digits === 0n) {
62
+ throw new Error(`Invalid multiplier '${multiplier}': must be positive`);
63
+ }
64
+ // ui = raw * (multDigits / 10^multScale) / 10^decimals
65
+ // = (raw * multDigits) / 10^(multScale + decimals) — exact, terminating expansion
66
+ const numerator = raw * mult.digits;
67
+ const fractionDigits = mult.scale + decimals;
68
+ const denominator = 10n ** BigInt(fractionDigits);
69
+ const quotient = numerator / denominator;
70
+ const remainder = numerator % denominator;
71
+ if (remainder === 0n) {
72
+ return toDecimalString({ negative: false, digits: quotient, scale: 0 });
73
+ }
74
+ // The denominator IS 10^fractionDigits, so the exact fraction digits are `remainder`
75
+ // zero-padded to fractionDigits — no long division needed.
76
+ return toDecimalString({
77
+ negative: false,
78
+ digits: quotient * 10n ** BigInt(fractionDigits) + remainder,
79
+ scale: fractionDigits,
80
+ });
81
+ }
82
+ /**
83
+ * Convert a scaled UI denomination to raw base units. Inverse of
84
+ * {@link rawToUiAmountString}: flooring an exact ui string reproduces the
85
+ * original raw amount.
86
+ *
87
+ * @param uiAmount The UI amount as a decimal string (>= 0)
88
+ * @param multiplier The mint's UiAmountMultiplier as a decimal string (> 0)
89
+ * @param decimals The mint's decimals (>= 0)
90
+ * @returns The raw amount in base units, floored to the integer unit
91
+ * @throws if any argument is malformed, the ui amount is negative, or the multiplier is not positive
92
+ */
93
+ function uiAmountToRaw(uiAmount, multiplier, decimals) {
94
+ if (!Number.isInteger(decimals) || decimals < 0) {
95
+ throw new Error(`Invalid decimals '${decimals}': must be a non-negative integer`);
96
+ }
97
+ const ui = parseDecimal(uiAmount, 'uiAmount');
98
+ if (ui.negative) {
99
+ throw new Error(`Invalid uiAmount '${uiAmount}': must be non-negative`);
100
+ }
101
+ const mult = parseDecimal(multiplier, 'multiplier');
102
+ if (mult.negative || mult.digits === 0n) {
103
+ throw new Error(`Invalid multiplier '${multiplier}': must be positive`);
104
+ }
105
+ // ui = uiDigits / 10^uiScale; multiplier = multDigits / 10^multScale
106
+ // raw = (uiDigits / 10^uiScale) * 10^decimals * (10^multScale / multDigits)
107
+ // = (uiDigits * 10^(decimals + multScale)) / (multDigits * 10^uiScale)
108
+ const numerator = ui.digits * 10n ** BigInt(decimals + mult.scale);
109
+ const denominator = mult.digits * 10n ** BigInt(ui.scale);
110
+ return numerator / denominator; // floor — raw base units are integers
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGVkVWlBbW91bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NjYWxlZFVpQW1vdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7QUF3RUgsa0RBaUNDO0FBYUQsc0NBbUJDO0FBOUdELE1BQU0sdUJBQXVCLEdBQUcsZ0NBQWdDLENBQUM7QUFFakU7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBWTtJQUMvQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssS0FBSyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDNUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBRUQsMkZBQTJGO0FBQzNGLFNBQVMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxL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QU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsbUNBQW1DLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixRQUFRLHlCQUF5QixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELE9BQU8sU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLHNDQUFzQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNiBCaXRHbywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbi8qKlxuICogU29sYW5hIFRva2VuLTIwMjIgU2NhbGVkVWlBbW91bnQgY29udmVyc2lvbiB1dGlsaXRpZXMgKENTSExELTE2ODgpLlxuICpcbiAqIEEgc2NhbGVkLVVJIG1pbnQgY2FycmllcyBhIGBVaUFtb3VudE11bHRpcGxpZXJgLiBPbi1jaGFpbiAoYW5kIHRoZXJlZm9yZSBpblxuICogZXZlcnkgc2VuZC9idWlsZCBwYXRoIG9mIHRoaXMgU0RLKSBhbW91bnRzIGFyZSByYXcgYmFzZSB1bml0czsgdGhlIFVJXG4gKiBkZW5vbWluYXRpb24gaXMgYHJhdyAqIG11bHRpcGxpZXIgLyAxMF5kZWNpbWFsc2AsIG1hdGNoaW5nIHRoZSBTUExcbiAqIHRva2VuLTIwMjIgU2NhbGVkVWlBbW91bnQgZXh0ZW5zaW9uIHNlbWFudGljcy4gVGhlc2UgdXRpbGl0aWVzIGV4aXN0IGZvclxuICogZGlzcGxheSwgcmVjb25jaWxpYXRpb24sIGFuZCBiYWxhbmNlIGNvbnZlcnNpb25zIG9ubHkg4oCUIHRoZXkgbmV2ZXIgZmVlZFxuICogdHJhbnNhY3Rpb24gYnVpbGRpbmcsIHdoaWNoIHN0YXlzIHJhdy1kZW5vbWluYXRlZC5cbiAqXG4gKiBBbGwgYXJpdGhtZXRpYyBpcyBleGFjdCBzY2FsZWQtaW50ZWdlciAoQmlnSW50KSBtYXRoIOKAlCBmbG9hdHMgYXJlIG5ldmVyIHVzZWQsXG4gKiBzbyBjb252ZXJzaW9ucyBhcmUgZGV0ZXJtaW5pc3RpYyBhY3Jvc3MgcnVudGltZXMgYW5kIGxvc2Ugbm8gcHJlY2lzaW9uOlxuICogYHJhd1RvVWlBbW91bnRTdHJpbmdgIGlzIGFsd2F5cyBleGFjdCAodGhlIGRpdmlzb3IgaXMgYSBwb3dlciBvZiB0ZW4sIHNvIHRoZVxuICogZXhhY3QgZXhwYW5zaW9uIGZpdHMgd2l0aGluIGBtdWx0aXBsaWVyU2NhbGUgKyBkZWNpbWFsc2AgZnJhY3Rpb24gZGlnaXRzKS5cbiAqIGB1aUFtb3VudFRvUmF3YCBmbG9vcnMgdG8gYW4gaW50ZWdlciBudW1iZXIgb2YgYmFzZSB1bml0cyBhbmQgaXMgdGhlIGV4YWN0XG4gKiBpbnZlcnNlIG9mIGByYXdUb1VpQW1vdW50U3RyaW5nYCB3aGVuZXZlciB0aGUgdWkgc3RyaW5nIGlzIGV4YWN0LlxuICovXG5cbi8qKiBTaWduaWZpY2FuZCBhbmQgc2NhbGUgb2YgYSBkZWNpbWFsIGxpdGVyYWw6IHZhbHVlID0gwrFkaWdpdHMgLyAxMF5zY2FsZS4gKi9cbmludGVyZmFjZSBQYXJzZWREZWNpbWFsIHtcbiAgbmVnYXRpdmU6IGJvb2xlYW47XG4gIGRpZ2l0czogYmlnaW50O1xuICBzY2FsZTogbnVtYmVyO1xufVxuXG5jb25zdCBERUNJTUFMX0xJVEVSQUxfUEFUVEVSTiA9IC9eWystXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspJC87XG5cbi8qKlxuICogUGFyc2UgYW4gZXhhY3QgZGVjaW1hbCBzdHJpbmcgaW50byBzY2FsZWQtaW50ZWdlciBwYXJ0cy4gUmVqZWN0cyBzY2llbnRpZmljXG4gKiBub3RhdGlvbiwgZW1wdHkgc3RyaW5ncywgTmFOL0luZmluaXR5LCBhbmQgbm9uLW51bWVyaWMgaW5wdXQuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSBkZWNpbWFsIGxpdGVyYWwsIGUuZy4gXCIwLjAwMVwiOyBcIjFlLTlcIiBtdXN0IGJlIHdyaXR0ZW4gYXMgXCIwLjAwMDAwMDAwMVwiXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGVjaW1hbCh2YWx1ZTogc3RyaW5nLCB3aGF0OiBzdHJpbmcpOiBQYXJzZWREZWNpbWFsIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIURFQ0lNQUxfTElURVJBTF9QQVRURVJOLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7d2hhdH0gJyR7dmFsdWV9JzogZXhwZWN0ZWQgYSBmaW5pdGUgZGVjaW1hbCBzdHJpbmdgKTtcbiAgfVxuICBjb25zdCBuZWdhdGl2ZSA9IHZhbHVlLnN0YXJ0c1dpdGgoJy0nKTtcbiAgY29uc3QgdW5zaWduZWQgPSBuZWdhdGl2ZSB8fCB2YWx1ZS5zdGFydHNXaXRoKCcrJykgPyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlO1xuICBjb25zdCBbaW50UGFydCA9ICcwJywgZnJhY1BhcnQgPSAnJ10gPSB1bnNpZ25lZC5zcGxpdCgnLicpO1xuICBjb25zdCBkaWdpdHMgPSBCaWdJbnQoaW50UGFydCArIGZyYWNQYXJ0IHx8ICcwJyk7XG4gIHJldHVybiB7IG5lZ2F0aXZlLCBkaWdpdHMsIHNjYWxlOiBmcmFjUGFydC5sZW5ndGggfTtcbn1cblxuLyoqIFJlbmRlciDCsWRpZ2l0cy8xMF5zY2FsZSBhcyBhIG5vcm1hbGl6ZWQgZGVjaW1hbCBzdHJpbmcgKG5vIHRyYWlsaW5nIHplcm9zLCBubyBcIi0wXCIpLiAqL1xuZnVuY3Rpb24gdG9EZWNpbWFsU3RyaW5nKHsgbmVnYXRpdmUsIGRpZ2l0cywgc2NhbGUgfTogUGFyc2VkRGVjaW1hbCk6IHN0cmluZyB7XG4gIGlmIChkaWdpdHMgPT09IDBuKSB7XG4gICAgcmV0dXJuICcwJztcbiAgfVxuICBsZXQgcyA9IGRpZ2l0cy50b1N0cmluZygpLnBhZFN0YXJ0KHNjYWxlICsgMSwgJzAnKTtcbiAgaWYgKHNjYWxlID4gMCkge1xuICAgIHMgPSBgJHtzLnNsaWNlKDAsIC1zY2FsZSl9LiR7cy5zbGljZSgtc2NhbGUpfWA7XG4gICAgcyA9IHMucmVwbGFjZSgvMCskLywgJycpLnJlcGxhY2UoL1xcLiQvLCAnJyk7XG4gIH1cbiAgcmV0dXJuIG5lZ2F0aXZlID8gYC0ke3N9YCA6IHM7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHJhdyBiYXNlLXVuaXQgYW1vdW50IHRvIGl0cyBzY2FsZWQgVUkgZGVub21pbmF0aW9uLlxuICpcbiAqIEV4YWN0IGJ5IGNvbnN0cnVjdGlvbjogdGhlIHJlc3VsdCBpcyBgcmF3ICogbXVsdGlwbGllciAvIDEwXmRlY2ltYWxzYCwgd2hvc2VcbiAqIGV4YWN0IGRlY2ltYWwgZXhwYW5zaW9uIG5ldmVyIGV4Y2VlZHMgYG11bHRpcGxpZXIgc2NhbGUgKyBkZWNpbWFsc2AgZnJhY3Rpb25cbiAqIGRpZ2l0cywgc28gbm8gcm91bmRpbmcgZXZlciBvY2N1cnMuXG4gKlxuICogQHBhcmFtIHJhdyBBbW91bnQgaW4gcmF3IGJhc2UgdW5pdHMgKGludGVnZXIsID49IDApXG4gKiBAcGFyYW0gbXVsdGlwbGllciBUaGUgbWludCdzIFVpQW1vdW50TXVsdGlwbGllciBhcyBhIGRlY2ltYWwgc3RyaW5nICg+IDApXG4gKiBAcGFyYW0gZGVjaW1hbHMgVGhlIG1pbnQncyBkZWNpbWFscyAoPj0gMClcbiAqIEByZXR1cm5zIFRoZSBleGFjdCBVSSBhbW91bnQgYXMgYSBkZWNpbWFsIHN0cmluZ1xuICogQHRocm93cyBpZiBhbnkgYXJndW1lbnQgaXMgbWFsZm9ybWVkLCB0aGUgbXVsdGlwbGllciBpcyBub3QgcG9zaXRpdmUsIG9yIHJhdy9kZWNpbWFscyBhcmUgbmVnYXRpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhd1RvVWlBbW91bnRTdHJpbmcocmF3OiBiaWdpbnQsIG11bHRpcGxpZXI6IHN0cmluZywgZGVjaW1hbHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnYmlnaW50Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYXcgYW1vdW50ICcke1N0cmluZyhyYXcpfSc6IGV4cGVjdGVkIGEgQmlnSW50IG9mIGJhc2UgdW5pdHNgKTtcbiAgfVxuICBpZiAocmF3IDwgMG4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmF3IGFtb3VudCAnJHtyYXd9JzogbXVzdCBiZSBub24tbmVnYXRpdmVgKTtcbiAgfVxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGVjaW1hbHMpIHx8IGRlY2ltYWxzIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZWNpbWFscyAnJHtkZWNpbWFsc30nOiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgKTtcbiAgfVxuICBjb25zdCBtdWx0ID0gcGFyc2VEZWNpbWFsKG11bHRpcGxpZXIsICdtdWx0aXBsaWVyJyk7XG4gIGlmIChtdWx0Lm5lZ2F0aXZlIHx8IG11bHQuZGlnaXRzID09PSAwbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtdWx0aXBsaWVyICcke211bHRpcGxpZXJ9JzogbXVzdCBiZSBwb3NpdGl2ZWApO1xuICB9XG5cbiAgLy8gdWkgPSByYXcgKiAobXVsdERpZ2l0cyAvIDEwXm11bHRTY2FsZSkgLyAxMF5kZWNpbWFsc1xuICAvLyAgICA9IChyYXcgKiBtdWx0RGlnaXRzKSAvIDEwXihtdWx0U2NhbGUgKyBkZWNpbWFscykgICDigJQgZXhhY3QsIHRlcm1pbmF0aW5nIGV4cGFuc2lvblxuICBjb25zdCBudW1lcmF0b3IgPSByYXcgKiBtdWx0LmRpZ2l0cztcbiAgY29uc3QgZnJhY3Rpb25EaWdpdHMgPSBtdWx0LnNjYWxlICsgZGVjaW1hbHM7XG4gIGNvbnN0IGRlbm9taW5hdG9yID0gMTBuICoqIEJpZ0ludChmcmFjdGlvbkRpZ2l0cyk7XG5cbiAgY29uc3QgcXVvdGllbnQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcbiAgY29uc3QgcmVtYWluZGVyID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7XG4gIGlmIChyZW1haW5kZXIgPT09IDBuKSB7XG4gICAgcmV0dXJuIHRvRGVjaW1hbFN0cmluZyh7IG5lZ2F0aXZlOiBmYWxzZSwgZGlnaXRzOiBxdW90aWVudCwgc2NhbGU6IDAgfSk7XG4gIH1cbiAgLy8gVGhlIGRlbm9taW5hdG9yIElTIDEwXmZyYWN0aW9uRGlnaXRzLCBzbyB0aGUgZXhhY3QgZnJhY3Rpb24gZGlnaXRzIGFyZSBgcmVtYWluZGVyYFxuICAvLyB6ZXJvLXBhZGRlZCB0byBmcmFjdGlvbkRpZ2l0cyDigJQgbm8gbG9uZyBkaXZpc2lvbiBuZWVkZWQuXG4gIHJldHVybiB0b0RlY2ltYWxTdHJpbmcoe1xuICAgIG5lZ2F0aXZlOiBmYWxzZSxcbiAgICBkaWdpdHM6IHF1b3RpZW50ICogMTBuICoqIEJpZ0ludChmcmFjdGlvbkRpZ2l0cykgKyByZW1haW5kZXIsXG4gICAgc2NhbGU6IGZyYWN0aW9uRGlnaXRzLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2NhbGVkIFVJIGRlbm9taW5hdGlvbiB0byByYXcgYmFzZSB1bml0cy4gSW52ZXJzZSBvZlxuICoge0BsaW5rIHJhd1RvVWlBbW91bnRTdHJpbmd9OiBmbG9vcmluZyBhbiBleGFjdCB1aSBzdHJpbmcgcmVwcm9kdWNlcyB0aGVcbiAqIG9yaWdpbmFsIHJhdyBhbW91bnQuXG4gKlxuICogQHBhcmFtIHVpQW1vdW50IFRoZSBVSSBhbW91bnQgYXMgYSBkZWNpbWFsIHN0cmluZyAoPj0gMClcbiAqIEBwYXJhbSBtdWx0aXBsaWVyIFRoZSBtaW50J3MgVWlBbW91bnRNdWx0aXBsaWVyIGFzIGEgZGVjaW1hbCBzdHJpbmcgKD4gMClcbiAqIEBwYXJhbSBkZWNpbWFscyBUaGUgbWludCdzIGRlY2ltYWxzICg+PSAwKVxuICogQHJldHVybnMgVGhlIHJhdyBhbW91bnQgaW4gYmFzZSB1bml0cywgZmxvb3JlZCB0byB0aGUgaW50ZWdlciB1bml0XG4gKiBAdGhyb3dzIGlmIGFueSBhcmd1bWVudCBpcyBtYWxmb3JtZWQsIHRoZSB1aSBhbW91bnQgaXMgbmVnYXRpdmUsIG9yIHRoZSBtdWx0aXBsaWVyIGlzIG5vdCBwb3NpdGl2ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdWlBbW91bnRUb1Jhdyh1aUFtb3VudDogc3RyaW5nLCBtdWx0aXBsaWVyOiBzdHJpbmcsIGRlY2ltYWxzOiBudW1iZXIpOiBiaWdpbnQge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGVjaW1hbHMpIHx8IGRlY2ltYWxzIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZWNpbWFscyAnJHtkZWNpbWFsc30nOiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgKTtcbiAgfVxuICBjb25zdCB1aSA9IHBhcnNlRGVjaW1hbCh1aUFtb3VudCwgJ3VpQW1vdW50Jyk7XG4gIGlmICh1aS5uZWdhdGl2ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1aUFtb3VudCAnJHt1aUFtb3VudH0nOiBtdXN0IGJlIG5vbi1uZWdhdGl2ZWApO1xuICB9XG4gIGNvbnN0IG11bHQgPSBwYXJzZURlY2ltYWwobXVsdGlwbGllciwgJ211bHRpcGxpZXInKTtcbiAgaWYgKG11bHQubmVnYXRpdmUgfHwgbXVsdC5kaWdpdHMgPT09IDBuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG11bHRpcGxpZXIgJyR7bXVsdGlwbGllcn0nOiBtdXN0IGJlIHBvc2l0aXZlYCk7XG4gIH1cblxuICAvLyB1aSA9IHVpRGlnaXRzIC8gMTBedWlTY2FsZTsgIG11bHRpcGxpZXIgPSBtdWx0RGlnaXRzIC8gMTBebXVsdFNjYWxlXG4gIC8vIHJhdyA9ICh1aURpZ2l0cyAvIDEwXnVpU2NhbGUpICogMTBeZGVjaW1hbHMgKiAoMTBebXVsdFNjYWxlIC8gbXVsdERpZ2l0cylcbiAgLy8gICAgID0gKHVpRGlnaXRzICogMTBeKGRlY2ltYWxzICsgbXVsdFNjYWxlKSkgLyAobXVsdERpZ2l0cyAqIDEwXnVpU2NhbGUpXG4gIGNvbnN0IG51bWVyYXRvciA9IHVpLmRpZ2l0cyAqIDEwbiAqKiBCaWdJbnQoZGVjaW1hbHMgKyBtdWx0LnNjYWxlKTtcbiAgY29uc3QgZGVub21pbmF0b3IgPSBtdWx0LmRpZ2l0cyAqIDEwbiAqKiBCaWdJbnQodWkuc2NhbGUpO1xuICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7IC8vIGZsb29yIOKAlCByYXcgYmFzZSB1bml0cyBhcmUgaW50ZWdlcnNcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=scaledUiAmount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaledUiAmount.d.ts","sourceRoot":"","sources":["../../../../test/unit/scaledUiAmount.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("should");
4
+ const scaledUiAmount_1 = require("../../src/lib/scaledUiAmount");
5
+ describe('Sol ScaledUiAmount conversions', function () {
6
+ describe('rawToUiAmountString', function () {
7
+ it('converts raw to UI with multiplier 1 (identity denomination)', function () {
8
+ (0, scaledUiAmount_1.rawToUiAmountString)(1000000000n, '1', 9).should.equal('1');
9
+ (0, scaledUiAmount_1.rawToUiAmountString)(1n, '1', 9).should.equal('0.000000001');
10
+ (0, scaledUiAmount_1.rawToUiAmountString)(0n, '1', 9).should.equal('0');
11
+ });
12
+ it('converts raw to UI with multiplier 0.001', function () {
13
+ // 10^9 raw * 0.001 / 10^9 = 0.001
14
+ (0, scaledUiAmount_1.rawToUiAmountString)(1000000000n, '0.001', 9).should.equal('0.001');
15
+ // 1 raw * 0.001 / 10^9 = 10^-12
16
+ (0, scaledUiAmount_1.rawToUiAmountString)(1n, '0.001', 9).should.equal('0.000000000001');
17
+ });
18
+ it('converts raw to UI with multiplier 1e-9 (ticket extreme)', function () {
19
+ // 10^9 raw * 10^-9 / 10^9 = 10^-9
20
+ (0, scaledUiAmount_1.rawToUiAmountString)(1000000000n, '0.000000001', 9).should.equal('0.000000001');
21
+ (0, scaledUiAmount_1.rawToUiAmountString)(1n, '0.000000001', 9).should.equal('0.000000000000000001');
22
+ });
23
+ it('handles multipliers greater than 1', function () {
24
+ // 2 raw * 1.5 / 10^2 = 0.03
25
+ (0, scaledUiAmount_1.rawToUiAmountString)(2n, '1.5', 2).should.equal('0.03');
26
+ // 100 raw * 12.5 / 10^2 = 12.5
27
+ (0, scaledUiAmount_1.rawToUiAmountString)(100n, '12.5', 2).should.equal('12.5');
28
+ });
29
+ it('normalizes trailing zeros', function () {
30
+ (0, scaledUiAmount_1.rawToUiAmountString)(500000000n, '1', 9).should.equal('0.5');
31
+ (0, scaledUiAmount_1.rawToUiAmountString)(1230000000n, '1', 9).should.equal('1.23');
32
+ });
33
+ it('rejects malformed inputs', function () {
34
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(-1n, '1', 9)).should.throw(/must be non-negative/);
35
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, '0', 9)).should.throw(/must be positive/);
36
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, '-0.001', 9)).should.throw(/must be positive/);
37
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, '1e-9', 9)).should.throw(/finite decimal string/);
38
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, 'abc', 9)).should.throw(/finite decimal string/);
39
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, 'NaN', 9)).should.throw(/finite decimal string/);
40
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, '1', -1)).should.throw(/non-negative integer/);
41
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1n, '1', 1.5)).should.throw(/non-negative integer/);
42
+ // @ts-expect-error runtime guard against non-BigInt raw
43
+ (() => (0, scaledUiAmount_1.rawToUiAmountString)(1000, '1', 9)).should.throw(/BigInt of base units/);
44
+ });
45
+ });
46
+ describe('uiAmountToRaw', function () {
47
+ it('converts UI to raw with multiplier 1', function () {
48
+ (0, scaledUiAmount_1.uiAmountToRaw)('1', '1', 9).should.equal(1000000000n);
49
+ (0, scaledUiAmount_1.uiAmountToRaw)('0.000000001', '1', 9).should.equal(1n);
50
+ (0, scaledUiAmount_1.uiAmountToRaw)('0', '1', 9).should.equal(0n);
51
+ });
52
+ it('converts UI to raw with multiplier 0.001', function () {
53
+ (0, scaledUiAmount_1.uiAmountToRaw)('0.001', '0.001', 9).should.equal(1000000000n);
54
+ (0, scaledUiAmount_1.uiAmountToRaw)('0.000000000001', '0.001', 9).should.equal(1n);
55
+ });
56
+ it('converts UI to raw with multiplier 1e-9 (ticket extreme)', function () {
57
+ (0, scaledUiAmount_1.uiAmountToRaw)('0.000000001', '0.000000001', 9).should.equal(1000000000n);
58
+ (0, scaledUiAmount_1.uiAmountToRaw)('0.000000000000000001', '0.000000001', 9).should.equal(1n);
59
+ });
60
+ it('floors to integer base units', function () {
61
+ // 1.0000000005 UI * 10^9 = 1000000000.5 raw -> floors to 1000000000
62
+ (0, scaledUiAmount_1.uiAmountToRaw)('1.0000000005', '1', 9).should.equal(1000000000n);
63
+ });
64
+ it('rejects malformed inputs', function () {
65
+ (() => (0, scaledUiAmount_1.uiAmountToRaw)('-1', '1', 9)).should.throw(/must be non-negative/);
66
+ (() => (0, scaledUiAmount_1.uiAmountToRaw)('1', '0', 9)).should.throw(/must be positive/);
67
+ (() => (0, scaledUiAmount_1.uiAmountToRaw)('1e-9', '1', 9)).should.throw(/finite decimal string/);
68
+ (() => (0, scaledUiAmount_1.uiAmountToRaw)('1', '1', -1)).should.throw(/non-negative integer/);
69
+ });
70
+ });
71
+ describe('round-trip exactness at multiplier extremes', function () {
72
+ const multipliers = ['1', '0.001', '0.000000001', '1.5', '12.5'];
73
+ const rawAmounts = [
74
+ 0n,
75
+ 1n,
76
+ 999n,
77
+ 1000n,
78
+ 123456789n,
79
+ 1000000000n,
80
+ 999999999999999999n,
81
+ 10n ** 27n, // > u64 max supply, still exact
82
+ ];
83
+ for (const multiplier of multipliers) {
84
+ it(`round-trips every raw amount through UI at multiplier ${multiplier}`, function () {
85
+ for (const raw of rawAmounts) {
86
+ const ui = (0, scaledUiAmount_1.rawToUiAmountString)(raw, multiplier, 9);
87
+ (0, scaledUiAmount_1.uiAmountToRaw)(ui, multiplier, 9).should.equal(raw);
88
+ }
89
+ });
90
+ }
91
+ it('round-trips at decimals other than 9', function () {
92
+ for (const decimals of [0, 2, 6, 18]) {
93
+ for (const raw of rawAmounts) {
94
+ const ui = (0, scaledUiAmount_1.rawToUiAmountString)(raw, '0.001', decimals);
95
+ (0, scaledUiAmount_1.uiAmountToRaw)(ui, '0.001', decimals).should.equal(raw);
96
+ }
97
+ }
98
+ });
99
+ });
100
+ });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGVkVWlBbW91bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvc2NhbGVkVWlBbW91bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsaUVBQWtGO0FBRWxGLFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRTtJQUN6QyxRQUFRLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDhEQUE4RCxFQUFFO1lBQ2pFLElBQUEsb0NBQW1CLEVBQUMsV0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELElBQUEsb0NBQW1CLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVELElBQUEsb0NBQW1CLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFO1lBQzdDLGtDQUFrQztZQUNsQyxJQUFBLG9DQUFtQixFQUFDLFdBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxnQ0FBZ0M7WUFDaEMsSUFBQSxvQ0FBbUIsRUFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRTtZQUM3RCxrQ0FBa0M7WUFDbEMsSUFBQSxvQ0FBbUIsRUFBQyxXQUFjLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxD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LFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxFQUFFLENBQUMseURBQXlELFVBQVUsRUFBRSxFQUFFO2dCQUN4RSxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFBLG9DQUFtQixFQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25ELElBQUEsOEJBQWEsRUFBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7WUFDekMsS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUEsb0NBQW1CLEVBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDdkQsSUFBQSw4QkFBYSxFQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyByYXdUb1VpQW1vdW50U3RyaW5nLCB1aUFtb3VudFRvUmF3IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9zY2FsZWRVaUFtb3VudCc7XG5cbmRlc2NyaWJlKCdTb2wgU2NhbGVkVWlBbW91bnQgY29udmVyc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdyYXdUb1VpQW1vdW50U3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb252ZXJ0cyByYXcgdG8gVUkgd2l0aCBtdWx0aXBsaWVyIDEgKGlkZW50aXR5IGRlbm9taW5hdGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDFfMDAwXzAwMF8wMDBuLCAnMScsIDkpLnNob3VsZC5lcXVhbCgnMScpO1xuICAgICAgcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJzEnLCA5KS5zaG91bGQuZXF1YWwoJzAuMDAwMDAwMDAxJyk7XG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDBuLCAnMScsIDkpLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIHJhdyB0byBVSSB3aXRoIG11bHRpcGxpZXIgMC4wMDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAxMF45IHJhdyAqIDAuMDAxIC8gMTBeOSA9IDAuMDAxXG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDFfMDAwXzAwMF8wMDBuLCAnMC4wMDEnLCA5KS5zaG91bGQuZXF1YWwoJzAuMDAxJyk7XG4gICAgICAvLyAxIHJhdyAqIDAuMDAxIC8gMTBeOSA9IDEwXi0xMlxuICAgICAgcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJzAuMDAxJywgOSkuc2hvdWxkLmVxdWFsKCcwLjAwMDAwMDAwMDAwMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIHJhdyB0byBVSSB3aXRoIG11bHRpcGxpZXIgMWUtOSAodGlja2V0IGV4dHJlbWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gMTBeOSByYXcgKiAxMF4tOSAvIDEwXjkgPSAxMF4tOVxuICAgICAgcmF3VG9VaUFtb3VudFN0cmluZygxXzAwMF8wMDBfMDAwbiwgJzAuMDAwMDAwMDAxJywgOSkuc2hvdWxkLmVxdWFsKCcwLjAwMDAwMDAwMScpO1xuICAgICAgcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJzAuMDAwMDAwMDAxJywgOSkuc2hvdWxkLmVxdWFsKCcwLjAwMDAwMDAwMDAwMDAwMDAwMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbXVsdGlwbGllcnMgZ3JlYXRlciB0aGFuIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAyIHJhdyAqIDEuNSAvIDEwXjIgPSAwLjAzXG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDJuLCAnMS41JywgMikuc2hvdWxkLmVxdWFsKCcwLjAzJyk7XG4gICAgICAvLyAxMDAgcmF3ICogMTIuNSAvIDEwXjIgPSAxMi41XG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDEwMG4sICcxMi41JywgMikuc2hvdWxkLmVxdWFsKCcxMi41Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbm9ybWFsaXplcyB0cmFpbGluZyB6ZXJvcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJhd1RvVWlBbW91bnRTdHJpbmcoNTAwXzAwMF8wMDBuLCAnMScsIDkpLnNob3VsZC5lcXVhbCgnMC41Jyk7XG4gICAgICByYXdUb1VpQW1vdW50U3RyaW5nKDFfMjMwXzAwMF8wMDBuLCAnMScsIDkpLnNob3VsZC5lcXVhbCgnMS4yMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiByYXdUb1VpQW1vdW50U3RyaW5nKC0xbiwgJzEnLCA5KSkuc2hvdWxkLnRocm93KC9tdXN0IGJlIG5vbi1uZWdhdGl2ZS8pO1xuICAgICAgKCgpID0+IHJhd1RvVWlBbW91bnRTdHJpbmcoMW4sICcwJywgOSkpLnNob3VsZC50aHJvdygvbXVzdCBiZSBwb3NpdGl2ZS8pO1xuICAgICAgKCgpID0+IHJhd1RvVWlBbW91bnRTdHJpbmcoMW4sICctMC4wMDEnLCA5KSkuc2hvdWxkLnRocm93KC9tdXN0IGJlIHBvc2l0aXZlLyk7XG4gICAgICAoKCkgPT4gcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJzFlLTknLCA5KSkuc2hvdWxkLnRocm93KC9maW5pdGUgZGVjaW1hbCBzdHJpbmcvKTtcbiAgICAgICgoKSA9PiByYXdUb1VpQW1vdW50U3RyaW5nKDFuLCAnYWJjJywgOSkpLnNob3VsZC50aHJvdygvZmluaXRlIGRlY2ltYWwgc3RyaW5nLyk7XG4gICAgICAoKCkgPT4gcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJ05hTicsIDkpKS5zaG91bGQudGhyb3coL2Zpbml0ZSBkZWNpbWFsIHN0cmluZy8pO1xuICAgICAgKCgpID0+IHJhd1RvVWlBbW91bnRTdHJpbmcoMW4sICcxJywgLTEpKS5zaG91bGQudGhyb3coL25vbi1uZWdhdGl2ZSBpbnRlZ2VyLyk7XG4gICAgICAoKCkgPT4gcmF3VG9VaUFtb3VudFN0cmluZygxbiwgJzEnLCAxLjUpKS5zaG91bGQudGhyb3coL25vbi1uZWdhdGl2ZSBpbnRlZ2VyLyk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHJ1bnRpbWUgZ3VhcmQgYWdhaW5zdCBub24tQmlnSW50IHJhd1xuICAgICAgKCgpID0+IHJhd1RvVWlBbW91bnRTdHJpbmcoMTAwMCwgJzEnLCA5KSkuc2hvdWxkLnRocm93KC9CaWdJbnQgb2YgYmFzZSB1bml0cy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndWlBbW91bnRUb1JhdycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29udmVydHMgVUkgdG8gcmF3IHdpdGggbXVsdGlwbGllciAxJywgZnVuY3Rpb24gKCkge1xuICAgICAgdWlBbW91bnRUb1JhdygnMScsICcxJywgOSkuc2hvdWxkLmVxdWFsKDFfMDAwXzAwMF8wMDBuKTtcbiAgICAgIHVpQW1vdW50VG9SYXcoJzAuMDAwMDAwMDAxJywgJzEnLCA5KS5zaG91bGQuZXF1YWwoMW4pO1xuICAgICAgdWlBbW91bnRUb1JhdygnMCcsICcxJywgOSkuc2hvdWxkLmVxdWFsKDBuKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBVSSB0byByYXcgd2l0aCBtdWx0aXBsaWVyIDAuMDAxJywgZnVuY3Rpb24gKCkge1xuICAgICAgdWlBbW91bnRUb1JhdygnMC4wMDEnLCAnMC4wMDEnLCA5KS5zaG91bGQuZXF1YWwoMV8wMDBfMDAwXzAwMG4pO1xuICAgICAgdWlBbW91bnRUb1JhdygnMC4wMDAwMDAwMDAwMDEnLCAnMC4wMDEnLCA5KS5zaG91bGQuZXF1YWwoMW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIFVJIHRvIHJhdyB3aXRoIG11bHRpcGxpZXIgMWUtOSAodGlja2V0IGV4dHJlbWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgdWlBbW91bnRUb1JhdygnMC4wMDAwMDAwMDEnLCAnMC4wMDAwMDAwMDEnLCA5KS5zaG91bGQuZXF1YWwoMV8wMDBfMDAwXzAwMG4pO1xuICAgICAgdWlBbW91bnRUb1JhdygnMC4wMDAwMDAwMDAwMDAwMDAwMDEnLCAnMC4wMDAwMDAwMDEnLCA5KS5zaG91bGQuZXF1YWwoMW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zsb29ycyB0byBpbnRlZ2VyIGJhc2UgdW5pdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAxLjAwMDAwMDAwMDUgVUkgKiAxMF45ID0gMTAwMDAwMDAwMC41IHJhdyAtPiBmbG9vcnMgdG8gMTAwMDAwMDAwMFxuICAgICAgdWlBbW91bnRUb1JhdygnMS4wMDAwMDAwMDA1JywgJzEnLCA5KS5zaG91bGQuZXF1YWwoMV8wMDBfMDAwXzAwMG4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiB1aUFtb3VudFRvUmF3KCctMScsICcxJywgOSkpLnNob3VsZC50aHJvdygvbXVzdCBiZSBub24tbmVnYXRpdmUvKTtcbiAgICAgICgoKSA9PiB1aUFtb3VudFRvUmF3KCcxJywgJzAnLCA5KSkuc2hvdWxkLnRocm93KC9tdXN0IGJlIHBvc2l0aXZlLyk7XG4gICAgICAoKCkgPT4gdWlBbW91bnRUb1JhdygnMWUtOScsICcxJywgOSkpLnNob3VsZC50aHJvdygvZmluaXRlIGRlY2ltYWwgc3RyaW5nLyk7XG4gICAgICAoKCkgPT4gdWlBbW91bnRUb1JhdygnMScsICcxJywgLTEpKS5zaG91bGQudGhyb3coL25vbi1uZWdhdGl2ZSBpbnRlZ2VyLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyb3VuZC10cmlwIGV4YWN0bmVzcyBhdCBtdWx0aXBsaWVyIGV4dHJlbWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11bHRpcGxpZXJzID0gWycxJywgJzAuMDAxJywgJzAuMDAwMDAwMDAxJywgJzEuNScsICcxMi41J107XG4gICAgY29uc3QgcmF3QW1vdW50cyA9IFtcbiAgICAgIDBuLFxuICAgICAgMW4sXG4gICAgICA5OTluLFxuICAgICAgMV8wMDBuLFxuICAgICAgMTIzXzQ1Nl83ODluLFxuICAgICAgMV8wMDBfMDAwXzAwMG4sXG4gICAgICA5OTlfOTk5Xzk5OV85OTlfOTk5Xzk5OW4sXG4gICAgICAxMG4gKiogMjduLCAvLyA+IHU2NCBtYXggc3VwcGx5LCBzdGlsbCBleGFjdFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IG11bHRpcGxpZXIgb2YgbXVsdGlwbGllcnMpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyBldmVyeSByYXcgYW1vdW50IHRocm91Z2ggVUkgYXQgbXVsdGlwbGllciAke211bHRpcGxpZXJ9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJhdyBvZiByYXdBbW91bnRzKSB7XG4gICAgICAgICAgY29uc3QgdWkgPSByYXdUb1VpQW1vdW50U3RyaW5nKHJhdywgbXVsdGlwbGllciwgOSk7XG4gICAgICAgICAgdWlBbW91bnRUb1Jhdyh1aSwgbXVsdGlwbGllciwgOSkuc2hvdWxkLmVxdWFsKHJhdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdyb3VuZC10cmlwcyBhdCBkZWNpbWFscyBvdGhlciB0aGFuIDknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2ltYWxzIG9mIFswLCAyLCA2LCAxOF0pIHtcbiAgICAgICAgZm9yIChjb25zdCByYXcgb2YgcmF3QW1vdW50cykge1xuICAgICAgICAgIGNvbnN0IHVpID0gcmF3VG9VaUFtb3VudFN0cmluZyhyYXcsICcwLjAwMScsIGRlY2ltYWxzKTtcbiAgICAgICAgICB1aUFtb3VudFRvUmF3KHVpLCAnMC4wMDEnLCBkZWNpbWFscykuc2hvdWxkLmVxdWFsKHJhdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==