@keep-network/tbtc-v2 0.1.1-dev.6 → 0.1.1-dev.7

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.
@@ -0,0 +1,4 @@
1
+ {
2
+ "_format": "hh-sol-dbg-1",
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "BitcoinTx",
4
+ "sourceName": "contracts/bridge/BitcoinTx.sol",
5
+ "abi": [],
6
+ "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220beb99c1ddc6f3e1ccc4ecde580996c3f120181e174a85a0a9504d0c071fd903664736f6c63430008040033",
7
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220beb99c1ddc6f3e1ccc4ecde580996c3f120181e174a85a0a9504d0c071fd903664736f6c63430008040033",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {}
10
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2ef2dc9c11f3851fd3437c51b34c4b13.json"
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
4
  }
@@ -77,7 +77,7 @@
77
77
  "type": "bytes4"
78
78
  }
79
79
  ],
80
- "internalType": "struct Bridge.TxInfo",
80
+ "internalType": "struct BitcoinTx.Info",
81
81
  "name": "fundingTx",
82
82
  "type": "tuple"
83
83
  },
@@ -154,7 +154,7 @@
154
154
  "type": "bytes4"
155
155
  }
156
156
  ],
157
- "internalType": "struct Bridge.TxInfo",
157
+ "internalType": "struct BitcoinTx.Info",
158
158
  "name": "sweepTx",
159
159
  "type": "tuple"
160
160
  },
@@ -214,8 +214,8 @@
214
214
  "type": "function"
215
215
  }
216
216
  ],
