@zero-tech/zkevm-contracts
Version:
Core contracts for the Polygon Hermez zkEVM
870 lines • 118 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "PolygonZkEVMBridgeMock",
"sourceName": "contracts/mocks/PolygonZkEVMBridgeMock.sol",
"abi": [
{
"inputs": [],
"name": "AlreadyClaimed",
"type": "error"
},
{
"inputs": [],
"name": "AmountDoesNotMatchMsgValue",
"type": "error"
},
{
"inputs": [],
"name": "DestinationNetworkInvalid",
"type": "error"
},
{
"inputs": [],
"name": "EtherTransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "GlobalExitRootInvalid",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSmtProof",
"type": "error"
},
{
"inputs": [],
"name": "MerkleTreeFull",
"type": "error"
},
{
"inputs": [],
"name": "MessageFailed",
"type": "error"
},
{
"inputs": [],
"name": "MsgValueNotZero",
"type": "error"
},
{
"inputs": [],
"name": "NotValidAmount",
"type": "error"
},
{
"inputs": [],
"name": "NotValidOwner",
"type": "error"
},
{
"inputs": [],
"name": "NotValidSignature",
"type": "error"
},
{
"inputs": [],
"name": "NotValidSpender",
"type": "error"
},
{
"inputs": [],
"name": "OnlyEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "OnlyNotEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "OnlyPolygonZkEVM",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "leafType",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
},
{
"indexed": false,
"internalType": "uint32",
"name": "depositCount",
"type": "uint32"
}
],
"name": "BridgeEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "ClaimEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EmergencyStateActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EmergencyStateDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"indexed": false,
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "wrappedTokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "NewWrappedToken",
"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"
},
{
"inputs": [],
"name": "activateEmergencyState",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "forceUpdateGlobalExitRoot",
"type": "bool"
},
{
"internalType": "bytes",
"name": "permitData",
"type": "bytes"
}
],
"name": "bridgeAsset",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "bool",
"name": "forceUpdateGlobalExitRoot",
"type": "bool"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "bridgeMessage",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "mainnetExitRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "rollupExitRoot",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "claimAsset",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "mainnetExitRoot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "rollupExitRoot",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "metadata",
"type": "bytes"
}
],
"name": "claimMessage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "claimedBitMap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deactivateEmergencyState",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "depositCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDepositRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "leafType",
"type": "uint8"
},
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "destinationNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "destinationAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "metadataHash",
"type": "bytes32"
}
],
"name": "getLeafValue",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
}
],
"name": "getTokenWrappedAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "globalExitRootManager",
"outputs": [
{
"internalType": "contract IBasePolygonZkEVMGlobalExitRoot",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_networkID",
"type": "uint32"
},
{
"internalType": "contract IBasePolygonZkEVMGlobalExitRoot",
"name": "_globalExitRootManager",
"type": "address"
},
{
"internalType": "address",
"name": "_polygonZkEVMaddress",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "isClaimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isEmergencyState",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastUpdatedDepositCount",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxEtherBridge",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "networkID",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "polygonZkEVMaddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"name": "precalculatedWrapperAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_maxEtherBridge",
"type": "uint256"
}
],
"name": "setMaxEtherBridge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_networkID",
"type": "uint32"
}
],
"name": "setNetworkID",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "tokenInfoToWrappedToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updateGlobalExitRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "leafHash",
"type": "bytes32"
},
{
"internalType": "bytes32[32]",
"name": "smtProof",
"type": "bytes32[32]"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "bytes32",
"name": "root",
"type": "bytes32"
}
],
"name": "verifyMerkleProof",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "wrappedTokenToTokenInfo",
"outputs": [
{
"internalType": "uint32",
"name": "originNetwork",
"type": "uint32"
},
{
"internalType": "address",
"name": "originTokenAddress",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b506160a1806100206000396000f3fe608060405260043610620001e75760003560e01c8063715018a6116200010b578063bab161bf11620000a1578063dbc16976116200006c578063dbc169761462000728578063ee25560b1462000740578063f2fde38b1462000771578063fb570834146200079657600080fd5b8063bab161bf1462000663578063be5831c7146200069d578063cd58657914620006d9578063d02103ca14620006f057600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005b457806391e57e2d14620005e15780639e34070f14620005f9578063aaa13cc2146200063e57600080fd5b8063715018a6146200053d57806379e2cf97146200055557806381b1c174146200056d57600080fd5b80632d2c9d94116200018157806334ac9cf2116200015857806334ac9cf214620003dd5780633ae05047146200040c5780633e1970431462000424578063647c576c146200051857600080fd5b80632d2c9d9414620003085780632dfdf0b5146200032d578063318aee3d146200035457600080fd5b8063240ff37811620001c2578063240ff37814620002825780632b5e42e714620002995780632c3f58cd14620002be5780632cffd02e14620002e357600080fd5b806315064c9614620001ec5780632072f6c5146200021d57806322e95f2c1462000237575b600080fd5b348015620001f957600080fd5b50606854620002089060ff1681565b60405190151581526020015b60405180910390f35b3480156200022a57600080fd5b5062000235620007bb565b005b3480156200024457600080fd5b506200025c62000256366004620036db565b62000819565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000214565b620002356200029336600462003772565b620008bc565b348015620002a657600080fd5b5062000235620002b8366004620037f6565b62000ae4565b348015620002cb57600080fd5b5062000235620002dd36600462003810565b62000af3565b348015620002f057600080fd5b50620002356200030236600462003848565b62000b39565b3480156200031557600080fd5b50620002356200032736600462003848565b620010dd565b3480156200033a57600080fd5b506200034560535481565b60405190815260200162000214565b3480156200036157600080fd5b50620003ab620003733660046200392e565b606b6020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000214565b348015620003ea57600080fd5b50606c546200025c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200041957600080fd5b5062000345620012e1565b3480156200043157600080fd5b5062000345620004433660046200395e565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200052557600080fd5b506200023562000537366004620039e8565b620013c7565b3480156200054a57600080fd5b506200023562001622565b3480156200056257600080fd5b506200023562001638565b3480156200057a57600080fd5b506200025c6200058c366004620037f6565b606a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005c157600080fd5b50609f5473ffffffffffffffffffffffffffffffffffffffff166200025c565b348015620005ee57600080fd5b506200034560d15481565b3480156200060657600080fd5b506200020862000618366004620037f6565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200064b57600080fd5b506200025c6200065d36600462003a38565b62001672565b3480156200067057600080fd5b506068546200068790610100900463ffffffff1681565b60405163ffffffff909116815260200162000214565b348015620006aa57600080fd5b506068546200068790790100000000000000000000000000000000000000000000000000900463ffffffff1681565b62000235620006ea36600462003aec565b6200185e565b348015620006fd57600080fd5b506068546200025c9065010000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200073557600080fd5b506200023562001932565b3480156200074d57600080fd5b50620003456200075f366004620037f6565b60696020526000908152604090205481565b3480156200077e57600080fd5b5062000235620007903660046200392e565b6200198e565b348015620007a357600080fd5b5062000208620007b536600462003b8e565b62001a4b565b606c5473ffffffffffffffffffffffffffffffffffffffff1633146200080d576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200081762001b34565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602483015282516018818403018152603890920183528151918101919091206000908152606a909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b60685460ff1615620008fa576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff868116610100909204161480620009205750600263ffffffff861610155b1562000958576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff16338888348888605354604051620009ae9998979695949392919062003c24565b60405180910390a162000acc62000ac66001606860019054906101000a900463ffffffff16338989348989604051620009e992919062003c9f565b60405180910390206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b62001bc8565b821562000add5762000add62001cdf565b5050505050565b62000aee62001db4565b60d155565b62000afd62001db4565b6068805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b60685460ff161562000b77576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000b8e8b8b8b8b8b8b8b8b8b8b8b600062001e37565b73ffffffffffffffffffffffffffffffffffffffff861662000c6a576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162000be3919062003d04565b60006040518083038185875af1925050503d806000811462000c22576040519150601f19603f3d011682016040523d82523d6000602084013e62000c27565b606091505b505090508062000c63576040517f6747a28800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5062001065565b60685463ffffffff61010090910481169088160362000cac5762000ca673ffffffffffffffffffffffffffffffffffffffff8716858562002028565b62001065565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152606a90935291205490915073ffffffffffffffffffffffffffffffffffffffff168062000fd7576000808062000d818688018862003e19565b92509250925060008584848460405162000d9b9062003695565b62000da99392919062003edb565b8190604051809103906000f590508015801562000dca573d6000803e3d6000fd5b506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b15801562000e4057600080fd5b505af115801562000e55573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000fc595949392919062003f18565b60405180910390a15050505062001062565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b1580156200104857600080fd5b505af11580156200105d573d6000803e3d6000fd5b505050505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b60685460ff16156200111b576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620011328b8b8b8b8b8b8b8b8b8b8b600162001e37565b60008473ffffffffffffffffffffffffffffffffffffffff1684888a868660405160240162001165949392919062003f60565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620011e8919062003d04565b60006040518083038185875af1925050503d806000811462001227576040519150601f19603f3d011682016040523d82523d6000602084013e6200122c565b606091505b505090508062001268576040517f37e391c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b605354600090819081805b6020811015620013be578083901c6001166001036200134f57603381602081106200131b576200131b62003fa8565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200137c565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b60408051602081018490529081018390526060016040516020818303038152906040528051906020012091508080620013b59062004006565b915050620012ec565b50919392505050565b600054610100900460ff1615808015620013e85750600054600160ff909116105b80620014045750303b15801562001404575060005460ff166001145b62001496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620014f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606880547fffffffffffffff000000000000000000000000000000000000000000000000ff1661010063ffffffff8716027fffffffffffffff0000000000000000000000000000000000000000ffffffffff16176501000000000073ffffffffffffffffffffffffffffffffffffffff8681169190910291909117909155606c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790556703782dace9d9000060d155620015b8620020fe565b80156200161c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200162c62001db4565b6200081760006200219d565b605354606854790100000000000000000000000000000000000000000000000000900463ffffffff16101562000817576200081762001cdf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620017089062003695565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905262001753908d908d908d908d908d9060200162004041565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001791929160200162004082565b604051602081830303815290604052805190602001206040516020016200181a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101209a9950505050505050505050565b60d15434111562001918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d61784574686560648201527f7242726964676500000000000000000000000000000000000000000000000000608482015260a4016200148d565b620019298787878787878762002214565b50505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff16331462001984576040517fe2e8106b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620008176200276f565b6200199862001db4565b73ffffffffffffffffffffffffffffffffffffffff811662001a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200148d565b62001a48816200219d565b50565b600084815b602081101562001b2657600163ffffffff8616821c8116900362001ac25785816020811062001a835762001a8362003fa8565b60200201358260405160200162001aa4929190918252602082015260400190565b60405160208183030381529060405280519060200120915062001b11565b8186826020811062001ad85762001ad862003fa8565b602002013560405160200162001af8929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b8062001b1d8162004006565b91505062001a50565b50821490505b949350505050565b60685460ff161562001b72576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b80600162001bd960206002620041ee565b62001be59190620041fc565b6053541062001c20576040517fef5ccf6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060536000815462001c339062004006565b9182905550905060005b602081101562001ccf578082901c60011660010362001c7557826033826020811062001c6d5762001c6d62003fa8565b015550505050565b6033816020811062001c8b5762001c8b62003fa8565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250808062001cc69062004006565b91505062001c3d565b5062001cda62004212565b505050565b6053546068805463ffffffff909216790100000000000000000000000000000000000000000000000000027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179081905573ffffffffffffffffffffffffffffffffffffffff65010000000000909104166333d6247d62001d65620012e1565b6040518263ffffffff1660e01b815260040162001d8491815260200190565b600060405180830381600087803b15801562001d9f57600080fd5b505af11580156200161c573d6000803e3d6000fd5b609f5473ffffffffffffffffffffffffffffffffffffffff16331462000817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200148d565b62001e488b63ffffffff16620027ff565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915260009165010000000000900473ffffffffffffffffffffffffffffffffffffffff169063257b3632906084016020604051808303816000875af115801562001eeb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f11919062004241565b90508060000362001f4d576040517e2f6fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60685463ffffffff888116610100909204161462001f97576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606854600090610100900463ffffffff1662001fb557508962001fb8565b508a5b62001fe162001fd8848c8c8c8c8c8c8c604051620009e992919062003c9f565b8f8f8462001a4b565b62002018576040517fe0417cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001cda9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002864565b600054610100900460ff1662002197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200148d565b62000817335b609f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60685460ff161562002252576040517f2f0047fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200225c62002977565b60685463ffffffff888116610100909204161480620022825750600263ffffffff881610155b15620022ba576040517f0595ea2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060608773ffffffffffffffffffffffffffffffffffffffff8816620023205788341462002316576040517fb89240f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600092506200261a565b341562002359576040517f798ee6f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8089166000908152606b602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002449576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018b905273ffffffffffffffffffffffffffffffffffffffff8a1690639dc29fac90604401600060405180830381600087803b1580156200241c57600080fd5b505af115801562002431573d6000803e3d6000fd5b50505050806020015194508060000151935062002618565b85156200245e576200245e898b8989620029ec565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015620024cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024f2919062004241565b90506200251873ffffffffffffffffffffffffffffffffffffffff8b1633308e62002f0a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8c16906370a0823190602401602060405180830381865afa15801562002586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ac919062004241565b9050620025ba8282620041fc565b6068548c9850610100900463ffffffff1696509350620025da8762002f6a565b620025e58c62003082565b620025f08d6200318f565b604051602001620026049392919062003edb565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e86886053546040516200265c9897969594939291906200425b565b60405180910390a16200275062000ac6600085878f8f8789805190602001206040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b861562002761576200276162001cdf565b505050506200192960018055565b60685460ff16620027ac576040517f5386698100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b9182189283905592909190818316900362000add576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000620028c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200328b9092919063ffffffff16565b80519091501562001cda5780806020019051810190620028e99190620042d4565b62001cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200148d565b600260015403620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200148d565b6002600155565b6000620029fd6004828486620042f4565b62002a089162004320565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c8757600080808080808062002a6b896004818d620042f4565b81019062002a7a919062004369565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002aee576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616301462002b3e576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a851462002b78576040517f03fffc4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c33919062003d04565b6000604051808303816000865af19150503d806000811462002c72576040519150601f19603f3d011682016040523d82523d6000602084013e62002c77565b606091505b5050505050505050505062000add565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d03576040517fe282c0ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808080808062002d1b8a6004818e620042f4565b81019062002d2a9190620043c4565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002da0576040517f912ecce700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716301462002df0576040517f750643af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002eb4919062003d04565b6000604051808303816000865af19150503d806000811462002ef3576040519150601f19603f3d011682016040523d82523d6000602084013e62002ef8565b606091505b50505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200161c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200207b565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06fdde03000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162002fee919062003d04565b600060405180830381855afa9150503d80600081146200302b576040519150601f19603f3d011682016040523d82523d6000602084013e62003030565b606091505b50915091508162003077576040518060400160405280600781526020017f4e4f5f4e414d450000000000000000000000000000000000000000000000000081525062001b2c565b62001b2c816200329c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff86169162003106919062003d04565b600060405180830381855afa9150503d806000811462003143576040519150601f19603f3d011682016040523d82523d6000602084013e62003148565b606091505b50915091508162003077576040518060400160405280600981526020017f4e4f5f53594d424f4c000000000000000000000000000000000000000000000081525062001b2c565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169162003212919062003d04565b600060405180830381855afa9150503d80600081146200324f576040519150601f19603f3d011682016040523d82523d6000602084013e62003254565b606091505b509150915081801562003268575080516020145b6200327557601262001b2c565b8080602001905181019062001b2c919062004450565b606062001b2c84846000856200348c565b60606040825110620032be5781806020019051810190620008b6919062004470565b81516020036200344e5760005b602081108015620033165750828181518110620032ec57620032ec62003fa8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b15620033315780620033288162004006565b915050620032cb565b806000036200337557505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e4700000000000000000000000000006020820152919050565b60008167ffffffffffffffff81111562003393576200339362003caf565b6040519080825280601f01601f191660200182016040528015620033be576020820181803683370190505b50905060005b828110156200344657848181518110620033e257620033e262003fa8565b602001015160f81c60f81b82828151811062003402576200340262003fa8565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806200343d8162004006565b915050620033c4565b509392505050565b505060408051808201909152601281527f4e4f545f56414c49445f454e434f44494e470000000000000000000000000000602082015290565b919050565b60608247101562003520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200148d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200354b919062003d04565b60006040518083038185875af1925050503d80600081146200358a576040519150601f19603f3d011682016040523d82523d6000602084013e6200358f565b606091505b5091509150620035a287838387620035ad565b979650505050505050565b6060831562003648578251600003620036405773ffffffffffffffffffffffffffffffffffffffff85163b62003640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200148d565b508162001b2c565b62001b2c83838151156200365f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200148d9190620044f0565b611b66806200450683390190565b803563ffffffff811681146200348757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811462001a4857600080fd5b60008060408385031215620036ef57600080fd5b620036fa83620036a3565b915060208301356200370c81620036b8565b809150509250929050565b801515811462001a4857600080fd5b60008083601f8401126200373957600080fd5b50813567ffffffffffffffff8111156200375257600080fd5b6020830191508360208285010111156200376b57600080fd5b9250929050565b6000806000806000608086880312156200378b57600080fd5b6200379686620036a3565b94506020860135620037a881620036b8565b93506040860135620037ba8162003717565b9250606086013567ffffffffffffffff811115620037d757600080fd5b620037e58882890162003726565b969995985093965092949392505050565b6000602082840312156200380957600080fd5b5035919050565b6000602082840312156200382357600080fd5b6200382e82620036a3565b9392505050565b806104008101831015620008b657600080fd5b60008060008060008060008060008060006105208c8e0312156200386b57600080fd5b620038778d8d62003835565b9a50620038886104008d01620036a3565b99506104208c013598506104408c01359750620038a96104608d01620036a3565b96506104808c0135620038bc81620036b8565b9550620038cd6104a08d01620036a3565b94506104c08c0135620038e081620036b8565b93506104e08c013592506105008c013567ffffffffffffffff8111156200390657600080fd5b620039148e828f0162003726565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200394157600080fd5b81356200382e81620036b8565b60ff8116811462001a4857600080fd5b600080600080600080600060e0888a0312156200397a57600080fd5b873562003987816200394e565b96506200399760208901620036a3565b95506040880135620039a981620036b8565b9450620039b960608901620036a3565b93506080880135620039cb81620036b8565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215620039fe57600080fd5b62003a0984620036a3565b9250602084013562003a1b81620036b8565b9150604084013562003a2d81620036b8565b809150509250925092565b600080600080600080600060a0888a03121562003a5457600080fd5b62003a5f88620036a3565b9650602088013562003a7181620036b8565b9550604088013567ffffffffffffffff8082111562003a8f57600080fd5b62003a9d8b838c0162003726565b909750955060608a013591508082111562003ab757600080fd5b5062003ac68a828b0162003726565b909450925050608088013562003adc816200394e565b8091505092959891949750929550565b600080600080600080600060c0888a03121562003b0857600080fd5b62003b1388620036a3565b9650602088013562003b2581620036b8565b955060408801359450606088013562003b3e81620036b8565b9350608088013562003b508162003717565b925060a088013567ffffffffffffffff81111562003b6d57600080fd5b62003b7b8a828b0162003726565b989b979a50959850939692959293505050565b600080600080610460858703121562003ba657600080fd5b8435935062003bb9866020870162003835565b925062003bca6104208601620036a3565b939692955092936104400135925050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010060ff8c16835263ffffffff808c16602085015273ffffffffffffffffffffffffffffffffffffffff808c166040860152818b166060860152808a166080860152508760a08501528160c085015262003c85828501878962003bdb565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000006000526