diff --git a/bin/citrea/tests/e2e/sequencer_behaviour.rs b/bin/citrea/tests/e2e/sequencer_behaviour.rs index bd8aa1dae..3bc48d066 100644 --- a/bin/citrea/tests/e2e/sequencer_behaviour.rs +++ b/bin/citrea/tests/e2e/sequencer_behaviour.rs @@ -243,7 +243,7 @@ async fn transaction_failing_on_l1_is_removed_from_mempool() -> Result<(), anyho let random_wallet_address = random_wallet.address(); - let second_block_base_fee = 768641461; + let second_block_base_fee = 767970154; let _pending = seq_test_client .send_eth( @@ -340,7 +340,7 @@ async fn test_gas_limit_too_high() { let target_gas_limit: u64 = 30_000_000; let transfer_gas_limit = 21_000; - let system_txs_gas_used = 390434; + let system_txs_gas_used = 300621; let tx_count = (target_gas_limit - system_txs_gas_used).div_ceil(transfer_gas_limit); let addr = Address::from_str("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266").unwrap(); @@ -518,28 +518,28 @@ async fn test_system_tx_effect_on_block_gas_limit() -> Result<(), anyhow::Error> let seq_port = seq_port_rx.await.unwrap(); let seq_test_client = make_test_client(seq_port).await?; - // sys tx use L1BlockHash(50751 + 80720) + Bridge(261215) = 392686 gas + // sys tx use L1BlockHash(50751 + 80720) + Bridge(169150) = 300621 gas // the block gas limit is 1_500_000 because the system txs gas limit is 1_500_000 (decided with @eyusufatik and @okkothejawa as bridge init takes 1M gas) - // 1500000 - 392686 = 1107314 gas left in block - // 1107314 / 21000 = 52,72... so 52 ether transfer transactions can be included in the block + // 1500000 - 300621 = 1177464 gas left in block + // 1107314 / 21000 = 57.13... so 57 ether transfer transactions can be included in the block - // send 52 ether transfer transactions + // send 57 ether transfer transactions let addr = Address::from_str("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266").unwrap(); - for _ in 0..51 { + for _ in 0..56 { let _pending = seq_test_client .send_eth(addr, None, None, None, 0u128) .await .unwrap(); } - // 52th tx should be the last tx in the soft confirmation + // 57th tx should be the last tx in the soft confirmation let last_in_tx = seq_test_client .send_eth(addr, None, None, None, 0u128) .await; - // 53th tx should not be in soft confirmation + // 58th tx should not be in soft confirmation let not_in_tx = seq_test_client .send_eth(addr, None, None, None, 0u128) .await; diff --git a/bin/citrea/tests/evm/ethers_js/test.js b/bin/citrea/tests/evm/ethers_js/test.js index e877c225a..bb7956b42 100644 --- a/bin/citrea/tests/evm/ethers_js/test.js +++ b/bin/citrea/tests/evm/ethers_js/test.js @@ -8,7 +8,7 @@ describe("RpcTests", function() { //Makes an initial tx to test for later, used to prevent waiting for a block to mine in each such test before(async function() { this.timeout(0); - let tx = await generateTransaction('0.01'); + let tx = await generateTransaction('10'); let signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider); tx = await signer.signTransaction(tx); let tx_response = await provider.broadcastTransaction(tx); @@ -49,23 +49,29 @@ describe("RpcTests", function() { "name": "withdraw", "inputs": [ { - "name": "bitcoin_address", + "name": "txId", "type": "bytes32", "internalType": "bytes32" + }, + { + "name": "outputId", + "type": "bytes4", + "internalType": "bytes4" } ], "outputs": [], "stateMutability": "payable" - }, + } ]; const privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; const wallet = new ethers.Wallet(privateKey, provider); const contractAddress = '0x3100000000000000000000000000000000000002'; const contract = new ethers.Contract(contractAddress, abi, wallet); - const bitcoinAddress = ethers.encodeBytes32String('bc1qa0a0a0a0a0a0a0a0a0a0a0a0'); + const txId = ethers.encodeBytes32String('0x1234'); + const outputId = ethers.zeroPadBytes(ethers.toUtf8Bytes('0x01'), 4); - let gasEstimate = await contract.withdraw.estimateGas(bitcoinAddress, {value: ethers.parseEther('0.01')}); + let gasEstimate = await contract.withdraw.estimateGas(txId, outputId, {value: ethers.parseEther('10')}); expect(gasEstimate > 0n).to.be.true; }); @@ -101,7 +107,7 @@ describe("RpcTests", function() { it("broadcastTransaction publishes a txn and it gets mined", async function() { this.timeout(0); - let tx = await generateTransaction('0.01'); + let tx = await generateTransaction('10'); let signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider); tx = await signer.signTransaction(tx); let tx_response = await provider.broadcastTransaction(tx); @@ -197,26 +203,32 @@ describe("RpcTests", function() { "type": "function", "name": "withdraw", "inputs": [ - { - "name": "bitcoin_address", - "type": "bytes32", - "internalType": "bytes32" - } + { + "name": "txId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "outputId", + "type": "bytes4", + "internalType": "bytes4" + } ], "outputs": [], "stateMutability": "payable" - }, + } ]; const contractAddress = '0x3100000000000000000000000000000000000002'; let wallet = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider); const contract = new ethers.Contract(contractAddress, abi, wallet); - const bitcoinAddress = ethers.encodeBytes32String('bc1qa0a0a0a0a0a0a0a0a0a0a0a0'); + const txId = ethers.encodeBytes32String('0x1234'); + const outputId = ethers.zeroPadBytes(ethers.toUtf8Bytes('0x01'), 4); let tx = { to: contractAddress, - value: ethers.parseEther('0.9'), - data: contract.interface.encodeFunctionData('withdraw', [bitcoinAddress]), + value: ethers.parseEther('9'), + data: contract.interface.encodeFunctionData('withdraw', [txId, outputId]), from: wallet.address }; @@ -224,7 +236,7 @@ describe("RpcTests", function() { await provider.call(tx); expect.fail('Expected an error to be thrown'); } catch (error) { - expect(error.message).to.equal('execution reverted: "Invalid withdraw amount" (action="call", data="0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017496e76616c696420776974686472617720616d6f756e74000000000000000000", reason="Invalid withdraw amount", transaction={ "data": "0x8e19899e6263317161306130613061306130613061306130613061306130613000000000", "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "to": "0x3100000000000000000000000000000000000002" }, invocation=null, revert={ "args": [ "Invalid withdraw amount" ], "name": "Error", "signature": "Error(string)" }, code=CALL_EXCEPTION, version=6.12.1)'); + expect(error.message).to.equal('execution reverted: "Invalid withdraw amount" (action="call", data="0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017496e76616c696420776974686472617720616d6f756e74000000000000000000", reason="Invalid withdraw amount", transaction={ "data": "0x8786dba730783132333400000000000000000000000000000000000000000000000000003078303100000000000000000000000000000000000000000000000000000000", "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "to": "0x3100000000000000000000000000000000000002" }, invocation=null, revert={ "args": [ "Invalid withdraw amount" ], "name": "Error", "signature": "Error(string)" }, code=CALL_EXCEPTION, version=6.12.1)'); } }); @@ -282,27 +294,33 @@ const generateTransaction = async (ether_value) => { "type": "function", "name": "withdraw", "inputs": [ - { - "name": "bitcoin_address", - "type": "bytes32", - "internalType": "bytes32" - } + { + "name": "txId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "outputId", + "type": "bytes4", + "internalType": "bytes4" + } ], "outputs": [], "stateMutability": "payable" - }, + } ]; const privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; const wallet = new ethers.Wallet(privateKey, provider); const contractAddress = '0x3100000000000000000000000000000000000002'; const contract = new ethers.Contract(contractAddress, abi, wallet); - const bitcoinAddress = ethers.encodeBytes32String('bc1qa0a0a0a0a0a0a0a0a0a0a0a0'); + const txId = ethers.encodeBytes32String('0x1234'); + const outputId = ethers.zeroPadBytes(ethers.toUtf8Bytes('0x01'), 4); let tx = { to: contractAddress, value: ethers.parseEther(ether_value), - data: contract.interface.encodeFunctionData('withdraw', [bitcoinAddress]), + data: contract.interface.encodeFunctionData('withdraw', [txId, outputId]), from: wallet.address, chainId: 5655, gasLimit: 1000000, diff --git a/bin/citrea/tests/evm/web3_py/test.py b/bin/citrea/tests/evm/web3_py/test.py index 03eb8c7b5..5e82d7bb4 100644 --- a/bin/citrea/tests/evm/web3_py/test.py +++ b/bin/citrea/tests/evm/web3_py/test.py @@ -104,10 +104,10 @@ def test_create_access_list(self): tx = { 'from': "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", 'to': "0x3100000000000000000000000000000000000002", - 'value': self.web3.to_wei(0.01, 'ether'), + 'value': self.web3.to_wei(10, 'ether'), 'gas': 200000, 'gasPrice': self.web3.to_wei(1, 'gwei'), - 'data': "0x8e19899e0000000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32), param is 0x0 + 'data': "0x8786dba712340000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32, bytes4), param is 0x1234, 0x01 'nonce': self.web3.eth.get_transaction_count("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"), 'chainId': 5655 } @@ -186,7 +186,7 @@ def test_send_raw_transaction_reverts_correctly(self): 'value': self.web3.to_wei(0.9, 'ether'), 'gas': 200000, 'gasPrice': self.web3.to_wei(1, 'gwei'), - 'data': "0x8e19899e0000000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32), param is 0x0 + 'data': "0x8786dba712340000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32, bytes4), param is 0x1234, 0x01 'nonce': self.web3.eth.get_transaction_count("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"), 'chainId': 5655 } @@ -202,7 +202,7 @@ def test_call_errors_correctly_on_withdraw(self): 'value': self.web3.to_wei(0.9, 'ether'), 'gas': 200000, 'gasPrice': self.web3.to_wei(1, 'gwei'), - 'data': "0x8e19899e0000000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32), param is 0x0 + 'data': "0x8786dba712340000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", # withdraw(bytes32, bytes4), param is 0x1234, 0x01 'nonce': self.web3.eth.get_transaction_count("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"), 'chainId': 5655 } diff --git a/crates/evm/src/evm/system_contracts/mod.rs b/crates/evm/src/evm/system_contracts/mod.rs index 86874cb26..8c57e41e2 100644 --- a/crates/evm/src/evm/system_contracts/mod.rs +++ b/crates/evm/src/evm/system_contracts/mod.rs @@ -84,29 +84,22 @@ impl Bridge { // This is equal to: // // BridgeContract::initializeCall { - // _depositScript: hex!("d2205daf577048c5e5a9a75d0a924ed03e226c3304f4a2f01c65ca1dab73522e6b8bad206228eba653cf1819bcfc1bc858630e5ae373eec1a9924322a5fe8445c5e76027ad201521d65f64be3f71b71ca462220f13c77b251027f6ca443a483353a96fbce222ad200fabeed269694ee83d9b3343a571202e68af65d05feda61dbed0c4bdb256a6eaad2000326d6f721c03dc5f1d8817d8f8ee890a95a2eeda0d4d9a01b1cc9b7b1b724dac00630663697472656114").into(), - // _scriptSuffix: hex!("0800000000000f424068").into(), - // _requiredSigsCount: U256::from(5), + // _scriptPrefix: hex!("4a207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ac00630663697472656114").into(), + // _scriptSuffix: hex!("08000000003b9aca0068").into(), + // _depositAmount: U256::from(10 ether), // } // .abi_encode() let params = vec![ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 210, 32, 93, 175, 87, 112, 72, 197, 229, 169, - 167, 93, 10, 146, 78, 208, 62, 34, 108, 51, 4, 244, 162, 240, 28, 101, 202, 29, 171, - 115, 82, 46, 107, 139, 173, 32, 98, 40, 235, 166, 83, 207, 24, 25, 188, 252, 27, 200, - 88, 99, 14, 90, 227, 115, 238, 193, 169, 146, 67, 34, 165, 254, 132, 69, 197, 231, 96, - 39, 173, 32, 21, 33, 214, 95, 100, 190, 63, 113, 183, 28, 164, 98, 34, 15, 19, 199, - 123, 37, 16, 39, 246, 202, 68, 58, 72, 51, 83, 169, 111, 188, 226, 34, 173, 32, 15, - 171, 238, 210, 105, 105, 78, 232, 61, 155, 51, 67, 165, 113, 32, 46, 104, 175, 101, - 208, 95, 237, 166, 29, 190, 208, 196, 189, 178, 86, 166, 234, 173, 32, 0, 50, 109, 111, - 114, 28, 3, 220, 95, 29, 136, 23, 216, 248, 238, 137, 10, 149, 162, 238, 218, 13, 77, - 154, 1, 177, 204, 155, 123, 27, 114, 77, 172, 0, 99, 6, 99, 105, 116, 114, 101, 97, 20, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 199, 35, 4, 137, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 74, 32, 124, 72, 3, 66, 25, 86, 219, + 83, 238, 210, 158, 228, 91, 221, 190, 96, 209, 110, 102, 86, 15, 145, 138, 148, 39, 14, + 165, 39, 43, 43, 78, 144, 172, 0, 99, 6, 99, 105, 116, 114, 101, 97, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 0, 15, 66, 64, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 59, 154, 202, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; let mut func_selector = Vec::with_capacity(4 + params.len()); diff --git a/crates/evm/src/evm/system_contracts/out/BitcoinLightClient.sol/BitcoinLightClient.json b/crates/evm/src/evm/system_contracts/out/BitcoinLightClient.sol/BitcoinLightClient.json index d31978aa2..ab77292e8 100644 --- a/crates/evm/src/evm/system_contracts/out/BitcoinLightClient.sol/BitcoinLightClient.json +++ b/crates/evm/src/evm/system_contracts/out/BitcoinLightClient.sol/BitcoinLightClient.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"SYSTEM_CALLER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"blockHashes","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"blockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockHash","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getWitnessRootByHash","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getWitnessRootByNumber","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initializeBlockNumber","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBlockInfo","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"},{"name":"_witnessRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyInclusion","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"},{"name":"_wtxId","type":"bytes32","internalType":"bytes32"},{"name":"_proof","type":"bytes","internalType":"bytes"},{"name":"_index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verifyInclusion","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"},{"name":"_wtxId","type":"bytes32","internalType":"bytes32"},{"name":"_proof","type":"bytes","internalType":"bytes"},{"name":"_index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"witnessRoots","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"BlockInfoAdded","inputs":[{"name":"blockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"merkleRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506106bb8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806357e871e71161007157806357e871e71461014c57806361b207e214610155578063a91d8b3d14610182578063d269a03e146101a2578063d761753e146101b5578063ee82ac5e146101e857600080fd5b80630466efc4146100ae5780630e27bc11146100e15780631f578333146100f657806334cdf78d146101095780634ffd344a14610129575b600080fd5b6100ce6100bc366004610599565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6100f46100ef3660046105b2565b610208565b005b6100f4610104366004610599565b610331565b6100ce610117366004610599565b60016020526000908152604090205481565b61013c61013736600461061d565b6103df565b60405190151581526020016100d8565b6100ce60005481565b6100ce610163366004610599565b6000908152600160209081526040808320548352600290915290205490565b6100ce610190366004610599565b60026020526000908152604090205481565b61013c6101b036600461061d565b610405565b6101d073deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b6040516001600160a01b0390911681526020016100d8565b6100ce6101f6366004610599565b60009081526001602052604090205490565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146102705760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60008054908190036102b65760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b6044820152606401610267565b60008181526001602081905260409091208490556102d5908290610678565b6000908155838152600260209081526040808320859055915482519081529081018590529081018390527f32eff959e2e8d1609edc4b39ccf75900aa6c1da5719f8432752963fdf008234f9060600160405180910390a1505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146103945760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610267565b600054156103da5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610267565b600055565b6000858152600160205260408120546103fb9086868686610410565b9695505050505050565b60006103fb86868686865b6000858152600260209081526040808320548151601f870184900484028101840190925285825291610463918891849190899089908190840183828082843760009201919091525089925061046e915050565b979650505050505050565b6000838514801561047d575081155b801561048857508251155b15610495575060016104a4565b6104a1858486856104ac565b90505b949350505050565b6000602084516104bc9190610699565b156104c9575060006104a4565b83516000036104da575060006104a4565b818560005b8651811015610549576104f3600284610699565b6001036105175761051061050a8883016020015190565b83610556565b9150610530565b61052d826105288984016020015190565b610556565b91505b60019290921c91610542602082610678565b90506104df565b5090931495945050505050565b6000610562838361056b565b90505b92915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6000602082840312156105ab57600080fd5b5035919050565b600080604083850312156105c557600080fd5b50508035926020909101359150565b60008083601f8401126105e657600080fd5b50813567ffffffffffffffff8111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b60008060008060006080868803121561063557600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561065a57600080fd5b610666888289016105d4565b96999598509660600135949350505050565b8082018082111561056557634e487b7160e01b600052601160045260246000fd5b6000826106b657634e487b7160e01b600052601260045260246000fd5b50069056","sourceMap":"675:4087:42:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806357e871e71161007157806357e871e71461014c57806361b207e214610155578063a91d8b3d14610182578063d269a03e146101a2578063d761753e146101b5578063ee82ac5e146101e857600080fd5b80630466efc4146100ae5780630e27bc11146100e15780631f578333146100f657806334cdf78d146101095780634ffd344a14610129575b600080fd5b6100ce6100bc366004610599565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6100f46100ef3660046105b2565b610208565b005b6100f4610104366004610599565b610331565b6100ce610117366004610599565b60016020526000908152604090205481565b61013c61013736600461061d565b6103df565b60405190151581526020016100d8565b6100ce60005481565b6100ce610163366004610599565b6000908152600160209081526040808320548352600290915290205490565b6100ce610190366004610599565b60026020526000908152604090205481565b61013c6101b036600461061d565b610405565b6101d073deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b6040516001600160a01b0390911681526020016100d8565b6100ce6101f6366004610599565b60009081526001602052604090205490565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146102705760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60008054908190036102b65760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b6044820152606401610267565b60008181526001602081905260409091208490556102d5908290610678565b6000908155838152600260209081526040808320859055915482519081529081018590529081018390527f32eff959e2e8d1609edc4b39ccf75900aa6c1da5719f8432752963fdf008234f9060600160405180910390a1505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146103945760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610267565b600054156103da5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610267565b600055565b6000858152600160205260408120546103fb9086868686610410565b9695505050505050565b60006103fb86868686865b6000858152600260209081526040808320548151601f870184900484028101840190925285825291610463918891849190899089908190840183828082843760009201919091525089925061046e915050565b979650505050505050565b6000838514801561047d575081155b801561048857508251155b15610495575060016104a4565b6104a1858486856104ac565b90505b949350505050565b6000602084516104bc9190610699565b156104c9575060006104a4565b83516000036104da575060006104a4565b818560005b8651811015610549576104f3600284610699565b6001036105175761051061050a8883016020015190565b83610556565b9150610530565b61052d826105288984016020015190565b610556565b91505b60019290921c91610542602082610678565b90506104df565b5090931495945050505050565b6000610562838361056b565b90505b92915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6000602082840312156105ab57600080fd5b5035919050565b600080604083850312156105c557600080fd5b50508035926020909101359150565b60008083601f8401126105e657600080fd5b50813567ffffffffffffffff8111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b60008060008060006080868803121561063557600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561065a57600080fd5b610666888289016105d4565b96999598509660600135949350505050565b8082018082111561056557634e487b7160e01b600052601160045260246000fd5b6000826106b657634e487b7160e01b600052601260045260246000fd5b50069056","sourceMap":"675:4087:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:130;;;;;;:::i;:::-;2791:7;2817:24;;;:12;:24;;;;;;;2718:130;;;;391:25:48;;;379:2;364:18;2718:130:42;;;;;;;;1944:395;;;;;;:::i;:::-;;:::i;:::-;;1366:174;;;;;;:::i;:::-;;:::i;861:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;4266:222;;;;;;:::i;:::-;;:::i;:::-;;;2295:14:48;;2288:22;2270:41;;2258:2;2243:18;4266:222:42;2130:187:48;732:26:42;;;;;;2984:149;;;;;;:::i;:::-;3061:7;3100:25;;;:11;:25;;;;;;;;;3087:39;;:12;:39;;;;;;;2984:149;913:47;;;;;;:::i;:::-;;;;;;;;;;;;;;3595:205;;;;;;:::i;:::-;;:::i;764:91::-;;812:42;764:91;;;;;-1:-1:-1;;;;;3437:32:48;;;3419:51;;3407:2;3392:18;764:91:42;3273:203:48;2460:125:42;;;;;;:::i;:::-;2527:7;2553:25;;;:11;:25;;;;;;;2460:125;1944:395;1098:10;812:42;1098:27;1090:71;;;;-1:-1:-1;;;1090:71:42;;3683:2:48;1090:71:42;;;3665:21:48;3722:2;3702:18;;;3695:30;3761:33;3741:18;;;3734:61;3812:18;;1090:71:42;;;;;;;;;2038:20:::1;2061:11:::0;;;2090:17;;;2082:45:::1;;;::::0;-1:-1:-1;;;2082:45:42;;4043:2:48;2082:45:42::1;::::0;::::1;4025:21:48::0;4082:2;4062:18;;;4055:30;-1:-1:-1;;;4101:18:48;;;4094:45;4156:18;;2082:45:42::1;3841:339:48::0;2082:45:42::1;2137:25;::::0;;;:11:::1;:25;::::0;;;;;;;:38;;;2199:16:::1;::::0;2149:12;;2199:16:::1;:::i;:::-;2185:11;:30:::0;;;2225:24;;;:12:::1;:24;::::0;;;;;;;:39;;;2294:11;;2279:53;;4614:25:48;;;4655:18;;;4648:34;;;4698:18;;;4691:34;;;2279:53:42::1;::::0;4602:2:48;4587:18;2279:53:42::1;;;;;;;2028:311;1944:395:::0;;:::o;1366:174::-;1098:10;812:42;1098:27;1090:71;;;;-1:-1:-1;;;1090:71:42;;3683:2:48;1090:71:42;;;3665:21:48;3722:2;3702:18;;;3695:30;3761:33;3741:18;;;3734:61;3812:18;;1090:71:42;3481:355:48;1090:71:42;1457:11:::1;::::0;:16;1449:48:::1;;;::::0;-1:-1:-1;;;1449:48:42;;4938:2:48;1449:48:42::1;::::0;::::1;4920:21:48::0;4977:2;4957:18;;;4950:30;-1:-1:-1;;;4996:18:48;;;4989:49;5055:18;;1449:48:42::1;4736:343:48::0;1449:48:42::1;1507:11;:26:::0;1366:174::o;4266:222::-;4391:4;4431:25;;;:11;:25;;;;;;4414:67;;4458:6;4466;;4474;4414:16;:67::i;:::-;4407:74;4266:222;-1:-1:-1;;;;;;4266:222:42:o;3595:205::-;3718:4;3741:52;3758:10;3770:6;3778;;3786;4494:266;4618:4;4657:24;;;:12;:24;;;;;;;;;4698:55;;;;;;;;;;;;;;;;;;;;4657:24;4698:55;;4716:6;;4657:24;;4698:55;4738:6;;;;;;4698:55;;4738:6;;;;4698:55;;;;;;;;;-1:-1:-1;4746:6:42;;-1:-1:-1;4698:17:42;;-1:-1:-1;;4698:55:42:i;:::-;4691:62;4494:266;-1:-1:-1;;;;;;;4494:266:42:o;1685:539:4:-;1843:4;1913:11;1904:5;:20;:35;;;;-1:-1:-1;1928:11:4;;1904:35;:69;;;;-1:-1:-1;1943:25:4;;:30;1904:69;1900:111;;;-1:-1:-1;1996:4:4;1989:11;;1900:111;2083:134;2125:5;2144:18;2176:11;2201:6;2083:28;:134::i;:::-;2076:141;;1685:539;;;;;;;:::o;36339:829:1:-;36492:4;36567:2;36552:5;:12;:17;;;;:::i;:::-;:22;36548:65;;-1:-1:-1;36597:5:1;36590:12;;36548:65;36657:5;:12;36673:1;36657:17;36653:60;;-1:-1:-1;36697:5:1;36690:12;;36653:60;36735:6;36770:5;36723:9;36825:303;36846:5;:12;36842:1;:16;36825:303;;;36887:8;36894:1;36887:4;:8;:::i;:::-;36899:1;36887:13;36883:205;;36931:46;36950:16;:5;36964:1;12550:28:2;12566:2;12550:28;12544:35;;12417:178;36950:16:1;36968:8;36931:18;:46::i;:::-;36920:57;;36883:205;;;37027:46;37046:8;37056:16;:5;37070:1;12550:28:2;12566:2;12550:28;12544:35;;12417:178;37056:16:1;37027:18;:46::i;:::-;37016:57;;36883:205;37116:1;37108:9;;;;;36860:7;36865:2;36860:7;;:::i;:::-;;;36825:303;;;-1:-1:-1;37144:17:1;;;;36339:829;-1:-1:-1;;;;;36339:829:1:o;34697:127::-;34772:7;34798:19;34810:2;34814;34798:11;:19::i;:::-;34791:26;;34697:127;;;;;:::o;10264:386::-;10332:11;10455:2;10449:4;10442:16;10484:2;10478:4;10471:16;10541:2;10535:4;10531:2;10525:4;10522:1;10515:5;10504:40;10500:45;10599:2;10593:4;10589:2;10583:4;10580:1;10573:5;10562:40;-1:-1:-1;;10629:4:1;10623:11;;10264:386;-1:-1:-1;;10264:386:1:o;14:226:48:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:48;;14:226;-1:-1:-1;14:226:48:o;427:346::-;495:6;503;556:2;544:9;535:7;531:23;527:32;524:52;;;572:1;569;562:12;524:52;-1:-1:-1;;617:23:48;;;737:2;722:18;;;709:32;;-1:-1:-1;427:346:48:o;1009:347::-;1060:8;1070:6;1124:3;1117:4;1109:6;1105:17;1101:27;1091:55;;1142:1;1139;1132:12;1091:55;-1:-1:-1;1165:20:48;;1208:18;1197:30;;1194:50;;;1240:1;1237;1230:12;1194:50;1277:4;1269:6;1265:17;1253:29;;1329:3;1322:4;1313:6;1305;1301:19;1297:30;1294:39;1291:59;;;1346:1;1343;1336:12;1291:59;1009:347;;;;;:::o;1361:764::-;1458:6;1466;1474;1482;1490;1543:3;1531:9;1522:7;1518:23;1514:33;1511:53;;;1560:1;1557;1550:12;1511:53;1605:23;;;-1:-1:-1;1725:2:48;1710:18;;1697:32;;-1:-1:-1;1806:2:48;1791:18;;1778:32;1833:18;1822:30;;1819:50;;;1865:1;1862;1855:12;1819:50;1904:58;1954:7;1945:6;1934:9;1930:22;1904:58;:::i;:::-;1361:764;;;;-1:-1:-1;1981:8:48;2089:2;2074:18;2061:32;;1361:764;-1:-1:-1;;;;1361:764:48:o;4185:222::-;4250:9;;;4271:10;;;4268:133;;;4323:10;4318:3;4314:20;4311:1;4304:31;4358:4;4355:1;4348:15;4386:4;4383:1;4376:15;5084:209;5116:1;5142;5132:132;;5186:10;5181:3;5177:20;5174:1;5167:31;5221:4;5218:1;5211:15;5249:4;5246:1;5239:15;5132:132;-1:-1:-1;5278:9:48;;5084:209::o","linkReferences":{}},"methodIdentifiers":{"SYSTEM_CALLER()":"d761753e","blockHashes(uint256)":"34cdf78d","blockNumber()":"57e871e7","getBlockHash(uint256)":"ee82ac5e","getWitnessRootByHash(bytes32)":"0466efc4","getWitnessRootByNumber(uint256)":"61b207e2","initializeBlockNumber(uint256)":"1f578333","setBlockInfo(bytes32,bytes32)":"0e27bc11","verifyInclusion(bytes32,bytes32,bytes,uint256)":"d269a03e","verifyInclusion(uint256,bytes32,bytes,uint256)":"4ffd344a","witnessRoots(bytes32)":"a91d8b3d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"BlockInfoAdded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_CALLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"blockHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"getWitnessRootByHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWitnessRootByNumber\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"initializeBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_witnessRoot\",\"type\":\"bytes32\"}],\"name\":\"setBlockInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_wtxId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"verifyInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_wtxId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"verifyInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"witnessRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Citrea\",\"kind\":\"dev\",\"methods\":{\"getBlockHash(uint256)\":{\"params\":{\"_blockNumber\":\"Number of the block to get the hash for\"},\"returns\":{\"_0\":\"Block hash for the given block\"}},\"getWitnessRootByHash(bytes32)\":{\"params\":{\"_blockHash\":\"Block hash of the block to get the witness root for\"},\"returns\":{\"_0\":\"Witness root for the given block\"}},\"getWitnessRootByNumber(uint256)\":{\"params\":{\"_blockNumber\":\"Block number of the block to get the witness root for\"},\"returns\":{\"_0\":\"Merkle root for the given block\"}},\"initializeBlockNumber(uint256)\":{\"params\":{\"_blockNumber\":\"L1 block number that is associated with the genesis block of Citrea\"}},\"setBlockInfo(bytes32,bytes32)\":{\"details\":\"Block number is incremented by the contract as no block info should be overwritten or skipped\",\"params\":{\"_blockHash\":\"Hash of the current L1 block\",\"_witnessRoot\":\"Witness root of the current L1 block, must be in little endian \"}},\"verifyInclusion(bytes32,bytes32,bytes,uint256)\":{\"details\":\"Witness transaction ID and proof elements must be in little endian\",\"params\":{\"_blockHash\":\"Block hash of the block\",\"_index\":\"Index of the transaction\",\"_proof\":\"Merkle proof\",\"_wtxId\":\"Witness transaction ID\"},\"returns\":{\"_0\":\"If the witness transaction ID is included in the witness root hash of the block\"}},\"verifyInclusion(uint256,bytes32,bytes,uint256)\":{\"details\":\"Witness transaction ID and proof elements must be in little endian\",\"params\":{\"_blockNumber\":\"Block number of the block\",\"_index\":\"Index of the transaction\",\"_proof\":\"Merkle proof\",\"_wtxId\":\"Witness transaction ID\"},\"returns\":{\"_0\":\"If the witness transaction ID is included in the witness root hash of the block\"}}},\"title\":\"A system contract that stores block hashes and witness root hashes of L1 blocks\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initializeBlockNumber(uint256)\":{\"notice\":\"Sets the initial value for the block number, can only be called once\"},\"setBlockInfo(bytes32,bytes32)\":{\"notice\":\"Sets the block hash and witness root for a given blockCan only be called after the initial block number is set\"},\"verifyInclusion(bytes32,bytes32,bytes,uint256)\":{\"notice\":\"Verifies the inclusion of a witness transaction ID in the witness root hash of a block\"},\"verifyInclusion(uint256,bytes32,bytes,uint256)\":{\"notice\":\"Verifies the inclusion of a witness transaction ID in the witness root hash of a block\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BitcoinLightClient.sol\":\"BitcoinLightClient\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol\":{\"keccak256\":\"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc\",\"urls\":[\"bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667\",\"dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH\"]},\"lib/bitcoin-spv/solidity/contracts/BytesLib.sol\":{\"keccak256\":\"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1\",\"urls\":[\"bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6\",\"dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT\"]},\"lib/bitcoin-spv/solidity/contracts/SafeMath.sol\":{\"keccak256\":\"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3\",\"urls\":[\"bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b\",\"dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe\"]},\"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol\":{\"keccak256\":\"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b\",\"urls\":[\"bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a\",\"dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7\",\"dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"src/BitcoinLightClient.sol\":{\"keccak256\":\"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7\",\"dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf\"]},\"src/interfaces/IBitcoinLightClient.sol\":{\"keccak256\":\"0x7b7bce470657991ad77890c0f9a3e01570279e6143038ed1b6f82f783feea33a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c1a77b309c61d34eb39b8a77fd5a5f8c154e50fd60db3007f5049d6b06b650\",\"dweb:/ipfs/QmdHbULcAzZtD7u55bkQ8D9FEPMRvy1jgwNC3pFxHtiUfL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32","indexed":false}],"type":"event","name":"BlockInfoAdded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CALLER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"blockHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getWitnessRootByHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getWitnessRootByNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initializeBlockNumber"},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes32","name":"_witnessRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setBlockInfo"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"bytes32","name":"_wtxId","type":"bytes32"},{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes32","name":"_wtxId","type":"bytes32"},{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"witnessRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getBlockHash(uint256)":{"params":{"_blockNumber":"Number of the block to get the hash for"},"returns":{"_0":"Block hash for the given block"}},"getWitnessRootByHash(bytes32)":{"params":{"_blockHash":"Block hash of the block to get the witness root for"},"returns":{"_0":"Witness root for the given block"}},"getWitnessRootByNumber(uint256)":{"params":{"_blockNumber":"Block number of the block to get the witness root for"},"returns":{"_0":"Merkle root for the given block"}},"initializeBlockNumber(uint256)":{"params":{"_blockNumber":"L1 block number that is associated with the genesis block of Citrea"}},"setBlockInfo(bytes32,bytes32)":{"details":"Block number is incremented by the contract as no block info should be overwritten or skipped","params":{"_blockHash":"Hash of the current L1 block","_witnessRoot":"Witness root of the current L1 block, must be in little endian "}},"verifyInclusion(bytes32,bytes32,bytes,uint256)":{"details":"Witness transaction ID and proof elements must be in little endian","params":{"_blockHash":"Block hash of the block","_index":"Index of the transaction","_proof":"Merkle proof","_wtxId":"Witness transaction ID"},"returns":{"_0":"If the witness transaction ID is included in the witness root hash of the block"}},"verifyInclusion(uint256,bytes32,bytes,uint256)":{"details":"Witness transaction ID and proof elements must be in little endian","params":{"_blockNumber":"Block number of the block","_index":"Index of the transaction","_proof":"Merkle proof","_wtxId":"Witness transaction ID"},"returns":{"_0":"If the witness transaction ID is included in the witness root hash of the block"}}},"version":1},"userdoc":{"kind":"user","methods":{"initializeBlockNumber(uint256)":{"notice":"Sets the initial value for the block number, can only be called once"},"setBlockInfo(bytes32,bytes32)":{"notice":"Sets the block hash and witness root for a given blockCan only be called after the initial block number is set"},"verifyInclusion(bytes32,bytes32,bytes,uint256)":{"notice":"Verifies the inclusion of a witness transaction ID in the witness root hash of a block"},"verifyInclusion(uint256,bytes32,bytes,uint256)":{"notice":"Verifies the inclusion of a witness transaction ID in the witness root hash of a block"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/BitcoinLightClient.sol":"BitcoinLightClient"},"evmVersion":"paris","libraries":{}},"sources":{"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol":{"keccak256":"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc","urls":["bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667","dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH"],"license":null},"lib/bitcoin-spv/solidity/contracts/BytesLib.sol":{"keccak256":"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1","urls":["bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6","dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT"],"license":null},"lib/bitcoin-spv/solidity/contracts/SafeMath.sol":{"keccak256":"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3","urls":["bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b","dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe"],"license":null},"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol":{"keccak256":"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b","urls":["bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a","dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J"],"license":null},"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"keccak256":"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f","urls":["bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7","dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"src/BitcoinLightClient.sol":{"keccak256":"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c","urls":["bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7","dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf"],"license":"MIT"},"src/interfaces/IBitcoinLightClient.sol":{"keccak256":"0x7b7bce470657991ad77890c0f9a3e01570279e6143038ed1b6f82f783feea33a","urls":["bzz-raw://52c1a77b309c61d34eb39b8a77fd5a5f8c154e50fd60db3007f5049d6b06b650","dweb:/ipfs/QmdHbULcAzZtD7u55bkQ8D9FEPMRvy1jgwNC3pFxHtiUfL"],"license":"MIT"}},"version":1},"id":42} \ No newline at end of file +{"abi":[{"type":"function","name":"SYSTEM_CALLER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"blockHashes","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"blockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockHash","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getWitnessRootByHash","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getWitnessRootByNumber","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initializeBlockNumber","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBlockInfo","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"},{"name":"_witnessRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyInclusion","inputs":[{"name":"_blockNumber","type":"uint256","internalType":"uint256"},{"name":"_wtxId","type":"bytes32","internalType":"bytes32"},{"name":"_proof","type":"bytes","internalType":"bytes"},{"name":"_index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verifyInclusion","inputs":[{"name":"_blockHash","type":"bytes32","internalType":"bytes32"},{"name":"_wtxId","type":"bytes32","internalType":"bytes32"},{"name":"_proof","type":"bytes","internalType":"bytes"},{"name":"_index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"witnessRoots","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"BlockInfoAdded","inputs":[{"name":"blockNumber","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"merkleRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506106bb8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806357e871e71161007157806357e871e71461014c57806361b207e214610155578063a91d8b3d14610182578063d269a03e146101a2578063d761753e146101b5578063ee82ac5e146101e857600080fd5b80630466efc4146100ae5780630e27bc11146100e15780631f578333146100f657806334cdf78d146101095780634ffd344a14610129575b600080fd5b6100ce6100bc366004610599565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6100f46100ef3660046105b2565b610208565b005b6100f4610104366004610599565b610331565b6100ce610117366004610599565b60016020526000908152604090205481565b61013c61013736600461061d565b6103df565b60405190151581526020016100d8565b6100ce60005481565b6100ce610163366004610599565b6000908152600160209081526040808320548352600290915290205490565b6100ce610190366004610599565b60026020526000908152604090205481565b61013c6101b036600461061d565b610405565b6101d073deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b6040516001600160a01b0390911681526020016100d8565b6100ce6101f6366004610599565b60009081526001602052604090205490565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146102705760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60008054908190036102b65760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b6044820152606401610267565b60008181526001602081905260409091208490556102d5908290610678565b6000908155838152600260209081526040808320859055915482519081529081018590529081018390527f32eff959e2e8d1609edc4b39ccf75900aa6c1da5719f8432752963fdf008234f9060600160405180910390a1505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146103945760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610267565b600054156103da5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610267565b600055565b6000858152600160205260408120546103fb9086868686610410565b9695505050505050565b60006103fb86868686865b6000858152600260209081526040808320548151601f870184900484028101840190925285825291610463918891849190899089908190840183828082843760009201919091525089925061046e915050565b979650505050505050565b6000838514801561047d575081155b801561048857508251155b15610495575060016104a4565b6104a1858486856104ac565b90505b949350505050565b6000602084516104bc9190610699565b156104c9575060006104a4565b83516000036104da575060006104a4565b818560005b8651811015610549576104f3600284610699565b6001036105175761051061050a8883016020015190565b83610556565b9150610530565b61052d826105288984016020015190565b610556565b91505b60019290921c91610542602082610678565b90506104df565b5090931495945050505050565b6000610562838361056b565b90505b92915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6000602082840312156105ab57600080fd5b5035919050565b600080604083850312156105c557600080fd5b50508035926020909101359150565b60008083601f8401126105e657600080fd5b50813567ffffffffffffffff8111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b60008060008060006080868803121561063557600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561065a57600080fd5b610666888289016105d4565b96999598509660600135949350505050565b8082018082111561056557634e487b7160e01b600052601160045260246000fd5b6000826106b657634e487b7160e01b600052601260045260246000fd5b50069056","sourceMap":"675:4087:45:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806357e871e71161007157806357e871e71461014c57806361b207e214610155578063a91d8b3d14610182578063d269a03e146101a2578063d761753e146101b5578063ee82ac5e146101e857600080fd5b80630466efc4146100ae5780630e27bc11146100e15780631f578333146100f657806334cdf78d146101095780634ffd344a14610129575b600080fd5b6100ce6100bc366004610599565b60009081526002602052604090205490565b6040519081526020015b60405180910390f35b6100f46100ef3660046105b2565b610208565b005b6100f4610104366004610599565b610331565b6100ce610117366004610599565b60016020526000908152604090205481565b61013c61013736600461061d565b6103df565b60405190151581526020016100d8565b6100ce60005481565b6100ce610163366004610599565b6000908152600160209081526040808320548352600290915290205490565b6100ce610190366004610599565b60026020526000908152604090205481565b61013c6101b036600461061d565b610405565b6101d073deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b6040516001600160a01b0390911681526020016100d8565b6100ce6101f6366004610599565b60009081526001602052604090205490565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146102705760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60008054908190036102b65760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b6044820152606401610267565b60008181526001602081905260409091208490556102d5908290610678565b6000908155838152600260209081526040808320859055915482519081529081018590529081018390527f32eff959e2e8d1609edc4b39ccf75900aa6c1da5719f8432752963fdf008234f9060600160405180910390a1505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146103945760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610267565b600054156103da5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610267565b600055565b6000858152600160205260408120546103fb9086868686610410565b9695505050505050565b60006103fb86868686865b6000858152600260209081526040808320548151601f870184900484028101840190925285825291610463918891849190899089908190840183828082843760009201919091525089925061046e915050565b979650505050505050565b6000838514801561047d575081155b801561048857508251155b15610495575060016104a4565b6104a1858486856104ac565b90505b949350505050565b6000602084516104bc9190610699565b156104c9575060006104a4565b83516000036104da575060006104a4565b818560005b8651811015610549576104f3600284610699565b6001036105175761051061050a8883016020015190565b83610556565b9150610530565b61052d826105288984016020015190565b610556565b91505b60019290921c91610542602082610678565b90506104df565b5090931495945050505050565b6000610562838361056b565b90505b92915050565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6000602082840312156105ab57600080fd5b5035919050565b600080604083850312156105c557600080fd5b50508035926020909101359150565b60008083601f8401126105e657600080fd5b50813567ffffffffffffffff8111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b60008060008060006080868803121561063557600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561065a57600080fd5b610666888289016105d4565b96999598509660600135949350505050565b8082018082111561056557634e487b7160e01b600052601160045260246000fd5b6000826106b657634e487b7160e01b600052601260045260246000fd5b50069056","sourceMap":"675:4087:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:130;;;;;;:::i;:::-;2791:7;2817:24;;;:12;:24;;;;;;;2718:130;;;;391:25:58;;;379:2;364:18;2718:130:45;;;;;;;;1944:395;;;;;;:::i;:::-;;:::i;:::-;;1366:174;;;;;;:::i;:::-;;:::i;861:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;4266:222;;;;;;:::i;:::-;;:::i;:::-;;;2295:14:58;;2288:22;2270:41;;2258:2;2243:18;4266:222:45;2130:187:58;732:26:45;;;;;;2984:149;;;;;;:::i;:::-;3061:7;3100:25;;;:11;:25;;;;;;;;;3087:39;;:12;:39;;;;;;;2984:149;913:47;;;;;;:::i;:::-;;;;;;;;;;;;;;3595:205;;;;;;:::i;:::-;;:::i;764:91::-;;812:42;764:91;;;;;-1:-1:-1;;;;;3437:32:58;;;3419:51;;3407:2;3392:18;764:91:45;3273:203:58;2460:125:45;;;;;;:::i;:::-;2527:7;2553:25;;;:11;:25;;;;;;;2460:125;1944:395;1098:10;812:42;1098:27;1090:71;;;;-1:-1:-1;;;1090:71:45;;3683:2:58;1090:71:45;;;3665:21:58;3722:2;3702:18;;;3695:30;3761:33;3741:18;;;3734:61;3812:18;;1090:71:45;;;;;;;;;2038:20:::1;2061:11:::0;;;2090:17;;;2082:45:::1;;;::::0;-1:-1:-1;;;2082:45:45;;4043:2:58;2082:45:45::1;::::0;::::1;4025:21:58::0;4082:2;4062:18;;;4055:30;-1:-1:-1;;;4101:18:58;;;4094:45;4156:18;;2082:45:45::1;3841:339:58::0;2082:45:45::1;2137:25;::::0;;;:11:::1;:25;::::0;;;;;;;:38;;;2199:16:::1;::::0;2149:12;;2199:16:::1;:::i;:::-;2185:11;:30:::0;;;2225:24;;;:12:::1;:24;::::0;;;;;;;:39;;;2294:11;;2279:53;;4614:25:58;;;4655:18;;;4648:34;;;4698:18;;;4691:34;;;2279:53:45::1;::::0;4602:2:58;4587:18;2279:53:45::1;;;;;;;2028:311;1944:395:::0;;:::o;1366:174::-;1098:10;812:42;1098:27;1090:71;;;;-1:-1:-1;;;1090:71:45;;3683:2:58;1090:71:45;;;3665:21:58;3722:2;3702:18;;;3695:30;3761:33;3741:18;;;3734:61;3812:18;;1090:71:45;3481:355:58;1090:71:45;1457:11:::1;::::0;:16;1449:48:::1;;;::::0;-1:-1:-1;;;1449:48:45;;4938:2:58;1449:48:45::1;::::0;::::1;4920:21:58::0;4977:2;4957:18;;;4950:30;-1:-1:-1;;;4996:18:58;;;4989:49;5055:18;;1449:48:45::1;4736:343:58::0;1449:48:45::1;1507:11;:26:::0;1366:174::o;4266:222::-;4391:4;4431:25;;;:11;:25;;;;;;4414:67;;4458:6;4466;;4474;4414:16;:67::i;:::-;4407:74;4266:222;-1:-1:-1;;;;;;4266:222:45:o;3595:205::-;3718:4;3741:52;3758:10;3770:6;3778;;3786;4494:266;4618:4;4657:24;;;:12;:24;;;;;;;;;4698:55;;;;;;;;;;;;;;;;;;;;4657:24;4698:55;;4716:6;;4657:24;;4698:55;4738:6;;;;;;4698:55;;4738:6;;;;4698:55;;;;;;;;;-1:-1:-1;4746:6:45;;-1:-1:-1;4698:17:45;;-1:-1:-1;;4698:55:45:i;:::-;4691:62;4494:266;-1:-1:-1;;;;;;;4494:266:45:o;1685:539:4:-;1843:4;1913:11;1904:5;:20;:35;;;;-1:-1:-1;1928:11:4;;1904:35;:69;;;;-1:-1:-1;1943:25:4;;:30;1904:69;1900:111;;;-1:-1:-1;1996:4:4;1989:11;;1900:111;2083:134;2125:5;2144:18;2176:11;2201:6;2083:28;:134::i;:::-;2076:141;;1685:539;;;;;;;:::o;36339:829:1:-;36492:4;36567:2;36552:5;:12;:17;;;;:::i;:::-;:22;36548:65;;-1:-1:-1;36597:5:1;36590:12;;36548:65;36657:5;:12;36673:1;36657:17;36653:60;;-1:-1:-1;36697:5:1;36690:12;;36653:60;36735:6;36770:5;36723:9;36825:303;36846:5;:12;36842:1;:16;36825:303;;;36887:8;36894:1;36887:4;:8;:::i;:::-;36899:1;36887:13;36883:205;;36931:46;36950:16;:5;36964:1;12550:28:2;12566:2;12550:28;12544:35;;12417:178;36950:16:1;36968:8;36931:18;:46::i;:::-;36920:57;;36883:205;;;37027:46;37046:8;37056:16;:5;37070:1;12550:28:2;12566:2;12550:28;12544:35;;12417:178;37056:16:1;37027:18;:46::i;:::-;37016:57;;36883:205;37116:1;37108:9;;;;;36860:7;36865:2;36860:7;;:::i;:::-;;;36825:303;;;-1:-1:-1;37144:17:1;;;;36339:829;-1:-1:-1;;;;;36339:829:1:o;34697:127::-;34772:7;34798:19;34810:2;34814;34798:11;:19::i;:::-;34791:26;;34697:127;;;;;:::o;10264:386::-;10332:11;10455:2;10449:4;10442:16;10484:2;10478:4;10471:16;10541:2;10535:4;10531:2;10525:4;10522:1;10515:5;10504:40;10500:45;10599:2;10593:4;10589:2;10583:4;10580:1;10573:5;10562:40;-1:-1:-1;;10629:4:1;10623:11;;10264:386;-1:-1:-1;;10264:386:1:o;14:226:58:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:58;;14:226;-1:-1:-1;14:226:58:o;427:346::-;495:6;503;556:2;544:9;535:7;531:23;527:32;524:52;;;572:1;569;562:12;524:52;-1:-1:-1;;617:23:58;;;737:2;722:18;;;709:32;;-1:-1:-1;427:346:58:o;1009:347::-;1060:8;1070:6;1124:3;1117:4;1109:6;1105:17;1101:27;1091:55;;1142:1;1139;1132:12;1091:55;-1:-1:-1;1165:20:58;;1208:18;1197:30;;1194:50;;;1240:1;1237;1230:12;1194:50;1277:4;1269:6;1265:17;1253:29;;1329:3;1322:4;1313:6;1305;1301:19;1297:30;1294:39;1291:59;;;1346:1;1343;1336:12;1291:59;1009:347;;;;;:::o;1361:764::-;1458:6;1466;1474;1482;1490;1543:3;1531:9;1522:7;1518:23;1514:33;1511:53;;;1560:1;1557;1550:12;1511:53;1605:23;;;-1:-1:-1;1725:2:58;1710:18;;1697:32;;-1:-1:-1;1806:2:58;1791:18;;1778:32;1833:18;1822:30;;1819:50;;;1865:1;1862;1855:12;1819:50;1904:58;1954:7;1945:6;1934:9;1930:22;1904:58;:::i;:::-;1361:764;;;;-1:-1:-1;1981:8:58;2089:2;2074:18;2061:32;;1361:764;-1:-1:-1;;;;1361:764:58:o;4185:222::-;4250:9;;;4271:10;;;4268:133;;;4323:10;4318:3;4314:20;4311:1;4304:31;4358:4;4355:1;4348:15;4386:4;4383:1;4376:15;5084:209;5116:1;5142;5132:132;;5186:10;5181:3;5177:20;5174:1;5167:31;5221:4;5218:1;5211:15;5249:4;5246:1;5239:15;5132:132;-1:-1:-1;5278:9:58;;5084:209::o","linkReferences":{}},"methodIdentifiers":{"SYSTEM_CALLER()":"d761753e","blockHashes(uint256)":"34cdf78d","blockNumber()":"57e871e7","getBlockHash(uint256)":"ee82ac5e","getWitnessRootByHash(bytes32)":"0466efc4","getWitnessRootByNumber(uint256)":"61b207e2","initializeBlockNumber(uint256)":"1f578333","setBlockInfo(bytes32,bytes32)":"0e27bc11","verifyInclusion(bytes32,bytes32,bytes,uint256)":"d269a03e","verifyInclusion(uint256,bytes32,bytes,uint256)":"4ffd344a","witnessRoots(bytes32)":"a91d8b3d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"BlockInfoAdded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_CALLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"blockHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"getWitnessRootByHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWitnessRootByNumber\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"initializeBlockNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_witnessRoot\",\"type\":\"bytes32\"}],\"name\":\"setBlockInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_wtxId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"verifyInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_wtxId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"verifyInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"witnessRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Citrea\",\"kind\":\"dev\",\"methods\":{\"getBlockHash(uint256)\":{\"params\":{\"_blockNumber\":\"Number of the block to get the hash for\"},\"returns\":{\"_0\":\"Block hash for the given block\"}},\"getWitnessRootByHash(bytes32)\":{\"params\":{\"_blockHash\":\"Block hash of the block to get the witness root for\"},\"returns\":{\"_0\":\"Witness root for the given block\"}},\"getWitnessRootByNumber(uint256)\":{\"params\":{\"_blockNumber\":\"Block number of the block to get the witness root for\"},\"returns\":{\"_0\":\"Merkle root for the given block\"}},\"initializeBlockNumber(uint256)\":{\"params\":{\"_blockNumber\":\"L1 block number that is associated with the genesis block of Citrea\"}},\"setBlockInfo(bytes32,bytes32)\":{\"details\":\"Block number is incremented by the contract as no block info should be overwritten or skipped\",\"params\":{\"_blockHash\":\"Hash of the current L1 block\",\"_witnessRoot\":\"Witness root of the current L1 block, must be in little endian \"}},\"verifyInclusion(bytes32,bytes32,bytes,uint256)\":{\"details\":\"Witness transaction ID and proof elements must be in little endian\",\"params\":{\"_blockHash\":\"Block hash of the block\",\"_index\":\"Index of the transaction\",\"_proof\":\"Merkle proof\",\"_wtxId\":\"Witness transaction ID\"},\"returns\":{\"_0\":\"If the witness transaction ID is included in the witness root hash of the block\"}},\"verifyInclusion(uint256,bytes32,bytes,uint256)\":{\"details\":\"Witness transaction ID and proof elements must be in little endian\",\"params\":{\"_blockNumber\":\"Block number of the block\",\"_index\":\"Index of the transaction\",\"_proof\":\"Merkle proof\",\"_wtxId\":\"Witness transaction ID\"},\"returns\":{\"_0\":\"If the witness transaction ID is included in the witness root hash of the block\"}}},\"title\":\"A system contract that stores block hashes and witness root hashes of L1 blocks\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initializeBlockNumber(uint256)\":{\"notice\":\"Sets the initial value for the block number, can only be called once\"},\"setBlockInfo(bytes32,bytes32)\":{\"notice\":\"Sets the block hash and witness root for a given blockCan only be called after the initial block number is set\"},\"verifyInclusion(bytes32,bytes32,bytes,uint256)\":{\"notice\":\"Verifies the inclusion of a witness transaction ID in the witness root hash of a block\"},\"verifyInclusion(uint256,bytes32,bytes,uint256)\":{\"notice\":\"Verifies the inclusion of a witness transaction ID in the witness root hash of a block\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BitcoinLightClient.sol\":\"BitcoinLightClient\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol\":{\"keccak256\":\"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc\",\"urls\":[\"bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667\",\"dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH\"]},\"lib/bitcoin-spv/solidity/contracts/BytesLib.sol\":{\"keccak256\":\"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1\",\"urls\":[\"bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6\",\"dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT\"]},\"lib/bitcoin-spv/solidity/contracts/SafeMath.sol\":{\"keccak256\":\"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3\",\"urls\":[\"bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b\",\"dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe\"]},\"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol\":{\"keccak256\":\"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b\",\"urls\":[\"bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a\",\"dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7\",\"dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"src/BitcoinLightClient.sol\":{\"keccak256\":\"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7\",\"dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf\"]},\"src/interfaces/IBitcoinLightClient.sol\":{\"keccak256\":\"0xd299a79b3aec00e07839b7dcbed21d3d7d50e26c0149e730170f7761202552ca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8cfcbc8fe666020b8a707d062e296dcf159737645a8c677975bad71b456b4ad\",\"dweb:/ipfs/QmSuDCXJFYpRpTXdiWVVwvm69yzmTZj7zMLmRPNazRR4dj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256","indexed":false},{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32","indexed":false}],"type":"event","name":"BlockInfoAdded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CALLER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"blockHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getWitnessRootByHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getWitnessRootByNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initializeBlockNumber"},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes32","name":"_witnessRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setBlockInfo"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"bytes32","name":"_wtxId","type":"bytes32"},{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes32","name":"_wtxId","type":"bytes32"},{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function","name":"verifyInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"witnessRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getBlockHash(uint256)":{"params":{"_blockNumber":"Number of the block to get the hash for"},"returns":{"_0":"Block hash for the given block"}},"getWitnessRootByHash(bytes32)":{"params":{"_blockHash":"Block hash of the block to get the witness root for"},"returns":{"_0":"Witness root for the given block"}},"getWitnessRootByNumber(uint256)":{"params":{"_blockNumber":"Block number of the block to get the witness root for"},"returns":{"_0":"Merkle root for the given block"}},"initializeBlockNumber(uint256)":{"params":{"_blockNumber":"L1 block number that is associated with the genesis block of Citrea"}},"setBlockInfo(bytes32,bytes32)":{"details":"Block number is incremented by the contract as no block info should be overwritten or skipped","params":{"_blockHash":"Hash of the current L1 block","_witnessRoot":"Witness root of the current L1 block, must be in little endian "}},"verifyInclusion(bytes32,bytes32,bytes,uint256)":{"details":"Witness transaction ID and proof elements must be in little endian","params":{"_blockHash":"Block hash of the block","_index":"Index of the transaction","_proof":"Merkle proof","_wtxId":"Witness transaction ID"},"returns":{"_0":"If the witness transaction ID is included in the witness root hash of the block"}},"verifyInclusion(uint256,bytes32,bytes,uint256)":{"details":"Witness transaction ID and proof elements must be in little endian","params":{"_blockNumber":"Block number of the block","_index":"Index of the transaction","_proof":"Merkle proof","_wtxId":"Witness transaction ID"},"returns":{"_0":"If the witness transaction ID is included in the witness root hash of the block"}}},"version":1},"userdoc":{"kind":"user","methods":{"initializeBlockNumber(uint256)":{"notice":"Sets the initial value for the block number, can only be called once"},"setBlockInfo(bytes32,bytes32)":{"notice":"Sets the block hash and witness root for a given blockCan only be called after the initial block number is set"},"verifyInclusion(bytes32,bytes32,bytes,uint256)":{"notice":"Verifies the inclusion of a witness transaction ID in the witness root hash of a block"},"verifyInclusion(uint256,bytes32,bytes,uint256)":{"notice":"Verifies the inclusion of a witness transaction ID in the witness root hash of a block"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/BitcoinLightClient.sol":"BitcoinLightClient"},"evmVersion":"paris","libraries":{}},"sources":{"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol":{"keccak256":"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc","urls":["bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667","dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH"],"license":null},"lib/bitcoin-spv/solidity/contracts/BytesLib.sol":{"keccak256":"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1","urls":["bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6","dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT"],"license":null},"lib/bitcoin-spv/solidity/contracts/SafeMath.sol":{"keccak256":"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3","urls":["bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b","dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe"],"license":null},"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol":{"keccak256":"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b","urls":["bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a","dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J"],"license":null},"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"keccak256":"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f","urls":["bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7","dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"src/BitcoinLightClient.sol":{"keccak256":"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c","urls":["bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7","dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf"],"license":"MIT"},"src/interfaces/IBitcoinLightClient.sol":{"keccak256":"0xd299a79b3aec00e07839b7dcbed21d3d7d50e26c0149e730170f7761202552ca","urls":["bzz-raw://d8cfcbc8fe666020b8a707d062e296dcf159737645a8c677975bad71b456b4ad","dweb:/ipfs/QmSuDCXJFYpRpTXdiWVVwvm69yzmTZj7zMLmRPNazRR4dj"],"license":"MIT"}},"version":1},"id":45} \ No newline at end of file diff --git a/crates/evm/src/evm/system_contracts/out/Bridge.sol/Bridge.json b/crates/evm/src/evm/system_contracts/out/Bridge.sol/Bridge.json index b891615a0..dbb379b33 100644 --- a/crates/evm/src/evm/system_contracts/out/Bridge.sol/Bridge.json +++ b/crates/evm/src/evm/system_contracts/out/Bridge.sol/Bridge.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"DEPOSIT_AMOUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"LIGHT_CLIENT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract BitcoinLightClient"}],"stateMutability":"view"},{"type":"function","name":"SYSTEM_CALLER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchWithdraw","inputs":[{"name":"bitcoin_addresses","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deposit","inputs":[{"name":"p","type":"tuple","internalType":"struct Bridge.DepositParams","components":[{"name":"version","type":"bytes4","internalType":"bytes4"},{"name":"flag","type":"bytes2","internalType":"bytes2"},{"name":"vin","type":"bytes","internalType":"bytes"},{"name":"vout","type":"bytes","internalType":"bytes"},{"name":"witness","type":"bytes","internalType":"bytes"},{"name":"locktime","type":"bytes4","internalType":"bytes4"},{"name":"intermediate_nodes","type":"bytes","internalType":"bytes"},{"name":"block_height","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositScript","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawalCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_depositScript","type":"bytes","internalType":"bytes"},{"name":"_scriptSuffix","type":"bytes","internalType":"bytes"},{"name":"_requiredSigsCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"operator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requiredSigsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"scriptSuffix","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"setDepositScript","inputs":[{"name":"_depositScript","type":"bytes","internalType":"bytes"},{"name":"_scriptSuffix","type":"bytes","internalType":"bytes"},{"name":"_requiredSigsCount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"spentWtxIds","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"bitcoin_address","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdrawalAddrs","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Deposit","inputs":[{"name":"wtxId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"recipient","type":"address","indexed":false,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositScriptUpdate","inputs":[{"name":"depositScript","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"scriptSuffix","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"requiredSigsCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OperatorUpdated","inputs":[{"name":"oldOperator","type":"address","indexed":false,"internalType":"address"},{"name":"newOperator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"bitcoin_address","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506124608061001f6000396000f3fe6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356","sourceMap":"430:9067:43:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356","sourceMap":"430:9067:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:23;;;;;;;;;;-1:-1:-1;1018:23:43;;;;;;;;;;;179:14:48;;172:22;154:41;;142:2;127:18;1018:23:43;;;;;;;;2269:810;;;;;;;;;;-1:-1:-1;2269:810:43;;;;;:::i;:::-;;:::i;:::-;;1133:32;;;;;;;;;;;;;;;;;;;1535:25:48;;;1523:2;1508:18;1133:32:43;1389:177:48;1104:23:43;;;;;;;;;;-1:-1:-1;1104:23:43;;;;;;;-1:-1:-1;;;;;1104:23:43;;;;;;-1:-1:-1;;;;;1735:32:48;;;1717:51;;1705:2;1690:18;1104:23:43;1571:203:48;7309:440:43;;;;;;:::i;:::-;;:::i;1239:43::-;;;;;;;;;;-1:-1:-1;1239:43:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;3155:101:25;;;;;;;;;;;;;:::i;7812:108:43:-;;;;;;;;;;-1:-1:-1;7891:15:43;:22;7812:108;;2774:229:24;;;;;;;;;;;;;:::i;1203:25:43:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2441:144:25:-;;;;;;;;;;;;;:::i;6763:301:43:-;;;;;;:::i;:::-;;:::i;3572:505::-;;;;;;;;;;-1:-1:-1;3572:505:43;;;;;:::i;:::-;;:::i;8063:147::-;;;;;;;;;;-1:-1:-1;8063:147:43;;;;;:::i;:::-;;:::i;1171:26::-;;;;;;;;;;;;;:::i;1288:32::-;;;;;;;;;;-1:-1:-1;1288:32:43;;;;;:::i;:::-;;:::i;920:91::-;;;;;;;;;;;;968:42;920:91;;4324:2185;;;;;;;;;;-1:-1:-1;4324:2185:43;;;;;:::i;:::-;;:::i;1680:168:24:-;;;;;;;;;;;;;:::i;793:121:43:-;;;;;;;;;;;;-1:-1:-1;;;;;793:121:43;;1047:51;;;;;;;;;;;;1088:10;1047:51;;2041:247:24;;;;;;;;;;-1:-1:-1;2041:247:24;;;;;:::i;:::-;;:::i;2269:810:43:-;1693:10;968:42;1693:27;1685:71;;;;-1:-1:-1;;;1685:71:43;;4650:2:48;1685:71:43;;;4632:21:48;4689:2;4669:18;;;4662:30;4728:33;4708:18;;;4701:61;4779:18;;1685:71:43;;;;;;;;;2417:11:::1;::::0;::::1;;2416:12;2408:56;;;::::0;-1:-1:-1;;;2408:56:43;;5010:2:48;2408:56:43::1;::::0;::::1;4992:21:48::0;5049:2;5029:18;;;5022:30;5088:33;5068:18;;;5061:61;5139:18;;2408:56:43::1;4808:355:48::0;2408:56:43::1;2482:18;2504:1;2482:23:::0;2474:62:::1;;;::::0;-1:-1:-1;;;2474:62:43;;5370:2:48;2474:62:43::1;::::0;::::1;5352:21:48::0;5409:2;5389:18;;;5382:30;5448:28;5428:18;;;5421:56;5494:18;;2474:62:43::1;5168:350:48::0;2474:62:43::1;2579:1;2554:26:::0;;;2546:69:::1;;;::::0;-1:-1:-1;;;2546:69:43;;5725:2:48;2546:69:43::1;::::0;::::1;5707:21:48::0;5764:2;5744:18;;;5737:30;5803:32;5783:18;;;5776:60;5853:18;;2546:69:43::1;5523:354:48::0;2546:69:43::1;2626:11;:18:::0;;-1:-1:-1;;2626:18:43::1;2640:4;2626:18;::::0;;2654:13:::1;:30;2670:14:::0;;2654:13;:30:::1;:::i;:::-;-1:-1:-1::0;2694:12:43::1;:28;2709:13:::0;;2694:12;:28:::1;:::i;:::-;-1:-1:-1::0;2732:17:43::1;:38:::0;;;2905:8:::1;:24:::0;;-1:-1:-1;;;;;;2905:24:43::1;::::0;::::1;::::0;;2945:42:::1;::::0;;8598:51:48;;;968:42:43::1;8680:2:48::0;8665:18;;8658:60;2945:42:43::1;::::0;8571:18:48;2945:42:43::1;;;;;;;3002:70;3022:14;;3038:13;;3053:18;3002:70;;;;;;;;;;:::i;:::-;;;;;;;;2269:810:::0;;;;;:::o;7309:440::-;7418:41;7435:17;1088:10;7418:41;:::i;:::-;7405:9;:54;7397:90;;;;-1:-1:-1;;;7397:90:43;;10014:2:48;7397:90:43;;;9996:21:48;10053:2;10033:18;;;10026:30;-1:-1:-1;;;10072:18:48;;;10065:53;10135:18;;7397:90:43;9812:347:48;7397:90:43;7513:15;:22;7497:13;7545:198;7562:28;;;7545:198;;;7611:15;7632:17;;7650:1;7632:20;;;;;;;:::i;:::-;7611:42;;;;;;;-1:-1:-1;7611:42:43;;;7632:20;7611:42;;;;7632:20;;;;;;;;;7611:42;;;;;-1:-1:-1;7672:60:43;7683:17;;7701:1;7683:20;;;;;;;:::i;:::-;;;;;;;7713:1;7705:5;:9;;;;:::i;:::-;7672:60;;;10628:25:48;;;10684:2;10669:18;;10662:34;;;;7716:15:43;10712:18:48;;;10705:34;10616:2;10601:18;7672:60:43;;;;;;;7592:3;;7545:198;;;;7387:362;7309:440;;:::o;3155:101:25:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;2774:229:24:-;966:10:27;;2869:14:24;:12;:14::i;:::-;-1:-1:-1;;;;;2869:24:24;;2865:96;;2916:34;;-1:-1:-1;;;2916:34:24;;-1:-1:-1;;;;;1735:32:48;;2916:34:24;;;1717:51:48;1690:18;;2916:34:24;1571:203:48;2865:96:24;2970:26;2989:6;2970:18;:26::i;:::-;2816:187;2774:229::o;1203:25:43:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2441:144:25:-;2487:7;;1313:22;2533:20;2570:8;-1:-1:-1;;;;;2570:8:25;;2441:144;-1:-1:-1;;2441:144:25:o;6763:301:43:-;1088:10;6841:9;:27;6833:63;;;;-1:-1:-1;;;6833:63:43;;10014:2:48;6833:63:43;;;9996:21:48;10053:2;10033:18;;;10026:30;-1:-1:-1;;;10072:18:48;;;10065:53;10135:18;;6833:63:43;9812:347:48;6833:63:43;6922:15;:22;;6954:37;;;;;-1:-1:-1;6954:37:43;;;;;;;;;;7006:51;;;10628:25:48;;;10684:2;10669:18;;10662:34;;;7041:15:43;10712:18:48;;;10705:34;7006:51:43;;;;;;;10616:2:48;7006:51:43;;;6823:241;6763:301;:::o;3572:505::-;2334:13:25;:11;:13::i;:::-;3724:18:43::1;3746:1;3724:23:::0;3716:62:::1;;;::::0;-1:-1:-1;;;3716:62:43;;5370:2:48;3716:62:43::1;::::0;::::1;5352:21:48::0;5409:2;5389:18;;;5382:30;5448:28;5428:18;;;5421:56;5494:18;;3716:62:43::1;5168:350:48::0;3716:62:43::1;3821:1;3796:26:::0;;;3788:69:::1;;;::::0;-1:-1:-1;;;3788:69:43;;5725:2:48;3788:69:43::1;::::0;::::1;5707:21:48::0;5764:2;5744:18;;;5737:30;5803:32;5783:18;;;5776:60;5853:18;;3788:69:43::1;5523:354:48::0;3788:69:43::1;3868:13;:30;3884:14:::0;;3868:13;:30:::1;:::i;:::-;-1:-1:-1::0;3908:12:43::1;:28;3923:13:::0;;3908:12;:28:::1;:::i;:::-;-1:-1:-1::0;3946:17:43::1;:38:::0;;;4000:70:::1;::::0;::::1;::::0;::::1;::::0;4020:14;;;;4036:13;;;;3966:18;;4000:70:::1;:::i;8063:147::-:0;2334:13:25;:11;:13::i;:::-;8132:8:43::1;:20:::0;;-1:-1:-1;;;;;;8132:20:43::1;;-1:-1:-1::0;;;;;8132:20:43;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;8167:36:::1;::::0;;8183:8;;;::::1;;8598:51:48::0;;8680:2;8665:18;;8658:60;;;;8167:36:43::1;::::0;8571:18:48;8167:36:43::1;;;;;;;8063:147:::0;:::o;1171:26::-;;;;;;;:::i;1288:32::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1288:32:43;:::o;4324:2185::-;1836:8;;;;;-1:-1:-1;;;;;1836:8:43;1822:10;:22;1814:61;;;;-1:-1:-1;;;1814:61:43;;10952:2:48;1814:61:43;;;10934:21:48;10991:2;10971:18;;;10964:30;11030:28;11010:18;;;11003:56;11076:18;;1814:61:43;10750:350:48;1814:61:43;4750:13:::1;4766:84;4794:9;;::::0;::::1;:1:::0;:9:::1;:::i;:::-;4805:6;::::0;;;::::1;::::0;::::1;;:::i;:::-;4813:5;;::::0;::::1;:1:::0;:5:::1;:::i;:::-;4820:6;;::::0;::::1;:1:::0;:6:::1;:::i;:::-;4828:9;;::::0;::::1;:1:::0;:9:::1;:::i;:::-;4839:10;::::0;;;::::1;::::0;::::1;;:::i;:::-;4766:27;:84::i;:::-;4869:18;::::0;;;:11:::1;:18;::::0;;;;;4750:100;;-1:-1:-1;4869:18:43::1;;4868:19;4860:51;;;::::0;-1:-1:-1;;;4860:51:43;;12410:2:48;4860:51:43::1;::::0;::::1;12392:21:48::0;12449:2;12429:18;;;12422:30;-1:-1:-1;;;12468:18:48;;;12461:49;12527:18;;4860:51:43::1;12208:343:48::0;4860:51:43::1;4921:18;::::0;;;:11:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;4921:25:43::1;4942:4;4921:25;::::0;;4965:27:::1;::::0;4986:5:::1;::::0;;::::1;:1:::0;:5:::1;:::i;:::-;4965:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4965:20:43::1;::::0;-1:-1:-1;;;4965:27:43:i:1;:::-;4957:69;;;::::0;-1:-1:-1;;;4957:69:43;;12758:2:48;4957:69:43::1;::::0;::::1;12740:21:48::0;12797:2;12777:18;;;12770:30;12836:31;12816:18;;;12809:59;12885:18;;4957:69:43::1;12556:353:48::0;4957:69:43::1;5044:29;5066:6;;::::0;::::1;:1:::0;:6:::1;:::i;:::-;5044:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5044:21:43::1;::::0;-1:-1:-1;;;5044:29:43:i:1;:::-;5036:72;;;::::0;-1:-1:-1;;;5036:72:43;;13116:2:48;5036:72:43::1;::::0;::::1;13098:21:48::0;13155:2;13135:18;;;13128:30;13194:32;13174:18;;;13167:60;13244:18;;5036:72:43::1;12914:354:48::0;5036:72:43::1;5130:13;5147:27;5168:5;;::::0;::::1;:1:::0;:5:::1;:::i;:::-;5147:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5147:20:43::1;::::0;-1:-1:-1;;;5147:27:43:i:1;:::-;5127:47;;;5192:5;5201:1;5192:10;5184:45;;;::::0;-1:-1:-1;;;5184:45:43;;13475:2:48;5184:45:43::1;::::0;::::1;13457:21:48::0;13514:2;13494:18;;;13487:30;-1:-1:-1;;;13533:18:48;;;13526:52;13595:18;;5184:45:43::1;13273:346:48::0;5184:45:43::1;5298:46;5327:9;;::::0;::::1;:1:::0;:9:::1;:::i;:::-;5298:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5338:5:43;;-1:-1:-1;5298:28:43::1;::::0;-1:-1:-1;;5298:46:43:i:1;:::-;5290:92;;;::::0;-1:-1:-1;;;5290:92:43;;13826:2:48;5290:92:43::1;::::0;::::1;13808:21:48::0;13865:2;13845:18;;;13838:30;13904:34;13884:18;;;13877:62;-1:-1:-1;;;13955:18:48;;;13948:31;13996:19;;5290:92:43::1;13624:397:48::0;5290:92:43::1;-1:-1:-1::0;;;;;5401:28:43::1;5430:14;::::0;::::1;;5446:5:::0;5453:20:::1;;::::0;::::1;5430:1:::0;5453:20:::1;:::i;:::-;5475:1;:7;;;5401:82;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5393:122;;;::::0;-1:-1:-1;;;5393:122:43;;14974:2:48;5393:122:43::1;::::0;::::1;14956:21:48::0;15013:2;14993:18;;;14986:30;15052:29;15032:18;;;15025:57;15099:18;;5393:122:43::1;14772:351:48::0;5393:122:43::1;5526:21;5550:48;5585:9;;::::0;::::1;:1:::0;:9:::1;:::i;:::-;5550:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;5550:48:43;-1:-1:-1;5550:34:43::1;::::0;-1:-1:-1;;5550:48:43:i:1;:::-;5526:72;;5611:15;5630:30;5651:8;5630:20;:30::i;:::-;5608:52;;;5689:17;;5709:1;5689:21;;;;:::i;:::-;5678:7;:32;5670:66;;;::::0;-1:-1:-1;;;5670:66:43;;15330:2:48;5670:66:43::1;::::0;::::1;15312:21:48::0;15369:2;15349:18;;;15342:30;-1:-1:-1;;;15388:18:48;;;15381:51;15449:18;;5670:66:43::1;15128:345:48::0;5670:66:43::1;5798:19;5820:64;5856:8;5866:17;;5820:35;:64::i;:::-;5798:86;;5894:12;5909:13;:20;;;;;:::i;:::-;::::0;-1:-1:-1;5939:27:43::1;::::0;-1:-1:-1;5969:21:43::1;:6:::0;5939:27;5909:20;5969:12:::1;:21::i;:::-;5939:51;;6008:43;6021:14;6037:13;6008:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:43::i;:::-;6000:78;;;::::0;-1:-1:-1;;;6000:78:43;;15680:2:48;6000:78:43::1;::::0;::::1;15662:21:48::0;15719:2;15699:18;;;15692:30;-1:-1:-1;;;15738:18:48;;;15731:52;15800:18;;6000:78:43::1;15478:346:48::0;6000:78:43::1;6088:20;6111:52;6124:9;:4:::0;6131:2:::1;6124:9;:::i;:::-;6152;:4:::0;6159:2:::1;6152:9;:::i;:::-;6135:6;:13;:27;;;;:::i;:::-;6111:6:::0;;:52;:12:::1;:52::i;:::-;6088:75;;6205:35;6218:7;6227:12;6205:35;;;;;:::i;:::-;6197:69;;;::::0;-1:-1:-1;;;6197:69:43;;16164:2:48;6197:69:43::1;::::0;::::1;16146:21:48::0;16203:2;16183:18;;;16176:30;-1:-1:-1;;;16222:18:48;;;16215:51;16283:18;;6197:69:43::1;15962:345:48::0;6197:69:43::1;6277:17;6297:31;6321:6;6297:23;:31::i;:::-;6344:42;::::0;;16514:25:48;;;-1:-1:-1;;;;;16575:32:48;;16570:2;16555:18;;16548:60;6370:15:43::1;16624:18:48::0;;;16617:34;6344:42:43;;16575:32:48;;-1:-1:-1;6344:42:43::1;::::0;;;;;16502:2:48;6344:42:43;;::::1;6398:12;6416:9;-1:-1:-1::0;;;;;6416:14:43::1;1088:10;6416:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6397:60;;;6475:7;6467:35;;;::::0;-1:-1:-1;;;6467:35:43;;17074:2:48;6467:35:43::1;::::0;::::1;17056:21:48::0;17113:2;17093:18;;;17086:30;-1:-1:-1;;;17132:18:48;;;17125:45;17187:18;;6467:35:43::1;16872:339:48::0;6467:35:43::1;4403:2106;;;;;;;;;;4324:2185:::0;:::o;1680:168:24:-;1733:7;;1318:27;1784:25;1187:174;2041:247;2334:13:25;:11;:13::i;:::-;1318:27:24;2197:26;;-1:-1:-1;;;;;;2197:26:24::1;-1:-1:-1::0;;;;;2197:26:24;::::1;::::0;;::::1;::::0;;2263:7:::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;2238:43:24::1;;;;;;;;;;;2120:168;2041:247:::0;:::o;2658:162:25:-;966:10:27;2717:7:25;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:25;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:25;;966:10:27;2763:40:25;;;1717:51:48;1690:18;;2763:40:25;1571:203:48;2472:222:24;1318:27;2621:22;;-1:-1:-1;;;;;;2621:22:24;;;2653:34;2678:8;2653:24;:34::i;:::-;2544:150;2472:222;:::o;431:320:0:-;643:7;669:75;686:7;695:4;701:3;;706:4;;712:7;;721:8;669:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:73;:75::i;:::-;662:82;431:320;-1:-1:-1;;;;;;;;;;431:320:0:o;27793:991:1:-;27856:4;27872:22;27904:13;27954:17;27966:4;27954:11;:17::i;:::-;27928:43;;-1:-1:-1;27928:43:1;-1:-1:-1;28050:10:1;;;:43;;;-1:-1:-1;;28064:14:1;:29;28050:43;28046:86;;;-1:-1:-1;28116:5:1;;27793:991;-1:-1:-1;;;27793:991:1:o;28046:86::-;28142:15;28160:18;28164:14;28160:1;:18;:::i;:::-;28142:36;;28194:9;28189:492;28213:5;28209:1;:9;28189:492;;;28312:4;:11;28301:7;:22;28297:73;;-1:-1:-1;28350:5:1;;27793:991;-1:-1:-1;;;;;27793:991:1:o;28297:73::-;28445:16;28464:37;28487:4;28493:7;28464:22;:37::i;:::-;28445:56;;-1:-1:-1;;28519:8:1;:23;28515:74;;-1:-1:-1;28569:5:1;;27793:991;-1:-1:-1;;;;;;27793:991:1:o;28515:74::-;28651:19;28662:8;28651:19;;:::i;:::-;;-1:-1:-1;;28220:3:1;;28189:492;;;-1:-1:-1;28766:11:1;;28755:22;;;;;-1:-1:-1;;;27793:991:1:o;29056:1004::-;29121:4;29137:22;29169:14;29221:18;29233:5;29221:11;:18::i;:::-;29194:45;;-1:-1:-1;29194:45:1;-1:-1:-1;29319:11:1;;;:44;;;-1:-1:-1;;29334:14:1;:29;29319:44;29315:87;;;-1:-1:-1;29386:5:1;;29056:1004;-1:-1:-1;;;29056:1004:1:o;29315:87::-;29412:15;29430:18;29434:14;29430:1;:18;:::i;:::-;29412:36;;29464:9;29459:497;29483:6;29479:1;:10;29459:497;;;29583:5;:12;29572:7;:23;29568:74;;-1:-1:-1;29622:5:1;;29056:1004;-1:-1:-1;;;;;29056:1004:1:o;29568:74::-;29766:16;29785:39;29809:5;29816:7;29785:23;:39::i;:::-;29766:58;;-1:-1:-1;;29842:8:1;:23;29838:74;;-1:-1:-1;29892:5:1;;29056:1004;-1:-1:-1;;;;;;29056:1004:1:o;29838:74::-;29926:19;29937:8;29926:19;;:::i;:::-;;-1:-1:-1;;29491:3:1;;29459:497;;2414:123;2475:7;2484;2510:20;2524:2;2528:1;2510:13;:20::i;:::-;2503:27;;;;2414:123;;;:::o;1060:871:0:-;1147:4;1222:6;1232:1;1222:11;1218:54;;-1:-1:-1;1256:5:0;1249:12;;1218:54;1282:15;1317:9;1312:512;1336:6;1332:1;:10;1312:512;;;1436:8;:15;1425:7;:26;1421:77;;1478:5;1471:12;;;;;;1421:77;1573:16;1592:43;1617:8;1627:7;1592:24;:43::i;:::-;1573:62;;-1:-1:-1;;1653:8:0;:32;1649:83;;1712:5;1705:12;;;;;;;1649:83;1794:19;1805:8;1794:19;;:::i;:::-;;-1:-1:-1;;1344:3:0;;1312:512;;;-1:-1:-1;1909:15:0;;1898:26;;-1:-1:-1;1060:871:0;;;;;:::o;3420:579::-;3513:12;3537;3563:15;3598:10;3593:221;3619:6;3614:2;:11;3593:221;;;3655:43;3680:8;3690:7;3655:24;:43::i;:::-;3648:50;;-1:-1:-1;;3720:4:0;:28;3712:62;;;;-1:-1:-1;;;3712:62:0;;18276:2:48;3712:62:0;;;18258:21:48;18315:2;18295:18;;;18288:30;-1:-1:-1;;;18334:18:48;;;18327:51;18395:18;;3712:62:0;18074:345:48;3712:62:0;3788:15;3799:4;3788:15;;:::i;:::-;;-1:-1:-1;3627:5:0;;3593:221;;;;3831:43;3856:8;3866:7;3831:24;:43::i;:::-;3824:50;;-1:-1:-1;;3892:4:0;:28;3884:62;;;;-1:-1:-1;;;3884:62:0;;18276:2:48;3884:62:0;;;18258:21:48;18315:2;18295:18;;;18288:30;-1:-1:-1;;;18334:18:48;;;18327:51;18395:18;;3884:62:0;18074:345:48;3884:62:0;3963:29;:8;3978:7;3987:4;3963:14;:29::i;:::-;3956:36;3420:579;-1:-1:-1;;;;;3420:579:0:o;4360:974::-;4454:12;4478:22;4510:15;4572:30;4593:8;4572:20;:30::i;:::-;4544:58;;-1:-1:-1;4544:58:0;-1:-1:-1;4620:38:0;;;4612:85;;;;-1:-1:-1;;;4612:85:0;;18626:2:48;4612:85:0;;;18608:21:48;18665:2;18645:18;;;18638:30;18704:34;18684:18;;;18677:62;-1:-1:-1;;;18755:18:48;;;18748:32;18797:19;;4612:85:0;18424:398:48;4612:85:0;4724:7;4715:6;:16;4707:45;;;;-1:-1:-1;;;4707:45:0;;19029:2:48;4707:45:0;;;19011:21:48;19068:2;19048:18;;;19041:30;-1:-1:-1;;;19087:18:48;;;19080:46;19143:18;;4707:45:0;18827:340:48;4707:45:0;4763:16;;4811:18;4815:14;4811:1;:18;:::i;:::-;4793:36;;4845:9;4840:263;4864:6;4860:1;:10;4840:263;;;4920:41;4943:8;4953:7;4920:22;:41::i;:::-;4891:70;;-1:-1:-1;4891:70:0;-1:-1:-1;4983:32:0;;;4975:63;;;;-1:-1:-1;;;4975:63:0;;19374:2:48;4975:63:0;;;19356:21:48;19413:2;19393:18;;;19386:30;-1:-1:-1;;;19432:18:48;;;19425:48;19490:18;;4975:63:0;19172:342:48;4975:63:0;5084:8;5063:18;5067:14;5063:1;:18;:::i;:::-;:29;;;;:::i;:::-;5052:40;;;;:::i;:::-;;-1:-1:-1;4872:3:0;;4840:263;;;;5142:41;5165:8;5175:7;5142:22;:41::i;:::-;5113:70;;-1:-1:-1;5113:70:0;-1:-1:-1;5201:32:0;;;5193:63;;;;-1:-1:-1;;;5193:63:0;;19374:2:48;5193:63:0;;;19356:21:48;19413:2;19393:18;;;19386:30;-1:-1:-1;;;19432:18:48;;;19425:48;19490:18;;5193:63:0;19172:342:48;5193:63:0;5273:54;5288:7;5297:25;5308:14;5297:8;:25;:::i;:::-;:29;;5325:1;5297:29;:::i;:::-;5273:8;;:54;:14;:54::i;:::-;5266:61;4360:974;-1:-1:-1;;;;;;;4360:974:0:o;10344:924:2:-;10431:16;10463:7;10474:1;10463:12;10459:55;;-1:-1:-1;10491:12:2;;;;;;;;;-1:-1:-1;10491:12:2;;;;10459:55;10523:9;10535:16;10544:7;10535:6;:16;:::i;:::-;10523:28;;10576:6;10569:4;:13;:38;;;;;10603:4;10586:6;:13;:21;;10569:38;10561:70;;;;-1:-1:-1;;;10561:70:2;;19721:2:48;10561:70:2;;;19703:21:48;19760:2;19740:18;;;19733:30;-1:-1:-1;;;19779:18:48;;;19772:49;19838:18;;10561:70:2;19519:343:48;10561:70:2;10768:4;10762:11;10755:18;;10817:7;10812:2;10807:3;10803:12;10799:26;10793:4;10786:40;10851:7;10846:3;10839:20;10978:6;10970;10966:19;10961:3;10957:29;11054:6;11049:2;11041:6;11037:15;11033:28;11098:7;11093:3;11089:17;11000:252;11129:3;11124;11121:12;11000:252;;;11233:3;11227:10;11220:4;11215:3;11211:14;11204:34;11168:2;11163:3;11159:12;11152:19;;11000:252;;;11004:116;;;10651:611;10344:924;;;;;;:::o;8474:774:43:-;8588:8;;8617;;8551:11;;8588:8;8610:15;;8606:58;;8648:5;8641:12;;;;;8606:58;8691:2;8674:14;;8751:289;8768:3;8758:6;:13;8751:289;;-1:-1:-1;;8830:14:43;;;8824:21;8879:14;;;8873:21;8933:2;8921:15;;;;8967:16;;;8963:67;;9010:5;9003:12;;;;;;;;8963:67;8751:289;;;9097:6;9106:11;9115:2;9106:6;:11;:::i;:::-;9097:20;;9092:128;9123:3;9119:1;:7;9092:128;;;9159:1;9161;9159:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;9151:12:43;;:1;9153;9151:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;9151:4:43;:12;9147:63;;9190:5;9183:12;;;;;;;;;9147:63;9128:3;;9092:128;;;-1:-1:-1;9237:4:43;;8474:774;-1:-1:-1;;;;;;;8474:774:43:o;9254:241::-;9332:7;9351:14;9368:13;:20;;;;;:::i;:::-;;-1:-1:-1;9398:13:43;;-1:-1:-1;9422:25:43;:7;9368:20;9444:2;9422:13;:25::i;:::-;9414:34;;;:::i;:::-;9473:14;;;9254:241;-1:-1:-1;;;;9254:241:43:o;3774:248:25:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:25;;-1:-1:-1;;;;;3941:19:25;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;9609:335:1:-;9670:11;9835:2;9829:4;9824:2;9818:9;9813:2;9809;9805:11;9802:1;9795:5;9784:54;9780:59;9893:2;9887:4;9883:2;9877:4;9874:1;9867:5;9856:40;-1:-1:-1;;9923:4:1;9917:11;;9609:335;-1:-1:-1;9609:335:1:o;14980:394::-;15069:7;15088:22;15120:21;15185:34;15207:6;15215:3;15185:21;:34::i;:::-;15151:68;;-1:-1:-1;15151:68:1;-1:-1:-1;15233:29:1;;;15229:78;;-1:-1:-1;;15278:18:1;;;;;;15229:78;15350:13;15324:23;15333:14;15324:6;:23;:::i;:::-;:39;;;;:::i;:::-;:43;;15366:1;15324:43;:::i;20911:536::-;21002:7;21042;21046:3;21042:1;:7;:::i;:::-;21025;:14;:24;21021:73;;;-1:-1:-1;;;21065:18:1;;21021:73;21103:22;;21212:31;21226:7;21235;21239:3;21235:1;:7;:::i;:::-;21212:13;:31::i;:::-;21172:71;;-1:-1:-1;21172:71:1;-1:-1:-1;21258:29:1;;;21254:78;;-1:-1:-1;;21303:18:1;;;;;;21254:78;21421:19;21396:22;21404:14;21396:5;:22;:::i;:::-;:44;;;;:::i;2999:704::-;3075:7;3084;3103:14;3120:36;3148:2;3152:3;3120:27;:36::i;:::-;3103:53;;3171:8;:13;;3183:1;3171:13;3167:70;;3208:1;3217:2;3220:3;3217:7;;;;;;;;:::i;:::-;;;;;3200:26;;-1:-1:-1;3217:7:1;;;-1:-1:-1;3200:26:1;;-1:-1:-1;3200:26:1;3167:70;3277:3;3262:12;3266:8;3262:1;:12;:::i;:::-;:18;;;;;;:::i;:::-;3250:2;:9;:30;3246:84;;;-1:-1:-1;;3317:1:1;3296:23;;;;;;;3246:84;3339:15;3368:8;:13;;3380:1;3368:13;3364:297;;3407:41;3428:18;3438:7;3442:3;3438:1;:7;:::i;:::-;3428:2;;:9;:18::i;:::-;7042:7;;;;;;7054;;;;;7041:21;;6959:110;3407:41;3397:51;;;;3364:297;;;3469:8;:13;;3481:1;3469:13;3465:196;;3508:41;3529:18;3539:7;3543:3;3539:1;:7;:::i;3529:18::-;6397:21;;;;;;6402:10;6360:6;;;;;6359:21;;;;6358:61;6485:2;6480:7;;;6468;;;6467:21;;6238:257;3508:41;3498:51;;;;3465:196;;;3570:8;:13;;3582:1;3570:13;3566:95;;3609:41;3630:18;3640:7;3644:3;3640:1;:7;:::i;3630:18::-;3623:26;;5965:22;5866:1;5793:6;;;5965:22;;;;5838:29;;;;5965:22;;;;5992:2;5964:30;;;5838:29;6056:7;5843:18;5792:29;;;;5838;;;;5791:77;;;;5918:7;;;5969:18;5917:30;6056:7;6061:2;6044:7;;;6056;;;6043:21;;5671:400;3609:41;3599:51;;;;3566:95;3670:26;;;;;-1:-1:-1;3688:7:1;-1:-1:-1;2999:704:1;;;;;;:::o;2254:783:0:-;2347:7;2366:22;2398:20;2470:37;2493:8;2503:3;2470:22;:37::i;:::-;2437:70;;-1:-1:-1;2437:70:0;-1:-1:-1;2521:38:0;;;2517:96;;-1:-1:-1;;2575:27:0;;;;;;2517:96;2623:16;;2667:18;2671:14;2667:1;:18;:::i;:::-;2649:36;;2701:9;2696:310;2720:12;2716:1;:16;2696:310;;;2782:47;2805:8;2815:13;2821:7;2815:3;:13;:::i;2782:47::-;2753:76;;-1:-1:-1;2753:76:0;-1:-1:-1;2847:32:0;;;2843:98;;-1:-1:-1;;2899:27:0;;;;;;;;;2843:98;2987:8;2966:18;2970:14;2966:1;:18;:::i;:::-;:29;;;;:::i;:::-;2955:40;;;;:::i;:::-;;-1:-1:-1;2734:3:0;;2696:310;;;-1:-1:-1;3023:7:0;2254:783;-1:-1:-1;;;;;;2254:783:0:o;13785:388:1:-;13873:7;;13921:8;13926:3;13921:2;:8;:::i;:::-;13905:6;:13;:24;13901:78;;;-1:-1:-1;;;654:66:1;-1:-1:-1;13966:1:1;13945:23;;13901:78;13989:22;;14086:31;14100:6;14108:8;:3;14114:2;14108:8;:::i;14086:31::-;14052:65;;;;-1:-1:-1;13785:388:1;-1:-1:-1;;;;;13785:388:1:o;1550:446::-;1640:5;1667:2;1670:3;1667:7;;;;;;;;:::i;:::-;;;;;;;1661:14;:22;1657:93;;-1:-1:-1;1706:1:1;1699:8;;1657:93;1769:2;1772:3;1769:7;;;;;;;;:::i;:::-;;;;;;;1781:4;1763:22;1759:93;;-1:-1:-1;1808:1:1;1801:8;;1759:93;1871:2;1874:3;1871:7;;;;;;;;:::i;:::-;;;;;;;1883:4;1865:22;1861:93;;-1:-1:-1;1910:1:1;1903:8;;1861:93;-1:-1:-1;1971:1:1;1550:446;;;;:::o;13493:136:2:-;13566:6;13598:23;13606:6;13614;12550:28;12566:2;12550:28;12544:35;;12417:178;206:347:48;257:8;267:6;321:3;314:4;306:6;302:17;298:27;288:55;;339:1;336;329:12;288:55;-1:-1:-1;362:20:48;;405:18;394:30;;391:50;;;437:1;434;427:12;391:50;474:4;466:6;462:17;450:29;;526:3;519:4;510:6;502;498:19;494:30;491:39;488:59;;;543:1;540;533:12;558:826;657:6;665;673;681;689;742:2;730:9;721:7;717:23;713:32;710:52;;;758:1;755;748:12;710:52;798:9;785:23;831:18;823:6;820:30;817:50;;;863:1;860;853:12;817:50;902:58;952:7;943:6;932:9;928:22;902:58;:::i;:::-;979:8;;-1:-1:-1;876:84:48;-1:-1:-1;;1067:2:48;1052:18;;1039:32;1096:18;1083:32;;1080:52;;;1128:1;1125;1118:12;1080:52;1167:60;1219:7;1208:8;1197:9;1193:24;1167:60;:::i;:::-;558:826;;;;-1:-1:-1;1246:8:48;1350:2;1335:18;1322:32;;558:826;-1:-1:-1;;;;558:826:48:o;1779:610::-;1865:6;1873;1926:2;1914:9;1905:7;1901:23;1897:32;1894:52;;;1942:1;1939;1932:12;1894:52;1982:9;1969:23;2015:18;2007:6;2004:30;2001:50;;;2047:1;2044;2037:12;2001:50;2070:22;;2123:4;2115:13;;2111:27;-1:-1:-1;2101:55:48;;2152:1;2149;2142:12;2101:55;2192:2;2179:16;2218:18;2210:6;2207:30;2204:50;;;2250:1;2247;2240:12;2204:50;2303:7;2298:2;2288:6;2285:1;2281:14;2277:2;2273:23;2269:32;2266:45;2263:65;;;2324:1;2321;2314:12;2263:65;2355:2;2347:11;;;;;2377:6;;-1:-1:-1;1779:610:48;-1:-1:-1;;;1779:610:48:o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:48;;2394:180;-1:-1:-1;2394:180:48:o;2579:525::-;2726:2;2715:9;2708:21;2689:4;2758:6;2752:13;2801:6;2796:2;2785:9;2781:18;2774:34;2826:1;2836:140;2850:6;2847:1;2844:13;2836:140;;;2961:2;2945:14;;;2941:23;;2935:30;2930:2;2911:17;;;2907:26;2900:66;2865:10;2836:140;;;2840:3;3025:1;3020:2;3011:6;3000:9;2996:22;2992:31;2985:42;3095:2;3088;3084:7;3079:2;3071:6;3067:15;3063:29;3052:9;3048:45;3044:54;3036:62;;;2579:525;;;;:::o;3109:286::-;3168:6;3221:2;3209:9;3200:7;3196:23;3192:32;3189:52;;;3237:1;3234;3227:12;3189:52;3263:23;;-1:-1:-1;;;;;3315:31:48;;3305:42;;3295:70;;3361:1;3358;3351:12;3813:394;3906:6;3959:2;3947:9;3938:7;3934:23;3930:32;3927:52;;;3975:1;3972;3965:12;3927:52;4015:9;4002:23;4048:18;4040:6;4037:30;4034:50;;;4080:1;4077;4070:12;4034:50;4103:22;;4159:3;4141:16;;;4137:26;4134:46;;;4176:1;4173;4166:12;5882:127;5943:10;5938:3;5934:20;5931:1;5924:31;5974:4;5971:1;5964:15;5998:4;5995:1;5988:15;6014:380;6093:1;6089:12;;;;6136;;;6157:61;;6211:4;6203:6;6199:17;6189:27;;6157:61;6264:2;6256:6;6253:14;6233:18;6230:38;6227:161;;6310:10;6305:3;6301:20;6298:1;6291:31;6345:4;6342:1;6335:15;6373:4;6370:1;6363:15;6227:161;;6014:380;;;:::o;6524:517::-;6625:2;6620:3;6617:11;6614:421;;;6661:5;6658:1;6651:16;6705:4;6702:1;6692:18;6775:2;6763:10;6759:19;6756:1;6752:27;6746:4;6742:38;6811:4;6799:10;6796:20;6793:47;;;-1:-1:-1;6834:4:48;6793:47;6889:2;6884:3;6880:12;6877:1;6873:20;6867:4;6863:31;6853:41;;6944:81;6962:2;6955:5;6952:13;6944:81;;;7021:1;7007:16;;6988:1;6977:13;6944:81;;;6948:3;;6614:421;6524:517;;;:::o;7217:1202::-;7339:18;7334:3;7331:27;7328:53;;;7361:18;;:::i;:::-;7390:93;7479:3;7439:38;7471:4;7465:11;7439:38;:::i;:::-;7433:4;7390:93;:::i;:::-;7509:1;7534:2;7529:3;7526:11;7551:1;7546:615;;;;8205:1;8222:3;8219:93;;;-1:-1:-1;8278:19:48;;;8265:33;8219:93;-1:-1:-1;;7174:1:48;7170:11;;;7166:24;7162:29;7152:40;7198:1;7194:11;;;7149:57;8325:78;;7519:894;;7546:615;6471:1;6464:14;;;6508:4;6495:18;;-1:-1:-1;;7582:17:48;;;7682:9;7704:229;7718:7;7715:1;7712:14;7704:229;;;7807:19;;;7794:33;7779:49;;7914:4;7899:20;;;;7867:1;7855:14;;;;7734:12;7704:229;;;7708:3;7961;7952:7;7949:16;7946:159;;;8085:1;8081:6;8075:3;8069;8066:1;8062:11;8058:21;8054:34;8050:39;8037:9;8032:3;8028:19;8015:33;8011:79;8003:6;7996:95;7946:159;;;8148:1;8142:3;8139:1;8135:11;8131:19;8125:4;8118:33;7519:894;;7217:1202;;;:::o;8729:266::-;8817:6;8812:3;8805:19;8869:6;8862:5;8855:4;8850:3;8846:14;8833:43;-1:-1:-1;8921:1:48;8896:16;;;8914:4;8892:27;;;8885:38;;;;8977:2;8956:15;;;-1:-1:-1;;8952:29:48;8943:39;;;8939:50;;8729:266::o;9000:502::-;9241:2;9230:9;9223:21;9204:4;9267:61;9324:2;9313:9;9309:18;9301:6;9293;9267:61;:::i;:::-;9376:9;9368:6;9364:22;9359:2;9348:9;9344:18;9337:50;9404:49;9446:6;9438;9430;9404:49;:::i;:::-;9396:57;;;9489:6;9484:2;9473:9;9469:18;9462:34;9000:502;;;;;;;;:::o;9507:127::-;9568:10;9563:3;9559:20;9556:1;9549:31;9599:4;9596:1;9589:15;9623:4;9620:1;9613:15;9639:168;9712:9;;;9743;;9760:15;;;9754:22;;9740:37;9730:71;;9781:18;;:::i;10164:127::-;10225:10;10220:3;10216:20;10213:1;10206:31;10256:4;10253:1;10246:15;10280:4;10277:1;10270:15;10296:125;10361:9;;;10382:10;;;10379:36;;;10395:18;;:::i;11105:286::-;11163:6;11216:2;11204:9;11195:7;11191:23;11187:32;11184:52;;;11232:1;11229;11222:12;11184:52;11258:23;;-1:-1:-1;;;;;;11310:32:48;;11300:43;;11290:71;;11357:1;11354;11347:12;11396:281;11454:6;11507:2;11495:9;11486:7;11482:23;11478:32;11475:52;;;11523:1;11520;11513:12;11475:52;11549:23;;-1:-1:-1;;;;;;11601:27:48;;11591:38;;11581:66;;11643:1;11640;11633:12;11682:521;11759:4;11765:6;11825:11;11812:25;11919:2;11915:7;11904:8;11888:14;11884:29;11880:43;11860:18;11856:68;11846:96;;11938:1;11935;11928:12;11846:96;11965:33;;12017:20;;;-1:-1:-1;12060:18:48;12049:30;;12046:50;;;12092:1;12089;12082:12;12046:50;12125:4;12113:17;;-1:-1:-1;12156:14:48;12152:27;;;12142:38;;12139:58;;;12193:1;12190;12183:12;14026:459;14267:6;14256:9;14249:25;14310:6;14305:2;14294:9;14290:18;14283:34;14353:3;14348:2;14337:9;14333:18;14326:31;14230:4;14374:62;14431:3;14420:9;14416:19;14408:6;14400;14374:62;:::i;:::-;14366:70;;14472:6;14467:2;14456:9;14452:18;14445:34;14026:459;;;;;;;;:::o;14490:277::-;14557:6;14610:2;14598:9;14589:7;14585:23;14581:32;14578:52;;;14626:1;14623;14616:12;14578:52;14658:9;14652:16;14711:5;14704:13;14697:21;14690:5;14687:32;14677:60;;14733:1;14730;14723:12;15829:128;15896:9;;;15917:11;;;15914:37;;;15931:18;;:::i;17216:853::-;-1:-1:-1;;;;;;17575:33:48;;17563:46;;-1:-1:-1;;;;;;17638:28:48;;17634:1;17625:11;;17618:49;17710:6;17702;17698:1;17689:11;;17676:41;17545:3;17745:6;17740:3;17736:16;17779:1;17775:2;17771:10;17801:1;17797:2;17790:13;17837:6;17829;17825:2;17812:32;-1:-1:-1;17906:1:48;17867:15;;;17884:1;17863:23;17895:13;;;17942:6;17934;17863:23;17917:32;-1:-1:-1;;;;;;18003:33:48;;;;17968:15;;;;17992:45;;;-1:-1:-1;18061:1:48;18053:10;;17216:853;-1:-1:-1;;;;;;;;17216:853:48:o;19867:412::-;19985:12;;20033:4;20022:16;;20016:23;-1:-1:-1;;20057:40:48;;;19985:12;20120:2;20109:14;;20106:167;;;20235:26;20231:31;20200:26;20196:31;20186:6;20182:2;20178:15;20175:1;20171:23;20167:61;20163:2;20159:70;20155:108;20146:117;;20106:167;;;19867:412;;;:::o;20284:148::-;20372:4;20351:12;;;20365;;;20347:31;;20390:13;;20387:39;;;20406:18;;:::i","linkReferences":{}},"methodIdentifiers":{"DEPOSIT_AMOUNT()":"ec6925a7","LIGHT_CLIENT()":"e613ae00","SYSTEM_CALLER()":"d761753e","acceptOwnership()":"79ba5097","batchWithdraw(bytes32[])":"59c19cee","deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":"dd95c7c6","depositScript()":"b93780f6","getWithdrawalCount()":"781952a8","initialize(bytes,bytes,uint256)":"41260137","initialized()":"158ef93e","operator()":"570ca735","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","requiredSigsCount()":"43e31687","scriptSuffix()":"87f8bf56","setDepositScript(bytes,bytes,uint256)":"9f963f59","setOperator(address)":"b3ab15fb","spentWtxIds(bytes32)":"5e0e5b3e","transferOwnership(address)":"f2fde38b","withdraw(bytes32)":"8e19899e","withdrawalAddrs(uint256)":"d1c44456"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wtxId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"depositScript\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"scriptSuffix\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredSigsCount\",\"type\":\"uint256\"}],\"name\":\"DepositScriptUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"OperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bitcoin_address\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIGHT_CLIENT\",\"outputs\":[{\"internalType\":\"contract BitcoinLightClient\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CALLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"bitcoin_addresses\",\"type\":\"bytes32[]\"}],\"name\":\"batchWithdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes2\",\"name\":\"flag\",\"type\":\"bytes2\"},{\"internalType\":\"bytes\",\"name\":\"vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"witness\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"intermediate_nodes\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"block_height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct Bridge.DepositParams\",\"name\":\"p\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositScript\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_depositScript\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_scriptSuffix\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_requiredSigsCount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requiredSigsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scriptSuffix\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_depositScript\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_scriptSuffix\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_requiredSigsCount\",\"type\":\"uint256\"}],\"name\":\"setDepositScript\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"spentWtxIds\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bitcoin_address\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdrawalAddrs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Citrea\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"batchWithdraw(bytes32[])\":{\"details\":\"Takes in multiple Bitcoin addresses as recipient addresses should be unique\",\"params\":{\"bitcoin_addresses\":\"The Bitcoin addresses of the receivers\"}},\"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"params\":{\"p\":\"The deposit parameters that contains the info of the deposit transaction on Bitcoin\"}},\"getWithdrawalCount()\":{\"returns\":{\"_0\":\"The count of withdrawals happened so far\"}},\"initialize(bytes,bytes,uint256)\":{\"params\":{\"_depositScript\":\"The deposit script expected in the witness field for all L1 deposits\",\"_requiredSigsCount\":\"The number of signatures that is contained in the deposit script\",\"_scriptSuffix\":\"The suffix of the deposit script that follows the receiver address\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDepositScript(bytes,bytes,uint256)\":{\"details\":\"Deposit script contains a fixed script that checks signatures of verifiers and pushes EVM address of the receiver\",\"params\":{\"_depositScript\":\"The new deposit script\",\"_requiredSigsCount\":\"The number of signatures that are needed for deposit transaction\",\"_scriptSuffix\":\"The part of the deposit script that succeeds the receiver address\"}},\"setOperator(address)\":{\"params\":{\"_operator\":\"Address of the privileged operator\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"withdraw(bytes32)\":{\"params\":{\"bitcoin_address\":\"The Bitcoin address of the receiver\"}}},\"title\":\"Bridge contract for the Citrea end of Citrea <> Bitcoin bridge\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"batchWithdraw(bytes32[])\":{\"notice\":\"Batch version of `withdraw` that can accept multiple cBTC\"},\"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"notice\":\"Checks if the deposit amount is sent to the bridge multisig on Bitcoin, and if so, sends the deposit amount to the receiver\"},\"initialize(bytes,bytes,uint256)\":{\"notice\":\"Initializes the bridge contract and sets the deposit script\"},\"setDepositScript(bytes,bytes,uint256)\":{\"notice\":\"Sets the expected deposit script of the deposit transaction on Bitcoin, contained in the witness\"},\"setOperator(address)\":{\"notice\":\"Sets the operator address that can process user deposits\"},\"withdraw(bytes32)\":{\"notice\":\"Accepts 1 cBTC from the sender and inserts this withdrawal request of 1 BTC on Bitcoin into the withdrawals array so that later on can be processed by the operator \"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Bridge.sol\":\"Bridge\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/WitnessUtils.sol\":{\"keccak256\":\"0x0b0d59b4e73d6f5b4bbf1032f72bb15c2f1548c2ee319b80ae9e4c22576a70af\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://8499a5fc520941cb1b970637850cabfbc2d5a51abed824886063420c686b57de\",\"dweb:/ipfs/QmaLYLJ36PyFAaP3MgvFWW3knDsSUtVfCfs7Lp7oYFPZ1w\"]},\"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol\":{\"keccak256\":\"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc\",\"urls\":[\"bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667\",\"dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH\"]},\"lib/bitcoin-spv/solidity/contracts/BytesLib.sol\":{\"keccak256\":\"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1\",\"urls\":[\"bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6\",\"dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT\"]},\"lib/bitcoin-spv/solidity/contracts/SafeMath.sol\":{\"keccak256\":\"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3\",\"urls\":[\"bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b\",\"dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe\"]},\"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol\":{\"keccak256\":\"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b\",\"urls\":[\"bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a\",\"dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7\",\"dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"src/BitcoinLightClient.sol\":{\"keccak256\":\"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7\",\"dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf\"]},\"src/Bridge.sol\":{\"keccak256\":\"0xe7d77b56775f141e42494ddcb6d242d3199bdabb09078e076ba0053f953c43a9\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://62ed60e2acb1a2d3862c3b252b62f277eef1634f11b0e8b50cff6449c8ed8bcc\",\"dweb:/ipfs/Qmeu6q5ddpxj9qUx75vXe7R5p8QEr9oEo8kCtduNk5fng3\"]},\"src/interfaces/IBitcoinLightClient.sol\":{\"keccak256\":\"0x7b7bce470657991ad77890c0f9a3e01570279e6143038ed1b6f82f783feea33a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c1a77b309c61d34eb39b8a77fd5a5f8c154e50fd60db3007f5049d6b06b650\",\"dweb:/ipfs/QmdHbULcAzZtD7u55bkQ8D9FEPMRvy1jgwNC3pFxHtiUfL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"bytes32","name":"wtxId","type":"bytes32","indexed":false},{"internalType":"address","name":"recipient","type":"address","indexed":false},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"bytes","name":"depositScript","type":"bytes","indexed":false},{"internalType":"bytes","name":"scriptSuffix","type":"bytes","indexed":false},{"internalType":"uint256","name":"requiredSigsCount","type":"uint256","indexed":false}],"type":"event","name":"DepositScriptUpdate","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"oldOperator","type":"address","indexed":false},{"internalType":"address","name":"newOperator","type":"address","indexed":false}],"type":"event","name":"OperatorUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferStarted","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bitcoin_address","type":"bytes32","indexed":false},{"internalType":"uint256","name":"index","type":"uint256","indexed":false},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEPOSIT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"LIGHT_CLIENT","outputs":[{"internalType":"contract BitcoinLightClient","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CALLER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptOwnership"},{"inputs":[{"internalType":"bytes32[]","name":"bitcoin_addresses","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"batchWithdraw"},{"inputs":[{"internalType":"struct Bridge.DepositParams","name":"p","type":"tuple","components":[{"internalType":"bytes4","name":"version","type":"bytes4"},{"internalType":"bytes2","name":"flag","type":"bytes2"},{"internalType":"bytes","name":"vin","type":"bytes"},{"internalType":"bytes","name":"vout","type":"bytes"},{"internalType":"bytes","name":"witness","type":"bytes"},{"internalType":"bytes4","name":"locktime","type":"bytes4"},{"internalType":"bytes","name":"intermediate_nodes","type":"bytes"},{"internalType":"uint256","name":"block_height","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[],"stateMutability":"view","type":"function","name":"depositScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"_depositScript","type":"bytes"},{"internalType":"bytes","name":"_scriptSuffix","type":"bytes"},{"internalType":"uint256","name":"_requiredSigsCount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"requiredSigsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"scriptSuffix","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"bytes","name":"_depositScript","type":"bytes"},{"internalType":"bytes","name":"_scriptSuffix","type":"bytes"},{"internalType":"uint256","name":"_requiredSigsCount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setDepositScript"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOperator"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"spentWtxIds","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"bitcoin_address","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawalAddrs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"batchWithdraw(bytes32[])":{"details":"Takes in multiple Bitcoin addresses as recipient addresses should be unique","params":{"bitcoin_addresses":"The Bitcoin addresses of the receivers"}},"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"params":{"p":"The deposit parameters that contains the info of the deposit transaction on Bitcoin"}},"getWithdrawalCount()":{"returns":{"_0":"The count of withdrawals happened so far"}},"initialize(bytes,bytes,uint256)":{"params":{"_depositScript":"The deposit script expected in the witness field for all L1 deposits","_requiredSigsCount":"The number of signatures that is contained in the deposit script","_scriptSuffix":"The suffix of the deposit script that follows the receiver address"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setDepositScript(bytes,bytes,uint256)":{"details":"Deposit script contains a fixed script that checks signatures of verifiers and pushes EVM address of the receiver","params":{"_depositScript":"The new deposit script","_requiredSigsCount":"The number of signatures that are needed for deposit transaction","_scriptSuffix":"The part of the deposit script that succeeds the receiver address"}},"setOperator(address)":{"params":{"_operator":"Address of the privileged operator"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"withdraw(bytes32)":{"params":{"bitcoin_address":"The Bitcoin address of the receiver"}}},"version":1},"userdoc":{"kind":"user","methods":{"batchWithdraw(bytes32[])":{"notice":"Batch version of `withdraw` that can accept multiple cBTC"},"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"notice":"Checks if the deposit amount is sent to the bridge multisig on Bitcoin, and if so, sends the deposit amount to the receiver"},"initialize(bytes,bytes,uint256)":{"notice":"Initializes the bridge contract and sets the deposit script"},"setDepositScript(bytes,bytes,uint256)":{"notice":"Sets the expected deposit script of the deposit transaction on Bitcoin, contained in the witness"},"setOperator(address)":{"notice":"Sets the operator address that can process user deposits"},"withdraw(bytes32)":{"notice":"Accepts 1 cBTC from the sender and inserts this withdrawal request of 1 BTC on Bitcoin into the withdrawals array so that later on can be processed by the operator "}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Bridge.sol":"Bridge"},"evmVersion":"paris","libraries":{}},"sources":{"lib/WitnessUtils.sol":{"keccak256":"0x0b0d59b4e73d6f5b4bbf1032f72bb15c2f1548c2ee319b80ae9e4c22576a70af","urls":["bzz-raw://8499a5fc520941cb1b970637850cabfbc2d5a51abed824886063420c686b57de","dweb:/ipfs/QmaLYLJ36PyFAaP3MgvFWW3knDsSUtVfCfs7Lp7oYFPZ1w"],"license":"LGPL-3.0-or-later"},"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol":{"keccak256":"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc","urls":["bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667","dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH"],"license":null},"lib/bitcoin-spv/solidity/contracts/BytesLib.sol":{"keccak256":"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1","urls":["bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6","dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT"],"license":null},"lib/bitcoin-spv/solidity/contracts/SafeMath.sol":{"keccak256":"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3","urls":["bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b","dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe"],"license":null},"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol":{"keccak256":"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b","urls":["bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a","dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J"],"license":null},"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"keccak256":"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f","urls":["bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7","dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"src/BitcoinLightClient.sol":{"keccak256":"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c","urls":["bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7","dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf"],"license":"MIT"},"src/Bridge.sol":{"keccak256":"0xe7d77b56775f141e42494ddcb6d242d3199bdabb09078e076ba0053f953c43a9","urls":["bzz-raw://62ed60e2acb1a2d3862c3b252b62f277eef1634f11b0e8b50cff6449c8ed8bcc","dweb:/ipfs/Qmeu6q5ddpxj9qUx75vXe7R5p8QEr9oEo8kCtduNk5fng3"],"license":"UNLICENSED"},"src/interfaces/IBitcoinLightClient.sol":{"keccak256":"0x7b7bce470657991ad77890c0f9a3e01570279e6143038ed1b6f82f783feea33a","urls":["bzz-raw://52c1a77b309c61d34eb39b8a77fd5a5f8c154e50fd60db3007f5049d6b06b650","dweb:/ipfs/QmdHbULcAzZtD7u55bkQ8D9FEPMRvy1jgwNC3pFxHtiUfL"],"license":"MIT"}},"version":1},"id":43} \ No newline at end of file +{"abi":[{"type":"function","name":"LIGHT_CLIENT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract BitcoinLightClient"}],"stateMutability":"view"},{"type":"function","name":"SYSTEM_CALLER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchWithdraw","inputs":[{"name":"txIds","type":"bytes32[]","internalType":"bytes32[]"},{"name":"outputIds","type":"bytes4[]","internalType":"bytes4[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"declareWithdrawFiller","inputs":[{"name":"withdrawTp","type":"tuple","internalType":"struct Bridge.TransactionParams","components":[{"name":"version","type":"bytes4","internalType":"bytes4"},{"name":"flag","type":"bytes2","internalType":"bytes2"},{"name":"vin","type":"bytes","internalType":"bytes"},{"name":"vout","type":"bytes","internalType":"bytes"},{"name":"witness","type":"bytes","internalType":"bytes"},{"name":"locktime","type":"bytes4","internalType":"bytes4"},{"name":"intermediate_nodes","type":"bytes","internalType":"bytes"},{"name":"block_height","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"name":"inputIndex","type":"uint256","internalType":"uint256"},{"name":"withdrawId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"moveTp","type":"tuple","internalType":"struct Bridge.TransactionParams","components":[{"name":"version","type":"bytes4","internalType":"bytes4"},{"name":"flag","type":"bytes2","internalType":"bytes2"},{"name":"vin","type":"bytes","internalType":"bytes"},{"name":"vout","type":"bytes","internalType":"bytes"},{"name":"witness","type":"bytes","internalType":"bytes"},{"name":"locktime","type":"bytes4","internalType":"bytes4"},{"name":"intermediate_nodes","type":"bytes","internalType":"bytes"},{"name":"block_height","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawalCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_scriptPrefix","type":"bytes","internalType":"bytes"},{"name":"_scriptSuffix","type":"bytes","internalType":"bytes"},{"name":"_depositAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperatorMalicious","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"markMaliciousOperator","inputs":[{"name":"slashOrTakeTp","type":"tuple","internalType":"struct Bridge.TransactionParams","components":[{"name":"version","type":"bytes4","internalType":"bytes4"},{"name":"flag","type":"bytes2","internalType":"bytes2"},{"name":"vin","type":"bytes","internalType":"bytes"},{"name":"vout","type":"bytes","internalType":"bytes"},{"name":"witness","type":"bytes","internalType":"bytes"},{"name":"locktime","type":"bytes4","internalType":"bytes4"},{"name":"intermediate_nodes","type":"bytes","internalType":"bytes"},{"name":"block_height","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"operator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"scriptPrefix","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"scriptSuffix","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"setDepositScript","inputs":[{"name":"_scriptPrefix","type":"bytes","internalType":"bytes"},{"name":"_scriptSuffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperator","inputs":[{"name":"_operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSlashOrTakeScript","inputs":[{"name":"_slashOrTakeScript","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slashOrTakeScript","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"txIdToDepositId","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"txId","type":"bytes32","internalType":"bytes32"},{"name":"outputId","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdrawFillers","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdrawalUTXOs","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"txId","type":"bytes32","internalType":"bytes32"},{"name":"outputId","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"event","name":"Deposit","inputs":[{"name":"wtxId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"txId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"recipient","type":"address","indexed":false,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"depositId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositScriptUpdate","inputs":[{"name":"scriptPrefix","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"scriptSuffix","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"MaliciousOperatorMarked","inputs":[{"name":"operatorId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OperatorUpdated","inputs":[{"name":"oldOperator","type":"address","indexed":false,"internalType":"address"},{"name":"newOperator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SlashOrTakeScriptUpdate","inputs":[{"name":"slashOrTakeScript","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"WithdrawFillerDeclared","inputs":[{"name":"withdrawId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"withdrawFillerId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"utxo","type":"tuple","indexed":false,"internalType":"struct Bridge.UTXO","components":[{"name":"txId","type":"bytes32","internalType":"bytes32"},{"name":"outputId","type":"bytes4","internalType":"bytes4"}]},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506132828061001f6000396000f3fe60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156","sourceMap":"430:14139:46:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156","sourceMap":"430:14139:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1392:50;;;;;;;;;;-1:-1:-1;1392:50:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;391:25:58;;;379:2;364:18;1392:50:46;;;;;;;;1094:23;;;;;;;;;;-1:-1:-1;1094:23:46;;;;;;;;;;;592:14:58;;585:22;567:41;;555:2;540:18;1094:23:46;427:187:58;7652:595:46;;;;;;:::i;:::-;;:::i;:::-;;2630:769;;;;;;;;;;-1:-1:-1;2630:769:46;;;;;:::i;:::-;;:::i;1195:28::-;;;;;;;;;;;;;;;;1357:29;;;;;;;;;;-1:-1:-1;1357:29:46;;;;;:::i;:::-;;:::i;:::-;;;;3349:25:58;;;-1:-1:-1;;;;;;3410:33:58;;;3405:2;3390:18;;3383:61;3322:18;1357:29:46;3177:273:58;1123:23:46;;;;;;;;;;-1:-1:-1;1123:23:46;;;;;;;-1:-1:-1;;;;;1123:23:46;;;;;;-1:-1:-1;;;;;3619:32:58;;;3601:51;;3589:2;3574:18;1123:23:46;3455:203:58;1321:30:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10319:1463::-;;;;;;;;;;-1:-1:-1;10319:1463:46;;;;;:::i;:::-;;:::i;3155:101:29:-;;;;;;;;;;;;;:::i;9080:966:46:-;;;;;;;;;;-1:-1:-1;9080:966:46;;;;;:::i;:::-;;:::i;8310:108::-;;;;;;;;;;-1:-1:-1;8389:15:46;:22;8310:108;;2774:229:28;;;;;;;;;;;;;:::i;6936:385:46:-;;;;;;:::i;:::-;;:::i;1290:25::-;;;;;;;;;;;;;:::i;2441:144:29:-;;;;;;;;;;;;;:::i;1259:25:46:-;;;;;;;;;;;;;:::i;8561:147::-;;;;;;;;;;-1:-1:-1;8561:147:46;;;;;:::i;:::-;;:::i;1152:37::-;;;;;;;;;;-1:-1:-1;1152:37:46;;;;;:::i;:::-;;:::i;1448:50::-;;;;;;;;;;-1:-1:-1;1448:50:46;;;;;:::i;:::-;;;;;;;;;;;;;;996:91;;;;;;;;;;;;1044:42;996:91;;4826:1772;;;;;;;;;;-1:-1:-1;4826:1772:46;;;;;:::i;:::-;;:::i;1680:168:28:-;;;;;;;;;;;;;:::i;869:121:46:-;;;;;;;;;;;;-1:-1:-1;;;;;869:121:46;;4318:282;;;;;;;;;;-1:-1:-1;4318:282:46;;;;;:::i;:::-;;:::i;2041:247:28:-;;;;;;;;;;-1:-1:-1;2041:247:28;;;;;:::i;:::-;;:::i;3799:332:46:-;;;;;;;;;;-1:-1:-1;3799:332:46;;;;;:::i;:::-;;:::i;7652:595::-;7765:32;;;7757:60;;;;-1:-1:-1;;;7757:60:46;;7827:2:58;7757:60:46;;;7809:21:58;7866:2;7846:18;;;7839:30;-1:-1:-1;;;7885:18:58;;;7878:45;7940:18;;7757:60:46;;;;;;;;;7848:13;;:28;;7864:5;;7848:28;:::i;:::-;7835:9;:41;7827:77;;;;-1:-1:-1;;;7827:77:46;;8476:2:58;7827:77:46;;;8458:21:58;8515:2;8495:18;;;8488:30;-1:-1:-1;;;8534:18:58;;;8527:53;8597:18;;7827:77:46;8274:347:58;7827:77:46;7930:15;:22;7914:13;7962:279;7979:16;;;7962:279;;;8016:16;8035:92;;;;;;;;8064:5;;8070:1;8064:8;;;;;;;:::i;:::-;;;;;;;8035:92;;;;8100:9;;8110:1;8100:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;8035:92:46;;;8141:15;:26;;;;;;;-1:-1:-1;8141:26:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8141:26:46;;;;;;;;;;;;;-1:-1:-1;8186:44:46;8141:26;8203:9;8211:1;8203:5;:9;:::i;:::-;8214:15;8186:44;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;7997:3:46;;7962:279;;;;7747:500;7652:595;;;;:::o;2630:769::-;2057:10;1044:42;2057:27;2049:71;;;;-1:-1:-1;;;2049:71:46;;9747:2:58;2049:71:46;;;9729:21:58;9786:2;9766:18;;;9759:30;9825:33;9805:18;;;9798:61;9876:18;;2049:71:46;9545:355:58;2049:71:46;2773:11:::1;::::0;::::1;;2772:12;2764:56;;;::::0;-1:-1:-1;;;2764:56:46;;10107:2:58;2764:56:46::1;::::0;::::1;10089:21:58::0;10146:2;10126:18;;;10119:30;10185:33;10165:18;;;10158:61;10236:18;;2764:56:46::1;9905:355:58::0;2764:56:46::1;2838:14;2856:1;2838:19:::0;2830:58:::1;;;::::0;-1:-1:-1;;;2830:58:46;;10467:2:58;2830:58:46::1;::::0;::::1;10449:21:58::0;10506:2;10486:18;;;10479:30;10545:28;10525:18;;;10518:56;10591:18;;2830:58:46::1;10265:350:58::0;2830:58:46::1;2930:1;2906:25:::0;;;2898:68:::1;;;;-1:-1:-1::0;;;2898:68:46::1;;;;;;;:::i;:::-;2977:11;:18:::0;;-1:-1:-1;;2977:18:46::1;2991:4;2977:18;::::0;;3005:12:::1;:28;3020:13:::0;;3005:12;:28:::1;:::i;:::-;-1:-1:-1::0;3043:12:46::1;:28;3058:13:::0;;3043:12;:28:::1;:::i;:::-;-1:-1:-1::0;3081:13:46::1;:30:::0;;;3246:8:::1;:24:::0;;-1:-1:-1;;;;;;3246:24:46::1;::::0;::::1;::::0;;3286:42:::1;::::0;;13695:51:58;;;1044:42:46::1;13777:2:58::0;13762:18;;13755:60;3286:42:46::1;::::0;13668:18:58;3286:42:46::1;;;;;;;3343:49;3363:13;;3378;;3343:49;;;;;;;;;:::i;:::-;;;;;;;;2630:769:::0;;;;;:::o;1357:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1357:29:46;;;:::o;1321:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10319:1463::-;10411:40;10437:13;10411:25;:40::i;:::-;-1:-1:-1;10473:13:46;;-1:-1:-1;10490:40:46;10511:18;;;;:13;:18;:::i;:::-;10490:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10490:20:46;;-1:-1:-1;;;10490:40:46:i;:::-;10470:60;-1:-1:-1;10540:19:46;;-1:-1:-1;10562:60:46;10592:18;;;;:13;:18;:::i;:::-;10562:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10612:9:46;;-1:-1:-1;10620:1:46;;-1:-1:-1;10612:5:46;;-1:-1:-1;10612:9:46;:::i;:::-;10562:29;:60::i;:::-;10540:82;;10632:25;10660:36;10689:6;10660:28;:36::i;:::-;10632:64;-1:-1:-1;10706:16:46;10725:41;10740:25;10632:64;10706:16;10762:2;10740:18;:25::i;:::-;10725:14;:41::i;:::-;10706:60;;10776:18;10805:64;10820:48;10839:2;10865;10843:12;:19;:24;;;;:::i;:::-;10820:12;;:48;:18;:48::i;10805:64::-;10797:73;10900:25;;;:15;:25;;;;;;10797:73;;-1:-1:-1;10943:14:46;;;10935:47;;;;-1:-1:-1;;;10935:47:46;;15394:2:58;10935:47:46;;;15376:21:58;15433:2;15413:18;;;15406:30;-1:-1:-1;;;15452:18:58;;;15445:50;15512:18;;10935:47:46;15192:344:58;10935:47:46;10992:21;11016:60;11051:21;;;;:13;:21;:::i;:::-;11016:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11016:60:46;-1:-1:-1;11016:34:46;;-1:-1:-1;;11016:60:46:i;:::-;10992:84;;11086:19;11108:48;11144:8;11154:1;11108:35;:48::i;:::-;11086:70;;11180:11;11194:17;:24;;;;;:::i;:::-;;-1:-1:-1;11228:31:46;;-1:-1:-1;11262:20:46;:6;11228:31;11194:24;11262:12;:20::i;:::-;11228:54;;11300:51;11313:18;11333:17;11300:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:51::i;:::-;11292:90;;;;-1:-1:-1;;;11292:90:46;;15743:2:58;11292:90:46;;;15725:21:58;15782:2;15762:18;;;15755:30;15821:28;15801:18;;;15794:56;15867:18;;11292:90:46;15541:350:58;11292:90:46;11392:24;11419:15;11392:24;11435:13;11447:1;11435:9;:13;:::i;:::-;11419:30;;;;;;;;;;;;11392:57;;11520:16;11539;11559:1;11539:21;:78;;;;11584:33;11606:10;11584:21;:33::i;:::-;11564:16;:53;;11539:78;11520:97;;11635:11;11627:49;;;;-1:-1:-1;;;11627:49:46;;16098:2:58;11627:49:46;;;16080:21:58;16137:2;16117:18;;;16110:30;16176:27;16156:18;;;16149:55;16221:18;;11627:49:46;15896:349:58;11627:49:46;11720:4;11686:19;11706:10;11686:31;;;;;;;:::i;:::-;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;11740:35;11764:10;11740:35;;;;391:25:58;;379:2;364:18;;245:177;11740:35:46;;;;;;;;10401:1381;;;;;;;;;;;;10319:1463;:::o;3155:101:29:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;9080:966:46:-;9209:37;9235:10;9209:25;:37::i;:::-;-1:-1:-1;9256:18:46;;-1:-1:-1;9277:56:46;9306:14;;;;:10;:14;:::i;:::-;9277:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9322:10:46;;-1:-1:-1;9277:28:46;;-1:-1:-1;;9277:56:46:i;:::-;9256:77;;9343:12;9358:34;9386:5;9358:27;:34::i;:::-;9343:49;;9402:12;9417:32;9443:5;9417:25;:32::i;:::-;9402:47;;9459:16;9478:15;9494:10;9478:27;;;;;;;;:::i;:::-;;;;;;;;;;9459:46;;;;;;;;;9478:27;;;;;;9459:46;;;;;;;;;;;;-1:-1:-1;;;;;;9459:46:46;;;;;;;;;-1:-1:-1;9523:17:46;;:43;;;;;9561:5;-1:-1:-1;;;;;9544:22:46;;:4;:13;;;-1:-1:-1;;;;;9544:22:46;;;9523:43;9515:73;;;;-1:-1:-1;;;9515:73:46;;16452:2:58;9515:73:46;;;16434:21:58;16491:2;16471:18;;;16464:30;-1:-1:-1;;;16510:18:58;;;16503:47;16567:18;;9515:73:46;16250:341:58;9515:73:46;9602:13;9619:37;9640:15;;;;:10;:15;:::i;9619:37::-;9599:57;-1:-1:-1;9666:19:46;;-1:-1:-1;9688:57:46;9718:15;;;;:10;:15;:::i;9688:57::-;9666:79;;9755:25;9783:36;9812:6;9783:28;:36::i;:::-;9755:64;;9829:24;9864:28;9879:12;9864:14;:28::i;:::-;9856:37;-1:-1:-1;9933:39:46;9856:37;9933:21;:39::i;:::-;9903:27;;;;:15;:27;;;;;;;;;:69;;;;9987:52;;16770:25:58;;;16811:18;;;16804:34;;;9987:52:46;;16743:18:58;9987:52:46;;;;;;;9199:847;;;;;;;;9080:966;;;:::o;2774:229:28:-;966:10:31;;2869:14:28;:12;:14::i;:::-;-1:-1:-1;;;;;2869:24:28;;2865:96;;2916:34;;-1:-1:-1;;;2916:34:28;;-1:-1:-1;;;;;3619:32:58;;2916:34:28;;;3601:51:58;3574:18;;2916:34:28;3455:203:58;2865:96:28;2970:26;2989:6;2970:18;:26::i;:::-;2816:187;2774:229::o;6936:385:46:-;7033:13;;7020:9;:26;7012:62;;;;-1:-1:-1;;;7012:62:46;;8476:2:58;7012:62:46;;;8458:21:58;8515:2;8495:18;;;8488:30;-1:-1:-1;;;8534:18:58;;;8527:53;8597:18;;7012:62:46;8274:347:58;7012:62:46;7103:72;;;;;;;;;;;-1:-1:-1;;;;;;7103:72:46;;;;;;;;7201:15;:22;;7233:26;;;;;-1:-1:-1;7233:26:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7233:26:46;;;;;;;;;;;;;7274:40;;7103:72;;7201:22;7274:40;;;;7103:72;;7201:22;;7298:15;;7274:40;:::i;:::-;;;;;;;;7002:319;;6936:385;;:::o;1290:25::-;;;;;;;:::i;2441:144:29:-;2487:7;;1313:22;2533:20;2570:8;-1:-1:-1;;;;;2570:8:29;;2441:144;-1:-1:-1;;2441:144:29:o;1259:25:46:-;;;;;;;:::i;8561:147::-;2334:13:29;:11;:13::i;:::-;8630:8:46::1;:20:::0;;-1:-1:-1;;;;;;8630:20:46::1;;-1:-1:-1::0;;;;;8630:20:46;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;8665:36:::1;::::0;;8681:8;;;::::1;;13695:51:58::0;;13777:2;13762:18;;13755:60;;;;8665:36:46::1;::::0;13668:18:58;8665:36:46::1;;;;;;;8561:147:::0;:::o;1152:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4826:1772::-;2200:8;;;;;-1:-1:-1;;;;;2200:8:46;2186:10;:22;2178:61;;;;-1:-1:-1;;;2178:61:46;;17051:2:58;2178:61:46;;;17033:21:58;17090:2;17070:18;;;17063:30;17129:28;17109:18;;;17102:56;17175:18;;2178:61:46;16849:350:58;2178:61:46;5263:13:::1;5278:12:::0;5294:33:::1;5320:6;5294:25;:33::i;:::-;5262:65;;;;5345:4;5353:1;5345:9;5337:44;;;::::0;-1:-1:-1;;;5337:44:46;;17406:2:58;5337:44:46::1;::::0;::::1;17388:21:58::0;17445:2;17425:18;;;17418:30;-1:-1:-1;;;17464:18:58;;;17457:52;17526:18;;5337:44:46::1;17204:346:58::0;5337:44:46::1;5391:12;5406:83;5432:14;;::::0;::::1;:6:::0;:14:::1;:::i;:::-;5448:10;;::::0;::::1;:6:::0;:10:::1;:::i;:::-;5406:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5460:11:46::1;::::0;-1:-1:-1;;;5460:11:46::1;::::0;::::1;::::0;::::1;:::i;:::-;5406:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5473:15:46::1;::::0;-1:-1:-1;;;5473:15:46;;;::::1;::::0;::::1;;:::i;:::-;5406:25;:83::i;:::-;5508:21;::::0;;;:15:::1;:21;::::0;;;;;5391:98;;-1:-1:-1;5508:26:46;5500:57:::1;;;::::0;-1:-1:-1;;;5500:57:46;;17757:2:58;5500:57:46::1;::::0;::::1;17739:21:58::0;17796:2;17776:18;;;17769:30;-1:-1:-1;;;17815:18:58;;;17808:48;17873:18;;5500:57:46::1;17555:342:58::0;5500:57:46::1;5593:16;;5591:18;;;;;:::i;:::-;::::0;;;;-1:-1:-1;5567:21:46::1;::::0;;;:15:::1;:21;::::0;;;;:42;;;;5652:53:::1;5687:14;;::::0;::::1;:6:::0;:14:::1;:::i;5652:53::-;5628:77;;5718:14;5736:30;5757:8;5736:20;:30::i;:::-;5715:51;;;5784:6;5794:1;5784:11;5776:45;;;::::0;-1:-1:-1;;;5776:45:46;;18244:2:58;5776:45:46::1;::::0;::::1;18226:21:58::0;18283:2;18263:18;;;18256:30;-1:-1:-1;;;18302:18:58;;;18295:51;18363:18;;5776:45:46::1;18042:345:58::0;5776:45:46::1;5867:19;5889:48;5925:8;5935:1;5889:35;:48::i;:::-;5867:70;;5961:11;5975:12;:19;;;;;:::i;:::-;::::0;-1:-1:-1;6004:26:46::1;::::0;-1:-1:-1;6033:20:46::1;:6:::0;6004:26;5975:19;6033:12:::1;:20::i;:::-;6004:49;;6071:41;6084:13;6099:12;6071:41;;;;;:::i;:::-;6063:76;;;::::0;-1:-1:-1;;;6063:76:46;;18594:2:58;6063:76:46::1;::::0;::::1;18576:21:58::0;18633:2;18613:18;;;18606:30;-1:-1:-1;;;18652:18:58;;;18645:52;18714:18;;6063:76:46::1;18392:346:58::0;6063:76:46::1;6149:26;6178:70;6207:12;:19;;;;;:::i;:::-;6191:13:::0;;:35:::1;::::0;-1:-1:-1;6191:35:46::1;:::i;:::-;6228:12;:19;;;;;:::i;:::-;6178:6:::0;;:70;-1:-1:-1;6178:12:46::1;:70::i;:::-;6149:99;;6266:41;6279:13;6294:12;6266:41;;;;;:::i;:::-;6258:75;;;::::0;-1:-1:-1;;;6258:75:46;;18945:2:58;6258:75:46::1;::::0;::::1;18927:21:58::0;18984:2;18964:18;;;18957:30;-1:-1:-1;;;19003:18:58;;;18996:51;19064:18;;6258:75:46::1;18743:345:58::0;6258:75:46::1;6344:17;6364:31;6388:6;6364:23;:31::i;:::-;6459:16;::::0;6410:66:::1;::::0;;19352:25:58;;;19408:2;19393:18;;19386:34;;;-1:-1:-1;;;;;19456:32:58;;19436:18;;;19429:60;6442:15:46::1;19520:2:58::0;19505:18;;19498:34;19563:3;19548:19;;19541:35;;;;6410:66:46;19456:32:58;;-1:-1:-1;6410:66:46::1;::::0;;;;;19339:3:58;6410:66:46;;::::1;6528:13;::::0;6506:40:::1;::::0;6488:12:::1;::::0;-1:-1:-1;;;;;6506:14:46;::::1;::::0;6488:12;6506:40;6488:12;6506:40;6528:13;6506:14;:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6487:59;;;6564:7;6556:35;;;::::0;-1:-1:-1;;;6556:35:46;;19999:2:58;6556:35:46::1;::::0;::::1;19981:21:58::0;20038:2;20018:18;;;20011:30;-1:-1:-1;;;20057:18:58;;;20050:45;20112:18;;6556:35:46::1;19797:339:58::0;6556:35:46::1;4915:1683;;;;;;;;;;;4826:1772:::0;:::o;1680:168:28:-;1733:7;;1318:27;1784:25;1187:174;4318:282:46;2334:13:29;:11;:13::i;:::-;4449:1:46::1;4420:30:::0;;;4412:73:::1;;;;-1:-1:-1::0;;;4412:73:46::1;;;;;;;:::i;:::-;4496:17;:38;4516:18:::0;;4496:17;:38:::1;:::i;:::-;;4550:43;4574:18;;4550:43;;;;;;;:::i;:::-;;;;;;;;4318:282:::0;;:::o;2041:247:28:-;2334:13:29;:11;:13::i;:::-;1318:27:28;2197:26;;-1:-1:-1;;;;;;2197:26:28::1;-1:-1:-1::0;;;;;2197:26:28;::::1;::::0;;::::1;::::0;;2263:7:::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;2238:43:28::1;;;;;;;;;;;2120:168;2041:247:::0;:::o;3799:332:46:-;2334:13:29;:11;:13::i;:::-;3946:1:46::1;3922:25:::0;;;3914:68:::1;;;;-1:-1:-1::0;;;3914:68:46::1;;;;;;;:::i;:::-;3993:12;:28;4008:13:::0;;3993:12;:28:::1;:::i;:::-;-1:-1:-1::0;4031:12:46::1;:28;4046:13:::0;;4031:12;:28:::1;:::i;:::-;;4075:49;4095:13;;4110;;4075:49;;;;;;;;;:::i;12050:779::-:0;12139:7;;;12183:90;12211:10;;;;:2;:10;:::i;:::-;12223:7;;;;;;;;:::i;:::-;12232:6;;;;:2;:6;:::i;:::-;12240:7;;;;:2;:7;:::i;:::-;12249:10;;;;:2;:10;:::i;:::-;12261:11;;;;;;;;:::i;:::-;12183:27;:90::i;:::-;12167:106;-1:-1:-1;12291:28:46;12312:6;;;;:2;:6;:::i;:::-;12291:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12291:20:46;;-1:-1:-1;;;12291:28:46:i;:::-;12283:70;;;;-1:-1:-1;;;12283:70:46;;20878:2:58;12283:70:46;;;20860:21:58;20917:2;20897:18;;;20890:30;20956:31;20936:18;;;20929:59;21005:18;;12283:70:46;20676:353:58;12283:70:46;12371:30;12393:7;;;;:2;:7;:::i;:::-;12371:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12371:21:46;;-1:-1:-1;;;12371:30:46:i;:::-;12363:73;;;;-1:-1:-1;;;12363:73:46;;21236:2:58;12363:73:46;;;21218:21:58;21275:2;21255:18;;;21248:30;21314:32;21294:18;;;21287:60;21364:18;;12363:73:46;21034:354:58;12363:73:46;12458:12;12474:28;12495:6;;;;:2;:6;:::i;12474:28::-;12455:47;-1:-1:-1;12571:46:46;;-1:-1:-1;12600:10:46;;;;:2;:10;:::i;:::-;12571:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12612:4:46;;-1:-1:-1;12571:28:46;;-1:-1:-1;;12571:46:46:i;:::-;12563:92;;;;-1:-1:-1;;;12563:92:46;;21595:2:58;12563:92:46;;;21577:21:58;21634:2;21614:18;;;21607:30;21673:34;21653:18;;;21646:62;-1:-1:-1;;;21724:18:58;;;21717:31;21765:19;;12563:92:46;21393:397:58;12563:92:46;-1:-1:-1;;;;;12674:28:46;12703:15;;;;12720:5;12727:21;;;;12703:2;12727:21;:::i;:::-;12750:2;:8;;;12674:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12666:125;;;;-1:-1:-1;;;12666:125:46;;22743:2:58;12666:125:46;;;22725:21:58;22782:2;22762:18;;;22755:30;22821:29;22801:18;;;22794:57;22868:18;;12666:125:46;22541:351:58;12666:125:46;12810:5;;12817:4;;-1:-1:-1;12050:779:46;-1:-1:-1;;12050:779:46:o;2414:123:1:-;2475:7;2484;2510:20;2524:2;2528:1;2510:13;:20::i;:::-;2503:27;;;;2414:123;;;:::o;21812:827::-;21901:12;21925:22;21957:14;22009:18;22021:5;22009:11;:18::i;:::-;21982:45;;-1:-1:-1;21982:45:1;-1:-1:-1;22045:29:1;;;22037:76;;;;-1:-1:-1;;;22037:76:1;;;;;;;:::i;:::-;22140:6;22131;:15;22123:45;;;;-1:-1:-1;;;22123:45:1;;23502:2:58;22123:45:1;;;23484:21:58;23541:2;23521:18;;;23514:30;-1:-1:-1;;;23560:18:58;;;23553:47;23617:18;;22123:45:1;23300:341:58;22123:45:1;22179:12;;22223:18;22227:14;22223:1;:18;:::i;:::-;22205:36;;22257:10;22252:213;22278:6;22273:2;:11;22252:213;;;22314:39;22338:5;22345:7;22314:23;:39::i;:::-;22307:46;;-1:-1:-1;;22375:4:1;:19;22367:58;;;;-1:-1:-1;;;22367:58:1;;23848:2:58;22367:58:1;;;23830:21:58;23887:2;23867:18;;;23860:30;23926:28;23906:18;;;23899:56;23972:18;;22367:58:1;23646:350:58;22367:58:1;22439:15;22450:4;22439:15;;:::i;:::-;;-1:-1:-1;22286:5:1;;22252:213;;;;22482:39;22506:5;22513:7;22482:23;:39::i;:::-;22475:46;;-1:-1:-1;;22539:4:1;:19;22531:58;;;;-1:-1:-1;;;22531:58:1;;23848:2:58;22531:58:1;;;23830:21:58;23887:2;23867:18;;;23860:30;23926:28;23906:18;;;23899:56;23972:18;;22531:58:1;23646:350:58;22531:58:1;22606:26;:5;22618:7;22627:4;22606:11;:26::i;:::-;22599:33;;;;;;21812:827;;;;;:::o;24241:267::-;24315:12;24343:7;24351:1;24343:10;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;24343:10:1;-1:-1:-1;;;24343:21:1;24339:64;;-1:-1:-1;;24380:12:1;;;;;;;;;-1:-1:-1;24380:12:1;;;24241:267::o;24339:64::-;24412:15;24430:7;24438:2;24430:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;24430:11:1;;;-1:-1:-1;24458:43:1;;:7;;24472:2;;24430:11;;24458:13;:43::i;:::-;24451:50;24241:267;-1:-1:-1;;;24241:267:1:o;10344:924:2:-;10431:16;10463:7;10474:1;10463:12;10459:55;;-1:-1:-1;10491:12:2;;;;;;;;;-1:-1:-1;10491:12:2;;;;10459:55;10523:9;10535:16;10544:7;10535:6;:16;:::i;:::-;10523:28;;10576:6;10569:4;:13;:38;;;;;10603:4;10586:6;:13;:21;;10569:38;10561:70;;;;-1:-1:-1;;;10561:70:2;;24203:2:58;10561:70:2;;;24185:21:58;24242:2;24222:18;;;24215:30;-1:-1:-1;;;24261:18:58;;;24254:49;24320:18;;10561:70:2;24001:343:58;10561:70:2;10768:4;10762:11;10755:18;;10817:7;10812:2;10807:3;10803:12;10799:26;10793:4;10786:40;10851:7;10846:3;10839:20;10978:6;10970;10966:19;10961:3;10957:29;11054:6;11049:2;11041:6;11037:15;11033:28;11098:7;11093:3;11089:17;11000:252;11129:3;11124;11121:12;11000:252;;;11233:3;11227:10;11220:4;11215:3;11211:14;11204:34;11168:2;11163:3;11159:12;11152:19;;11000:252;;;11004:116;;;10651:611;10344:924;;;;;:::o;14115:452:46:-;14184:14;14214:7;:14;14232:1;14214:19;14210:60;;-1:-1:-1;14256:3:46;;14115:452;-1:-1:-1;14115:452:46:o;14210:60::-;14296:14;;14338:2;14328:12;;;14320:59;;;;-1:-1:-1;;;14320:59:46;;24551:2:58;14320:59:46;;;24533:21:58;24590:2;24570:18;;;24563:30;24629:34;24609:18;;;24602:62;-1:-1:-1;;;24680:18:58;;;24673:32;24722:19;;14320:59:46;24349:398:58;14320:59:46;14463:2;14450:16;;;14444:23;14488:15;;14540:1;14530:12;14526:25;;;;;;-1:-1:-1;14115:452:46:o;3420:579:0:-;3513:12;3537;3563:15;3598:10;3593:221;3619:6;3614:2;:11;3593:221;;;3655:43;3680:8;3690:7;3655:24;:43::i;:::-;3648:50;;-1:-1:-1;;3720:4:0;:28;3712:62;;;;-1:-1:-1;;;3712:62:0;;24954:2:58;3712:62:0;;;24936:21:58;24993:2;24973:18;;;24966:30;-1:-1:-1;;;25012:18:58;;;25005:51;25073:18;;3712:62:0;24752:345:58;3712:62:0;3788:15;3799:4;3788:15;;:::i;:::-;;-1:-1:-1;3627:5:0;;3593:221;;;;3831:43;3856:8;3866:7;3831:24;:43::i;:::-;3824:50;;-1:-1:-1;;3892:4:0;:28;3884:62;;;;-1:-1:-1;;;3884:62:0;;24954:2:58;3884:62:0;;;24936:21:58;24993:2;24973:18;;;24966:30;-1:-1:-1;;;25012:18:58;;;25005:51;25073:18;;3884:62:0;24752:345:58;3884:62:0;3963:29;:8;3978:7;3987:4;3963:14;:29::i;:::-;3956:36;3420:579;-1:-1:-1;;;;;3420:579:0:o;4360:974::-;4454:12;4478:22;4510:15;4572:30;4593:8;4572:20;:30::i;:::-;4544:58;;-1:-1:-1;4544:58:0;-1:-1:-1;4620:38:0;;;4612:85;;;;-1:-1:-1;;;4612:85:0;;;;;;;:::i;:::-;4724:7;4715:6;:16;4707:45;;;;-1:-1:-1;;;4707:45:0;;25304:2:58;4707:45:0;;;25286:21:58;25343:2;25323:18;;;25316:30;-1:-1:-1;;;25362:18:58;;;25355:46;25418:18;;4707:45:0;25102:340:58;4707:45:0;4763:16;;4811:18;4815:14;4811:1;:18;:::i;:::-;4793:36;;4845:9;4840:263;4864:6;4860:1;:10;4840:263;;;4920:41;4943:8;4953:7;4920:22;:41::i;:::-;4891:70;;-1:-1:-1;4891:70:0;-1:-1:-1;4983:32:0;;;4975:63;;;;-1:-1:-1;;;4975:63:0;;25649:2:58;4975:63:0;;;25631:21:58;25688:2;25668:18;;;25661:30;-1:-1:-1;;;25707:18:58;;;25700:48;25765:18;;4975:63:0;25447:342:58;4975:63:0;5084:8;5063:18;5067:14;5063:1;:18;:::i;:::-;:29;;;;:::i;:::-;5052:40;;;;:::i;:::-;;-1:-1:-1;4872:3:0;;4840:263;;;;5142:41;5165:8;5175:7;5142:22;:41::i;:::-;5113:70;;-1:-1:-1;5113:70:0;-1:-1:-1;5201:32:0;;;5193:63;;;;-1:-1:-1;;;5193:63:0;;25649:2:58;5193:63:0;;;25631:21:58;25688:2;25668:18;;;25661:30;-1:-1:-1;;;25707:18:58;;;25700:48;25765:18;;5193:63:0;25447:342:58;5193:63:0;5273:54;5288:7;5297:25;5308:14;5297:8;:25;:::i;:::-;:29;;5325:1;5297:29;:::i;:::-;5273:8;;:54;:14;:54::i;13335:774:46:-;13449:8;;13478;;13412:11;;13449:8;13471:15;;13467:58;;13509:5;13502:12;;;;;13467:58;13552:2;13535:14;;13612:289;13629:3;13619:6;:13;13612:289;;-1:-1:-1;;13691:14:46;;;13685:21;13740:14;;;13734:21;13794:2;13782:15;;;;13828:16;;;13824:67;;13871:5;13864:12;;;;;;;;13824:67;13612:289;;;13958:6;13967:11;13976:2;13967:6;:11;:::i;:::-;13958:20;;13953:128;13984:3;13980:1;:7;13953:128;;;14020:1;14022;14020:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;14012:12:46;;:1;14014;14012:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;14012:4:46;:12;14008:63;;14051:5;14044:12;;;;;;;;;14008:63;13989:3;;13953:128;;;-1:-1:-1;14098:4:46;;13335:774;-1:-1:-1;;;;;;;13335:774:46:o;11923:121::-;11997:7;12023:14;:10;12036:1;12023:14;:::i;2658:162:29:-;966:10:31;2717:7:29;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:29;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:29;;966:10:31;2763:40:29;;;3601:51:58;3574:18;;2763:40:29;3455:203:58;2472:222:28;1318:27;2621:22;;-1:-1:-1;;;;;;2621:22:28;;;2653:34;2678:8;2653:24;:34::i;:::-;2544:150;2472:222;:::o;11841:818:1:-;11928:12;11952:22;11984:13;12034:17;12046:4;12034:11;:17::i;:::-;12008:43;;-1:-1:-1;12008:43:1;-1:-1:-1;12069:29:1;;;12061:76;;;;-1:-1:-1;;;12061:76:1;;;;;;;:::i;:::-;12164:5;12155:6;:14;12147:43;;;;-1:-1:-1;;;12147:43:1;;25304:2:58;12147:43:1;;;25286:21:58;25343:2;25323:18;;;25316:30;-1:-1:-1;;;25362:18:58;;;25355:46;25418:18;;12147:43:1;25102:340:58;12147:43:1;12201:12;;12245:18;12249:14;12245:1;:18;:::i;:::-;12227:36;;12279:10;12274:217;12300:6;12295:2;:11;12274:217;;;12336:37;12359:4;12365:7;12336:22;:37::i;:::-;12329:44;;-1:-1:-1;;12395:4:1;:19;12387:55;;;;-1:-1:-1;;;12387:55:1;;25996:2:58;12387:55:1;;;25978:21:58;26035:2;26015:18;;;26008:30;-1:-1:-1;;;26054:18:58;;;26047:53;26117:18;;12387:55:1;25794:347:58;12387:55:1;12466:14;12476:4;12466:7;:14;:::i;:::-;12456:24;-1:-1:-1;12308:5:1;;12274:217;;;;12508:37;12531:4;12537:7;12508:22;:37::i;:::-;12501:44;;-1:-1:-1;;12563:4:1;:19;12555:55;;;;-1:-1:-1;;;12555:55:1;;25996:2:58;12555:55:1;;;25978:21:58;26035:2;26015:18;;;26008:30;-1:-1:-1;;;26054:18:58;;;26047:53;26117:18;;12555:55:1;25794:347:58;18631:122:1;12566:2:2;12550:28;;12544:35;18703:7:1;;18729:17;12417:178:2;19454:119:1;19524:6;19549:17;:6;19563:2;19549:13;:17::i;2637:355:4:-;2795:7;2921:64;2938:8;2948:4;2954:5;2961:9;2921:50;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:62;:64::i;12835:240:46:-;12913:7;12932:14;12949:12;:19;;;;;:::i;:::-;;-1:-1:-1;12978:13:46;;-1:-1:-1;13002:25:46;:7;12949:19;13024:2;13002:13;:25::i;:::-;12994:34;;;:::i;:::-;13053:14;;;12835:240;-1:-1:-1;;;;12835:240:46:o;431:320:0:-;643:7;669:75;686:7;695:4;701:3;;706:4;;712:7;;721:8;669:61;;;;;;;;;;;;;;;;:::i;:75::-;662:82;431:320;-1:-1:-1;;;;;;;;;;431:320:0:o;27793:991:1:-;27856:4;27872:22;27904:13;27954:17;27966:4;27954:11;:17::i;:::-;27928:43;;-1:-1:-1;27928:43:1;-1:-1:-1;28050:10:1;;;:43;;;-1:-1:-1;;28064:14:1;:29;28050:43;28046:86;;;-1:-1:-1;28116:5:1;;27793:991;-1:-1:-1;;;27793:991:1:o;28046:86::-;28142:15;28160:18;28164:14;28160:1;:18;:::i;:::-;28142:36;;28194:9;28189:492;28213:5;28209:1;:9;28189:492;;;28312:4;:11;28301:7;:22;28297:73;;-1:-1:-1;28350:5:1;;27793:991;-1:-1:-1;;;;;27793:991:1:o;28297:73::-;28445:16;28464:37;28487:4;28493:7;28464:22;:37::i;:::-;28445:56;;-1:-1:-1;;28519:8:1;:23;28515:74;;-1:-1:-1;28569:5:1;;27793:991;-1:-1:-1;;;;;;27793:991:1:o;28515:74::-;28651:19;28662:8;28651:19;;:::i;:::-;;-1:-1:-1;;28220:3:1;;28189:492;;;-1:-1:-1;28766:11:1;;28755:22;;;;;-1:-1:-1;;;27793:991:1:o;29056:1004::-;29121:4;29137:22;29169:14;29221:18;29233:5;29221:11;:18::i;:::-;29194:45;;-1:-1:-1;29194:45:1;-1:-1:-1;29319:11:1;;;:44;;;-1:-1:-1;;29334:14:1;:29;29319:44;29315:87;;;-1:-1:-1;29386:5:1;;29056:1004;-1:-1:-1;;;29056:1004:1:o;29315:87::-;29412:15;29430:18;29434:14;29430:1;:18;:::i;:::-;29412:36;;29464:9;29459:497;29483:6;29479:1;:10;29459:497;;;29583:5;:12;29572:7;:23;29568:74;;-1:-1:-1;29622:5:1;;29056:1004;-1:-1:-1;;;;;29056:1004:1:o;29568:74::-;29766:16;29785:39;29809:5;29816:7;29785:23;:39::i;:::-;29766:58;;-1:-1:-1;;29842:8:1;:23;29838:74;;-1:-1:-1;29892:5:1;;29056:1004;-1:-1:-1;;;;;;29056:1004:1:o;29838:74::-;29926:19;29937:8;29926:19;;:::i;:::-;;-1:-1:-1;;29491:3:1;;29459:497;;1060:871:0;1147:4;1222:6;1232:1;1222:11;1218:54;;-1:-1:-1;1256:5:0;1249:12;;1218:54;1282:15;1317:9;1312:512;1336:6;1332:1;:10;1312:512;;;1436:8;:15;1425:7;:26;1421:77;;1478:5;1471:12;;;;;;1421:77;1573:16;1592:43;1617:8;1627:7;1592:24;:43::i;:::-;1573:62;;-1:-1:-1;;1653:8:0;:32;1649:83;;1712:5;1705:12;;;;;;;1649:83;1794:19;1805:8;1794:19;;:::i;:::-;;-1:-1:-1;;1344:3:0;;1312:512;;;-1:-1:-1;1909:15:0;;1898:26;;-1:-1:-1;1060:871:0;;;;:::o;2999:704:1:-;3075:7;3084;3103:14;3120:36;3148:2;3152:3;3120:27;:36::i;:::-;3103:53;;3171:8;:13;;3183:1;3171:13;3167:70;;3208:1;3217:2;3220:3;3217:7;;;;;;;;:::i;:::-;;;;;3200:26;;-1:-1:-1;3217:7:1;;;-1:-1:-1;3200:26:1;;-1:-1:-1;3200:26:1;3167:70;3277:3;3262:12;3266:8;3262:1;:12;:::i;:::-;:18;;;;;;:::i;:::-;3250:2;:9;:30;3246:84;;;-1:-1:-1;;3317:1:1;3296:23;;;;;;;3246:84;3339:15;3368:8;:13;;3380:1;3368:13;3364:297;;3407:41;3428:18;3438:7;3442:3;3438:1;:7;:::i;:::-;3428:2;;:9;:18::i;:::-;7042:7;;;;;;7054;;;;;7041:21;;6959:110;3407:41;3397:51;;;;3364:297;;;3469:8;:13;;3481:1;3469:13;3465:196;;3508:41;3529:18;3539:7;3543:3;3539:1;:7;:::i;3529:18::-;6397:21;;;;;;6402:10;6360:6;;;;;6359:21;;;;6358:61;6485:2;6480:7;;;6468;;;6467:21;;6238:257;3508:41;3498:51;;;;3465:196;;;3570:8;:13;;3582:1;3570:13;3566:95;;3609:41;3630:18;3640:7;3644:3;3640:1;:7;:::i;3630:18::-;3623:26;;5965:22;5866:1;5793:6;;;5965:22;;;;5838:29;;;;5965:22;;;;5992:2;5964:30;;;-1:-1:-1;;;;;6056:7:1;5843:18;5792:29;;;;5838;;;;5791:77;;;;5918:7;;;5969:18;5917:30;6056:7;6061:2;6044:7;;;6056;;;6043:21;;5671:400;3609:41;-1:-1:-1;;;;;3599:51:1;;;3566:95;3670:26;;;;;-1:-1:-1;3688:7:1;-1:-1:-1;2999:704:1;;;;;;:::o;20911:536::-;21002:7;21042;21046:3;21042:1;:7;:::i;:::-;21025;:14;:24;21021:73;;;-1:-1:-1;;;21065:18:1;;21021:73;21103:22;;21212:31;21226:7;21235;21239:3;21235:1;:7;:::i;:::-;21212:13;:31::i;:::-;21172:71;;-1:-1:-1;21172:71:1;-1:-1:-1;21258:29:1;;;21254:78;;-1:-1:-1;;21303:18:1;;;;;;21254:78;21421:19;21396:22;21404:14;21396:5;:22;:::i;:::-;:44;;;;:::i;2254:783:0:-;2347:7;2366:22;2398:20;2470:37;2493:8;2503:3;2470:22;:37::i;:::-;2437:70;;-1:-1:-1;2437:70:0;-1:-1:-1;2521:38:0;;;2517:96;;-1:-1:-1;;2575:27:0;;;;;;2517:96;2623:16;;2667:18;2671:14;2667:1;:18;:::i;:::-;2649:36;;2701:9;2696:310;2720:12;2716:1;:16;2696:310;;;2782:47;2805:8;2815:13;2821:7;2815:3;:13;:::i;2782:47::-;2753:76;;-1:-1:-1;2753:76:0;-1:-1:-1;2847:32:0;;;2843:98;;-1:-1:-1;;2899:27:0;;;;;;;;;2843:98;2987:8;2966:18;2970:14;2966:1;:18;:::i;:::-;:29;;;;:::i;:::-;2955:40;;;;:::i;:::-;;-1:-1:-1;2734:3:0;;2696:310;;;-1:-1:-1;3023:7:0;2254:783;-1:-1:-1;;;;;;2254:783:0:o;3774:248:29:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:29;;-1:-1:-1;;;;;3941:19:29;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;14980:394:1:-;15069:7;15088:22;15120:21;15185:34;15207:6;15215:3;15185:21;:34::i;:::-;15151:68;;-1:-1:-1;15151:68:1;-1:-1:-1;15233:29:1;;;15229:78;;-1:-1:-1;;15278:18:1;;;;;;15229:78;15350:13;15324:23;15333:14;15324:6;:23;:::i;:::-;:39;;;;:::i;:::-;:43;;15366:1;15324:43;:::i;13081:136:2:-;13154:6;13186:23;13194:6;13202;12550:28;12566:2;12550:28;12544:35;;12417:178;9609:335:1;9670:11;9835:2;9829:4;9824:2;9818:9;9813:2;9809;9805:11;9802:1;9795:5;9784:54;9780:59;9893:2;9887:4;9883:2;9877:4;9874:1;9867:5;9856:40;-1:-1:-1;;9923:4:1;9917:11;;9609:335;-1:-1:-1;9609:335:1:o;1550:446::-;1640:5;1667:2;1670:3;1667:7;;;;;;;;:::i;:::-;;;;;;;1661:14;:22;1657:93;;-1:-1:-1;1706:1:1;1699:8;;1657:93;1769:2;1772:3;1769:7;;;;;;;;:::i;:::-;;;;;;;1781:4;1763:22;1759:93;;-1:-1:-1;1808:1:1;1801:8;;1759:93;1871:2;1874:3;1871:7;;;;;;;;:::i;:::-;;;;;;;1883:4;1865:22;1861:93;;-1:-1:-1;1910:1:1;1903:8;;1861:93;-1:-1:-1;1971:1:1;1550:446;;;;:::o;13785:388::-;13873:7;;13921:8;13926:3;13921:2;:8;:::i;:::-;13905:6;:13;:24;13901:78;;;-1:-1:-1;;;654:66:1;-1:-1:-1;13966:1:1;13945:23;;13901:78;13989:22;;14086:31;14100:6;14108:8;:3;14114:2;14108:8;:::i;14086:31::-;14052:65;;;;-1:-1:-1;13785:388:1;-1:-1:-1;;;;;13785:388:1:o;14:226:58:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:58;;14:226;-1:-1:-1;14:226:58:o;619:367::-;682:8;692:6;746:3;739:4;731:6;727:17;723:27;713:55;;764:1;761;754:12;713:55;-1:-1:-1;787:20:58;;-1:-1:-1;;;;;819:30:58;;816:50;;;862:1;859;852:12;816:50;899:4;891:6;887:17;875:29;;959:3;952:4;942:6;939:1;935:14;927:6;923:27;919:38;916:47;913:67;;;976:1;973;966:12;991:767;1112:6;1120;1128;1136;1189:2;1177:9;1168:7;1164:23;1160:32;1157:52;;;1205:1;1202;1195:12;1157:52;1245:9;1232:23;-1:-1:-1;;;;;1270:6:58;1267:30;1264:50;;;1310:1;1307;1300:12;1264:50;1349:70;1411:7;1402:6;1391:9;1387:22;1349:70;:::i;:::-;1438:8;;-1:-1:-1;1323:96:58;-1:-1:-1;;1526:2:58;1511:18;;1498:32;-1:-1:-1;;;;;1542:32:58;;1539:52;;;1587:1;1584;1577:12;1539:52;1626:72;1690:7;1679:8;1668:9;1664:24;1626:72;:::i;:::-;991:767;;;;-1:-1:-1;1717:8:58;-1:-1:-1;;;;991:767:58:o;1763:347::-;1814:8;1824:6;1878:3;1871:4;1863:6;1859:17;1855:27;1845:55;;1896:1;1893;1886:12;1845:55;-1:-1:-1;1919:20:58;;-1:-1:-1;;;;;1951:30:58;;1948:50;;;1994:1;1991;1984:12;1948:50;2031:4;2023:6;2019:17;2007:29;;2083:3;2076:4;2067:6;2059;2055:19;2051:30;2048:39;2045:59;;;2100:1;2097;2090:12;2115:826;2214:6;2222;2230;2238;2246;2299:2;2287:9;2278:7;2274:23;2270:32;2267:52;;;2315:1;2312;2305:12;2267:52;2355:9;2342:23;-1:-1:-1;;;;;2380:6:58;2377:30;2374:50;;;2420:1;2417;2410:12;2374:50;2459:58;2509:7;2500:6;2489:9;2485:22;2459:58;:::i;:::-;2536:8;;-1:-1:-1;2433:84:58;-1:-1:-1;;2624:2:58;2609:18;;2596:32;-1:-1:-1;;;;;2640:32:58;;2637:52;;;2685:1;2682;2675:12;2637:52;2724:60;2776:7;2765:8;2754:9;2750:24;2724:60;:::i;:::-;2115:826;;;;-1:-1:-1;2803:8:58;2907:2;2892:18;2879:32;;2115:826;-1:-1:-1;;;;2115:826:58:o;3663:250::-;3748:1;3758:113;3772:6;3769:1;3766:13;3758:113;;;3848:11;;;3842:18;3829:11;;;3822:39;3794:2;3787:10;3758:113;;;-1:-1:-1;;3905:1:58;3887:16;;3880:27;3663:250::o;3918:394::-;4065:2;4054:9;4047:21;4028:4;4097:6;4091:13;4140:6;4135:2;4124:9;4120:18;4113:34;4156:79;4228:6;4223:2;4212:9;4208:18;4203:2;4195:6;4191:15;4156:79;:::i;:::-;4296:2;4275:15;-1:-1:-1;;4271:29:58;4256:45;;;;4303:2;4252:54;;3918:394;-1:-1:-1;;3918:394:58:o;4317:166::-;4387:5;4432:3;4423:6;4418:3;4414:16;4410:26;4407:46;;;4449:1;4446;4439:12;4407:46;-1:-1:-1;4471:6:58;4317:166;-1:-1:-1;4317:166:58:o;4488:377::-;4585:6;4638:2;4626:9;4617:7;4613:23;4609:32;4606:52;;;4654:1;4651;4644:12;4606:52;4694:9;4681:23;-1:-1:-1;;;;;4719:6:58;4716:30;4713:50;;;4759:1;4756;4749:12;4713:50;4782:77;4851:7;4842:6;4831:9;4827:22;4782:77;:::i;:::-;4772:87;4488:377;-1:-1:-1;;;;4488:377:58:o;4870:611::-;4985:6;4993;5001;5054:2;5042:9;5033:7;5029:23;5025:32;5022:52;;;5070:1;5067;5060:12;5022:52;5110:9;5097:23;-1:-1:-1;;;;;5135:6:58;5132:30;5129:50;;;5175:1;5172;5165:12;5129:50;5198:77;5267:7;5258:6;5247:9;5243:22;5198:77;:::i;:::-;5188:87;5344:2;5329:18;;5316:32;;-1:-1:-1;5445:2:58;5430:18;;;5417:32;;4870:611;-1:-1:-1;;;;4870:611:58:o;5486:173::-;5553:20;;-1:-1:-1;;;;;;5602:32:58;;5592:43;;5582:71;;5649:1;5646;5639:12;5582:71;5486:173;;;:::o;5664:298::-;5731:6;5739;5792:2;5780:9;5771:7;5767:23;5763:32;5760:52;;;5808:1;5805;5798:12;5760:52;5853:23;;;-1:-1:-1;5919:37:58;5952:2;5937:18;;5919:37;:::i;:::-;5909:47;;5664:298;;;;;:::o;5967:286::-;6026:6;6079:2;6067:9;6058:7;6054:23;6050:32;6047:52;;;6095:1;6092;6085:12;6047:52;6121:23;;-1:-1:-1;;;;;6173:31:58;;6163:42;;6153:70;;6219:1;6216;6209:12;6494:409;6564:6;6572;6625:2;6613:9;6604:7;6600:23;6596:32;6593:52;;;6641:1;6638;6631:12;6593:52;6681:9;6668:23;-1:-1:-1;;;;;6706:6:58;6703:30;6700:50;;;6746:1;6743;6736:12;6700:50;6785:58;6835:7;6826:6;6815:9;6811:22;6785:58;:::i;:::-;6862:8;;6759:84;;-1:-1:-1;6494:409:58;-1:-1:-1;;;;6494:409:58:o;6908:712::-;6998:6;7006;7014;7022;7075:2;7063:9;7054:7;7050:23;7046:32;7043:52;;;7091:1;7088;7081:12;7043:52;7131:9;7118:23;-1:-1:-1;;;;;7156:6:58;7153:30;7150:50;;;7196:1;7193;7186:12;7150:50;7235:58;7285:7;7276:6;7265:9;7261:22;7235:58;:::i;:::-;7312:8;;-1:-1:-1;7209:84:58;-1:-1:-1;;7400:2:58;7385:18;;7372:32;-1:-1:-1;;;;;7416:32:58;;7413:52;;;7461:1;7458;7451:12;7413:52;7500:60;7552:7;7541:8;7530:9;7526:24;7500:60;:::i;7969:127::-;8030:10;8025:3;8021:20;8018:1;8011:31;8061:4;8058:1;8051:15;8085:4;8082:1;8075:15;8101:168;8174:9;;;8205;;8222:15;;;8216:22;;8202:37;8192:71;;8243:18;;:::i;8626:127::-;8687:10;8682:3;8678:20;8675:1;8668:31;8718:4;8715:1;8708:15;8742:4;8739:1;8732:15;8758:184;8816:6;8869:2;8857:9;8848:7;8844:23;8840:32;8837:52;;;8885:1;8882;8875:12;8837:52;8908:28;8926:9;8908:28;:::i;8947:125::-;9012:9;;;9033:10;;;9030:36;;;9046:18;;:::i;9077:463::-;9344:13;;9326:32;;9418:4;9406:17;;;9400:24;-1:-1:-1;;;;;;9396:51:58;9374:20;;;9367:81;;;;9479:2;9464:18;;9457:34;;;;9522:2;9507:18;;9500:34;9313:3;9298:19;;9077:463::o;10620:354::-;10822:2;10804:21;;;10861:2;10841:18;;;10834:30;10900:32;10895:2;10880:18;;10873:60;10965:2;10950:18;;10620:354::o;10979:127::-;11040:10;11035:3;11031:20;11028:1;11021:31;11071:4;11068:1;11061:15;11095:4;11092:1;11085:15;11111:380;11190:1;11186:12;;;;11233;;;11254:61;;11308:4;11300:6;11296:17;11286:27;;11254:61;11361:2;11353:6;11350:14;11330:18;11327:38;11324:161;;11407:10;11402:3;11398:20;11395:1;11388:31;11442:4;11439:1;11432:15;11470:4;11467:1;11460:15;11621:517;11722:2;11717:3;11714:11;11711:421;;;11758:5;11755:1;11748:16;11802:4;11799:1;11789:18;11872:2;11860:10;11856:19;11853:1;11849:27;11843:4;11839:38;11908:4;11896:10;11893:20;11890:47;;;-1:-1:-1;11931:4:58;11890:47;11986:2;11981:3;11977:12;11974:1;11970:20;11964:4;11960:31;11950:41;;12041:81;12059:2;12052:5;12049:13;12041:81;;;12118:1;12104:16;;12085:1;12074:13;12041:81;;;12045:3;;11711:421;11621:517;;;:::o;12314:1202::-;-1:-1:-1;;;;;12431:3:58;12428:27;12425:53;;;12458:18;;:::i;:::-;12487:93;12576:3;12536:38;12568:4;12562:11;12536:38;:::i;:::-;12530:4;12487:93;:::i;:::-;12606:1;12631:2;12626:3;12623:11;12648:1;12643:615;;;;13302:1;13319:3;13316:93;;;-1:-1:-1;13375:19:58;;;13362:33;13316:93;-1:-1:-1;;12271:1:58;12267:11;;;12263:24;12259:29;12249:40;12295:1;12291:11;;;12246:57;13422:78;;12616:894;;12643:615;11568:1;11561:14;;;11605:4;11592:18;;-1:-1:-1;;12679:17:58;;;12779:9;12801:229;12815:7;12812:1;12809:14;12801:229;;;12904:19;;;12891:33;12876:49;;13011:4;12996:20;;;;12964:1;12952:14;;;;12831:12;12801:229;;;12805:3;13058;13049:7;13046:16;13043:159;;;13182:1;13178:6;13172:3;13166;13163:1;13159:11;13155:21;13151:34;13147:39;13134:9;13129:3;13125:19;13112:33;13108:79;13100:6;13093:95;13043:159;;;13245:1;13239:3;13236:1;13232:11;13228:19;13222:4;13215:33;12616:894;;12314:1202;;;:::o;13826:266::-;13914:6;13909:3;13902:19;13966:6;13959:5;13952:4;13947:3;13943:14;13930:43;-1:-1:-1;14018:1:58;13993:16;;;14011:4;13989:27;;;13982:38;;;;14074:2;14053:15;;;-1:-1:-1;;14049:29:58;14040:39;;;14036:50;;13826:266::o;14097:431::-;14310:2;14299:9;14292:21;14273:4;14336:61;14393:2;14382:9;14378:18;14370:6;14362;14336:61;:::i;:::-;14445:9;14437:6;14433:22;14428:2;14417:9;14413:18;14406:50;14473:49;14515:6;14507;14499;14473:49;:::i;:::-;14465:57;14097:431;-1:-1:-1;;;;;;;14097:431:58:o;14533:521::-;14610:4;14616:6;14676:11;14663:25;14770:2;14766:7;14755:8;14739:14;14735:29;14731:43;14711:18;14707:68;14697:96;;14789:1;14786;14779:12;14697:96;14816:33;;14868:20;;;-1:-1:-1;;;;;;14900:30:58;;14897:50;;;14943:1;14940;14933:12;14897:50;14976:4;14964:17;;-1:-1:-1;15007:14:58;15003:27;;;14993:38;;14990:58;;;15044:1;15041;15034:12;15059:128;15126:9;;;15147:11;;;15144:37;;;15161:18;;:::i;17902:135::-;17941:3;17962:17;;;17959:43;;17982:18;;:::i;:::-;-1:-1:-1;18029:1:58;18018:13;;17902:135::o;20141:244::-;20298:2;20287:9;20280:21;20261:4;20318:61;20375:2;20364:9;20360:18;20352:6;20344;20318:61;:::i;20390:281::-;20448:6;20501:2;20489:9;20480:7;20476:23;20472:32;20469:52;;;20517:1;20514;20507:12;20469:52;20543:23;;-1:-1:-1;;;;;;20595:27:58;;20585:38;;20575:66;;20637:1;20634;20627:12;21795:459;22036:6;22025:9;22018:25;22079:6;22074:2;22063:9;22059:18;22052:34;22122:3;22117:2;22106:9;22102:18;22095:31;21999:4;22143:62;22200:3;22189:9;22185:19;22177:6;22169;22143:62;:::i;:::-;22135:70;;22241:6;22236:2;22225:9;22221:18;22214:34;21795:459;;;;;;;;:::o;22259:277::-;22326:6;22379:2;22367:9;22358:7;22354:23;22350:32;22347:52;;;22395:1;22392;22385:12;22347:52;22427:9;22421:16;22480:5;22473:13;22466:21;22459:5;22456:32;22446:60;;22502:1;22499;22492:12;22897:398;23099:2;23081:21;;;23138:2;23118:18;;;23111:30;23177:34;23172:2;23157:18;;23150:62;-1:-1:-1;;;23243:2:58;23228:18;;23221:32;23285:3;23270:19;;22897:398::o;26146:706::-;-1:-1:-1;;;;;;26403:33:58;;26391:46;;26460:13;;26373:3;;26482:74;26460:13;26545:1;26536:11;;26529:4;26517:17;;26482:74;:::i;:::-;26616:13;;26575:16;;;;26638:75;26616:13;26700:1;26692:10;;26685:4;26673:17;;26638:75;:::i;:::-;-1:-1:-1;;;;;;26783:33:58;;;;26739:17;;26758:1;26735:25;;26769:48;;;;-1:-1:-1;;26833:13:58;;;26146:706;-1:-1:-1;;;26146:706:58:o;26857:412::-;26975:12;;27023:4;27012:16;;27006:23;-1:-1:-1;;27047:40:58;;;26975:12;27110:2;27099:14;;27096:167;;;27225:26;27221:31;27190:26;27186:31;27176:6;27172:2;27168:15;27165:1;27161:23;27157:61;27153:2;27149:70;27145:108;27136:117;;27096:167;;;26857:412;;;:::o;27274:853::-;-1:-1:-1;;;;;;27633:33:58;;27621:46;;-1:-1:-1;;;;;;27696:28:58;;27692:1;27683:11;;27676:49;27768:6;27760;27756:1;27747:11;;27734:41;27603:3;27803:6;27798:3;27794:16;27837:1;27833:2;27829:10;27859:1;27855:2;27848:13;27895:6;27887;27883:2;27870:32;-1:-1:-1;27964:1:58;27925:15;;;27942:1;27921:23;27953:13;;;28000:6;27992;27921:23;27975:32;-1:-1:-1;;;;;;28061:33:58;;;;28026:15;;;;28050:45;;;-1:-1:-1;28119:1:58;28111:10;;27274:853;-1:-1:-1;;;;;;;;27274:853:58:o;28132:148::-;28220:4;28199:12;;;28213;;;28195:31;;28238:13;;28235:39;;;28254:18;;:::i","linkReferences":{}},"methodIdentifiers":{"LIGHT_CLIENT()":"e613ae00","SYSTEM_CALLER()":"d761753e","acceptOwnership()":"79ba5097","batchWithdraw(bytes32[],bytes4[])":"19854623","declareWithdrawFiller((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256),uint256,uint256)":"74ab4a83","deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":"dd95c7c6","depositAmount()":"419759f5","getWithdrawalCount()":"781952a8","initialize(bytes,bytes,uint256)":"41260137","initialized()":"158ef93e","isOperatorMalicious(uint256)":"bafa9eb2","markMaliciousOperator((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":"5e3cc740","operator()":"570ca735","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","scriptPrefix()":"a41c5cf3","scriptSuffix()":"87f8bf56","setDepositScript(bytes,bytes)":"f8e655d2","setOperator(address)":"b3ab15fb","setSlashOrTakeScript(bytes)":"f119a9bd","slashOrTakeScript()":"5d3e3176","transferOwnership(address)":"f2fde38b","txIdToDepositId(bytes32)":"11e53a01","withdraw(bytes32,bytes4)":"8786dba7","withdrawFillers(uint256)":"c045577b","withdrawalUTXOs(uint256)":"471ba1e3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wtxId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"txId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositId\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"scriptPrefix\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"scriptSuffix\",\"type\":\"bytes\"}],\"name\":\"DepositScriptUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"}],\"name\":\"MaliciousOperatorMarked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"OperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"slashOrTakeScript\",\"type\":\"bytes\"}],\"name\":\"SlashOrTakeScriptUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawFillerId\",\"type\":\"uint256\"}],\"name\":\"WithdrawFillerDeclared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"outputId\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"struct Bridge.UTXO\",\"name\":\"utxo\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LIGHT_CLIENT\",\"outputs\":[{\"internalType\":\"contract BitcoinLightClient\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CALLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"txIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"outputIds\",\"type\":\"bytes4[]\"}],\"name\":\"batchWithdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes2\",\"name\":\"flag\",\"type\":\"bytes2\"},{\"internalType\":\"bytes\",\"name\":\"vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"witness\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"intermediate_nodes\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"block_height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct Bridge.TransactionParams\",\"name\":\"withdrawTp\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inputIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawId\",\"type\":\"uint256\"}],\"name\":\"declareWithdrawFiller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes2\",\"name\":\"flag\",\"type\":\"bytes2\"},{\"internalType\":\"bytes\",\"name\":\"vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"witness\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"intermediate_nodes\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"block_height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct Bridge.TransactionParams\",\"name\":\"moveTp\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_scriptPrefix\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_scriptSuffix\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"isOperatorMalicious\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes2\",\"name\":\"flag\",\"type\":\"bytes2\"},{\"internalType\":\"bytes\",\"name\":\"vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"witness\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"locktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"intermediate_nodes\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"block_height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct Bridge.TransactionParams\",\"name\":\"slashOrTakeTp\",\"type\":\"tuple\"}],\"name\":\"markMaliciousOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scriptPrefix\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scriptSuffix\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_scriptPrefix\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_scriptSuffix\",\"type\":\"bytes\"}],\"name\":\"setDepositScript\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_slashOrTakeScript\",\"type\":\"bytes\"}],\"name\":\"setSlashOrTakeScript\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slashOrTakeScript\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"txIdToDepositId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"outputId\",\"type\":\"bytes4\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdrawFillers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdrawalUTXOs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"txId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"outputId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Citrea\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"batchWithdraw(bytes32[],bytes4[])\":{\"details\":\"Takes in multiple Bitcoin addresses as recipient addresses should be unique\",\"params\":{\"outputIds\":\"the outputIds of the outputs in the withdrawal transactions\",\"txIds\":\"the txIds of the withdrawal transactions on Bitcoin\"}},\"declareWithdrawFiller((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256),uint256,uint256)\":{\"params\":{\"inputIndex\":\"Index of the input that is the withdrawal UTXO (withdrawing user's ANYONECANPAY)\",\"withdrawId\":\"ID of the withdrawal action\",\"withdrawTp\":\"Transaction parameters of the withdrawal transaction on Bitcoin\"}},\"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"params\":{\"moveTp\":\"Transaction parameters of the move transaction on Bitcoin\"}},\"getWithdrawalCount()\":{\"returns\":{\"_0\":\"The count of withdrawals happened so far\"}},\"initialize(bytes,bytes,uint256)\":{\"params\":{\"_depositAmount\":\"The CBTC amount that can be deposited and withdrawn\",\"_scriptPrefix\":\"First part of the deposit script expected in the witness field for all L1 deposits \",\"_scriptSuffix\":\"The suffix of the deposit script that follows the receiver address\"}},\"markMaliciousOperator((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"params\":{\"slashOrTakeTp\":\"Transaction parameters of the slashOrTake transaction on Bitcoin\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDepositScript(bytes,bytes)\":{\"details\":\"Deposit script contains a fixed script that checks signatures of verifiers and pushes EVM address of the receiver\",\"params\":{\"_scriptPrefix\":\"The new deposit script prefix\",\"_scriptSuffix\":\"The part of the deposit script that succeeds the receiver address\"}},\"setOperator(address)\":{\"params\":{\"_operator\":\"Address of the privileged operator\"}},\"setSlashOrTakeScript(bytes)\":{\"params\":{\"_slashOrTakeScript\":\"The slashOrTake script\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"withdraw(bytes32,bytes4)\":{\"params\":{\"outputId\":\"The outputId of the output in the withdrawal transaction\",\"txId\":\"The txId of the withdrawal transaction on Bitcoin\"}}},\"title\":\"Bridge contract for the Citrea end of Citrea <> Bitcoin bridge\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"batchWithdraw(bytes32[],bytes4[])\":{\"notice\":\"Batch version of `withdraw` that can accept multiple cBTC\"},\"declareWithdrawFiller((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256),uint256,uint256)\":{\"notice\":\"Stores the filler of a certain withdrawal after the a user's withdrawal is covered on Bitcoin side\"},\"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"notice\":\"Checks if the deposit amount is sent to the bridge multisig on Bitcoin, and if so, sends the deposit amount to the receiver\"},\"initialize(bytes,bytes,uint256)\":{\"notice\":\"Initializes the bridge contract and sets the deposit script\"},\"markMaliciousOperator((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))\":{\"notice\":\"Marks an operator as malicious if the operator burned their slashOrTake transaction as if they filled a withdrawal even though they didn't fill a withdrawal\"},\"setDepositScript(bytes,bytes)\":{\"notice\":\"Sets the expected deposit script of the deposit transaction on Bitcoin, contained in the witness\"},\"setOperator(address)\":{\"notice\":\"Sets the operator address that can process user deposits\"},\"setSlashOrTakeScript(bytes)\":{\"notice\":\"Sets the slashOrTake script that is expected in the witness field of the slashOrTake transaction on Bitcoin\"},\"withdraw(bytes32,bytes4)\":{\"notice\":\"Accepts 1 cBTC from the sender and inserts this withdrawal request of 1 BTC on Bitcoin into the withdrawals array so that later on can be processed by the operator \"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Bridge.sol\":\"Bridge\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/WitnessUtils.sol\":{\"keccak256\":\"0x0b0d59b4e73d6f5b4bbf1032f72bb15c2f1548c2ee319b80ae9e4c22576a70af\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://8499a5fc520941cb1b970637850cabfbc2d5a51abed824886063420c686b57de\",\"dweb:/ipfs/QmaLYLJ36PyFAaP3MgvFWW3knDsSUtVfCfs7Lp7oYFPZ1w\"]},\"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol\":{\"keccak256\":\"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc\",\"urls\":[\"bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667\",\"dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH\"]},\"lib/bitcoin-spv/solidity/contracts/BytesLib.sol\":{\"keccak256\":\"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1\",\"urls\":[\"bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6\",\"dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT\"]},\"lib/bitcoin-spv/solidity/contracts/SafeMath.sol\":{\"keccak256\":\"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3\",\"urls\":[\"bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b\",\"dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe\"]},\"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol\":{\"keccak256\":\"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b\",\"urls\":[\"bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a\",\"dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7\",\"dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"src/BitcoinLightClient.sol\":{\"keccak256\":\"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7\",\"dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf\"]},\"src/Bridge.sol\":{\"keccak256\":\"0xb9c48d4e58cab14b0cbb4932234c1e84143ca3bdf67ba1b985af4b26de8e845e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b25ff320f3e6becded6328f05027344197ead447f2ea5bcb060e795ae5999069\",\"dweb:/ipfs/QmaK736wv3SRmHkEJowc1jy9vhVkUeGtqG5oUugCf3dHPb\"]},\"src/interfaces/IBitcoinLightClient.sol\":{\"keccak256\":\"0xd299a79b3aec00e07839b7dcbed21d3d7d50e26c0149e730170f7761202552ca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8cfcbc8fe666020b8a707d062e296dcf159737645a8c677975bad71b456b4ad\",\"dweb:/ipfs/QmSuDCXJFYpRpTXdiWVVwvm69yzmTZj7zMLmRPNazRR4dj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"bytes32","name":"wtxId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"txId","type":"bytes32","indexed":false},{"internalType":"address","name":"recipient","type":"address","indexed":false},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false},{"internalType":"uint256","name":"depositId","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"bytes","name":"scriptPrefix","type":"bytes","indexed":false},{"internalType":"bytes","name":"scriptSuffix","type":"bytes","indexed":false}],"type":"event","name":"DepositScriptUpdate","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"uint256","name":"operatorId","type":"uint256","indexed":false}],"type":"event","name":"MaliciousOperatorMarked","anonymous":false},{"inputs":[{"internalType":"address","name":"oldOperator","type":"address","indexed":false},{"internalType":"address","name":"newOperator","type":"address","indexed":false}],"type":"event","name":"OperatorUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferStarted","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes","name":"slashOrTakeScript","type":"bytes","indexed":false}],"type":"event","name":"SlashOrTakeScriptUpdate","anonymous":false},{"inputs":[{"internalType":"uint256","name":"withdrawId","type":"uint256","indexed":false},{"internalType":"uint256","name":"withdrawFillerId","type":"uint256","indexed":false}],"type":"event","name":"WithdrawFillerDeclared","anonymous":false},{"inputs":[{"internalType":"struct Bridge.UTXO","name":"utxo","type":"tuple","components":[{"internalType":"bytes32","name":"txId","type":"bytes32"},{"internalType":"bytes4","name":"outputId","type":"bytes4"}],"indexed":false},{"internalType":"uint256","name":"index","type":"uint256","indexed":false},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"LIGHT_CLIENT","outputs":[{"internalType":"contract BitcoinLightClient","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CALLER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptOwnership"},{"inputs":[{"internalType":"bytes32[]","name":"txIds","type":"bytes32[]"},{"internalType":"bytes4[]","name":"outputIds","type":"bytes4[]"}],"stateMutability":"payable","type":"function","name":"batchWithdraw"},{"inputs":[{"internalType":"struct Bridge.TransactionParams","name":"withdrawTp","type":"tuple","components":[{"internalType":"bytes4","name":"version","type":"bytes4"},{"internalType":"bytes2","name":"flag","type":"bytes2"},{"internalType":"bytes","name":"vin","type":"bytes"},{"internalType":"bytes","name":"vout","type":"bytes"},{"internalType":"bytes","name":"witness","type":"bytes"},{"internalType":"bytes4","name":"locktime","type":"bytes4"},{"internalType":"bytes","name":"intermediate_nodes","type":"bytes"},{"internalType":"uint256","name":"block_height","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}]},{"internalType":"uint256","name":"inputIndex","type":"uint256"},{"internalType":"uint256","name":"withdrawId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"declareWithdrawFiller"},{"inputs":[{"internalType":"struct Bridge.TransactionParams","name":"moveTp","type":"tuple","components":[{"internalType":"bytes4","name":"version","type":"bytes4"},{"internalType":"bytes2","name":"flag","type":"bytes2"},{"internalType":"bytes","name":"vin","type":"bytes"},{"internalType":"bytes","name":"vout","type":"bytes"},{"internalType":"bytes","name":"witness","type":"bytes"},{"internalType":"bytes4","name":"locktime","type":"bytes4"},{"internalType":"bytes","name":"intermediate_nodes","type":"bytes"},{"internalType":"uint256","name":"block_height","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[],"stateMutability":"view","type":"function","name":"depositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"_scriptPrefix","type":"bytes"},{"internalType":"bytes","name":"_scriptSuffix","type":"bytes"},{"internalType":"uint256","name":"_depositAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"isOperatorMalicious","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct Bridge.TransactionParams","name":"slashOrTakeTp","type":"tuple","components":[{"internalType":"bytes4","name":"version","type":"bytes4"},{"internalType":"bytes2","name":"flag","type":"bytes2"},{"internalType":"bytes","name":"vin","type":"bytes"},{"internalType":"bytes","name":"vout","type":"bytes"},{"internalType":"bytes","name":"witness","type":"bytes"},{"internalType":"bytes4","name":"locktime","type":"bytes4"},{"internalType":"bytes","name":"intermediate_nodes","type":"bytes"},{"internalType":"uint256","name":"block_height","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"markMaliciousOperator"},{"inputs":[],"stateMutability":"view","type":"function","name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"scriptPrefix","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"scriptSuffix","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"bytes","name":"_scriptPrefix","type":"bytes"},{"internalType":"bytes","name":"_scriptSuffix","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setDepositScript"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOperator"},{"inputs":[{"internalType":"bytes","name":"_slashOrTakeScript","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setSlashOrTakeScript"},{"inputs":[],"stateMutability":"view","type":"function","name":"slashOrTakeScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"txIdToDepositId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"txId","type":"bytes32"},{"internalType":"bytes4","name":"outputId","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawFillers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawalUTXOs","outputs":[{"internalType":"bytes32","name":"txId","type":"bytes32"},{"internalType":"bytes4","name":"outputId","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"batchWithdraw(bytes32[],bytes4[])":{"details":"Takes in multiple Bitcoin addresses as recipient addresses should be unique","params":{"outputIds":"the outputIds of the outputs in the withdrawal transactions","txIds":"the txIds of the withdrawal transactions on Bitcoin"}},"declareWithdrawFiller((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256),uint256,uint256)":{"params":{"inputIndex":"Index of the input that is the withdrawal UTXO (withdrawing user's ANYONECANPAY)","withdrawId":"ID of the withdrawal action","withdrawTp":"Transaction parameters of the withdrawal transaction on Bitcoin"}},"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"params":{"moveTp":"Transaction parameters of the move transaction on Bitcoin"}},"getWithdrawalCount()":{"returns":{"_0":"The count of withdrawals happened so far"}},"initialize(bytes,bytes,uint256)":{"params":{"_depositAmount":"The CBTC amount that can be deposited and withdrawn","_scriptPrefix":"First part of the deposit script expected in the witness field for all L1 deposits ","_scriptSuffix":"The suffix of the deposit script that follows the receiver address"}},"markMaliciousOperator((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"params":{"slashOrTakeTp":"Transaction parameters of the slashOrTake transaction on Bitcoin"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setDepositScript(bytes,bytes)":{"details":"Deposit script contains a fixed script that checks signatures of verifiers and pushes EVM address of the receiver","params":{"_scriptPrefix":"The new deposit script prefix","_scriptSuffix":"The part of the deposit script that succeeds the receiver address"}},"setOperator(address)":{"params":{"_operator":"Address of the privileged operator"}},"setSlashOrTakeScript(bytes)":{"params":{"_slashOrTakeScript":"The slashOrTake script"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"withdraw(bytes32,bytes4)":{"params":{"outputId":"The outputId of the output in the withdrawal transaction","txId":"The txId of the withdrawal transaction on Bitcoin"}}},"version":1},"userdoc":{"kind":"user","methods":{"batchWithdraw(bytes32[],bytes4[])":{"notice":"Batch version of `withdraw` that can accept multiple cBTC"},"declareWithdrawFiller((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256),uint256,uint256)":{"notice":"Stores the filler of a certain withdrawal after the a user's withdrawal is covered on Bitcoin side"},"deposit((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"notice":"Checks if the deposit amount is sent to the bridge multisig on Bitcoin, and if so, sends the deposit amount to the receiver"},"initialize(bytes,bytes,uint256)":{"notice":"Initializes the bridge contract and sets the deposit script"},"markMaliciousOperator((bytes4,bytes2,bytes,bytes,bytes,bytes4,bytes,uint256,uint256))":{"notice":"Marks an operator as malicious if the operator burned their slashOrTake transaction as if they filled a withdrawal even though they didn't fill a withdrawal"},"setDepositScript(bytes,bytes)":{"notice":"Sets the expected deposit script of the deposit transaction on Bitcoin, contained in the witness"},"setOperator(address)":{"notice":"Sets the operator address that can process user deposits"},"setSlashOrTakeScript(bytes)":{"notice":"Sets the slashOrTake script that is expected in the witness field of the slashOrTake transaction on Bitcoin"},"withdraw(bytes32,bytes4)":{"notice":"Accepts 1 cBTC from the sender and inserts this withdrawal request of 1 BTC on Bitcoin into the withdrawals array so that later on can be processed by the operator "}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/Bridge.sol":"Bridge"},"evmVersion":"paris","libraries":{}},"sources":{"lib/WitnessUtils.sol":{"keccak256":"0x0b0d59b4e73d6f5b4bbf1032f72bb15c2f1548c2ee319b80ae9e4c22576a70af","urls":["bzz-raw://8499a5fc520941cb1b970637850cabfbc2d5a51abed824886063420c686b57de","dweb:/ipfs/QmaLYLJ36PyFAaP3MgvFWW3knDsSUtVfCfs7Lp7oYFPZ1w"],"license":"LGPL-3.0-or-later"},"lib/bitcoin-spv/solidity/contracts/BTCUtils.sol":{"keccak256":"0x439eaa97e9239705f3d31e8d39dccbad32311f1f119e295d53c65e0ae3c5a5fc","urls":["bzz-raw://976a361a89c21afc44b5e0a552271d9288b12cf34a9925c25f3c6975ece4e667","dweb:/ipfs/QmNTb4eJyxV5iZj8RJGFBGSKXWsuvoMYqLLBgk16dhWePH"],"license":null},"lib/bitcoin-spv/solidity/contracts/BytesLib.sol":{"keccak256":"0x43e0f3b3b23c861bd031588bf410dfdd02e2af17941a89aa38d70e534e0380d1","urls":["bzz-raw://76011d699a8b229dbfdc698b3ece658daad9d96778e86d679aa576bc966209d6","dweb:/ipfs/QmRZEWAeRQtsTUvfzEd1jb2wAqpTNR5KAme92gBRn4SYiT"],"license":null},"lib/bitcoin-spv/solidity/contracts/SafeMath.sol":{"keccak256":"0x35930d982394c7ffde439b82e5e696c5b21a6f09699d44861dfe409ef64084a3","urls":["bzz-raw://090e9d78755d4916fa2f5f5d8f9fd2fc59bfc5a25a5e91636a92c4c07aee9c6b","dweb:/ipfs/QmXfz4TPDvgnuYz9eS5AL87GfCLxHQZJV1Y8ieJU9M8yTe"],"license":null},"lib/bitcoin-spv/solidity/contracts/ValidateSPV.sol":{"keccak256":"0xce3febbf3ad3a7ff8a8effd0c7ccaf7ccfa2719578b537d49ea196f0bae8062b","urls":["bzz-raw://5f18942483bf20507ae6c0abb5421df96b1aebb7af15f541bda8470f6277312a","dweb:/ipfs/QmPzEpA8w5k6pVFadm3UCLqNdxFAjPwP9Lpi5HMQsQg52J"],"license":null},"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"keccak256":"0xbca4a4f66d98028293dba695851d1b20d3e0ba2fff7453fb241f192fa3fc6b6f","urls":["bzz-raw://013b3cfd9d1e34dad409c3b9a340860e8651e61cda509de33599fb5102f62fe7","dweb:/ipfs/QmTVjDKofM9Nst8w8LAA3HHgi1eCnGYBpFb7Nbat71e2xz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"src/BitcoinLightClient.sol":{"keccak256":"0x9c8acc0e16c7a02b3328bf41cf08922b43f1eaf780199a0cf4aefac61ad2528c","urls":["bzz-raw://ac95a3440699da490d6830aec1ad4d515d7bba605be570767b39cf7fbdd182e7","dweb:/ipfs/QmUt8FcufKn5afs1n2cf2JF1wwti1pDSaNnxDzJNRcqyWf"],"license":"MIT"},"src/Bridge.sol":{"keccak256":"0xb9c48d4e58cab14b0cbb4932234c1e84143ca3bdf67ba1b985af4b26de8e845e","urls":["bzz-raw://b25ff320f3e6becded6328f05027344197ead447f2ea5bcb060e795ae5999069","dweb:/ipfs/QmaK736wv3SRmHkEJowc1jy9vhVkUeGtqG5oUugCf3dHPb"],"license":"UNLICENSED"},"src/interfaces/IBitcoinLightClient.sol":{"keccak256":"0xd299a79b3aec00e07839b7dcbed21d3d7d50e26c0149e730170f7761202552ca","urls":["bzz-raw://d8cfcbc8fe666020b8a707d062e296dcf159737645a8c677975bad71b456b4ad","dweb:/ipfs/QmSuDCXJFYpRpTXdiWVVwvm69yzmTZj7zMLmRPNazRR4dj"],"license":"MIT"}},"version":1},"id":46} \ No newline at end of file diff --git a/crates/evm/src/evm/system_contracts/out/ProxyAdmin.sol/ProxyAdmin.json b/crates/evm/src/evm/system_contracts/out/ProxyAdmin.sol/ProxyAdmin.json index b620669c5..ae232a343 100644 --- a/crates/evm/src/evm/system_contracts/out/ProxyAdmin.sol/ProxyAdmin.json +++ b/crates/evm/src/evm/system_contracts/out/ProxyAdmin.sol/ProxyAdmin.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"changeProxyAdmin","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"newAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getProxyAdmin","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getProxyImplementation","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgrade","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeAndCall","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"implementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b50601733601b565b606b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61065e8061007a6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b03831681526000602060406020840152835180604085015260005b8181101561063c57858101830151858201606001528201610620565b506000606082860101526060601f19601f83011685010192505050939250505056","sourceMap":"450:2409:35:-:0;;;;;;;;;;;;-1:-1:-1;936:32:28;734:10:38;936:18:28;:32::i;:::-;450:2409:35;;2426:187:28;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:28;;;-1:-1:-1;;;;;;2534:17:28;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;450:2409:35:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b03831681526000602060406020840152835180604085015260005b8181101561063c57858101830151858201606001528201610620565b506000606082860101526060601f19601f83011685010192505050939250505056","sourceMap":"450:2409:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;650:438;;;;;;;;;;-1:-1:-1;650:438:35;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;664:32:48;;;646:51;;634:2;619:18;650:438:35;;;;;;;1824:101:28;;;;;;;;;;;;;:::i;:::-;;1842:149:35;;;;;;;;;;-1:-1:-1;1842:149:35;;;;;:::i;:::-;;:::i;1201:85:28:-;;;;;;;;;;-1:-1:-1;1247:7:28;1273:6;-1:-1:-1;;;;;1273:6:28;1201:85;;2612:245:35;;;;;;:::i;:::-;;:::i;2196:150::-;;;;;;;;;;-1:-1:-1;2196:150:35;;;;;:::i;:::-;;:::i;2074:198:28:-;;;;;;;;;;-1:-1:-1;2074:198:28;;;;;:::i;:::-;;:::i;1248:420:35:-;;;;;;;;;;-1:-1:-1;1248:420:35;;;;;:::i;:::-;;:::i;650:438::-;747:7;924:12;938:23;973:5;-1:-1:-1;;;;;965:25:35;:40;;;;-1:-1:-1;;;3114:33:48;;3172:1;3163:11;;2913:267;965:40:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:82;;;;1023:7;1015:16;;;;;;1059:10;1048:33;;;;;;;;;;;;:::i;:::-;1041:40;650:438;-1:-1:-1;;;;650:438:35:o;1824:101:28:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1842:149:35:-;1094:13:28;:11;:13::i;:::-;1957:27:35::1;::::0;-1:-1:-1;;;1957:27:35;;-1:-1:-1;;;;;664:32:48;;;1957:27:35::1;::::0;::::1;646:51:48::0;1957:17:35;::::1;::::0;::::1;::::0;619:18:48;;1957:27:35::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1842:149:::0;;:::o;2612:245::-;1094:13:28;:11;:13::i;:::-;2788:62:35::1;::::0;-1:-1:-1;;;2788:62:35;;-1:-1:-1;;;;;2788:22:35;::::1;::::0;::::1;::::0;2818:9:::1;::::0;2788:62:::1;::::0;2829:14;;2845:4;;2788:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2612:245:::0;;;:::o;2196:150::-;1094:13:28;:11;:13::i;:::-;2308:31:35::1;::::0;-1:-1:-1;;;2308:31:35;;-1:-1:-1;;;;;664:32:48;;;2308:31:35::1;::::0;::::1;646:51:48::0;2308:15:35;::::1;::::0;::::1;::::0;619:18:48;;2308:31:35::1;500:203:48::0;2074:198:28;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:28;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:28;;4329:2:48;2154:73:28::1;::::0;::::1;4311:21:48::0;4368:2;4348:18;;;4341:30;4407:34;4387:18;;;4380:62;-1:-1:-1;;;4458:18:48;;;4451:36;4504:19;;2154:73:28::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1248:420:35:-;1336:7;1504:12;1518:23;1553:5;-1:-1:-1;;;;;1545:25:35;:40;;;;-1:-1:-1;;;4735:33:48;;4793:1;4784:11;;4534:267;1359:130:28;1247:7;1273:6;-1:-1:-1;;;;;1273:6:28;734:10:38;1422:23:28;1414:68;;;;-1:-1:-1;;;1414:68:28;;5008:2:48;1414:68:28;;;4990:21:48;;;5027:18;;;5020:30;5086:34;5066:18;;;5059:62;5138:18;;1414:68:28;4806:356:48;2426:187:28;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:28;;;-1:-1:-1;;;;;;2534:17:28;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:161:48:-;-1:-1:-1;;;;;119:31:48;;109:42;;99:70;;165:1;162;155:12;180:315;277:6;330:2;318:9;309:7;305:23;301:32;298:52;;;346:1;343;336:12;298:52;385:9;372:23;404:61;459:5;404:61;:::i;:::-;484:5;180:315;-1:-1:-1;;;180:315:48:o;708:486::-;814:6;822;875:2;863:9;854:7;850:23;846:32;843:52;;;891:1;888;881:12;843:52;930:9;917:23;949:61;1004:5;949:61;:::i;:::-;1029:5;-1:-1:-1;1086:2:48;1071:18;;1058:32;1099:63;1058:32;1099:63;:::i;:::-;1181:7;1171:17;;;708:486;;;;;:::o;1199:127::-;1260:10;1255:3;1251:20;1248:1;1241:31;1291:4;1288:1;1281:15;1315:4;1312:1;1305:15;1331:1295;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1579:9;1566:23;1598:61;1653:5;1598:61;:::i;:::-;1678:5;-1:-1:-1;1735:2:48;1720:18;;1707:32;1748:63;1707:32;1748:63;:::i;:::-;1830:7;-1:-1:-1;1888:2:48;1873:18;;1860:32;1911:18;1941:14;;;1938:34;;;1968:1;1965;1958:12;1938:34;2006:6;1995:9;1991:22;1981:32;;2051:7;2044:4;2040:2;2036:13;2032:27;2022:55;;2073:1;2070;2063:12;2022:55;2109:2;2096:16;2131:2;2127;2124:10;2121:36;;;2137:18;;:::i;:::-;2212:2;2206:9;2180:2;2266:13;;-1:-1:-1;;2262:22:48;;;2286:2;2258:31;2254:40;2242:53;;;2310:18;;;2330:22;;;2307:46;2304:72;;;2356:18;;:::i;:::-;2396:10;2392:2;2385:22;2431:2;2423:6;2416:18;2471:7;2466:2;2461;2457;2453:11;2449:20;2446:33;2443:53;;;2492:1;2489;2482:12;2443:53;2548:2;2543;2539;2535:11;2530:2;2522:6;2518:15;2505:46;2593:1;2588:2;2583;2575:6;2571:15;2567:24;2560:35;2614:6;2604:16;;;;;;;1331:1295;;;;;:::o;3185:289::-;3263:6;3316:2;3304:9;3295:7;3291:23;3287:32;3284:52;;;3332:1;3329;3322:12;3284:52;3364:9;3358:16;3383:61;3438:5;3383:61;:::i;3479:643::-;3683:1;3679;3674:3;3670:11;3666:19;3658:6;3654:32;3643:9;3636:51;3617:4;3706:2;3744;3739;3728:9;3724:18;3717:30;3776:6;3770:13;3819:6;3814:2;3803:9;3799:18;3792:34;3844:1;3854:140;3868:6;3865:1;3862:13;3854:140;;;3963:14;;;3959:23;;3953:30;3929:17;;;3948:2;3925:26;3918:66;3883:10;;3854:140;;;3858:3;4043:1;4038:2;4029:6;4018:9;4014:22;4010:31;4003:42;4113:2;4106;4102:7;4097:2;4089:6;4085:15;4081:29;4070:9;4066:45;4062:54;4054:62;;;;3479:643;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263\",\"dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2\",\"dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x8e99882a991853dc446278576c8cb9b3a5ded84642e9bcc917b1677807c2f18c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310153c1a4c739002ffbc1351ed1dd7488a0d20f5dd816353332fc2c1d81e0a3\",\"dweb:/ipfs/QmcvwXQVUBRTEAoNcvwSVFmhpHUXQ21s2Hfj79hq2uQNVM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a45c64b97311fabbcbe8dad7e94fa89e06a7f96060d5565326ef706f5f239017\",\"dweb:/ipfs/QmeU2jiBGbHhz9DqRotjbpAx5s2xExDSRQtSD5ENjuHzDq\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da\",\"dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeProxyAdmin"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgrade"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeAndCall"}],"devdoc":{"kind":"dev","methods":{"changeProxyAdmin(address,address)":{"details":"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`."},"getProxyAdmin(address)":{"details":"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"getProxyImplementation(address)":{"details":"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"details":"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`."},"upgradeAndCall(address,address,bytes)":{"details":"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":"ProxyAdmin"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90","urls":["bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263","dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff","urls":["bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688","dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d","urls":["bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5","dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"keccak256":"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2","urls":["bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2","dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27","urls":["bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472","dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0x8e99882a991853dc446278576c8cb9b3a5ded84642e9bcc917b1677807c2f18c","urls":["bzz-raw://310153c1a4c739002ffbc1351ed1dd7488a0d20f5dd816353332fc2c1d81e0a3","dweb:/ipfs/QmcvwXQVUBRTEAoNcvwSVFmhpHUXQ21s2Hfj79hq2uQNVM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689","urls":["bzz-raw://a45c64b97311fabbcbe8dad7e94fa89e06a7f96060d5565326ef706f5f239017","dweb:/ipfs/QmeU2jiBGbHhz9DqRotjbpAx5s2xExDSRQtSD5ENjuHzDq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899","urls":["bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da","dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q"],"license":"MIT"}},"version":1},"id":35} \ No newline at end of file +{"abi":[{"type":"function","name":"changeProxyAdmin","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"newAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getProxyAdmin","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getProxyImplementation","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgrade","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeAndCall","inputs":[{"name":"proxy","type":"address","internalType":"contract ITransparentUpgradeableProxy"},{"name":"implementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b50601733601b565b606b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106648061007a6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105ea565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c99086908690600401610607565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff81111561055857600080fd5b8401601f8101861361056957600080fd5b803567ffffffffffffffff811115610583576105836104f6565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156105b2576105b26104f6565b6040528181528282016020018810156105ca57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156105fc57600080fd5b81516104b681610484565b60018060a01b0383168152604060208201526000825180604084015260005b818110156106435760208186018101516060868401015201610626565b506000606082850101526060601f19601f830116840101915050939250505056","sourceMap":"450:2409:39:-:0;;;;;;;;;;;;-1:-1:-1;936:32:32;734:10:42;936:18:32;:32::i;:::-;450:2409:39;;2426:187:32;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:32;;;-1:-1:-1;;;;;;2534:17:32;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;450:2409:39:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105ea565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c99086908690600401610607565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff81111561055857600080fd5b8401601f8101861361056957600080fd5b803567ffffffffffffffff811115610583576105836104f6565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156105b2576105b26104f6565b6040528181528282016020018810156105ca57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156105fc57600080fd5b81516104b681610484565b60018060a01b0383168152604060208201526000825180604084015260005b818110156106435760208186018101516060868401015201610626565b506000606082850101526060601f19601f830116840101915050939250505056","sourceMap":"450:2409:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;650:438;;;;;;;;;;-1:-1:-1;650:438:39;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;664:32:58;;;646:51;;634:2;619:18;650:438:39;;;;;;;1824:101:32;;;;;;;;;;;;;:::i;:::-;;1842:149:39;;;;;;;;;;-1:-1:-1;1842:149:39;;;;;:::i;:::-;;:::i;1201:85:32:-;;;;;;;;;;-1:-1:-1;1247:7:32;1273:6;-1:-1:-1;;;;;1273:6:32;1201:85;;2612:245:39;;;;;;:::i;:::-;;:::i;2196:150::-;;;;;;;;;;-1:-1:-1;2196:150:39;;;;;:::i;:::-;;:::i;2074:198:32:-;;;;;;;;;;-1:-1:-1;2074:198:32;;;;;:::i;:::-;;:::i;1248:420:39:-;;;;;;;;;;-1:-1:-1;1248:420:39;;;;;:::i;:::-;;:::i;650:438::-;747:7;924:12;938:23;973:5;-1:-1:-1;;;;;965:25:39;:40;;;;-1:-1:-1;;;3137:33:58;;3195:1;3186:11;;2936:267;965:40:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:82;;;;1023:7;1015:16;;;;;;1059:10;1048:33;;;;;;;;;;;;:::i;:::-;1041:40;650:438;-1:-1:-1;;;;650:438:39:o;1824:101:32:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1842:149:39:-;1094:13:32;:11;:13::i;:::-;1957:27:39::1;::::0;-1:-1:-1;;;1957:27:39;;-1:-1:-1;;;;;664:32:58;;;1957:27:39::1;::::0;::::1;646:51:58::0;1957:17:39;::::1;::::0;::::1;::::0;619:18:58;;1957:27:39::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1842:149:::0;;:::o;2612:245::-;1094:13:32;:11;:13::i;:::-;2788:62:39::1;::::0;-1:-1:-1;;;2788:62:39;;-1:-1:-1;;;;;2788:22:39;::::1;::::0;::::1;::::0;2818:9:::1;::::0;2788:62:::1;::::0;2829:14;;2845:4;;2788:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2612:245:::0;;;:::o;2196:150::-;1094:13:32;:11;:13::i;:::-;2308:31:39::1;::::0;-1:-1:-1;;;2308:31:39;;-1:-1:-1;;;;;664:32:58;;;2308:31:39::1;::::0;::::1;646:51:58::0;2308:15:39;::::1;::::0;::::1;::::0;619:18:58;;2308:31:39::1;500:203:58::0;2074:198:32;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:32;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:32;;4331:2:58;2154:73:32::1;::::0;::::1;4313:21:58::0;4370:2;4350:18;;;4343:30;4409:34;4389:18;;;4382:62;-1:-1:-1;;;4460:18:58;;;4453:36;4506:19;;2154:73:32::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1248:420:39:-;1336:7;1504:12;1518:23;1553:5;-1:-1:-1;;;;;1545:25:39;:40;;;;-1:-1:-1;;;4737:33:58;;4795:1;4786:11;;4536:267;1359:130:32;1247:7;1273:6;-1:-1:-1;;;;;1273:6:32;734:10:42;1422:23:32;1414:68;;;;-1:-1:-1;;;1414:68:32;;5010:2:58;1414:68:32;;;4992:21:58;;;5029:18;;;5022:30;5088:34;5068:18;;;5061:62;5140:18;;1414:68:32;4808:356:58;2426:187:32;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:32;;;-1:-1:-1;;;;;;2534:17:32;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;14:161:58:-;-1:-1:-1;;;;;119:31:58;;109:42;;99:70;;165:1;162;155:12;180:315;277:6;330:2;318:9;309:7;305:23;301:32;298:52;;;346:1;343;336:12;298:52;385:9;372:23;404:61;459:5;404:61;:::i;:::-;484:5;180:315;-1:-1:-1;;;180:315:58:o;708:486::-;814:6;822;875:2;863:9;854:7;850:23;846:32;843:52;;;891:1;888;881:12;843:52;930:9;917:23;949:61;1004:5;949:61;:::i;:::-;1029:5;-1:-1:-1;1086:2:58;1071:18;;1058:32;1099:63;1058:32;1099:63;:::i;:::-;1181:7;1171:17;;;708:486;;;;;:::o;1199:127::-;1260:10;1255:3;1251:20;1248:1;1241:31;1291:4;1288:1;1281:15;1315:4;1312:1;1305:15;1331:1318;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1579:9;1566:23;1598:61;1653:5;1598:61;:::i;:::-;1678:5;-1:-1:-1;1735:2:58;1720:18;;1707:32;1748:63;1707:32;1748:63;:::i;:::-;1830:7;-1:-1:-1;1888:2:58;1873:18;;1860:32;1915:18;1904:30;;1901:50;;;1947:1;1944;1937:12;1901:50;1970:22;;2023:4;2015:13;;2011:27;-1:-1:-1;2001:55:58;;2052:1;2049;2042:12;2001:55;2092:2;2079:16;2118:18;2110:6;2107:30;2104:56;;;2140:18;;:::i;:::-;2189:2;2183:9;2281:2;2243:17;;-1:-1:-1;;2239:31:58;;;2272:2;2235:40;2231:54;2219:67;;2316:18;2301:34;;2337:22;;;2298:62;2295:88;;;2363:18;;:::i;:::-;2399:2;2392:22;2423;;;2464:15;;;2481:2;2460:24;2457:37;-1:-1:-1;2454:57:58;;;2507:1;2504;2497:12;2454:57;2563:6;2558:2;2554;2550:11;2545:2;2537:6;2533:15;2520:50;2616:1;2611:2;2602:6;2594;2590:19;2586:28;2579:39;2637:6;2627:16;;;;;1331:1318;;;;;:::o;3208:289::-;3286:6;3339:2;3327:9;3318:7;3314:23;3310:32;3307:52;;;3355:1;3352;3345:12;3307:52;3387:9;3381:16;3406:61;3461:5;3406:61;:::i;3502:622::-;3706:1;3702;3697:3;3693:11;3689:19;3681:6;3677:32;3666:9;3659:51;3746:2;3741;3730:9;3726:18;3719:30;3640:4;3778:6;3772:13;3821:6;3816:2;3805:9;3801:18;3794:34;3846:1;3856:140;3870:6;3867:1;3864:13;3856:140;;;3981:2;3965:14;;;3961:23;;3955:30;3950:2;3931:17;;;3927:26;3920:66;3885:10;3856:140;;;3860:3;4045:1;4040:2;4031:6;4020:9;4016:22;4012:31;4005:42;4115:2;4108;4104:7;4099:2;4091:6;4087:15;4083:29;4072:9;4068:45;4064:54;4056:62;;;3502:622;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ITransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":bitcoin-spv/=lib/bitcoin-spv/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263\",\"dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2\",\"dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x8e99882a991853dc446278576c8cb9b3a5ded84642e9bcc917b1677807c2f18c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310153c1a4c739002ffbc1351ed1dd7488a0d20f5dd816353332fc2c1d81e0a3\",\"dweb:/ipfs/QmcvwXQVUBRTEAoNcvwSVFmhpHUXQ21s2Hfj79hq2uQNVM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a45c64b97311fabbcbe8dad7e94fa89e06a7f96060d5565326ef706f5f239017\",\"dweb:/ipfs/QmeU2jiBGbHhz9DqRotjbpAx5s2xExDSRQtSD5ENjuHzDq\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da\",\"dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeProxyAdmin"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgrade"},{"inputs":[{"internalType":"contract ITransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeAndCall"}],"devdoc":{"kind":"dev","methods":{"changeProxyAdmin(address,address)":{"details":"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`."},"getProxyAdmin(address)":{"details":"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"getProxyImplementation(address)":{"details":"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"details":"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`."},"upgradeAndCall(address,address,bytes)":{"details":"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","bitcoin-spv/=lib/bitcoin-spv/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":"ProxyAdmin"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90","urls":["bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263","dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff","urls":["bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688","dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d","urls":["bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5","dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"keccak256":"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2","urls":["bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2","dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27","urls":["bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472","dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0x8e99882a991853dc446278576c8cb9b3a5ded84642e9bcc917b1677807c2f18c","urls":["bzz-raw://310153c1a4c739002ffbc1351ed1dd7488a0d20f5dd816353332fc2c1d81e0a3","dweb:/ipfs/QmcvwXQVUBRTEAoNcvwSVFmhpHUXQ21s2Hfj79hq2uQNVM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689","urls":["bzz-raw://a45c64b97311fabbcbe8dad7e94fa89e06a7f96060d5565326ef706f5f239017","dweb:/ipfs/QmeU2jiBGbHhz9DqRotjbpAx5s2xExDSRQtSD5ENjuHzDq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899","urls":["bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da","dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q"],"license":"MIT"}},"version":1},"id":39} \ No newline at end of file diff --git a/crates/evm/src/evm/system_contracts/src/Bridge.sol b/crates/evm/src/evm/system_contracts/src/Bridge.sol index 8519db577..ee0278580 100644 --- a/crates/evm/src/evm/system_contracts/src/Bridge.sol +++ b/crates/evm/src/evm/system_contracts/src/Bridge.sol @@ -14,7 +14,7 @@ contract Bridge is Ownable2StepUpgradeable { using BTCUtils for bytes; using BytesLib for bytes; - struct DepositParams { + struct TransactionParams { bytes4 version; bytes2 flag; bytes vin; @@ -26,23 +26,33 @@ contract Bridge is Ownable2StepUpgradeable { uint256 index; } + struct UTXO { + bytes32 txId; + bytes4 outputId; + } + BitcoinLightClient public constant LIGHT_CLIENT = BitcoinLightClient(address(0x3100000000000000000000000000000000000001)); address public constant SYSTEM_CALLER = address(0xdeaDDeADDEaDdeaDdEAddEADDEAdDeadDEADDEaD); bool public initialized; - uint256 public constant DEPOSIT_AMOUNT = 0.01 ether; address public operator; - uint256 public requiredSigsCount; - bytes public depositScript; + bool[1000] public isOperatorMalicious; + uint256 public depositAmount; + uint256 currentDepositId; + bytes public scriptPrefix; bytes public scriptSuffix; + bytes public slashOrTakeScript; + UTXO[] public withdrawalUTXOs; + mapping(bytes32 => uint256) public txIdToDepositId; + mapping(uint256 => uint256) public withdrawFillers; - mapping(bytes32 => bool) public spentWtxIds; - bytes32[] public withdrawalAddrs; - - event Deposit(bytes32 wtxId, address recipient, uint256 timestamp); - event Withdrawal(bytes32 bitcoin_address, uint256 index, uint256 timestamp); - event DepositScriptUpdate(bytes depositScript, bytes scriptSuffix, uint256 requiredSigsCount); + event Deposit(bytes32 wtxId, bytes32 txId, address recipient, uint256 timestamp, uint256 depositId); + event Withdrawal(UTXO utxo, uint256 index, uint256 timestamp); + event DepositScriptUpdate(bytes scriptPrefix, bytes scriptSuffix); event OperatorUpdated(address oldOperator, address newOperator); + event WithdrawFillerDeclared(uint256 withdrawId, uint256 withdrawFillerId); + event MaliciousOperatorMarked(uint256 operatorId); + event SlashOrTakeScriptUpdate(bytes slashOrTakeScript); modifier onlySystem() { require(msg.sender == SYSTEM_CALLER, "caller is not the system caller"); @@ -55,108 +65,118 @@ contract Bridge is Ownable2StepUpgradeable { } /// @notice Initializes the bridge contract and sets the deposit script - /// @param _depositScript The deposit script expected in the witness field for all L1 deposits + /// @param _scriptPrefix First part of the deposit script expected in the witness field for all L1 deposits /// @param _scriptSuffix The suffix of the deposit script that follows the receiver address - /// @param _requiredSigsCount The number of signatures that is contained in the deposit script - function initialize(bytes calldata _depositScript, bytes calldata _scriptSuffix, uint256 _requiredSigsCount) external onlySystem { + /// @param _depositAmount The CBTC amount that can be deposited and withdrawn + function initialize(bytes calldata _scriptPrefix, bytes calldata _scriptSuffix, uint256 _depositAmount) external onlySystem { require(!initialized, "Contract is already initialized"); - require(_requiredSigsCount != 0, "Verifier count cannot be 0"); - require(_depositScript.length != 0, "Deposit script cannot be empty"); + require(_depositAmount != 0, "Deposit amount cannot be 0"); + require(_scriptPrefix.length != 0, "Deposit script cannot be empty"); initialized = true; - depositScript = _depositScript; + scriptPrefix = _scriptPrefix; scriptSuffix = _scriptSuffix; - requiredSigsCount = _requiredSigsCount; + depositAmount = _depositAmount; // Set initial operator to SYSTEM_CALLER so that Citrea can get operational by starting to process deposits operator = SYSTEM_CALLER; emit OperatorUpdated(address(0), SYSTEM_CALLER); - emit DepositScriptUpdate(_depositScript, _scriptSuffix, _requiredSigsCount); + emit DepositScriptUpdate(_scriptPrefix, _scriptSuffix); } /// @notice Sets the expected deposit script of the deposit transaction on Bitcoin, contained in the witness /// @dev Deposit script contains a fixed script that checks signatures of verifiers and pushes EVM address of the receiver - /// @param _depositScript The new deposit script + /// @param _scriptPrefix The new deposit script prefix /// @param _scriptSuffix The part of the deposit script that succeeds the receiver address - /// @param _requiredSigsCount The number of signatures that are needed for deposit transaction - function setDepositScript(bytes calldata _depositScript, bytes calldata _scriptSuffix, uint256 _requiredSigsCount) external onlyOwner { - require(_requiredSigsCount != 0, "Verifier count cannot be 0"); - require(_depositScript.length != 0, "Deposit script cannot be empty"); + function setDepositScript(bytes calldata _scriptPrefix, bytes calldata _scriptSuffix) external onlyOwner { + require(_scriptPrefix.length != 0, "Deposit script cannot be empty"); - depositScript = _depositScript; + scriptPrefix = _scriptPrefix; scriptSuffix = _scriptSuffix; - requiredSigsCount = _requiredSigsCount; - emit DepositScriptUpdate(_depositScript, _scriptSuffix, _requiredSigsCount); + emit DepositScriptUpdate(_scriptPrefix, _scriptSuffix); + } + + /// @notice Sets the slashOrTake script that is expected in the witness field of the slashOrTake transaction on Bitcoin + /// @param _slashOrTakeScript The slashOrTake script + function setSlashOrTakeScript(bytes calldata _slashOrTakeScript) external onlyOwner { + require(_slashOrTakeScript.length != 0, "Deposit script cannot be empty"); + + slashOrTakeScript = _slashOrTakeScript; + + emit SlashOrTakeScriptUpdate(_slashOrTakeScript); } /// @notice Checks if the deposit amount is sent to the bridge multisig on Bitcoin, and if so, sends the deposit amount to the receiver - /// @param p The deposit parameters that contains the info of the deposit transaction on Bitcoin + /// @param moveTp Transaction parameters of the move transaction on Bitcoin function deposit( - DepositParams calldata p + TransactionParams calldata moveTp ) external onlyOperator { // We don't need to check if the contract is initialized, as without an `initialize` call and `deposit` calls afterwards, // only the system caller can execute a transaction on Citrea, as no addresses have any balance. Thus there's no risk of // `deposit` being called before `initialize` maliciously. - bytes32 wtxId = WitnessUtils.calculateWtxId(p.version, p.flag, p.vin, p.vout, p.witness, p.locktime); - require(!spentWtxIds[wtxId], "wtxId already spent"); - spentWtxIds[wtxId] = true; + (bytes32 wtxId, uint256 nIns) = validateAndCheckInclusion(moveTp); + require(nIns == 1, "Only one input allowed"); + bytes32 txId = ValidateSPV.calculateTxId(moveTp.version, moveTp.vin, moveTp.vout, moveTp.locktime); - require(BTCUtils.validateVin(p.vin), "Vin is not properly formatted"); - require(BTCUtils.validateVout(p.vout), "Vout is not properly formatted"); + require(txIdToDepositId[txId] == 0, "txId already spent"); + txIdToDepositId[txId] = ++currentDepositId; - (, uint256 _nIns) = BTCUtils.parseVarInt(p.vin); - require(_nIns == 1, "Only one input allowed"); - // Number of inputs == number of witnesses - require(WitnessUtils.validateWitness(p.witness, _nIns), "Witness is not properly formatted"); - - require(LIGHT_CLIENT.verifyInclusion(p.block_height, wtxId, p.intermediate_nodes, p.index), "Transaction is not in block"); - - bytes memory witness0 = WitnessUtils.extractWitnessAtIndex(p.witness, 0); - (, uint256 _nItems) = BTCUtils.parseVarInt(witness0); - require(_nItems == requiredSigsCount + 2, "Invalid witness items"); // verifier sigs + deposit script + witness script + bytes memory witness0 = WitnessUtils.extractWitnessAtIndex(moveTp.witness, 0); + (, uint256 nItems) = BTCUtils.parseVarInt(witness0); + require(nItems == 3, "Invalid witness items"); // musig + script + witness script - bytes memory script = WitnessUtils.extractItemFromWitness(witness0, requiredSigsCount); - uint256 _len = depositScript.length; - bytes memory _depositScript = script.slice(0, _len); - require(isBytesEqual(_depositScript, depositScript), "Invalid deposit script"); - bytes memory _suffix = script.slice(_len + 20, script.length - (_len + 20)); // 20 bytes for address - require(isBytesEqual(_suffix, scriptSuffix), "Invalid script suffix"); + bytes memory script = WitnessUtils.extractItemFromWitness(witness0, 1); // skip musig + uint256 len = scriptPrefix.length; + bytes memory _scriptPrefix = script.slice(0, len); + require(isBytesEqual(_scriptPrefix, scriptPrefix), "Invalid deposit script"); + bytes memory _scriptSuffix = script.slice(script.length - scriptSuffix.length, scriptSuffix.length); + require(isBytesEqual(_scriptSuffix, scriptSuffix), "Invalid script suffix"); address recipient = extractRecipientAddress(script); + emit Deposit(wtxId, txId, recipient, block.timestamp, currentDepositId); - emit Deposit(wtxId, recipient, block.timestamp); - - (bool success, ) = recipient.call{value: DEPOSIT_AMOUNT}(""); + (bool success, ) = recipient.call{value: depositAmount}(""); require(success, "Transfer failed"); } /// @notice Accepts 1 cBTC from the sender and inserts this withdrawal request of 1 BTC on Bitcoin into the withdrawals array so that later on can be processed by the operator - /// @param bitcoin_address The Bitcoin address of the receiver - function withdraw(bytes32 bitcoin_address) external payable { - require(msg.value == DEPOSIT_AMOUNT, "Invalid withdraw amount"); - uint256 index = withdrawalAddrs.length; - withdrawalAddrs.push(bitcoin_address); - emit Withdrawal(bitcoin_address, index, block.timestamp); + /// @param txId The txId of the withdrawal transaction on Bitcoin + /// @param outputId The outputId of the output in the withdrawal transaction + function withdraw(bytes32 txId, bytes4 outputId) external payable { + require(msg.value == depositAmount, "Invalid withdraw amount"); + UTXO memory utxo = UTXO({ + txId: txId, + outputId: outputId + }); + uint256 index = withdrawalUTXOs.length; + withdrawalUTXOs.push(utxo); + emit Withdrawal(utxo, index, block.timestamp); } /// @notice Batch version of `withdraw` that can accept multiple cBTC /// @dev Takes in multiple Bitcoin addresses as recipient addresses should be unique - /// @param bitcoin_addresses The Bitcoin addresses of the receivers - function batchWithdraw(bytes32[] calldata bitcoin_addresses) external payable { - require(msg.value == DEPOSIT_AMOUNT * bitcoin_addresses.length, "Invalid withdraw amount"); - uint256 index = withdrawalAddrs.length; - for (uint i = 0; i < bitcoin_addresses.length; i++) { - withdrawalAddrs.push(bitcoin_addresses[i]); - emit Withdrawal(bitcoin_addresses[i], index + i, block.timestamp); + /// @param txIds the txIds of the withdrawal transactions on Bitcoin + /// @param outputIds the outputIds of the outputs in the withdrawal transactions + function batchWithdraw(bytes32[] calldata txIds, bytes4[] calldata outputIds) external payable { + require(txIds.length == outputIds.length, "Length mismatch"); + require(msg.value == depositAmount * txIds.length, "Invalid withdraw amount"); + uint256 index = withdrawalUTXOs.length; + for (uint i = 0; i < txIds.length; i++) { + UTXO memory utxo = UTXO({ + txId: txIds[i], + outputId: outputIds[i] + }); + withdrawalUTXOs.push(utxo); + emit Withdrawal(utxo, index + i, block.timestamp); } } /// @return The count of withdrawals happened so far function getWithdrawalCount() external view returns (uint256) { - return withdrawalAddrs.length; + return withdrawalUTXOs.length; } /// @notice Sets the operator address that can process user deposits @@ -165,7 +185,77 @@ contract Bridge is Ownable2StepUpgradeable { operator = _operator; emit OperatorUpdated(operator, _operator); } - + + /// @notice Stores the filler of a certain withdrawal after the a user's withdrawal is covered on Bitcoin side + /// @param withdrawTp Transaction parameters of the withdrawal transaction on Bitcoin + /// @param inputIndex Index of the input that is the withdrawal UTXO (withdrawing user's ANYONECANPAY) + /// @param withdrawId ID of the withdrawal action + function declareWithdrawFiller(TransactionParams calldata withdrawTp, uint256 inputIndex, uint256 withdrawId) external { + validateAndCheckInclusion(withdrawTp); + bytes memory input = BTCUtils.extractInputAtIndex(withdrawTp.vin, inputIndex); + bytes32 txId = BTCUtils.extractInputTxIdLE(input); + bytes4 index = BTCUtils.extractTxIndexLE(input); + UTXO memory utxo = withdrawalUTXOs[withdrawId]; + require(utxo.txId == txId && utxo.outputId == index, "not matching UTXO"); + + (, uint256 nOuts) = BTCUtils.parseVarInt(withdrawTp.vout); + bytes memory output = BTCUtils.extractOutputAtIndex(withdrawTp.vout, nOuts - 1); + bytes memory opReturnData = BTCUtils.extractOpReturnData(output); + uint256 withdrawFillerId = uint256(bytesToBytes32(opReturnData)); + withdrawFillers[withdrawId] = getInternalOperatorId(withdrawFillerId); + emit WithdrawFillerDeclared(withdrawId, withdrawFillerId); + } + + /// @notice Marks an operator as malicious if the operator burned their slashOrTake transaction as if they filled a withdrawal even though they didn't fill a withdrawal + /// @param slashOrTakeTp Transaction parameters of the slashOrTake transaction on Bitcoin + function markMaliciousOperator(TransactionParams calldata slashOrTakeTp) external { + validateAndCheckInclusion(slashOrTakeTp); + + (, uint256 nOuts) = BTCUtils.parseVarInt(slashOrTakeTp.vout); + bytes memory output = BTCUtils.extractOutputAtIndex(slashOrTakeTp.vout, nOuts - 1); + bytes memory opReturnData = BTCUtils.extractOpReturnData(output); + bytes32 moveTxId = bytesToBytes32(opReturnData.slice(0, 32)); + uint256 operatorId = uint256(bytesToBytes32(opReturnData.slice(32, opReturnData.length - 32))); + uint256 depositId = txIdToDepositId[moveTxId]; + require(depositId != 0, "Deposit do not exist"); + bytes memory witness0 = WitnessUtils.extractWitnessAtIndex(slashOrTakeTp.witness, 0); + bytes memory script = WitnessUtils.extractItemFromWitness(witness0, 1); // skip musig + uint256 len = slashOrTakeScript.length; + bytes memory _slashOrTakeScript = script.slice(0, len); + require(isBytesEqual(_slashOrTakeScript, slashOrTakeScript), "Invalid slashOrTake script"); + uint256 fillerOperatorId = withdrawFillers[depositId - 1]; // depositId is 1-indexed while withdrawFillers is 0-indexed + bool isMalicious = fillerOperatorId == 0 || fillerOperatorId != getInternalOperatorId(operatorId); + require(isMalicious, "Operator is not malicious"); + isOperatorMalicious[operatorId] = true; + + emit MaliciousOperatorMarked(operatorId); + } + + // In order to prevent confusion between absence of a withdrawal filler and the first operator, we use 1-indexing for operator IDs + function getInternalOperatorId(uint256 operatorId) internal pure returns (uint256) { + return operatorId + 1; + } + + function validateAndCheckInclusion(TransactionParams calldata tp) internal view returns (bytes32, uint256) { + bytes32 wtxId = WitnessUtils.calculateWtxId(tp.version, tp.flag, tp.vin, tp.vout, tp.witness, tp.locktime); + require(BTCUtils.validateVin(tp.vin), "Vin is not properly formatted"); + require(BTCUtils.validateVout(tp.vout), "Vout is not properly formatted"); + + (, uint256 nIns) = BTCUtils.parseVarInt(tp.vin); + // Number of inputs == number of witnesses + require(WitnessUtils.validateWitness(tp.witness, nIns), "Witness is not properly formatted"); + + require(LIGHT_CLIENT.verifyInclusion(tp.block_height, wtxId, tp.intermediate_nodes, tp.index), "Transaction is not in block"); + + return (wtxId, nIns); + } + + function extractRecipientAddress(bytes memory _script) internal view returns (address) { + uint256 offset = scriptPrefix.length; + bytes20 _addr = bytes20(_script.slice(offset, 20)); + return address(uint160(_addr)); + } + /// @notice Checks if two byte sequences are equal in chunks of 32 bytes /// @dev This approach compares chunks of 32 bytes using bytes32 equality checks for optimization /// @param a First byte sequence @@ -200,9 +290,17 @@ contract Bridge is Ownable2StepUpgradeable { return true; } - function extractRecipientAddress(bytes memory _script) internal view returns (address) { - uint256 offset = depositScript.length; - bytes20 _addr = bytes20(_script.slice(offset, 20)); - return address(uint160(_addr)); + function bytesToBytes32(bytes memory _source) pure internal returns (bytes32 result) { + if (_source.length == 0) { + return 0x0; + } + uint256 length = _source.length; + require(length <= 32, "Bytes cannot be more than 32 bytes"); + uint256 diff; + assembly { + result := mload(add(_source, 32)) + diff := sub(32, length) + result := shr(mul(diff, 8), result) + } } -} +} \ No newline at end of file diff --git a/crates/evm/src/evm/system_contracts/test/Bridge.t.sol b/crates/evm/src/evm/system_contracts/test/Bridge.t.sol index e11bd21f1..a4361df88 100644 --- a/crates/evm/src/evm/system_contracts/test/Bridge.t.sol +++ b/crates/evm/src/evm/system_contracts/test/Bridge.t.sol @@ -31,17 +31,19 @@ contract FalseBridge is Bridge { } contract BridgeTest is Test { - uint256 constant DEPOSIT_AMOUNT = 0.01 ether; + using BytesLib for bytes; + + uint256 constant DEPOSIT_AMOUNT = 10 ether; BridgeHarness public bridge = BridgeHarness(address(0x3100000000000000000000000000000000000002)); bytes2 flag = hex"0001"; bytes4 version = hex"02000000"; - bytes vin = hex"01d4d6c5c94583a0505dd0c1eb64760ba2a6a391f6da3164094ed8bcac190b7d6c0000000000fdffffff"; - bytes vout = hex"0378dcf50500000000225120081bb55c845b1b14b8580a0246764d53d4aa579645c67568d8375c71f687a2ce4a01000000000000220020340a847f2a890d208f6c7a21811116134bd2b01cc1d46a999e61da195f6b8a3b4a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc33260"; + bytes vin = hex"01e2cb8b8c15fee29eb9cee7246ce582f412267f36b01039eb862ce3518afb95bb0100000000fdffffff"; + bytes vout = hex"0285c79a3b00000000225120984c99c0ed8f91a0e9f70c1ab451e9e78107ecf73a12500ecd0760bea016cdfb4a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc33260"; bytes4 locktime = hex"00000000"; - bytes witness = hex"0740b500164ed14931558b6f101350bd896d8ef7b5215268aec6fa97624f97d4e921f954c362dacb706875ba86280798f4a141745d09444d8f6a62483046bc1e87624025b756b973a6f96a60fde1e745765ffb5d4bfafbd3380e0044dfb0c4c59bba973d0806942a718458696f2c09f7c1a4f672479d7b8f678dff07badf546ab3d2004045d7ea88c30d6da0f4c08c808b2b72c02833a0bc1f44d901954e671e531a33e2b5919ebad1655c3df651b22591777649e60aab07b8507112df2b3da1c3ec65fd401f83b69afc860240e486af437c09949f7a9ab7a795090d3ce8a88ef3a460de56c0ed3bca888cae22e31495e1bcd22148d5185cbf05302b1d910096d18414368f400b6e7417ca7a5f3fefd221087288abbef35aa93db502bc9b32b4ce48edb666c6ea36d6a1d5fc2a78aaab61f71355b7816f7fe15bb3355c56720f7eb27d6ca8a3c3203402ede68395331e2797e1d8fd2ba951386baab32d1440252c3214e0708fe479ad20c18c593480f4f55a3fd7617c9df6e3dabc80fca5927f66d20050c82a2012be7aad2089c310c07b3c3901562a3f000c4a477fcb5ebfd362de3d07a0bff927f2911301ad2067de68f8eb816c86396802b389dedec01703d79e9910e0c846f48920a3e33dd7ad2040f1506702e400b8d1aed2de05bf776e6d7602378ab0834a7d771039454af56ead5100631401010101010101010101010101010101010101016841c093c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51e8bbb8cb70da9374d24ddfec9bfd8d90b89563c2a55de80fbeba57c0a2de1bce"; - bytes depositScript = hex"c3203402ede68395331e2797e1d8fd2ba951386baab32d1440252c3214e0708fe479ad20c18c593480f4f55a3fd7617c9df6e3dabc80fca5927f66d20050c82a2012be7aad2089c310c07b3c3901562a3f000c4a477fcb5ebfd362de3d07a0bff927f2911301ad2067de68f8eb816c86396802b389dedec01703d79e9910e0c846f48920a3e33dd7ad2040f1506702e400b8d1aed2de05bf776e6d7602378ab0834a7d771039454af56ead51006314"; - bytes scriptSuffix = hex"68"; - bytes intermediate_nodes = hex"0000000000000000000000000000000000000000000000000000000000000000d867753e5c6294897137132af54a90ad05cc9590f372f4ac8aae50096c7de081cfbfc52d11aa289adf40426b589cf9739b030a8b61c0ec22347ce3af642b9f52783f00e738b6e46376ca7756b4230c80c9b4b68701b81f690e00d1df24744e5d872a65c80bfd54acc25e622708cf18000b6815d000729aa880b974f2187137ea"; + bytes witness = hex"0340abce0ec04f05a22e2bf811b824d91fda4ff6ec94f055d5715cf4384036dd157392cfab47ee808e2ddf97650e420dc848de08699f9184e2ee35da77ed05c9276e4a207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ac00630663697472656114010101010101010101010101010101010101010108000000003b9aca006841c193c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51b540e929d1a8f60137e49aaf57049ce593639353871a9ce9cb176070827a09dd"; + bytes scriptPrefix = hex"4a207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ac00630663697472656114"; + bytes scriptSuffix = hex"08000000003b9aca0068"; + bytes intermediate_nodes = hex"00000000000000000000000000000000000000000000000000000000000000005d0b2d694672fc17e41b10278477709b500fed59aae67dba417d442e2c7f4c6900a1c64882d54993fc008ab1e9ae150a78cc08aac6bbbb41db77f55134cb6198"; uint256 index = 1; address constant SYSTEM_CALLER = address(0xdeaDDeADDEaDdeaDdEAddEADDEAdDeadDEADDEaD); @@ -49,8 +51,8 @@ contract BridgeTest is Test { address user = makeAddr("citrea_user"); address owner = makeAddr("citrea_owner"); address operator; - uint256 constant INITIAL_BLOCK_NUMBER = 505050; - bytes32 witnessRoot = hex"46b8e96a9798742f3d555ad1d1b0c31a29fac5e0d133a44126a8b3ca02077ece"; + uint256 constant INITIAL_BLOCK_NUMBER = 1; + bytes32 witnessRoot = hex"142a6fc911b3091261ef52d2a50bc0f25797d73da457a7e51b6a81b51519aa1e"; bytes32 mockBlockhash = keccak256("CITREA_TEST"); BitcoinLightClient bitcoinLightClient; @@ -76,7 +78,7 @@ contract BridgeTest is Test { vm.store(address(bridge), OWNER_SLOT, bytes32(uint256(uint160(owner)))); vm.prank(SYSTEM_CALLER); - bridge.initialize(depositScript, scriptSuffix, 5); + bridge.initialize(scriptPrefix, scriptSuffix, 10 ether); vm.deal(address(bridge), 21_000_000 ether); address lightClient_impl = address(new BitcoinLightClient()); bitcoinLightClient = bridge.LIGHT_CLIENT(); @@ -95,6 +97,7 @@ contract BridgeTest is Test { doDeposit(); // Assert if asset transferred assertEq(receiver.balance, DEPOSIT_AMOUNT); + assertEq(bridge.txIdToDepositId(hex"84b9aae7426412e069dfd5fc513e782f6622e3afb11909d27796444707379ac0"), 1); } // TODO: Replace the logic of testing the root of withdrawal tree in a more proper manner if this goes into production @@ -105,72 +108,135 @@ contract BridgeTest is Test { // Assert if receiver can withdraw vm.startPrank(receiver); - bytes32 bitcoin_address = hex"1234"; // Dummy Bitcoin address + bytes32 txId = hex"1234"; // Dummy txId + bytes4 outputId = hex"01"; // Dummy outputId uint256 withdrawalCount = bridge.getWithdrawalCount(); - bridge.withdraw{value: DEPOSIT_AMOUNT}(bitcoin_address); + bridge.withdraw{value: DEPOSIT_AMOUNT}(txId, outputId); // Assert if withdrawal address is stored properly - assertEq(bridge.withdrawalAddrs(withdrawalCount), bitcoin_address); + (bytes32 _txId, bytes4 _outputId) = bridge.withdrawalUTXOs(withdrawalCount); + assertEq(_txId, txId); + assertEq(_outputId, outputId); // Assert if tokens are burned from receiver assertEq(receiver.balance, 0); - vm.stopPrank(); } function testBatchWithdraw() public { vm.startPrank(user); - vm.deal(address(user), 0.1 ether); + vm.deal(address(user), DEPOSIT_AMOUNT * 10); bytes32[] memory btc_addresses = new bytes32[](10); + bytes4[] memory output_ids = new bytes4[](10); for (uint i = 0; i < 10; i++) { btc_addresses[i] = bytes32(abi.encodePacked(i)); + output_ids[i] = bytes4(uint32(i)); } - bridge.batchWithdraw{value: 0.1 ether}(btc_addresses); + bridge.batchWithdraw{value: DEPOSIT_AMOUNT * 10}(btc_addresses, output_ids); for (uint i = 0; i < 10; i++) { - assertEq(bridge.withdrawalAddrs(i), btc_addresses[i]); + (bytes32 _txId, bytes4 _outputId) = bridge.withdrawalUTXOs(i); + assertEq(_txId, btc_addresses[i]); + assertEq(_outputId, output_ids[i]); } assertEq(user.balance, 0); } + function testDeclareWithdrawFiller() public { + vm.startPrank(user); + vm.deal(address(user), DEPOSIT_AMOUNT); + bytes32 txId = hex"6a6c1c25dca27739971f40e0754b0cff929161da645042ca0fefa9b2c391ea1a"; + bytes4 outputId = hex"00000000"; + bridge.withdraw{value: DEPOSIT_AMOUNT}(txId, outputId); + assertEq(user.balance, 0); + vm.stopPrank(); + vin = hex"026a6c1c25dca27739971f40e0754b0cff929161da645042ca0fefa9b2c391ea1a0000000000fdffffffa9de49965a3403c16854c5e90c4775394833c631e676d06c7b71478b7334bb320000000000fdffffff"; + vout = hex"0300ca9a3b000000002251204f78821f08f119333f981396ec5941b9f67a05c5302ecb7031861a879bbb0fbb182feb02000000002251200e1bdc1d71264094617e30ff7f766efbf5c49eb287987851dc5f1a61cdba6ef80000000000000000036a0100"; + witness = hex"014191a09b54be9406db65658f507fca7b70777893b64ae04bd59b64902d8b0169c007e35e5d9d058b7ab5c16d712fb13486e2a7448250a32f988f780d9a0d59d2238301400faa22369f9e3227e73ce94518959032a03fe736886e65640249aa30e4d4339ddcce6f262e6e683211641d3c1ee72697b9f457eb96bece1dda14151d645b82c2"; + intermediate_nodes = hex"2e3102ed31fbd35fc8d2e1fd81bcec0e95e2bc2ea1ff3ac4bce47f8e09550e5370476f21a08f8687c6b540b4f4b239aa97780e1f6ad671540e82a503ac4bf2082551513fcc8e309648459a48ea22d69f9f237f05235694e6c5010d70e161abd2"; + index = 5; + vm.prank(SYSTEM_CALLER); + Bridge.TransactionParams memory withdrawTp = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + bridge.declareWithdrawFiller(withdrawTp, 0, 0); + require(bridge.withdrawFillers(0) == 1); // 1-indexed first operator + } + + function testCannotMarkDeclaredOperatorAsMalicious() public { + doDeposit(); + testDeclareWithdrawFiller(); + vin = hex"01e27049ce4ef9fbdb7600d5d0e5de35a0aafb6e08196e4082acbe0ae945f2b3f70000000000fdffffff"; + vout = hex"0325840100000000002251206fe94d7d713357c5fa461f78fa0973a1ecb25f6cf64e566dc30c938a91eec6004a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc332600000000000000000236a2184b9aae7426412e069dfd5fc513e782f6622e3afb11909d27796444707379ac000"; + witness = hex"0440b869bcf4ac53b360c26f00f9c168b76a58391963e6e0f597f6eb1069e106a6860efb402a5f5b7036b8b1123012312bcc08dff35f67ac96456ced535ce015f1a840fbae91e3cd08ff8789f8f2c244c28b23ade14e26b82d82df8c28ee2dec9aa9835641e76f402c1833c41c46726caa98c6c5b73624004d52dfd9240a4ea9b07f6f44207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ad204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac21c093c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51"; + intermediate_nodes = hex"21076fdb84aa34da7e46fead9ca72f4bf175c2c95c944c62e8569726646327d370476f21a08f8687c6b540b4f4b239aa97780e1f6ad671540e82a503ac4bf2082551513fcc8e309648459a48ea22d69f9f237f05235694e6c5010d70e161abd2"; + index = 4; + vm.prank(SYSTEM_CALLER); + Bridge.TransactionParams memory kickoff2Tp = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + vm.expectRevert("Operator is not malicious"); + bridge.markMaliciousOperator(kickoff2Tp); + } + + function testCannotMarkNonExistentDepositAsMalicious() public { + testDeclareWithdrawFiller(); + vin = hex"01e27049ce4ef9fbdb7600d5d0e5de35a0aafb6e08196e4082acbe0ae945f2b3f70000000000fdffffff"; + vout = hex"0325840100000000002251206fe94d7d713357c5fa461f78fa0973a1ecb25f6cf64e566dc30c938a91eec6004a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc332600000000000000000236a2184b9aae7426412e069dfd5fc513e782f6622e3afb11909d27796444707379ac000"; + witness = hex"0440b869bcf4ac53b360c26f00f9c168b76a58391963e6e0f597f6eb1069e106a6860efb402a5f5b7036b8b1123012312bcc08dff35f67ac96456ced535ce015f1a840fbae91e3cd08ff8789f8f2c244c28b23ade14e26b82d82df8c28ee2dec9aa9835641e76f402c1833c41c46726caa98c6c5b73624004d52dfd9240a4ea9b07f6f44207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ad204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac21c093c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51"; + intermediate_nodes = hex"21076fdb84aa34da7e46fead9ca72f4bf175c2c95c944c62e8569726646327d370476f21a08f8687c6b540b4f4b239aa97780e1f6ad671540e82a503ac4bf2082551513fcc8e309648459a48ea22d69f9f237f05235694e6c5010d70e161abd2"; + index = 4; + vm.prank(SYSTEM_CALLER); + Bridge.TransactionParams memory kickoff2Tp = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + vm.expectRevert("Deposit do not exist"); + bridge.markMaliciousOperator(kickoff2Tp); + } + + function testMarkMaliciousOperator() public { + doDeposit(); + vin = hex"01e27049ce4ef9fbdb7600d5d0e5de35a0aafb6e08196e4082acbe0ae945f2b3f70000000000fdffffff"; + vout = hex"0325840100000000002251206fe94d7d713357c5fa461f78fa0973a1ecb25f6cf64e566dc30c938a91eec6004a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc332600000000000000000236a2184b9aae7426412e069dfd5fc513e782f6622e3afb11909d27796444707379ac000"; + witness = hex"0440b869bcf4ac53b360c26f00f9c168b76a58391963e6e0f597f6eb1069e106a6860efb402a5f5b7036b8b1123012312bcc08dff35f67ac96456ced535ce015f1a840fbae91e3cd08ff8789f8f2c244c28b23ade14e26b82d82df8c28ee2dec9aa9835641e76f402c1833c41c46726caa98c6c5b73624004d52dfd9240a4ea9b07f6f44207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ad204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac21c093c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51"; + intermediate_nodes = hex"21076fdb84aa34da7e46fead9ca72f4bf175c2c95c944c62e8569726646327d370476f21a08f8687c6b540b4f4b239aa97780e1f6ad671540e82a503ac4bf2082551513fcc8e309648459a48ea22d69f9f237f05235694e6c5010d70e161abd2"; + index = 4; + vm.prank(SYSTEM_CALLER); + Bridge.TransactionParams memory kickoff2Tp = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + bridge.markMaliciousOperator(kickoff2Tp); + assertTrue(bridge.isOperatorMalicious(0)); + } + function testCannotBatchWithdrawWithWrongValue() public { vm.startPrank(user); vm.deal(address(user), 10 ether); bytes32[] memory btc_addresses = new bytes32[](10); + bytes4[] memory output_ids = new bytes4[](10); for (uint i = 0; i < 10; i++) { btc_addresses[i] = bytes32(abi.encodePacked(i)); + output_ids[i] = bytes4(uint32(i)); } vm.expectRevert("Invalid withdraw amount"); - bridge.batchWithdraw{value: 9 ether}(btc_addresses); + bridge.batchWithdraw{value: 9 ether}(btc_addresses, output_ids); } function testCannotDoubleDepositWithSameTx() public { doDeposit(); - vm.expectRevert("wtxId already spent"); + vm.expectRevert("txId already spent"); doDeposit(); } function testCannotDepositWithFalseDepositScript() public { // False witness - version = hex"02000000"; - vin = hex"01c12c5ac7555c4af5c170ab2bd2d3c7bf22157cd93b7f4a728aa8632d63b3f6cd0100000000fdffffff"; - vout = hex"0378dcf505000000002251205a7dc72cac5b5f3fc1ea4d0f0d7859b1936ee884901016fc4b749eb5b9742c2e4a01000000000000220020340a847f2a890d208f6c7a21811116134bd2b01cc1d46a999e61da195f6b8a3b4a010000000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc33260"; - locktime = hex"00000000"; - witness = hex"0740b0e44fc2baaa22d26b78f74b64fe5e04ceb9726422a471be287b5aa9b81644f4e15519da0a887acb708c6bec13cfa2f45fc958fcb7ee0c11b7b653ad0dbc518f40324f831d9e2b8563ec6a5ac14ccf1c24494410493c5373b31dcabbf84542a6b233ba5ae8f24f87f08384fd9d988a117b4ce6839b466c4c65834a9195d3104d4640c5edb978f11668ea364cfacfa560e78adb81040b1cb105e33e946a0f07a6a3b04feb2dcd9211a6526d7f1177a7e4b2e00e9eb237381577b9ca51ddd7392b1050404170092d53d0126dd6a01a6490aa48f45cb6a8b946441411386309b2d25fc3158ee5029c6c34c845a053a796319aa3028e9862f6ee96aab9b5b7e1c61197d7964047c115932f42fa0395a62e2b3d969bc2e331b1a8e800b36cf622dbd1d5d9058874457647abfe88be2be21899d7f0cb20b3f521edc5cadffe0d4da70c8adf6cc8c720c47951a0d42f19b0e38708532747a57a2a6df2928fb9e8e62e9f2455e2272900ad208e819403de9c93ae10ab06c21307d607e9ca2c9647c29f5b3d5ce9e287e26056ad20e7911890b498cb1d01366fe632ca2405e10cec3330fa0d12287cfccf05a93f2ead201c07930bde76bfee7b919c6f32c2fd2c4613bbc4eb64a06d2e5c0abe7d0184b5ad2097f65ac6f8c7c4bbd153631019edaaa293d1045fbe9bb5f64ac7744dd0c8abddad510063030102031401010101010101010101010101010101010101016841c193c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51e610773dd968e4d63d83379dacabf35c82a7e438bf691b3b03df6f502136b25f"; - depositScript = hex"20c47951a0d42f19b0e38708532747a57a2a6df2928fb9e8e62e9f2455e2272900ad208e819403de9c93ae10ab06c21307d607e9ca2c9647c29f5b3d5ce9e287e26056ad20e7911890b498cb1d01366fe632ca2405e10cec3330fa0d12287cfccf05a93f2ead201c07930bde76bfee7b919c6f32c2fd2c4613bbc4eb64a06d2e5c0abe7d0184b5ad2097f65ac6f8c7c4bbd153631019edaaa293d1045fbe9bb5f64ac7744dd0c8abddad5100630301020314"; - intermediate_nodes = hex"0000000000000000000000000000000000000000000000000000000000000000e1a597d064a290f1f05e6ed9cdff56da7f75381748ca0a3b61c1ddb5d599b40ee5d186d6db369c1da7f39254ae8194add508758582edb82e054eb9f9e686392c8f2dbfe4702b6b29547006c140765a109f5d9027b6583c859a2224c4322c58080d351c7e59dedd8e2ec4b07bb253a59c8589d1755668895652283c19a30285f1"; - witnessRoot = hex"b615b861dae528f99e15f37cb755f9ee8a02be8bd870088e3f329cde8609730b"; - + witness = hex"0340abce0ec04f05a22e2bf811b824d91fda4ff6ec94f055d5715cf4384036dd157392cfab47ee808e2ddf97650e420dc848de08699f9184e2ee35da77ed05c9276e4a207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ac00630663697472656115010101010101010101010101010101010101010108000000003b9aca006841c193c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51b540e929d1a8f60137e49aaf57049ce593639353871a9ce9cb176070827a09dd"; + witnessRoot = hex"af3827c2b44a695e5306a643f6029b68c350f9907cdf7131ef44a00d6bdee480"; + index = 0; + intermediate_nodes = hex""; vm.startPrank(SYSTEM_CALLER); bitcoinLightClient.setBlockInfo(keccak256("CITREA_TEST_2"), witnessRoot); vm.expectRevert("Invalid deposit script"); // Incremented 1 block, that's why `doDeposit` is not used - Bridge.DepositParams memory depositParams = Bridge.DepositParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER + 1, index); + Bridge.TransactionParams memory depositParams = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER + 1, index); + bridge.deposit(depositParams); vm.stopPrank(); } @@ -182,7 +248,7 @@ contract BridgeTest is Test { bitcoinLightClient.setBlockInfo(keccak256("CITREA_TEST_2"), witnessRoot); vm.expectRevert("Transaction is not in block"); - Bridge.DepositParams memory depositParams = Bridge.DepositParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER + 1, index); + Bridge.TransactionParams memory depositParams = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER + 1, index); bridge.deposit(depositParams); } @@ -196,13 +262,13 @@ contract BridgeTest is Test { // Assert if receiver cannot withdraw with invalid amount vm.startPrank(receiver); vm.expectRevert("Invalid withdraw amount"); - bridge.withdraw{value: DEPOSIT_AMOUNT - 1}(hex"1234"); + bridge.withdraw{value: DEPOSIT_AMOUNT - 1}(hex"1234", hex"01"); vm.stopPrank(); } function testNonOperatorCannotDeposit() public { vm.expectRevert("caller is not the operator"); - Bridge.DepositParams memory depositParams = Bridge.DepositParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + Bridge.TransactionParams memory depositParams = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); bridge.deposit(depositParams); } @@ -215,7 +281,7 @@ contract BridgeTest is Test { function testCannotReinitialize() public { vm.expectRevert("Contract is already initialized"); vm.prank(SYSTEM_CALLER); - bridge.initialize(depositScript, scriptSuffix, 5); + bridge.initialize(scriptPrefix, scriptSuffix, 5); } function testCanChangeOperatorAndDeposit() public { @@ -278,10 +344,9 @@ contract BridgeTest is Test { function testSetDepositScript() public { vm.prank(owner); - bridge.setDepositScript(depositScript, scriptSuffix, 5); - assert(bridge.isBytesEqual_(depositScript, bridge.depositScript())); + bridge.setDepositScript(scriptPrefix, scriptSuffix); + assert(bridge.isBytesEqual_(scriptPrefix, bridge.scriptPrefix())); assert(bridge.isBytesEqual_(scriptSuffix, bridge.scriptSuffix())); - assertEq(5, bridge.requiredSigsCount()); } function testUpgrade() public { @@ -315,7 +380,7 @@ contract BridgeTest is Test { function doDeposit() public { vm.startPrank(operator); - Bridge.DepositParams memory depositParams = Bridge.DepositParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); + Bridge.TransactionParams memory depositParams = Bridge.TransactionParams(version, flag, vin, vout, witness, locktime, intermediate_nodes, INITIAL_BLOCK_NUMBER, index); bridge.deposit(depositParams); vm.stopPrank(); } diff --git a/crates/evm/src/tests/sys_tx_tests.rs b/crates/evm/src/tests/sys_tx_tests.rs index ef2da9414..db36ec69a 100644 --- a/crates/evm/src/tests/sys_tx_tests.rs +++ b/crates/evm/src/tests/sys_tx_tests.rs @@ -76,7 +76,7 @@ fn test_sys_bitcoin_light_client() { receipt: reth_primitives::Receipt { tx_type: reth_primitives::TxType::Eip1559, success: true, - cumulative_gas_used: 392686, + cumulative_gas_used: 300621, logs: vec![ Log { address: Bridge::address(), @@ -88,15 +88,15 @@ fn test_sys_bitcoin_light_client() { Log { address: Bridge::address(), data: LogData::new( - vec![b256!("89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c34")], - Bytes::from_static(&hex!("00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000b5d2205daf577048c5e5a9a75d0a924ed03e226c3304f4a2f01c65ca1dab73522e6b8bad206228eba653cf1819bcfc1bc858630e5ae373eec1a9924322a5fe8445c5e76027ad201521d65f64be3f71b71ca462220f13c77b251027f6ca443a483353a96fbce222ad200fabeed269694ee83d9b3343a571202e68af65d05feda61dbed0c4bdb256a6eaad2000326d6f721c03dc5f1d8817d8f8ee890a95a2eeda0d4d9a01b1cc9b7b1b724dac006306636974726561140000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0800000000000f42406800000000000000000000000000000000000000000000")) + vec![b256!("80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc")], + Bytes::from_static(&hex!(" 000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002d4a207c4803421956db53eed29ee45bddbe60d16e66560f918a94270ea5272b2b4e90ac0063066369747265611400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a08000000003b9aca006800000000000000000000000000000000000000000000")) ).unwrap(), } ] }, - gas_used: 261215, + gas_used: 169150, log_index_start: 1, - l1_diff_size: 836, + l1_diff_size: 548, } ] ); @@ -416,8 +416,8 @@ fn test_bridge() { da_slot_height: 2, da_slot_hash: [2u8; 32], da_slot_txs_commitment: [ - 136, 147, 225, 201, 35, 145, 64, 167, 182, 140, 185, 55, 22, 224, 150, 42, 51, 86, 214, - 251, 181, 122, 169, 246, 188, 29, 186, 32, 227, 33, 199, 38, + 20, 42, 111, 201, 17, 179, 9, 18, 97, 239, 82, 210, 165, 11, 192, 242, 87, 151, 215, + 61, 164, 87, 167, 229, 27, 106, 129, 181, 21, 25, 170, 30, ], pre_state_root: [1u8; 32].to_vec(), current_spec: SpecId::Genesis, @@ -431,54 +431,37 @@ fn test_bridge() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 128, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 42, 1, 196, 196, 205, 156, 93, 62, 54, 134, 133, 188, 6, 17, 153, 42, - 62, 155, 138, 8, 111, 222, 48, 192, 86, 41, 210, 202, 111, 100, 49, 6, 36, 123, 0, 0, - 0, 0, 0, 253, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 42, 1, 226, 203, 139, 140, 21, 254, 226, 158, 185, 206, 231, 36, 108, 229, + 130, 244, 18, 38, 127, 54, 176, 16, 57, 235, 134, 44, 227, 81, 138, 251, 149, 187, 1, + 0, 0, 0, 0, 253, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 2, 197, 63, 15, 0, 0, 0, 0, 0, 34, 81, 32, 225, 85, 228, 181, 8, - 114, 26, 130, 4, 159, 125, 249, 18, 119, 121, 134, 147, 142, 99, 173, 85, 230, 58, 42, - 39, 210, 102, 158, 156, 54, 47, 183, 74, 1, 0, 0, 0, 0, 0, 0, 34, 0, 32, 74, 232, 21, - 114, 240, 110, 27, 136, 253, 92, 237, 122, 26, 0, 9, 69, 67, 46, 131, 225, 85, 30, 111, - 114, 30, 233, 192, 11, 140, 195, 50, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 91, 7, 64, - 85, 100, 226, 121, 160, 231, 130, 160, 201, 56, 39, 35, 161, 143, 216, 21, 211, 206, - 127, 229, 78, 29, 6, 86, 241, 85, 191, 62, 174, 148, 71, 7, 97, 25, 170, 78, 173, 238, - 251, 184, 7, 3, 139, 103, 184, 9, 84, 28, 37, 39, 39, 91, 248, 166, 240, 149, 245, 51, - 48, 45, 10, 151, 90, 134, 64, 58, 4, 251, 18, 243, 51, 241, 78, 218, 137, 248, 84, 193, - 73, 6, 249, 29, 144, 62, 120, 43, 235, 170, 173, 3, 241, 236, 171, 253, 71, 17, 237, - 81, 214, 38, 47, 206, 119, 2, 116, 56, 203, 107, 84, 255, 102, 133, 42, 245, 35, 173, - 250, 41, 110, 193, 18, 121, 214, 157, 81, 81, 115, 91, 237, 64, 21, 17, 223, 104, 155, - 182, 45, 200, 209, 237, 114, 78, 88, 157, 251, 106, 70, 76, 150, 27, 223, 254, 87, 62, - 121, 250, 18, 141, 166, 53, 181, 63, 41, 28, 81, 51, 20, 84, 115, 122, 154, 139, 187, - 182, 208, 212, 16, 122, 183, 103, 149, 223, 86, 216, 191, 246, 117, 102, 59, 111, 120, - 22, 223, 62, 64, 253, 145, 239, 196, 249, 255, 135, 5, 208, 64, 144, 150, 213, 166, 66, - 98, 4, 23, 151, 165, 220, 201, 209, 179, 201, 162, 185, 98, 0, 228, 44, 29, 230, 117, - 232, 11, 123, 162, 71, 201, 73, 125, 209, 236, 189, 139, 56, 160, 205, 48, 238, 29, - 185, 43, 229, 103, 117, 247, 252, 85, 166, 29, 59, 232, 64, 189, 1, 191, 87, 25, 32, - 77, 193, 98, 33, 84, 159, 168, 209, 181, 157, 80, 130, 164, 59, 101, 196, 190, 247, - 124, 131, 53, 156, 111, 105, 196, 18, 8, 177, 1, 118, 217, 178, 150, 165, 172, 205, - 126, 106, 54, 246, 54, 95, 47, 16, 155, 156, 123, 135, 135, 4, 44, 241, 144, 188, 76, - 181, 157, 173, 210, 32, 93, 175, 87, 112, 72, 197, 229, 169, 167, 93, 10, 146, 78, 208, - 62, 34, 108, 51, 4, 244, 162, 240, 28, 101, 202, 29, 171, 115, 82, 46, 107, 139, 173, - 32, 98, 40, 235, 166, 83, 207, 24, 25, 188, 252, 27, 200, 88, 99, 14, 90, 227, 115, - 238, 193, 169, 146, 67, 34, 165, 254, 132, 69, 197, 231, 96, 39, 173, 32, 21, 33, 214, - 95, 100, 190, 63, 113, 183, 28, 164, 98, 34, 15, 19, 199, 123, 37, 16, 39, 246, 202, - 68, 58, 72, 51, 83, 169, 111, 188, 226, 34, 173, 32, 15, 171, 238, 210, 105, 105, 78, - 232, 61, 155, 51, 67, 165, 113, 32, 46, 104, 175, 101, 208, 95, 237, 166, 29, 190, 208, - 196, 189, 178, 86, 166, 234, 173, 32, 0, 50, 109, 111, 114, 28, 3, 220, 95, 29, 136, - 23, 216, 248, 238, 137, 10, 149, 162, 238, 218, 13, 77, 154, 1, 177, 204, 155, 123, 27, - 114, 77, 172, 0, 99, 6, 99, 105, 116, 114, 101, 97, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 0, 0, 0, 0, 0, 15, 66, 64, 104, 65, 193, 147, 199, 55, - 141, 150, 81, 138, 117, 68, 136, 33, 196, 247, 200, 244, 186, 231, 206, 96, 248, 4, - 208, 61, 31, 6, 40, 221, 93, 208, 245, 222, 81, 15, 41, 81, 255, 251, 84, 130, 89, 213, - 171, 185, 243, 81, 190, 143, 148, 3, 28, 156, 232, 140, 232, 56, 180, 13, 124, 236, - 124, 96, 110, 12, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 87, 2, 133, 199, 154, 59, 0, 0, 0, 0, 34, 81, 32, 152, 76, 153, 192, + 237, 143, 145, 160, 233, 247, 12, 26, 180, 81, 233, 231, 129, 7, 236, 247, 58, 18, 80, + 14, 205, 7, 96, 190, 160, 22, 205, 251, 74, 1, 0, 0, 0, 0, 0, 0, 34, 0, 32, 74, 232, + 21, 114, 240, 110, 27, 136, 253, 92, 237, 122, 26, 0, 9, 69, 67, 46, 131, 225, 85, 30, + 111, 114, 30, 233, 192, 11, 140, 195, 50, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 3, + 64, 171, 206, 14, 192, 79, 5, 162, 46, 43, 248, 17, 184, 36, 217, 31, 218, 79, 246, + 236, 148, 240, 85, 213, 113, 92, 244, 56, 64, 54, 221, 21, 115, 146, 207, 171, 71, 238, + 128, 142, 45, 223, 151, 101, 14, 66, 13, 200, 72, 222, 8, 105, 159, 145, 132, 226, 238, + 53, 218, 119, 237, 5, 201, 39, 110, 74, 32, 124, 72, 3, 66, 25, 86, 219, 83, 238, 210, + 158, 228, 91, 221, 190, 96, 209, 110, 102, 86, 15, 145, 138, 148, 39, 14, 165, 39, 43, + 43, 78, 144, 172, 0, 99, 6, 99, 105, 116, 114, 101, 97, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 0, 0, 0, 0, 59, 154, 202, 0, 104, 65, 193, 147, + 199, 55, 141, 150, 81, 138, 117, 68, 136, 33, 196, 247, 200, 244, 186, 231, 206, 96, + 248, 4, 208, 61, 31, 6, 40, 221, 93, 208, 245, 222, 81, 181, 64, 233, 41, 209, 168, + 246, 1, 55, 228, 154, 175, 87, 4, 156, 229, 147, 99, 147, 83, 135, 26, 156, 233, 203, + 23, 96, 112, 130, 122, 9, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 93, 11, 45, 105, 70, 114, 252, 23, 228, 27, 16, 39, 132, 119, 112, 155, 80, + 15, 237, 89, 170, 230, 125, 186, 65, 125, 68, 46, 44, 127, 76, 105, 0, 161, 198, 72, + 130, 213, 73, 147, 252, 0, 138, 177, 233, 174, 21, 10, 120, 204, 8, 170, 198, 187, 187, + 65, 219, 119, 245, 81, 52, 203, 97, 152, ] .to_vec()], l1_fee_rate, @@ -497,7 +480,7 @@ fn test_bridge() { assert_eq!( recipient_account.balance, - U256::from_str("0x2386f26fc10000").unwrap(), + U256::from_str("0x8ac7230489e80000").unwrap(), ); } @@ -852,7 +835,7 @@ fn config_push_contracts(config: &mut EvmConfig) { config.data.push(AccountData::new( address!("3200000000000000000000000000000000000002"), U256::ZERO, - Bytes::from_static(&hex!("6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356")), + Bytes::from_static(&hex!("60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156")), 0, HashMap::new() )); diff --git a/resources/genesis/bitcoin-regtest/evm.json b/resources/genesis/bitcoin-regtest/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/genesis/bitcoin-regtest/evm.json +++ b/resources/genesis/bitcoin-regtest/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/genesis/mock-dockerized/evm.json b/resources/genesis/mock-dockerized/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/genesis/mock-dockerized/evm.json +++ b/resources/genesis/mock-dockerized/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/genesis/mock/evm.json b/resources/genesis/mock/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/genesis/mock/evm.json +++ b/resources/genesis/mock/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/test-data/demo-tests/bitcoin-regtest/evm.json b/resources/test-data/demo-tests/bitcoin-regtest/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/test-data/demo-tests/bitcoin-regtest/evm.json +++ b/resources/test-data/demo-tests/bitcoin-regtest/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/test-data/demo-tests/mock/evm.json b/resources/test-data/demo-tests/mock/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/test-data/demo-tests/mock/evm.json +++ b/resources/test-data/demo-tests/mock/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/test-data/integration-tests-low-block-gas-limit/evm.json b/resources/test-data/integration-tests-low-block-gas-limit/evm.json index 8a002b7f5..091d186f5 100644 --- a/resources/test-data/integration-tests-low-block-gas-limit/evm.json +++ b/resources/test-data/integration-tests-low-block-gas-limit/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/test-data/integration-tests-low-max-l2-blocks-per-l1/evm.json b/resources/test-data/integration-tests-low-max-l2-blocks-per-l1/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/test-data/integration-tests-low-max-l2-blocks-per-l1/evm.json +++ b/resources/test-data/integration-tests-low-max-l2-blocks-per-l1/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003", diff --git a/resources/test-data/integration-tests/evm.json b/resources/test-data/integration-tests/evm.json index a07c04b08..7e6e7d354 100644 --- a/resources/test-data/integration-tests/evm.json +++ b/resources/test-data/integration-tests/evm.json @@ -76,7 +76,7 @@ { "address": "0x3200000000000000000000000000000000000002", "balance": "0x0", - "code": "0x6080604052600436106101355760003560e01c80638e19899e116100ab578063d761753e1161006f578063d761753e1461032d578063dd95c7c614610355578063e30c397814610375578063e613ae001461038a578063ec6925a7146103a5578063f2fde38b146103c057600080fd5b80638e19899e146102a55780639f963f59146102b8578063b3ab15fb146102d8578063b93780f6146102f8578063d1c444561461030d57600080fd5b80635e0e5b3e116100fd5780635e0e5b3e146101ff578063715018a61461022f578063781952a81461024457806379ba50971461025957806387f8bf561461026e5780638da5cb5b1461029057600080fd5b8063158ef93e1461013a578063412601371461016957806343e316871461018b578063570ca735146101af57806359c19cee146101ec575b600080fd5b34801561014657600080fd5b506000546101549060ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004611eb5565b6103e0565b005b34801561019757600080fd5b506101a160015481565b604051908152602001610160565b3480156101bb57600080fd5b506000546101d49061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101896101fa366004611f2e565b610624565b34801561020b57600080fd5b5061015461021a366004611fa5565b60046020526000908152604090205460ff1681565b34801561023b57600080fd5b50610189610734565b34801561025057600080fd5b506005546101a1565b34801561026557600080fd5b50610189610748565b34801561027a57600080fd5b50610283610790565b6040516101609190611fbe565b34801561029c57600080fd5b506101d461081e565b6101896102b3366004611fa5565b610853565b3480156102c457600080fd5b506101896102d3366004611eb5565b61091c565b3480156102e457600080fd5b506101896102f336600461200c565b610a1e565b34801561030457600080fd5b50610283610a8f565b34801561031957600080fd5b506101a1610328366004611fa5565b610a9c565b34801561033957600080fd5b506101d473deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561036157600080fd5b50610189610370366004612035565b610abd565b34801561038157600080fd5b506101d4611267565b34801561039657600080fd5b506101d46001603160981b0181565b3480156103b157600080fd5b506101a1662386f26fc1000081565b3480156103cc57600080fd5b506101896103db36600461200c565b611290565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146104485760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c65720060448201526064015b60405180910390fd5b60005460ff161561049b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a656400604482015260640161043f565b806000036104eb5760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b600084900361053c5760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b6000805460ff191660011790556002610556858783612110565b506003610564838583612110565b50600181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c3485858585856040516106159594939291906121f9565b60405180910390a15050505050565b61063581662386f26fc10000612249565b341461067d5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b60055460005b8281101561072e57600584848381811061069f5761069f612260565b835460018101855560009485526020948590209190940292909201359190920155507fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b8484838181106106f4576106f4612260565b9050602002013582846107079190612276565b604080519283526020830191909152429082015260600160405180910390a1600101610683565b50505050565b61073c611315565b6107466000611347565b565b3380610752611267565b6001600160a01b0316146107845760405163118cdaa760e01b81526001600160a01b038216600482015260240161043f565b61078d81611347565b50565b6003805461079d90612087565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990612087565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b505050505081565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b662386f26fc1000034146108a35760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b604482015260640161043f565b600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018290556040805183815260208101839052428183015290517fc96d1af655ee5eb07357bb1097f3b2f247ea0c4e3cf5f9a5c8449c4f8b64fb6b9181900360600190a15050565b610924611315565b806000036109745760405162461bcd60e51b815260206004820152601a60248201527f566572696669657220636f756e742063616e6e6f742062652030000000000000604482015260640161043f565b60008490036109c55760405162461bcd60e51b815260206004820152601e60248201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604482015260640161043f565b60026109d2858783612110565b5060036109e0838583612110565b5060018190556040517f89ed79f38bee253aee2fb8d52df0d71b4aaf0843800d093a499a55eeca455c349061061590879087908790879087906121f9565b610a26611315565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6002805461079d90612087565b60058181548110610aac57600080fd5b600091825260209091200154905081565b60005461010090046001600160a01b03163314610b1c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640161043f565b6000610b7a610b2e6020840184612289565b610b3e60408501602086016122b3565b610b4b60408601866122dd565b610b5860608801886122dd565b610b6560808a018a6122dd565b610b7560c08c0160a08d01612289565b611383565b60008181526004602052604090205490915060ff1615610bd25760405162461bcd60e51b81526020600482015260136024820152721ddd1e125908185b1c9958591e481cdc195b9d606a1b604482015260640161043f565b60008181526004602052604090819020805460ff19166001179055610c3790610bfd908401846122dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113cb92505050565b610c835760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d6174746564000000604482015260640161043f565b610ccd610c9360608401846122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146f92505050565b610d195760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d61747465640000604482015260640161043f565b6000610d65610d2b60408501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b91505080600114610db15760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b604482015260640161043f565b610dfd610dc160808501856122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061151d915050565b610e535760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b606482015260840161043f565b6001603160981b01634ffd344a60e085013584610e7360c08801886122dd565b8861010001356040518663ffffffff1660e01b8152600401610e99959493929190612324565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612356565b610f265760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b0000000000604482015260640161043f565b6000610f72610f3860808601866122dd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611593915050565b90506000610f7f82611506565b9150506001546002610f919190612276565b8114610fd75760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b604482015260640161043f565b6000610fe583600154611676565b9050600060028054610ff690612087565b915060009050611007838284611840565b905061109d816002805461101a90612087565b80601f016020809104026020016040519081016040528092919081815260200182805461104690612087565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b5050505050611904565b6110e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b604482015260640161043f565b60006111116110f2846014612276565b6110fd856014612276565b86516111099190612378565b869190611840565b9050611124816003805461101a90612087565b6111685760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b604482015260640161043f565b6000611173856119db565b604080518b81526001600160a01b0383166020820152428183015290519192507f182fa52899142d44ff5c45a6354d3b3e868d5b07db6a65580b39bd321bdaf8ac919081900360600190a16000816001600160a01b0316662386f26fc1000060405160006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b505090508061125a5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161043f565b5050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610843565b611298611315565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556112dc61081e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b3361131e61081e565b6001600160a01b0316146107465760405163118cdaa760e01b815233600482015260240161043f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561137f82611a11565b5050565b60006113bd8a8a8a8a8a8a8a8a8a6040516020016113a99998979695949392919061238b565b604051602081830303815290604052611a82565b9a9950505050505050505050565b60008060006113d984611506565b90925090508015806113ec575060001982145b156113fb575060009392505050565b6000611408836001612276565b905060005b8281101561146257855182106114295750600095945050505050565b60006114358784611aa9565b9050600019810361144d575060009695505050505050565b6114578184612276565b92505060010161140d565b5093519093149392505050565b600080600061147d84611506565b9092509050801580611490575060001982145b1561149f575060009392505050565b60006114ac836001612276565b905060005b8281101561146257855182106114cd5750600095945050505050565b60006114d98784611af2565b905060001981036114f1575060009695505050505050565b6114fb8184612276565b9250506001016114b1565b600080611514836000611b56565b91509150915091565b60008160000361152f5750600061158d565b6000805b83811015611586578451821061154e5760009250505061158d565b600061155a8684611cfa565b90506000198103611571576000935050505061158d565b61157b8184612276565b925050600101611533565b5083511490505b92915050565b606060008060005b8481101561160c576115ad8683611cfa565b925060001983036115f85760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b6116028383612276565b915060010161159b565b506116178582611cfa565b915060001982036116625760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b604482015260640161043f565b61166d858284611840565b95945050505050565b606060008061168485611506565b9092509050600182016116e45760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e742070617273696044820152616e6760f01b606482015260840161043f565b8084106117265760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015260640161043f565b600080611734846001612276565b905060005b868110156117bf5761174b8883611b56565b9095509250600183016117955760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b826117a1866001612276565b6117ab9190612276565b6117b59083612276565b9150600101611739565b506117ca8782611b56565b9094509150600182016118145760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b604482015260640161043f565b611835816118228685612276565b61182d906001612276565b899190611840565b979650505050505050565b60608160000361185f57506040805160208101909152600081526118fd565b600061186b8385612276565b9050838111801561187d575080855110155b6118bf5760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015260640161043f565b604051915082604083010160405282825283850182038460208701018481015b808210156118f8578151838301526020820191506118df565b505050505b9392505050565b8151815160009190811461191c57600091505061158d565b60206000805b838311611952575050848101518482015160209092019180821461194d57600094505050505061158d565b611922565b600061195f602085612378565b90505b848110156119cd5786818151811061197c5761197c612260565b602001015160f81c60f81b6001600160f81b0319168882815181106119a3576119a3612260565b01602001516001600160f81b031916146119c55760009550505050505061158d565b600101611962565b506001979650505050505050565b600080600280546119eb90612087565b9150600090506119fd84836014611840565b611a06906123f4565b60601c949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6000806000611ab88585611d9c565b909250905060018201611ad1576000199250505061158d565b80611add836025612276565b611ae79190612276565b61166d906004612276565b6000611aff826009612276565b83511015611b10575060001961158d565b600080611b2785611b22866008612276565b611b56565b909250905060018201611b40576000199250505061158d565b80611b4c836009612276565b61166d9190612276565b6000806000611b658585611dde565b90508060ff16600003611b9a576000858581518110611b8657611b86612260565b016020015190935060f81c9150611cf39050565b83611ba6826001612447565b60ff16611bb39190612276565b85511015611bca5760001960009250925050611cf3565b60008160ff16600203611c0e57611c03611bef611be8876001612276565b8890611e64565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611ce9565b8160ff16600403611c5d57611c50611c2a611be8876001612276565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff169050611ce9565b8160ff16600803611ce957611cdc611c79611be8876001612276565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b6000806000611d098585611b56565b909250905060018201611d22576000199250505061158d565b600080611d30846001612276565b905060005b83811015611d9157611d4b88611b22848a612276565b909550925060018301611d67576000199550505050505061158d565b82611d73866001612276565b611d7d9190612276565b611d879083612276565b9150600101611d35565b509695505050505050565b600080611daa836025612276565b84511015611dbf575060001990506000611cf3565b600080611dd186611b22876024612276565b9097909650945050505050565b6000828281518110611df257611df2612260565b016020015160f81c60ff03611e095750600861158d565b828281518110611e1b57611e1b612260565b016020015160f81c60fe03611e325750600461158d565b828281518110611e4457611e44612260565b016020015160f81c60fd03611e5b5750600261158d565b50600092915050565b60006118fd8383016020015190565b60008083601f840112611e8557600080fd5b50813567ffffffffffffffff811115611e9d57600080fd5b602083019150836020828501011115611cf357600080fd5b600080600080600060608688031215611ecd57600080fd5b853567ffffffffffffffff811115611ee457600080fd5b611ef088828901611e73565b909650945050602086013567ffffffffffffffff811115611f1057600080fd5b611f1c88828901611e73565b96999598509660400135949350505050565b60008060208385031215611f4157600080fd5b823567ffffffffffffffff811115611f5857600080fd5b8301601f81018513611f6957600080fd5b803567ffffffffffffffff811115611f8057600080fd5b8560208260051b8401011115611f9557600080fd5b6020919091019590945092505050565b600060208284031215611fb757600080fd5b5035919050565b602081526000825180602084015260005b81811015611fec5760208186018101516040868401015201611fcf565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561201e57600080fd5b81356001600160a01b03811681146118fd57600080fd5b60006020828403121561204757600080fd5b813567ffffffffffffffff81111561205e57600080fd5b820161012081850312156118fd57600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061209b57607f821691505b6020821081036120bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561210b57806000526020600020601f840160051c810160208510156120e85750805b601f840160051c820191505b8181101561210857600081556001016120f4565b50505b505050565b67ffffffffffffffff83111561212857612128612071565b61213c836121368354612087565b836120c1565b6000601f84116001811461217057600085156121585750838201355b600019600387901b1c1916600186901b178355612108565b600083815260209020601f19861690835b828110156121a15786850135825560209485019460019092019101612181565b50868210156121be5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061220d6060830187896121d0565b82810360208401526122208186886121d0565b9150508260408301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761158d5761158d612233565b634e487b7160e01b600052603260045260246000fd5b8082018082111561158d5761158d612233565b60006020828403121561229b57600080fd5b81356001600160e01b0319811681146118fd57600080fd5b6000602082840312156122c557600080fd5b81356001600160f01b0319811681146118fd57600080fd5b6000808335601e198436030181126122f457600080fd5b83018035915067ffffffffffffffff82111561230f57600080fd5b602001915036819003821315611cf357600080fd5b8581528460208201526080604082015260006123446080830185876121d0565b90508260608301529695505050505050565b60006020828403121561236857600080fd5b815180151581146118fd57600080fd5b8181038181111561158d5761158d612233565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b805160208201516bffffffffffffffffffffffff19811691906014821015612440576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b60ff818116838216019081111561158d5761158d61223356" + "code": "0x60806040526004361061019c5760003560e01c80638786dba7116100ec578063d761753e1161008a578063e613ae0011610064578063e613ae001461048e578063f119a9bd146104a9578063f2fde38b146104c9578063f8e655d2146104e957600080fd5b8063d761753e14610431578063dd95c7c614610459578063e30c39781461047957600080fd5b8063a41c5cf3116100c6578063a41c5cf3146103af578063b3ab15fb146103c4578063bafa9eb2146103e4578063c045577b1461040457600080fd5b80638786dba71461037257806387f8bf56146103855780638da5cb5b1461039a57600080fd5b8063570ca73511610159578063715018a611610133578063715018a61461031357806374ab4a8314610328578063781952a81461034857806379ba50971461035d57600080fd5b8063570ca735146102945780635d3e3176146102d15780635e3cc740146102f357600080fd5b806311e53a01146101a1578063158ef93e146101e1578063198546231461020b5780634126013714610220578063419759f514610240578063471ba1e314610256575b600080fd5b3480156101ad57600080fd5b506101ce6101bc3660046129ee565b60276020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101ed57600080fd5b506000546101fb9060ff1681565b60405190151581526020016101d8565b61021e610219366004612a4b565b610509565b005b34801561022c57600080fd5b5061021e61023b366004612afb565b6106e2565b34801561024c57600080fd5b506101ce60215481565b34801561026257600080fd5b506102766102713660046129ee565b6108ef565b604080519283526001600160e01b03199091166020830152016101d8565b3480156102a057600080fd5b506000546102b99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d8565b3480156102dd57600080fd5b506102e6610920565b6040516101d89190612b96565b3480156102ff57600080fd5b5061021e61030e366004612be2565b6109ae565b34801561031f57600080fd5b5061021e610d65565b34801561033457600080fd5b5061021e610343366004612c1e565b610d79565b34801561035457600080fd5b506026546101ce565b34801561036957600080fd5b5061021e610f4c565b61021e610380366004612c88565b610f94565b34801561039157600080fd5b506102e66110bb565b3480156103a657600080fd5b506102b96110c8565b3480156103bb57600080fd5b506102e66110fd565b3480156103d057600080fd5b5061021e6103df366004612cb4565b61110a565b3480156103f057600080fd5b506101fb6103ff3660046129ee565b61117b565b34801561041057600080fd5b506101ce61041f3660046129ee565b60286020526000908152604090205481565b34801561043d57600080fd5b506102b973deaddeaddeaddeaddeaddeaddeaddeaddeaddead81565b34801561046557600080fd5b5061021e610474366004612be2565b6111a6565b34801561048557600080fd5b506102b9611606565b34801561049a57600080fd5b506102b96001603160981b0181565b3480156104b557600080fd5b5061021e6104c4366004612cdd565b61162f565b3480156104d557600080fd5b5061021e6104e4366004612cb4565b6116a3565b3480156104f557600080fd5b5061021e610504366004612d1e565b611728565b82811461054f5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60215461055d908490612d97565b34146105a55760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b60265460005b848110156106da57600060405180604001604052808888858181106105d2576105d2612dae565b9050602002013581526020018686858181106105f0576105f0612dae565b90506020020160208101906106059190612dc4565b6001600160e01b03191690526026805460018101825560009190915281517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a359460029092029182015560208201517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909101805463ffffffff191660e09290921c91909117905590507f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada816106b98486612ddf565b426040516106c993929190612df2565b60405180910390a1506001016105ab565b505050505050565b3373deaddeaddeaddeaddeaddeaddeaddeaddeaddead146107455760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206973206e6f74207468652073797374656d2063616c6c6572006044820152606401610546565b60005460ff16156107985760405162461bcd60e51b815260206004820152601f60248201527f436f6e747261637420697320616c726561647920696e697469616c697a6564006044820152606401610546565b806000036107e85760405162461bcd60e51b815260206004820152601a60248201527f4465706f73697420616d6f756e742063616e6e6f7420626520300000000000006044820152606401610546565b60008490036108095760405162461bcd60e51b815260040161054690612e20565b6000805460ff191660011790556023610823858783612ef0565b506024610831838583612ef0565b50602181905560008054610100600160a81b03191674deaddeaddeaddeaddeaddeaddeaddeaddeaddead001781556040805191825273deaddeaddeaddeaddeaddeaddeaddeaddeaddead60208301527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a17f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc858585856040516108e09493929190612fd8565b60405180910390a15050505050565b602681815481106108ff57600080fd5b60009182526020909120600290910201805460019091015490915060e01b82565b6025805461092d90612e6d565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612e6d565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505081565b6109b7816117a2565b5060009050610a066109cc606084018461300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ac592505050565b915060009050610a63610a1c606085018561300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5e925060019150869050613050565b611adc565b90506000610a7082611c54565b90506000610a88610a8383836020611cd6565b611d99565b90506000610aa9610a836020808651610aa19190613050565b869190611cd6565b600083815260276020526040812054919250819003610b015760405162461bcd60e51b815260206004820152601460248201527311195c1bdcda5d08191bc81b9bdd08195e1a5cdd60621b6044820152606401610546565b6000610b4d610b1360808a018a61300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611e1e915050565b90506000610b5c826001611f01565b9050600060258054610b6d90612e6d565b915060009050610b7e838284611cd6565b9050610c148160258054610b9190612e6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612e6d565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b5050505050612085565b610c605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736c6173684f7254616b65207363726970740000000000006044820152606401610546565b6000602881610c70600189613050565b815260200190815260200160002054905060008160001480610c9a5750610c968861215c565b8214155b905080610ce95760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f74206d616c6963696f7573000000000000006044820152606401610546565b600180896103e88110610cfe57610cfe612dae565b602091828204019190066101000a81548160ff0219169083151502179055507ff918cdaebea74c5a8c3b02d7404c162f507551b158202cedcba9b6a74eabdff288604051610d4e91815260200190565b60405180910390a150505050505050505050505050565b610d6d612169565b610d77600061219b565b565b610d82836117a2565b5060009050610dd3610d97604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506121d7915050565b90506000610de08261232a565b90506000610ded83612337565b9050600060268581548110610e0457610e04612dae565b60009182526020918290206040805180820190915260029290920201805480835260019091015460e01b6001600160e01b03191692820192909252915083148015610e665750816001600160e01b03191681602001516001600160e01b031916145b610ea65760405162461bcd60e51b81526020600482015260116024820152706e6f74206d61746368696e67205554584f60781b6044820152606401610546565b6000610eb86109cc60608a018a61300a565b915060009050610ece610a1c60608b018b61300a565b90506000610edb82611c54565b90506000610ee882611d99565b9050610ef38161215c565b60008a8152602860209081526040918290209290925580518b81529182018390527feedf47c2f61b040827944fd45e44ef6d742354b34e1af7dd99a56f444ec79347910160405180910390a15050505050505050505050565b3380610f56611606565b6001600160a01b031614610f885760405163118cdaa760e01b81526001600160a01b0382166004820152602401610546565b610f918161219b565b50565b6021543414610fdf5760405162461bcd60e51b8152602060048201526017602482015276125b9d985b1a59081dda5d1a191c985dc8185b5bdd5b9d604a1b6044820152606401610546565b6040805180820182528381526001600160e01b03198316602082019081526026805460018101825560009190915282517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594600283029081019190915591517f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3595909201805463ffffffff191660e09390931c9290921790915591519091907f3311a04a346a103ac115cca33028a2bc82f1964805860d0d3fc84a2772496ada906110ad90849084904290612df2565b60405180910390a150505050565b6024805461092d90612e6d565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6023805461092d90612e6d565b611112612169565b60008054610100600160a81b0319166101006001600160a01b038481168281029390931793849055604080519290940416815260208101919091527ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad03910160405180910390a150565b6001816103e8811061118c57600080fd5b60209182820401919006915054906101000a900460ff1681565b60005461010090046001600160a01b031633146112055760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f720000000000006044820152606401610546565b600080611211836117a2565b915091508060011461125e5760405162461bcd60e51b815260206004820152601660248201527513db9b1e481bdb99481a5b9c1d5d08185b1b1bddd95960521b6044820152606401610546565b60006113096112706020860186612dc4565b61127d604087018761300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112bf92505050606088018861300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113049250505060c0890160a08a01612dc4565b612344565b6000818152602760205260409020549091501561135d5760405162461bcd60e51b81526020600482015260126024820152711d1e125908185b1c9958591e481cdc195b9d60721b6044820152606401610546565b60226000815461136c90613063565b9182905550600082815260276020526040812091909155611393610b13608087018761300a565b905060006113a082611ac5565b915050806003146113eb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207769746e657373206974656d7360581b6044820152606401610546565b60006113f8836001611f01565b905060006023805461140990612e6d565b91506000905061141a838284611cd6565b905061142d8160238054610b9190612e6d565b6114725760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590819195c1bdcda5d081cd8dc9a5c1d60521b6044820152606401610546565b60006114a66024805461148490612e6d565b86516114909250613050565b6024805461149d90612e6d565b87929150611cd6565b90506114b98160248054610b9190612e6d565b6114fd5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6c6e4d2e0e840e6eaccccd2f605b1b6044820152606401610546565b600061150885612374565b602254604080518d8152602081018c90526001600160a01b038416818301524260608201526080810192909252519192507fa82453ca34121b3ecb910d957824e27c5dc6465315949facd15fb72886490058919081900360a00190a16021546040516000916001600160a01b038416918381818185875af1925050503d80600081146115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610546565b505050505050505050505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006110ed565b611637612169565b60008190036116585760405162461bcd60e51b815260040161054690612e20565b6025611665828483612ef0565b507f8578c80bdea3ff51431011ed88db9cb415de2cf64f9ed5e7137288268cbdeb2c828260405161169792919061307c565b60405180910390a15050565b6116ab612169565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556116ef6110c8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611730612169565b60008390036117515760405162461bcd60e51b815260040161054690612e20565b602361175e848683612ef0565b50602461176c828483612ef0565b507f80bd1fdfe157286ce420ee763f91748455b249605748e5df12dad9844402bafc848484846040516110ad9493929190612fd8565b600080806118026117b66020860186612dc4565b6117c66040870160208801613090565b6117d3604088018861300a565b6117e060608a018a61300a565b6117ed60808c018c61300a565b6117fd60c08e0160a08f01612dc4565b6123aa565b905061184e611814604086018661300a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123de92505050565b61189a5760405162461bcd60e51b815260206004820152601d60248201527f56696e206973206e6f742070726f7065726c7920666f726d61747465640000006044820152606401610546565b6118e46118aa606086018661300a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248292505050565b6119305760405162461bcd60e51b815260206004820152601e60248201527f566f7574206973206e6f742070726f7065726c7920666f726d617474656400006044820152606401610546565b60006119426109cc604087018761300a565b91506119929050611956608087018761300a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612519915050565b6119e85760405162461bcd60e51b815260206004820152602160248201527f5769746e657373206973206e6f742070726f7065726c7920666f726d617474656044820152601960fa1b6064820152608401610546565b6001603160981b01634ffd344a60e087013584611a0860c08a018a61300a565b8a61010001356040518663ffffffff1660e01b8152600401611a2e9594939291906130ba565b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906130ec565b611abb5760405162461bcd60e51b815260206004820152601b60248201527f5472616e73616374696f6e206973206e6f7420696e20626c6f636b00000000006044820152606401610546565b9094909350915050565b600080611ad383600061258e565b91509150915091565b6060600080611aea85611ac5565b909250905060018201611b0f5760405162461bcd60e51b81526004016105469061310e565b808410611b525760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b6044820152606401610546565b600080611b60846001612ddf565b905060005b86811015611bde57611b778883612730565b92506000198303611bca5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611bd48383612ddf565b9150600101611b65565b50611be98782612730565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b65790000000000006044820152606401610546565b611c47878284611cd6565b9450505050505b92915050565b606081600981518110611c6957611c69612dae565b6020910101516001600160f81b031916603560f91b14611c9757505060408051602081019091526000815290565b600082600a81518110611cac57611cac612dae565b01602001516001600160f81b031981169150611ccf908490600b9060f81c611cd6565b9392505050565b606081600003611cf55750604080516020810190915260008152611ccf565b6000611d018385612ddf565b90508381118015611d13575080855110155b611d555760405162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b6044820152606401610546565b604051915082604083010160405282825283850182038460208701018481015b80821015611d8e57815183830152602082019150611d75565b505050509392505050565b60008151600003611dac57506000919050565b81516020811115611e0a5760405162461bcd60e51b815260206004820152602260248201527f42797465732063616e6e6f74206265206d6f7265207468616e20333220627974604482015261657360f01b6064820152608401610546565b60209283015192036008029190911c919050565b606060008060005b84811015611e9757611e388683612794565b92506000198303611e835760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611e8d8383612ddf565b9150600101611e26565b50611ea28582612794565b91506000198203611eed5760405162461bcd60e51b815260206004820152601560248201527442616420566172496e7420696e207769746e65737360581b6044820152606401610546565b611ef8858284611cd6565b95945050505050565b6060600080611f0f85611ac5565b909250905060018201611f345760405162461bcd60e51b81526004016105469061310e565b808410611f765760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b600080611f84846001612ddf565b905060005b8681101561200f57611f9b888361258e565b909550925060018301611fe55760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b82611ff1866001612ddf565b611ffb9190612ddf565b6120059083612ddf565b9150600101611f89565b5061201a878261258e565b9094509150600182016120645760405162461bcd60e51b815260206004820152601260248201527142616420566172496e7420696e206974656d60701b6044820152606401610546565b611c47816120728685612ddf565b61207d906001612ddf565b899190611cd6565b8151815160009190811461209d576000915050611c4e565b60206000805b8383116120d357505084810151848201516020909201918082146120ce576000945050505050611c4e565b6120a3565b60006120e0602085613050565b90505b8481101561214e578681815181106120fd576120fd612dae565b602001015160f81c60f81b6001600160f81b03191688828151811061212457612124612dae565b01602001516001600160f81b0319161461214657600095505050505050611c4e565b6001016120e3565b506001979650505050505050565b6000611c4e826001612ddf565b336121726110c8565b6001600160a01b031614610d775760405163118cdaa760e01b8152336004820152602401610546565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556121d382612836565b5050565b60606000806121e585611ac5565b90925090506001820161220a5760405162461bcd60e51b81526004016105469061310e565b80841061224c5760405162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b6044820152606401610546565b60008061225a846001612ddf565b905060005b868110156122d25761227188836128a7565b925060001983036122be5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6122c88383612ddf565b915060010161225f565b506122dd87826128a7565b91506000198203611c3c5760405162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b6044820152606401610546565b6020810151600090611c4e565b6000611c4e8260206128f0565b6000611ef8858585856040516020016123609493929190613150565b6040516020818303038152906040526128ff565b6000806023805461238490612e6d565b91506000905061239684836014611cd6565b61239f906131ad565b60601c949350505050565b60006123d08a8a8a8a8a8a8a8a8a60405160200161236099989796959493929190613200565b9a9950505050505050505050565b60008060006123ec84611ac5565b90925090508015806123ff575060001982145b1561240e575060009392505050565b600061241b836001612ddf565b905060005b82811015612475578551821061243c5750600095945050505050565b600061244887846128a7565b90506000198103612460575060009695505050505050565b61246a8184612ddf565b925050600101612420565b5093519093149392505050565b600080600061249084611ac5565b90925090508015806124a3575060001982145b156124b2575060009392505050565b60006124bf836001612ddf565b905060005b8281101561247557855182106124e05750600095945050505050565b60006124ec8784612730565b90506000198103612504575060009695505050505050565b61250e8184612ddf565b9250506001016124c4565b60008160000361252b57506000611c4e565b6000805b83811015612582578451821061254a57600092505050611c4e565b60006125568684612794565b9050600019810361256d5760009350505050611c4e565b6125778184612ddf565b92505060010161252f565b50835114905092915050565b600080600061259d8585612926565b90508060ff166000036125d25760008585815181106125be576125be612dae565b016020015190935060f81c91506127299050565b836125de826001613269565b60ff166125eb9190612ddf565b855110156126025760001960009250925050612729565b60008160ff166002036126465761263b612627612620876001612ddf565b88906128f0565b62ffff0060e882901c1660f89190911c1790565b61ffff16905061271f565b8160ff1660040361269557612688612662612620876001612ddf565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b63ffffffff16905061271f565b8160ff1660080361271f576127136126b1612620876001612ddf565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b600061273d826009612ddf565b8351101561274e5750600019611c4e565b60008061276585612760866008612ddf565b61258e565b90925090506001820161277e5760001992505050611c4e565b8061278a836009612ddf565b611ef89190612ddf565b60008060006127a3858561258e565b9092509050600182016127bc5760001992505050611c4e565b6000806127ca846001612ddf565b905060005b8381101561282b576127e588612760848a612ddf565b9095509250600183016128015760001995505050505050611c4e565b8261280d866001612ddf565b6128179190612ddf565b6128219083612ddf565b91506001016127cf565b509695505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008060006128b685856129ac565b9092509050600182016128cf5760001992505050611c4e565b806128db836025612ddf565b6128e59190612ddf565b611ef8906004612ddf565b6000611ccf8383016020015190565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b600082828151811061293a5761293a612dae565b016020015160f81c60ff0361295157506008611c4e565b82828151811061296357612963612dae565b016020015160f81c60fe0361297a57506004611c4e565b82828151811061298c5761298c612dae565b016020015160f81c60fd036129a357506002611c4e565b50600092915050565b6000806129ba836025612ddf565b845110156129cf575060001990506000612729565b6000806129e186612760876024612ddf565b9097909650945050505050565b600060208284031215612a0057600080fd5b5035919050565b60008083601f840112612a1957600080fd5b5081356001600160401b03811115612a3057600080fd5b6020830191508360208260051b850101111561272957600080fd5b60008060008060408587031215612a6157600080fd5b84356001600160401b03811115612a7757600080fd5b612a8387828801612a07565b90955093505060208501356001600160401b03811115612aa257600080fd5b612aae87828801612a07565b95989497509550505050565b60008083601f840112612acc57600080fd5b5081356001600160401b03811115612ae357600080fd5b60208301915083602082850101111561272957600080fd5b600080600080600060608688031215612b1357600080fd5b85356001600160401b03811115612b2957600080fd5b612b3588828901612aba565b90965094505060208601356001600160401b03811115612b5457600080fd5b612b6088828901612aba565b96999598509660400135949350505050565b60005b83811015612b8d578181015183820152602001612b75565b50506000910152565b6020815260008251806020840152612bb5816040850160208701612b72565b601f01601f19169190910160400192915050565b60006101208284031215612bdc57600080fd5b50919050565b600060208284031215612bf457600080fd5b81356001600160401b03811115612c0a57600080fd5b612c1684828501612bc9565b949350505050565b600080600060608486031215612c3357600080fd5b83356001600160401b03811115612c4957600080fd5b612c5586828701612bc9565b9660208601359650604090950135949350505050565b80356001600160e01b031981168114612c8357600080fd5b919050565b60008060408385031215612c9b57600080fd5b82359150612cab60208401612c6b565b90509250929050565b600060208284031215612cc657600080fd5b81356001600160a01b0381168114611ccf57600080fd5b60008060208385031215612cf057600080fd5b82356001600160401b03811115612d0657600080fd5b612d1285828601612aba565b90969095509350505050565b60008060008060408587031215612d3457600080fd5b84356001600160401b03811115612d4a57600080fd5b612d5687828801612aba565b90955093505060208501356001600160401b03811115612d7557600080fd5b612aae87828801612aba565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c4e57611c4e612d81565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612dd657600080fd5b611ccf82612c6b565b80820180821115611c4e57611c4e612d81565b835181526020938401516001600160e01b031916938101939093526040830191909152606082015260800190565b6020808252601e908201527f4465706f736974207363726970742063616e6e6f7420626520656d7074790000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612e8157607f821691505b602082108103612bdc57634e487b7160e01b600052602260045260246000fd5b601f821115612eeb57806000526020600020601f840160051c81016020851015612ec85750805b601f840160051c820191505b81811015612ee85760008155600101612ed4565b50505b505050565b6001600160401b03831115612f0757612f07612e57565b612f1b83612f158354612e6d565b83612ea1565b6000601f841160018114612f4f5760008515612f375750838201355b600019600387901b1c1916600186901b178355612ee8565b600083815260209020601f19861690835b82811015612f805786850135825560209485019460019092019101612f60565b5086821015612f9d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612fec604083018688612faf565b8281036020840152612fff818587612faf565b979650505050505050565b6000808335601e1984360301811261302157600080fd5b8301803591506001600160401b0382111561303b57600080fd5b60200191503681900382131561272957600080fd5b81810381811115611c4e57611c4e612d81565b60006001820161307557613075612d81565b5060010190565b602081526000612c16602083018486612faf565b6000602082840312156130a257600080fd5b81356001600160f01b031981168114611ccf57600080fd5b8581528460208201526080604082015260006130da608083018587612faf565b90508260608301529695505050505050565b6000602082840312156130fe57600080fd5b81518015158114611ccf57600080fd5b60208082526022908201527f52656164206f76657272756e20647572696e6720566172496e742070617273696040820152616e6760f01b606082015260800190565b6001600160e01b0319851681528351600090613173816004850160208901612b72565b84519083019061318a816004840160208901612b72565b6001600160e01b0319949094169301600481019390935250506008019392505050565b805160208201516bffffffffffffffffffffffff198116919060148210156131f9576bffffffffffffffffffffffff196bffffffffffffffffffffffff198360140360031b1b82161692505b5050919050565b6001600160e01b03198a1681526001600160f01b031989166004820152868860068301376000878201600681016000815287898237506000908701600601908152848682376001600160e01b031993909316929093019182525060040198975050505050505050565b60ff8181168382160190811115611c4e57611c4e612d8156" }, { "address": "0x3200000000000000000000000000000000000003",