217
- "bytecode": "0x608060405234801561001057600080fd5b506129e1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b600060e0828403121561150a57600080fd5b81905092915050565b60006080828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b61166187828801611513565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a85828601611513565b925050602061171b858286016114f8565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea2646970667358221220e903e196da4db5ea41ef76b13a3de9d0e1e34fbe5988fd342c978dde89f9175164736f6c63430008040033",
218
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b600060e0828403121561150a57600080fd5b81905092915050565b60006080828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b61166187828801611513565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a85828601611513565b925050602061171b858286016114f8565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea2646970667358221220e903e196da4db5ea41ef76b13a3de9d0e1e34fbe5988fd342c978dde89f9175164736f6c63430008040033",
217
+ "bytecode": "0x608060405234801561001057600080fd5b506129e1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b60006080828403121561150a57600080fd5b81905092915050565b600060e0828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b611661878288016114f8565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a858286016114f8565b925050602061171b85828601611513565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea26469706673582212208ee8759d3087139de74e849409c59faaa977baa9abb4bc4a6e2534070ac731a464736f6c63430008040033",
218
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806325750db71461004657806343c6de29146100625780638d658d4e14610095575b600080fd5b610060600480360381019061005b91906116d0565b6100b1565b005b61007c60048036038101906100779190611725565b61059f565b60405161008c9493929190611d9d565b60405180910390f35b6100af60048036038101906100aa9190611625565b61062c565b005b60008160200160208101906100c69190611558565b8260400160208101906100d991906115fc565b8360600160208101906100ec9190611581565b8460800160208101906100ff9190611581565b8560a001602081019061011291906115d3565b604051602001610126959493929190611c62565b604051602081830303815290604052905060006101b383600001602081019061014f919061174e565b60ff168580604001906101629190611f51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061063290919063ffffffff16565b905060006101c082610872565b9050601481511415610229576101d583610c14565b80519060200120818051906020012014610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90611ef1565b60405180910390fd5b6102c6565b60208151141561028a5761023c83610ce1565b61024582610da7565b14610285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027c90611e91565b60405180910390fd5b6102c5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90611eb1565b60405180910390fd5b5b600061033a8660000160208101906102de91906115d3565b8780602001906102ee9190611f51565b8980604001906102fe9190611f51565b8b606001602081019061031191906115d3565b60405160200161032696959493929190611c01565b604051602081830303815290604052610ce1565b9050600080600083886000016020810190610355919061174e565b604051602001610366929190611bd5565b6040516020818303038152906040528051906020012060001c81526020019081526020016000209050600081600001601c9054906101000a900463ffffffff1663ffffffff16146103ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e390611ed1565b60405180910390fd5b600060208501519050808260000160146101000a81548167ffffffffffffffff021916908360c01c021790555086602001602081019061042c9190611558565b8260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504282600001601c6101000a81548163ffffffff021916908363ffffffff1602179055508660c00160208101906104a49190611558565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa62fd60993aa217b6f00fbb6f377e73a7bbf09f76e730ca9c99f9d54edddc7e88388600001602081019061051b919061174e565b89602001602081019061052e9190611558565b8a604001602081019061054191906115fc565b8b60600160208101906105549190611581565b8c60800160208101906105679190611581565b8d60a001602081019061057a91906115d3565b60405161058d9796959493929190611de2565b60405180910390a15050505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460c01b9080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b50505050565b606060008061064085610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290611e51565b60405180910390fd5b8084106106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e490611f11565b60405180910390fd5b60606000808460016106ff9190612030565b905060005b878110156107be5761072d82838b5161071d9190612288565b8b610ec69092919063ffffffff16565b935061073884610f8c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079490611e71565b60405180910390fd5b82826107a99190612030565b915080806107b69061244a565b915050610704565b506107e081828a516107d09190612288565b8a610ec69092919063ffffffff16565b92506107eb83610f8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084790611e71565b60405180910390fd5b61086581838a610ec69092919063ffffffff16565b9550505050505092915050565b60606000826008815181106108b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c905082516009826108cf9190612086565b60ff16146108ef5760405180602001604052806000815250915050610c0f565b60008360098151811061092b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff161415610a1e5760028160ff1610156109665760405180602001604052806000815250915050610c0f565b600083600a815181106109a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1690506002826109c291906122bc565b60ff16811415806109e15750602081141580156109e0575060148114155b5b156109ff576040518060200160405280600081525092505050610c0f565b610a15600b8286610ec69092919063ffffffff16565b92505050610c0f565b6000610a3760086003866110709092919063ffffffff16565b90507fe1683aec1a10d43657f3f2c82e683d8e19e8a3f320ce9d3bf22c6ca6ab4cbce6811415610b3b57601484600b81518110610a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141580610afd57507f3b50b2715f5a28d2a7eeb517f17ec797e8536bd425bf31fc4f6bf7ce1e34b77d610afa60028651610ae89190612288565b6002876110709092919063ffffffff16565b14155b15610b1b576040518060200160405280600081525092505050610c0f565b610b32600c601486610ec69092919063ffffffff16565b92505050610c0f565b7fa0916ee0b243ee20fb4ce56170744d86b54d7ae03a418a7a12156f40dedcf7d7811415610bfa5760878460018651610b749190612288565b81518110610bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614610bda576040518060200160405280600081525092505050610c0f565b610bf1600b601486610ec69092919063ffffffff16565b92505050610c0f565b50604051806020016040528060008152509150505b919050565b60606003600283604051610c289190611c4b565b602060405180830381855afa158015610c45573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6891906115aa565b604051602001610c789190611bba565b604051602081830303815290604052604051610c949190611c4b565b602060405180830381855afa158015610cb1573d6000803e3d6000fd5b5050506040515160601b604051602001610ccb9190611b9f565b6040516020818303038152906040529050919050565b600060028083604051610cf49190611c4b565b602060405180830381855afa158015610d11573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d3491906115aa565b604051602001610d449190611bba565b604051602081830303815290604052604051610d609190611c4b565b602060405180830381855afa158015610d7d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610da091906115aa565b9050919050565b60008082511415610dbd576000801b9050610dc5565b602082015190505b919050565b6000806000610dd8846110e2565b905060008160ff161415610e4057600084600081518110610e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c8060ff1690509250925050610ec1565b806001610e4d9190612086565b60ff1684511015610e85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60009250925050610ec1565b6000610eb0610eab610ea660018560ff1689610ec69092919063ffffffff16565b611202565b611369565b905081818160ff1691509350935050505b915091565b60606000821415610ee857604051806020016040528060008152509050610f85565b60008284610ef69190612030565b90508381118015610f08575080855110155b610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611f31565b60405180910390fd5b604051915082604083010160405282825283850182038460208701018481015b80821015610f8057815183830152602082019150610f67565b505050505b9392505050565b6000600982511015610fc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061106b565b6000610fe46008808551610fd49190612288565b85610ec69092919063ffffffff16565b9050600080610ff283610dca565b80925081935050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561104d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935050505061106b565b8082600961105b9190612030565b6110659190612030565b93505050505b919050565b600080828461107f9190612030565b90508381118015611091575080855110155b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790611f31565b60405180910390fd5b82846020870101209150509392505050565b600060ff82600081518110611120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561114057600890506111fd565b60fe8260008151811061117c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16141561119c57600490506111fd565b60fd826000815181106111d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff1614156111f857600290506111fd565b600090505b919050565b60606000825167ffffffffffffffff811115611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112795781602001600182028036833780820191505090505b50905060005b835181101561135f578381815181106112c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b8260018387516112dc9190612288565b6112e69190612288565b8151811061131d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113579061244a565b91505061127f565b5080915050919050565b60008060005b835181101561141d576001816113859190612030565b84516113919190612288565b600861139d919061222e565b60026113a99190612110565b8482815181106113e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff166113fd919061222e565b826114089190612030565b915080806114159061244a565b91505061136f565b5080915050919050565b600061143a61143584611fcd565b611fa8565b90508281526020810184848401111561145257600080fd5b61145d8482856123d7565b509392505050565b6000813590506114748161290a565b92915050565b60008135905061148981612921565b92915050565b60008151905061149e81612938565b92915050565b6000813590506114b38161294f565b92915050565b6000813590506114c881612966565b92915050565b600082601f8301126114df57600080fd5b81356114ef848260208601611427565b91505092915050565b60006080828403121561150a57600080fd5b81905092915050565b600060e0828403121561152557600080fd5b81905092915050565b60008135905061153d8161297d565b92915050565b60008135905061155281612994565b92915050565b60006020828403121561156a57600080fd5b600061157884828501611465565b91505092915050565b60006020828403121561159357600080fd5b60006115a18482850161147a565b91505092915050565b6000602082840312156115bc57600080fd5b60006115ca8482850161148f565b91505092915050565b6000602082840312156115e557600080fd5b60006115f3848285016114a4565b91505092915050565b60006020828403121561160e57600080fd5b600061161c848285016114b9565b91505092915050565b6000806000806080858703121561163b57600080fd5b600085013567ffffffffffffffff81111561165557600080fd5b611661878288016114f8565b945050602085013567ffffffffffffffff81111561167e57600080fd5b61168a878288016114ce565b935050604061169b8782880161152e565b925050606085013567ffffffffffffffff8111156116b857600080fd5b6116c4878288016114ce565b91505092959194509250565b60008061010083850312156116e457600080fd5b600083013567ffffffffffffffff8111156116fe57600080fd5b61170a858286016114f8565b925050602061171b85828601611513565b9150509250929050565b60006020828403121561173757600080fd5b60006117458482850161152e565b91505092915050565b60006020828403121561176057600080fd5b600061176e84828501611543565b91505092915050565b611780816122f0565b82525050565b611797611792826122f0565b612493565b82525050565b6117a681612302565b82525050565b6117bd6117b882612302565b6124a5565b82525050565b6117cc8161232e565b82525050565b6117e36117de8261232e565b6124af565b82525050565b6117f281612338565b82525050565b61180961180482612338565b6124b9565b82525050565b61181881612364565b82525050565b61182f61182a82612364565b6124c3565b82525050565b60006118418385612009565b935061184e8385846123d7565b82840190509392505050565b600061186582611ffe565b61186f8185612009565b935061187f8185602086016123e6565b80840191505092915050565b6000611898600183612025565b91506118a382612587565b600182019050919050565b60006118bb600183612025565b91506118c6826125b0565b600182019050919050565b60006118de600183612025565b91506118e9826125d9565b600182019050919050565b6000611901600183612025565b915061190c82612602565b600182019050919050565b6000611924602283612014565b915061192f8261262b565b604082019050919050565b6000611947601a83612014565b91506119528261267a565b602082019050919050565b600061196a600183612025565b9150611975826126a3565b600182019050919050565b600061198d600183612025565b9150611998826126cc565b600182019050919050565b60006119b0600183612025565b91506119bb826126f5565b600182019050919050565b60006119d3601983612014565b91506119de8261271e565b602082019050919050565b60006119f6601883612014565b9150611a0182612747565b602082019050919050565b6000611a19600183612025565b9150611a2482612770565b600182019050919050565b6000611a3c600183612025565b9150611a4782612799565b600182019050919050565b6000611a5f600183612025565b9150611a6a826127c2565b600182019050919050565b6000611a82601883612014565b9150611a8d826127eb565b602082019050919050565b6000611aa5601983612014565b9150611ab082612814565b602082019050919050565b6000611ac8600183612025565b9150611ad38261283d565b600182019050919050565b6000611aeb601183612014565b9150611af682612866565b602082019050919050565b6000611b0e601383612014565b9150611b198261288f565b602082019050919050565b6000611b31600183612025565b9150611b3c826128b8565b600182019050919050565b6000611b54600183612025565b9150611b5f826128e1565b600182019050919050565b611b73816123ba565b82525050565b611b82816123ca565b82525050565b611b99611b94826123ca565b6124df565b82525050565b6000611bab82846117ac565b60148201915081905092915050565b6000611bc682846117d2565b60208201915081905092915050565b6000611be182856117d2565b602082019150611bf18284611b88565b6001820191508190509392505050565b6000611c0d82896117f8565b600482019150611c1e828789611835565b9150611c2b828587611835565b9150611c3782846117f8565b600482019150819050979650505050505050565b6000611c57828461185a565b915081905092915050565b6000611c6d8261195d565b9150611c798288611786565b601482019150611c88826118f4565b9150611c9382611abb565b9150611c9f828761181e565b600882019150611cae826118f4565b9150611cb982611a2f565b9150611cc482611980565b9150611ccf8261195d565b9150611cdb82866117ac565b601482019150611cea82611a0c565b9150611cf58261188b565b9150611d0082611b47565b9150611d0b826118ae565b9150611d1682611a2f565b9150611d2182611980565b9150611d2c8261195d565b9150611d3882856117ac565b601482019150611d47826118d1565b9150611d5282611b24565b9150611d5e82846117f8565b600482019150611d6d826119a3565b9150611d78826118f4565b9150611d8382611b47565b9150611d8e82611a52565b91508190509695505050505050565b6000608082019050611db26000830187611777565b611dbf602083018661180f565b611dcc6040830185611b6a565b611dd96060830184611777565b95945050505050565b600060e082019050611df7600083018a6117c3565b611e046020830189611b79565b611e116040830188611777565b611e1e606083018761180f565b611e2b608083018661179d565b611e3860a083018561179d565b611e4560c08301846117e9565b98975050505050505050565b60006020820190508181036000830152611e6a81611917565b9050919050565b60006020820190508181036000830152611e8a8161193a565b9050919050565b60006020820190508181036000830152611eaa816119c6565b9050919050565b60006020820190508181036000830152611eca816119e9565b9050919050565b60006020820190508181036000830152611eea81611a75565b9050919050565b60006020820190508181036000830152611f0a81611a98565b9050919050565b60006020820190508181036000830152611f2a81611ade565b9050919050565b60006020820190508181036000830152611f4a81611b01565b9050919050565b60008083356001602003843603038112611f6a57600080fd5b80840192508235915067ffffffffffffffff821115611f8857600080fd5b602083019250600182023603831315611fa057600080fd5b509250929050565b6000611fb2611fc3565b9050611fbe8282612419565b919050565b6000604051905090565b600067ffffffffffffffff821115611fe857611fe7612520565b5b611ff18261254f565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061203b826123b0565b9150612046836123b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561207b5761207a6124f1565b5b828201905092915050565b6000612091826123ca565b915061209c836123ca565b92508260ff038211156120b2576120b16124f1565b5b828201905092915050565b6000808291508390505b6001851115612107578086048111156120e3576120e26124f1565b5b60018516156120f25780820291505b80810290506121008561257a565b94506120c7565b94509492505050565b600061211b826123b0565b9150612126836123b0565b92506121537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461215b565b905092915050565b60008261216b5760019050612227565b816121795760009050612227565b816001811461218f5760028114612199576121c8565b6001915050612227565b60ff8411156121ab576121aa6124f1565b5b8360020a9150848211156121c2576121c16124f1565b5b50612227565b5060208310610133831016604e8410600b84101617156121fd5782820a9050838111156121f8576121f76124f1565b5b612227565b61220a84848460016120bd565b92509050818404811115612221576122206124f1565b5b81810290505b9392505050565b6000612239826123b0565b9150612244836123b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227d5761227c6124f1565b5b828202905092915050565b6000612293826123b0565b915061229e836123b0565b9250828210156122b1576122b06124f1565b5b828203905092915050565b60006122c7826123ca565b91506122d2836123ca565b9250828210156122e5576122e46124f1565b5b828203905092915050565b60006122fb82612390565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156124045780820151818401526020810190506123e9565b83811115612413576000848401525b50505050565b6124228261254f565b810181811067ffffffffffffffff8211171561244157612440612520565b5b80604052505050565b6000612455826123b0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612488576124876124f1565b5b600182019050919050565b600061249e826124cd565b9050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b60006124d88261256d565b9050919050565b60006124ea82612560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160f81b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f6300000000000000000000000000000000000000000000000000000000000000600082015250565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b7f8800000000000000000000000000000000000000000000000000000000000000600082015250565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b7f52656164206f76657272756e20647572696e6720566172496e7420706172736960008201527f6e67000000000000000000000000000000000000000000000000000000000000602082015250565b7f42616420566172496e7420696e207363726970745075626b6579000000000000600082015250565b7f1400000000000000000000000000000000000000000000000000000000000000600082015250565b7fa900000000000000000000000000000000000000000000000000000000000000600082015250565b7fb100000000000000000000000000000000000000000000000000000000000000600082015250565b7f57726f6e672033322d6279746520736372697074206861736800000000000000600082015250565b7f57726f6e67207363726970742068617368206c656e6774680000000000000000600082015250565b7f8700000000000000000000000000000000000000000000000000000000000000600082015250565b7f7600000000000000000000000000000000000000000000000000000000000000600082015250565b7f6800000000000000000000000000000000000000000000000000000000000000600082015250565b7f4465706f73697420616c72656164792072657665616c65640000000000000000600082015250565b7f57726f6e672032302d6279746520736372697074206861736800000000000000600082015250565b7f0800000000000000000000000000000000000000000000000000000000000000600082015250565b7f566f75742072656164206f76657272756e000000000000000000000000000000600082015250565b7f536c696365206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f0400000000000000000000000000000000000000000000000000000000000000600082015250565b7fac00000000000000000000000000000000000000000000000000000000000000600082015250565b612913816122f0565b811461291e57600080fd5b50565b61292a81612302565b811461293557600080fd5b50565b6129418161232e565b811461294c57600080fd5b50565b61295881612338565b811461296357600080fd5b50565b61296f81612364565b811461297a57600080fd5b50565b612986816123b0565b811461299157600080fd5b50565b61299d816123ca565b81146129a857600080fd5b5056fea26469706673582212208ee8759d3087139de74e849409c59faaa977baa9abb4bc4a6e2534070ac731a464736f6c63430008040033",
219
219
  "linkReferences": {},
