@gvnrdao/dh-sdk 0.0.143 → 0.0.145

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -12702,51 +12702,51 @@ var init_deployment_addresses = __esm({
12702
12702
  SEPOLIA_DEPLOYMENT = {
12703
12703
  "network": "sepolia",
12704
12704
  "chainId": 11155111,
12705
- "timestamp": "2026-01-12T18:16:06.851Z",
12705
+ "timestamp": "2026-01-19T06:19:19.006Z",
12706
12706
  "deployer": "",
12707
12707
  "contracts": {
12708
- "UpgradeValidator": "0x2eE5F81f828C6AC9a8F979327680893C9fd11a2f",
12708
+ "UpgradeValidator": "0xfA8959B98a3Cd3D6dc5ee73eEaff9B31b3a0c141",
12709
12709
  "UCDToken": "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
12710
- "UCDController": "0x8956368203475DeECA21bc79F5FDeA249937E20C",
12711
- "PriceFeedConsumer": "0x6eFB125c2bbC6fAc66a765cd017940b0dE5A9A54",
12712
- "UCDMintingRewards": "0x2b51EBee507f83B59fbceeaa12AC6F725d19A33f",
12713
- "PositionManagerCoreModule": "0x3db72154cd37b64194f35a239866b0A3aADd60B5",
12714
- "TermManagerModule": "0x4Ec79Ca3ef3bAd4a474310e1228a06bCD5a8c5A6",
12715
- "LoanOperationsManagerModule": "0x2618C73d6F7Bc8eD6CB4Bcf7a769f1ce58f5158c",
12716
- "CollateralManagerModule": "0x0EDd9206D653de80Ac2df4784750b93490532104",
12717
- "LiquidationManagerModule": "0x4C4a4E308D3108c5b4fA424A30BaB1E072712B8F",
12718
- "CircuitBreakerModule": "0x6E6b14412ac206590aB810Df3b5bC7915904eC90",
12719
- "CommunityManagerModule": "0x93994136a18aFe2e9ee4C8F797408bD1a6F884b7",
12720
- "AdminModule": "0xa7b8a2b253D28689215B726889062850D44377e5",
12721
- "PositionManagerViews": "0xd954267B1f78B0aD26184A6aDdAc0C4421fA52F3",
12722
- "PositionManager": "0xf4E026844c8830a618933324aa098ce278Aa88e1",
12723
- "OperationAuthorizationRegistry": "0xfAd27cAeD4a31826CC9d8cD11F5E0995274157e0",
12724
- "PKPValidation": "0xf218a50eF679Dccd64d557ec5F935c928A334109"
12710
+ "UCDController": "0xd4558d907a61Be6096b5cF4E0958Ad5239259Fe3",
12711
+ "PriceFeedConsumer": "0x5ad368E357BaE7176df0ECCCE7a9174689aB1b88",
12712
+ "UCDMintingRewards": "0x095e6A1E1b2404c8d938D41b3eE58869dc06e55c",
12713
+ "PositionManagerCoreModule": "0x67a429758607EAF99b131F3ac1d499796F2ce22b",
12714
+ "TermManagerModule": "0xc11f70d006be21B40414A70545E15D744f92a05c",
12715
+ "LoanOperationsManagerModule": "0x34EFaF40aEd319dbA265b1989573fe4544a7d593",
12716
+ "CollateralManagerModule": "0x61c4BC075BC46ca8B9d5c754b4A2d94a56741D9D",
12717
+ "LiquidationManagerModule": "0x8ff9D8df540237BD36B1f028c5B8Dc6621278D3D",
12718
+ "CircuitBreakerModule": "0x52106B17f20F0686b753974b2732ca65107FC9a4",
12719
+ "CommunityManagerModule": "0xcbF571CD4af0C194DD6C4698a70Ad671195A2BFC",
12720
+ "AdminModule": "0x401f9f8e8748D46B63a7FDcF33e8C59AAEdEE6C1",
12721
+ "PositionManagerViews": "0x49F45Ab7E3DB572843e663CF6a8d09f95c0CC4dB",
12722
+ "PositionManager": "0x0eCD818D1Ac1BD3ab2d8ba4815974F9ed714eC1A",
12723
+ "OperationAuthorizationRegistry": "0x6d7E95eE42f41BFEdC7A84d2269A0033c7C44079",
12724
+ "PKPValidation": "0x18f6f11Fe3e9eea10106a45176C88B05733b95a8"
12725
12725
  }
12726
12726
  };
12727
12727
  SEPOLIA_CONTRACTS = {
12728
- "UpgradeValidator": "0x2eE5F81f828C6AC9a8F979327680893C9fd11a2f",
12728
+ "UpgradeValidator": "0xfA8959B98a3Cd3D6dc5ee73eEaff9B31b3a0c141",
12729
12729
  "UCDToken": "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
12730
- "UCDController": "0x8956368203475DeECA21bc79F5FDeA249937E20C",
12731
- "PriceFeedConsumer": "0x6eFB125c2bbC6fAc66a765cd017940b0dE5A9A54",
12732
- "UCDMintingRewards": "0x2b51EBee507f83B59fbceeaa12AC6F725d19A33f",
12733
- "PositionManagerCoreModule": "0x3db72154cd37b64194f35a239866b0A3aADd60B5",
12734
- "TermManagerModule": "0x4Ec79Ca3ef3bAd4a474310e1228a06bCD5a8c5A6",
12735
- "LoanOperationsManagerModule": "0x2618C73d6F7Bc8eD6CB4Bcf7a769f1ce58f5158c",
12736
- "CollateralManagerModule": "0x0EDd9206D653de80Ac2df4784750b93490532104",
12737
- "LiquidationManagerModule": "0x4C4a4E308D3108c5b4fA424A30BaB1E072712B8F",
12738
- "CircuitBreakerModule": "0x6E6b14412ac206590aB810Df3b5bC7915904eC90",
12739
- "CommunityManagerModule": "0x93994136a18aFe2e9ee4C8F797408bD1a6F884b7",
12740
- "AdminModule": "0xa7b8a2b253D28689215B726889062850D44377e5",
12741
- "PositionManagerViews": "0xd954267B1f78B0aD26184A6aDdAc0C4421fA52F3",
12742
- "PositionManager": "0xf4E026844c8830a618933324aa098ce278Aa88e1",
12743
- "OperationAuthorizationRegistry": "0xfAd27cAeD4a31826CC9d8cD11F5E0995274157e0",
12744
- "PKPValidation": "0xf218a50eF679Dccd64d557ec5F935c928A334109"
12730
+ "UCDController": "0xd4558d907a61Be6096b5cF4E0958Ad5239259Fe3",
12731
+ "PriceFeedConsumer": "0x5ad368E357BaE7176df0ECCCE7a9174689aB1b88",
12732
+ "UCDMintingRewards": "0x095e6A1E1b2404c8d938D41b3eE58869dc06e55c",
12733
+ "PositionManagerCoreModule": "0x67a429758607EAF99b131F3ac1d499796F2ce22b",
12734
+ "TermManagerModule": "0xc11f70d006be21B40414A70545E15D744f92a05c",
12735
+ "LoanOperationsManagerModule": "0x34EFaF40aEd319dbA265b1989573fe4544a7d593",
12736
+ "CollateralManagerModule": "0x61c4BC075BC46ca8B9d5c754b4A2d94a56741D9D",
12737
+ "LiquidationManagerModule": "0x8ff9D8df540237BD36B1f028c5B8Dc6621278D3D",
12738
+ "CircuitBreakerModule": "0x52106B17f20F0686b753974b2732ca65107FC9a4",
12739
+ "CommunityManagerModule": "0xcbF571CD4af0C194DD6C4698a70Ad671195A2BFC",
12740
+ "AdminModule": "0x401f9f8e8748D46B63a7FDcF33e8C59AAEdEE6C1",
12741
+ "PositionManagerViews": "0x49F45Ab7E3DB572843e663CF6a8d09f95c0CC4dB",
12742
+ "PositionManager": "0x0eCD818D1Ac1BD3ab2d8ba4815974F9ed714eC1A",
12743
+ "OperationAuthorizationRegistry": "0x6d7E95eE42f41BFEdC7A84d2269A0033c7C44079",
12744
+ "PKPValidation": "0x18f6f11Fe3e9eea10106a45176C88B05733b95a8"
12745
12745
  };
12746
12746
  LOCALHOST_DEPLOYMENT = {
12747
12747
  "network": "localhost",
12748
12748
  "chainId": 31337,
12749
- "timestamp": "2026-01-12T17:28:59.972Z",
12749
+ "timestamp": "2026-01-19T02:14:25.529Z",
12750
12750
  "deployer": "",
12751
12751
  "contracts": {
12752
12752
  "UpgradeValidator": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6",
@@ -12765,7 +12765,7 @@ var init_deployment_addresses = __esm({
12765
12765
  "PositionManagerViews": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
12766
12766
  "PositionManager": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690",
12767
12767
  "OperationAuthorizationRegistry": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf",
12768
- "PKPValidation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570"
12768
+ "PKPValidation": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D"
12769
12769
  }
12770
12770
  };
12771
12771
  LOCALHOST_CONTRACTS = {
@@ -12785,7 +12785,7 @@ var init_deployment_addresses = __esm({
12785
12785
  "PositionManagerViews": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
12786
12786
  "PositionManager": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690",
12787
12787
  "OperationAuthorizationRegistry": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf",
12788
- "PKPValidation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570"
12788
+ "PKPValidation": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D"
12789
12789
  };
12790
12790
  ALL_DEPLOYMENTS = {
12791
12791
  sepolia: SEPOLIA_DEPLOYMENT,
@@ -29392,7 +29392,7 @@ async function generateWithdrawAuthorization(positionId, amount, chainId, mode,
29392
29392
  console.log(" Recovered Address (for verification):", recovered);
29393
29393
  console.log(
29394
29394
  " Signer Matches Recovered:",
29395
- recovered.toLowerCase() === signerAddress.toLowerCase() ? "\u2705 YES" : "\u274C NO"
29395
+ recovered.toLowerCase() === signerAddress.toLowerCase() ? "\u2705 YES" : "\u274C NO (mismatch)"
29396
29396
  );
29397
29397
  return {
29398
29398
  positionId,
@@ -29404,6 +29404,49 @@ async function generateWithdrawAuthorization(positionId, amount, chainId, mode,
29404
29404
  mode
29405
29405
  };
29406
29406
  }
29407
+ async function generateBalanceConfirmationAuthorization(positionId, chainId, mode, signer) {
29408
+ const timestamp = calculateNextQuantumTimestamp();
29409
+ const caller = await signer.getAddress();
29410
+ const action = "confirm-balance";
29411
+ const actionHash = ethers_exports.utils.keccak256(ethers_exports.utils.toUtf8Bytes(action));
29412
+ const types = [
29413
+ "bytes32",
29414
+ // positionId
29415
+ "uint256",
29416
+ // timestamp
29417
+ "uint256",
29418
+ // chainId
29419
+ "address",
29420
+ // caller
29421
+ "bytes32"
29422
+ // actionHash
29423
+ ];
29424
+ const values = [positionId, timestamp, chainId, caller, actionHash];
29425
+ const messageHash = ethers_exports.utils.solidityKeccak256(types, values);
29426
+ const messageHashBytes = ethers_exports.utils.arrayify(messageHash);
29427
+ console.log(
29428
+ "[SDK Balance Confirmation Authorization] Building message hash:"
29429
+ );
29430
+ console.log(" Position ID:", positionId);
29431
+ console.log(" Timestamp:", timestamp);
29432
+ console.log(" Chain ID:", chainId);
29433
+ console.log(" Caller:", caller);
29434
+ console.log(" Action:", action);
29435
+ console.log(" Action Hash:", actionHash);
29436
+ console.log(" Message Hash (solidityKeccak256):", messageHash);
29437
+ const signature2 = await signer.signMessage(messageHashBytes);
29438
+ console.log("[SDK Balance Confirmation Authorization] Signature generated:");
29439
+ console.log(" Signature:", signature2);
29440
+ return {
29441
+ positionId,
29442
+ timestamp,
29443
+ chainId,
29444
+ caller,
29445
+ action,
29446
+ signature: signature2,
29447
+ mode
29448
+ };
29449
+ }
29407
29450
 
29408
29451
  // ../contracts/node_modules/ethers/lib.esm/_version.js
29409
29452
  var version27 = "6.15.0";
@@ -36755,6 +36798,11 @@ var _abi = [
36755
36798
  name: "InvalidAddress",
36756
36799
  type: "error"
36757
36800
  },
36801
+ {
36802
+ inputs: [],
36803
+ name: "InvalidBTCPrice",
36804
+ type: "error"
36805
+ },
36758
36806
  {
36759
36807
  inputs: [],
36760
36808
  name: "InvalidBytes32",
@@ -38620,6 +38668,11 @@ var _abi = [
38620
38668
  name: "collateralValue",
38621
38669
  type: "uint256"
38622
38670
  },
38671
+ {
38672
+ internalType: "uint256",
38673
+ name: "btcPrice",
38674
+ type: "uint256"
38675
+ },
38623
38676
  {
38624
38677
  internalType: "uint256",
38625
38678
  name: "quantumTimestamp",
@@ -38867,7 +38920,7 @@ var _abi = [
38867
38920
  type: "function"
38868
38921
  }
38869
38922
  ];
38870
- var _bytecode = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b604051615d5490816100f082396080518181816115dd01526117ed0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063018af3091461037757806301ffc9a714610372578063043fe8fc1461036d57806309d2b0ae1461036857806316d8887a1461036357806316efd9411461035e5780631732d33014610359578063248a9ca3146103545780632f2ff15d1461034f57806336568abe1461034a578063393d92cc1461034557806344c8b85214610340578063487c02b41461033b5780634a54e00a146103365780634f1ef2861461033157806352d1902d1461032c578063544ba5af146103275780635c975abb146103225780635e4936e81461031d5780636068b5d11461031857806363ba8cec146103135780636a89edad1461030e5780636b80155f1461030957806374cb36e61461030457806375b238fc146102ff5780638179dc38146102fa5780638ffee9cd146102f557806391d14854146102f05780639b9d30c1146102eb578063a217fddf146102e6578063a9a52888146102e1578063a9eadc52146102dc578063aa4fec70146102d7578063ad3cb1cc146102d2578063b1517664146102cd578063c12e1291146102c8578063c306b378146102c3578063d0e8ce82146102be578063d547741f146102b9578063d65e880d146102b4578063d6810242146102af578063d7d9f4b0146102aa578063d8dfeb45146102a5578063d9cb25a2146102a0578063dc5632531461029b578063dd74ac7a14610296578063ddccaa3a14610291578063e7f9caa51461028c578063f005e76714610287578063f2dfbf6614610282578063f2f4eb261461027d578063f851a44014610278578063fb7c6a0f146102735763ffa1ad741461026e57600080fd5b612fe7565b612fbe565b612f95565b612f6c565b612f43565b612f1a565b612e98565b612b67565b612b1c565b6129ca565b6128c6565b61289d565b612708565b61266f565b612646565b612612565b6125ae565b612515565b61246d565b61240c565b6123c5565b61238b565b612362565b61230e565b6122f2565b6122b7565b612266565b612077565b611f6a565b611ec1565b611e98565b611de0565b611ca0565b611b1e565b611a44565b6119e3565b6119b3565b611833565b6117da565b61158b565b6114b2565b6111a1565b611120565b6110f7565b6110ad565b611072565b61104c565b611011565b610fe8565b610fbf565b610ab9565b610a2d565b6109b0565b6103ae565b9181601f840112156103a9578235916001600160401b0383116103a957602083818601950101116103a957565b600080fd5b346103a95760c03660031901126103a95760843560043560243560643560443560a4356001600160401b0381116103a9576103ed90369060040161037c565b91906103f761429d565b6103ff6142c7565b33600052600a6020526040600020544311156109885761045292869161042483614317565b61042d8661432f565b6104398487898661438a565b610444600c54610a03565b61044d816143a4565b6143c5565b610465610460600454610a03565b610a03565b604051634977ff8b60e11b81526004810184905290602090829060249082905afa90811561085057600091610959575b5015610948576104ae6104a784613084565b5460ff1690565b610937576104c0610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610916575b506104fe6080820151610a03565b906101208101519561050f87612910565b61052e61052460a084015164ffffffffff1690565b64ffffffffff1690565b92825115610905576001600160a01b0316963388036108f45761055081612910565b600281141590816108df575b506108ce57816105b8869261058460206080960151828b61057e600154610a03565b9261461a565b61059d6105908a613084565b805460ff19166001179055565b60405163102f3b8760e31b81529687948594600486016131fc565b0381305afa600081600094600093610894575b5061062457856105d96132b8565b6308c379a01461060b575b6105f06105fa91613084565b805460ff19169055565b633a4f184b60e11b60005260046000fd5b6106136132d6565b156105e4576105f06105fa91613084565b92610633610460600054610a03565b803b156103a95760405163fa5fa16360e01b8152916000918391829084908290610661908d6004840161334b565b03925af180156108505761087f575b5061067f610460600054610a03565b91823b156103a95760006040518094630d7ad17360e41b82528183816106a9888d6004840161334b565b03925af1928315610850576106c39361086a575b50614754565b916106d2610460600054610a03565b803b156103a9576000604051809263b222bec960e01b82528183816106fb8a8c6004840161334b565b03925af1801561085057610855575b50610719610460600154610a03565b60405163b1d3354f60e01b8152602081600481855afa90811561085057600091610821575b5083610799575b5050610772600080516020615cff833981519152936107666105f087613084565b6040519384938461338c565b0390a34361077f3361302f565b55610788614303565b6040516001815280602081015b0390f35b6001600160a01b0316803b156103a957836000916107ce9383604051809681958294633c37699760e21b845260048401613371565b03925af19081610806575b506107ef57637101508d60e11b60005260046000fd5b610772600080516020615cff833981519152610745565b80610815600061081b936114f1565b80610fb4565b386107d9565b610843915060203d602011610849575b61083b81836114f1565b81019061335c565b3861073e565b503d610831565b613078565b806108156000610864936114f1565b3861070a565b806108156000610879936114f1565b386106bd565b80610815600061088e936114f1565b38610670565b915093506108ba915060803d6080116108c7575b6108b281836114f1565b8101906131da565b94929050909391386105cb565b503d6108a8565b63a8a168bf60e01b60005260046000fd5b600391506108ec81612910565b14153861055c565b631963d1e760e31b60005260046000fd5b636ec9be1160e01b60005260046000fd5b610931913d8091833e61092981836114f1565b810190613102565b386104f0565b6358c8679f60e01b60005260046000fd5b63559bd01960e01b60005260046000fd5b61097b915060203d602011610981575b61097381836114f1565b810190613060565b38610495565b503d610969565b633b53d1db60e01b60005260046000fd5b600435906001600160e01b0319821682036103a957565b346103a95760203660031901126103a95760206001600160e01b03196109d4610999565b16637965db0b60e01b81149081156109f2575b506040519015158152f35b6301ffc9a760e01b149050386109e7565b6001600160a01b031690565b6001600160a01b038116036103a957565b3590610a2b82610a0f565b565b346103a95760203660031901126103a957600435610a4a81610a0f565b610a52614792565b6001600160a01b03168015610aa857600b80546001600160a01b0319811683179091553391906001600160a01b03167f440ec6c0da0791f6d650579df27149ce4ffc4f4fbf63e9a8bcd45dacdbf338a2600080a4005b63e6c4247b60e01b60005260046000fd5b346103a95760a03660031901126103a9576024356004356044356064356084356001600160401b0381116103a957610af590369060040161037c565b610afd61429d565b610b056142c7565b610b0d614909565b610b1b610460600654610a03565b803b156103a95760405163102d617560e01b81526004810188905260006024820181905290918290604490829084905af1801561085057610f9f575b50610b618361432f565b8315610f8e57848491610b9393610b7a8987868661438a565b610b85600c54610a03565b610b8e816143a4565b614492565b610ba1610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610f75575b50610bdf6080820151610a03565b61012082015190610bef82612910565b610c0060408401518094898961499a565b610c10610c0c87614a99565b1590565b908115610f61575b50610f5057610c2690614b28565b60046020610c38610460600154610a03565b60405163023b2a9f60e31b815292839182905afa90811561085057600091610f31575b506040516370a0823160e01b81526001600160a01b0391909116929060208180610c88336004830161234f565b0381875afa8015610850578791600091610f12575b50108015610ea9575b610e9857600492610cb987303384614bef565b6020610cc9610460600154610a03565b60405163b1d3354f60e01b815295869182905afa93841561085057600094610e77575b5060405163095ea7b360e01b81526001600160a01b03851660048201526000602482015290602082806044810103816000855af190811561085057610d54956020938a93610e5c575b50600060405180988195829463095ea7b360e01b845260048401613371565b03925af19283156108505786602093610d7692610da696610e41575b506134b5565b93610d85610460600154610a03565b9060006040518096819582946322de8a2d60e01b84528c8c60048601611f4e565b03925af190811561085057600091610e22575b5015610e1157610df27f58c8fcf57870633c97de2da7d6e74c7544b530d15779c0d107edd9933747ec519160405191829133968361334b565b0390a3610dfd614986565b610e05614303565b60405160018152602090f35b63d0806ec760e01b60005260046000fd5b610e3b915060203d6020116109815761097381836114f1565b38610db9565b610e5790863d88116109815761097381836114f1565b610d70565b610e7290853d87116109815761097381836114f1565b610d35565b610e9191945060203d6020116108495761083b81836114f1565b9238610cec565b631e9acf1760e31b60005260046000fd5b50604051636eb1769f60e11b8152336004820152306024820152602081604481875afa8015610850578791600091610ee3575b5010610ca6565b610f05915060203d602011610f0b575b610efd81836114f1565b810190613490565b38610edc565b503d610ef3565b610f2b915060203d602011610f0b57610efd81836114f1565b38610c9d565b610f4a915060203d6020116108495761083b81836114f1565b38610c5b565b6334b110b160e11b60005260046000fd5b6001600160a01b0316331415905038610c18565b610f88913d8091833e61092981836114f1565b38610bd1565b630a0b0d7960e01b60005260046000fd5b806108156000610fae936114f1565b38610b57565b60009103126103a957565b346103a95760003660031901126103a9576020604051600080516020615b1f8339815191528152f35b346103a95760003660031901126103a9576006546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95760206040517f9792fdc19ab98adfa72ab2fa98d342618c661e01c406979c105b31eda87f5e6f8152f35b346103a95760203660031901126103a957602061106a6004356134c7565b604051908152f35b346103a95760403660031901126103a9576110ab60243560043561109582610a0f565b6110a66110a1826134c7565b6148c1565b615016565b005b346103a95760403660031901126103a9576004356024356110cd81610a0f565b336001600160a01b038216036110e6576110ab9161509c565b63334bd91960e11b60005260046000fd5b346103a95760003660031901126103a9576001546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a957600054604051631e1778ad60e11b8152600480359082015290602090829060249082906001600160a01b03165afa80156108505761079591600091611182575b506040519081529081906020820190565b61119b915060203d602011610f0b57610efd81836114f1565b38611171565b346103a95760403660031901126103a9576004356001600160401b0381116103a9578060040161018060031983360301126103a9576024356001600160401b0381116103a9576111f590369060040161037c565b6111fd61429d565b6112056142c7565b82359261121184614317565b61121e6024860135614317565b61122b6044860135614317565b6112386064860135614317565b61125761125261124b60a48801846134e8565b3691611554565b61512b565b610124850135926112678461432f565b611297611273836151d0565b868584611281600c54610a03565b9361128b856143a4565b6101048c0135946144ca565b6112a5610460600654610a03565b803b156103a9576000604051809263102d617560e01b82528183816112d860048201906000602060408401938281520152565b03925af180156108505761149d575b506112f6610460600054610a03565b604051638d34875560e01b8152600481018790529490600090869060249082905afa94851561085057600095611482575b508451156109055761133c6080860151610a03565b336001600160a01b03909116036108f457611359610c0c87614a99565b610f505760e46004970135604086015195602061137a610460600154610a03565b60405163100c48d360e21b81529a8b9182905afa988915610850576113f4996020986113c695610120956113b694600094611463575b50615262565b01516113c181612910565b61529b565b60006113d6610460600254610a03565b926040519788958694859363121f00ad60e21b855260048501613586565b03925af191821561085057600092611442575b508161142c575b6107958261141a614303565b60405191829182901515815260200190565b610c0c61143891614a99565b610f50573861140e565b61145c91925060203d6020116109815761097381836114f1565b9038611407565b61147b9194508c3d8e11610f0b57610efd81836114f1565b92386113b0565b61149691953d8091833e61092981836114f1565b9338611327565b8061081560006114ac936114f1565b386112e7565b346103a95760003660031901126103a9576004546040516001600160a01b039091168152602090f35b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761151457604052565b6114db565b60405190610a2b610140836114f1565b60405190610a2b610120836114f1565b6001600160401b03811161151457601f01601f191660200190565b92919261156082611539565b9161156e60405193846114f1565b8294818452818301116103a9578281602093846000960137010152565b60403660031901126103a9576004356115a381610a0f565b6024356001600160401b0381116103a957366023820112156103a9576115d3903690602481600401359101611554565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156117b7575b506117a657611615614800565b611623610460600754610a03565b6001600160a01b03811615610aa85760206040518092631052504160e01b82528180611652886004830161234f565b03915afa60009181611785575b506117775761166c6132b8565b6308c379a014611701575b60405162461bcd60e51b815260206004820152605160248201527f41646d696e2076616c69646174696f6e206661696c65643a20556e6b6e6f776e60448201527f206572726f7220286c696b656c7920726571756972652866616c73652920696e6064820152702076616c6964617465557067726164652960781b60848201528060a481015b0390fd5b6117096132d6565b806117145750611677565b60405178020b236b4b7103b30b634b230ba34b7b7103330b4b632b21d1603d1b60208201526116fd9161175f908290611751906039830190615302565b03601f1981018352826114f1565b60405162461bcd60e51b8152918291600483016123b4565b15610f8e576110ab91615319565b61179f91925060203d6020116109815761097381836114f1565b903861165f565b63703e46dd60e11b60005260046000fd5b600080516020615bdf833981519152546001600160a01b03161415905038611608565b346103a95760003660031901126103a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117a6576020604051600080516020615bdf8339815191528152f35b346103a95760a03660031901126103a9576004356024356064356044356001600160401b0382116103a95761186e602092369060040161037c565b93909160006084359261187f614853565b6118876142c7565b61188f614909565b61189888614317565b6118a18361432f565b6118cc818989886118b3888585615455565b6118be600c54610a03565b6118c7816143a4565b614502565b6118fc6118dd610460600354610a03565b946040519889978896879563544ba5af60e01b87528d6004880161365e565b03925af190811561085057600091611994575b508061192a575b61079590611922614986565b61141a614303565b611938610460600054610a03565b803b156103a957604051637f15208d60e01b8152926000918491829084908290611965906004830161368d565b03925af1918215610850576107959261197f575b50611916565b80610815600061198e936114f1565b38611979565b6119ad915060203d6020116109815761097381836114f1565b3861190f565b346103a95760003660031901126103a957602060ff600080516020615c7f83398151915254166040519015158152f35b346103a95760203660031901126103a957600854604051630bc926dd60e31b8152600480359082015290602090829060249082906001600160a01b03165afa8015610850576107959160009161118257506040519081529081906020820190565b346103a95760c03660031901126103a9576004356024356001600160401b0381116103a957611a7790369060040161037c565b90916044356001600160401b0381116103a957611a9890369060040161037c565b93606435939091906001600160401b0385116103a95761079595611ac3611ad396369060040161037c565b9390926084359560a435976136e8565b6040519081529081906020820190565b9060806003198301126103a957600435916024359160443591606435906001600160401b0382116103a957611b1a9160040161037c565b9091565b346103a957611b2c36611ae3565b611b37949394614853565b611b3f6142c7565b611b47614909565b611b5084614317565b8415610aa857838591611b8a93611b668661432f565b611b71868585615455565b611b7c600c54610a03565b611b85816143a4565b61453a565b611b98610460600354610a03565b803b156103a957611bc493600080946040519687958694859363f2ebd41f60e01b85526004850161338c565b03925af1801561085057611be3575b611bdb614986565b6110ab614303565b806108156000611bf2936114f1565b38611bd3565b60005b838110611c0b5750506000910152565b8181015183820152602001611bfb565b90602091611c3481518092818552858086019101611bf8565b601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611c7357505050505090565b9091929394602080611c91600193603f198682030187528951611c1b565b97019301930191939290611c64565b346103a95760003660031901126103a957610795611cbc6139a2565b611cc4613a94565b611ccd826139de565b52611cd7816139de565b50611ce0613abc565b611ce982613a01565b52611cf381613a01565b50611cfc613ae4565b611d0582613a11565b52611d0f81613a11565b50611d18613b09565b611d2182613a21565b52611d2b81613a21565b50611d34613b2e565b611d3d82613a31565b52611d4781613a31565b50611d50613b59565b611d5982613a41565b52611d6381613a41565b50611d6c613b7f565b611d7582613a51565b52611d7f81613a51565b50611d88613bb1565b611d9182613a61565b52611d9b81613a61565b50611da4613bda565b611dad82613a72565b52611db781613a72565b50611dc0613c04565b611dc982613a83565b52611dd381613a83565b5060405191829182611c40565b346103a95760603660031901126103a957611df9610999565b6044356024356001600160401b0382116103a957611e1d602092369060040161037c565b600c54604051636b80155f60e01b81529586946001600160a01b039092169385938493611e509391929160048601613c32565b03915afa80156108505761079591600091611e79575b5060405191829182901515815260200190565b611e92915060203d6020116109815761097381836114f1565b38611e66565b346103a95760003660031901126103a9576005546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615cbf8339815191528152f35b9080601f830112156103a957816020611f0593359101611554565b90565b64ffffffffff8116036103a957565b3590610a2b82611f08565b61ffff8116036103a957565b3590610a2b82611f22565b600811156103a957565b3590610a2b82611f39565b9094939260609260808301968352602083015260408201520152565b346103a95760803660031901126103a9576004356001600160401b0381116103a95761014060031982360301126103a957611fa3611519565b6004820135815260248201356020820152604482013560408201526064820135906001600160401b0382116103a95761205161012461079594611fef6120679560043691840101611eea565b606085015261200060848201610a20565b608085015261201160a48201611f17565b60a085015261202260c48201611f17565b60c085015261203360e48201611f2e565b60e08501526120456101048201611f17565b61010085015201611f43565b6101208201526024356044359060643592613c57565b9060409492945194859485611f4e565b346103a95760e03660031901126103a95760043561209481610a0f565b602435906120a182610a0f565b604435916120ae83610a0f565b6064356120ba81610a0f565b608435916120c783610a0f565b60a435916120d483610a0f565b60c435946120e186610a0f565b6120e9614792565b6120f28161572c565b6120fb8361572c565b6121048761572c565b61210d8261572c565b6121168561572c565b61211f8461572c565b6121288661572c565b612136610460600754610a03565b91823b156103a957604051638ffee9cd60e01b81526001600160a01b038381166004830152858116602483015289811660448301528281166064830152878116608483015286811660a4830152881660c482015295928660e4815a6000948591f191821561085057612220986121da612204966121cc6121e8946122129b6121f698612251575b506001600160a01b03166133a2565b6001600160a01b03166133c4565b6001600160a01b03166133e6565b6001600160a01b0316613408565b6001600160a01b031661342a565b6001600160a01b031661344c565b6001600160a01b031661346e565b6040516007815233907fc5ec6eb3c84a615de1792ae2858fe498e7c3c8e4986fef4ae3cbf1f8d2c68bca90602090a2005b806108156000612260936114f1565b386121bd565b346103a95760403660031901126103a957602060ff6122ab60243560043561228d82610a0f565b600052600080516020615c3f83398151915284526040600020613049565b54166040519015158152f35b346103a95760003660031901126103a95760206040517f75027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc8152f35b346103a95760003660031901126103a957602060405160008152f35b346103a9576101603660031901126103a957610795611ad361014435610124356101043560e43560c43560a435608435606435604435602435600435613d67565b6001600160a01b03909116815260200190565b346103a95760003660031901126103a957600b546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615b3f8339815191528152f35b906020611f05928181520190611c1b565b346103a95760003660031901126103a95761079560408051906123e881836114f1565b60058252640352e302e360dc1b602083015251918291602083526020830190611c1b565b346103a9576101603660031901126103a95760443561014435602435600435610124356101043560e43560c43560a4356084356064356001600160401b038a116103a9576107959a61246561141a9b369060040161037c565b9a9099613dca565b346103a95760403660031901126103a95760243560043561248d82611f39565b6001546124b1906124aa90610460906001600160a01b0316610a03565b3314613eed565b6124bc811515613f4c565b6124ca610460600054610a03565b91823b156103a9576124f69260009283604051809681958294637f15208d60e01b8452600484016136d2565b03925af180156108505761250657005b8061081560006110ab936114f1565b346103a9576101403660031901126103a9576110ab60043561253681610a0f565b60243561254281610a0f565b60443561254e81610a0f565b60643561255a81610a0f565b60843561256681610a0f565b60a4359061257382610a0f565b60c4359261258084610a0f565b60e4359461258d86610a0f565b610104359661259b88610a0f565b61012435986125a98a610a0f565b613f8e565b346103a95760203660031901126103a9576004356125ca614792565b6125d381614317565b806000526009602052604060002060ff19815416905533907f81a106317e7bcc4bb0d00469e38615879068b044d72620ca9aec13ad478ccb6c600080a3005b346103a95760403660031901126103a9576110ab60243560043561263582610a0f565b6126416110a1826134c7565b61509c565b346103a95760003660031901126103a9576008546040516001600160a01b039091168152602090f35b346103a9576126da6118fc602061268536611ae3565b93829481989392612694614792565b61269c6142c7565b6126a4614909565b6126ad83614317565b6126b68661432f565b6126c1868585615455565b6126cc600c54610a03565b6126d5816143a4565b614572565b6126e8610460600354610a03565b906000604051809681958294637236934f60e11b84528a6004850161338c565b346103a95761271636611ae3565b61272193929361429d565b6127296142c7565b61273285614317565b821561288c578484916127639361274a848785615455565b612755600c54610a03565b61275e816143a4565b6145aa565b612771610460600054610a03565b604051638d34875560e01b815260048101859052909290600081602481875afa90811561085057600091612871575b508051156128605761012001516127b681612910565b6127bf81612910565b61284f57823b156103a95760006040518094637f15208d60e01b82528183816127eb8a600483016136a4565b03925af1928315610850577f07783f66bb7a1367042849627a0e745b947e50de5c98cd9e436eaf66569f6d1a9361283a575b5061282f60405192839242918461338c565b0390a26110ab614303565b806108156000612849936114f1565b3861281d565b63e047416960e01b60005260046000fd5b637bb0b62160e01b60005260046000fd5b61288691503d806000833e61092981836114f1565b386127a0565b63fbd85bc360e01b60005260046000fd5b346103a95760003660031901126103a9576002546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a9576004356128e381610a0f565b6128eb614792565b6001600160a01b03168015610aa857600c80546001600160a01b031916919091179055005b6008111561291a57565b634e487b7160e01b600052602160045260246000fd5b90600882101561291a5752565b610a2b909291926101008061012083019580518452602081015160208501526040810151604085015260018060a01b03606082015116606085015264ffffffffff60808201511660808501526129a160a082015160a086019064ffffffffff169052565b60c08181015161ffff169085015260e08181015164ffffffffff16908501520151910190612930565b346103a95760203660031901126103a957612a1960006004356129eb61423c565b506129f96104608354610a03565b6040518080958194638d34875560e01b8352600483019190602083019252565b03915afa90811561085057600091612b03575b5080519060208101519060408101516080820151612a4990610a03565b60a083015164ffffffffff1660c084015164ffffffffff169160e0850151612a729061ffff1690565b93610100860151612a879064ffffffffff1690565b95610120015196612a9788612910565b612a9f611529565b988952602089015260408801526001600160a01b0316606087015264ffffffffff16608086015264ffffffffff1660a085015261ffff1660c084015264ffffffffff1660e0830152612af5906101008301614291565b60405161079581928261293d565b612b16913d8091833e61092981836114f1565b38612a2c565b346103a95760203660031901126103a9576004356000526009602052602060ff604060002054166040519015158152f35b60609060031901126103a957600435906024359060443590565b346103a957612b7536612b4d565b919060018060a01b03612b8c610460600154610a03565b1680158015612e80575b8015612e76575b610aa8573303612e6557612bb5610460600054610a03565b92612bbf84610a03565b15610aa857604051638d34875560e01b815260048101849052600081602481885afa90811561085057600091612e4c575b50805115610905576001600160801b038311610f8e5764ffffffffff8211610f8e5760c081015164ffffffffff1694803b156103a9576000604051809263fa5fa16360e01b8252818381612c488a8c6004840161334b565b03925af1801561085057612e37575b508215801590612e2a575b612cfb575b50506000612c9c92612c7c6104608354610a03565b6040518080968194638d34875560e01b8352600483019190602083019252565b03915afa91821561085057600092612cde575b50604082015103610f8e5764ffffffffff612cd360c08293015164ffffffffff1690565b9216911610610f8e57005b612cf49192503d806000833e61092981836114f1565b9038612caf565b604081015115612dbf575b6101209150018051612d1781612910565b612d2081612910565b15908115612da1575b50612d36575b3880612c67565b612d44610460600054610a03565b91823b156103a95760006040518094637f15208d60e01b8252818381612d6d87600483016136bb565b03925af190811561085057612c9c93600092612d8d575b50925050612d2f565b8061081584612d9b936114f1565b38612d84565b6001915051612daf81612910565b612db881612910565b1438612d29565b612dcd610460600054610a03565b803b156103a9576040516390da939b60e01b8152926000918491829084908290612dfb908b6004840161334b565b03925af19182156108505761012092612e15575b50612d06565b806108156000612e24936114f1565b38612e0f565b5060408101511515612c62565b806108156000612e46936114f1565b38612c57565b612e5f913d8091833e61092981836114f1565b38612bf0565b63ea8e4eb560e01b60005260046000fd5b5080331415612b9d565b50612e92610460610460600054610a03565b15612b96565b346103a957612eda6020612eab36612b4d565b60085460405163e7f9caa560e01b81529586946001600160a01b0390921693859384939091906004850161338c565b03915afa90811561085057600091612efb575b506040519015158152602090f35b612f14915060203d6020116109815761097381836114f1565b38612eed565b346103a95760003660031901126103a9576020604051600080516020615c5f8339815191528152f35b346103a95760003660031901126103a9576003546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576000546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576007546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957600c546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957610795604080519061300a81836114f1565b600682526518971817189960d11b602083015251918291602083526020830190611c1b565b6001600160a01b03166000908152600a6020526040902090565b9060018060a01b0316600052602052604060002090565b908160209103126103a9575180151581036103a95790565b6040513d6000823e3d90fd5b6000526009602052604060002090565b81601f820112156103a95780516130aa81611539565b926130b860405194856114f1565b818452602082840101116103a957611f059160208085019101611bf8565b5190610a2b82610a0f565b5190610a2b82611f08565b5190610a2b82611f22565b5190610a2b82611f39565b6020818303126103a9578051906001600160401b0382116103a95701610140818303126103a957613131611519565b9181518352602082015160208401526040820151604084015260608201519160018060401b0383116103a95761316f610120926131d1948301613094565b6060850152613180608082016130d6565b608085015261319160a082016130e1565b60a08501526131a260c082016130e1565b60c08501526131b360e082016130ec565b60e08501526131c561010082016130e1565b610100850152016130f7565b61012082015290565b91908260809103126103a9578151916020810151916060604083015192015190565b90926060929594936080835280516080840152602081015160a0840152604081015160c08401526132a96101206132438684015161014060e08801526101c0870190611c1b565b60808401516001600160a01b03166101008701529260a081015164ffffffffff168683015260c081015164ffffffffff1661014087015260e081015161ffff1661016087015261010081015164ffffffffff1661018087015201516101a0850190612930565b95602083015260408201520152565b60009060033d116132c557565b905060046000803e60005160e01c90565b600060443d10611f05576040513d600319016004823e8051916001600160401b0383113d602485011117613345578183018051909390916001600160401b03831161333d573d8401600319018584016020011161333d5750611f05929101602001906114f1565b949350505050565b92915050565b908152602081019190915260400190565b908160209103126103a95751611f0581610a0f565b6001600160a01b039091168152602081019190915260400190565b6040919493926060820195825260208201520152565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b908160209103126103a9575190565b634e487b7160e01b600052601160045260246000fd5b919082039182116134c257565b61349f565b600052600080516020615c3f83398151915260205260016040600020015490565b903590601e19813603018212156103a957018035906001600160401b0382116103a9576020019181360383136103a957565b9035601e19823603018112156103a9570160208101919035906001600160401b0382116103a95781360383136103a957565b908060209392818452848401376000828201840152601f01601f1916010190565b63ffffffff8116036103a957565b3590610a2b8261356d565b91611f0593919260408152833560408201526020840135606082015260408401356080820152606084013560a0820152608084013560c082015261365161364361016061363c6135ef6135dc60a08a018a61351a565b61018060e08901526101c088019161354c565b60c089013561010087015260e0890135610120870152610100890135610140870152610120890135838701526136296101408a018a61351a565b878303603f19016101808901529061354c565b960161357b565b63ffffffff166101a0830152565b602081850391015261354c565b9695949092608094926136889489526020890152604088015260a0606088015260a087019161354c565b930152565b908152604081019190610a2b906020016005612930565b908152604081019190610a2b906020016001612930565b908152604081019190610a2b906020016002612930565b908152604081019291610a2b9160200190612930565b959697949297939091936136fa6142c7565b61370261429d565b33600052600a6020526040600020544311156109885761373981613727368887611554565b61373236868e611554565b908a61546f565b80156109485761374d610460600454610a03565b604051634977ff8b60e11b81526004810183905290602090829060249082905afa908115610850576000916138ed575b501561094857613791610460600054610a03565b604051631e1778ad60e11b8152600481018990529096906020816024818b5afa908115610850576000916138ce575b506138bd576137d0600b54610a03565b6001600160a01b03811615610aa857868b868b6138158e8b8a6137f761046060209a610a03565b966040519a8b998a98899863728e8bbb60e01b8a5260048a0161390c565b03915afa9081156108505760009161389e575b5015610f8e57602097600094613857936040519b8c9a8b998a986306f4597160e21b8a52339260048b01613952565b03925af19081156108505760009161387f575b50436138753361302f565b5590610a2b614303565b613898915060203d602011610f0b57610efd81836114f1565b3861386a565b6138b7915060203d6020116109815761097381836114f1565b38613828565b630dd1bc8b60e31b60005260046000fd5b6138e7915060203d602011610f0b57610efd81836114f1565b386137c0565b613906915060203d6020116109815761097381836114f1565b3861377d565b969490611f059896926139449594613931928a5260a060208b015260a08a019161354c565b926040880152868303606088015261354c565b92608081850391015261354c565b99989793919461397a60a098966139949560c08e6136889b968152816020820152019161354c565b926001808a1b031660408c01528a830360608c015261354c565b91878303608089015261354c565b60405161016091906139b483826114f1565b600a815291601f19018260005b8281106139cd57505050565b8060606020809385010152016139c1565b8051156139eb5760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156139eb5760400190565b8051600210156139eb5760600190565b8051600310156139eb5760800190565b8051600410156139eb5760a00190565b8051600510156139eb5760c00190565b8051600610156139eb5760e00190565b8051600710156139eb576101000190565b8051600810156139eb576101200190565b8051600910156139eb576101400190565b60405190613aa36040836114f1565b600a8252691c1bdcda5d1a5bdb925960b21b6020830152565b60405190613acb6040836114f1565b600a8252691b5a5b9d105b5bdd5b9d60b21b6020830152565b60405190613af36040836114f1565b60078252666d696e7446656560c81b6020830152565b60405190613b186040836114f1565b60078252661b995dd119589d60ca1b6020830152565b60405190613b3d6040836114f1565b600d82526c1b995dd0dbdb1b185d195c985b609a1b6020830152565b60405190613b686040836114f1565b6008825267627463507269636560c01b6020830152565b60405190613b8e6040836114f1565b60148252730c2eae8d0dee4d2f4cac8a6e0cadcc8e690c2e6d60631b6020830152565b60405190613bc06040836114f1565b600b82526a0eac6c888cac4e890c2e6d60ab1b6020830152565b60405190613be96040836114f1565b600c82526b0c6dedce8e4c2c6e890c2e6d60a31b6020830152565b60405190613c136040836114f1565b601082526f07175616e74756d54696d657374616d760841b6020830152565b611f05949260609263ffffffff60e01b1682526020820152816040820152019161354c565b9192303303612e6557610120830160028151613c7281612910565b613c7b81612910565b14613d39575b600c8303613d2a576301e13380905b613caf82613caa61052461010089015164ffffffffff1690565b614704565b91613cc3613cbd42856134b5565b9161472b565b10613d195760039051613cd581612910565b613cde81612910565b14613d0c575b50613d0693613cf4600454610a03565b92613d00600154610a03565b94615562565b90919293565b421015613d195738613ce4565b6309116a8160e11b60005260046000fd5b613d3383614711565b90613c90565b613d4f61052461010086015164ffffffffff1690565b421115613c815763088502f160e21b60005260046000fd5b99979593919896949290986040519960208b019b8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613dc4610180826114f1565b51902090565b949a999590969198929a979397613ddf61429d565b613de76142c7565b613def614909565b8315610f8e57613e3d848760209d8f9a613e248f8f9d8f9e60009f928893613ea09f8c908f8f613e1e8461432f565b8c61576b565b613e2f600c54610a03565b613e38816143a4565b6145e2565b613e4b610460600154610a03565b986040519c8d9b8c9a8b9963ee3448f960e01b8b5260048b0195926101009794919a9998959261012088019b8852602088015260408701526060860152608085015260a084015260c083015260e08201520152565b03925af190811561085057600091613ece575b5015610f8e57613ec1614986565b613ec9614303565b600190565b613ee7915060203d6020116109815761097381836114f1565b38613eb3565b15613ef457565b60405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206c6f616e206f7065726174696f6e73206d616e616765722063616e6044820152692063616c6c207468697360b01b6064820152608490fd5b15613f5357565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1bdcda5d1a5bdb881251606a1b6044820152606490fd5b97959391989694929098600080516020615cdf8339815191525499613fb960ff8c60401c1615151590565b9a6001600160401b0316801590816140a9575b600114908161409f575b159081614096575b5061408557600080516020615cdf83398151915280546001600160401b0319166001179055614011998b614060576140b1565b61401757565b600080516020615cdf833981519152805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b600080516020615cdf833981519152805460ff60401b1916600160401b1790556140b1565b63f92ee8a960e01b60005260046000fd5b90501538613fde565b303b159150613fd6565b8c9150613fcc565b989793929896919094966140c3615a16565b6140cb6157e7565b6140d3615a16565b6140db615a16565b6140e3615a44565b6001600160a01b0316948515610aa8576001600160a01b0316908115610aa8576001600160a01b0316988915610aa8576001600160a01b0316928315610aa8576001600160a01b0316968715610aa8576001600160a01b0316958615610aa8576001600160a01b0316918215610aa8576001600160a01b0316938415610aa8576001600160a01b0316958615610aa8576001600160a01b03891615610aa8576141be61420c986141b96141c8966141b46142399e6141af6141c3986141aa6141ea9e6133a2565b6133c4565b6133e6565b613408565b61342a565b61344c565b61346e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61421581614c89565b5061421f81614d22565b5061422981614ddf565b5061423381614e9c565b50614f59565b50565b6040519061012082016001600160401b03811183821017611514576040526000610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b600882101561291a5752565b60ff600080516020615c7f83398151915254166142b657565b63d93c066560e01b60005260046000fd5b6002600080516020615c9f83398151915254146142f2576002600080516020615c9f83398151915255565b633ee5aeb560e01b60005260046000fd5b6001600080516020615c9f83398151915255565b1561431e57565b6379ec0ed760e11b60005260046000fd5b8015801561437c575b801561436d575b6143465750565b6382d6282f60e01b60005260045264e8d4a51000602452655af3107a400060445260646000fd5b50655af3107a4000811161433f565b5064e8d4a510008110614338565b9290611751613dc492604051948593602085019788611f4e565b6001600160a01b0316156143b457565b639cef199b60e01b60005260046000fd5b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263018af30960e01b60048601613c32565b0381875afa90811561085057600091614473575b501561446257823b156103a9576144429260009283604051809681958294630e62cc9360e21b84526004840161334b565b03925af18015610850576144535750565b806108156000610a2b936114f1565b636227817160e01b60005260046000fd5b61448c915060203d6020116109815761097381836114f1565b38614411565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd926304e9585760e11b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263121f00ad60e21b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263544ba5af60e01b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd926318eea33b60e21b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92636b40812160e11b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92630d7d9f4b60e41b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92632c545d9960e21b60048601613c32565b604051634911e9cd60e01b8152600481019190915291926001600160a01b0316602083602481845afa928315610850576000936146dc575b50604051630180d64960e11b8152600481019290925260209082908180602481015b03915afa908115610850576000916146bd575b50808211156146b357614699916134b5565b905b036146a257565b63896492f560e01b60005260046000fd5b505060009061469b565b6146d6915060203d602011610f0b57610efd81836114f1565b38614687565b6020919350916146fb61467493833d8511610f0b57610efd81836114f1565b93915091614652565b919082018092116134c257565b9062278d0082029180830462278d0014901517156134c257565b908160011b91808304600214901517156134c257565b818102929181159184041417156134c257565b90600c81146147805762278d0081029080820462278d0014901517156134c25781018091116134c25790565b506301e1338081018091116134c25790565b600080516020615cbf833981519152600052600080516020615c3f83398151915260205260ff6147d033600080516020615b7f833981519152613049565b5416156147d957565b63e2517d3f60e01b60005233600452600080516020615cbf83398151915260245260446000fd5b60008052600080516020615c3f83398151915260205260ff61483033600080516020615bbf833981519152613049565b54161561483957565b63e2517d3f60e01b60005233600452600060245260446000fd5b600080516020615b1f833981519152600052600080516020615c3f83398151915260205260ff61489133600080516020615c1f833981519152613049565b54161561489a57565b63e2517d3f60e01b60005233600452600080516020615b1f83398151915260245260446000fd5b80600052600080516020615c3f83398151915260205260ff6148e7336040600020613049565b5416156148f15750565b63e2517d3f60e01b6000523360045260245260446000fd5b6002600080516020615b5f8339815191525414614934576002600080516020615b5f83398151915255565b60405162461bcd60e51b8152602060048201526024808201527f476c6f62616c5265656e7472616e637947756172643a207265656e7472616e746044820152640818d85b1b60da1b6064820152608490fd5b6001600080516020615b5f83398151915255565b91909115613f53578115614a43575115614a0457116149b557565b60405162461bcd60e51b815260206004820152602160248201527f5061796d656e7420616d6f756e74206578636565647320746f74616c206465626044820152601d60fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526017602482015276141bdcda5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd604a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f5061796d656e7420616d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b60008054604051638d34875560e01b815260048101849052929190839060249082906001600160a01b03165afa91821561085057600092614b0b575b5081511490811591614aec575b50610f8e57600190565b608001516001600160a01b039150614b0390610a03565b161538614ae2565b614b219192503d806000833e61092981836114f1565b9038614ad5565b614b3181612910565b60018114159081614bd9575b81614bc3575b81614bae575b50614b5057565b60405162461bcd60e51b815260206004820152603060248201527f506f736974696f6e20737461747573206e6f7420656c696769626c6520666f7260448201526f081c185c9d1a585b081c185e5b595b9d60821b6064820152608490fd5b60049150614bbb81612910565b141538614b49565b9050614bce81612910565b600381141590614b43565b9050614be481612910565b600281141590614b3d565b6040516323b872dd60e01b60208083019182526001600160a01b0394851660248401529490931660448201526064808201959095529384529260009190614c376084826114f1565b519082855af115613078576000513d614c8057506001600160a01b0381163b155b614c5f5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614c58565b60008052600080516020615c3f83398151915260205260ff614cb982600080516020615bbf833981519152613049565b5416614d1c5760008052600080516020615c3f833981519152602052614ced81600080516020615bbf833981519152613049565b805460ff1916600117905533906001600160a01b03166000600080516020615aff8339815191528180a4600190565b50600090565b600080516020615b1f833981519152600052600080516020615c3f83398151915260205260ff614d6082600080516020615c1f833981519152613049565b5416614d1c57600080516020615b1f833981519152600052600080516020615c3f833981519152602052614da281600080516020615c1f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615b1f833981519152600080516020615aff833981519152600080a4600190565b600080516020615cbf833981519152600052600080516020615c3f83398151915260205260ff614e1d82600080516020615b7f833981519152613049565b5416614d1c57600080516020615cbf833981519152600052600080516020615c3f833981519152602052614e5f81600080516020615b7f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615cbf833981519152600080516020615aff833981519152600080a4600190565b600080516020615c5f833981519152600052600080516020615c3f83398151915260205260ff614eda82600080516020615bff833981519152613049565b5416614d1c57600080516020615c5f833981519152600052600080516020615c3f833981519152602052614f1c81600080516020615bff833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615c5f833981519152600080516020615aff833981519152600080a4600190565b600080516020615b3f833981519152600052600080516020615c3f83398151915260205260ff614f9782600080516020615b9f833981519152613049565b5416614d1c57600080516020615b3f833981519152600052600080516020615c3f833981519152602052614fd981600080516020615b9f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615b3f833981519152600080516020615aff833981519152600080a4600190565b80600052600080516020615c3f83398151915260205260ff61503c836040600020613049565b54166150955780600052600080516020615c3f833981519152602052615066826040600020613049565b805460ff1916600117905533916001600160a01b031690600080516020615aff833981519152600080a4600190565b5050600090565b80600052600080516020615c3f83398151915260205260ff6150c2836040600020613049565b5416156150955780600052600080516020615c3f8339815191526020526150ed826040600020613049565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b8051156151355750565b60405163df70480560e01b8152602060048201529081906116fd906024830190611c1b565b9c9798939d9e9d60a08e6151c99c976101609f9a949363ffffffff9f9a96976151a498610180968552602085015260408401526060830152608082015201526101808d019161354c565b9560c08b015260e08a015261010089015261012088015286830361014088015261354c565b9416910152565b803560208201359060408301359260608101359060808101359060a081016151f890826134e8565b60c083013560e0840135906101008501359261012086013594610140870161522090886134e8565b9890976101600135996152328b61356d565b6040519d8e9d60208f019d6152469e61515a565b03601f198101825261525890826114f1565b8051906020012090565b91909181156152955761527d92615278916157f7565b6158a6565b1061528457565b635e31938360e11b60005260046000fd5b50505050565b600881101561291a5780151590816152ec575b816152d6575b816152c1575b5061284f57565b600691506152ce81612910565b1415386152ba565b90506152e181612910565b6002811415906152b4565b90506152f781612910565b6001811415906152ae565b9061531560209282815194859201611bf8565b0190565b6040516352d1902d60e01b81529091906020816004816001600160a01b0387165afa60009181615434575b5061536757634c9c8ce360e01b6000526001600160a01b03831660045260246000fd5b600080516020615bdf83398151915281036154205750813b156153fe57600080516020615bdf83398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051156153e45761423991615a5b565b5050346153ed57565b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60009081526001600160a01b0391909116600452602490fd5b632a87526960e21b60005260045260246000fd5b61544e91925060203d602011610f0b57610efd81836114f1565b9038615344565b9190613dc49061175160405193849260208401968761338c565b61547890614317565b8051156154f55760409051106154b9576154919061512b565b801561549a5750565b6304a45adb60e51b600052600452600160245260001960445260646000fd5b60405163df70480560e01b815260206004820152601360248201527214da59db985d1d5c99481d1bdbc81cda1bdc9d606a1b6044820152606490fd5b60405163df70480560e01b815260206004820152600f60248201526e456d707479207369676e617475726560881b6044820152606490fd5b51906001600160581b03821682036103a957565b91908260409103126103a957611f05602061555b8461552d565b930161552d565b604080516353f366c760e01b815260048101849052939794969195849060249082906001600160a01b03165afa928315610850576000936156f9575b5060408501805190936155db916155be916001600160581b031690615931565b976155ca8986516159a3565b976155d68983836159c8565b6157f7565b925160405163100c48d360e21b81526001600160a01b039092169190602082600481865afa9081156108505761561a926000926156d8575b50856159fa565b6156c75760206004916040519283809263100c48d360e21b82525afa801561085057615650916000916156a8575b5086846159fa565b61569757613caa61567360e06156698861567a966158a6565b96015161ffff1690565b61ffff1690565b9061ffff821161568657565b6319a4c60960e21b60005260046000fd5b631300e8bd60e21b60005260046000fd5b6156c1915060203d602011610f0b57610efd81836114f1565b38615648565b63e5cace4160e01b60005260046000fd5b6156f291925060203d602011610f0b57610efd81836114f1565b9038615613565b61571c91935060403d604011615725575b61571481836114f1565b810190615541565b9050913861559e565b503d61570a565b6001600160a01b03811690811561575a573b156157465750565b630fb15bad60e11b60005260045260246000fd5b63d92e233d60e01b60005260046000fd5b9896919497909392956040519860208a019a7ffa8f74e09e937f69ff6ed56ad5685b576507504860024ea40564c0432ff8034a8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613dc4610180826114f1565b6157ef615a16565b614303615a16565b90660775f05a0740008211615895576a52b7d2dcc80cd2e4000000811161588457811580159081615858575b506158475761583191614741565b6064810290808204606414901517156134c25790565b63450d49cd60e01b60005260046000fd5b905061586e576064826000190404811138615823565b634e487b7160e01b600052601260045260246000fd5b63128df78360e01b60005260046000fd5b63e9ec682160e01b60005260046000fd5b81156159205768327cb2734119d3b7a9601e1b811161590f577e068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa4381116158fe5761271081029080820461271014901517156134c2570490565b633da428df60e21b60005260046000fd5b638a94304d60e01b60005260046000fd5b6323d359a360e01b60005260046000fd5b68327cb2734119d3b7a9601e1b811161590f5761271082116159925780158015908161597f575b5061596e576127109161596a91614741565b0490565b6340c0d6e560e11b60005260046000fd5b905061586e578060001904821138615958565b637186728f60e11b60005260046000fd5b908101908181116134c25781106159b75790565b636be580af60e11b60005260046000fd5b660775f05a07400010615895576a52b7d2dcc80cd2e4000000106158845768327cb2734119d3b7a9601e1b1061590f57565b908015615a0e57615a0a916158a6565b1090565b505050600090565b60ff600080516020615cdf8339815191525460401c1615615a3357565b631afcd79f60e31b60005260046000fd5b600080516020615b5f833981519152541561498657565b600080611f0593602081519101845af43d15615a99573d91615a7c83611539565b92615a8a60405194856114f1565b83523d6000602085013e615a9d565b6060915b90615ac35750805115615ab257602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580615af5575b615ad4575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15615acc56fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16f4a222f146e17d7057e96450fc67f08ce8569fd5cf3b62a23983c4f4b9e497f35cd165352ca420415a2423a5a15f077145431fc21aec9b84cb1b8800541a5c26b16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c1b3eac282bb4080c159156c6faa9df237c5a80b4a568c4661ea2010de1eb2caeb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd6c996ba66d0dbb3c38dbaaac7d192f7d41593dd02b55a9147053192322b1d3b615dc3ea5d9654acb949989a0a9587a0da8cd03451c0368cc676ec7c08dd81402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268004ad5455c7a5edb25c14b61cc4d6429153aab5507800334ac05d65e9828801bf3cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00aaae1071a267a66db1d9c0714498307791bc0f693f5b254c861d95ca60503b6da2646970667358221220bf923774eda538ae7e572ed34d44d75ffa44665884eb85128bc0d128090cf31a64736f6c634300081c0033";
38923
+ var _bytecode = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b604051615d7b90816100f082396080518181816115f001526118000152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063018af3091461037757806301ffc9a714610372578063043fe8fc1461036d57806309d2b0ae1461036857806316d8887a1461036357806316efd9411461035e5780631732d33014610359578063248a9ca3146103545780632f2ff15d1461034f57806336568abe1461034a578063393d92cc1461034557806344c8b85214610340578063487c02b41461033b5780634a54e00a146103365780634f1ef2861461033157806352d1902d1461032c578063544ba5af146103275780635c975abb146103225780635e4936e81461031d5780636068b5d11461031857806363ba8cec146103135780636a89edad1461030e5780636b80155f1461030957806374cb36e61461030457806375b238fc146102ff5780638179dc38146102fa5780638ffee9cd146102f557806391d14854146102f05780639b9d30c1146102eb578063a217fddf146102e6578063a9a52888146102e1578063a9eadc52146102dc578063aa4fec70146102d7578063ad3cb1cc146102d2578063b1517664146102cd578063bb627c2e146102c8578063c12e1291146102c3578063c306b378146102be578063d0e8ce82146102b9578063d547741f146102b4578063d65e880d146102af578063d6810242146102aa578063d8dfeb45146102a5578063d9cb25a2146102a0578063dc5632531461029b578063dd74ac7a14610296578063ddccaa3a14610291578063e7f9caa51461028c578063f005e76714610287578063f2dfbf6614610282578063f2f4eb261461027d578063f851a44014610278578063fb7c6a0f146102735763ffa1ad741461026e57600080fd5b61300e565b612fe5565b612fbc565b612f93565b612f6a565b612f41565b612ebf565b612b8e565b612b43565b6129f1565b6128ed565b6128c4565b61282b565b612802565b6127ce565b61276a565b6126d1565b612629565b61247c565b61241b565b6123d4565b61239a565b612371565b61231d565b612301565b6122c6565b612275565b612086565b611f79565b611ed0565b611ea7565b611def565b611caf565b611b2d565b611a57565b6119f6565b6119c6565b611846565b6117ed565b61159e565b6114c5565b6111b4565b611133565b61110a565b6110c0565b611085565b61105f565b611024565b610ffb565b610fd2565b610af7565b610a2d565b6109b0565b6103ae565b9181601f840112156103a9578235916001600160401b0383116103a957602083818601950101116103a957565b600080fd5b346103a95760c03660031901126103a95760843560043560243560643560443560a4356001600160401b0381116103a9576103ed90369060040161037c565b91906103f76142c4565b6103ff6142ee565b33600052600a602052604060002054431115610988576104529286916104248361433e565b61042d86614356565b610439848789866143b1565b610444600c54610a03565b61044d816143cb565b6143ec565b610465610460600454610a03565b610a03565b604051634977ff8b60e11b81526004810184905290602090829060249082905afa90811561085057600091610959575b5015610948576104ae6104a7846130ab565b5460ff1690565b610937576104c0610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610916575b506104fe6080820151610a03565b906101208101519561050f87612937565b61052e61052460a084015164ffffffffff1690565b64ffffffffff1690565b92825115610905576001600160a01b0316963388036108f45761055081612937565b600281141590816108df575b506108ce57816105b8869261058460206080960151828b61057e600154610a03565b92614641565b61059d6105908a6130ab565b805460ff19166001179055565b60405163102f3b8760e31b8152968794859460048601613223565b0381305afa600081600094600093610894575b5061062457856105d96132df565b6308c379a01461060b575b6105f06105fa916130ab565b805460ff19169055565b633a4f184b60e11b60005260046000fd5b6106136132fd565b156105e4576105f06105fa916130ab565b92610633610460600054610a03565b803b156103a95760405163fa5fa16360e01b8152916000918391829084908290610661908d60048401613372565b03925af180156108505761087f575b5061067f610460600054610a03565b91823b156103a95760006040518094630d7ad17360e41b82528183816106a9888d60048401613372565b03925af1928315610850576106c39361086a575b5061477b565b916106d2610460600054610a03565b803b156103a9576000604051809263b222bec960e01b82528183816106fb8a8c60048401613372565b03925af1801561085057610855575b50610719610460600154610a03565b60405163b1d3354f60e01b8152602081600481855afa90811561085057600091610821575b5083610799575b5050610772600080516020615d26833981519152936107666105f0876130ab565b604051938493846133b3565b0390a34361077f33613056565b5561078861432a565b6040516001815280602081015b0390f35b6001600160a01b0316803b156103a957836000916107ce9383604051809681958294633c37699760e21b845260048401613398565b03925af19081610806575b506107ef57637101508d60e11b60005260046000fd5b610772600080516020615d26833981519152610745565b80610815600061081b93611504565b80610fc7565b386107d9565b610843915060203d602011610849575b61083b8183611504565b810190613383565b3861073e565b503d610831565b61309f565b80610815600061086493611504565b3861070a565b80610815600061087993611504565b386106bd565b80610815600061088e93611504565b38610670565b915093506108ba915060803d6080116108c7575b6108b28183611504565b810190613201565b94929050909391386105cb565b503d6108a8565b63a8a168bf60e01b60005260046000fd5b600391506108ec81612937565b14153861055c565b631963d1e760e31b60005260046000fd5b636ec9be1160e01b60005260046000fd5b610931913d8091833e6109298183611504565b810190613129565b386104f0565b6358c8679f60e01b60005260046000fd5b63559bd01960e01b60005260046000fd5b61097b915060203d602011610981575b6109738183611504565b810190613087565b38610495565b503d610969565b633b53d1db60e01b60005260046000fd5b600435906001600160e01b0319821682036103a957565b346103a95760203660031901126103a95760206001600160e01b03196109d4610999565b16637965db0b60e01b81149081156109f2575b506040519015158152f35b6301ffc9a760e01b149050386109e7565b6001600160a01b031690565b6001600160a01b038116036103a957565b3590610a2b82610a0f565b565b346103a95760203660031901126103a957600435610a4a81610a0f565b610a526147b9565b6001600160a01b03168015610aa857600b80546001600160a01b0319811683179091553391906001600160a01b03167f440ec6c0da0791f6d650579df27149ce4ffc4f4fbf63e9a8bcd45dacdbf338a2600080a4005b63e6c4247b60e01b60005260046000fd5b60a06003198201126103a95760043591602435916044359160643591608435906001600160401b0382116103a957610af39160040161037c565b9091565b346103a957610b0536610ab9565b610b109594956142c4565b610b186142ee565b610b20614930565b610b2e610460600654610a03565b803b156103a95760405163102d617560e01b81526004810188905260006024820181905290918290604490829084905af1801561085057610fb2575b50610b7483614356565b8315610fa157848491610ba693610b8d898786866143b1565b610b98600c54610a03565b610ba1816143cb565b6144b9565b610bb4610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610f88575b50610bf26080820151610a03565b61012082015190610c0282612937565b610c136040840151809489896149c1565b610c23610c1f87614ac0565b1590565b908115610f74575b50610f6357610c3990614b4f565b60046020610c4b610460600154610a03565b60405163023b2a9f60e31b815292839182905afa90811561085057600091610f44575b506040516370a0823160e01b81526001600160a01b0391909116929060208180610c9b336004830161235e565b0381875afa8015610850578791600091610f25575b50108015610ebc575b610eab57600492610ccc87303384614c16565b6020610cdc610460600154610a03565b60405163b1d3354f60e01b815295869182905afa93841561085057600094610e8a575b5060405163095ea7b360e01b81526001600160a01b03851660048201526000602482015290602082806044810103816000855af190811561085057610d67956020938a93610e6f575b50600060405180988195829463095ea7b360e01b845260048401613398565b03925af19283156108505786602093610d8992610db996610e54575b506134dc565b93610d98610460600154610a03565b9060006040518096819582946322de8a2d60e01b84528c8c60048601611f5d565b03925af190811561085057600091610e35575b5015610e2457610e057f58c8fcf57870633c97de2da7d6e74c7544b530d15779c0d107edd9933747ec5191604051918291339683613372565b0390a3610e106149ad565b610e1861432a565b60405160018152602090f35b63d0806ec760e01b60005260046000fd5b610e4e915060203d602011610981576109738183611504565b38610dcc565b610e6a90863d8811610981576109738183611504565b610d83565b610e8590853d8711610981576109738183611504565b610d48565b610ea491945060203d6020116108495761083b8183611504565b9238610cff565b631e9acf1760e31b60005260046000fd5b50604051636eb1769f60e11b8152336004820152306024820152602081604481875afa8015610850578791600091610ef6575b5010610cb9565b610f18915060203d602011610f1e575b610f108183611504565b8101906134b7565b38610eef565b503d610f06565b610f3e915060203d602011610f1e57610f108183611504565b38610cb0565b610f5d915060203d6020116108495761083b8183611504565b38610c6e565b6334b110b160e11b60005260046000fd5b6001600160a01b0316331415905038610c2b565b610f9b913d8091833e6109298183611504565b38610be4565b630a0b0d7960e01b60005260046000fd5b806108156000610fc193611504565b38610b6a565b60009103126103a957565b346103a95760003660031901126103a9576020604051600080516020615b468339815191528152f35b346103a95760003660031901126103a9576006546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95760206040517f9792fdc19ab98adfa72ab2fa98d342618c661e01c406979c105b31eda87f5e6f8152f35b346103a95760203660031901126103a957602061107d6004356134ee565b604051908152f35b346103a95760403660031901126103a9576110be6024356004356110a882610a0f565b6110b96110b4826134ee565b6148e8565b61503d565b005b346103a95760403660031901126103a9576004356024356110e081610a0f565b336001600160a01b038216036110f9576110be916150c3565b63334bd91960e11b60005260046000fd5b346103a95760003660031901126103a9576001546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a957600054604051631e1778ad60e11b8152600480359082015290602090829060249082906001600160a01b03165afa80156108505761079591600091611195575b506040519081529081906020820190565b6111ae915060203d602011610f1e57610f108183611504565b38611184565b346103a95760403660031901126103a9576004356001600160401b0381116103a9578060040161018060031983360301126103a9576024356001600160401b0381116103a95761120890369060040161037c565b6112106142c4565b6112186142ee565b8235926112248461433e565b611231602486013561433e565b61123e604486013561433e565b61124b606486013561433e565b61126a61126561125e60a488018461350f565b3691611567565b615152565b6101248501359261127a84614356565b6112aa611286836151f7565b868584611294600c54610a03565b9361129e856143cb565b6101048c0135946144f1565b6112b8610460600654610a03565b803b156103a9576000604051809263102d617560e01b82528183816112eb60048201906000602060408401938281520152565b03925af18015610850576114b0575b50611309610460600054610a03565b604051638d34875560e01b8152600481018790529490600090869060249082905afa94851561085057600095611495575b508451156109055761134f6080860151610a03565b336001600160a01b03909116036108f45761136c610c1f87614ac0565b610f635760e46004970135604086015195602061138d610460600154610a03565b60405163100c48d360e21b81529a8b9182905afa98891561085057611407996020986113d995610120956113c994600094611476575b50615289565b01516113d481612937565b6152c2565b60006113e9610460600254610a03565b926040519788958694859363121f00ad60e21b8552600485016135ad565b03925af191821561085057600092611455575b508161143f575b6107958261142d61432a565b60405191829182901515815260200190565b610c1f61144b91614ac0565b610f635738611421565b61146f91925060203d602011610981576109738183611504565b903861141a565b61148e9194508c3d8e11610f1e57610f108183611504565b92386113c3565b6114a991953d8091833e6109298183611504565b933861133a565b8061081560006114bf93611504565b386112fa565b346103a95760003660031901126103a9576004546040516001600160a01b039091168152602090f35b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761152757604052565b6114ee565b60405190610a2b61014083611504565b60405190610a2b61012083611504565b6001600160401b03811161152757601f01601f191660200190565b9291926115738261154c565b916115816040519384611504565b8294818452818301116103a9578281602093846000960137010152565b60403660031901126103a9576004356115b681610a0f565b6024356001600160401b0381116103a957366023820112156103a9576115e6903690602481600401359101611567565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156117ca575b506117b957611628614827565b611636610460600754610a03565b6001600160a01b03811615610aa85760206040518092631052504160e01b82528180611665886004830161235e565b03915afa60009181611798575b5061178a5761167f6132df565b6308c379a014611714575b60405162461bcd60e51b815260206004820152605160248201527f41646d696e2076616c69646174696f6e206661696c65643a20556e6b6e6f776e60448201527f206572726f7220286c696b656c7920726571756972652866616c73652920696e6064820152702076616c6964617465557067726164652960781b60848201528060a481015b0390fd5b61171c6132fd565b80611727575061168a565b60405178020b236b4b7103b30b634b230ba34b7b7103330b4b632b21d1603d1b602082015261171091611772908290611764906039830190615329565b03601f198101835282611504565b60405162461bcd60e51b8152918291600483016123c3565b15610fa1576110be91615340565b6117b291925060203d602011610981576109738183611504565b9038611672565b63703e46dd60e11b60005260046000fd5b600080516020615c06833981519152546001600160a01b0316141590503861161b565b346103a95760003660031901126103a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117b9576020604051600080516020615c068339815191528152f35b346103a95760a03660031901126103a9576004356024356064356044356001600160401b0382116103a957611881602092369060040161037c565b93909160006084359261189261487a565b61189a6142ee565b6118a2614930565b6118ab8861433e565b6118b483614356565b6118df818989886118c688858561547c565b6118d1600c54610a03565b6118da816143cb565b614529565b61190f6118f0610460600354610a03565b946040519889978896879563544ba5af60e01b87528d60048801613685565b03925af1908115610850576000916119a7575b508061193d575b610795906119356149ad565b61142d61432a565b61194b610460600054610a03565b803b156103a957604051637f15208d60e01b815292600091849182908490829061197890600483016136b4565b03925af19182156108505761079592611992575b50611929565b8061081560006119a193611504565b3861198c565b6119c0915060203d602011610981576109738183611504565b38611922565b346103a95760003660031901126103a957602060ff600080516020615ca683398151915254166040519015158152f35b346103a95760203660031901126103a957600854604051630bc926dd60e31b8152600480359082015290602090829060249082906001600160a01b03165afa8015610850576107959160009161119557506040519081529081906020820190565b346103a95760c03660031901126103a9576004356024356001600160401b0381116103a957611a8a90369060040161037c565b90916044356001600160401b0381116103a957611aab90369060040161037c565b93606435939091906001600160401b0385116103a95761079595611ad6611ae696369060040161037c565b9390926084359560a4359761370f565b6040519081529081906020820190565b9060806003198301126103a957600435916024359160443591606435906001600160401b0382116103a957610af39160040161037c565b346103a957611b3b36611af6565b611b4694939461487a565b611b4e6142ee565b611b56614930565b611b5f8461433e565b8415610aa857838591611b9993611b7586614356565b611b8086858561547c565b611b8b600c54610a03565b611b94816143cb565b614561565b611ba7610460600354610a03565b803b156103a957611bd393600080946040519687958694859363f2ebd41f60e01b8552600485016133b3565b03925af1801561085057611bf2575b611bea6149ad565b6110be61432a565b806108156000611c0193611504565b38611be2565b60005b838110611c1a5750506000910152565b8181015183820152602001611c0a565b90602091611c4381518092818552858086019101611c07565b601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611c8257505050505090565b9091929394602080611ca0600193603f198682030187528951611c2a565b97019301930191939290611c73565b346103a95760003660031901126103a957610795611ccb6139c9565b611cd3613abb565b611cdc82613a05565b52611ce681613a05565b50611cef613ae3565b611cf882613a28565b52611d0281613a28565b50611d0b613b0b565b611d1482613a38565b52611d1e81613a38565b50611d27613b30565b611d3082613a48565b52611d3a81613a48565b50611d43613b55565b611d4c82613a58565b52611d5681613a58565b50611d5f613b80565b611d6882613a68565b52611d7281613a68565b50611d7b613ba6565b611d8482613a78565b52611d8e81613a78565b50611d97613bd8565b611da082613a88565b52611daa81613a88565b50611db3613c01565b611dbc82613a99565b52611dc681613a99565b50611dcf613c2b565b611dd882613aaa565b52611de281613aaa565b5060405191829182611c4f565b346103a95760603660031901126103a957611e08610999565b6044356024356001600160401b0382116103a957611e2c602092369060040161037c565b600c54604051636b80155f60e01b81529586946001600160a01b039092169385938493611e5f9391929160048601613c59565b03915afa80156108505761079591600091611e88575b5060405191829182901515815260200190565b611ea1915060203d602011610981576109738183611504565b38611e75565b346103a95760003660031901126103a9576005546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615ce68339815191528152f35b9080601f830112156103a957816020611f1493359101611567565b90565b64ffffffffff8116036103a957565b3590610a2b82611f17565b61ffff8116036103a957565b3590610a2b82611f31565b600811156103a957565b3590610a2b82611f48565b9094939260609260808301968352602083015260408201520152565b346103a95760803660031901126103a9576004356001600160401b0381116103a95761014060031982360301126103a957611fb261152c565b6004820135815260248201356020820152604482013560408201526064820135906001600160401b0382116103a95761206061012461079594611ffe6120769560043691840101611ef9565b606085015261200f60848201610a20565b608085015261202060a48201611f26565b60a085015261203160c48201611f26565b60c085015261204260e48201611f3d565b60e08501526120546101048201611f26565b61010085015201611f52565b6101208201526024356044359060643592613c7e565b9060409492945194859485611f5d565b346103a95760e03660031901126103a9576004356120a381610a0f565b602435906120b082610a0f565b604435916120bd83610a0f565b6064356120c981610a0f565b608435916120d683610a0f565b60a435916120e383610a0f565b60c435946120f086610a0f565b6120f86147b9565b61210181615753565b61210a83615753565b61211387615753565b61211c82615753565b61212585615753565b61212e84615753565b61213786615753565b612145610460600754610a03565b91823b156103a957604051638ffee9cd60e01b81526001600160a01b038381166004830152858116602483015289811660448301528281166064830152878116608483015286811660a4830152881660c482015295928660e4815a6000948591f19182156108505761222f986121e9612213966121db6121f7946122219b61220598612260575b506001600160a01b03166133c9565b6001600160a01b03166133eb565b6001600160a01b031661340d565b6001600160a01b031661342f565b6001600160a01b0316613451565b6001600160a01b0316613473565b6001600160a01b0316613495565b6040516007815233907fc5ec6eb3c84a615de1792ae2858fe498e7c3c8e4986fef4ae3cbf1f8d2c68bca90602090a2005b80610815600061226f93611504565b386121cc565b346103a95760403660031901126103a957602060ff6122ba60243560043561229c82610a0f565b600052600080516020615c6683398151915284526040600020613070565b54166040519015158152f35b346103a95760003660031901126103a95760206040517f75027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc8152f35b346103a95760003660031901126103a957602060405160008152f35b346103a9576101603660031901126103a957610795611ae661014435610124356101043560e43560c43560a435608435606435604435602435600435613d8e565b6001600160a01b03909116815260200190565b346103a95760003660031901126103a957600b546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615b668339815191528152f35b906020611f14928181520190611c2a565b346103a95760003660031901126103a95761079560408051906123f78183611504565b60058252640352e302e360dc1b602083015251918291602083526020830190611c2a565b346103a9576101603660031901126103a95760443561014435602435600435610124356101043560e43560c43560a4356084356064356001600160401b038a116103a9576107959a61247461142d9b369060040161037c565b9a9099613df1565b346103a95761248a36610ab9565b9193926124956142c4565b61249d6142ee565b6124a68661433e565b8315612618578015612607576124de9285926124c584899488866143b1565b6124d0600c54610a03565b6124d9816143cb565b614599565b6124ec610460600054610a03565b604051638d34875560e01b815260048101859052909290600081602481875afa908115610850576000916125ec575b508051156125db57610120015161253181612937565b61253a81612937565b6125ca57823b156103a95760006040518094637f15208d60e01b82528183816125668a600483016136cb565b03925af1928315610850577f07783f66bb7a1367042849627a0e745b947e50de5c98cd9e436eaf66569f6d1a936125b5575b506125aa6040519283924291846133b3565b0390a26110be61432a565b8061081560006125c493611504565b38612598565b63e047416960e01b60005260046000fd5b637bb0b62160e01b60005260046000fd5b61260191503d806000833e6109298183611504565b3861251b565b6308d6307f60e31b60005260046000fd5b63fbd85bc360e01b60005260046000fd5b346103a95760403660031901126103a95760243560043561264982611f48565b60015461266d9061266690610460906001600160a01b0316610a03565b3314613f14565b612678811515613f73565b612686610460600054610a03565b91823b156103a9576126b29260009283604051809681958294637f15208d60e01b8452600484016136f9565b03925af18015610850576126c257005b8061081560006110be93611504565b346103a9576101403660031901126103a9576110be6004356126f281610a0f565b6024356126fe81610a0f565b60443561270a81610a0f565b60643561271681610a0f565b60843561272281610a0f565b60a4359061272f82610a0f565b60c4359261273c84610a0f565b60e4359461274986610a0f565b610104359661275788610a0f565b61012435986127658a610a0f565b613fb5565b346103a95760203660031901126103a9576004356127866147b9565b61278f8161433e565b806000526009602052604060002060ff19815416905533907f81a106317e7bcc4bb0d00469e38615879068b044d72620ca9aec13ad478ccb6c600080a3005b346103a95760403660031901126103a9576110be6024356004356127f182610a0f565b6127fd6110b4826134ee565b6150c3565b346103a95760003660031901126103a9576008546040516001600160a01b039091168152602090f35b346103a95761289661190f602061284136611af6565b938294819893926128506147b9565b6128586142ee565b612860614930565b6128698361433e565b61287286614356565b61287d86858561547c565b612888600c54610a03565b612891816143cb565b6145d1565b6128a4610460600354610a03565b906000604051809681958294637236934f60e11b84528a600485016133b3565b346103a95760003660031901126103a9576002546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a95760043561290a81610a0f565b6129126147b9565b6001600160a01b03168015610aa857600c80546001600160a01b031916919091179055005b6008111561294157565b634e487b7160e01b600052602160045260246000fd5b9060088210156129415752565b610a2b909291926101008061012083019580518452602081015160208501526040810151604085015260018060a01b03606082015116606085015264ffffffffff60808201511660808501526129c860a082015160a086019064ffffffffff169052565b60c08181015161ffff169085015260e08181015164ffffffffff16908501520151910190612957565b346103a95760203660031901126103a957612a406000600435612a12614263565b50612a206104608354610a03565b6040518080958194638d34875560e01b8352600483019190602083019252565b03915afa90811561085057600091612b2a575b5080519060208101519060408101516080820151612a7090610a03565b60a083015164ffffffffff1660c084015164ffffffffff169160e0850151612a999061ffff1690565b93610100860151612aae9064ffffffffff1690565b95610120015196612abe88612937565b612ac661153c565b988952602089015260408801526001600160a01b0316606087015264ffffffffff16608086015264ffffffffff1660a085015261ffff1660c084015264ffffffffff1660e0830152612b1c9061010083016142b8565b604051610795819282612964565b612b3d913d8091833e6109298183611504565b38612a53565b346103a95760203660031901126103a9576004356000526009602052602060ff604060002054166040519015158152f35b60609060031901126103a957600435906024359060443590565b346103a957612b9c36612b74565b919060018060a01b03612bb3610460600154610a03565b1680158015612ea7575b8015612e9d575b610aa8573303612e8c57612bdc610460600054610a03565b92612be684610a03565b15610aa857604051638d34875560e01b815260048101849052600081602481885afa90811561085057600091612e73575b50805115610905576001600160801b038311610fa15764ffffffffff8211610fa15760c081015164ffffffffff1694803b156103a9576000604051809263fa5fa16360e01b8252818381612c6f8a8c60048401613372565b03925af1801561085057612e5e575b508215801590612e51575b612d22575b50506000612cc392612ca36104608354610a03565b6040518080968194638d34875560e01b8352600483019190602083019252565b03915afa91821561085057600092612d05575b50604082015103610fa15764ffffffffff612cfa60c08293015164ffffffffff1690565b9216911610610fa157005b612d1b9192503d806000833e6109298183611504565b9038612cd6565b604081015115612de6575b6101209150018051612d3e81612937565b612d4781612937565b15908115612dc8575b50612d5d575b3880612c8e565b612d6b610460600054610a03565b91823b156103a95760006040518094637f15208d60e01b8252818381612d9487600483016136e2565b03925af190811561085057612cc393600092612db4575b50925050612d56565b8061081584612dc293611504565b38612dab565b6001915051612dd681612937565b612ddf81612937565b1438612d50565b612df4610460600054610a03565b803b156103a9576040516390da939b60e01b8152926000918491829084908290612e22908b60048401613372565b03925af19182156108505761012092612e3c575b50612d2d565b806108156000612e4b93611504565b38612e36565b5060408101511515612c89565b806108156000612e6d93611504565b38612c7e565b612e86913d8091833e6109298183611504565b38612c17565b63ea8e4eb560e01b60005260046000fd5b5080331415612bc4565b50612eb9610460610460600054610a03565b15612bbd565b346103a957612f016020612ed236612b74565b60085460405163e7f9caa560e01b81529586946001600160a01b039092169385938493909190600485016133b3565b03915afa90811561085057600091612f22575b506040519015158152602090f35b612f3b915060203d602011610981576109738183611504565b38612f14565b346103a95760003660031901126103a9576020604051600080516020615c868339815191528152f35b346103a95760003660031901126103a9576003546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576000546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576007546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957600c546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95761079560408051906130318183611504565b600682526518971817189960d11b602083015251918291602083526020830190611c2a565b6001600160a01b03166000908152600a6020526040902090565b9060018060a01b0316600052602052604060002090565b908160209103126103a9575180151581036103a95790565b6040513d6000823e3d90fd5b6000526009602052604060002090565b81601f820112156103a95780516130d18161154c565b926130df6040519485611504565b818452602082840101116103a957611f149160208085019101611c07565b5190610a2b82610a0f565b5190610a2b82611f17565b5190610a2b82611f31565b5190610a2b82611f48565b6020818303126103a9578051906001600160401b0382116103a95701610140818303126103a95761315861152c565b9181518352602082015160208401526040820151604084015260608201519160018060401b0383116103a957613196610120926131f89483016130bb565b60608501526131a7608082016130fd565b60808501526131b860a08201613108565b60a08501526131c960c08201613108565b60c08501526131da60e08201613113565b60e08501526131ec6101008201613108565b6101008501520161311e565b61012082015290565b91908260809103126103a9578151916020810151916060604083015192015190565b90926060929594936080835280516080840152602081015160a0840152604081015160c08401526132d061012061326a8684015161014060e08801526101c0870190611c2a565b60808401516001600160a01b03166101008701529260a081015164ffffffffff168683015260c081015164ffffffffff1661014087015260e081015161ffff1661016087015261010081015164ffffffffff1661018087015201516101a0850190612957565b95602083015260408201520152565b60009060033d116132ec57565b905060046000803e60005160e01c90565b600060443d10611f14576040513d600319016004823e8051916001600160401b0383113d60248501111761336c578183018051909390916001600160401b038311613364573d840160031901858401602001116133645750611f1492910160200190611504565b949350505050565b92915050565b908152602081019190915260400190565b908160209103126103a95751611f1481610a0f565b6001600160a01b039091168152602081019190915260400190565b6040919493926060820195825260208201520152565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b908160209103126103a9575190565b634e487b7160e01b600052601160045260246000fd5b919082039182116134e957565b6134c6565b600052600080516020615c6683398151915260205260016040600020015490565b903590601e19813603018212156103a957018035906001600160401b0382116103a9576020019181360383136103a957565b9035601e19823603018112156103a9570160208101919035906001600160401b0382116103a95781360383136103a957565b908060209392818452848401376000828201840152601f01601f1916010190565b63ffffffff8116036103a957565b3590610a2b82613594565b91611f1493919260408152833560408201526020840135606082015260408401356080820152606084013560a0820152608084013560c082015261367861366a61016061366361361661360360a08a018a613541565b61018060e08901526101c0880191613573565b60c089013561010087015260e0890135610120870152610100890135610140870152610120890135838701526136506101408a018a613541565b878303603f190161018089015290613573565b96016135a2565b63ffffffff166101a0830152565b6020818503910152613573565b9695949092608094926136af9489526020890152604088015260a0606088015260a0870191613573565b930152565b908152604081019190610a2b906020016005612957565b908152604081019190610a2b906020016001612957565b908152604081019190610a2b906020016002612957565b908152604081019291610a2b9160200190612957565b959697949297939091936137216142ee565b6137296142c4565b33600052600a602052604060002054431115610988576137608161374e368887611567565b61375936868e611567565b908a615496565b801561094857613774610460600454610a03565b604051634977ff8b60e11b81526004810183905290602090829060249082905afa90811561085057600091613914575b5015610948576137b8610460600054610a03565b604051631e1778ad60e11b8152600481018990529096906020816024818b5afa908115610850576000916138f5575b506138e4576137f7600b54610a03565b6001600160a01b03811615610aa857868b868b61383c8e8b8a61381e61046060209a610a03565b966040519a8b998a98899863728e8bbb60e01b8a5260048a01613933565b03915afa908115610850576000916138c5575b5015610fa15760209760009461387e936040519b8c9a8b998a986306f4597160e21b8a52339260048b01613979565b03925af1908115610850576000916138a6575b504361389c33613056565b5590610a2b61432a565b6138bf915060203d602011610f1e57610f108183611504565b38613891565b6138de915060203d602011610981576109738183611504565b3861384f565b630dd1bc8b60e31b60005260046000fd5b61390e915060203d602011610f1e57610f108183611504565b386137e7565b61392d915060203d602011610981576109738183611504565b386137a4565b969490611f1498969261396b9594613958928a5260a060208b015260a08a0191613573565b9260408801528683036060880152613573565b926080818503910152613573565b9998979391946139a160a098966139bb9560c08e6136af9b9681528160208201520191613573565b926001808a1b031660408c01528a830360608c0152613573565b918783036080890152613573565b60405161016091906139db8382611504565b600a815291601f19018260005b8281106139f457505050565b8060606020809385010152016139e8565b805115613a125760200190565b634e487b7160e01b600052603260045260246000fd5b805160011015613a125760400190565b805160021015613a125760600190565b805160031015613a125760800190565b805160041015613a125760a00190565b805160051015613a125760c00190565b805160061015613a125760e00190565b805160071015613a12576101000190565b805160081015613a12576101200190565b805160091015613a12576101400190565b60405190613aca604083611504565b600a8252691c1bdcda5d1a5bdb925960b21b6020830152565b60405190613af2604083611504565b600a8252691b5a5b9d105b5bdd5b9d60b21b6020830152565b60405190613b1a604083611504565b60078252666d696e7446656560c81b6020830152565b60405190613b3f604083611504565b60078252661b995dd119589d60ca1b6020830152565b60405190613b64604083611504565b600d82526c1b995dd0dbdb1b185d195c985b609a1b6020830152565b60405190613b8f604083611504565b6008825267627463507269636560c01b6020830152565b60405190613bb5604083611504565b60148252730c2eae8d0dee4d2f4cac8a6e0cadcc8e690c2e6d60631b6020830152565b60405190613be7604083611504565b600b82526a0eac6c888cac4e890c2e6d60ab1b6020830152565b60405190613c10604083611504565b600c82526b0c6dedce8e4c2c6e890c2e6d60a31b6020830152565b60405190613c3a604083611504565b601082526f07175616e74756d54696d657374616d760841b6020830152565b611f14949260609263ffffffff60e01b16825260208201528160408201520191613573565b9192303303612e8c57610120830160028151613c9981612937565b613ca281612937565b14613d60575b600c8303613d51576301e13380905b613cd682613cd161052461010089015164ffffffffff1690565b61472b565b91613cea613ce442856134dc565b91614752565b10613d405760039051613cfc81612937565b613d0581612937565b14613d33575b50613d2d93613d1b600454610a03565b92613d27600154610a03565b94615589565b90919293565b421015613d405738613d0b565b6309116a8160e11b60005260046000fd5b613d5a83614738565b90613cb7565b613d7661052461010086015164ffffffffff1690565b421115613ca85763088502f160e21b60005260046000fd5b99979593919896949290986040519960208b019b8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613deb61018082611504565b51902090565b949a999590969198929a979397613e066142c4565b613e0e6142ee565b613e16614930565b8315610fa157613e64848760209d8f9a613e4b8f8f9d8f9e60009f928893613ec79f8c908f8f613e4584614356565b8c615792565b613e56600c54610a03565b613e5f816143cb565b614609565b613e72610460600154610a03565b986040519c8d9b8c9a8b9963ee3448f960e01b8b5260048b0195926101009794919a9998959261012088019b8852602088015260408701526060860152608085015260a084015260c083015260e08201520152565b03925af190811561085057600091613ef5575b5015610fa157613ee86149ad565b613ef061432a565b600190565b613f0e915060203d602011610981576109738183611504565b38613eda565b15613f1b57565b60405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206c6f616e206f7065726174696f6e73206d616e616765722063616e6044820152692063616c6c207468697360b01b6064820152608490fd5b15613f7a57565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1bdcda5d1a5bdb881251606a1b6044820152606490fd5b97959391989694929098600080516020615d068339815191525499613fe060ff8c60401c1615151590565b9a6001600160401b0316801590816140d0575b60011490816140c6575b1590816140bd575b506140ac57600080516020615d0683398151915280546001600160401b0319166001179055614038998b614087576140d8565b61403e57565b600080516020615d06833981519152805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b600080516020615d06833981519152805460ff60401b1916600160401b1790556140d8565b63f92ee8a960e01b60005260046000fd5b90501538614005565b303b159150613ffd565b8c9150613ff3565b989793929896919094966140ea615a3d565b6140f261580e565b6140fa615a3d565b614102615a3d565b61410a615a6b565b6001600160a01b0316948515610aa8576001600160a01b0316908115610aa8576001600160a01b0316988915610aa8576001600160a01b0316928315610aa8576001600160a01b0316968715610aa8576001600160a01b0316958615610aa8576001600160a01b0316918215610aa8576001600160a01b0316938415610aa8576001600160a01b0316958615610aa8576001600160a01b03891615610aa8576141e5614233986141e06141ef966141db6142609e6141d66141ea986141d16142119e6133c9565b6133eb565b61340d565b61342f565b613451565b613473565b613495565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61423c81614cb0565b5061424681614d49565b5061425081614e06565b5061425a81614ec3565b50614f80565b50565b6040519061012082016001600160401b03811183821017611527576040526000610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b60088210156129415752565b60ff600080516020615ca683398151915254166142dd57565b63d93c066560e01b60005260046000fd5b6002600080516020615cc68339815191525414614319576002600080516020615cc683398151915255565b633ee5aeb560e01b60005260046000fd5b6001600080516020615cc683398151915255565b1561434557565b6379ec0ed760e11b60005260046000fd5b801580156143a3575b8015614394575b61436d5750565b6382d6282f60e01b60005260045264e8d4a51000602452655af3107a400060445260646000fd5b50655af3107a40008111614366565b5064e8d4a51000811061435f565b9290611764613deb92604051948593602085019788611f5d565b6001600160a01b0316156143db57565b639cef199b60e01b60005260046000fd5b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263018af30960e01b60048601613c59565b0381875afa9081156108505760009161449a575b501561448957823b156103a9576144699260009283604051809681958294630e62cc9360e21b845260048401613372565b03925af180156108505761447a5750565b806108156000610a2b93611504565b636227817160e01b60005260046000fd5b6144b3915060203d602011610981576109738183611504565b38614438565b604051636b80155f60e01b81526001600160a01b039091169593909260209284928392614424926304e9585760e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263121f00ad60e21b60048601613c59565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263544ba5af60e01b60048601613c59565b604051636b80155f60e01b81526001600160a01b039091169593909260209284928392614424926318eea33b60e21b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492635db13e1760e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492636b40812160e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492632c545d9960e21b60048601613c59565b604051634911e9cd60e01b8152600481019190915291926001600160a01b0316602083602481845afa92831561085057600093614703575b50604051630180d64960e11b8152600481019290925260209082908180602481015b03915afa908115610850576000916146e4575b50808211156146da576146c0916134dc565b905b036146c957565b63896492f560e01b60005260046000fd5b50506000906146c2565b6146fd915060203d602011610f1e57610f108183611504565b386146ae565b60209193509161472261469b93833d8511610f1e57610f108183611504565b93915091614679565b919082018092116134e957565b9062278d0082029180830462278d0014901517156134e957565b908160011b91808304600214901517156134e957565b818102929181159184041417156134e957565b90600c81146147a75762278d0081029080820462278d0014901517156134e95781018091116134e95790565b506301e1338081018091116134e95790565b600080516020615ce6833981519152600052600080516020615c6683398151915260205260ff6147f733600080516020615ba6833981519152613070565b54161561480057565b63e2517d3f60e01b60005233600452600080516020615ce683398151915260245260446000fd5b60008052600080516020615c6683398151915260205260ff61485733600080516020615be6833981519152613070565b54161561486057565b63e2517d3f60e01b60005233600452600060245260446000fd5b600080516020615b46833981519152600052600080516020615c6683398151915260205260ff6148b833600080516020615c46833981519152613070565b5416156148c157565b63e2517d3f60e01b60005233600452600080516020615b4683398151915260245260446000fd5b80600052600080516020615c6683398151915260205260ff61490e336040600020613070565b5416156149185750565b63e2517d3f60e01b6000523360045260245260446000fd5b6002600080516020615b86833981519152541461495b576002600080516020615b8683398151915255565b60405162461bcd60e51b8152602060048201526024808201527f476c6f62616c5265656e7472616e637947756172643a207265656e7472616e746044820152640818d85b1b60da1b6064820152608490fd5b6001600080516020615b8683398151915255565b91909115613f7a578115614a6a575115614a2b57116149dc57565b60405162461bcd60e51b815260206004820152602160248201527f5061796d656e7420616d6f756e74206578636565647320746f74616c206465626044820152601d60fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526017602482015276141bdcda5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd604a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f5061796d656e7420616d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b60008054604051638d34875560e01b815260048101849052929190839060249082906001600160a01b03165afa91821561085057600092614b32575b5081511490811591614b13575b50610fa157600190565b608001516001600160a01b039150614b2a90610a03565b161538614b09565b614b489192503d806000833e6109298183611504565b9038614afc565b614b5881612937565b60018114159081614c00575b81614bea575b81614bd5575b50614b7757565b60405162461bcd60e51b815260206004820152603060248201527f506f736974696f6e20737461747573206e6f7420656c696769626c6520666f7260448201526f081c185c9d1a585b081c185e5b595b9d60821b6064820152608490fd5b60049150614be281612937565b141538614b70565b9050614bf581612937565b600381141590614b6a565b9050614c0b81612937565b600281141590614b64565b6040516323b872dd60e01b60208083019182526001600160a01b0394851660248401529490931660448201526064808201959095529384529260009190614c5e608482611504565b519082855af11561309f576000513d614ca757506001600160a01b0381163b155b614c865750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614c7f565b60008052600080516020615c6683398151915260205260ff614ce082600080516020615be6833981519152613070565b5416614d435760008052600080516020615c66833981519152602052614d1481600080516020615be6833981519152613070565b805460ff1916600117905533906001600160a01b03166000600080516020615b268339815191528180a4600190565b50600090565b600080516020615b46833981519152600052600080516020615c6683398151915260205260ff614d8782600080516020615c46833981519152613070565b5416614d4357600080516020615b46833981519152600052600080516020615c66833981519152602052614dc981600080516020615c46833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615b46833981519152600080516020615b26833981519152600080a4600190565b600080516020615ce6833981519152600052600080516020615c6683398151915260205260ff614e4482600080516020615ba6833981519152613070565b5416614d4357600080516020615ce6833981519152600052600080516020615c66833981519152602052614e8681600080516020615ba6833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615ce6833981519152600080516020615b26833981519152600080a4600190565b600080516020615c86833981519152600052600080516020615c6683398151915260205260ff614f0182600080516020615c26833981519152613070565b5416614d4357600080516020615c86833981519152600052600080516020615c66833981519152602052614f4381600080516020615c26833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615c86833981519152600080516020615b26833981519152600080a4600190565b600080516020615b66833981519152600052600080516020615c6683398151915260205260ff614fbe82600080516020615bc6833981519152613070565b5416614d4357600080516020615b66833981519152600052600080516020615c6683398151915260205261500081600080516020615bc6833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615b66833981519152600080516020615b26833981519152600080a4600190565b80600052600080516020615c6683398151915260205260ff615063836040600020613070565b54166150bc5780600052600080516020615c6683398151915260205261508d826040600020613070565b805460ff1916600117905533916001600160a01b031690600080516020615b26833981519152600080a4600190565b5050600090565b80600052600080516020615c6683398151915260205260ff6150e9836040600020613070565b5416156150bc5780600052600080516020615c66833981519152602052615114826040600020613070565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b80511561515c5750565b60405163df70480560e01b815260206004820152908190611710906024830190611c2a565b9c9798939d9e9d60a08e6151f09c976101609f9a949363ffffffff9f9a96976151cb98610180968552602085015260408401526060830152608082015201526101808d0191613573565b9560c08b015260e08a0152610100890152610120880152868303610140880152613573565b9416910152565b803560208201359060408301359260608101359060808101359060a0810161521f908261350f565b60c083013560e08401359061010085013592610120860135946101408701615247908861350f565b9890976101600135996152598b613594565b6040519d8e9d60208f019d61526d9e615181565b03601f198101825261527f9082611504565b8051906020012090565b91909181156152bc576152a49261529f9161581e565b6158cd565b106152ab57565b635e31938360e11b60005260046000fd5b50505050565b6008811015612941578015159081615313575b816152fd575b816152e8575b506125ca57565b600691506152f581612937565b1415386152e1565b905061530881612937565b6002811415906152db565b905061531e81612937565b6001811415906152d5565b9061533c60209282815194859201611c07565b0190565b6040516352d1902d60e01b81529091906020816004816001600160a01b0387165afa6000918161545b575b5061538e57634c9c8ce360e01b6000526001600160a01b03831660045260246000fd5b600080516020615c0683398151915281036154475750813b1561542557600080516020615c0683398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a280511561540b5761426091615a82565b50503461541457565b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60009081526001600160a01b0391909116600452602490fd5b632a87526960e21b60005260045260246000fd5b61547591925060203d602011610f1e57610f108183611504565b903861536b565b9190613deb906117646040519384926020840196876133b3565b61549f9061433e565b80511561551c5760409051106154e0576154b890615152565b80156154c15750565b6304a45adb60e51b600052600452600160245260001960445260646000fd5b60405163df70480560e01b815260206004820152601360248201527214da59db985d1d5c99481d1bdbc81cda1bdc9d606a1b6044820152606490fd5b60405163df70480560e01b815260206004820152600f60248201526e456d707479207369676e617475726560881b6044820152606490fd5b51906001600160581b03821682036103a957565b91908260409103126103a957611f14602061558284615554565b9301615554565b604080516353f366c760e01b815260048101849052939794969195849060249082906001600160a01b03165afa92831561085057600093615720575b506040850180519093615602916155e5916001600160581b031690615958565b976155f18986516159ca565b976155fd8983836159ef565b61581e565b925160405163100c48d360e21b81526001600160a01b039092169190602082600481865afa90811561085057615641926000926156ff575b5085615a21565b6156ee5760206004916040519283809263100c48d360e21b82525afa801561085057615677916000916156cf575b508684615a21565b6156be57613cd161569a60e0615690886156a1966158cd565b96015161ffff1690565b61ffff1690565b9061ffff82116156ad57565b6319a4c60960e21b60005260046000fd5b631300e8bd60e21b60005260046000fd5b6156e8915060203d602011610f1e57610f108183611504565b3861566f565b63e5cace4160e01b60005260046000fd5b61571991925060203d602011610f1e57610f108183611504565b903861563a565b61574391935060403d60401161574c575b61573b8183611504565b810190615568565b905091386155c5565b503d615731565b6001600160a01b038116908115615781573b1561576d5750565b630fb15bad60e11b60005260045260246000fd5b63d92e233d60e01b60005260046000fd5b9896919497909392956040519860208a019a7ffa8f74e09e937f69ff6ed56ad5685b576507504860024ea40564c0432ff8034a8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613deb61018082611504565b615816615a3d565b61432a615a3d565b90660775f05a07400082116158bc576a52b7d2dcc80cd2e400000081116158ab5781158015908161587f575b5061586e5761585891614768565b6064810290808204606414901517156134e95790565b63450d49cd60e01b60005260046000fd5b905061589557606482600019040481113861584a565b634e487b7160e01b600052601260045260246000fd5b63128df78360e01b60005260046000fd5b63e9ec682160e01b60005260046000fd5b81156159475768327cb2734119d3b7a9601e1b8111615936577e068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa4381116159255761271081029080820461271014901517156134e9570490565b633da428df60e21b60005260046000fd5b638a94304d60e01b60005260046000fd5b6323d359a360e01b60005260046000fd5b68327cb2734119d3b7a9601e1b81116159365761271082116159b9578015801590816159a6575b50615995576127109161599191614768565b0490565b6340c0d6e560e11b60005260046000fd5b905061589557806000190482113861597f565b637186728f60e11b60005260046000fd5b908101908181116134e95781106159de5790565b636be580af60e11b60005260046000fd5b660775f05a074000106158bc576a52b7d2dcc80cd2e4000000106158ab5768327cb2734119d3b7a9601e1b1061593657565b908015615a3557615a31916158cd565b1090565b505050600090565b60ff600080516020615d068339815191525460401c1615615a5a57565b631afcd79f60e31b60005260046000fd5b600080516020615b8683398151915254156149ad57565b600080611f1493602081519101845af43d15615ac0573d91615aa38361154c565b92615ab16040519485611504565b83523d6000602085013e615ac4565b6060915b90615aea5750805115615ad957602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580615b1c575b615afb575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15615af356fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16f4a222f146e17d7057e96450fc67f08ce8569fd5cf3b62a23983c4f4b9e497f35cd165352ca420415a2423a5a15f077145431fc21aec9b84cb1b8800541a5c26b16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c1b3eac282bb4080c159156c6faa9df237c5a80b4a568c4661ea2010de1eb2caeb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd6c996ba66d0dbb3c38dbaaac7d192f7d41593dd02b55a9147053192322b1d3b615dc3ea5d9654acb949989a0a9587a0da8cd03451c0368cc676ec7c08dd81402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268004ad5455c7a5edb25c14b61cc4d6429153aab5507800334ac05d65e9828801bf3cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00aaae1071a267a66db1d9c0714498307791bc0f693f5b254c861d95ca60503b6da2646970667358221220d85dc18b5a8b8c89d299d86d043667445e0905b1b3ef60a2fe3292c92a18351264736f6c634300081c0033";
38871
38924
  var isSuperArgs = (xs) => xs.length > 1;
38872
38925
  var PositionManager__factory = class extends ContractFactory2 {
38873
38926
  constructor(...args) {
@@ -42121,6 +42174,9 @@ function convertEthereumSignatureToBitcoinDER(signature2) {
42121
42174
  r2 = rBN.toArrayLike(Buffer, "be");
42122
42175
  s = sBN.toArrayLike(Buffer, "be");
42123
42176
  function ensurePositive(buffer) {
42177
+ if (!buffer || buffer.length === 0) {
42178
+ return Buffer.alloc(0);
42179
+ }
42124
42180
  if (buffer[0] & 128) {
42125
42181
  const newBuffer = Buffer.alloc(buffer.length + 1);
42126
42182
  newBuffer[0] = 0;
@@ -42203,7 +42259,9 @@ var ContractManager = class {
42203
42259
  contractRunner
42204
42260
  );
42205
42261
  } catch (error) {
42206
- throw new Error(`Failed to connect to PositionManager at ${contractAddresses.positionManager}: ${error}`);
42262
+ throw new Error(
42263
+ `Failed to connect to PositionManager at ${contractAddresses.positionManager}: ${error}`
42264
+ );
42207
42265
  }
42208
42266
  })(),
42209
42267
  loanOperationsManager: (() => {
@@ -42213,7 +42271,9 @@ var ContractManager = class {
42213
42271
  contractRunner
42214
42272
  );
42215
42273
  } catch (error) {
42216
- throw new Error(`Failed to connect to LoanOperationsManager at ${contractAddresses.loanOperationsManager}: ${error}`);
42274
+ throw new Error(
42275
+ `Failed to connect to LoanOperationsManager at ${contractAddresses.loanOperationsManager}: ${error}`
42276
+ );
42217
42277
  }
42218
42278
  })(),
42219
42279
  ucdController: (() => {
@@ -42223,7 +42283,9 @@ var ContractManager = class {
42223
42283
  contractRunner
42224
42284
  );
42225
42285
  } catch (error) {
42226
- throw new Error(`Failed to connect to UCDController at ${contractAddresses.ucdToken}: ${error}`);
42286
+ throw new Error(
42287
+ `Failed to connect to UCDController at ${contractAddresses.ucdToken}: ${error}`
42288
+ );
42227
42289
  }
42228
42290
  })(),
42229
42291
  priceFeed: (() => {
@@ -42233,7 +42295,9 @@ var ContractManager = class {
42233
42295
  contractRunner
42234
42296
  );
42235
42297
  } catch (error) {
42236
- throw new Error(`Failed to connect to PriceFeed at ${contractAddresses.priceFeedConsumer}: ${error}`);
42298
+ throw new Error(
42299
+ `Failed to connect to PriceFeed at ${contractAddresses.priceFeedConsumer}: ${error}`
42300
+ );
42237
42301
  }
42238
42302
  })(),
42239
42303
  termManager: (() => {
@@ -42243,7 +42307,9 @@ var ContractManager = class {
42243
42307
  contractRunner
42244
42308
  );
42245
42309
  } catch (error) {
42246
- throw new Error(`Failed to connect to TermManager at ${contractAddresses.termManager}: ${error}`);
42310
+ throw new Error(
42311
+ `Failed to connect to TermManager at ${contractAddresses.termManager}: ${error}`
42312
+ );
42247
42313
  }
42248
42314
  })(),
42249
42315
  circuitBreaker: (() => {
@@ -42253,7 +42319,9 @@ var ContractManager = class {
42253
42319
  contractRunner
42254
42320
  );
42255
42321
  } catch (error) {
42256
- throw new Error(`Failed to connect to CircuitBreaker at ${contractAddresses.circuitBreaker}: ${error}`);
42322
+ throw new Error(
42323
+ `Failed to connect to CircuitBreaker at ${contractAddresses.circuitBreaker}: ${error}`
42324
+ );
42257
42325
  }
42258
42326
  })(),
42259
42327
  communityManager: (() => {
@@ -42263,7 +42331,9 @@ var ContractManager = class {
42263
42331
  contractRunner
42264
42332
  );
42265
42333
  } catch (error) {
42266
- throw new Error(`Failed to connect to CommunityManager at ${contractAddresses.communityManager}: ${error}`);
42334
+ throw new Error(
42335
+ `Failed to connect to CommunityManager at ${contractAddresses.communityManager}: ${error}`
42336
+ );
42267
42337
  }
42268
42338
  })(),
42269
42339
  liquidationManager: (() => {
@@ -42273,7 +42343,9 @@ var ContractManager = class {
42273
42343
  contractRunner
42274
42344
  );
42275
42345
  } catch (error) {
42276
- throw new Error(`Failed to connect to LiquidationManager at ${contractAddresses.liquidationManager}: ${error}`);
42346
+ throw new Error(
42347
+ `Failed to connect to LiquidationManager at ${contractAddresses.liquidationManager}: ${error}`
42348
+ );
42277
42349
  }
42278
42350
  })()
42279
42351
  };
@@ -47617,6 +47689,25 @@ async function sendTelegramMessage(chatId, chatToken, message, threadId) {
47617
47689
  function formatMintMessage(mintAmount, loanId, txHash) {
47618
47690
  return `${mintAmount} UCD was minted for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
47619
47691
  }
47692
+ function formatBalanceConfirmationMessage(loanId) {
47693
+ return `Loan id: ${loanId} was updated to PENDING_MINT`;
47694
+ }
47695
+ function formatBalanceConfirmationFailureMessage(loanId) {
47696
+ return `FAILED to update to PENDING_MINT for loan id ${loanId}`;
47697
+ }
47698
+
47699
+ // src/types/loanStatus.ts
47700
+ var LoanStatus = /* @__PURE__ */ ((LoanStatus2) => {
47701
+ LoanStatus2[LoanStatus2["PENDING_DEPOSIT"] = 0] = "PENDING_DEPOSIT";
47702
+ LoanStatus2[LoanStatus2["PENDING_MINT"] = 1] = "PENDING_MINT";
47703
+ LoanStatus2[LoanStatus2["ACTIVE"] = 2] = "ACTIVE";
47704
+ LoanStatus2[LoanStatus2["EXPIRED"] = 3] = "EXPIRED";
47705
+ LoanStatus2[LoanStatus2["LIQUIDATABLE"] = 4] = "LIQUIDATABLE";
47706
+ LoanStatus2[LoanStatus2["LIQUIDATED"] = 5] = "LIQUIDATED";
47707
+ LoanStatus2[LoanStatus2["REPAID"] = 6] = "REPAID";
47708
+ LoanStatus2[LoanStatus2["CLOSED"] = 7] = "CLOSED";
47709
+ return LoanStatus2;
47710
+ })(LoanStatus || {});
47620
47711
 
47621
47712
  // src/modules/diamond-hands-sdk.ts
47622
47713
  var DiamondHandsSDK = class _DiamondHandsSDK {
@@ -48010,7 +48101,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48010
48101
  loanCreation: 1,
48011
48102
  // Default PKP security validation version
48012
48103
  minting: 4,
48013
- // Default business rules validation version
48104
+ // Default business rules validation version
48014
48105
  payment: 1,
48015
48106
  // Default payment validation version
48016
48107
  extension: 4
@@ -48339,14 +48430,14 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48339
48430
  const chainId = Number(network.chainId);
48340
48431
  const mode = chainId === 1 || chainId === 137 ? "prod" : "dev";
48341
48432
  const signer = this.getSignerOrThrow();
48342
- const contracts = mode === "dev" ? {
48433
+ const contracts = {
48343
48434
  PositionManager: this.config.contractAddresses?.positionManager || "",
48344
48435
  LoanOperationsManagerModule: this.config.contractAddresses?.loanOperationsManager || "",
48345
48436
  TermManagerModule: this.config.contractAddresses?.termManager || "",
48346
48437
  UCDController: this.config.contractAddresses?.ucdController || ""
48347
- } : void 0;
48348
- if (this.config.debug && mode === "dev") {
48349
- log.info(" Contract addresses for dev mode:", {});
48438
+ };
48439
+ if (this.config.debug) {
48440
+ log.info(" Contract addresses passed to LIT Action:", {});
48350
48441
  log.info(
48351
48442
  ` PositionManager: ${contracts?.PositionManager || "MISSING"}`
48352
48443
  );
@@ -48410,7 +48501,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48410
48501
  litActionResult = await this.litOps.requestMintAuthorization({
48411
48502
  authMessage: {
48412
48503
  ...auth,
48413
- ...mode === "dev" && contracts && { contractAddresses: contracts }
48504
+ contractAddresses: contracts
48414
48505
  },
48415
48506
  userSignature: auth.signature,
48416
48507
  ...request.customRpcUrl && { customRpcUrl: request.customRpcUrl },
@@ -48524,11 +48615,21 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48524
48615
  }
48525
48616
  const litSignature = validationResponse.signature;
48526
48617
  if (this.config.debug) {
48618
+ log.info("\u{1F50D} LIT Action Response Details", {});
48619
+ log.info(` Approved: ${validationResponse.approved}`, {});
48620
+ log.info(` Reason: ${validationResponse.reason || "N/A"}`, {});
48621
+ log.info(` Has signature: ${!!validationResponse.signature}`, {});
48527
48622
  log.info("\u{1F50D} Extracting signature from validation response", {
48528
48623
  signatureType: typeof litSignature,
48529
48624
  signatureLength: typeof litSignature === "string" ? litSignature.length : "N/A",
48530
48625
  signaturePreview: typeof litSignature === "string" ? litSignature.substring(0, 50) + "..." : String(litSignature).substring(0, 50)
48531
48626
  });
48627
+ if (validationResponse.authorizedSpendsHash) {
48628
+ log.info(
48629
+ ` authorizedSpendsHash: ${validationResponse.authorizedSpendsHash}`,
48630
+ {}
48631
+ );
48632
+ }
48532
48633
  }
48533
48634
  let signatureBytes;
48534
48635
  if (typeof litSignature === "string") {
@@ -48599,19 +48700,211 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48599
48700
  ]
48600
48701
  )
48601
48702
  );
48602
- const tx = await positionManager.mintUCD(
48603
- positionIdBytes32,
48604
- validationResponse.mintAmount,
48605
- validationResponse.mintFee,
48606
- validationResponse.newDebt,
48607
- validationResponse.newCollateral,
48608
- validationResponse.btcPrice,
48609
- validationResponse.authorizedSpendsHash,
48610
- ucdDebtHash,
48611
- contractHash,
48612
- validationResponse.timestamp,
48613
- finalSignature
48614
- );
48703
+ if (this.config.debug) {
48704
+ log.info("\u{1F50D} DEBUG: Detailed Contract Call Parameters", {});
48705
+ log.info(" === LIT Action Response ===", {});
48706
+ log.info(
48707
+ ` authorizedSpendsHash: ${validationResponse.authorizedSpendsHash}`,
48708
+ {}
48709
+ );
48710
+ log.info(` mintAmount: ${validationResponse.mintAmount}`, {});
48711
+ log.info(` mintFee: ${validationResponse.mintFee}`, {});
48712
+ log.info(` newDebt: ${validationResponse.newDebt}`, {});
48713
+ log.info(` newCollateral: ${validationResponse.newCollateral}`, {});
48714
+ log.info(` btcPrice: ${validationResponse.btcPrice}`, {});
48715
+ log.info(
48716
+ ` timestamp (quantumTimestamp): ${validationResponse.timestamp}`,
48717
+ {}
48718
+ );
48719
+ log.info(" === SDK Calculated Hashes ===", {});
48720
+ log.info(` Current UCD Debt (from position): ${currentDebt}`, {});
48721
+ log.info(` ucdDebtHash: ${ucdDebtHash}`, {});
48722
+ log.info(" === Contract Addresses for contractHash ===", {});
48723
+ log.info(` PositionManager: ${positionManagerAddress}`, {});
48724
+ log.info(
48725
+ ` LoanOpsManager: ${this.getContractAddressesOrThrow().loanOperationsManager}`,
48726
+ {}
48727
+ );
48728
+ log.info(
48729
+ ` TermManager: ${this.getContractAddressesOrThrow().termManager}`,
48730
+ {}
48731
+ );
48732
+ log.info(
48733
+ ` UCDController: ${this.getContractAddressesOrThrow().ucdController}`,
48734
+ {}
48735
+ );
48736
+ log.info(` contractHash: ${contractHash}`, {});
48737
+ log.info(" === Signature ===", {});
48738
+ log.info(
48739
+ ` Signature (first 20 chars): ${finalSignature.substring(0, 20)}...`,
48740
+ {}
48741
+ );
48742
+ log.info(` Signature length: ${finalSignature.length}`, {});
48743
+ }
48744
+ if (this.config.debug) {
48745
+ log.info("\u{1F50D} PREFLIGHT: Attempting diagnostic gas estimation...", {});
48746
+ }
48747
+ try {
48748
+ const iface = new ethers_exports.utils.Interface(positionManagerAbi);
48749
+ const calldata = iface.encodeFunctionData("mintUCD", [
48750
+ positionIdBytes32,
48751
+ validationResponse.mintAmount,
48752
+ validationResponse.mintFee,
48753
+ validationResponse.newDebt,
48754
+ validationResponse.newCollateral,
48755
+ validationResponse.btcPrice,
48756
+ validationResponse.authorizedSpendsHash,
48757
+ ucdDebtHash,
48758
+ contractHash,
48759
+ validationResponse.timestamp,
48760
+ finalSignature
48761
+ ]);
48762
+ const provider = this.getSignerOrThrow().provider;
48763
+ if (!provider) {
48764
+ throw new Error("Provider not available");
48765
+ }
48766
+ const signerAddress = await this.getSignerOrThrow().getAddress();
48767
+ if (this.config.debug) {
48768
+ log.info(" Executing diagnostic eth_call...", {});
48769
+ }
48770
+ await provider.call({
48771
+ to: positionManagerAddress,
48772
+ from: signerAddress,
48773
+ data: calldata
48774
+ });
48775
+ if (this.config.debug) {
48776
+ log.info(" \u2705 Diagnostic eth_call succeeded!", {});
48777
+ }
48778
+ } catch (preflightError) {
48779
+ if (this.config.debug) {
48780
+ log.error(
48781
+ "\u274C PREFLIGHT CHECK FAILED - Diagnostic eth_call reverted",
48782
+ {}
48783
+ );
48784
+ log.error(` Error message: ${preflightError?.message}`, {});
48785
+ log.error(` Error code: ${preflightError?.code}`, {});
48786
+ log.error(` Error data: ${preflightError?.data || "none"}`, {});
48787
+ }
48788
+ let errorData = preflightError?.data || preflightError?.error?.data?.data;
48789
+ const errorMessage = preflightError?.reason || preflightError?.message || "Unknown error";
48790
+ if (errorData && typeof errorData === "string" && errorData.startsWith("0x") && errorData.length > 10) {
48791
+ const selector = errorData.slice(0, 10);
48792
+ const knownErrors = {
48793
+ "0x8baa579f": "InvalidSignature()",
48794
+ "0xd92e233d": "ValidationFailed()",
48795
+ "0x3ee5aeb5": "OperationNotAuthorized()",
48796
+ "0x70f4b32a": "UnauthorizedSigner()",
48797
+ "0x48f5c3ed": "Unauthorized()",
48798
+ "0x0b135ddc": "StateHashMismatch()",
48799
+ "0xdc52ba78": "QuantumExpired()",
48800
+ "0x6b3b8c1c": "QuantumAlreadyUsed()"
48801
+ };
48802
+ const errorName = knownErrors[selector] || `Unknown error ${selector}`;
48803
+ throw new Error(
48804
+ `Preflight check failed - mintUCD would revert:
48805
+ Error: ${errorName}
48806
+ Selector: ${selector}
48807
+ Message: ${errorMessage}
48808
+ Data: ${errorData}`
48809
+ );
48810
+ } else {
48811
+ throw new Error(
48812
+ `Preflight check failed - mintUCD would revert:
48813
+ ${errorMessage}`
48814
+ );
48815
+ }
48816
+ }
48817
+ let tx;
48818
+ try {
48819
+ tx = await positionManager.mintUCD(
48820
+ positionIdBytes32,
48821
+ validationResponse.mintAmount,
48822
+ validationResponse.mintFee,
48823
+ validationResponse.newDebt,
48824
+ validationResponse.newCollateral,
48825
+ validationResponse.btcPrice,
48826
+ validationResponse.authorizedSpendsHash,
48827
+ ucdDebtHash,
48828
+ contractHash,
48829
+ validationResponse.timestamp,
48830
+ finalSignature
48831
+ );
48832
+ } catch (estimateError) {
48833
+ if (estimateError.code === "UNPREDICTABLE_GAS_LIMIT" || estimateError.code === "CALL_EXCEPTION") {
48834
+ if (this.config.debug) {
48835
+ log.info(
48836
+ "\u{1F50D} DEBUG: Gas estimation failed, attempting raw eth_call",
48837
+ {}
48838
+ );
48839
+ log.info(` Error code: ${estimateError.code}`, {});
48840
+ log.info(` Error message: ${estimateError.message}`, {});
48841
+ }
48842
+ try {
48843
+ const iface = new ethers_exports.utils.Interface(positionManagerAbi);
48844
+ const calldata = iface.encodeFunctionData("mintUCD", [
48845
+ positionIdBytes32,
48846
+ validationResponse.mintAmount,
48847
+ validationResponse.mintFee,
48848
+ validationResponse.newDebt,
48849
+ validationResponse.newCollateral,
48850
+ validationResponse.btcPrice,
48851
+ validationResponse.authorizedSpendsHash,
48852
+ ucdDebtHash,
48853
+ contractHash,
48854
+ validationResponse.timestamp,
48855
+ finalSignature
48856
+ ]);
48857
+ if (this.config.debug) {
48858
+ log.info(
48859
+ ` Raw call data (first 100 chars): ${calldata.substring(0, 100)}...`,
48860
+ {}
48861
+ );
48862
+ }
48863
+ const provider = this.getSignerOrThrow().provider;
48864
+ if (!provider) {
48865
+ throw new Error("Provider not available");
48866
+ }
48867
+ await provider.call({
48868
+ to: positionManagerAddress,
48869
+ from: await this.getSignerOrThrow().getAddress(),
48870
+ data: calldata
48871
+ });
48872
+ } catch (callError) {
48873
+ if (this.config.debug) {
48874
+ log.info("\u{1F50D} DEBUG: Raw eth_call failed with error:", {});
48875
+ log.info(` Error message: ${callError?.message}`, {});
48876
+ log.info(` Error code: ${callError?.code}`, {});
48877
+ log.info(` Error data type: ${typeof callError?.data}`, {});
48878
+ log.info(` Error data value: ${callError?.data}`, {});
48879
+ }
48880
+ let errorData = callError?.data || callError?.error?.data?.data || callError?.error?.data;
48881
+ const errorMessage = callError?.reason || callError?.message || "Unknown error";
48882
+ if (errorData && typeof errorData === "string" && errorData.startsWith("0x") && errorData.length > 10) {
48883
+ const selector = errorData.slice(0, 10);
48884
+ const knownErrors = {
48885
+ "0x8baa579f": "InvalidSignature()",
48886
+ "0xd92e233d": "ValidationFailed()",
48887
+ "0x3ee5aeb5": "OperationNotAuthorized()",
48888
+ "0x70f4b32a": "UnauthorizedSigner()",
48889
+ "0x48f5c3ed": "Unauthorized()"
48890
+ };
48891
+ const errorName = knownErrors[selector] || `Unknown error ${selector}`;
48892
+ throw new Error(
48893
+ `mintUCD reverted: ${errorName}
48894
+ Error selector: ${selector}
48895
+ Error data: ${errorData}
48896
+ Message: ${errorMessage}`
48897
+ );
48898
+ } else {
48899
+ throw new Error(
48900
+ `mintUCD reverted: ${errorMessage}
48901
+ Error data: ${errorData || "none"}`
48902
+ );
48903
+ }
48904
+ }
48905
+ }
48906
+ throw estimateError;
48907
+ }
48615
48908
  const receipt = await tx.wait(1, 3e5);
48616
48909
  let amountMinted;
48617
48910
  let positionId;
@@ -48692,7 +48985,231 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
48692
48985
  * @returns Transaction receipt
48693
48986
  */
48694
48987
  async extendPosition(_positionId, _selectedTerm) {
48695
- throw new Error("extendPosition not yet implemented - requires requestExtendAuthorization in lit-ops");
48988
+ throw new Error(
48989
+ "extendPosition not yet implemented - requires requestExtendAuthorization in lit-ops"
48990
+ );
48991
+ }
48992
+ /**
48993
+ * Confirm Bitcoin balance for a position
48994
+ *
48995
+ * This method:
48996
+ * 1. Queries BTC balance via LIT Action
48997
+ * 2. Gets PKP signature for the balance
48998
+ * 3. Calls PositionManager.updateBalance() on-chain
48999
+ * 4. Transitions position status to PENDING_MINT
49000
+ *
49001
+ * @param positionId - Position ID to confirm balance for
49002
+ * @returns Confirmation result with transaction details
49003
+ */
49004
+ async confirmBalance(positionId) {
49005
+ const initCheck = this.checkInitialized();
49006
+ if (!initCheck.success) {
49007
+ const error = `SDK not initialized: ${initCheck.error.message}`;
49008
+ if (this.config.telegram) {
49009
+ try {
49010
+ await sendTelegramMessage(
49011
+ this.config.telegram.chatId,
49012
+ this.config.telegram.chatToken,
49013
+ formatBalanceConfirmationFailureMessage(positionId),
49014
+ this.config.telegram.threadId
49015
+ );
49016
+ } catch (e) {
49017
+ }
49018
+ }
49019
+ return {
49020
+ success: false,
49021
+ error,
49022
+ positionId
49023
+ };
49024
+ }
49025
+ try {
49026
+ if (this.config.debug) {
49027
+ log.info("\u{1F4DD} Starting balance confirmation", { positionId });
49028
+ }
49029
+ const position = await this.getPosition(positionId);
49030
+ if (!position) {
49031
+ throw new Error(`Position not found: ${positionId}`);
49032
+ }
49033
+ if (this.config.debug) {
49034
+ log.info("\u2705 Position found", {
49035
+ status: position.status,
49036
+ pkpId: position.pkpId
49037
+ });
49038
+ }
49039
+ const pkpCache = this.cacheManager.getCache("pkp-data", {
49040
+ maxSize: 500,
49041
+ ttlMs: 24 * 60 * 60 * 1e3
49042
+ });
49043
+ const pkpData = pkpCache.get(positionId);
49044
+ if (!pkpData) {
49045
+ throw new Error(
49046
+ "PKP data not found in cache - position may be from a previous session"
49047
+ );
49048
+ }
49049
+ const contractAddresses = {
49050
+ PositionManager: this.config.contractAddresses?.positionManager || "",
49051
+ LoanOperationsManagerModule: this.config.contractAddresses?.loanOperationsManager || "",
49052
+ TermManagerModule: this.config.contractAddresses?.termManager || ""
49053
+ };
49054
+ const chainId = await this.config.provider?.getNetwork().then((n2) => n2.chainId) || 11155111;
49055
+ const chain = chainId === 11155111 ? "sepolia" : chainId === 1337 ? "hardhat" : "sepolia";
49056
+ let bitcoinProviderUrl = "http://localhost:3006/api/esplora";
49057
+ if (this.config.bitcoinProviders && this.config.bitcoinProviders.length > 0 && this.config.bitcoinProviders[0]?.url) {
49058
+ bitcoinProviderUrl = this.config.bitcoinProviders[0].url;
49059
+ }
49060
+ const signer = this.getSignerOrThrow();
49061
+ const signerAddress = await signer.getAddress();
49062
+ const auth = await generateBalanceConfirmationAuthorization(
49063
+ positionId,
49064
+ chainId,
49065
+ chain === "hardhat" ? "dev" : "prod",
49066
+ signer
49067
+ );
49068
+ if (this.config.debug) {
49069
+ log.info("\u2705 Quantum authorization generated", {
49070
+ caller: signerAddress,
49071
+ timestamp: auth.timestamp,
49072
+ signature: auth.signature.substring(0, 20) + "..."
49073
+ });
49074
+ }
49075
+ await waitUntilTimestamp(auth.timestamp);
49076
+ validateQuantumTiming(auth.timestamp, 30);
49077
+ if (this.config.debug) {
49078
+ log.info("\u{1F50D} Calling LIT Action to check balance", {
49079
+ chain,
49080
+ bitcoinProviderUrl,
49081
+ publicKey: pkpData.publicKey.substring(0, 20) + "..."
49082
+ });
49083
+ }
49084
+ const result = await this.litOps.requestBalanceConfirmation({
49085
+ positionId,
49086
+ chain,
49087
+ bitcoinProviderUrl,
49088
+ publicKey: pkpData.publicKey,
49089
+ authMessage: {
49090
+ positionId,
49091
+ timestamp: auth.timestamp,
49092
+ chainId: auth.chainId,
49093
+ caller: signerAddress,
49094
+ action: "confirmBalance",
49095
+ mode: auth.mode
49096
+ },
49097
+ userSignature: auth.signature,
49098
+ contractAddresses,
49099
+ customRpcUrl: this.config.ethRpcUrl,
49100
+ priceProviders: this.config.priceProviders,
49101
+ pkpTokenId: pkpData.tokenId,
49102
+ pkpEthAddress: pkpData.ethAddress,
49103
+ devMode: this.config.debug
49104
+ // Pass debug flag as devMode to bypass Bitcoin provider whitelist
49105
+ });
49106
+ if (!result.success) {
49107
+ throw new Error(
49108
+ `Balance confirmation failed: ${result.error || "Unknown error"}`
49109
+ );
49110
+ }
49111
+ const balanceData = {
49112
+ vaultBalance: result.vaultBalance || "",
49113
+ btcPrice: result.btcPrice || "",
49114
+ timestamp: result.timestamp || Math.floor(Date.now() / 1e3),
49115
+ signature: result.signature || ""
49116
+ };
49117
+ if (!balanceData.vaultBalance || !balanceData.btcPrice || !balanceData.signature) {
49118
+ throw new Error("Invalid balance data returned from LIT Action");
49119
+ }
49120
+ if (this.config.debug) {
49121
+ log.info("\u2705 Balance data received", {
49122
+ vaultBalance: balanceData.vaultBalance,
49123
+ btcPrice: balanceData.btcPrice
49124
+ });
49125
+ }
49126
+ const positionManagerResult = this.contractManager.getPositionManager();
49127
+ if (!positionManagerResult.success) {
49128
+ throw new Error(
49129
+ `Failed to get PositionManager: ${positionManagerResult.error.message}`
49130
+ );
49131
+ }
49132
+ const positionManager = positionManagerResult.value;
49133
+ if (this.config.debug) {
49134
+ log.info("\u{1F4DD} Calling PositionManager.updateBalance()");
49135
+ }
49136
+ const tx = await positionManager.updateBalance(
49137
+ positionId,
49138
+ balanceData.vaultBalance,
49139
+ balanceData.btcPrice,
49140
+ auth.timestamp,
49141
+ balanceData.signature
49142
+ );
49143
+ if (this.config.debug) {
49144
+ log.info("\u23F3 Waiting for transaction confirmation", {
49145
+ hash: tx.hash
49146
+ });
49147
+ }
49148
+ const receipt = await tx.wait();
49149
+ if (!receipt) {
49150
+ throw new Error("Transaction receipt is null");
49151
+ }
49152
+ if (this.config.debug) {
49153
+ log.info("\u2705 Balance confirmed on-chain", {
49154
+ blockNumber: receipt.blockNumber,
49155
+ gasUsed: receipt.gasUsed.toString()
49156
+ });
49157
+ }
49158
+ if (this.config.telegram) {
49159
+ try {
49160
+ const message = formatBalanceConfirmationMessage(positionId);
49161
+ await sendTelegramMessage(
49162
+ this.config.telegram.chatId,
49163
+ this.config.telegram.chatToken,
49164
+ message,
49165
+ this.config.telegram.threadId
49166
+ );
49167
+ } catch (telegramError) {
49168
+ if (this.config.debug) {
49169
+ log.warn("\u26A0\uFE0F Failed to send Telegram notification", {
49170
+ error: telegramError instanceof Error ? telegramError.message : String(telegramError)
49171
+ });
49172
+ }
49173
+ }
49174
+ }
49175
+ return {
49176
+ success: true,
49177
+ transactionHash: receipt.hash || tx.hash,
49178
+ blockNumber: receipt.blockNumber,
49179
+ blockHash: receipt.blockHash,
49180
+ gasUsed: receipt.gasUsed.toString(),
49181
+ effectiveGasPrice: receipt.effectiveGasPrice?.toString() || "0",
49182
+ positionId,
49183
+ confirmedBalance: balanceData.vaultBalance,
49184
+ btcPrice: balanceData.btcPrice,
49185
+ newStatus: 1 /* PENDING_MINT */
49186
+ };
49187
+ } catch (error) {
49188
+ const errorMessage = error.message || String(error);
49189
+ if (this.config.debug) {
49190
+ log.error("\u274C Balance confirmation failed", {
49191
+ error: errorMessage,
49192
+ positionId
49193
+ });
49194
+ }
49195
+ if (this.config.telegram) {
49196
+ try {
49197
+ const message = formatBalanceConfirmationFailureMessage(positionId);
49198
+ await sendTelegramMessage(
49199
+ this.config.telegram.chatId,
49200
+ this.config.telegram.chatToken,
49201
+ message,
49202
+ this.config.telegram.threadId
49203
+ );
49204
+ } catch (telegramError) {
49205
+ }
49206
+ }
49207
+ return {
49208
+ success: false,
49209
+ error: errorMessage,
49210
+ positionId
49211
+ };
49212
+ }
48696
49213
  }
48697
49214
  /**
48698
49215
  * Make a payment on a loan position
@@ -49036,7 +49553,9 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49036
49553
  },
49037
49554
  userSignature: auth.signature,
49038
49555
  customRpcUrl,
49039
- customBitcoinRpcUrl
49556
+ customBitcoinRpcUrl,
49557
+ priceProviders: this.config.priceProviders
49558
+ // Pass price provider API keys
49040
49559
  });
49041
49560
  if (this.config.debug) {
49042
49561
  log.info(` Withdrawal Auth Result (attempt ${attempt}):`, {
@@ -49198,7 +49717,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49198
49717
  const positionManagerContract = new ethers_exports.Contract(
49199
49718
  this.config.contractAddresses.positionManager,
49200
49719
  [
49201
- "function withdrawBTC((bytes32 positionId, bytes32 actionHash, bytes32 authorizedSpendsHash, bytes32 ucdDebtHash, string withdrawalAddress, uint256 totalDeduction, uint256 newCollateral, uint256 quantumTimestamp, uint256 btcPrice, string utxoTxid, uint32 utxoVout) params, bytes signature) external returns (bool)"
49720
+ "function withdrawBTC((bytes32 positionId, bytes32 actionHash, bytes32 authorizedSpendsHash, bytes32 ucdDebtHash, bytes32 contractBundleHash, string withdrawalAddress, uint256 totalDeduction, uint256 newCollateral, uint256 quantumTimestamp, uint256 btcPrice, string utxoTxid, uint32 utxoVout) params, bytes signature) external returns (bool)"
49202
49721
  ],
49203
49722
  this.config.contractSigner
49204
49723
  );
@@ -49207,6 +49726,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49207
49726
  actionHash: validationResponse.actionHash,
49208
49727
  authorizedSpendsHash: validationResponse.authorizedSpendsHash,
49209
49728
  ucdDebtHash: validationResponse.ucdDebtHash,
49729
+ contractBundleHash: validationResponse.contractBundleHash,
49210
49730
  withdrawalAddress: validationResponse.destinationAddress,
49211
49731
  totalDeduction: validationResponse.totalDeduction,
49212
49732
  newCollateral: validationResponse.remainingCollateral,
@@ -49217,20 +49737,67 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49217
49737
  utxoVout: validationResponse.utxoVout
49218
49738
  // Real Bitcoin UTXO vout
49219
49739
  };
49220
- const tx = await positionManagerContract["withdrawBTC"](
49221
- withdrawalParams,
49222
- signatureBytes
49223
- );
49740
+ if (this.config.debug) {
49741
+ log.info("\u{1F4DD} Withdrawal params before transaction:", {
49742
+ positionId: withdrawalParams.positionId,
49743
+ actionHash: withdrawalParams.actionHash,
49744
+ authorizedSpendsHash: withdrawalParams.authorizedSpendsHash,
49745
+ ucdDebtHash: withdrawalParams.ucdDebtHash,
49746
+ contractBundleHash: withdrawalParams.contractBundleHash,
49747
+ withdrawalAddress: withdrawalParams.withdrawalAddress,
49748
+ totalDeduction: withdrawalParams.totalDeduction?.toString(),
49749
+ newCollateral: withdrawalParams.newCollateral?.toString(),
49750
+ quantumTimestamp: withdrawalParams.quantumTimestamp?.toString(),
49751
+ btcPrice: withdrawalParams.btcPrice?.toString(),
49752
+ utxoTxid: withdrawalParams.utxoTxid,
49753
+ utxoVout: withdrawalParams.utxoVout
49754
+ });
49755
+ }
49756
+ let tx;
49757
+ try {
49758
+ tx = await positionManagerContract["withdrawBTC"](
49759
+ withdrawalParams,
49760
+ signatureBytes
49761
+ );
49762
+ } catch (txError) {
49763
+ const txErrorMsg = txError instanceof Error ? txError.message : String(txError);
49764
+ if (this.config.debug) {
49765
+ log.error("\u274C withdrawBTC transaction failed", {
49766
+ error: txErrorMsg,
49767
+ withdrawalParams,
49768
+ signatureBytesLength: signatureBytes.length
49769
+ });
49770
+ }
49771
+ return {
49772
+ success: false,
49773
+ error: `Transaction submission failed: ${txErrorMsg}`
49774
+ };
49775
+ }
49224
49776
  if (this.config.debug) {
49225
49777
  log.info("\u2705 Transaction submitted, waiting for confirmation:", {
49226
49778
  txHash: tx.hash
49227
49779
  });
49228
49780
  }
49229
- const receipt = await tx.wait();
49781
+ let receipt;
49782
+ try {
49783
+ receipt = await tx.wait();
49784
+ } catch (waitError) {
49785
+ const waitErrorMsg = waitError instanceof Error ? waitError.message : String(waitError);
49786
+ if (this.config.debug) {
49787
+ log.error("\u274C Transaction wait failed", {
49788
+ error: waitErrorMsg,
49789
+ txHash: tx.hash
49790
+ });
49791
+ }
49792
+ return {
49793
+ success: false,
49794
+ error: `Transaction confirmation failed: ${waitErrorMsg}`
49795
+ };
49796
+ }
49230
49797
  if (this.config.debug) {
49231
49798
  log.info("\u2705 BTC withdrawal confirmed", {
49232
49799
  blockNumber: receipt.blockNumber,
49233
- gasUsed: receipt.gasUsed.toString()
49800
+ gasUsed: receipt.gasUsed?.toString() || "unknown"
49234
49801
  });
49235
49802
  }
49236
49803
  return {
@@ -49240,7 +49807,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49240
49807
  amountWithdrawn: withdrawalAmount.toString(),
49241
49808
  evmTransactionHash: receipt.transactionHash,
49242
49809
  blockNumber: receipt.blockNumber,
49243
- gasUsed: receipt.gasUsed.toString(),
49810
+ gasUsed: receipt.gasUsed?.toString() || "unknown",
49244
49811
  utxoTxid: validationResponse.utxoTxid,
49245
49812
  utxoVout: validationResponse.utxoVout
49246
49813
  };
@@ -49772,9 +50339,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
49772
50339
  this.getProviderOrThrow()
49773
50340
  );
49774
50341
  const positionIdBytes32 = this.toBytes32(positionId);
49775
- const authorizedSpends = await positionManager["getAuthorizedSpends"](
49776
- positionIdBytes32
49777
- );
50342
+ const authorizedSpends = await positionManager["getAuthorizedSpends"](positionIdBytes32);
49778
50343
  if (this.config.debug) {
49779
50344
  log.info(`\u{1F4E6} Found ${authorizedSpends.length} authorized spends`);
49780
50345
  }
@@ -50396,9 +50961,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
50396
50961
  );
50397
50962
  for (let attempt = 0; attempt <= retries; attempt++) {
50398
50963
  try {
50399
- const corePosition = await corePositionContract["getPositionDetails"](
50400
- positionIdBytes32
50401
- );
50964
+ const corePosition = await corePositionContract["getPositionDetails"](positionIdBytes32);
50402
50965
  const positionIdFromCore = corePosition?.positionId || corePosition?.[0] || null;
50403
50966
  if (positionIdFromCore && positionIdFromCore !== ethers_exports.constants.HashZero && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
50404
50967
  if (this.config.debug) {
@@ -50615,19 +51178,6 @@ var AuthParamsValidation;
50615
51178
  AuthParamsValidation2.validate = validate5;
50616
51179
  })(AuthParamsValidation || (AuthParamsValidation = {}));
50617
51180
 
50618
- // src/types/loanStatus.ts
50619
- var LoanStatus = /* @__PURE__ */ ((LoanStatus2) => {
50620
- LoanStatus2[LoanStatus2["PENDING_DEPOSIT"] = 0] = "PENDING_DEPOSIT";
50621
- LoanStatus2[LoanStatus2["PENDING_MINT"] = 1] = "PENDING_MINT";
50622
- LoanStatus2[LoanStatus2["ACTIVE"] = 2] = "ACTIVE";
50623
- LoanStatus2[LoanStatus2["EXPIRED"] = 3] = "EXPIRED";
50624
- LoanStatus2[LoanStatus2["LIQUIDATABLE"] = 4] = "LIQUIDATABLE";
50625
- LoanStatus2[LoanStatus2["LIQUIDATED"] = 5] = "LIQUIDATED";
50626
- LoanStatus2[LoanStatus2["REPAID"] = 6] = "REPAID";
50627
- LoanStatus2[LoanStatus2["CLOSED"] = 7] = "CLOSED";
50628
- return LoanStatus2;
50629
- })(LoanStatus || {});
50630
-
50631
51181
  // src/types/event-types.ts
50632
51182
  var PaymentType = /* @__PURE__ */ ((PaymentType2) => {
50633
51183
  PaymentType2["FULL_REPAYMENT"] = "FULL_REPAYMENT";