220
220
  "deployedLinkReferences": {}
221
221
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2ef2dc9c11f3851fd3437c51b34c4b13.json"
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2ef2dc9c11f3851fd3437c51b34c4b13.json"
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2ef2dc9c11f3851fd3437c51b34c4b13.json"
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2ef2dc9c11f3851fd3437c51b34c4b13.json"
3
+ "buildInfo": "../../../build-info/dbfbea2113f92b28fea5d74ebe0abd4d.json"
4
4
  }
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ // ██████████████ ▐████▌ ██████████████
4
+ // ██████████████ ▐████▌ ██████████████
5
+ // ▐████▌ ▐████▌
6
+ // ▐████▌ ▐████▌
7
+ // ██████████████ ▐████▌ ██████████████
8
+ // ██████████████ ▐████▌ ██████████████
9
+ // ▐████▌ ▐████▌
10
+ // ▐████▌ ▐████▌
11
+ // ▐████▌ ▐████▌
12
+ // ▐████▌ ▐████▌
13
+ // ▐████▌ ▐████▌
14
+ // ▐████▌ ▐████▌
15
+
16
+ pragma solidity 0.8.4;
17
+
18
+ /// @title Bitcoin transaction
19
+ /// @notice Allows to reference Bitcoin raw transaction in Solidity.
20
+ /// @dev See https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format
21
+ ///
22
+ /// Raw Bitcon transaction data:
23
+ ///
24
+ /// | Bytes | Name | BTC type | Description |
25
+ /// |--------|--------------|------------------------|---------------------------|
26
+ /// | 4 | version | int32_t (LE) | TX version number |
27
+ /// | varies | tx_in_count | compactSize uint (LE) | Number of TX inputs |
28
+ /// | varies | tx_in | txIn[] | TX inputs |
29
+ /// | varies | tx_out count | compactSize uint (LE) | Number of TX outputs |
30
+ /// | varies | tx_out | txOut[] | TX outputs |
31
+ /// | 4 | lock_time | uint32_t (LE) | Unix time or block number |
32
+ ///
33
+ //
34
+ /// Non-coinbase transaction input (txIn):
35
+ ///
36
+ /// | Bytes | Name | BTC type | Description |
37
+ /// |--------|------------------|------------------------|---------------------------------------------|
38
+ /// | 36 | previous_output | outpoint | The previous outpoint being spent |
39
+ /// | varies | script bytes | compactSize uint (LE) | The number of bytes in the signature script |
40
+ /// | varies | signature script | char[] | The signature script, empty for P2WSH |
41
+ /// | 4 | sequence | uint32_t (LE) | Sequence number |
42
+ ///
43
+ ///
44
+ /// The reference to transaction being spent (outpoint):
45
+ ///
46
+ /// | Bytes | Name | BTC type | Description |
47
+ /// |-------|-------|---------------|------------------------------------------|
48
+ /// | 32 | hash | char[32] | Hash of the transaction to spend |
49
+ /// | 4 | index | uint32_t (LE) | Index of the specific output from the TX |
50
+ ///
51
+ ///
52
+ /// Transaction output (txOut):
53
+ ///
54
+ /// | Bytes | Name | BTC type | Description |
55
+ /// |--------|-----------------|-----------------------|--------------------------------------|
56
+ /// | 8 | value | int64_t (LE) | Number of satoshis to spend |
57
+ /// | 1+ | pk_script_bytes | compactSize uint (LE) | Number of bytes in the pubkey script |
58
+ /// | varies | pk_script | char[] | Pubkey script |
59
+ ///
60
+ /// compactSize uint format:
61
+ ///
62
+ /// | Value | Bytes | Format |
63
+ /// |-----------------------------------------|-------|----------------------------------------------|
64
+ /// | >= 0 && <= 252 | 1 | uint8_t |
65
+ /// | >= 253 && <= 0xffff | 3 | 0xfd followed by the number as uint16_t (LE) |
66
+ /// | >= 0x10000 && <= 0xffffffff | 5 | 0xfe followed by the number as uint32_t (LE) |
67
+ /// | >= 0x100000000 && <= 0xffffffffffffffff | 9 | 0xff followed by the number as uint64_t (LE) |
68
+ ///
69
+ /// (*) compactSize uint is often references as VarInt)
70
+ ///
71
+ library BitcoinTx {
72
+ /// @notice Represents Bitcoin transaction data for funding BTC deposit
73
+ /// P2(W)SH transaction.
74
+ struct Info {
75
+ /// @notice Bitcoin transaction version
76
+ /// @dev `version` from raw Bitcon transaction data.
77
+ /// Encoded as 4-bytes signed integer, little endian.
78
+ bytes4 version;
79
+ /// @notice All Bitcoin transaction inputs, prepended by the number of
80
+ /// transaction inputs.
81
+ /// @dev `tx_in_count | tx_in` from raw Bitcon transaction data.
82
+ ///
83
+ /// The number of transaction inputs encoded as compactSize
84
+ /// unsigned integer, little-endian.
85
+ ///
86
+ /// Note that some popular block explorers reverse the order of
87
+ /// bytes from `outpoint`'s `hash` and display it as big-endian.
88
+ /// Solidity code of Bridge expects hashes in little-endian, just
89
+ /// like they are represented in a raw Bitcoin transaction.
90
+ bytes inputVector;
91
+ /// @notice All Bitcoin transaction outputs prepended by the number of
92
+ /// transaction outputs.
93
+ /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data.
94
+ ///
95
+ /// The number of transaction outputs encoded as a compactSize
96
+ /// unsigned integer, little-endian.
97
+ bytes outputVector;
98
+ /// @notice Bitcoin transaction locktime.
99
+ ///
100
+ /// @dev `lock_time` from raw Bitcoin transaction data.
101
+ /// Encoded as 4-bytes unsigned integer, little endian.
102
+ bytes4 locktime;
103
+ }
104
+ }
@@ -15,49 +15,34 @@
15
15
 
16
16
  pragma solidity 0.8.4;
17
17
 
18
+ import "./BitcoinTx.sol";
19
+
18
20
  import {BTCUtils} from "@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol";
19
21
  import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
20
22
 
21
- /// @title BTC Bridge
22
- /// @notice Bridge manages BTC deposit and redemption and is increasing and
23
+ /// @title Bitcoin Bridge
24
+ /// @notice Bridge manages BTC deposit and redemption flow and is increasing and
23
25
  /// decreasing balances in the Bank as a result of BTC deposit and
24
- /// redemption operations.
26
+ /// redemption operations performed by depositors and redeemers.
25
27
  ///
26
- /// Depositors send BTC funds to the most-recently-created-wallet of the
27
- /// bridge using pay-to-script-hash (P2SH) or
28
- /// pay-to-witness-script-hash (P2WSH) which contains hashed
29
- /// information about the depositor’s minting Ethereum address. Then,
30
- /// the depositor reveals their desired Ethereum minting address to the
31
- /// Ethereum chain. The Bridge listens for these sorts of messages and
32
- /// when it gets one, it checks the Bitcoin network to make sure the
33
- /// funds line up. If they do, the off-chain wallet may decide to pick
34
- /// this transaction for sweeping, and when the sweep operation is
35
- /// confirmed on the Bitcoin network, the wallet informs the Bridge
36
- /// about the sweep increasing appropriate balances in the Bank.
28
+ /// Depositors send BTC funds to the most recently created off-chain
29
+ /// ECDSA wallet of the bridge using pay-to-script-hash (P2SH) or
30
+ /// pay-to-witness-script-hash (P2WSH) containing hashed information
31
+ /// about the depositor’s Ethereum address. Then, the depositor reveals
32
+ /// their Ethereum address along with their deposit blinding factor,
33
+ /// refund public key hash and refund locktime to the Bridge on Ethereum
34
+ /// chain. The off-chain ECDSA wallet listens for these sorts of
35
+ /// messages and when it gets one, it checks the Bitcoin network to make
36
+ /// sure the deposit lines up. If it does, the off-chain ECDSA wallet
37
+ /// may decide to pick the deposit transaction for sweeping, and when
38
+ /// the sweep operation is confirmed on the Bitcoin network, the ECDSA
39
+ /// wallet informs the Bridge about the sweep increasing appropriate
40
+ /// balances in the Bank.
37
41
  /// @dev Bridge is an upgradeable component of the Bank.
38
42
  contract Bridge {
39
43
  using BTCUtils for bytes;
40
44
  using BytesLib for bytes;
41
45
 
42
- /// @notice Represents Bitcoin transaction data as described in:
43
- /// https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format
44
- struct TxInfo {
45
- // Transaction version number (4-byte LE).
46
- bytes4 version;
47
- // All transaction inputs prepended by the number of inputs encoded
48
- // as a compactSize uint. Single vector item looks as follows:
49
- // https://developer.bitcoin.org/reference/transactions.html#txin-a-transaction-input-non-coinbase
50
- // though SegWit inputs don't contain the signature script (scriptSig).
51
- // All encoded input transaction hashes are little-endian.
52
- bytes inputVector;
53
- // All transaction outputs prepended by the number of outputs encoded
54
- // as a compactSize uint. Single vector item looks as follows:
55
- // https://developer.bitcoin.org/reference/transactions.html#txout-a-transaction-output
56
- bytes outputVector;
57
- // Transaction locktime (4-byte LE).
58
- bytes4 locktime;
59
- }
60
-
61
46
  /// @notice Represents data which must be revealed by the depositor during
62
47
  /// deposit reveal.
63
48
  struct RevealInfo {
@@ -124,11 +109,11 @@ contract Bridge {
124
109
  /// include the revealed deposit in the next executed sweep.
125
110
  /// Information about the Bitcoin deposit can be revealed before or
126
111
  /// after the Bitcoin transaction with P2(W)SH deposit is mined on
127
- /// the Bitcoin chain. Worth noting the gas cost of this function
112
+ /// the Bitcoin chain. Worth noting, the gas cost of this function
128
113
  /// scales with the number of P2(W)SH transaction inputs and
129
114
  /// outputs.
130
- /// @param fundingTx Bitcoin funding transaction data.
131
- /// @param reveal Deposit reveal data.
115
+ /// @param fundingTx Bitcoin funding transaction data, see `BitcoinTx.Info`
116
+ /// @param reveal Deposit reveal data, see `RevealInfo struct
132
117
  /// @dev Requirements:
133
118
  /// - `reveal.fundingOutputIndex` must point to the actual P2(W)SH
134
119
  /// output of the BTC deposit transaction
@@ -149,7 +134,7 @@ contract Bridge {
149
134
  /// to sweep the deposit and the depositor has to wait until the
150
135
  /// deposit script unlocks to receive their BTC back.
151
136
  function revealDeposit(
152
- TxInfo calldata fundingTx,
137
+ BitcoinTx.Info calldata fundingTx,
153
138
  RevealInfo calldata reveal
154
139
  ) external {
155
140
  bytes memory expectedScript =
@@ -284,7 +269,7 @@ contract Bridge {
284
269
  /// @param bitcoinHeaders Single bytestring of 80-byte bitcoin headers,
285
270
  /// lowest height first.
286
271
  function sweep(
287
- TxInfo calldata sweepTx,
272
+ BitcoinTx.Info calldata sweepTx,
288
273
  bytes memory merkleProof,
289
274
  uint256 txIndexInBlock,
290
275
  bytes memory bitcoinHeaders
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keep-network/tbtc-v2",
3
- "version": "0.1.1-dev.6+main.68e9da2c1b826725378fc2c33c2067b6c024a26e",
3
+ "version": "0.1.1-dev.7+main.c19a34932c98be7f99633a95a50b6764f2c12e89",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "artifacts/",