diff --git a/.node-version b/.nvmrc similarity index 100% rename from .node-version rename to .nvmrc diff --git a/CHANGELOG.md b/CHANGELOG.md index a1cf27fe..3f54ac9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v0.9.15 + +- Add SeaportProxyBuyer contract +- Update sandbox RPC server to Foundry Anvil to support cancun hardfork +- Add Seaport contracts to sandbox + ## v0.9.14 - Added `scripts/util/deploy_ERC1271SimpleWallet.ts` utility script diff --git a/artifacts/AmountDerivationErrors.json b/artifacts/AmountDerivationErrors.json new file mode 100644 index 00000000..e10b4ebe --- /dev/null +++ b/artifacts/AmountDerivationErrors.json @@ -0,0 +1,16 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AmountDerivationErrors", + "sourceName": "seaport-types/src/interfaces/AmountDerivationErrors.sol", + "abi": [ + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/AmountDeriver.json b/artifacts/AmountDeriver.json new file mode 100644 index 00000000..39a32a4c --- /dev/null +++ b/artifacts/AmountDeriver.json @@ -0,0 +1,16 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AmountDeriver", + "sourceName": "seaport-core/src/lib/AmountDeriver.sol", + "abi": [ + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/Assertions.json b/artifacts/Assertions.json new file mode 100644 index 00000000..e5d6b70e --- /dev/null +++ b/artifacts/Assertions.json @@ -0,0 +1,627 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Assertions", + "sourceName": "seaport-core/src/lib/Assertions.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161078f38038061078f83398101604081905261002f916102f5565b8080610039610158565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e79190610322565b506101a052505f90506100f861027e565b90506001600160a01b03811661012157604051632aea588760e01b815260040160405180910390fd5b5f61012b82610297565b8015156101c0526001600160a01b0383166101e05290508061015057600163929eee14555b5050506103b6565b5f808080808061018860408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a8152602001610725606a913990505f6040518060c001604052806084815260200161057b6084913990505f60405180610100016040528060d4815260200161065160d4913990506040518060800160405280605281526020016105ff6052913980519060200120965082805190602001209550818051906020012094505f81838560405160200161025793929190610371565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102af9190610397565b6040515f8181818686fa925050503d805f81146102e7576040519150601f19603f3d011682016040523d82523d5f602084013e6102ec565b606091505b50909392505050565b5f60208284031215610305575f80fd5b81516001600160a01b038116811461031b575f80fd5b9392505050565b5f8060408385031215610333575f80fd5b505080516020909101519092909150565b5f81515f5b818110156103635760208185018101518683015201610349565b505f93019283525090919050565b5f61038e6103886103828488610344565b86610344565b84610344565b95945050505050565b5f826103b157634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516101626104195f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/BaseRegistrarImplementation.json b/artifacts/BaseRegistrarImplementation.json index 1e58532f..2b92a6fd 100644 --- a/artifacts/BaseRegistrarImplementation.json +++ b/artifacts/BaseRegistrarImplementation.json @@ -732,8 +732,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200201738038062002017833981016040819052620000349162000109565b60408051602080820183526000808352835191820190935282815290916200005d8382620001ea565b5060016200006c8282620001ea565b5050506200008962000083620000b360201b60201c565b620000b7565b600880546001600160a01b0319166001600160a01b039390931692909217909155600955620002b6565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156200011d57600080fd5b82516001600160a01b03811681146200013557600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200017057607f821691505b6020821081036200019157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e557600081815260208120601f850160051c81016020861015620001c05750805b601f850160051c820191505b81811015620001e157828155600101620001cc565b5050505b505050565b81516001600160401b0381111562000206576200020662000145565b6200021e816200021784546200015b565b8462000197565b602080601f8311600181146200025657600084156200023d5750858301515b600019600386901b1c1916600185901b178555620001e1565b600085815260208120601f198616915b82811015620002875788860151825594840194600190910190840162000266565b5085821015620002a65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611d5180620002c66000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806395d89b4111610104578063c87b56dd116100a2578063e985e9c511610071578063e985e9c5146103e0578063f2fde38b1461041c578063f6a74ed71461042f578063fca247ac1461044257600080fd5b8063c87b56dd14610381578063d6e4fa8614610394578063da8c229e146103b4578063ddf7fcb0146103d757600080fd5b8063a7fc7a07116100de578063a7fc7a071461033e578063b88d4fde14610351578063c1a287e214610364578063c475abff1461036e57600080fd5b806395d89b411461031057806396e494e814610318578063a22cb4651461032b57600080fd5b80633f15457f116101715780636352211e1161014b5780636352211e146102d157806370a08231146102e4578063715018a6146102f75780638da5cb5b146102ff57600080fd5b80633f15457f1461029857806342842e0e146102ab5780634e543b26146102be57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630e297b451461025157806323b872dd1461027257806328ed4f6c1461028557600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e236600461183e565b610455565b60405190151581526020015b60405180910390f35b6102046104a7565b6040516101f391906118ab565b61022461021f3660046118be565b610539565b6040516001600160a01b0390911681526020016101f3565b61024f61024a3660046118ec565b610560565b005b61026461025f366004611918565b61067a565b6040519081526020016101f3565b61024f610280366004611950565b610691565b61024f610293366004611980565b6106c2565b600854610224906001600160a01b031681565b61024f6102b9366004611950565b6107db565b61024f6102cc3660046119b0565b6107f6565b6102246102df3660046118be565b61086b565b6102646102f23660046119b0565b61088e565b61024f610914565b6006546001600160a01b0316610224565b610204610928565b6101e76103263660046118be565b610937565b61024f6103393660046119cd565b61095d565b61024f61034c3660046119b0565b61096c565b61024f61035f366004611a16565b6109c0565b6102646276a70081565b61026461037c366004611af6565b6109f8565b61020461038f3660046118be565b610b89565b6102646103a23660046118be565b60009081526007602052604090205490565b6101e76103c23660046119b0565b600a6020526000908152604090205460ff1681565b61026460095481565b6101e76103ee366004611b18565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61024f61042a3660046119b0565b610bfd565b61024f61043d3660046119b0565b610c76565b610264610450366004611918565b610cc7565b60006001600160e01b031982166301ffc9a760e01b148061048657506001600160e01b031982166380ac58cd60e01b145b806104a157506001600160e01b03198216630a3b53db60e21b145b92915050565b6060600080546104b690611b46565b80601f01602080910402602001604051908101604052809291908181526020018280546104e290611b46565b801561052f5780601f106105045761010080835404028352916020019161052f565b820191906000526020600020905b81548152906001019060200180831161051257829003601f168201915b5050505050905090565b600061054482610cd6565b506000908152600460205260409020546001600160a01b031690565b600061056b82610d35565b9050806001600160a01b0316836001600160a01b0316036105dd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105f957506105f981336103ee565b61066b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105d4565b6106758383610d95565b505050565b60006106898484846000610e03565b949350505050565b61069b3382611013565b6106b75760405162461bcd60e51b81526004016105d490611b80565b61067583838361108e565b6008546009546040516302571be360e01b8152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611bcd565b6001600160a01b03161461074657600080fd5b6107503383611013565b61075957600080fd5b6008546009546040516306ab592360e01b81526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303816000875af11580156107b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106759190611bea565b610675838383604051806020016040528060008152506109c0565b6107fe6111f2565b600854600954604051630c4b7b8560e11b815260048101919091526001600160a01b03838116602483015290911690631896f70a90604401600060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b5050505050565b600081815260076020526040812054421061088557600080fd5b6104a182610d35565b60006001600160a01b0382166108f85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105d4565b506001600160a01b031660009081526003602052604090205490565b61091c6111f2565b610926600061124c565b565b6060600180546104b690611b46565b6000818152600760205260408120544290610956906276a70090611c03565b1092915050565b61096833838361129e565b5050565b6109746111f2565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b6109ca3383611013565b6109e65760405162461bcd60e51b81526004016105d490611b80565b6109f28484848461136c565b50505050565b6008546009546040516302571be360e01b8152600481019190915260009130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e9190611bcd565b6001600160a01b031614610a8157600080fd5b336000908152600a602052604090205460ff16610a9d57600080fd5b6000838152600760205260409020544290610abc906276a70090611c03565b1015610ac757600080fd5b610ad46276a70083611c03565b6000848152600760205260409020546276a70090610af3908590611c03565b610afd9190611c03565b11610b0757600080fd5b60008381526007602052604081208054849290610b25908490611c03565b90915550506000838152600760205260409081902054905184917f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd691610b6d91815260200190565b60405180910390a2505060009081526007602052604090205490565b6060610b9482610cd6565b6000610bab60408051602081019091526000815290565b90506000815111610bcb5760405180602001604052806000815250610bf6565b80610bd58461139f565b604051602001610be6929190611c24565b6040516020818303038152906040525b9392505050565b610c056111f2565b6001600160a01b038116610c6a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105d4565b610c738161124c565b50565b610c7e6111f2565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b60006106898484846001610e03565b6000818152600260205260409020546001600160a01b0316610c735760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105d4565b6000818152600260205260408120546001600160a01b0316806104a15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105d4565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dca82610d35565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546009546040516302571be360e01b8152600481019190915260009130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190611bcd565b6001600160a01b031614610e8c57600080fd5b336000908152600a602052604090205460ff16610ea857600080fd5b610eb185610937565b610eba57600080fd5b610ec76276a70042611c03565b6276a700610ed58542611c03565b610edf9190611c03565b11610ee957600080fd5b610ef38342611c03565b6000868152600760209081526040808320939093556002905220546001600160a01b031615610f2557610f2585611432565b610f2f84866114c7565b8115610fb9576008546009546040516306ab592360e01b81526004810191909152602481018790526001600160a01b038681166044830152909116906306ab5923906064016020604051808303816000875af1158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190611bea565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9610fef8642611c03565b60405190815260200160405180910390a361100a8342611c03565b95945050505050565b60008061101f8361086b565b9050806001600160a01b0316846001600160a01b0316148061105a5750836001600160a01b031661104f84610539565b6001600160a01b0316145b8061068957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610689565b826001600160a01b03166110a182610d35565b6001600160a01b0316146110c75760405162461bcd60e51b81526004016105d490611c53565b6001600160a01b0382166111295760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105d4565b826001600160a01b031661113c82610d35565b6001600160a01b0316146111625760405162461bcd60e51b81526004016105d490611c53565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146109265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d4565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036112ff5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105d4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61137784848461108e565b61138384848484611652565b6109f25760405162461bcd60e51b81526004016105d490611c98565b606060006113ac83611750565b600101905060008167ffffffffffffffff8111156113cc576113cc611a00565b6040519080825280601f01601f1916602001820160405280156113f6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461140057509392505050565b600061143d82610d35565b905061144882610d35565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661151d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105d4565b6000818152600260205260409020546001600160a01b0316156115825760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105d4565b6000818152600260205260409020546001600160a01b0316156115e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105d4565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561174857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611696903390899088908890600401611cea565b6020604051808303816000875af19250505080156116d1575060408051601f3d908101601f191682019092526116ce91810190611d27565b60015b61172e573d8080156116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b5080516000036117265760405162461bcd60e51b81526004016105d490611c98565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610689565b506001610689565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061178f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106117bb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117d957662386f26fc10000830492506010015b6305f5e10083106117f1576305f5e100830492506008015b612710831061180557612710830492506004015b60648310611817576064830492506002015b600a83106104a15760010192915050565b6001600160e01b031981168114610c7357600080fd5b60006020828403121561185057600080fd5b8135610bf681611828565b60005b8381101561187657818101518382015260200161185e565b50506000910152565b6000815180845261189781602086016020860161185b565b601f01601f19169290920160200192915050565b602081526000610bf6602083018461187f565b6000602082840312156118d057600080fd5b5035919050565b6001600160a01b0381168114610c7357600080fd5b600080604083850312156118ff57600080fd5b823561190a816118d7565b946020939093013593505050565b60008060006060848603121561192d57600080fd5b83359250602084013561193f816118d7565b929592945050506040919091013590565b60008060006060848603121561196557600080fd5b8335611970816118d7565b9250602084013561193f816118d7565b6000806040838503121561199357600080fd5b8235915060208301356119a5816118d7565b809150509250929050565b6000602082840312156119c257600080fd5b8135610bf6816118d7565b600080604083850312156119e057600080fd5b82356119eb816118d7565b9150602083013580151581146119a557600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611a2c57600080fd5b8435611a37816118d7565b93506020850135611a47816118d7565b925060408501359150606085013567ffffffffffffffff80821115611a6b57600080fd5b818701915087601f830112611a7f57600080fd5b813581811115611a9157611a91611a00565b604051601f8201601f19908116603f01168101908382118183101715611ab957611ab9611a00565b816040528281528a6020848701011115611ad257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611b0957600080fd5b50508035926020909101359150565b60008060408385031215611b2b57600080fd5b8235611b36816118d7565b915060208301356119a5816118d7565b600181811c90821680611b5a57607f821691505b602082108103611b7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215611bdf57600080fd5b8151610bf6816118d7565b600060208284031215611bfc57600080fd5b5051919050565b808201808211156104a157634e487b7160e01b600052601160045260246000fd5b60008351611c3681846020880161185b565b835190830190611c4a81836020880161185b565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d1d9083018461187f565b9695505050505050565b600060208284031215611d3957600080fd5b8151610bf68161182856fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806395d89b4111610104578063c87b56dd116100a2578063e985e9c511610071578063e985e9c5146103e0578063f2fde38b1461041c578063f6a74ed71461042f578063fca247ac1461044257600080fd5b8063c87b56dd14610381578063d6e4fa8614610394578063da8c229e146103b4578063ddf7fcb0146103d757600080fd5b8063a7fc7a07116100de578063a7fc7a071461033e578063b88d4fde14610351578063c1a287e214610364578063c475abff1461036e57600080fd5b806395d89b411461031057806396e494e814610318578063a22cb4651461032b57600080fd5b80633f15457f116101715780636352211e1161014b5780636352211e146102d157806370a08231146102e4578063715018a6146102f75780638da5cb5b146102ff57600080fd5b80633f15457f1461029857806342842e0e146102ab5780634e543b26146102be57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630e297b451461025157806323b872dd1461027257806328ed4f6c1461028557600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e236600461183e565b610455565b60405190151581526020015b60405180910390f35b6102046104a7565b6040516101f391906118ab565b61022461021f3660046118be565b610539565b6040516001600160a01b0390911681526020016101f3565b61024f61024a3660046118ec565b610560565b005b61026461025f366004611918565b61067a565b6040519081526020016101f3565b61024f610280366004611950565b610691565b61024f610293366004611980565b6106c2565b600854610224906001600160a01b031681565b61024f6102b9366004611950565b6107db565b61024f6102cc3660046119b0565b6107f6565b6102246102df3660046118be565b61086b565b6102646102f23660046119b0565b61088e565b61024f610914565b6006546001600160a01b0316610224565b610204610928565b6101e76103263660046118be565b610937565b61024f6103393660046119cd565b61095d565b61024f61034c3660046119b0565b61096c565b61024f61035f366004611a16565b6109c0565b6102646276a70081565b61026461037c366004611af6565b6109f8565b61020461038f3660046118be565b610b89565b6102646103a23660046118be565b60009081526007602052604090205490565b6101e76103c23660046119b0565b600a6020526000908152604090205460ff1681565b61026460095481565b6101e76103ee366004611b18565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61024f61042a3660046119b0565b610bfd565b61024f61043d3660046119b0565b610c76565b610264610450366004611918565b610cc7565b60006001600160e01b031982166301ffc9a760e01b148061048657506001600160e01b031982166380ac58cd60e01b145b806104a157506001600160e01b03198216630a3b53db60e21b145b92915050565b6060600080546104b690611b46565b80601f01602080910402602001604051908101604052809291908181526020018280546104e290611b46565b801561052f5780601f106105045761010080835404028352916020019161052f565b820191906000526020600020905b81548152906001019060200180831161051257829003601f168201915b5050505050905090565b600061054482610cd6565b506000908152600460205260409020546001600160a01b031690565b600061056b82610d35565b9050806001600160a01b0316836001600160a01b0316036105dd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105f957506105f981336103ee565b61066b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105d4565b6106758383610d95565b505050565b60006106898484846000610e03565b949350505050565b61069b3382611013565b6106b75760405162461bcd60e51b81526004016105d490611b80565b61067583838361108e565b6008546009546040516302571be360e01b8152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611bcd565b6001600160a01b03161461074657600080fd5b6107503383611013565b61075957600080fd5b6008546009546040516306ab592360e01b81526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303816000875af11580156107b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106759190611bea565b610675838383604051806020016040528060008152506109c0565b6107fe6111f2565b600854600954604051630c4b7b8560e11b815260048101919091526001600160a01b03838116602483015290911690631896f70a90604401600060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b5050505050565b600081815260076020526040812054421061088557600080fd5b6104a182610d35565b60006001600160a01b0382166108f85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105d4565b506001600160a01b031660009081526003602052604090205490565b61091c6111f2565b610926600061124c565b565b6060600180546104b690611b46565b6000818152600760205260408120544290610956906276a70090611c03565b1092915050565b61096833838361129e565b5050565b6109746111f2565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b6109ca3383611013565b6109e65760405162461bcd60e51b81526004016105d490611b80565b6109f28484848461136c565b50505050565b6008546009546040516302571be360e01b8152600481019190915260009130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e9190611bcd565b6001600160a01b031614610a8157600080fd5b336000908152600a602052604090205460ff16610a9d57600080fd5b6000838152600760205260409020544290610abc906276a70090611c03565b1015610ac757600080fd5b610ad46276a70083611c03565b6000848152600760205260409020546276a70090610af3908590611c03565b610afd9190611c03565b11610b0757600080fd5b60008381526007602052604081208054849290610b25908490611c03565b90915550506000838152600760205260409081902054905184917f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd691610b6d91815260200190565b60405180910390a2505060009081526007602052604090205490565b6060610b9482610cd6565b6000610bab60408051602081019091526000815290565b90506000815111610bcb5760405180602001604052806000815250610bf6565b80610bd58461139f565b604051602001610be6929190611c24565b6040516020818303038152906040525b9392505050565b610c056111f2565b6001600160a01b038116610c6a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105d4565b610c738161124c565b50565b610c7e6111f2565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b60006106898484846001610e03565b6000818152600260205260409020546001600160a01b0316610c735760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105d4565b6000818152600260205260408120546001600160a01b0316806104a15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105d4565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610dca82610d35565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546009546040516302571be360e01b8152600481019190915260009130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190611bcd565b6001600160a01b031614610e8c57600080fd5b336000908152600a602052604090205460ff16610ea857600080fd5b610eb185610937565b610eba57600080fd5b610ec76276a70042611c03565b6276a700610ed58542611c03565b610edf9190611c03565b11610ee957600080fd5b610ef38342611c03565b6000868152600760209081526040808320939093556002905220546001600160a01b031615610f2557610f2585611432565b610f2f84866114c7565b8115610fb9576008546009546040516306ab592360e01b81526004810191909152602481018790526001600160a01b038681166044830152909116906306ab5923906064016020604051808303816000875af1158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190611bea565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9610fef8642611c03565b60405190815260200160405180910390a361100a8342611c03565b95945050505050565b60008061101f8361086b565b9050806001600160a01b0316846001600160a01b0316148061105a5750836001600160a01b031661104f84610539565b6001600160a01b0316145b8061068957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610689565b826001600160a01b03166110a182610d35565b6001600160a01b0316146110c75760405162461bcd60e51b81526004016105d490611c53565b6001600160a01b0382166111295760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105d4565b826001600160a01b031661113c82610d35565b6001600160a01b0316146111625760405162461bcd60e51b81526004016105d490611c53565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146109265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d4565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036112ff5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105d4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61137784848461108e565b61138384848484611652565b6109f25760405162461bcd60e51b81526004016105d490611c98565b606060006113ac83611750565b600101905060008167ffffffffffffffff8111156113cc576113cc611a00565b6040519080825280601f01601f1916602001820160405280156113f6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461140057509392505050565b600061143d82610d35565b905061144882610d35565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661151d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105d4565b6000818152600260205260409020546001600160a01b0316156115825760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105d4565b6000818152600260205260409020546001600160a01b0316156115e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105d4565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561174857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611696903390899088908890600401611cea565b6020604051808303816000875af19250505080156116d1575060408051601f3d908101601f191682019092526116ce91810190611d27565b60015b61172e573d8080156116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b5080516000036117265760405162461bcd60e51b81526004016105d490611c98565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610689565b506001610689565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061178f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106117bb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117d957662386f26fc10000830492506010015b6305f5e10083106117f1576305f5e100830492506008015b612710831061180557612710830492506004015b60648310611817576064830492506002015b600a83106104a15760010192915050565b6001600160e01b031981168114610c7357600080fd5b60006020828403121561185057600080fd5b8135610bf681611828565b60005b8381101561187657818101518382015260200161185e565b50506000910152565b6000815180845261189781602086016020860161185b565b601f01601f19169290920160200192915050565b602081526000610bf6602083018461187f565b6000602082840312156118d057600080fd5b5035919050565b6001600160a01b0381168114610c7357600080fd5b600080604083850312156118ff57600080fd5b823561190a816118d7565b946020939093013593505050565b60008060006060848603121561192d57600080fd5b83359250602084013561193f816118d7565b929592945050506040919091013590565b60008060006060848603121561196557600080fd5b8335611970816118d7565b9250602084013561193f816118d7565b6000806040838503121561199357600080fd5b8235915060208301356119a5816118d7565b809150509250929050565b6000602082840312156119c257600080fd5b8135610bf6816118d7565b600080604083850312156119e057600080fd5b82356119eb816118d7565b9150602083013580151581146119a557600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611a2c57600080fd5b8435611a37816118d7565b93506020850135611a47816118d7565b925060408501359150606085013567ffffffffffffffff80821115611a6b57600080fd5b818701915087601f830112611a7f57600080fd5b813581811115611a9157611a91611a00565b604051601f8201601f19908116603f01168101908382118183101715611ab957611ab9611a00565b816040528281528a6020848701011115611ad257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611b0957600080fd5b50508035926020909101359150565b60008060408385031215611b2b57600080fd5b8235611b36816118d7565b915060208301356119a5816118d7565b600181811c90821680611b5a57607f821691505b602082108103611b7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215611bdf57600080fd5b8151610bf6816118d7565b600060208284031215611bfc57600080fd5b5051919050565b808201808211156104a157634e487b7160e01b600052601160045260246000fd5b60008351611c3681846020880161185b565b835190830190611c4a81836020880161185b565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d1d9083018461187f565b9695505050505050565b600060208284031215611d3957600080fd5b8151610bf68161182856fea164736f6c6343000811000a", + "bytecode": "0x608060405234801562000010575f80fd5b5060405162001f7638038062001f76833981016040819052620000339162000106565b60408051602080820183525f808352835191820190935282815290916200005b8382620001dd565b5060016200006a8282620001dd565b5050506200008762000081620000b160201b60201c565b620000b5565b600880546001600160a01b0319166001600160a01b039390931692909217909155600955620002a9565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f806040838503121562000118575f80fd5b82516001600160a01b03811681146200012f575f80fd5b6020939093015192949293505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200016857607f821691505b6020821081036200018757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001d857805f5260205f20601f840160051c81016020851015620001b45750805b601f840160051c820191505b81811015620001d5575f8155600101620001c0565b50505b505050565b81516001600160401b03811115620001f957620001f96200013f565b62000211816200020a845462000153565b846200018d565b602080601f83116001811462000247575f84156200022f5750858301515b5f19600386901b1c1916600185901b178555620002a1565b5f85815260208120601f198616915b82811015620002775788860151825594840194600190910190840162000256565b50858210156200029557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611cbf80620002b75f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c806395d89b41116100fe578063c87b56dd1161009e578063e985e9c51161006e578063e985e9c5146103d4578063f2fde38b1461040f578063f6a74ed714610422578063fca247ac14610435575f80fd5b8063c87b56dd14610377578063d6e4fa861461038a578063da8c229e146103a9578063ddf7fcb0146103cb575f80fd5b8063a7fc7a07116100d9578063a7fc7a0714610334578063b88d4fde14610347578063c1a287e21461035a578063c475abff14610364575f80fd5b806395d89b411461030657806396e494e81461030e578063a22cb46514610321575f80fd5b80633f15457f116101695780636352211e116101445780636352211e146102c757806370a08231146102da578063715018a6146102ed5780638da5cb5b146102f5575f80fd5b80633f15457f1461028e57806342842e0e146102a15780634e543b26146102b4575f80fd5b8063095ea7b3116101a4578063095ea7b3146102325780630e297b451461024757806323b872dd1461026857806328ed4f6c1461027b575f80fd5b806301ffc9a7146101ca57806306fdde03146101f2578063081812fc14610207575b5f80fd5b6101dd6101d83660046117dd565b610448565b60405190151581526020015b60405180910390f35b6101fa610499565b6040516101e99190611845565b61021a610215366004611857565b610528565b6040516001600160a01b0390911681526020016101e9565b610245610240366004611882565b61054d565b005b61025a6102553660046118ac565b610666565b6040519081526020016101e9565b6102456102763660046118e1565b61067b565b61024561028936600461190e565b6106ac565b60085461021a906001600160a01b031681565b6102456102af3660046118e1565b6107be565b6102456102c236600461193c565b6107d8565b61021a6102d5366004611857565b610848565b61025a6102e836600461193c565b610869565b6102456108ed565b6006546001600160a01b031661021a565b6101fa610900565b6101dd61031c366004611857565b61090f565b61024561032f366004611957565b610934565b61024561034236600461193c565b610943565b61024561035536600461199b565b610996565b61025a6276a70081565b61025a610372366004611a74565b6109ce565b6101fa610385366004611857565b610b52565b61025a610398366004611857565b5f9081526007602052604090205490565b6101dd6103b736600461193c565b600a6020525f908152604090205460ff1681565b61025a60095481565b6101dd6103e2366004611a94565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b61024561041d36600461193c565b610bc2565b61024561043036600461193c565b610c3b565b61025a6104433660046118ac565b610c8b565b5f6001600160e01b031982166301ffc9a760e01b148061047857506001600160e01b031982166380ac58cd60e01b145b8061049357506001600160e01b03198216630a3b53db60e21b145b92915050565b60605f80546104a790611ac0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d390611ac0565b801561051e5780601f106104f55761010080835404028352916020019161051e565b820191905f5260205f20905b81548152906001019060200180831161050157829003601f168201915b5050505050905090565b5f61053282610c99565b505f908152600460205260409020546001600160a01b031690565b5f61055782610cf7565b9050806001600160a01b0316836001600160a01b0316036105c95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105e557506105e581336103e2565b6106575760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105c0565b6106618383610d56565b505050565b5f6106738484845f610dc3565b949350505050565b6106853382610fc7565b6106a15760405162461bcd60e51b81526004016105c090611af8565b610661838383611040565b6008546009546040516302571be360e01b8152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa1580156106f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071b9190611b45565b6001600160a01b03161461072d575f80fd5b6107373383610fc7565b61073f575f80fd5b6008546009546040516306ab592360e01b81526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af115801561079a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106619190611b60565b61066183838360405180602001604052805f815250610996565b6107e06111a2565b600854600954604051630c4b7b8560e11b815260048101919091526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b15801561082f575f80fd5b505af1158015610841573d5f803e3d5ffd5b5050505050565b5f818152600760205260408120544210610860575f80fd5b61049382610cf7565b5f6001600160a01b0382166108d25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105c0565b506001600160a01b03165f9081526003602052604090205490565b6108f56111a2565b6108fe5f6111fc565b565b6060600180546104a790611ac0565b5f81815260076020526040812054429061092d906276a70090611b77565b1092915050565b61093f33838361124d565b5050565b61094b6111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b6109a03383610fc7565b6109bc5760405162461bcd60e51b81526004016105c090611af8565b6109c88484848461131a565b50505050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610a1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a419190611b45565b6001600160a01b031614610a53575f80fd5b335f908152600a602052604090205460ff16610a6d575f80fd5b5f838152600760205260409020544290610a8b906276a70090611b77565b1015610a95575f80fd5b610aa26276a70083611b77565b5f848152600760205260409020546276a70090610ac0908590611b77565b610aca9190611b77565b11610ad3575f80fd5b5f8381526007602052604081208054849290610af0908490611b77565b90915550505f838152600760205260409081902054905184917f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd691610b3791815260200190565b60405180910390a250505f9081526007602052604090205490565b6060610b5d82610c99565b5f610b7260408051602081019091525f815290565b90505f815111610b905760405180602001604052805f815250610bbb565b80610b9a8461134d565b604051602001610bab929190611b96565b6040516020818303038152906040525b9392505050565b610bca6111a2565b6001600160a01b038116610c2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c0565b610c38816111fc565b50565b610c436111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b5f6106738484846001610dc3565b5f818152600260205260409020546001600160a01b0316610c385760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f818152600260205260408120546001600160a01b0316806104935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f81815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d8a82610cf7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e369190611b45565b6001600160a01b031614610e48575f80fd5b335f908152600a602052604090205460ff16610e62575f80fd5b610e6b8561090f565b610e73575f80fd5b610e806276a70042611b77565b6276a700610e8e8542611b77565b610e989190611b77565b11610ea1575f80fd5b610eab8342611b77565b5f868152600760209081526040808320939093556002905220546001600160a01b031615610edc57610edc856113dd565b610ee6848661146f565b8115610f6d576008546009546040516306ab592360e01b81526004810191909152602481018790526001600160a01b038681166044830152909116906306ab5923906064016020604051808303815f875af1158015610f47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6b9190611b60565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9610fa38642611b77565b60405190815260200160405180910390a3610fbe8342611b77565b95945050505050565b5f80610fd283610848565b9050806001600160a01b0316846001600160a01b0316148061100d5750836001600160a01b031661100284610528565b6001600160a01b0316145b8061067357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff16610673565b826001600160a01b031661105382610cf7565b6001600160a01b0316146110795760405162461bcd60e51b81526004016105c090611bc4565b6001600160a01b0382166110db5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105c0565b826001600160a01b03166110ee82610cf7565b6001600160a01b0316146111145760405162461bcd60e51b81526004016105c090611bc4565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146108fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105c0565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b0316036112ae5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105c0565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611325848484611040565b611331848484846115f7565b6109c85760405162461bcd60e51b81526004016105c090611c09565b60605f611359836116f1565b60010190505f8167ffffffffffffffff81111561137857611378611987565b6040519080825280601f01601f1916602001820160405280156113a2576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113ac57509392505050565b5f6113e782610cf7565b90506113f282610cf7565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166114c55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105c0565b5f818152600260205260409020546001600160a01b0316156115295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b5f818152600260205260409020546001600160a01b03161561158d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b156116e957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061163a903390899088908890600401611c5b565b6020604051808303815f875af1925050508015611674575060408051601f3d908101601f1916820190925261167191810190611c97565b60015b6116cf573d8080156116a1576040519150601f19603f3d011682016040523d82523d5f602084013e6116a6565b606091505b5080515f036116c75760405162461bcd60e51b81526004016105c090611c09565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610673565b506001610673565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061172f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061175b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061177957662386f26fc10000830492506010015b6305f5e1008310611791576305f5e100830492506008015b61271083106117a557612710830492506004015b606483106117b7576064830492506002015b600a83106104935760010192915050565b6001600160e01b031981168114610c38575f80fd5b5f602082840312156117ed575f80fd5b8135610bbb816117c8565b5f5b838110156118125781810151838201526020016117fa565b50505f910152565b5f81518084526118318160208601602086016117f8565b601f01601f19169290920160200192915050565b602081525f610bbb602083018461181a565b5f60208284031215611867575f80fd5b5035919050565b6001600160a01b0381168114610c38575f80fd5b5f8060408385031215611893575f80fd5b823561189e8161186e565b946020939093013593505050565b5f805f606084860312156118be575f80fd5b8335925060208401356118d08161186e565b929592945050506040919091013590565b5f805f606084860312156118f3575f80fd5b83356118fe8161186e565b925060208401356118d08161186e565b5f806040838503121561191f575f80fd5b8235915060208301356119318161186e565b809150509250929050565b5f6020828403121561194c575f80fd5b8135610bbb8161186e565b5f8060408385031215611968575f80fd5b82356119738161186e565b915060208301358015158114611931575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156119ae575f80fd5b84356119b98161186e565b935060208501356119c98161186e565b925060408501359150606085013567ffffffffffffffff808211156119ec575f80fd5b818701915087601f8301126119ff575f80fd5b813581811115611a1157611a11611987565b604051601f8201601f19908116603f01168101908382118183101715611a3957611a39611987565b816040528281528a6020848701011115611a51575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611a85575f80fd5b50508035926020909101359150565b5f8060408385031215611aa5575f80fd5b8235611ab08161186e565b915060208301356119318161186e565b600181811c90821680611ad457607f821691505b602082108103611af257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f60208284031215611b55575f80fd5b8151610bbb8161186e565b5f60208284031215611b70575f80fd5b5051919050565b8082018082111561049357634e487b7160e01b5f52601160045260245ffd5b5f8351611ba78184602088016117f8565b835190830190611bbb8183602088016117f8565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611c8d9083018461181a565b9695505050505050565b5f60208284031215611ca7575f80fd5b8151610bbb816117c856fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c806395d89b41116100fe578063c87b56dd1161009e578063e985e9c51161006e578063e985e9c5146103d4578063f2fde38b1461040f578063f6a74ed714610422578063fca247ac14610435575f80fd5b8063c87b56dd14610377578063d6e4fa861461038a578063da8c229e146103a9578063ddf7fcb0146103cb575f80fd5b8063a7fc7a07116100d9578063a7fc7a0714610334578063b88d4fde14610347578063c1a287e21461035a578063c475abff14610364575f80fd5b806395d89b411461030657806396e494e81461030e578063a22cb46514610321575f80fd5b80633f15457f116101695780636352211e116101445780636352211e146102c757806370a08231146102da578063715018a6146102ed5780638da5cb5b146102f5575f80fd5b80633f15457f1461028e57806342842e0e146102a15780634e543b26146102b4575f80fd5b8063095ea7b3116101a4578063095ea7b3146102325780630e297b451461024757806323b872dd1461026857806328ed4f6c1461027b575f80fd5b806301ffc9a7146101ca57806306fdde03146101f2578063081812fc14610207575b5f80fd5b6101dd6101d83660046117dd565b610448565b60405190151581526020015b60405180910390f35b6101fa610499565b6040516101e99190611845565b61021a610215366004611857565b610528565b6040516001600160a01b0390911681526020016101e9565b610245610240366004611882565b61054d565b005b61025a6102553660046118ac565b610666565b6040519081526020016101e9565b6102456102763660046118e1565b61067b565b61024561028936600461190e565b6106ac565b60085461021a906001600160a01b031681565b6102456102af3660046118e1565b6107be565b6102456102c236600461193c565b6107d8565b61021a6102d5366004611857565b610848565b61025a6102e836600461193c565b610869565b6102456108ed565b6006546001600160a01b031661021a565b6101fa610900565b6101dd61031c366004611857565b61090f565b61024561032f366004611957565b610934565b61024561034236600461193c565b610943565b61024561035536600461199b565b610996565b61025a6276a70081565b61025a610372366004611a74565b6109ce565b6101fa610385366004611857565b610b52565b61025a610398366004611857565b5f9081526007602052604090205490565b6101dd6103b736600461193c565b600a6020525f908152604090205460ff1681565b61025a60095481565b6101dd6103e2366004611a94565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b61024561041d36600461193c565b610bc2565b61024561043036600461193c565b610c3b565b61025a6104433660046118ac565b610c8b565b5f6001600160e01b031982166301ffc9a760e01b148061047857506001600160e01b031982166380ac58cd60e01b145b8061049357506001600160e01b03198216630a3b53db60e21b145b92915050565b60605f80546104a790611ac0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d390611ac0565b801561051e5780601f106104f55761010080835404028352916020019161051e565b820191905f5260205f20905b81548152906001019060200180831161050157829003601f168201915b5050505050905090565b5f61053282610c99565b505f908152600460205260409020546001600160a01b031690565b5f61055782610cf7565b9050806001600160a01b0316836001600160a01b0316036105c95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105e557506105e581336103e2565b6106575760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105c0565b6106618383610d56565b505050565b5f6106738484845f610dc3565b949350505050565b6106853382610fc7565b6106a15760405162461bcd60e51b81526004016105c090611af8565b610661838383611040565b6008546009546040516302571be360e01b8152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa1580156106f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071b9190611b45565b6001600160a01b03161461072d575f80fd5b6107373383610fc7565b61073f575f80fd5b6008546009546040516306ab592360e01b81526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af115801561079a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106619190611b60565b61066183838360405180602001604052805f815250610996565b6107e06111a2565b600854600954604051630c4b7b8560e11b815260048101919091526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b15801561082f575f80fd5b505af1158015610841573d5f803e3d5ffd5b5050505050565b5f818152600760205260408120544210610860575f80fd5b61049382610cf7565b5f6001600160a01b0382166108d25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105c0565b506001600160a01b03165f9081526003602052604090205490565b6108f56111a2565b6108fe5f6111fc565b565b6060600180546104a790611ac0565b5f81815260076020526040812054429061092d906276a70090611b77565b1092915050565b61093f33838361124d565b5050565b61094b6111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b6109a03383610fc7565b6109bc5760405162461bcd60e51b81526004016105c090611af8565b6109c88484848461131a565b50505050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610a1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a419190611b45565b6001600160a01b031614610a53575f80fd5b335f908152600a602052604090205460ff16610a6d575f80fd5b5f838152600760205260409020544290610a8b906276a70090611b77565b1015610a95575f80fd5b610aa26276a70083611b77565b5f848152600760205260409020546276a70090610ac0908590611b77565b610aca9190611b77565b11610ad3575f80fd5b5f8381526007602052604081208054849290610af0908490611b77565b90915550505f838152600760205260409081902054905184917f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd691610b3791815260200190565b60405180910390a250505f9081526007602052604090205490565b6060610b5d82610c99565b5f610b7260408051602081019091525f815290565b90505f815111610b905760405180602001604052805f815250610bbb565b80610b9a8461134d565b604051602001610bab929190611b96565b6040516020818303038152906040525b9392505050565b610bca6111a2565b6001600160a01b038116610c2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c0565b610c38816111fc565b50565b610c436111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b5f6106738484846001610dc3565b5f818152600260205260409020546001600160a01b0316610c385760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f818152600260205260408120546001600160a01b0316806104935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f81815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d8a82610cf7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e369190611b45565b6001600160a01b031614610e48575f80fd5b335f908152600a602052604090205460ff16610e62575f80fd5b610e6b8561090f565b610e73575f80fd5b610e806276a70042611b77565b6276a700610e8e8542611b77565b610e989190611b77565b11610ea1575f80fd5b610eab8342611b77565b5f868152600760209081526040808320939093556002905220546001600160a01b031615610edc57610edc856113dd565b610ee6848661146f565b8115610f6d576008546009546040516306ab592360e01b81526004810191909152602481018790526001600160a01b038681166044830152909116906306ab5923906064016020604051808303815f875af1158015610f47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6b9190611b60565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9610fa38642611b77565b60405190815260200160405180910390a3610fbe8342611b77565b95945050505050565b5f80610fd283610848565b9050806001600160a01b0316846001600160a01b0316148061100d5750836001600160a01b031661100284610528565b6001600160a01b0316145b8061067357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff16610673565b826001600160a01b031661105382610cf7565b6001600160a01b0316146110795760405162461bcd60e51b81526004016105c090611bc4565b6001600160a01b0382166110db5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105c0565b826001600160a01b03166110ee82610cf7565b6001600160a01b0316146111145760405162461bcd60e51b81526004016105c090611bc4565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146108fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105c0565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b0316036112ae5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105c0565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611325848484611040565b611331848484846115f7565b6109c85760405162461bcd60e51b81526004016105c090611c09565b60605f611359836116f1565b60010190505f8167ffffffffffffffff81111561137857611378611987565b6040519080825280601f01601f1916602001820160405280156113a2576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113ac57509392505050565b5f6113e782610cf7565b90506113f282610cf7565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166114c55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105c0565b5f818152600260205260409020546001600160a01b0316156115295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b5f818152600260205260409020546001600160a01b03161561158d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b156116e957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061163a903390899088908890600401611c5b565b6020604051808303815f875af1925050508015611674575060408051601f3d908101601f1916820190925261167191810190611c97565b60015b6116cf573d8080156116a1576040519150601f19603f3d011682016040523d82523d5f602084013e6116a6565b606091505b5080515f036116c75760405162461bcd60e51b81526004016105c090611c09565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610673565b506001610673565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061172f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061175b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061177957662386f26fc10000830492506010015b6305f5e1008310611791576305f5e100830492506008015b61271083106117a557612710830492506004015b606483106117b7576064830492506002015b600a83106104935760010192915050565b6001600160e01b031981168114610c38575f80fd5b5f602082840312156117ed575f80fd5b8135610bbb816117c8565b5f5b838110156118125781810151838201526020016117fa565b50505f910152565b5f81518084526118318160208601602086016117f8565b601f01601f19169290920160200192915050565b602081525f610bbb602083018461181a565b5f60208284031215611867575f80fd5b5035919050565b6001600160a01b0381168114610c38575f80fd5b5f8060408385031215611893575f80fd5b823561189e8161186e565b946020939093013593505050565b5f805f606084860312156118be575f80fd5b8335925060208401356118d08161186e565b929592945050506040919091013590565b5f805f606084860312156118f3575f80fd5b83356118fe8161186e565b925060208401356118d08161186e565b5f806040838503121561191f575f80fd5b8235915060208301356119318161186e565b809150509250929050565b5f6020828403121561194c575f80fd5b8135610bbb8161186e565b5f8060408385031215611968575f80fd5b82356119738161186e565b915060208301358015158114611931575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156119ae575f80fd5b84356119b98161186e565b935060208501356119c98161186e565b925060408501359150606085013567ffffffffffffffff808211156119ec575f80fd5b818701915087601f8301126119ff575f80fd5b813581811115611a1157611a11611987565b604051601f8201601f19908116603f01168101908382118183101715611a3957611a39611987565b816040528281528a6020848701011115611a51575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611a85575f80fd5b50508035926020909101359150565b5f8060408385031215611aa5575f80fd5b8235611ab08161186e565b915060208301356119318161186e565b600181811c90821680611ad457607f821691505b602082108103611af257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f60208284031215611b55575f80fd5b8151610bbb8161186e565b5f60208284031215611b70575f80fd5b5051919050565b8082018082111561049357634e487b7160e01b5f52601160045260245ffd5b5f8351611ba78184602088016117f8565b835190830190611bbb8183602088016117f8565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611c8d9083018461181a565b9695505050505050565b5f60208284031215611ca7575f80fd5b8151610bbb816117c856fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/BasicOrderFulfiller.json b/artifacts/BasicOrderFulfiller.json new file mode 100644 index 00000000..34387d3f --- /dev/null +++ b/artifacts/BasicOrderFulfiller.json @@ -0,0 +1,675 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BasicOrderFulfiller", + "sourceName": "seaport-core/src/lib/BasicOrderFulfiller.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079738038061079783398101604081905261002f916102fd565b80808080808061003d610160565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100eb919061032a565b506101a052505f90506100fc610286565b90506001600160a01b03811661012557604051632aea588760e01b815260040160405180910390fd5b5f61012f8261029f565b8015156101c0526001600160a01b0383166101e05290508061015457600163929eee14555b505050505050506103be565b5f808080808061019060408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a815260200161072d606a913990505f6040518060c00160405280608481526020016105836084913990505f60405180610100016040528060d4815260200161065960d4913990506040518060800160405280605281526020016106076052913980519060200120965082805190602001209550818051906020012094505f81838560405160200161025f93929190610379565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102b7919061039f565b6040515f8181818686fa925050503d805f81146102ef576040519150601f19603f3d011682016040523d82523d5f602084013e6102f4565b606091505b50909392505050565b5f6020828403121561030d575f80fd5b81516001600160a01b0381168114610323575f80fd5b9392505050565b5f806040838503121561033b575f80fd5b505080516020909101519092909150565b5f81515f5b8181101561036b5760208185018101518683015201610351565b505f93019283525090919050565b5f61039661039061038a848861034c565b8661034c565b8461034c565b95945050505050565b5f826103b957634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516101626104215f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/BytesUtils.json b/artifacts/BytesUtils.json index dfb31502..5e8d3647 100644 --- a/artifacts/BytesUtils.json +++ b/artifacts/BytesUtils.json @@ -20,8 +20,8 @@ "type": "error" } ], - "bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000811000a", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000811000a", + "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/Conduit.json b/artifacts/Conduit.json new file mode 100644 index 00000000..ae600b71 --- /dev/null +++ b/artifacts/Conduit.json @@ -0,0 +1,395 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Conduit", + "sourceName": "seaport-core/src/conduit/Conduit.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "name": "ChannelClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "ChannelStatusAlreadySet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidController", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidItemType", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "open", + "type": "bool" + } + ], + "name": "ChannelUpdated", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum ConduitItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct ConduitTransfer[]", + "name": "transfers", + "type": "tuple[]" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "internalType": "struct ConduitBatch1155Transfer[]", + "name": "batchTransfers", + "type": "tuple[]" + } + ], + "name": "executeBatch1155", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum ConduitItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct ConduitTransfer[]", + "name": "standardTransfers", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "internalType": "struct ConduitBatch1155Transfer[]", + "name": "batchTransfers", + "type": "tuple[]" + } + ], + "name": "executeWithBatch1155", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "updateChannel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a060405234801561000f575f80fd5b5033608052608051610a1561002c5f395f6101d20152610a155ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConduitController.json b/artifacts/ConduitController.json new file mode 100644 index 00000000..b7033586 --- /dev/null +++ b/artifacts/ConduitController.json @@ -0,0 +1,446 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConduitController", + "sourceName": "seaport-core/src/conduit/ConduitController.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "CallerIsNotNewPotentialOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "CallerIsNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ChannelOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ConduitAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidCreator", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "NewPotentialOwnerAlreadySet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "NewPotentialOwnerIsZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "NoConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "NoPotentialOwnerCurrentlySet", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "name": "NewConduit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "PotentialOwnerUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "cancelOwnershipTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "createConduit", + "outputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "uint256", + "name": "channelIndex", + "type": "uint256" + } + ], + "name": "getChannel", + "outputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "name": "getChannelStatus", + "outputs": [ + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getChannels", + "outputs": [ + { + "internalType": "address[]", + "name": "channels", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "name": "getConduit", + "outputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "bool", + "name": "exists", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getConduitCodeHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "creationCodeHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "runtimeCodeHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getPotentialOwner", + "outputs": [ + { + "internalType": "address", + "name": "potentialOwner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getTotalChannels", + "outputs": [ + { + "internalType": "uint256", + "name": "totalChannels", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "updateChannel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801561000f575f80fd5b5060405161001f60208201610082565b6020820181038252601f19601f8201166040525080519060200120608081815250505f805f1b60405161005190610082565b8190604051809103905ff590508015801561006e573d5f803e3d5ffd5b506001600160a01b03163f60a0525061008f565b610a418061191e83390190565b60805160a0516118526100cc5f395f81816101420152818161081101526108df01525f818161011f015281816107b9015261089b01526118525ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80636d435421116100885780637b37e561116100635780637b37e561146102435780638b9e028b14610256578063906c87cc1461027657806393790f4414610289575f80fd5b80636d435421146101eb5780636e9bfd9f146101fe578063794593bc14610230575f80fd5b806314afd79e116100c357806314afd79e1461018157806333bc8572146101945780634e3f9580146101b757806351710e45146101d8575f80fd5b8063027cc764146100e95780630a96ad391461011957806313ad9cab1461016c575b5f80fd5b6100fc6100f7366004610c39565b61029c565b6040516001600160a01b0390911681526020015b60405180910390f35b604080517f000000000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000602082015201610110565b61017f61017a366004610c61565b610339565b005b6100fc61018f366004610ca9565b610531565b6101a76101a2366004610cc9565b61055c565b6040519015158152602001610110565b6101ca6101c5366004610ca9565b610595565b604051908152602001610110565b61017f6101e6366004610ca9565b6105bd565b61017f6101f9366004610cc9565b6106be565b61021161020c366004610cfa565b6107ae565b604080516001600160a01b039093168352901515602083015201610110565b6100fc61023e366004610d11565b610838565b61017f610251366004610ca9565b610a0a565b610269610264366004610ca9565b610aab565b6040516101109190610d32565b6100fc610284366004610ca9565b610b28565b6101ca610297366004610ca9565b610b53565b5f6102a683610b8e565b6001600160a01b0383165f908152602081905260409020600301548083106102f157604051636ceb340b60e01b81526001600160a01b03851660048201526024015b60405180910390fd5b6001600160a01b0384165f90815260208190526040902060030180548490811061031d5761031d610d7e565b5f918252602090912001546001600160a01b0316949350505050565b61034283610bc6565b60405163c4e8fcb560e01b81526001600160a01b038381166004830152821515602483015284169063c4e8fcb5906044015f604051808303815f87803b15801561038a575f80fd5b505af115801561039c573d5f803e3d5ffd5b505050506001600160a01b038381165f908152602081815260408083209386168352600484019091529020548015158380156103d6575080155b15610425576003830180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b038a169081179091559254928152600486019091526040902055610529565b831580156104305750805b156105295760038301545f198301905f9061044d90600190610d92565b90508181146104d8575f85600301828154811061046c5761046c610d7e565b5f918252602090912001546003870180546001600160a01b03909216925082918590811061049c5761049c610d7e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260048701909152604090208490555b846003018054806104eb576104eb610db7565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0389168252600487019052604081205550505b505050505050565b5f61053b82610b8e565b506001600160a01b039081165f908152602081905260409020600101541690565b5f61056683610b8e565b506001600160a01b039182165f9081526020818152604080832093909416825260049092019091522054151590565b5f61059f82610b8e565b506001600160a01b03165f9081526020819052604090206003015490565b6105c681610b8e565b6001600160a01b038181165f9081526020819052604090206002015416331461060d576040516388c3a11560e01b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b038082165f818152602081905260408082206002810180546001600160a01b031916905560010154905133949190911692917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec91a46001600160a01b03165f90815260208190526040902060010180546001600160a01b03191633179055565b6106c782610bc6565b6001600160a01b0381166106f95760405163a388d26360e01b81526001600160a01b03831660048201526024016102e8565b6001600160a01b038083165f9081526020819052604090206002015481169082160361074b576040516365e0406560e11b81526001600160a01b038084166004830152821660248201526044016102e8565b6040516001600160a01b038216907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da905f90a26001600160a01b039182165f90815260208190526040902060020180546001600160a01b03191691909216179055565b5f8060ff60f81b30847f00000000000000000000000000000000000000000000000000000000000000006040516020016107eb9493929190610dcb565b60408051601f198184030181529190528051602090910120936001600160a01b0385163f7f0000000000000000000000000000000000000000000000000000000000000000149350915050565b5f6001600160a01b0382166108605760405163267eaa8160e21b815260040160405180910390fd5b606083901c3314610884576040516332db94d160e21b815260040160405180910390fd5b6040516108c3906001600160f81b031990309086907f000000000000000000000000000000000000000000000000000000000000000090602001610dcb565b604051602081830303815290604052805190602001205f1c90507f0000000000000000000000000000000000000000000000000000000000000000816001600160a01b03163f0361093257604051633194665960e11b81526001600160a01b03821660048201526024016102e8565b8260405161093f90610c16565b8190604051809103905ff590508015801561095c573d5f803e3d5ffd5b50506001600160a01b038181165f81815260208181526040918290206001810180546001600160a01b03191695881695909517909455868455815192835282018690527f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15910160405180910390a16040516001600160a01b03808516915f918516907fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec908390a45092915050565b610a1381610bc6565b6001600160a01b038181165f9081526020819052604090206002015416610a58576040516335809b0b60e11b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b03165f90815260208190526040902060020180546001600160a01b0319169055565b6060610ab682610b8e565b6001600160a01b0382165f908152602081815260409182902060030180548351818402810184019094528084529091830182828015610b1c57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610afe575b50505050509050919050565b5f610b3282610b8e565b506001600160a01b039081165f908152602081905260409020600201541690565b6001600160a01b0381165f9081526020819052604090205480610b89576040516304ca820960e41b815260040160405180910390fd5b919050565b6001600160a01b0381165f90815260208190526040902054610bc3576040516304ca820960e41b815260040160405180910390fd5b50565b610bcf81610b8e565b6001600160a01b038181165f90815260208190526040902060010154163314610bc35760405163d4ed9a1760e01b81526001600160a01b03821660048201526024016102e8565b610a4180610e0583390190565b80356001600160a01b0381168114610b89575f80fd5b5f8060408385031215610c4a575f80fd5b610c5383610c23565b946020939093013593505050565b5f805f60608486031215610c73575f80fd5b610c7c84610c23565b9250610c8a60208501610c23565b915060408401358015158114610c9e575f80fd5b809150509250925092565b5f60208284031215610cb9575f80fd5b610cc282610c23565b9392505050565b5f8060408385031215610cda575f80fd5b610ce383610c23565b9150610cf160208401610c23565b90509250929050565b5f60208284031215610d0a575f80fd5b5035919050565b5f8060408385031215610d22575f80fd5b82359150610cf160208401610c23565b602080825282518282018190525f9190848201906040850190845b81811015610d725783516001600160a01b031683529284019291840191600101610d4d565b50909695505050505050565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610db157634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603160045260245ffd5b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff19166001840152601583015260358201526055019056fe60a060405234801561000f575f80fd5b5033608052608051610a1561002c5f395f6101d20152610a155ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000aa164736f6c6343000818000a60a060405234801561000f575f80fd5b5033608052608051610a1561002c5f395f6101d20152610a155ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80636d435421116100885780637b37e561116100635780637b37e561146102435780638b9e028b14610256578063906c87cc1461027657806393790f4414610289575f80fd5b80636d435421146101eb5780636e9bfd9f146101fe578063794593bc14610230575f80fd5b806314afd79e116100c357806314afd79e1461018157806333bc8572146101945780634e3f9580146101b757806351710e45146101d8575f80fd5b8063027cc764146100e95780630a96ad391461011957806313ad9cab1461016c575b5f80fd5b6100fc6100f7366004610c39565b61029c565b6040516001600160a01b0390911681526020015b60405180910390f35b604080517f000000000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000602082015201610110565b61017f61017a366004610c61565b610339565b005b6100fc61018f366004610ca9565b610531565b6101a76101a2366004610cc9565b61055c565b6040519015158152602001610110565b6101ca6101c5366004610ca9565b610595565b604051908152602001610110565b61017f6101e6366004610ca9565b6105bd565b61017f6101f9366004610cc9565b6106be565b61021161020c366004610cfa565b6107ae565b604080516001600160a01b039093168352901515602083015201610110565b6100fc61023e366004610d11565b610838565b61017f610251366004610ca9565b610a0a565b610269610264366004610ca9565b610aab565b6040516101109190610d32565b6100fc610284366004610ca9565b610b28565b6101ca610297366004610ca9565b610b53565b5f6102a683610b8e565b6001600160a01b0383165f908152602081905260409020600301548083106102f157604051636ceb340b60e01b81526001600160a01b03851660048201526024015b60405180910390fd5b6001600160a01b0384165f90815260208190526040902060030180548490811061031d5761031d610d7e565b5f918252602090912001546001600160a01b0316949350505050565b61034283610bc6565b60405163c4e8fcb560e01b81526001600160a01b038381166004830152821515602483015284169063c4e8fcb5906044015f604051808303815f87803b15801561038a575f80fd5b505af115801561039c573d5f803e3d5ffd5b505050506001600160a01b038381165f908152602081815260408083209386168352600484019091529020548015158380156103d6575080155b15610425576003830180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b038a169081179091559254928152600486019091526040902055610529565b831580156104305750805b156105295760038301545f198301905f9061044d90600190610d92565b90508181146104d8575f85600301828154811061046c5761046c610d7e565b5f918252602090912001546003870180546001600160a01b03909216925082918590811061049c5761049c610d7e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260048701909152604090208490555b846003018054806104eb576104eb610db7565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0389168252600487019052604081205550505b505050505050565b5f61053b82610b8e565b506001600160a01b039081165f908152602081905260409020600101541690565b5f61056683610b8e565b506001600160a01b039182165f9081526020818152604080832093909416825260049092019091522054151590565b5f61059f82610b8e565b506001600160a01b03165f9081526020819052604090206003015490565b6105c681610b8e565b6001600160a01b038181165f9081526020819052604090206002015416331461060d576040516388c3a11560e01b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b038082165f818152602081905260408082206002810180546001600160a01b031916905560010154905133949190911692917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec91a46001600160a01b03165f90815260208190526040902060010180546001600160a01b03191633179055565b6106c782610bc6565b6001600160a01b0381166106f95760405163a388d26360e01b81526001600160a01b03831660048201526024016102e8565b6001600160a01b038083165f9081526020819052604090206002015481169082160361074b576040516365e0406560e11b81526001600160a01b038084166004830152821660248201526044016102e8565b6040516001600160a01b038216907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da905f90a26001600160a01b039182165f90815260208190526040902060020180546001600160a01b03191691909216179055565b5f8060ff60f81b30847f00000000000000000000000000000000000000000000000000000000000000006040516020016107eb9493929190610dcb565b60408051601f198184030181529190528051602090910120936001600160a01b0385163f7f0000000000000000000000000000000000000000000000000000000000000000149350915050565b5f6001600160a01b0382166108605760405163267eaa8160e21b815260040160405180910390fd5b606083901c3314610884576040516332db94d160e21b815260040160405180910390fd5b6040516108c3906001600160f81b031990309086907f000000000000000000000000000000000000000000000000000000000000000090602001610dcb565b604051602081830303815290604052805190602001205f1c90507f0000000000000000000000000000000000000000000000000000000000000000816001600160a01b03163f0361093257604051633194665960e11b81526001600160a01b03821660048201526024016102e8565b8260405161093f90610c16565b8190604051809103905ff590508015801561095c573d5f803e3d5ffd5b50506001600160a01b038181165f81815260208181526040918290206001810180546001600160a01b03191695881695909517909455868455815192835282018690527f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15910160405180910390a16040516001600160a01b03808516915f918516907fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec908390a45092915050565b610a1381610bc6565b6001600160a01b038181165f9081526020819052604090206002015416610a58576040516335809b0b60e11b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b03165f90815260208190526040902060020180546001600160a01b0319169055565b6060610ab682610b8e565b6001600160a01b0382165f908152602081815260409182902060030180548351818402810184019094528084529091830182828015610b1c57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610afe575b50505050509050919050565b5f610b3282610b8e565b506001600160a01b039081165f908152602081905260409020600201541690565b6001600160a01b0381165f9081526020819052604090205480610b89576040516304ca820960e41b815260040160405180910390fd5b919050565b6001600160a01b0381165f90815260208190526040902054610bc3576040516304ca820960e41b815260040160405180910390fd5b50565b610bcf81610b8e565b6001600160a01b038181165f90815260208190526040902060010154163314610bc35760405163d4ed9a1760e01b81526001600160a01b03821660048201526024016102e8565b610a4180610e0583390190565b80356001600160a01b0381168114610b89575f80fd5b5f8060408385031215610c4a575f80fd5b610c5383610c23565b946020939093013593505050565b5f805f60608486031215610c73575f80fd5b610c7c84610c23565b9250610c8a60208501610c23565b915060408401358015158114610c9e575f80fd5b809150509250925092565b5f60208284031215610cb9575f80fd5b610cc282610c23565b9392505050565b5f8060408385031215610cda575f80fd5b610ce383610c23565b9150610cf160208401610c23565b90509250929050565b5f60208284031215610d0a575f80fd5b5035919050565b5f8060408385031215610d22575f80fd5b82359150610cf160208401610c23565b602080825282518282018190525f9190848201906040850190845b81811015610d725783516001600160a01b031683529284019291840191600101610d4d565b50909695505050505050565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610db157634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603160045260245ffd5b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff19166001840152601583015260358201526055019056fe60a060405234801561000f575f80fd5b5033608052608051610a1561002c5f395f6101d20152610a155ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000aa164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConduitControllerInterface.json b/artifacts/ConduitControllerInterface.json new file mode 100644 index 00000000..52364eba --- /dev/null +++ b/artifacts/ConduitControllerInterface.json @@ -0,0 +1,441 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConduitControllerInterface", + "sourceName": "seaport-types/src/interfaces/ConduitControllerInterface.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "CallerIsNotNewPotentialOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "CallerIsNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ChannelOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ConduitAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidCreator", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "NewPotentialOwnerAlreadySet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "NewPotentialOwnerIsZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "NoConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "NoPotentialOwnerCurrentlySet", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "name": "NewConduit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "PotentialOwnerUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "cancelOwnershipTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "createConduit", + "outputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "uint256", + "name": "channelIndex", + "type": "uint256" + } + ], + "name": "getChannel", + "outputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "name": "getChannelStatus", + "outputs": [ + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getChannels", + "outputs": [ + { + "internalType": "address[]", + "name": "channels", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "name": "getConduit", + "outputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "bool", + "name": "exists", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getConduitCodeHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "creationCodeHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "runtimeCodeHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getPotentialOwner", + "outputs": [ + { + "internalType": "address", + "name": "potentialOwner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "getTotalChannels", + "outputs": [ + { + "internalType": "uint256", + "name": "totalChannels", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "newPotentialOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + }, + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "updateChannel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConduitInterface.json b/artifacts/ConduitInterface.json new file mode 100644 index 00000000..86a66731 --- /dev/null +++ b/artifacts/ConduitInterface.json @@ -0,0 +1,265 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConduitInterface", + "sourceName": "seaport-types/src/interfaces/ConduitInterface.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + } + ], + "name": "ChannelClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "ChannelStatusAlreadySet", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidController", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidItemType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "open", + "type": "bool" + } + ], + "name": "ChannelUpdated", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum ConduitItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct ConduitTransfer[]", + "name": "transfers", + "type": "tuple[]" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "internalType": "struct ConduitBatch1155Transfer[]", + "name": "batch1155Transfers", + "type": "tuple[]" + } + ], + "name": "executeBatch1155", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum ConduitItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct ConduitTransfer[]", + "name": "standardTransfers", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "internalType": "struct ConduitBatch1155Transfer[]", + "name": "batch1155Transfers", + "type": "tuple[]" + } + ], + "name": "executeWithBatch1155", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "channel", + "type": "address" + }, + { + "internalType": "bool", + "name": "isOpen", + "type": "bool" + } + ], + "name": "updateChannel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/Consideration.json b/artifacts/Consideration.json new file mode 100644 index 00000000..0e50a3b2 --- /dev/null +++ b/artifacts/Consideration.json @@ -0,0 +1,2967 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Consideration", + "sourceName": "seaport-core/src/lib/Consideration.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidFulfillmentComponentData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillmentIndex", + "type": "uint256" + } + ], + "name": "MismatchedFulfillmentOfferAndConsiderationComponents", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "MissingFulfillmentComponentOnAggregation", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [], + "name": "OfferAndConsiderationRequiredOnFulfillment", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents[]", + "name": "orders", + "type": "tuple[]" + } + ], + "name": "cancel", + "outputs": [ + { + "internalType": "bool", + "name": "cancelled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder", + "name": "", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "fulfillAdvancedOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableAdvancedOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder_efficient_6GL6yc", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order", + "name": "", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + } + ], + "name": "fulfillOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractOfferer", + "type": "address" + } + ], + "name": "getContractOffererNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "getCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents", + "name": "", + "type": "tuple" + } + ], + "name": "getOrderHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "getOrderStatus", + "outputs": [ + { + "internalType": "bool", + "name": "isValidated", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isCancelled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "totalFilled", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSize", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "information", + "outputs": [ + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "domainSeparator", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "matchAdvancedOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "", + "type": "tuple[]" + } + ], + "name": "matchOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + } + ], + "name": "validate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801562000011575f80fd5b50604051620061953803806200619583398101604081905262000034916200031f565b8080808080808080806200004762000177565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa158015620000d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f891906200034e565b506101a052505f90506200010b620002a4565b90506001600160a01b0381166200013557604051632aea588760e01b815260040160405180910390fd5b5f6200014182620002bd565b8015156101c0526001600160a01b0383166101e0529050806200016757600163929eee14555b50505050505050505050620003ec565b5f8080808080620001a860408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a81526020016200612b606a913990505f6040518060c001604052806084815260200162005f816084913990505f60405180610100016040528060d481526020016200605760d491399050604051806080016040528060528152602001620060056052913980519060200120965082805190602001209550818051906020012094505f8183856040516020016200027d93929190620003a0565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a620002d79190620003cc565b6040515f8181818686fa925050503d805f811462000311576040519150601f19603f3d011682016040523d82523d5f602084013e62000316565b606091505b50909392505050565b5f6020828403121562000330575f80fd5b81516001600160a01b038116811462000347575f80fd5b9392505050565b5f806040838503121562000360575f80fd5b505080516020909101519092909150565b5f81515f5b8181101562000392576020818501810151868301520162000376565b505f93019283525090919050565b5f620003c3620003bc620003b5848862000371565b8662000371565b8462000371565b95945050505050565b5f82620003e757634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ad9620004a85f395f61047601525f818161036d0152818161042b01528181611a6601528181611ab901526124d301525f61306f01525f81816112b4015261303f01525f612f1901525f612e6101525f8181610c24015261164f01525f8181610bb3015261149801525f8181610b4d01526115e101525f612e9101525f612eda01525f612eb60152615ad95ff3fe608060405260043610610103575f3560e01c8063a900866b11610092578063f07ec37311610062578063f07ec373146102f7578063f2d12b1214610316578063f47b774014610329578063fb0f3ee114610116578063fd9f1e101461034c575f80fd5b8063a900866b1461028a578063b3a34c4c146102be578063e7acab24146102d1578063ed98a574146102e4575f80fd5b80637423eb3c116100d85780637423eb3c146101f757806379df72bd1461020b57806387201b411461022a578063881477321461024b578063a81744041461026a575f80fd5b801561011657806306fdde031461013e57806346423aa71461015f5780635b34b966146101d5575f80fd5b366101125761011061036b565b005b5f80fd5b61012961012436600461511b565b6103f9565b60405190151581526020015b60405180910390f35b348015610149575f80fd5b50610152610408565b6040516101359190615195565b34801561016a575f80fd5b506101b36101793660046151a7565b5f9081526001602052604090205460ff808216926101008304909116916001600160781b03620100008204811692600160881b9092041690565b6040805194151585529215156020850152918301526060820152608001610135565b3480156101e0575f80fd5b506101e9610417565b604051908152602001610135565b348015610202575f80fd5b50610110610420565b348015610216575f80fd5b506101e96102253660046151be565b6104c1565b61023d610238366004615252565b6104f8565b6040516101359291906153f6565b348015610256575f80fd5b50610129610265366004615445565b610571565b61027d610278366004615483565b61058f565b60405161013591906154e9565b348015610295575f80fd5b506101e96102a43660046154fb565b6001600160a01b03165f9081526002602052604090205490565b6101296102cc366004615514565b61062a565b6101296102df366004615559565b6106a3565b61023d6102f23660046155dd565b6106e1565b348015610302575f80fd5b506101e96103113660046154fb565b610784565b61027d61032436600461567d565b6107a1565b348015610334575f80fd5b5061033d6107ea565b6040516101359392919061571f565b348015610357575f80fd5b50610129610366366004615445565b610801565b7f000000000000000000000000000000000000000000000000000000000000000080156103b357600263929eee145c146103b05763a61be9f05f52346020526024601cfd5b50565b63929eee1454806103e057600263929eee145c146103dc5763a61be9f05f52346020526024601cfd5b5050565b600381146103dc5763a61be9f05f52346020526024601cfd5b5f61040261080c565b92915050565b60606104126109c0565b905090565b5f6104126109de565b63929eee14546001147f000000000000000000000000000000000000000000000000000000000000000080610453575080155b1561047157604051630f45b98b60e41b815260040160405180910390fd5b61049a7f0000000000000000000000000000000000000000000000000000000000000000610a4b565b6104b7576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f806104cd6004610aa9565b90506104f16104e282610ab95b63ffffffff16565b610140830135610b36565b3590565b9392505050565b60608061055d61051361050b6004610aa9565b610c7a6104da565b61052a61052260046020610ce2565b610d006104da565b61054161053960046040610ce2565b610d586104da565b61055061053960046060610ce2565b89338a15028a0189610db0565b915091509b509b9950505050505050505050565b5f6104f161058a6105826004610aa9565b610dea6104da565b610e42565b606061061f6105a96105a16004610aa9565b610f636104da565b604080515f8082526020820190925290610601565b6105ee6040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816105be5790505b5061061961061160046020610ce2565b610fbb6104da565b33611013565b90505b949350505050565b5f6104f161064361063b6004610aa9565b6110516104da565b604080515f808252602082019092529061069b565b6106886040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816106585790505b5084336110c7565b5f6106d76106bc6106b46004610aa9565b6112466104da565b6106cb61052260046020610ce2565b853386150286016110c7565b9695505050505050565b6060806107736106f46105a16004610aa9565b604080515f808252602082019092529061074c565b6107396040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816107095790505b5061075c61053960046020610ce2565b61076b61053960046040610ce2565b883389610db0565b915091509850989650505050505050565b6001600160a01b0381165f90815260208190526040812054610402565b60606107dc6107b361050b6004610aa9565b6107c261052260046020610ce2565b6107d161061160046040610ce2565b338615028601611013565b90505b979650505050505050565b60605f806107f66112a2565b925092509250909192565b5f6104f183836112ee565b5f61012435600281901c90600316600182118334158214806108315761083134611429565b506003841160a0810260240135906502030203010160d01b861a905f630101020360d01b881a610864888289888861143a565b9096509150506101c4600583901b01355f8760058111156108875761088761532f565b036108bc5760443560243517156108a557636ab37ce75f526004601cfd5b6108af8482611757565b6108b761180f565b61099d565b6040805160208082528183019092525f9160208201818036833701905050905060028a60058111156108f0576108f061532f565b036109135761090e60c4356084353360e435610104355b878761188f565b610988565b60038a60058111156109275761092761532f565b036109455761090e60c4356084353360e435610104355b87876118da565b60048a60058111156109595761095961532f565b036109735761090e60243533608435604435606435610907565b6109886024353360843560443560643561093e565b6109928482611910565b61099b816119ca565b505b6109a88689846119ee565b6109b0611a64565b6001995050505050505050505090565b6060602080526d0d436f6e73696465726174696f6e604d5260606020f35b5f6109e7611ab7565b600143034060801c335f525f60205260405f208054820192508281555050336001600160a01b03167f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f82604051610a4091815260200190565b60405180910390a290565b5f816001600160a01b0316600a5a610a639190615779565b6040515f8181818686fa925050503d805f8114610a9b576040519150601f19603f3d011682016040523d82523d5f602084013e610aa0565b606091505b50909392505050565b5f813563ffffffff168201610402565b5f610acc61016060408051918201905290565b9050610adb8282610140611b2e565b610af8610af1610aec846040610ce2565b611b37565b6040830152565b5f610b0c610b07846060610ce2565b611b8a565b9050610b19816060840152565b610b2c610b24825190565b610140840152565b50919050565b0190565b610140820151604080519084015180515f939284927f000000000000000000000000000000000000000000000000000000000000000092602090910190845b81811015610ba2578251601f1901805186825260c082208652905260209384019390920191600101610b75565b508060051b6040512094505050505f7f0000000000000000000000000000000000000000000000000000000000000000915060405160206060890151015f5b86811015610c0e578151601f1901805186825260e082208552905260209283019290910190600101610be1565b505060408051600587901b9020601f198a0180517f00000000000000000000000000000000000000000000000000000000000000008252928b01805197815260608c018051938152610140909c019a8b5261018082209390915295909552939097525050925250919050565b5f8063ffffffff8335169050600581901b610c9e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610cd0610cca610cc58484610ce2565b611246565b82850152565b602001610cad565b5050505050919050565b5f6104f163ffffffff610cfa6104ed8686610b328516565b16840190565b5f8063ffffffff8335169050600581901b610d246020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610d50610cca610d4b8484610ce2565b611bcd565b602001610d33565b5f8063ffffffff8335169050600581901b610d7c6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610da8610cca610da38484610ce2565b611c0f565b602001610d8b565b60608036155f80610dc48c8c85898b611c52565b91509150610dd78c8b8b8b8b878761202f565b9450945050505097509795505050505050565b5f8063ffffffff8335169050600581901b610e0e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610e3a610cca610e358484610ce2565b612161565b602001610e1d565b5f610e4b611ab7565b5f805f80855190505f5b81811015610f56575f878281518110610e7057610e70615798565b60209081029190910101518051909150600481608001516004811115610e9857610e9861532f565b03610ea4575050610f4e565b80519450610eb1816121a4565b5f8181526001602052604081209850909650610ed390879089903615156121dd565b50865460ff16610f4b5780610140015181606001515114610ef657610ef661226b565b610f0585878460200151612278565b865460ff191660011787556040517ff280791efe782edcf06ce15c8f4dff17601db3b88eb3805a0db7d77faf757f0490610f42908890849061589b565b60405180910390a15b50505b600101610e55565b5060019695505050505050565b5f8063ffffffff8335169050600581901b610f876020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610fb3610cca610fae8484610ce2565b611051565b602001610f96565b5f8063ffffffff8335169050600581901b610fdf6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd85761100b610cca6110068484610ce2565b612314565b602001610fee565b60605f36151590505f8061102b8888858b5189611c52565b9150915061103882612347565b6110458887848885612386565b98975050505050505050565b5f61106461020060408051918201905290565b60a0810180825290915061108061107a84610aa9565b82612459565b61108c60016020840152565b61109860016040840152565b6110b56110ae6110a9856020610ce2565b61248f565b6060840152565b610b2c6110c06124b7565b6080840152565b835160808101515f91906110ee60048260048111156110e8576110e861532f565b146124d1565b5f80806110fd8a361515612572565b60408051600180825281830190925293965091945092505f9190816020015b61112461502d565b81526020019060019003908161111c5790505090508a815f8151811061114c5761114c615798565b6020026020010181905250611161818b61276a565b61116d8684848b6128e3565b6040805160018082528183019092525f9160208083019080368337509192505050361515600487818111156111a4576111a461532f565b146111c7576111b58d83885f6129e3565b6111c186868684612a35565b506111d9565b6111d6888e6080015183612b39565b95505b6111e4888c8c612c09565b85825f815181106111f7576111f7615798565b60200260200101818152505061120e8d8388612d2c565b61122b86895f01518a602001518d8c604001518d60600151612df9565b611233611a64565b5060019c9b505050505050505050505050565b5f61125961020060408051918201905290565b905061126d60208381019083016040611b2e565b60a0810180825261128061107a84610aa9565b6112916110ae6110a9856060610ce2565b610b2c6110c06110a9856080610ce2565b60605f805f6112af612e5e565b90505f7f0000000000000000000000000000000000000000000000000000000000000000905060605f5281602052806040526303312e3660635260a05ff35b5f6112f7611ab7565b5f8083815b8181101561140e573687878381811061131757611317615798565b9050602002810190611329919061597d565b90505f61133960208301836154fb565b90505f61134c60408401602085016154fb565b90505f61135f60a085016080860161599c565b905081331483331417156004821417871796505f6113936113886113808790565b610ab96104da565b866101400135610b36565b5f8181526001602052604090819020805461ffff19166101001781559051909a509091506001600160a01b0380851691908616907f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d906113f69085815260200190565b60405180910390a385600101955050505050506112fc565b5050801561141e5761141e612f3b565b506001949350505050565b63a61be9f05f52806020526024601cfd5b5f806114455f6124d1565b61144d612f48565b42610164351115426101443511171561147b576321ccfeb75f5261014435602052610164356040526044601cfd5b610204356102643510156114965763466aa6165f526004601cfd5b7f0000000000000000000000000000000000000000000000000000000000000000608081905260a08790526060602460c037604060646101203760e060802061016052610264356102043560051b6102a0016001820181526020810190508881526080602460208301376101608860a0528760c0525f60e0525f6102043593505f5b8481101561156c578060400261028401602081610100376040816101203760208101358317925060208401935060e0608020845260a0850194508b85528a6020860152604081606087013750600101611518565b6001850160051b610160206060526102643594505b848110156115bc578060400261028401925060a0840193508a8452896020850152604083606086013760208301359190911790600101611581565b506001600160a01b038111156115d9576339f3e3fd5f526004601cfd5b50505050505f7f00000000000000000000000000000000000000000000000000000000000000009050806080528360a052606060c460c0376020610104610120375060c06080205f9081526020812060e0526084359061164d826001600160a01b03165f9081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000060808190529091506040608460a03760605161010052896101205260a061014461014037816101e05261018060802094505050506102043560051b61018001828152336020820152608060408201526101206060820152600160808201528360a0820152606060c460c083013760a061026435026101e00160a4356084357f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318385a35f60605260608101820160405250505f61172983612f93565b90506117358389612fe4565b7101000000000000000000000000000001000182559150509550959350505050565b60c43560843560e4356101043584156117bf575f6040519050632671a55160e11b815260206004820152600160248201528660448201528460648201528360848201523360a48201528260c48201528160e48201526117b98682610104613039565b50611807565b60028660058111156117d3576117d361532f565b036117fa57806001146117e9576117e9816130f0565b6117f584843385613101565b611807565b61180784843385856131b6565b505050505050565b346064356084356102643560061b5f80805b838110156118605761028481013592506102a48101359150868311156118495761184961328d565b8287039650611858828461329a565b604001611821565b50858511156118715761187161328d565b61187b848661329a565b84861115611807576118073386880361329a565b61189981836132d0565b816118c057826001146118af576118af836130f0565b6118bb87878787613101565b6118d1565b6118d1828260028a8a8a8a8a6132ee565b50505050505050565b6118e38361336d565b6118ed81836132d0565b816118ff576118bb87878787876131b6565b6118d1828260038a8a8a8a8a6132ee565b5f805f805f861561193557505060843592503391505060c4356101043560e43561194a565b50339350506084359150506024356064356044355b80156119585761195861337f565b50600586901b6101e403356102643560061b5f80805b838110156119af5761028481013592506102a481013591508a156119995761199683876159ba565b95505b6119a7878a8486898f61338c565b60400161196e565b506119be86898988888e61338c565b50505050505050505050565b60408151146119d65750565b5f6119e2826020015190565b90506103dc81836133c1565b611a0a8260a4355b331415600182116004909210919091161690565b15611a5f57805f611a19825190565b9050608081901c63ffffffff8216611a3a84826317b1f94282526001905250565b601c840163fb5014fc6060529350611a5660a4358886856133e5565b5f6060526118d1565b505050565b7f00000000000000000000000000000000000000000000000000000000000000008015611a95575f63929eee145d50565b63929eee145480611aab575f63929eee145d5050565b50600163929eee145550565b7f00000000000000000000000000000000000000000000000000000000000000008015611af65763929eee145c156103b057637fa8a9875f526004601cfd5b63929eee145480611b195763929eee145c156103dc57637fa8a9875f526004601cfd5b600181146103dc57637fa8a9875f526004601cfd5b80838337505050565b5f63ffffffff8235166040519150808252602082018160051b81018060a084026020870183378293505b81841015611b7a5780845260209093019260a001611b61565b60405250919392505050565b9052565b5f63ffffffff8235166040519150808252602082018160051b81018060c084026020870183378293505b81841015611b7a5780845260209093019260c001611bb4565b5f611bdf60a060408051918201905290565b9050611bed82826080611b2e565b611c0a611c03611bfe846080610ce2565b61342d565b6080830152565b919050565b5f63ffffffff8235166040519150808252602082018160051b8101808360061b6020870183378293505b81841015611b7a57808452602090930192604001611c39565b60605f611c5f60016124d1565b86515f90600160e61b82351690806001600160401b03811115611c8457611c84615751565b604051908082528060200260200182016040528015611cad578160200160208202803683370190505b50945060010160051b91505f60205b83811015611eae575f611cd28c83613cd46104da565b90505f805f611ce1848e612572565b6001600160781b0382166020880152919450925090505f829003611d085750505050611ea6565b6001600160781b0381166040808601919091528a8601849052845160a081015160c0820151608083015192909301518051600184119d909d179c600490931099509092915f5b81811015611df0575f838281518110611d6957611d69615798565b602002602001015190508b8151108d179c505f611d8b89898460800151613464565b90508160800151826060015103611da85760608201819052611dbd565b611db789898460600151613464565b60608301525b5f611dd68360600151838a8a611dd1361590565b6134a0565b606084018190526080909301929092525050600101611d4e565b5087516060015180515f5b81811015611e9a575f838281518110611e1657611e16615798565b602002602001015190505f611e308b8b8460800151613464565b90508160800151826060015103611e4d5760608201819052611e62565b611e5c8b8b8460600151613464565b60608301525b5f611e778360600151838c8c611dd136151590565b6060840181905260a0840180516080909501949094529092525050600101611dfb565b50505050505050505050505b602001611cbc565b50506001600160e61b018103611ec657611ec66134f3565b50611ed1888861276a565b5f8060205b8381101561201457858101519250821561200c575f611ef88c83613cd46104da565b9050885f03611f13575f87830181905260209091015261200c565b60048151608001516004811115611f2c57611f2c61532f565b14611faf57611f458188866001600587901c038e613500565b611f5b575f87830181905260209091015261200c565b602080820151604083015183516080810151930151611f949388936001600160781b039081169316913314156001909111168e17612a35565b611faa575f87830181905260209091015261200c565b611fda565b611fc1815f015182608001518c612b39565b878301819052935083611fda575f60209091015261200c565b886001900398505f815f0151905061200585825f015183602001518c85604001518660600151612df9565b6001935050505b602001611ed6565b50806120225761202261355b565b5050509550959350505050565b85518551606091829161204281836159cd565b6001600160401b0381111561205957612059615751565b60405190808252806020026020018201604052801561209257816020015b61207f615060565b8152602001906001900390816120775790505b5092505f5b828110156120ea576120c58c5f8d84815181106120b6576120b6615798565b60200260200101518c8c613568565b8482815181106120d7576120d7615798565b6020908102919091010152600101612097565b505f5b818110156121435761211c8c60018c848151811061210d5761210d615798565b60200260200101518c5f613568565b848483018151811061213057612130615798565b60209081029190910101526001016120ed565b506121518b84888a896135b7565b9350505097509795505050505050565b5f6121726040808051918201905290565b905061218c61218861218384610aa9565b6138a0565b8252565b611c0a61219d6110a9846020610ce2565b6020830152565b5f6121b98260600151518361014001516138bf565b81516001600160a01b03165f90815260208190526040902054610402908390610b36565b82545f90610100900460ff16156122045781156121fd576121fd856138cf565b505f610622565b83546201000090046001600160781b0316801561225f57831561222f5761222a866138e0565b61225f565b8454600160881b90046001600160781b0316811061225f57821561225657612256866138f1565b5f915050610622565b50600195945050505050565b632165628a5f526004601cfd5b33831480156122875750505050565b5f612290612e5e565b61190160f01b5f9081526002828152602287815260428320908390528651939450929190601f601d840116106102e260621984011016156122fa576122d58688613902565b61190160f01b5f908152600286905260228281526042822091905290975090506122fd565b50815b61230a888285858a613998565b5050505050505050565b5f6123256040808051918201905290565b9050612336612188610da384610aa9565b611c0a61219d610da3846020610ce2565b80518060051b6040019050602082038051602082527f4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e78383a190525050565b8351606090806001600160401b038111156123a3576123a3615751565b6040519080825280602002602001820160405280156123dc57816020015b6123c9615060565b8152602001906001900390816123c15790505b5091505f5b8181101561243f575f8782815181106123fc576123fc615798565b6020026020010151905061241989825f0151836020015185613ae1565b84838151811061242b5761242b615798565b6020908102919091010152506001016123e1565b5061244d87838787876135b7565b50505b95945050505050565b6124668282610160611b2e565b612477610af1610aec846040610ce2565b6103dc612488610b07846060610ce2565b6060830152565b6040518135601f0163ffffffe01660200180838337913563ffffffff16815290810160405290565b5f6124c9602060408051918201905290565b5f8152905090565b7f0000000000000000000000000000000000000000000000000000000000000000801561251e5763929eee145c1561251057637fa8a9875f526004601cfd5b8160010163929eee145d5050565b63929eee1454806125505763929eee145c1561254157637fa8a9875f526004601cfd5b8260010163929eee145d505050565b6001811461256557637fa8a9875f526004601cfd5b505060020163929eee1455565b5f805f80855f0151905061258f8160a001518260c0015187613c86565b6125a257505f9250829150819050612763565b602086015160408701516001600160781b0391821694501691505f6004826080015160048111156125d5576125d561532f565b0361260257600183850218905080156125f0576125f0613ca9565b50600193508392508291506127639050565b50818311831517801561261757612617613ca9565b608082015160011615848411161561263157612631613cb6565b61263a826121a4565b5f81815260016020526040812091965061265890879083908a6121dd565b61266b57505f9350839250612763915050565b805460ff1661268657612686835f0151878a60600151612278565b8054608881901c8061269a5786915061275d565b6001600160781b038260101c169150600186036126be57818103965080955061275d565b8086036126d95790860185810386821102909603959061275d565b80860296810291909502810186810387821102918290039695919003906001600160781b0386111561275d5761271d565b5f5b8215610b2c5790829006919061270c565b61273061272a878461270a565b8861270a565b8015019687900496909504946001600160781b0386111561275d57634e487b715f5260116020526024601cfd5b50505050505b9250925092565b805182515f5b82811015612859575f84828151811061278b5761278b615798565b602002602001015190505f815f015190508381106127b0576127b08260200151613cc3565b5f8782815181106127c3576127c3615798565b6020026020010151905080602001516001600160781b03165f036127e957505050612851565b80516040808201519085015163bfb3f8ce5f876020015160018111156128115761281161532f565b1461282d575f612822856060613cd4565b9350636088d7de9150505b8251821061283e57805f526004601cfd5b612849838389613cdf565b505050505050505b600101612770565b505f5b818110156128dc575f85828151811061287757612877615798565b6020026020010151905080602001516001600160781b03165f0361289b57506128d4565b8051608081015160608201516128b89085908363a8930e9a613d92565b6128d08483604001518363d69293326104da613d9290565b5050505b60010161285c565b5050505050565b60a084015160c08501516040860151515f805b82811015612960575f8960400151828151811061291557612915615798565b602002602001015190505f815f01519050801584179350505f61294c826060015183608001518c8c8b8b612947361590565b613df9565b6060830152506080018690526001016128f6565b506080880151600481108216801561297a5761297a6134f3565b505050506060860151515f5b8181101561230a575f886060015182815181106129a5576129a5615798565b602002602001015190505f6129ca826060015183608001518b8b8a8a61294736151590565b60608301525060a0810151608090910152600101612986565b8351608081015160208201513314156001821160049092109190911616156128dc575f80612a18858489608001518988613e34565b63fb5014fc6060529092509050611a5683602001518684846133e5565b5f848152600160205260408120805482908290608881901c80612a5a57889150612ae2565b6001600160781b038260101c169150808803612a7e57908801878111935090612ae2565b97880297808802979190910288018781119350906001600160781b038083119089111715612ae257612ab0888361270a565b8015019788900497909104906001600160781b038083119089111715612ae257634e487b715f5260116020526024601cfd5b508215612b1b578515612b0f576040516310fda3e160e01b8152600481018a905260240160405180910390fd5b5f945050505050610622565b8660881b8160101b1760011782556001945050505050949350505050565b5f83610140015184606001515114612b5357612b5361226b565b83515f8080612b628888613fb2565b915091505f8082845f885af16001600160a01b0385165f908152600260205260409020805460018101909155606086901b189550925082612bc1578515612bb457612bab61405c565b612bb4856140a3565b505f93506104f192505050565b505050505f805f612bde876040015188606001516104da6140b490565b925092509250825f14612bf457612bf4846140a3565b60408701919091526060860152509392505050565b6040805160208082528183019092525f916020820181803683375050506040850151519091505f5b81811015612c81575f86604001518281518110612c5057612c50615798565b60200260200101519050846080820152612c7881885f0151896101200151876104da61432d90565b50600101612c31565b50506060840151515f90815b81811015612d0f575f87606001518281518110612cac57612cac615798565b602002602001015190505f6005811115612cc857612cc861532f565b81516005811115612cdb57612cdb61532f565b03612cf7574793508381606001511115612cf757612cf761328d565b612d068133898861432d6104da565b50600101612c8d565b5050612d1a826119ca565b504780156128dc576128dc338261329a565b8251608081015160208201515f92839283928392916004811060019091111633909114151615612d8e57612d6f612d6961010083015190565b5190565b88614422565b9093509150612d8060208201612d65565b945063fb5014fc9350612dda565b600481608001516004811115612da657612da661532f565b0361230a57805194505f8560601b9050612dc787838b608001518b85614463565b639397928596509094509250612dda9050565b612de46060859052565b612df0858785856133e5565b5f60605261230a565b60608290506060829050856001600160a01b0316876001600160a01b03167f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318a888686604051612e4c9493929190615a19565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614612f16575060408051608080517f00000000000000000000000000000000000000000000000000000000000000005f9081527f00000000000000000000000000000000000000000000000000000000000000006020527f0000000000000000000000000000000000000000000000000000000000000000855246606090815230845260a08220949095529093529190915290565b507f000000000000000000000000000000000000000000000000000000000000000090565b63fed398fc5f526004601cfd5b600435602014610224356102401416610244356102606102643560061b01141660186101243510600160a01b60843560a4351760c4356024351717101616806103b0576103b061452e565b5f8181526001602081905260409091209060843590612fb890849084903615156121dd565b50815460ff16610b2c57610b2c8184612fdf602463ffffffff61024435160161248f6104da565b612278565b5f612ff18260a4356119f6565b15610402575f805f6130028661453b565b63fb5014fc6060529194509250905061302260a43587601c8601856133e5565b5f60605260209190910160801b1781529392505050565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff60a01b175f90815260208690527f000000000000000000000000000000000000000000000000000000000000000083526055600b20919092526001600160a01b031690505f805f805260205f85875f875af191505f519050816130ce576130c561405c565b6130ce836145f3565b6001600160e01b03198116632671a55160e11b14611807576118078684614604565b6369f958275f52806020526024601cfd5b833b61311857635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af1806131a8573d1561318657601f3d0160051c8260051c816003028183111561316f578183036003028280028480020360091c01015b5a602082011015613182573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b6131cd57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af180613272573d1561325157601f3d0160051c8560051c816003028183111561323a578183036003028280028480020360091c01015b5a60208201101561324d573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b638ffff9805f526004601cfd5b6132a38161336d565b5f805f805f85875af1905080611a5f576132bb61405c565b63bc806b965f5282602052816040526044601cfd5b5f6132dc836020015190565b9050818114611a5f57611a5f836119ca565b5f60208851036133285750604080885260208089018a9052632671a55160e11b918901919091526044880152600160648801819052613337565b50606487018051600101908190525b603c60c082028901038781528660208201528560408201528460608201528360808201528260a082015250505050505050505050565b806103b0576391b3e5145f526004601cfd5b636ab37ce75f526004601cfd5b6133958361336d565b61339f81836132d0565b816133b0576117f586868686614619565b611807828260018989895f8a6132ee565b6064810151604082019060c0026044016133dc848383613039565b50506020905250565b5f806001600160e01b03198451165f805260205f85875f8b5af15f519093501490508161341e5761341461405c565b846080526024607cfd5b8061180757846080526024607cfd5b5f8063ffffffff83351690506001810160051b6134508160408051918201905290565b925061345d848483611b2e565b5050919050565b5f8284036134735750806104f1565b82848309156134895763c63cf0895f526004601cfd5b5f6134948584615ab5565b93909304949350505050565b5f8486146134e957838303428590038082035f6134bd838a615ab5565b6134c7838c615ab5565b6134d191906159cd565b90508584878303040181151502945050505050612450565b5092949350505050565b6312d3f5a35f526004601cfd5b8451608081015160208201515f92916004811060019091111633909114151615610f56575f8061353787848b608001518b8a613e34565b91509150613551836020015188848463fb5014fc8a61470d565b9350505050612450565b63d5da9a1b5f526004601cfd5b613570615060565b83515f03613581576135818561477a565b5f8560018111156135945761359461532f565b036135aa576135a58685838561478b565b612450565b61245086858333876148fb565b84516060905f816001600160401b038111156135d5576135d5615751565b6040519080825280602002602001820160405280156135fe578160200160208202803683370190505b506040805160208082528183019092529192505f9190602082018180368337505089519192505060010160051b60205b8181101561368d575f6136448b83613cd46104da565b8051606081015191925090801561368257478111825115161561366e57638ffff9805f526004601cfd5b61368282846020015185604001518961432d565b50505060200161362e565b50505f5b838110156137f9575f8a82815181106136ac576136ac615798565b6020026020010151905080602001516001600160781b03165f036136f3575f8483815181106136dd576136dd615798565b91151560209283029190910190910152506137f1565b600184838151811061370757613707615798565b911515602092830291909101909101528051604081015180515f5b8181101561378c575f83828151811061373d5761373d615798565b6020026020010151905080606001515f1461377957608081018051908e905285516101208701516137739184918c61432d6104da565b60808201525b6080810151606090910152600101613722565b505050606081015180515f5b818110156137eb575f8382815181106137b3576137b3615798565b602002602001015190505f81606001519050805f146137d7576137d7888483614a32565b5060a0810151606090910152600101613798565b50505050505b600101613691565b50613803816119ca565b47801561381457613814338261329a565b851561388a575f5b848110156138885783818151811061383657613836615798565b602002602001015115613880576138808b828151811061385857613858615798565b60200260200101518a8b848151811061387357613873615798565b6020026020010151612d2c565b60010161381c565b505b613892611a64565b509098975050505050505050565b5f6138b361016060408051918201905290565b9050611c0a8282612459565b808210156103dc576103dc614a4b565b631a5155745f52806020526024601cfd5b63ee9e0e635f52806020526024601cfd5b6310fda3e15f52806020526024601cfd5b5f805f84516001811660410380820360051c9250808752806020018701915050805160e81c6003820191506001811660051b868152825160208218525060015b8381101561396e5760405f2082821c60051b602090811691825293840180519190941852600101613942565b50505060405f2091505f61398182614a58565b5f9081526020939093525050604090209392505050565b5f805f528151602083038051826041035f600182116139fb57604087015160608801515f1a83156139dc57601b8260ff1c0190506001600160ff1b03821660408a01525b88528a855260205f60808760015afa508385528588526040880152505f515b8a148a1515169450849050613ac457858552604082526044850380516040870351630b135d3f60e11b835289604089035260205f60648b01858f5afa96508615613ab857630b135d3f60e11b5f5114613ab8578b3b15613a6257634f7fb80d5f526004601cfd5b6001866041031115613a7b57638baa579f5f526004601cfd5b64010100000060608901515f1a1a15604187141615613aab57631f003d0a5f5260608801515f1a6020526024601cfd5b63815e1d645f526004601cfd5b8385529152603f198601525b5050508061180757613ad461405c565b634f7fb80d5f526004601cfd5b613ae9615060565b8251158451151715613b02576398e9db6e5f526004601cfd5b613b0a615060565b613b178685835f806148fb565b805160608101515f03613b2c57509050610622565b613b3c878785846080015161478b565b82516040828101519082015160208085015190840151855185511891181791181715613b735763bced929d5f52846020526024601cfd5b806060015182606001511115613bfa575f865f81518110613b9657613b96615798565b60200260200101519050816060015183606001510389825f015181518110613bc057613bc0615798565b60200260200101515f015160600151826020015181518110613be457613be4615798565b6020026020010151606001818152505050613c7b565b5f875f81518110613c0d57613c0d615798565b60200260200101519050826060015182606001510389825f015181518110613c3757613c37615798565b60200260200101515f015160400151826020015181518110613c5b57613c5b615798565b602002602001015160600181815250508260600151826060018181525050505b505050949350505050565b428084111590831116818015613c9a575080155b156104f1576104f18484614e67565b635a052b325f526004601cfd5b63a11b63ff5f526004601cfd5b63133c37c65f52806020526024601cfd5b5f6104f18284015190565b5f838381518110613cf257613cf2615798565b602002602001015190505f815f01519050613d0d8160031090565b613d1957613d19614e7c565b60408201518015613d3c57613d378460600151828660800151614e89565b613d4f565b60808401515115613d4f57613d4f614ed3565b6004821460030383816005811115613d6957613d6961532f565b90816005811115613d7c57613d7c61532f565b9052505050606090920151604090910152505050565b82515f5b81811015611807575f858281518110613db157613db1615798565b60209081029190910101518051604082015191925090600382116004881415821515171615613deb57855f5288602052836040526044601cfd5b505050806001019050613d96565b5f868803613e1357613e0c868689613464565b90506107df565b6107dc613e2187878b613464565b613e2c88888b613464565b8686866134a0565b5f805f613e3f614ee0565b6301e4d72a815260208082015260408101898152336060830152601c820194509091508751604082015287613e7f613e7860a083015190565b60e0840152565b613e95613e8d60c083015190565b610100840152565b613eab613ea360e083015190565b610120840152565b610140613eb9816060850152565b5f613ec5604084015190565b90505f613ed482848701614eea565b928301929050613ee5836080870152565b5f613ef1606086015190565b90505f613f0082868901614f50565b948501949050613f118560a0890152565b5f613f1e8e878a01614fb5565b959095019450613f2f8560c0890152565b8685015f613f3d8e83614fd4565b602497019687019a50613f599050613f548c8c0190565b615004565b8060408b901b60808b901b17178f610100018181525050613f838c82611b8690919063ffffffff16565b60058c8e51613f9291906159ba565b613f9d911b8b6159ba565b99505050505050505050509550959350505050565b5f8083613fbd614ee0565b639891976581523360208201908152608060408301819052601c9092019450905f613fe9604085015190565b90505f613ff882848601614eea565b928301929050614009836040860152565b5f614015606087015190565b90505f61402482868801614eea565b948501949050614035856060880152565b895f61404382898901614fb5565b9a9d96909a016004019b50949950505050505050505050565b3d156140a157601f3d0160051c60405160051c816003028183111561408e578183036003028280028480020360091c01015b5a602082011015611a5f573d5f803e3d5ffd5b565b63939792855f52806020526024601cfd5b60603d105f8080808080866141265760405f803e5f51935060205192503d60208501113d60208501118082179850505086614126576020845f3e5f51915060208360203e60205190508160071b60208501018160a0026020850101803d10823d101761ffff8486171117985050505f80525b86614158575f8061413b84602088018d614161565b9250975061414d83602087018c614241565b929092179850909550505b50505050612763565b5f806040519150825160c08602602001830160405285835260208660010160051b8085018360010160051b870161419f858b81811090829003020190565b60010160051b8a861196505b808510156141ff57828589015260808a843e6060830151955085608084015260608201518681116141dc85856142e8565b17881797505060808a01995060a08301925060a0820191506020850194506141ab565b50505b81831015614235578083870152608088823e6060810151608082015260808801975060a081019050602083019250614202565b50505050935093915050565b604051815180851190808603818710028101602060e08202850181016040528185526001928301600590811b87019390920190911b908185015b8282101561423557808287015260a088823e60206060890160a083013e606081015160608501516142b86080840151608088015180159114171590565b818311176142c684886142e8565b60a09b909b019a179690961795505060c093840193602092909201910161427b565b5f81516040830151801560038311161561430a57506040840151600119909101905b604085015181148551831460208701516020870151141616159250505092915050565b5f845160058111156143415761434161532f565b0361437e57604084015160208501516001600160a01b031617156143675761436761337f565b6143798460800151856060015161329a565b61441c565b6001845160058111156143935761439361532f565b036143c4576040840151156143aa576143aa61337f565b61437984602001518486608001518760600151868661338c565b6002845160058111156143d9576143d961532f565b036143fd57614379846020015184866080015187604001518860600151878761188f565b61441c84602001518486608001518760400151886060015187876118da565b50505050565b608082901c63ffffffff604084901c8116908085169061444a9084906317b1f94290611b8616565b601c8301925061445a8482614fd4565b50509250929050565b5f8061446d614ee0565b63f4dd92ce815287841860a0820152601c8101925060200160a0808252875f614497604083015190565b90505f6144a682858701614eea565b9384019390506144b7846020870152565b5f6144c3606085015190565b90505f6144d282878901614f50565b9586019590506144e3866040890152565b5f6144f08d888a01614fb5565b9687019690506145018760608a0152565b5f61450e8d898b01614fd4565b905080880197508760040199505050505050505050509550959350505050565b6339f3e3fd5f526004601cfd5b6301e4d72a6102043560051b6080019081525f808260208082015260408101858152336060830152601c9190910190614575608435610af1565b61458661014460e083016060611b2e565b610140614594816060840152565b6145a260a082016080840152565b61016060a06102643581029290920101906145be908290840152565b6145c85f82840152565b6020016145d68160c0840152565b5f9181019182526020820196909652939560449095019492505050565b63d13d53d45f52806020526024601cfd5b631cf99b265f5281602052806040526044601cfd5b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166146fe5780873b1515166146fe57806146ed57816146d0573d156146af57601f3d0160051c8360051c8160030281831115614698578183036003028280028480020360091c01015b5a6020820110156146ab573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b5f805f6001600160e01b03198751165f805260205f888a5f8e5af15f51909350149050816147595783614744575f925050506106d7565b61474c61405c565b845f52876020526024601cfd5b8061476b57845f52876020526024601cfd5b50600198975050505050505050565b63375c24c15f52806020526024601cfd5b5f805f85865160051b87015b808210156148a8576020820191508851825151106147b7576147b76148dc565b81515160051b60208a01015180516020845101515f6040830151602085015115815184101517156147ec575050505050614797565b8260051b60208201015191505060608101935083518901915083511589831060011b17881797508198505f84528a5193508615600181146148555760608220881860408d01516101208601511860208e0151865118171715614850576148506148dc565b61489e565b8151855260208201516020860152604082015160408601528a6080860152835160208d015261012084015160408d015260608520975060208d0192508683181561489e57865183525b5050505050614797565b5050508160608551015280156148d557600181036148cd576391b3e5145f526004601cfd5b6148d56148e9565b505061441c565b637fda72795f526004601cfd5b634e487b715f5260116020526024601cfd5b5f805f86875160051b88015b808210156149fd576020820191508151518a518110614928576149286148dc565b8060051b60208c01015190506020835101515f6060835101516020840151158151841015171561495b5750505050614907565b8260051b60208201015191505060608101925082518801915082511588831060011b17871796508197505f83528a5192508515600181146149ad5760a0822087146149a8576149a86148dc565b6149f4565b815184526020820151602085015260408201516040850152608082015160808501528a60208d01528960408d015260a08220965060208d019250858318156149f457855183525b50505050614907565b50508551606001839052508015614a2b5760018103614a23576391b3e5145f526004601cfd5b614a2b6148e9565b50506128dc565b63a5f542085f528260205281604052806060526064601cfd5b63466aa6165f526004601cfd5b5f614e5e565b5f6009821015614bb7576005821015614b14576003821015614ac7577f832c58a5b611aadcfa6a082ac9d04bace53d8278387f10040347b7e98eb5b30260018314027fbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde3018610402565b7ff3e8417a785f980bdaf134fa0274a6bf891eeb8195cd94b09d2aa651046e28bc60038314027fa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af118610402565b6007821015614b6a577f25d02425402d882d211a7ab774c0ed6eca048c4d03d9af40132475744753b2a360058314027f1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b5518610402565b7fb58d772fb09b426b9dece637f61ca9065f2b994f1464b51e9207f55f7c8f594860078314027f7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc1418610402565b6011821015614d0f57600d821015614c6c57600b821015614c1f577f6f0ec38c21f6f583ab7f3c5413c773ffd5344c34fde1d390958e438bf667448f60098314027fd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da0518610402565b7f32f4e7485d6485f9f6c255929b9905c62ba919758bbe231f231eaeecf33d810c600b8314027fbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f18610402565b600f821015614cc2577f8df51df98847160517f5b1186b4bc3f418d98b8a7f17f1292f392d79d600d79e600d8314027f6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a85259018610402565b7fcc4886e37eedd9aacd6c1c2c9247197a621a71282e87a7cbc673f3736d9aa141600f8314027f1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde818610402565b6015821015614dbb576013821015614d6e577f2d7a3ed6dab270fdb8e054b2ad525f0ce2a8b89cc76c17f0965434740f673a5560118314027fc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d8587718610402565b7f54b3212a178782f104e0d514b41a9a5c4ca9c980bf6597c3cecbf280917e202a60138314027f5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e6435001718610402565b6017821015614e11577fbb40bf8cea3a5a716e2b6eb08bbdac8ec159f82f380783db3c56904f15a43d0460158314027f3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d18610402565b7f403be09941a31d05cfc2f896505811353d45d38743288b016630cce39435476a60178314027f1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c18610402565b61040282614a5e565b6321ccfeb75f5281602052806040526044601cfd5b6394eb6af65f526004601cfd5b5f835f5260205f2060208301835160051b81015b80821015614ec457815180841160051b93845260209384185260405f209290910190614e9d565b5050831490508061441c5761441c5b6309bde3395f526004601cfd5b5f61041260405190565b5f825180835260208401602084018260051b82015b80831015614f3d5782518051835260208101516020840152604081015160408401526060810151606084015250602083019250608082019150614eff565b5050508060071b60200191505092915050565b5f80614f5a845190565b8084529050602084810190600583901b860181019085015b82821115614fa2575f614f848461500e565b9050614f92818360a0615017565b506020929092019160a001614f72565b60a0840260200194505050505092915050565b5f63ffffffe0603f614fc5855190565b01169050610402838383615017565b5f80614fde845190565b8084529050600581901b614ff9602086810190860183615017565b602001949350505050565b6103b06040829052565b5f610402825190565b8082828560045afa80153d15171561441c575f80fd5b6040518060a001604052806150406150a2565b81525f602082018190526040820152606080820181905260809091015290565b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e083018290528252602082018190529181019190915290565b6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020015f60048111156150ec576150ec61532f565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b5f6020828403121561512b575f80fd5b81356001600160401b03811115615140575f80fd5b820161024081850312156104f1575f80fd5b5f81518084525f5b818110156151765760208185018101518683018201520161515a565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6104f16020830184615152565b5f602082840312156151b7575f80fd5b5035919050565b5f602082840312156151ce575f80fd5b81356001600160401b038111156151e3575f80fd5b820161016081850312156104f1575f80fd5b5f8083601f840112615205575f80fd5b5081356001600160401b0381111561521b575f80fd5b6020830191508360208260051b8501011115615235575f80fd5b9250929050565b80356001600160a01b0381168114611c0a575f80fd5b5f805f805f805f805f805f60e08c8e03121561526c575f80fd5b6001600160401b03808d351115615281575f80fd5b61528e8e8e358f016151f5565b909c509a5060208d01358110156152a3575f80fd5b6152b38e60208f01358f016151f5565b909a50985060408d01358110156152c8575f80fd5b6152d88e60408f01358f016151f5565b909850965060608d01358110156152ed575f80fd5b506152fe8d60608e01358e016151f5565b909550935060808c0135925061531660a08d0161523c565b915060c08c013590509295989b509295989b9093969950565b634e487b7160e01b5f52602160045260245ffd5b60068110611b8657611b8661532f565b61535e828251615343565b6020818101516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5f815180845260208085019450602084015f5b838110156153eb5781516153be888251615353565b808401516001600160a01b031660a08901526040015160c088015260e090960195908201906001016153a9565b509495945050505050565b604080825283519082018190525f906020906060840190828701845b82811015615430578151151584529284019290840190600101615412565b50505083810360208501526106d78186615396565b5f8060208385031215615456575f80fd5b82356001600160401b0381111561546b575f80fd5b615477858286016151f5565b90969095509350505050565b5f805f8060408587031215615496575f80fd5b84356001600160401b03808211156154ac575f80fd5b6154b8888389016151f5565b909650945060208701359150808211156154d0575f80fd5b506154dd878288016151f5565b95989497509550505050565b602081525f6104f16020830184615396565b5f6020828403121561550b575f80fd5b6104f18261523c565b5f8060408385031215615525575f80fd5b82356001600160401b0381111561553a575f80fd5b83016040818603121561554b575f80fd5b946020939093013593505050565b5f805f805f6080868803121561556d575f80fd5b85356001600160401b0380821115615583575f80fd5b9087019060a0828a031215615596575f80fd5b909550602087013590808211156155ab575f80fd5b506155b8888289016151f5565b909550935050604086013591506155d16060870161523c565b90509295509295909350565b5f805f805f805f8060a0898b0312156155f4575f80fd5b88356001600160401b038082111561560a575f80fd5b6156168c838d016151f5565b909a50985060208b013591508082111561562e575f80fd5b61563a8c838d016151f5565b909850965060408b0135915080821115615652575f80fd5b5061565f8b828c016151f5565b999c989b509699959896976060870135966080013595509350505050565b5f805f805f805f6080888a031215615693575f80fd5b87356001600160401b03808211156156a9575f80fd5b6156b58b838c016151f5565b909950975060208a01359150808211156156cd575f80fd5b6156d98b838c016151f5565b909750955060408a01359150808211156156f1575f80fd5b506156fe8a828b016151f5565b909450925061571190506060890161523c565b905092959891949750929550565b606081525f6157316060830186615152565b6020830194909452506001600160a01b0391909116604090910152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261579357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156153eb5781516157d4888251615343565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016157bf565b5f815180845260208085019450602084015f5b838110156153eb57815161583d888251615343565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c09096019590820190600101615828565b60058110611b8657611b8661532f565b828152604060208201526158bb6040820183516001600160a01b03169052565b5f60208301516158d660608401826001600160a01b03169052565b5060408301516101608060808501526158f36101a08501836157ac565b91506060850151603f198584030160a08601526159108382615815565b925050608085015161592560c086018261588b565b5060a085015160e085015260c0850151610100818187015260e0870151915061012082818801528188015192506101409150828288015280880151848801525080870151610180870152505050809150509392505050565b5f823561015e19833603018112615992575f80fd5b9190910192915050565b5f602082840312156159ac575f80fd5b8135600581106104f1575f80fd5b8181038181111561040257610402615765565b8082018082111561040257610402615765565b5f815180845260208085019450602084015f5b838110156153eb57615a06878351615353565b60a09690960195908201906001016159f3565b5f6080808301878452602060018060a01b03808916602087015260406080604088015283895180865260a08901915060208b0195505f5b81811015615a91578651615a65848251615343565b808701518616848801528481015185850152606090810151908401529585019591870191600101615a50565b50508781036060890152615aa5818a6159e0565b9c9b505050505050505050505050565b80820281158282048414176104025761040261576556fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405260043610610103575f3560e01c8063a900866b11610092578063f07ec37311610062578063f07ec373146102f7578063f2d12b1214610316578063f47b774014610329578063fb0f3ee114610116578063fd9f1e101461034c575f80fd5b8063a900866b1461028a578063b3a34c4c146102be578063e7acab24146102d1578063ed98a574146102e4575f80fd5b80637423eb3c116100d85780637423eb3c146101f757806379df72bd1461020b57806387201b411461022a578063881477321461024b578063a81744041461026a575f80fd5b801561011657806306fdde031461013e57806346423aa71461015f5780635b34b966146101d5575f80fd5b366101125761011061036b565b005b5f80fd5b61012961012436600461511b565b6103f9565b60405190151581526020015b60405180910390f35b348015610149575f80fd5b50610152610408565b6040516101359190615195565b34801561016a575f80fd5b506101b36101793660046151a7565b5f9081526001602052604090205460ff808216926101008304909116916001600160781b03620100008204811692600160881b9092041690565b6040805194151585529215156020850152918301526060820152608001610135565b3480156101e0575f80fd5b506101e9610417565b604051908152602001610135565b348015610202575f80fd5b50610110610420565b348015610216575f80fd5b506101e96102253660046151be565b6104c1565b61023d610238366004615252565b6104f8565b6040516101359291906153f6565b348015610256575f80fd5b50610129610265366004615445565b610571565b61027d610278366004615483565b61058f565b60405161013591906154e9565b348015610295575f80fd5b506101e96102a43660046154fb565b6001600160a01b03165f9081526002602052604090205490565b6101296102cc366004615514565b61062a565b6101296102df366004615559565b6106a3565b61023d6102f23660046155dd565b6106e1565b348015610302575f80fd5b506101e96103113660046154fb565b610784565b61027d61032436600461567d565b6107a1565b348015610334575f80fd5b5061033d6107ea565b6040516101359392919061571f565b348015610357575f80fd5b50610129610366366004615445565b610801565b7f000000000000000000000000000000000000000000000000000000000000000080156103b357600263929eee145c146103b05763a61be9f05f52346020526024601cfd5b50565b63929eee1454806103e057600263929eee145c146103dc5763a61be9f05f52346020526024601cfd5b5050565b600381146103dc5763a61be9f05f52346020526024601cfd5b5f61040261080c565b92915050565b60606104126109c0565b905090565b5f6104126109de565b63929eee14546001147f000000000000000000000000000000000000000000000000000000000000000080610453575080155b1561047157604051630f45b98b60e41b815260040160405180910390fd5b61049a7f0000000000000000000000000000000000000000000000000000000000000000610a4b565b6104b7576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f806104cd6004610aa9565b90506104f16104e282610ab95b63ffffffff16565b610140830135610b36565b3590565b9392505050565b60608061055d61051361050b6004610aa9565b610c7a6104da565b61052a61052260046020610ce2565b610d006104da565b61054161053960046040610ce2565b610d586104da565b61055061053960046060610ce2565b89338a15028a0189610db0565b915091509b509b9950505050505050505050565b5f6104f161058a6105826004610aa9565b610dea6104da565b610e42565b606061061f6105a96105a16004610aa9565b610f636104da565b604080515f8082526020820190925290610601565b6105ee6040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816105be5790505b5061061961061160046020610ce2565b610fbb6104da565b33611013565b90505b949350505050565b5f6104f161064361063b6004610aa9565b6110516104da565b604080515f808252602082019092529061069b565b6106886040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816106585790505b5084336110c7565b5f6106d76106bc6106b46004610aa9565b6112466104da565b6106cb61052260046020610ce2565b853386150286016110c7565b9695505050505050565b6060806107736106f46105a16004610aa9565b604080515f808252602082019092529061074c565b6107396040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816107095790505b5061075c61053960046020610ce2565b61076b61053960046040610ce2565b883389610db0565b915091509850989650505050505050565b6001600160a01b0381165f90815260208190526040812054610402565b60606107dc6107b361050b6004610aa9565b6107c261052260046020610ce2565b6107d161061160046040610ce2565b338615028601611013565b90505b979650505050505050565b60605f806107f66112a2565b925092509250909192565b5f6104f183836112ee565b5f61012435600281901c90600316600182118334158214806108315761083134611429565b506003841160a0810260240135906502030203010160d01b861a905f630101020360d01b881a610864888289888861143a565b9096509150506101c4600583901b01355f8760058111156108875761088761532f565b036108bc5760443560243517156108a557636ab37ce75f526004601cfd5b6108af8482611757565b6108b761180f565b61099d565b6040805160208082528183019092525f9160208201818036833701905050905060028a60058111156108f0576108f061532f565b036109135761090e60c4356084353360e435610104355b878761188f565b610988565b60038a60058111156109275761092761532f565b036109455761090e60c4356084353360e435610104355b87876118da565b60048a60058111156109595761095961532f565b036109735761090e60243533608435604435606435610907565b6109886024353360843560443560643561093e565b6109928482611910565b61099b816119ca565b505b6109a88689846119ee565b6109b0611a64565b6001995050505050505050505090565b6060602080526d0d436f6e73696465726174696f6e604d5260606020f35b5f6109e7611ab7565b600143034060801c335f525f60205260405f208054820192508281555050336001600160a01b03167f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f82604051610a4091815260200190565b60405180910390a290565b5f816001600160a01b0316600a5a610a639190615779565b6040515f8181818686fa925050503d805f8114610a9b576040519150601f19603f3d011682016040523d82523d5f602084013e610aa0565b606091505b50909392505050565b5f813563ffffffff168201610402565b5f610acc61016060408051918201905290565b9050610adb8282610140611b2e565b610af8610af1610aec846040610ce2565b611b37565b6040830152565b5f610b0c610b07846060610ce2565b611b8a565b9050610b19816060840152565b610b2c610b24825190565b610140840152565b50919050565b0190565b610140820151604080519084015180515f939284927f000000000000000000000000000000000000000000000000000000000000000092602090910190845b81811015610ba2578251601f1901805186825260c082208652905260209384019390920191600101610b75565b508060051b6040512094505050505f7f0000000000000000000000000000000000000000000000000000000000000000915060405160206060890151015f5b86811015610c0e578151601f1901805186825260e082208552905260209283019290910190600101610be1565b505060408051600587901b9020601f198a0180517f00000000000000000000000000000000000000000000000000000000000000008252928b01805197815260608c018051938152610140909c019a8b5261018082209390915295909552939097525050925250919050565b5f8063ffffffff8335169050600581901b610c9e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610cd0610cca610cc58484610ce2565b611246565b82850152565b602001610cad565b5050505050919050565b5f6104f163ffffffff610cfa6104ed8686610b328516565b16840190565b5f8063ffffffff8335169050600581901b610d246020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610d50610cca610d4b8484610ce2565b611bcd565b602001610d33565b5f8063ffffffff8335169050600581901b610d7c6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610da8610cca610da38484610ce2565b611c0f565b602001610d8b565b60608036155f80610dc48c8c85898b611c52565b91509150610dd78c8b8b8b8b878761202f565b9450945050505097509795505050505050565b5f8063ffffffff8335169050600581901b610e0e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610e3a610cca610e358484610ce2565b612161565b602001610e1d565b5f610e4b611ab7565b5f805f80855190505f5b81811015610f56575f878281518110610e7057610e70615798565b60209081029190910101518051909150600481608001516004811115610e9857610e9861532f565b03610ea4575050610f4e565b80519450610eb1816121a4565b5f8181526001602052604081209850909650610ed390879089903615156121dd565b50865460ff16610f4b5780610140015181606001515114610ef657610ef661226b565b610f0585878460200151612278565b865460ff191660011787556040517ff280791efe782edcf06ce15c8f4dff17601db3b88eb3805a0db7d77faf757f0490610f42908890849061589b565b60405180910390a15b50505b600101610e55565b5060019695505050505050565b5f8063ffffffff8335169050600581901b610f876020820160408051918201905290565b828152925060208381019085015f5b83811015610cd857610fb3610cca610fae8484610ce2565b611051565b602001610f96565b5f8063ffffffff8335169050600581901b610fdf6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd85761100b610cca6110068484610ce2565b612314565b602001610fee565b60605f36151590505f8061102b8888858b5189611c52565b9150915061103882612347565b6110458887848885612386565b98975050505050505050565b5f61106461020060408051918201905290565b60a0810180825290915061108061107a84610aa9565b82612459565b61108c60016020840152565b61109860016040840152565b6110b56110ae6110a9856020610ce2565b61248f565b6060840152565b610b2c6110c06124b7565b6080840152565b835160808101515f91906110ee60048260048111156110e8576110e861532f565b146124d1565b5f80806110fd8a361515612572565b60408051600180825281830190925293965091945092505f9190816020015b61112461502d565b81526020019060019003908161111c5790505090508a815f8151811061114c5761114c615798565b6020026020010181905250611161818b61276a565b61116d8684848b6128e3565b6040805160018082528183019092525f9160208083019080368337509192505050361515600487818111156111a4576111a461532f565b146111c7576111b58d83885f6129e3565b6111c186868684612a35565b506111d9565b6111d6888e6080015183612b39565b95505b6111e4888c8c612c09565b85825f815181106111f7576111f7615798565b60200260200101818152505061120e8d8388612d2c565b61122b86895f01518a602001518d8c604001518d60600151612df9565b611233611a64565b5060019c9b505050505050505050505050565b5f61125961020060408051918201905290565b905061126d60208381019083016040611b2e565b60a0810180825261128061107a84610aa9565b6112916110ae6110a9856060610ce2565b610b2c6110c06110a9856080610ce2565b60605f805f6112af612e5e565b90505f7f0000000000000000000000000000000000000000000000000000000000000000905060605f5281602052806040526303312e3660635260a05ff35b5f6112f7611ab7565b5f8083815b8181101561140e573687878381811061131757611317615798565b9050602002810190611329919061597d565b90505f61133960208301836154fb565b90505f61134c60408401602085016154fb565b90505f61135f60a085016080860161599c565b905081331483331417156004821417871796505f6113936113886113808790565b610ab96104da565b866101400135610b36565b5f8181526001602052604090819020805461ffff19166101001781559051909a509091506001600160a01b0380851691908616907f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d906113f69085815260200190565b60405180910390a385600101955050505050506112fc565b5050801561141e5761141e612f3b565b506001949350505050565b63a61be9f05f52806020526024601cfd5b5f806114455f6124d1565b61144d612f48565b42610164351115426101443511171561147b576321ccfeb75f5261014435602052610164356040526044601cfd5b610204356102643510156114965763466aa6165f526004601cfd5b7f0000000000000000000000000000000000000000000000000000000000000000608081905260a08790526060602460c037604060646101203760e060802061016052610264356102043560051b6102a0016001820181526020810190508881526080602460208301376101608860a0528760c0525f60e0525f6102043593505f5b8481101561156c578060400261028401602081610100376040816101203760208101358317925060208401935060e0608020845260a0850194508b85528a6020860152604081606087013750600101611518565b6001850160051b610160206060526102643594505b848110156115bc578060400261028401925060a0840193508a8452896020850152604083606086013760208301359190911790600101611581565b506001600160a01b038111156115d9576339f3e3fd5f526004601cfd5b50505050505f7f00000000000000000000000000000000000000000000000000000000000000009050806080528360a052606060c460c0376020610104610120375060c06080205f9081526020812060e0526084359061164d826001600160a01b03165f9081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000060808190529091506040608460a03760605161010052896101205260a061014461014037816101e05261018060802094505050506102043560051b61018001828152336020820152608060408201526101206060820152600160808201528360a0820152606060c460c083013760a061026435026101e00160a4356084357f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318385a35f60605260608101820160405250505f61172983612f93565b90506117358389612fe4565b7101000000000000000000000000000001000182559150509550959350505050565b60c43560843560e4356101043584156117bf575f6040519050632671a55160e11b815260206004820152600160248201528660448201528460648201528360848201523360a48201528260c48201528160e48201526117b98682610104613039565b50611807565b60028660058111156117d3576117d361532f565b036117fa57806001146117e9576117e9816130f0565b6117f584843385613101565b611807565b61180784843385856131b6565b505050505050565b346064356084356102643560061b5f80805b838110156118605761028481013592506102a48101359150868311156118495761184961328d565b8287039650611858828461329a565b604001611821565b50858511156118715761187161328d565b61187b848661329a565b84861115611807576118073386880361329a565b61189981836132d0565b816118c057826001146118af576118af836130f0565b6118bb87878787613101565b6118d1565b6118d1828260028a8a8a8a8a6132ee565b50505050505050565b6118e38361336d565b6118ed81836132d0565b816118ff576118bb87878787876131b6565b6118d1828260038a8a8a8a8a6132ee565b5f805f805f861561193557505060843592503391505060c4356101043560e43561194a565b50339350506084359150506024356064356044355b80156119585761195861337f565b50600586901b6101e403356102643560061b5f80805b838110156119af5761028481013592506102a481013591508a156119995761199683876159ba565b95505b6119a7878a8486898f61338c565b60400161196e565b506119be86898988888e61338c565b50505050505050505050565b60408151146119d65750565b5f6119e2826020015190565b90506103dc81836133c1565b611a0a8260a4355b331415600182116004909210919091161690565b15611a5f57805f611a19825190565b9050608081901c63ffffffff8216611a3a84826317b1f94282526001905250565b601c840163fb5014fc6060529350611a5660a4358886856133e5565b5f6060526118d1565b505050565b7f00000000000000000000000000000000000000000000000000000000000000008015611a95575f63929eee145d50565b63929eee145480611aab575f63929eee145d5050565b50600163929eee145550565b7f00000000000000000000000000000000000000000000000000000000000000008015611af65763929eee145c156103b057637fa8a9875f526004601cfd5b63929eee145480611b195763929eee145c156103dc57637fa8a9875f526004601cfd5b600181146103dc57637fa8a9875f526004601cfd5b80838337505050565b5f63ffffffff8235166040519150808252602082018160051b81018060a084026020870183378293505b81841015611b7a5780845260209093019260a001611b61565b60405250919392505050565b9052565b5f63ffffffff8235166040519150808252602082018160051b81018060c084026020870183378293505b81841015611b7a5780845260209093019260c001611bb4565b5f611bdf60a060408051918201905290565b9050611bed82826080611b2e565b611c0a611c03611bfe846080610ce2565b61342d565b6080830152565b919050565b5f63ffffffff8235166040519150808252602082018160051b8101808360061b6020870183378293505b81841015611b7a57808452602090930192604001611c39565b60605f611c5f60016124d1565b86515f90600160e61b82351690806001600160401b03811115611c8457611c84615751565b604051908082528060200260200182016040528015611cad578160200160208202803683370190505b50945060010160051b91505f60205b83811015611eae575f611cd28c83613cd46104da565b90505f805f611ce1848e612572565b6001600160781b0382166020880152919450925090505f829003611d085750505050611ea6565b6001600160781b0381166040808601919091528a8601849052845160a081015160c0820151608083015192909301518051600184119d909d179c600490931099509092915f5b81811015611df0575f838281518110611d6957611d69615798565b602002602001015190508b8151108d179c505f611d8b89898460800151613464565b90508160800151826060015103611da85760608201819052611dbd565b611db789898460600151613464565b60608301525b5f611dd68360600151838a8a611dd1361590565b6134a0565b606084018190526080909301929092525050600101611d4e565b5087516060015180515f5b81811015611e9a575f838281518110611e1657611e16615798565b602002602001015190505f611e308b8b8460800151613464565b90508160800151826060015103611e4d5760608201819052611e62565b611e5c8b8b8460600151613464565b60608301525b5f611e778360600151838c8c611dd136151590565b6060840181905260a0840180516080909501949094529092525050600101611dfb565b50505050505050505050505b602001611cbc565b50506001600160e61b018103611ec657611ec66134f3565b50611ed1888861276a565b5f8060205b8381101561201457858101519250821561200c575f611ef88c83613cd46104da565b9050885f03611f13575f87830181905260209091015261200c565b60048151608001516004811115611f2c57611f2c61532f565b14611faf57611f458188866001600587901c038e613500565b611f5b575f87830181905260209091015261200c565b602080820151604083015183516080810151930151611f949388936001600160781b039081169316913314156001909111168e17612a35565b611faa575f87830181905260209091015261200c565b611fda565b611fc1815f015182608001518c612b39565b878301819052935083611fda575f60209091015261200c565b886001900398505f815f0151905061200585825f015183602001518c85604001518660600151612df9565b6001935050505b602001611ed6565b50806120225761202261355b565b5050509550959350505050565b85518551606091829161204281836159cd565b6001600160401b0381111561205957612059615751565b60405190808252806020026020018201604052801561209257816020015b61207f615060565b8152602001906001900390816120775790505b5092505f5b828110156120ea576120c58c5f8d84815181106120b6576120b6615798565b60200260200101518c8c613568565b8482815181106120d7576120d7615798565b6020908102919091010152600101612097565b505f5b818110156121435761211c8c60018c848151811061210d5761210d615798565b60200260200101518c5f613568565b848483018151811061213057612130615798565b60209081029190910101526001016120ed565b506121518b84888a896135b7565b9350505097509795505050505050565b5f6121726040808051918201905290565b905061218c61218861218384610aa9565b6138a0565b8252565b611c0a61219d6110a9846020610ce2565b6020830152565b5f6121b98260600151518361014001516138bf565b81516001600160a01b03165f90815260208190526040902054610402908390610b36565b82545f90610100900460ff16156122045781156121fd576121fd856138cf565b505f610622565b83546201000090046001600160781b0316801561225f57831561222f5761222a866138e0565b61225f565b8454600160881b90046001600160781b0316811061225f57821561225657612256866138f1565b5f915050610622565b50600195945050505050565b632165628a5f526004601cfd5b33831480156122875750505050565b5f612290612e5e565b61190160f01b5f9081526002828152602287815260428320908390528651939450929190601f601d840116106102e260621984011016156122fa576122d58688613902565b61190160f01b5f908152600286905260228281526042822091905290975090506122fd565b50815b61230a888285858a613998565b5050505050505050565b5f6123256040808051918201905290565b9050612336612188610da384610aa9565b611c0a61219d610da3846020610ce2565b80518060051b6040019050602082038051602082527f4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e78383a190525050565b8351606090806001600160401b038111156123a3576123a3615751565b6040519080825280602002602001820160405280156123dc57816020015b6123c9615060565b8152602001906001900390816123c15790505b5091505f5b8181101561243f575f8782815181106123fc576123fc615798565b6020026020010151905061241989825f0151836020015185613ae1565b84838151811061242b5761242b615798565b6020908102919091010152506001016123e1565b5061244d87838787876135b7565b50505b95945050505050565b6124668282610160611b2e565b612477610af1610aec846040610ce2565b6103dc612488610b07846060610ce2565b6060830152565b6040518135601f0163ffffffe01660200180838337913563ffffffff16815290810160405290565b5f6124c9602060408051918201905290565b5f8152905090565b7f0000000000000000000000000000000000000000000000000000000000000000801561251e5763929eee145c1561251057637fa8a9875f526004601cfd5b8160010163929eee145d5050565b63929eee1454806125505763929eee145c1561254157637fa8a9875f526004601cfd5b8260010163929eee145d505050565b6001811461256557637fa8a9875f526004601cfd5b505060020163929eee1455565b5f805f80855f0151905061258f8160a001518260c0015187613c86565b6125a257505f9250829150819050612763565b602086015160408701516001600160781b0391821694501691505f6004826080015160048111156125d5576125d561532f565b0361260257600183850218905080156125f0576125f0613ca9565b50600193508392508291506127639050565b50818311831517801561261757612617613ca9565b608082015160011615848411161561263157612631613cb6565b61263a826121a4565b5f81815260016020526040812091965061265890879083908a6121dd565b61266b57505f9350839250612763915050565b805460ff1661268657612686835f0151878a60600151612278565b8054608881901c8061269a5786915061275d565b6001600160781b038260101c169150600186036126be57818103965080955061275d565b8086036126d95790860185810386821102909603959061275d565b80860296810291909502810186810387821102918290039695919003906001600160781b0386111561275d5761271d565b5f5b8215610b2c5790829006919061270c565b61273061272a878461270a565b8861270a565b8015019687900496909504946001600160781b0386111561275d57634e487b715f5260116020526024601cfd5b50505050505b9250925092565b805182515f5b82811015612859575f84828151811061278b5761278b615798565b602002602001015190505f815f015190508381106127b0576127b08260200151613cc3565b5f8782815181106127c3576127c3615798565b6020026020010151905080602001516001600160781b03165f036127e957505050612851565b80516040808201519085015163bfb3f8ce5f876020015160018111156128115761281161532f565b1461282d575f612822856060613cd4565b9350636088d7de9150505b8251821061283e57805f526004601cfd5b612849838389613cdf565b505050505050505b600101612770565b505f5b818110156128dc575f85828151811061287757612877615798565b6020026020010151905080602001516001600160781b03165f0361289b57506128d4565b8051608081015160608201516128b89085908363a8930e9a613d92565b6128d08483604001518363d69293326104da613d9290565b5050505b60010161285c565b5050505050565b60a084015160c08501516040860151515f805b82811015612960575f8960400151828151811061291557612915615798565b602002602001015190505f815f01519050801584179350505f61294c826060015183608001518c8c8b8b612947361590565b613df9565b6060830152506080018690526001016128f6565b506080880151600481108216801561297a5761297a6134f3565b505050506060860151515f5b8181101561230a575f886060015182815181106129a5576129a5615798565b602002602001015190505f6129ca826060015183608001518b8b8a8a61294736151590565b60608301525060a0810151608090910152600101612986565b8351608081015160208201513314156001821160049092109190911616156128dc575f80612a18858489608001518988613e34565b63fb5014fc6060529092509050611a5683602001518684846133e5565b5f848152600160205260408120805482908290608881901c80612a5a57889150612ae2565b6001600160781b038260101c169150808803612a7e57908801878111935090612ae2565b97880297808802979190910288018781119350906001600160781b038083119089111715612ae257612ab0888361270a565b8015019788900497909104906001600160781b038083119089111715612ae257634e487b715f5260116020526024601cfd5b508215612b1b578515612b0f576040516310fda3e160e01b8152600481018a905260240160405180910390fd5b5f945050505050610622565b8660881b8160101b1760011782556001945050505050949350505050565b5f83610140015184606001515114612b5357612b5361226b565b83515f8080612b628888613fb2565b915091505f8082845f885af16001600160a01b0385165f908152600260205260409020805460018101909155606086901b189550925082612bc1578515612bb457612bab61405c565b612bb4856140a3565b505f93506104f192505050565b505050505f805f612bde876040015188606001516104da6140b490565b925092509250825f14612bf457612bf4846140a3565b60408701919091526060860152509392505050565b6040805160208082528183019092525f916020820181803683375050506040850151519091505f5b81811015612c81575f86604001518281518110612c5057612c50615798565b60200260200101519050846080820152612c7881885f0151896101200151876104da61432d90565b50600101612c31565b50506060840151515f90815b81811015612d0f575f87606001518281518110612cac57612cac615798565b602002602001015190505f6005811115612cc857612cc861532f565b81516005811115612cdb57612cdb61532f565b03612cf7574793508381606001511115612cf757612cf761328d565b612d068133898861432d6104da565b50600101612c8d565b5050612d1a826119ca565b504780156128dc576128dc338261329a565b8251608081015160208201515f92839283928392916004811060019091111633909114151615612d8e57612d6f612d6961010083015190565b5190565b88614422565b9093509150612d8060208201612d65565b945063fb5014fc9350612dda565b600481608001516004811115612da657612da661532f565b0361230a57805194505f8560601b9050612dc787838b608001518b85614463565b639397928596509094509250612dda9050565b612de46060859052565b612df0858785856133e5565b5f60605261230a565b60608290506060829050856001600160a01b0316876001600160a01b03167f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318a888686604051612e4c9493929190615a19565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614612f16575060408051608080517f00000000000000000000000000000000000000000000000000000000000000005f9081527f00000000000000000000000000000000000000000000000000000000000000006020527f0000000000000000000000000000000000000000000000000000000000000000855246606090815230845260a08220949095529093529190915290565b507f000000000000000000000000000000000000000000000000000000000000000090565b63fed398fc5f526004601cfd5b600435602014610224356102401416610244356102606102643560061b01141660186101243510600160a01b60843560a4351760c4356024351717101616806103b0576103b061452e565b5f8181526001602081905260409091209060843590612fb890849084903615156121dd565b50815460ff16610b2c57610b2c8184612fdf602463ffffffff61024435160161248f6104da565b612278565b5f612ff18260a4356119f6565b15610402575f805f6130028661453b565b63fb5014fc6060529194509250905061302260a43587601c8601856133e5565b5f60605260209190910160801b1781529392505050565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff60a01b175f90815260208690527f000000000000000000000000000000000000000000000000000000000000000083526055600b20919092526001600160a01b031690505f805f805260205f85875f875af191505f519050816130ce576130c561405c565b6130ce836145f3565b6001600160e01b03198116632671a55160e11b14611807576118078684614604565b6369f958275f52806020526024601cfd5b833b61311857635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af1806131a8573d1561318657601f3d0160051c8260051c816003028183111561316f578183036003028280028480020360091c01015b5a602082011015613182573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b6131cd57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af180613272573d1561325157601f3d0160051c8560051c816003028183111561323a578183036003028280028480020360091c01015b5a60208201101561324d573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b638ffff9805f526004601cfd5b6132a38161336d565b5f805f805f85875af1905080611a5f576132bb61405c565b63bc806b965f5282602052816040526044601cfd5b5f6132dc836020015190565b9050818114611a5f57611a5f836119ca565b5f60208851036133285750604080885260208089018a9052632671a55160e11b918901919091526044880152600160648801819052613337565b50606487018051600101908190525b603c60c082028901038781528660208201528560408201528460608201528360808201528260a082015250505050505050505050565b806103b0576391b3e5145f526004601cfd5b636ab37ce75f526004601cfd5b6133958361336d565b61339f81836132d0565b816133b0576117f586868686614619565b611807828260018989895f8a6132ee565b6064810151604082019060c0026044016133dc848383613039565b50506020905250565b5f806001600160e01b03198451165f805260205f85875f8b5af15f519093501490508161341e5761341461405c565b846080526024607cfd5b8061180757846080526024607cfd5b5f8063ffffffff83351690506001810160051b6134508160408051918201905290565b925061345d848483611b2e565b5050919050565b5f8284036134735750806104f1565b82848309156134895763c63cf0895f526004601cfd5b5f6134948584615ab5565b93909304949350505050565b5f8486146134e957838303428590038082035f6134bd838a615ab5565b6134c7838c615ab5565b6134d191906159cd565b90508584878303040181151502945050505050612450565b5092949350505050565b6312d3f5a35f526004601cfd5b8451608081015160208201515f92916004811060019091111633909114151615610f56575f8061353787848b608001518b8a613e34565b91509150613551836020015188848463fb5014fc8a61470d565b9350505050612450565b63d5da9a1b5f526004601cfd5b613570615060565b83515f03613581576135818561477a565b5f8560018111156135945761359461532f565b036135aa576135a58685838561478b565b612450565b61245086858333876148fb565b84516060905f816001600160401b038111156135d5576135d5615751565b6040519080825280602002602001820160405280156135fe578160200160208202803683370190505b506040805160208082528183019092529192505f9190602082018180368337505089519192505060010160051b60205b8181101561368d575f6136448b83613cd46104da565b8051606081015191925090801561368257478111825115161561366e57638ffff9805f526004601cfd5b61368282846020015185604001518961432d565b50505060200161362e565b50505f5b838110156137f9575f8a82815181106136ac576136ac615798565b6020026020010151905080602001516001600160781b03165f036136f3575f8483815181106136dd576136dd615798565b91151560209283029190910190910152506137f1565b600184838151811061370757613707615798565b911515602092830291909101909101528051604081015180515f5b8181101561378c575f83828151811061373d5761373d615798565b6020026020010151905080606001515f1461377957608081018051908e905285516101208701516137739184918c61432d6104da565b60808201525b6080810151606090910152600101613722565b505050606081015180515f5b818110156137eb575f8382815181106137b3576137b3615798565b602002602001015190505f81606001519050805f146137d7576137d7888483614a32565b5060a0810151606090910152600101613798565b50505050505b600101613691565b50613803816119ca565b47801561381457613814338261329a565b851561388a575f5b848110156138885783818151811061383657613836615798565b602002602001015115613880576138808b828151811061385857613858615798565b60200260200101518a8b848151811061387357613873615798565b6020026020010151612d2c565b60010161381c565b505b613892611a64565b509098975050505050505050565b5f6138b361016060408051918201905290565b9050611c0a8282612459565b808210156103dc576103dc614a4b565b631a5155745f52806020526024601cfd5b63ee9e0e635f52806020526024601cfd5b6310fda3e15f52806020526024601cfd5b5f805f84516001811660410380820360051c9250808752806020018701915050805160e81c6003820191506001811660051b868152825160208218525060015b8381101561396e5760405f2082821c60051b602090811691825293840180519190941852600101613942565b50505060405f2091505f61398182614a58565b5f9081526020939093525050604090209392505050565b5f805f528151602083038051826041035f600182116139fb57604087015160608801515f1a83156139dc57601b8260ff1c0190506001600160ff1b03821660408a01525b88528a855260205f60808760015afa508385528588526040880152505f515b8a148a1515169450849050613ac457858552604082526044850380516040870351630b135d3f60e11b835289604089035260205f60648b01858f5afa96508615613ab857630b135d3f60e11b5f5114613ab8578b3b15613a6257634f7fb80d5f526004601cfd5b6001866041031115613a7b57638baa579f5f526004601cfd5b64010100000060608901515f1a1a15604187141615613aab57631f003d0a5f5260608801515f1a6020526024601cfd5b63815e1d645f526004601cfd5b8385529152603f198601525b5050508061180757613ad461405c565b634f7fb80d5f526004601cfd5b613ae9615060565b8251158451151715613b02576398e9db6e5f526004601cfd5b613b0a615060565b613b178685835f806148fb565b805160608101515f03613b2c57509050610622565b613b3c878785846080015161478b565b82516040828101519082015160208085015190840151855185511891181791181715613b735763bced929d5f52846020526024601cfd5b806060015182606001511115613bfa575f865f81518110613b9657613b96615798565b60200260200101519050816060015183606001510389825f015181518110613bc057613bc0615798565b60200260200101515f015160600151826020015181518110613be457613be4615798565b6020026020010151606001818152505050613c7b565b5f875f81518110613c0d57613c0d615798565b60200260200101519050826060015182606001510389825f015181518110613c3757613c37615798565b60200260200101515f015160400151826020015181518110613c5b57613c5b615798565b602002602001015160600181815250508260600151826060018181525050505b505050949350505050565b428084111590831116818015613c9a575080155b156104f1576104f18484614e67565b635a052b325f526004601cfd5b63a11b63ff5f526004601cfd5b63133c37c65f52806020526024601cfd5b5f6104f18284015190565b5f838381518110613cf257613cf2615798565b602002602001015190505f815f01519050613d0d8160031090565b613d1957613d19614e7c565b60408201518015613d3c57613d378460600151828660800151614e89565b613d4f565b60808401515115613d4f57613d4f614ed3565b6004821460030383816005811115613d6957613d6961532f565b90816005811115613d7c57613d7c61532f565b9052505050606090920151604090910152505050565b82515f5b81811015611807575f858281518110613db157613db1615798565b60209081029190910101518051604082015191925090600382116004881415821515171615613deb57855f5288602052836040526044601cfd5b505050806001019050613d96565b5f868803613e1357613e0c868689613464565b90506107df565b6107dc613e2187878b613464565b613e2c88888b613464565b8686866134a0565b5f805f613e3f614ee0565b6301e4d72a815260208082015260408101898152336060830152601c820194509091508751604082015287613e7f613e7860a083015190565b60e0840152565b613e95613e8d60c083015190565b610100840152565b613eab613ea360e083015190565b610120840152565b610140613eb9816060850152565b5f613ec5604084015190565b90505f613ed482848701614eea565b928301929050613ee5836080870152565b5f613ef1606086015190565b90505f613f0082868901614f50565b948501949050613f118560a0890152565b5f613f1e8e878a01614fb5565b959095019450613f2f8560c0890152565b8685015f613f3d8e83614fd4565b602497019687019a50613f599050613f548c8c0190565b615004565b8060408b901b60808b901b17178f610100018181525050613f838c82611b8690919063ffffffff16565b60058c8e51613f9291906159ba565b613f9d911b8b6159ba565b99505050505050505050509550959350505050565b5f8083613fbd614ee0565b639891976581523360208201908152608060408301819052601c9092019450905f613fe9604085015190565b90505f613ff882848601614eea565b928301929050614009836040860152565b5f614015606087015190565b90505f61402482868801614eea565b948501949050614035856060880152565b895f61404382898901614fb5565b9a9d96909a016004019b50949950505050505050505050565b3d156140a157601f3d0160051c60405160051c816003028183111561408e578183036003028280028480020360091c01015b5a602082011015611a5f573d5f803e3d5ffd5b565b63939792855f52806020526024601cfd5b60603d105f8080808080866141265760405f803e5f51935060205192503d60208501113d60208501118082179850505086614126576020845f3e5f51915060208360203e60205190508160071b60208501018160a0026020850101803d10823d101761ffff8486171117985050505f80525b86614158575f8061413b84602088018d614161565b9250975061414d83602087018c614241565b929092179850909550505b50505050612763565b5f806040519150825160c08602602001830160405285835260208660010160051b8085018360010160051b870161419f858b81811090829003020190565b60010160051b8a861196505b808510156141ff57828589015260808a843e6060830151955085608084015260608201518681116141dc85856142e8565b17881797505060808a01995060a08301925060a0820191506020850194506141ab565b50505b81831015614235578083870152608088823e6060810151608082015260808801975060a081019050602083019250614202565b50505050935093915050565b604051815180851190808603818710028101602060e08202850181016040528185526001928301600590811b87019390920190911b908185015b8282101561423557808287015260a088823e60206060890160a083013e606081015160608501516142b86080840151608088015180159114171590565b818311176142c684886142e8565b60a09b909b019a179690961795505060c093840193602092909201910161427b565b5f81516040830151801560038311161561430a57506040840151600119909101905b604085015181148551831460208701516020870151141616159250505092915050565b5f845160058111156143415761434161532f565b0361437e57604084015160208501516001600160a01b031617156143675761436761337f565b6143798460800151856060015161329a565b61441c565b6001845160058111156143935761439361532f565b036143c4576040840151156143aa576143aa61337f565b61437984602001518486608001518760600151868661338c565b6002845160058111156143d9576143d961532f565b036143fd57614379846020015184866080015187604001518860600151878761188f565b61441c84602001518486608001518760400151886060015187876118da565b50505050565b608082901c63ffffffff604084901c8116908085169061444a9084906317b1f94290611b8616565b601c8301925061445a8482614fd4565b50509250929050565b5f8061446d614ee0565b63f4dd92ce815287841860a0820152601c8101925060200160a0808252875f614497604083015190565b90505f6144a682858701614eea565b9384019390506144b7846020870152565b5f6144c3606085015190565b90505f6144d282878901614f50565b9586019590506144e3866040890152565b5f6144f08d888a01614fb5565b9687019690506145018760608a0152565b5f61450e8d898b01614fd4565b905080880197508760040199505050505050505050509550959350505050565b6339f3e3fd5f526004601cfd5b6301e4d72a6102043560051b6080019081525f808260208082015260408101858152336060830152601c9190910190614575608435610af1565b61458661014460e083016060611b2e565b610140614594816060840152565b6145a260a082016080840152565b61016060a06102643581029290920101906145be908290840152565b6145c85f82840152565b6020016145d68160c0840152565b5f9181019182526020820196909652939560449095019492505050565b63d13d53d45f52806020526024601cfd5b631cf99b265f5281602052806040526044601cfd5b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166146fe5780873b1515166146fe57806146ed57816146d0573d156146af57601f3d0160051c8360051c8160030281831115614698578183036003028280028480020360091c01015b5a6020820110156146ab573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b5f805f6001600160e01b03198751165f805260205f888a5f8e5af15f51909350149050816147595783614744575f925050506106d7565b61474c61405c565b845f52876020526024601cfd5b8061476b57845f52876020526024601cfd5b50600198975050505050505050565b63375c24c15f52806020526024601cfd5b5f805f85865160051b87015b808210156148a8576020820191508851825151106147b7576147b76148dc565b81515160051b60208a01015180516020845101515f6040830151602085015115815184101517156147ec575050505050614797565b8260051b60208201015191505060608101935083518901915083511589831060011b17881797508198505f84528a5193508615600181146148555760608220881860408d01516101208601511860208e0151865118171715614850576148506148dc565b61489e565b8151855260208201516020860152604082015160408601528a6080860152835160208d015261012084015160408d015260608520975060208d0192508683181561489e57865183525b5050505050614797565b5050508160608551015280156148d557600181036148cd576391b3e5145f526004601cfd5b6148d56148e9565b505061441c565b637fda72795f526004601cfd5b634e487b715f5260116020526024601cfd5b5f805f86875160051b88015b808210156149fd576020820191508151518a518110614928576149286148dc565b8060051b60208c01015190506020835101515f6060835101516020840151158151841015171561495b5750505050614907565b8260051b60208201015191505060608101925082518801915082511588831060011b17871796508197505f83528a5192508515600181146149ad5760a0822087146149a8576149a86148dc565b6149f4565b815184526020820151602085015260408201516040850152608082015160808501528a60208d01528960408d015260a08220965060208d019250858318156149f457855183525b50505050614907565b50508551606001839052508015614a2b5760018103614a23576391b3e5145f526004601cfd5b614a2b6148e9565b50506128dc565b63a5f542085f528260205281604052806060526064601cfd5b63466aa6165f526004601cfd5b5f614e5e565b5f6009821015614bb7576005821015614b14576003821015614ac7577f832c58a5b611aadcfa6a082ac9d04bace53d8278387f10040347b7e98eb5b30260018314027fbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde3018610402565b7ff3e8417a785f980bdaf134fa0274a6bf891eeb8195cd94b09d2aa651046e28bc60038314027fa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af118610402565b6007821015614b6a577f25d02425402d882d211a7ab774c0ed6eca048c4d03d9af40132475744753b2a360058314027f1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b5518610402565b7fb58d772fb09b426b9dece637f61ca9065f2b994f1464b51e9207f55f7c8f594860078314027f7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc1418610402565b6011821015614d0f57600d821015614c6c57600b821015614c1f577f6f0ec38c21f6f583ab7f3c5413c773ffd5344c34fde1d390958e438bf667448f60098314027fd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da0518610402565b7f32f4e7485d6485f9f6c255929b9905c62ba919758bbe231f231eaeecf33d810c600b8314027fbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f18610402565b600f821015614cc2577f8df51df98847160517f5b1186b4bc3f418d98b8a7f17f1292f392d79d600d79e600d8314027f6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a85259018610402565b7fcc4886e37eedd9aacd6c1c2c9247197a621a71282e87a7cbc673f3736d9aa141600f8314027f1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde818610402565b6015821015614dbb576013821015614d6e577f2d7a3ed6dab270fdb8e054b2ad525f0ce2a8b89cc76c17f0965434740f673a5560118314027fc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d8587718610402565b7f54b3212a178782f104e0d514b41a9a5c4ca9c980bf6597c3cecbf280917e202a60138314027f5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e6435001718610402565b6017821015614e11577fbb40bf8cea3a5a716e2b6eb08bbdac8ec159f82f380783db3c56904f15a43d0460158314027f3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d18610402565b7f403be09941a31d05cfc2f896505811353d45d38743288b016630cce39435476a60178314027f1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c18610402565b61040282614a5e565b6321ccfeb75f5281602052806040526044601cfd5b6394eb6af65f526004601cfd5b5f835f5260205f2060208301835160051b81015b80821015614ec457815180841160051b93845260209384185260405f209290910190614e9d565b5050831490508061441c5761441c5b6309bde3395f526004601cfd5b5f61041260405190565b5f825180835260208401602084018260051b82015b80831015614f3d5782518051835260208101516020840152604081015160408401526060810151606084015250602083019250608082019150614eff565b5050508060071b60200191505092915050565b5f80614f5a845190565b8084529050602084810190600583901b860181019085015b82821115614fa2575f614f848461500e565b9050614f92818360a0615017565b506020929092019160a001614f72565b60a0840260200194505050505092915050565b5f63ffffffe0603f614fc5855190565b01169050610402838383615017565b5f80614fde845190565b8084529050600581901b614ff9602086810190860183615017565b602001949350505050565b6103b06040829052565b5f610402825190565b8082828560045afa80153d15171561441c575f80fd5b6040518060a001604052806150406150a2565b81525f602082018190526040820152606080820181905260809091015290565b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e083018290528252602082018190529181019190915290565b6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020015f60048111156150ec576150ec61532f565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b5f6020828403121561512b575f80fd5b81356001600160401b03811115615140575f80fd5b820161024081850312156104f1575f80fd5b5f81518084525f5b818110156151765760208185018101518683018201520161515a565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6104f16020830184615152565b5f602082840312156151b7575f80fd5b5035919050565b5f602082840312156151ce575f80fd5b81356001600160401b038111156151e3575f80fd5b820161016081850312156104f1575f80fd5b5f8083601f840112615205575f80fd5b5081356001600160401b0381111561521b575f80fd5b6020830191508360208260051b8501011115615235575f80fd5b9250929050565b80356001600160a01b0381168114611c0a575f80fd5b5f805f805f805f805f805f60e08c8e03121561526c575f80fd5b6001600160401b03808d351115615281575f80fd5b61528e8e8e358f016151f5565b909c509a5060208d01358110156152a3575f80fd5b6152b38e60208f01358f016151f5565b909a50985060408d01358110156152c8575f80fd5b6152d88e60408f01358f016151f5565b909850965060608d01358110156152ed575f80fd5b506152fe8d60608e01358e016151f5565b909550935060808c0135925061531660a08d0161523c565b915060c08c013590509295989b509295989b9093969950565b634e487b7160e01b5f52602160045260245ffd5b60068110611b8657611b8661532f565b61535e828251615343565b6020818101516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5f815180845260208085019450602084015f5b838110156153eb5781516153be888251615353565b808401516001600160a01b031660a08901526040015160c088015260e090960195908201906001016153a9565b509495945050505050565b604080825283519082018190525f906020906060840190828701845b82811015615430578151151584529284019290840190600101615412565b50505083810360208501526106d78186615396565b5f8060208385031215615456575f80fd5b82356001600160401b0381111561546b575f80fd5b615477858286016151f5565b90969095509350505050565b5f805f8060408587031215615496575f80fd5b84356001600160401b03808211156154ac575f80fd5b6154b8888389016151f5565b909650945060208701359150808211156154d0575f80fd5b506154dd878288016151f5565b95989497509550505050565b602081525f6104f16020830184615396565b5f6020828403121561550b575f80fd5b6104f18261523c565b5f8060408385031215615525575f80fd5b82356001600160401b0381111561553a575f80fd5b83016040818603121561554b575f80fd5b946020939093013593505050565b5f805f805f6080868803121561556d575f80fd5b85356001600160401b0380821115615583575f80fd5b9087019060a0828a031215615596575f80fd5b909550602087013590808211156155ab575f80fd5b506155b8888289016151f5565b909550935050604086013591506155d16060870161523c565b90509295509295909350565b5f805f805f805f8060a0898b0312156155f4575f80fd5b88356001600160401b038082111561560a575f80fd5b6156168c838d016151f5565b909a50985060208b013591508082111561562e575f80fd5b61563a8c838d016151f5565b909850965060408b0135915080821115615652575f80fd5b5061565f8b828c016151f5565b999c989b509699959896976060870135966080013595509350505050565b5f805f805f805f6080888a031215615693575f80fd5b87356001600160401b03808211156156a9575f80fd5b6156b58b838c016151f5565b909950975060208a01359150808211156156cd575f80fd5b6156d98b838c016151f5565b909750955060408a01359150808211156156f1575f80fd5b506156fe8a828b016151f5565b909450925061571190506060890161523c565b905092959891949750929550565b606081525f6157316060830186615152565b6020830194909452506001600160a01b0391909116604090910152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261579357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156153eb5781516157d4888251615343565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016157bf565b5f815180845260208085019450602084015f5b838110156153eb57815161583d888251615343565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c09096019590820190600101615828565b60058110611b8657611b8661532f565b828152604060208201526158bb6040820183516001600160a01b03169052565b5f60208301516158d660608401826001600160a01b03169052565b5060408301516101608060808501526158f36101a08501836157ac565b91506060850151603f198584030160a08601526159108382615815565b925050608085015161592560c086018261588b565b5060a085015160e085015260c0850151610100818187015260e0870151915061012082818801528188015192506101409150828288015280880151848801525080870151610180870152505050809150509392505050565b5f823561015e19833603018112615992575f80fd5b9190910192915050565b5f602082840312156159ac575f80fd5b8135600581106104f1575f80fd5b8181038181111561040257610402615765565b8082018082111561040257610402615765565b5f815180845260208085019450602084015f5b838110156153eb57615a06878351615353565b60a09690960195908201906001016159f3565b5f6080808301878452602060018060a01b03808916602087015260406080604088015283895180865260a08901915060208b0195505f5b81811015615a91578651615a65848251615343565b808701518616848801528481015185850152606090810151908401529585019591870191600101615a50565b50508781036060890152615aa5818a6159e0565b9c9b505050505050505050505050565b80820281158282048414176104025761040261576556fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConsiderationBase.json b/artifacts/ConsiderationBase.json new file mode 100644 index 00000000..b5f4756e --- /dev/null +++ b/artifacts/ConsiderationBase.json @@ -0,0 +1,475 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConsiderationBase", + "sourceName": "seaport-core/src/lib/ConsiderationBase.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + } + ], + "bytecode": "0x6101c0604052348015610010575f80fd5b5060405161053038038061053083398101604081905261002f91610216565b6100376100f0565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e59190610243565b506101a052506102b8565b5f808080808061012060408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a81526020016104c6606a913990505f6040518060c001604052806084815260200161031c6084913990505f60405180610100016040528060d481526020016103f260d4913990506040518060800160405280605281526020016103a06052913980519060200120965082805190602001209550818051906020012094505f8183856040516020016101ef93929190610292565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f60208284031215610226575f80fd5b81516001600160a01b038116811461023c575f80fd5b9392505050565b5f8060408385031215610254575f80fd5b505080516020909101519092909150565b5f81515f5b81811015610284576020818501810151868301520161026a565b505f93019283525090919050565b5f6102af6102a96102a38488610265565b86610265565b84610265565b95945050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a05160156103075f395f50505f50505f50505f50505f50505f50505f50505f50505f50505f505060155ff3fe60806040525f80fdfea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConsiderationEventsAndErrors.json b/artifacts/ConsiderationEventsAndErrors.json new file mode 100644 index 00000000..0d359056 --- /dev/null +++ b/artifacts/ConsiderationEventsAndErrors.json @@ -0,0 +1,464 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConsiderationEventsAndErrors", + "sourceName": "seaport-types/src/interfaces/ConsiderationEventsAndErrors.sol", + "abi": [ + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ConsiderationInterface.json b/artifacts/ConsiderationInterface.json new file mode 100644 index 00000000..57cca64b --- /dev/null +++ b/artifacts/ConsiderationInterface.json @@ -0,0 +1,2199 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ConsiderationInterface", + "sourceName": "seaport-types/src/interfaces/ConsiderationInterface.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents[]", + "name": "orders", + "type": "tuple[]" + } + ], + "name": "cancel", + "outputs": [ + { + "internalType": "bool", + "name": "cancelled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder", + "name": "advancedOrder", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "criteriaResolvers", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "fulfillAdvancedOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "advancedOrders", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "criteriaResolvers", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "offerFulfillments", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "considerationFulfillments", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableAdvancedOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "availableOrders", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "orders", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "offerFulfillments", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "considerationFulfillments", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "availableOrders", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "parameters", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "parameters", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder_efficient_6GL6yc", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order", + "name": "order", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + } + ], + "name": "fulfillOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractOfferer", + "type": "address" + } + ], + "name": "getContractOffererNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "getCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents", + "name": "order", + "type": "tuple" + } + ], + "name": "getOrderHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "getOrderStatus", + "outputs": [ + { + "internalType": "bool", + "name": "isValidated", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isCancelled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "totalFilled", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSize", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "information", + "outputs": [ + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "domainSeparator", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "orders", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "criteriaResolvers", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "fulfillments", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "matchAdvancedOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "orders", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "fulfillments", + "type": "tuple[]" + } + ], + "name": "matchOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "contractName", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "orders", + "type": "tuple[]" + } + ], + "name": "validate", + "outputs": [ + { + "internalType": "bool", + "name": "validated", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/Controllable.json b/artifacts/Controllable.json index 8c161bf2..1ea956da 100644 --- a/artifacts/Controllable.json +++ b/artifacts/Controllable.json @@ -112,8 +112,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103098061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063715018a61461005c5780638da5cb5b14610066578063da8c229e14610086578063e0dba60f146100b9578063f2fde38b146100cc575b600080fd5b6100646100df565b005b6000546040516001600160a01b0390911681526020015b60405180910390f35b6100a961009436600461029e565b60016020526000908152604090205460ff1681565b604051901515815260200161007d565b6100646100c73660046102c0565b6100f3565b6100646100da36600461029e565b61015a565b6100e76101d8565b6100f16000610232565b565b6100fb6101d8565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b6101626101d8565b6001600160a01b0381166101cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101d581610232565b50565b6000546001600160a01b031633146100f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461029957600080fd5b919050565b6000602082840312156102b057600080fd5b6102b982610282565b9392505050565b600080604083850312156102d357600080fd5b6102dc83610282565b9150602083013580151581146102f157600080fd5b80915050925092905056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063715018a61461005c5780638da5cb5b14610066578063da8c229e14610086578063e0dba60f146100b9578063f2fde38b146100cc575b600080fd5b6100646100df565b005b6000546040516001600160a01b0390911681526020015b60405180910390f35b6100a961009436600461029e565b60016020526000908152604090205460ff1681565b604051901515815260200161007d565b6100646100c73660046102c0565b6100f3565b6100646100da36600461029e565b61015a565b6100e76101d8565b6100f16000610232565b565b6100fb6101d8565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b6101626101d8565b6001600160a01b0381166101cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101d581610232565b50565b6000546001600160a01b031633146100f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461029957600080fd5b919050565b6000602082840312156102b057600080fd5b6102b982610282565b9392505050565b600080604083850312156102d357600080fd5b6102dc83610282565b9150602083013580151581146102f157600080fd5b80915050925092905056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506100193361001e565b61006d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6102fa8061007a5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c8063715018a6146100595780638da5cb5b14610063578063da8c229e14610082578063e0dba60f146100b4578063f2fde38b146100c7575b5f80fd5b6100616100da565b005b5f546040516001600160a01b0390911681526020015b60405180910390f35b6100a4610090366004610294565b60016020525f908152604090205460ff1681565b6040519015158152602001610079565b6100616100c23660046102b4565b6100ed565b6100616100d5366004610294565b610153565b6100e26101d1565b6100eb5f61022a565b565b6100f56101d1565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b61015b6101d1565b6001600160a01b0381166101c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101ce8161022a565b50565b5f546001600160a01b031633146100eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bc565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461028f575f80fd5b919050565b5f602082840312156102a4575f80fd5b6102ad82610279565b9392505050565b5f80604083850312156102c5575f80fd5b6102ce83610279565b9150602083013580151581146102e2575f80fd5b80915050925092905056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610055575f3560e01c8063715018a6146100595780638da5cb5b14610063578063da8c229e14610082578063e0dba60f146100b4578063f2fde38b146100c7575b5f80fd5b6100616100da565b005b5f546040516001600160a01b0390911681526020015b60405180910390f35b6100a4610090366004610294565b60016020525f908152604090205460ff1681565b6040519015158152602001610079565b6100616100c23660046102b4565b6100ed565b6100616100d5366004610294565b610153565b6100e26101d1565b6100eb5f61022a565b565b6100f56101d1565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b61015b6101d1565b6001600160a01b0381166101c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101ce8161022a565b50565b5f546001600160a01b031633146100eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bc565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461028f575f80fd5b919050565b5f602082840312156102a4575f80fd5b6102ad82610279565b9392505050565b5f80604083850312156102c5575f80fd5b6102ce83610279565b9150602083013580151581146102e2575f80fd5b80915050925092905056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/CounterManager.json b/artifacts/CounterManager.json new file mode 100644 index 00000000..beb9f1d3 --- /dev/null +++ b/artifacts/CounterManager.json @@ -0,0 +1,491 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "CounterManager", + "sourceName": "seaport-core/src/lib/CounterManager.sol", + "abi": [ + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801561000f575f80fd5b505f610019610076565b90506001600160a01b03811661004257604051632aea588760e01b815260040160405180910390fd5b5f61004c8261008f565b8015156080526001600160a01b03831660a05290508061006f57600163929eee14555b505061010c565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6100a791906100ed565b6040515f8181818686fa925050503d805f81146100df576040519150601f19603f3d011682016040523d82523d5f602084013e6100e4565b606091505b50909392505050565b5f8261010757634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05161016261012b5f395f608d01525f604201526101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/CriteriaResolution.json b/artifacts/CriteriaResolution.json new file mode 100644 index 00000000..f1ee7eaa --- /dev/null +++ b/artifacts/CriteriaResolution.json @@ -0,0 +1,74 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "CriteriaResolution", + "sourceName": "seaport-core/src/lib/CriteriaResolution.sol", + "abi": [ + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/CriteriaResolutionErrors.json b/artifacts/CriteriaResolutionErrors.json new file mode 100644 index 00000000..a638c613 --- /dev/null +++ b/artifacts/CriteriaResolutionErrors.json @@ -0,0 +1,74 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "CriteriaResolutionErrors", + "sourceName": "seaport-types/src/interfaces/CriteriaResolutionErrors.sol", + "abi": [ + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/DNSRegistrar.json b/artifacts/DNSRegistrar.json index c07b313d..463fc72d 100644 --- a/artifacts/DNSRegistrar.json +++ b/artifacts/DNSRegistrar.json @@ -258,8 +258,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162001f1438038062001f14833981016040819052620000349162000118565b600080546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e9060200160405180910390a1600280546001600160a01b0319166001600160a01b0384169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba89060200160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055506200016c9050565b6001600160a01b03811681146200011557600080fd5b50565b6000806000606084860312156200012e57600080fd5b83516200013b81620000ff565b60208501519093506200014e81620000ff565b60408501519092506200016181620000ff565b809150509250925092565b611d98806200017c6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80633f15457f116100665780633f15457f146101135780637adbf973146101265780637dc0d1d0146101395780638bbedf751461014c578063be27b22c1461015f57600080fd5b806301ffc9a7146100985780631ecfc411146100c0578063224199c2146100d557806330349ebe146100e8575b600080fd5b6100ab6100a6366004611649565b610172565b60405190151581526020015b60405180910390f35b6100d36100ce36600461168b565b6101a9565b005b6100d36100e3366004611890565b6102eb565b6002546100fb906001600160a01b031681565b6040516001600160a01b0390911681526020016100b7565b6001546100fb906001600160a01b031681565b6100d361013436600461168b565b610668565b6000546100fb906001600160a01b031681565b6100d361015a366004611940565b6107a1565b6100d361016d3660046119c8565b61082b565b60006001600160e01b031982166301ffc9a760e01b14806101a357506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102179190611a2c565b90506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027d9190611a2c565b9050336001600160a01b0382161461029457600080fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b6000546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061031d9087908790600401611a99565b6000604051808303816000875af115801561033c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103649190810190611b32565b9250600080600061037588876108ca565b91945092509050336001600160a01b038216146103ef5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105e1576001600160a01b0385166104635760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103e6565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301526000608483015290911690635ef2c7f09060a401600060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b50505050600083836040516020016104fb929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b0090604401600060405180830381600087803b15801561055d57600080fd5b505af1158015610571573d6000803e3d6000fd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c39150604401600060405180830381600087803b1580156105c357600080fd5b505af11580156105d7573d6000803e3d6000fd5b505050505061065e565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301526000608483015290911690635ef2c7f09060a401600060405180830381600087803b15801561064557600080fd5b505af1158015610659573d6000803e3d6000fd5b505050505b5050505050505050565b6001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d69190611a2c565b90506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073c9190611a2c565b9050336001600160a01b0382161461075357600080fd5b600080546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102de565b6000546040516321ae60b160e11b81526001600160a01b039091169063435cc162906107d39085908590600401611a99565b6000604051808303816000875af11580156107f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261081a9190810190611b32565b9050610826838261082b565b505050565b600080600061083a85856108ca565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190611ba9565b505050505050565b60008080806108d98682610a85565b60ff1690506108ea86600183610aa9565b9250600061091d6108fc836001611bd8565b6001848a5161090b9190611beb565b6109159190611beb565b899190610acd565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061094e908490600401611bfe565b602060405180830381865afa15801561096b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098f9190611c11565b6109e75760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103e6565b6109f2816000610b4f565b600054909550610a0c906001600160a01b03168888610e40565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a749190611bfe565b60405180910390a350509250925092565b6000828281518110610a9957610a99611c33565b016020015160f81c905092915050565b8251600090610ab88385611bd8565b1115610ac357600080fd5b5091016020012090565b8251606090610adc8385611bd8565b1115610ae757600080fd5b60008267ffffffffffffffff811115610b0257610b026116a8565b6040519080825280601f01601f191660200182016040528015610b2c576020820181803683370190505b50905060208082019086860101610b44828287611072565b509095945050505050565b600080610b5c8484610a85565b60ff16905080600003610b735750600090506101a3565b6000610b9385610b838487611bd8565b610b8e906001611bd8565b610b4f565b90506000610bad610ba5866001611bd8565b879085610aa9565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095506000916001600160a01b03909116906302571be390602401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d9190611a2c565b90506001600160a01b0381161580610c6d57506001600160a01b03811630145b610ccc5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103e6565b6001600160a01b0381163014610e365782610db8576001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611a2c565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec90604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b5050505050610e36565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611ba9565b505b5050505092915050565b600080610e60604051806040016040528060608152602001600081525090565b610e7885516005610e719190611bd8565b82906110c8565b50604080518082019091526005815264045f656e7360d81b6020820152610ea090829061112d565b50610eab818661112d565b50805160405163021e646f60e21b815260009182916001600160a01b038a169163087991bc91610ee091601091600401611c49565b606060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190611c7f565b93509150506bffffffffffffffffffffffff198216158015610f4257508551155b15610f56576000809450945050505061106a565b855160208701206bffffffffffffffffffffffff19838116911614610f7a57600080fd5b6000610f86878261115b565b90505b8051516020820151101561105e57610fb0816080015183610faa9190611cd8565b426111bc565b6110225760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103e6565b600080611033898460a001516111d5565b92509050811561104e5796506001955061106a945050505050565b505061105981611248565b610f89565b50600080945094505050505b935093915050565b602081106110aa5781518352611089602084611bd8565b9250611096602083611bd8565b91506110a3602082611beb565b9050611072565b905182516020929092036101000a6000190180199091169116179052565b6040805180820190915260608152600060208201526110e8602083611cfc565b15611110576110f8602083611cfc565b611103906020611beb565b61110d9083611bd8565b91505b506020828101829052604080518085526000815290920101905290565b60408051808201909152606081526000602082015261115483846000015151848551611330565b9392505050565b6111a96040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c081018290526101a381611248565b6000806111c98385611d1e565b60030b12159392505050565b6000805b835183101561123a5760006111ee8585610a85565b60ff1690506111fe600185611bd8565b935060008061120e87878561141a565b92509050811561122657935060019250611241915050565b6112308387611bd8565b95505050506111d9565b5060009050805b9250929050565b60c0810151602082018190528151511161125f5750565b600061127382600001518360200151611476565b82602001516112829190611bd8565b825190915061129190826114d8565b61ffff1660408301526112a5600282611bd8565b82519091506112b490826114d8565b61ffff1660608301526112c8600282611bd8565b82519091506112d79082611500565b63ffffffff1660808301526112ed600482611bd8565b82519091506000906112ff90836114d8565b61ffff169050611310600283611bd8565b60a0840181905291506113238183611bd8565b60c0909301929092525050565b604080518082019091526060815260006020820152825182111561135357600080fd5b60208501516113628386611bd8565b11156113955761139585611385876020015187866113809190611bd8565b61152a565b611390906002611d45565b611541565b6000808651805187602083010193508088870111156113b45787860182525b505050602084015b602084106113f457805182526113d3602083611bd8565b91506113e0602082611bd8565b90506113ed602085611beb565b93506113bc565b51815160001960208690036101000a019081169019919091161790525083949350505050565b6000806114278585611500565b63ffffffff1663613d3078146114425750600090508061106a565b602c8310156114565750600090508061106a565b61146a85611465866004611bd8565b61155e565b91509150935093915050565b6000815b8351811061148a5761148a611d5c565b60006114968583610a85565b60ff1690506114a6816001611bd8565b6114b09083611bd8565b9150806000036114c057506114c6565b5061147a565b6114d08382611beb565b949350505050565b81516000906114e8836002611bd8565b11156114f357600080fd5b50016002015161ffff1690565b8151600090611510836004611bd8565b111561151b57600080fd5b50016004015163ffffffff1690565b60008183111561153b5750816101a3565b50919050565b815161154d83836110c8565b50611558838261112d565b50505050565b60008060288385516115709190611beb565b101561158157506000905080611241565b6000835b611590856028611bd8565b81101561163d5760049190911b9060006115aa8783610a85565b60ff169050603081101580156115c05750603a81105b156115d9576115d0603082611beb565b8317925061162a565b604181101580156115ea5750604781105b156115fa576115d0603782611beb565b6061811015801561160b5750606781105b1561161b576115d0605782611beb565b60008094509450505050611241565b508061163581611d72565b915050611585565b50946001945092505050565b60006020828403121561165b57600080fd5b81356001600160e01b03198116811461115457600080fd5b6001600160a01b038116811461168857600080fd5b50565b60006020828403121561169d57600080fd5b813561115481611673565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156116e1576116e16116a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611710576117106116a8565b604052919050565b600067ffffffffffffffff821115611732576117326116a8565b50601f01601f191660200190565b600082601f83011261175157600080fd5b813561176461175f82611718565b6116e7565b81815284602083860101111561177957600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126117a757600080fd5b8135602067ffffffffffffffff808311156117c4576117c46116a8565b8260051b6117d38382016116e7565b93845285810183019383810190888611156117ed57600080fd5b84880192505b858310156118845782358481111561180b5760008081fd5b88016040818b03601f19018113156118235760008081fd5b61182b6116be565b878301358781111561183d5760008081fd5b61184b8d8a83870101611740565b8252509082013590868211156118615760008081fd5b61186f8c8984860101611740565b818901528452505091840191908401906117f3565b98975050505050505050565b600080600080600060a086880312156118a857600080fd5b853567ffffffffffffffff808211156118c057600080fd5b6118cc89838a01611740565b965060208801359150808211156118e257600080fd5b6118ee89838a01611796565b9550604088013591508082111561190457600080fd5b5061191188828901611740565b935050606086013561192281611673565b9150608086013561193281611673565b809150509295509295909350565b60008060006060848603121561195557600080fd5b833567ffffffffffffffff8082111561196d57600080fd5b61197987838801611740565b9450602086013591508082111561198f57600080fd5b61199b87838801611796565b935060408601359150808211156119b157600080fd5b506119be86828701611740565b9150509250925092565b600080604083850312156119db57600080fd5b823567ffffffffffffffff808211156119f357600080fd5b6119ff86838701611740565b93506020850135915080821115611a1557600080fd5b50611a2285828601611740565b9150509250929050565b600060208284031215611a3e57600080fd5b815161115481611673565b60005b83811015611a64578181015183820152602001611a4c565b50506000910152565b60008151808452611a85816020860160208601611a49565b601f01601f19169290920160200192915050565b6000604080830181845280865180835260608601915060608160051b8701019250602080890160005b83811015611b1257888603605f1901855281518051888852611ae689890182611a6d565b9185015188830389870152919050611afe8183611a6d565b975050509382019390820190600101611ac2565b505086840381880152505050611b288186611a6d565b9695505050505050565b600060208284031215611b4457600080fd5b815167ffffffffffffffff811115611b5b57600080fd5b8201601f81018413611b6c57600080fd5b8051611b7a61175f82611718565b818152856020838501011115611b8f57600080fd5b611ba0826020830160208601611a49565b95945050505050565b600060208284031215611bbb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a3576101a3611bc2565b818103818111156101a3576101a3611bc2565b6020815260006111546020830184611a6d565b600060208284031215611c2357600080fd5b8151801515811461115457600080fd5b634e487b7160e01b600052603260045260246000fd5b61ffff831681526040602082015260006114d06040830184611a6d565b805163ffffffff81168114611c7a57600080fd5b919050565b600080600060608486031215611c9457600080fd5b611c9d84611c66565b9250611cab60208501611c66565b915060408401516bffffffffffffffffffffffff1981168114611ccd57600080fd5b809150509250925092565b63ffffffff818116838216019080821115611cf557611cf5611bc2565b5092915050565b600082611d1957634e487b7160e01b600052601260045260246000fd5b500690565b600382810b9082900b03637fffffff198112637fffffff821317156101a3576101a3611bc2565b80820281158282048414176101a3576101a3611bc2565b634e487b7160e01b600052600160045260246000fd5b600060018201611d8457611d84611bc2565b506001019056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80633f15457f116100665780633f15457f146101135780637adbf973146101265780637dc0d1d0146101395780638bbedf751461014c578063be27b22c1461015f57600080fd5b806301ffc9a7146100985780631ecfc411146100c0578063224199c2146100d557806330349ebe146100e8575b600080fd5b6100ab6100a6366004611649565b610172565b60405190151581526020015b60405180910390f35b6100d36100ce36600461168b565b6101a9565b005b6100d36100e3366004611890565b6102eb565b6002546100fb906001600160a01b031681565b6040516001600160a01b0390911681526020016100b7565b6001546100fb906001600160a01b031681565b6100d361013436600461168b565b610668565b6000546100fb906001600160a01b031681565b6100d361015a366004611940565b6107a1565b6100d361016d3660046119c8565b61082b565b60006001600160e01b031982166301ffc9a760e01b14806101a357506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102179190611a2c565b90506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027d9190611a2c565b9050336001600160a01b0382161461029457600080fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b6000546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061031d9087908790600401611a99565b6000604051808303816000875af115801561033c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103649190810190611b32565b9250600080600061037588876108ca565b91945092509050336001600160a01b038216146103ef5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105e1576001600160a01b0385166104635760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103e6565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301526000608483015290911690635ef2c7f09060a401600060405180830381600087803b1580156104c557600080fd5b505af11580156104d9573d6000803e3d6000fd5b50505050600083836040516020016104fb929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b0090604401600060405180830381600087803b15801561055d57600080fd5b505af1158015610571573d6000803e3d6000fd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c39150604401600060405180830381600087803b1580156105c357600080fd5b505af11580156105d7573d6000803e3d6000fd5b505050505061065e565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301526000608483015290911690635ef2c7f09060a401600060405180830381600087803b15801561064557600080fd5b505af1158015610659573d6000803e3d6000fd5b505050505b5050505050505050565b6001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d69190611a2c565b90506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073c9190611a2c565b9050336001600160a01b0382161461075357600080fd5b600080546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102de565b6000546040516321ae60b160e11b81526001600160a01b039091169063435cc162906107d39085908590600401611a99565b6000604051808303816000875af11580156107f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261081a9190810190611b32565b9050610826838261082b565b505050565b600080600061083a85856108ca565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190611ba9565b505050505050565b60008080806108d98682610a85565b60ff1690506108ea86600183610aa9565b9250600061091d6108fc836001611bd8565b6001848a5161090b9190611beb565b6109159190611beb565b899190610acd565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061094e908490600401611bfe565b602060405180830381865afa15801561096b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098f9190611c11565b6109e75760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103e6565b6109f2816000610b4f565b600054909550610a0c906001600160a01b03168888610e40565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a749190611bfe565b60405180910390a350509250925092565b6000828281518110610a9957610a99611c33565b016020015160f81c905092915050565b8251600090610ab88385611bd8565b1115610ac357600080fd5b5091016020012090565b8251606090610adc8385611bd8565b1115610ae757600080fd5b60008267ffffffffffffffff811115610b0257610b026116a8565b6040519080825280601f01601f191660200182016040528015610b2c576020820181803683370190505b50905060208082019086860101610b44828287611072565b509095945050505050565b600080610b5c8484610a85565b60ff16905080600003610b735750600090506101a3565b6000610b9385610b838487611bd8565b610b8e906001611bd8565b610b4f565b90506000610bad610ba5866001611bd8565b879085610aa9565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095506000916001600160a01b03909116906302571be390602401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d9190611a2c565b90506001600160a01b0381161580610c6d57506001600160a01b03811630145b610ccc5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103e6565b6001600160a01b0381163014610e365782610db8576001546040516302571be360e01b8152600060048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611a2c565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec90604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b5050505050610e36565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190611ba9565b505b5050505092915050565b600080610e60604051806040016040528060608152602001600081525090565b610e7885516005610e719190611bd8565b82906110c8565b50604080518082019091526005815264045f656e7360d81b6020820152610ea090829061112d565b50610eab818661112d565b50805160405163021e646f60e21b815260009182916001600160a01b038a169163087991bc91610ee091601091600401611c49565b606060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190611c7f565b93509150506bffffffffffffffffffffffff198216158015610f4257508551155b15610f56576000809450945050505061106a565b855160208701206bffffffffffffffffffffffff19838116911614610f7a57600080fd5b6000610f86878261115b565b90505b8051516020820151101561105e57610fb0816080015183610faa9190611cd8565b426111bc565b6110225760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103e6565b600080611033898460a001516111d5565b92509050811561104e5796506001955061106a945050505050565b505061105981611248565b610f89565b50600080945094505050505b935093915050565b602081106110aa5781518352611089602084611bd8565b9250611096602083611bd8565b91506110a3602082611beb565b9050611072565b905182516020929092036101000a6000190180199091169116179052565b6040805180820190915260608152600060208201526110e8602083611cfc565b15611110576110f8602083611cfc565b611103906020611beb565b61110d9083611bd8565b91505b506020828101829052604080518085526000815290920101905290565b60408051808201909152606081526000602082015261115483846000015151848551611330565b9392505050565b6111a96040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c081018290526101a381611248565b6000806111c98385611d1e565b60030b12159392505050565b6000805b835183101561123a5760006111ee8585610a85565b60ff1690506111fe600185611bd8565b935060008061120e87878561141a565b92509050811561122657935060019250611241915050565b6112308387611bd8565b95505050506111d9565b5060009050805b9250929050565b60c0810151602082018190528151511161125f5750565b600061127382600001518360200151611476565b82602001516112829190611bd8565b825190915061129190826114d8565b61ffff1660408301526112a5600282611bd8565b82519091506112b490826114d8565b61ffff1660608301526112c8600282611bd8565b82519091506112d79082611500565b63ffffffff1660808301526112ed600482611bd8565b82519091506000906112ff90836114d8565b61ffff169050611310600283611bd8565b60a0840181905291506113238183611bd8565b60c0909301929092525050565b604080518082019091526060815260006020820152825182111561135357600080fd5b60208501516113628386611bd8565b11156113955761139585611385876020015187866113809190611bd8565b61152a565b611390906002611d45565b611541565b6000808651805187602083010193508088870111156113b45787860182525b505050602084015b602084106113f457805182526113d3602083611bd8565b91506113e0602082611bd8565b90506113ed602085611beb565b93506113bc565b51815160001960208690036101000a019081169019919091161790525083949350505050565b6000806114278585611500565b63ffffffff1663613d3078146114425750600090508061106a565b602c8310156114565750600090508061106a565b61146a85611465866004611bd8565b61155e565b91509150935093915050565b6000815b8351811061148a5761148a611d5c565b60006114968583610a85565b60ff1690506114a6816001611bd8565b6114b09083611bd8565b9150806000036114c057506114c6565b5061147a565b6114d08382611beb565b949350505050565b81516000906114e8836002611bd8565b11156114f357600080fd5b50016002015161ffff1690565b8151600090611510836004611bd8565b111561151b57600080fd5b50016004015163ffffffff1690565b60008183111561153b5750816101a3565b50919050565b815161154d83836110c8565b50611558838261112d565b50505050565b60008060288385516115709190611beb565b101561158157506000905080611241565b6000835b611590856028611bd8565b81101561163d5760049190911b9060006115aa8783610a85565b60ff169050603081101580156115c05750603a81105b156115d9576115d0603082611beb565b8317925061162a565b604181101580156115ea5750604781105b156115fa576115d0603782611beb565b6061811015801561160b5750606781105b1561161b576115d0605782611beb565b60008094509450505050611241565b508061163581611d72565b915050611585565b50946001945092505050565b60006020828403121561165b57600080fd5b81356001600160e01b03198116811461115457600080fd5b6001600160a01b038116811461168857600080fd5b50565b60006020828403121561169d57600080fd5b813561115481611673565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156116e1576116e16116a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611710576117106116a8565b604052919050565b600067ffffffffffffffff821115611732576117326116a8565b50601f01601f191660200190565b600082601f83011261175157600080fd5b813561176461175f82611718565b6116e7565b81815284602083860101111561177957600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126117a757600080fd5b8135602067ffffffffffffffff808311156117c4576117c46116a8565b8260051b6117d38382016116e7565b93845285810183019383810190888611156117ed57600080fd5b84880192505b858310156118845782358481111561180b5760008081fd5b88016040818b03601f19018113156118235760008081fd5b61182b6116be565b878301358781111561183d5760008081fd5b61184b8d8a83870101611740565b8252509082013590868211156118615760008081fd5b61186f8c8984860101611740565b818901528452505091840191908401906117f3565b98975050505050505050565b600080600080600060a086880312156118a857600080fd5b853567ffffffffffffffff808211156118c057600080fd5b6118cc89838a01611740565b965060208801359150808211156118e257600080fd5b6118ee89838a01611796565b9550604088013591508082111561190457600080fd5b5061191188828901611740565b935050606086013561192281611673565b9150608086013561193281611673565b809150509295509295909350565b60008060006060848603121561195557600080fd5b833567ffffffffffffffff8082111561196d57600080fd5b61197987838801611740565b9450602086013591508082111561198f57600080fd5b61199b87838801611796565b935060408601359150808211156119b157600080fd5b506119be86828701611740565b9150509250925092565b600080604083850312156119db57600080fd5b823567ffffffffffffffff808211156119f357600080fd5b6119ff86838701611740565b93506020850135915080821115611a1557600080fd5b50611a2285828601611740565b9150509250929050565b600060208284031215611a3e57600080fd5b815161115481611673565b60005b83811015611a64578181015183820152602001611a4c565b50506000910152565b60008151808452611a85816020860160208601611a49565b601f01601f19169290920160200192915050565b6000604080830181845280865180835260608601915060608160051b8701019250602080890160005b83811015611b1257888603605f1901855281518051888852611ae689890182611a6d565b9185015188830389870152919050611afe8183611a6d565b975050509382019390820190600101611ac2565b505086840381880152505050611b288186611a6d565b9695505050505050565b600060208284031215611b4457600080fd5b815167ffffffffffffffff811115611b5b57600080fd5b8201601f81018413611b6c57600080fd5b8051611b7a61175f82611718565b818152856020838501011115611b8f57600080fd5b611ba0826020830160208601611a49565b95945050505050565b600060208284031215611bbb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a3576101a3611bc2565b818103818111156101a3576101a3611bc2565b6020815260006111546020830184611a6d565b600060208284031215611c2357600080fd5b8151801515811461115457600080fd5b634e487b7160e01b600052603260045260246000fd5b61ffff831681526040602082015260006114d06040830184611a6d565b805163ffffffff81168114611c7a57600080fd5b919050565b600080600060608486031215611c9457600080fd5b611c9d84611c66565b9250611cab60208501611c66565b915060408401516bffffffffffffffffffffffff1981168114611ccd57600080fd5b809150509250925092565b63ffffffff818116838216019080821115611cf557611cf5611bc2565b5092915050565b600082611d1957634e487b7160e01b600052601260045260246000fd5b500690565b600382810b9082900b03637fffffff198112637fffffff821317156101a3576101a3611bc2565b80820281158282048414176101a3576101a3611bc2565b634e487b7160e01b600052600160045260246000fd5b600060018201611d8457611d84611bc2565b506001019056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801562000010575f80fd5b5060405162001e1238038062001e12833981016040819052620000339162000115565b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e9060200160405180910390a1600280546001600160a01b0319166001600160a01b0384169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba89060200160405180910390a1600180546001600160a01b0319166001600160a01b039290921691909117905550620001669050565b6001600160a01b038116811462000112575f80fd5b50565b5f805f6060848603121562000128575f80fd5b83516200013581620000fd565b60208501519093506200014881620000fd565b60408501519092506200015b81620000fd565b809150509250925092565b611c9e80620001745f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c80633f15457f116100635780633f15457f1461010f5780637adbf973146101225780637dc0d1d0146101355780638bbedf7514610147578063be27b22c1461015a575f80fd5b806301ffc9a7146100945780631ecfc411146100bc578063224199c2146100d157806330349ebe146100e4575b5f80fd5b6100a76100a23660046115b1565b61016d565b60405190151581526020015b60405180910390f35b6100cf6100ca3660046115ef565b6101a3565b005b6100cf6100df3660046117e0565b6102de565b6002546100f7906001600160a01b031681565b6040516001600160a01b0390911681526020016100b3565b6001546100f7906001600160a01b031681565b6100cf6101303660046115ef565b61063c565b5f546100f7906001600160a01b031681565b6100cf610155366004611889565b61076d565b6100cf61016836600461190b565b6107f1565b5f6001600160e01b031982166301ffc9a760e01b148061019d57506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061196b565b9050336001600160a01b03821614610287575f80fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061030f90879087906004016119d3565b5f604051808303815f875af115801561032a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103519190810190611a6b565b92505f805f610360888761088b565b91945092509050336001600160a01b038216146103da5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105bb576001600160a01b03851661044e5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103d1565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b1580156104ac575f80fd5b505af11580156104be573d5f803e3d5ffd5b505050505f83836040516020016104df929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b00906044015f604051808303815f87803b15801561053e575f80fd5b505af1158015610550573d5f803e3d5ffd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c391506044015f604051808303815f87803b15801561059f575f80fd5b505af11580156105b1573d5f803e3d5ffd5b5050505050610632565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b15801561061b575f80fd5b505af115801561062d573d5f803e3d5ffd5b505050505b5050505050505050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a7919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a919061196b565b9050336001600160a01b03821614610720575f80fd5b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102d1565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061079e90859085906004016119d3565b5f604051808303815f875af11580156107b9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107e09190810190611a6b565b90506107ec83826107f1565b505050565b5f805f6107fe858561088b565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303815f875af115801561085f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108839190611add565b505050505050565b5f8080806108998682610a40565b60ff1690506108aa86600183610a63565b92505f6108dc6108bb836001611b08565b6001848a516108ca9190611b1b565b6108d49190611b1b565b899190610a85565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061090d908490600401611b2e565b602060405180830381865afa158015610928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094c9190611b40565b6109a45760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103d1565b6109ae815f610b05565b5f549095506109c7906001600160a01b03168888610de3565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a2f9190611b2e565b60405180910390a350509250925092565b5f828281518110610a5357610a53611b5f565b016020015160f81c905092915050565b82515f90610a718385611b08565b1115610a7b575f80fd5b5091016020012090565b8251606090610a948385611b08565b1115610a9e575f80fd5b5f8267ffffffffffffffff811115610ab857610ab861160a565b6040519080825280601f01601f191660200182016040528015610ae2576020820181803683370190505b50905060208082019086860101610afa82828761100b565b509095945050505050565b5f80610b118484610a40565b60ff169050805f03610b2657505f905061019d565b5f610b4585610b358487611b08565b610b40906001611b08565b610b05565b90505f610b5e610b56866001611b08565b879085610a63565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095505f916001600160a01b03909116906302571be390602401602060405180830381865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061196b565b90506001600160a01b0381161580610c1b57506001600160a01b03811630145b610c7a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103d1565b6001600160a01b0381163014610dd95782610d5e576001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061196b565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec906044015f604051808303815f87803b158015610d42575f80fd5b505af1158015610d54573d5f803e3d5ffd5b5050505050610dd9565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303815f875af1158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190611add565b505b5050505092915050565b5f80610e016040518060400160405280606081526020015f81525090565b610e1985516005610e129190611b08565b8290611060565b50604080518082019091526005815264045f656e7360d81b6020820152610e419082906110c3565b50610e4c81866110c3565b50805160405163021e646f60e21b81525f9182916001600160a01b038a169163087991bc91610e8091601091600401611b73565b606060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611ba7565b93509150506bffffffffffffffffffffffff198216158015610ee057508551155b15610ef3575f8094509450505050611003565b855160208701206bffffffffffffffffffffffff19838116911614610f16575f80fd5b5f610f2187826110ef565b90505b80515160208201511015610ff857610f4b816080015183610f459190611bfc565b4261114a565b610fbd5760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103d1565b5f80610fcd898460a00151611162565b925090508115610fe857965060019550611003945050505050565b5050610ff3816111d1565b610f24565b505f80945094505050505b935093915050565b602081106110435781518352611022602084611b08565b925061102f602083611b08565b915061103c602082611b1b565b905061100b565b905182516020929092036101000a5f190180199091169116179052565b60408051808201909152606081525f602082015261107f602083611c20565b156110a75761108f602083611c20565b61109a906020611b1b565b6110a49083611b08565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526110e883845f0151518485516112b6565b9392505050565b6111376040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261019d816111d1565b5f806111568385611c3f565b60030b12159392505050565b5f805b83518310156111c4575f6111798585610a40565b60ff169050611189600185611b08565b93505f8061119887878561139c565b9250905081156111b0579350600192506111ca915050565b6111ba8387611b08565b9550505050611165565b505f9050805b9250929050565b60c081015160208201819052815151116111e85750565b5f6111fa825f015183602001516113f5565b82602001516112099190611b08565b82519091506112189082611454565b61ffff16604083015261122c600282611b08565b825190915061123b9082611454565b61ffff16606083015261124f600282611b08565b825190915061125e908261147a565b63ffffffff166080830152611274600482611b08565b82519091505f906112859083611454565b61ffff169050611296600283611b08565b60a0840181905291506112a98183611b08565b60c0909301929092525050565b60408051808201909152606081525f602082015282518211156112d7575f80fd5b60208501516112e68386611b08565b11156113195761131985611309876020015187866113049190611b08565b6114a2565b611314906002611c66565b6114b8565b5f808651805187602083010193508088870111156113375787860182525b505050602084015b602084106113775780518252611356602083611b08565b9150611363602082611b08565b9050611370602085611b1b565b935061133f565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f806113a8858561147a565b63ffffffff1663613d3078146113c257505f905080611003565b602c8310156113d557505f905080611003565b6113e9856113e4866004611b08565b6114d5565b91509150935093915050565b5f815b8351811061140857611408611c7d565b5f6114138583610a40565b60ff169050611423816001611b08565b61142d9083611b08565b9150805f0361143c5750611442565b506113f8565b61144c8382611b1b565b949350505050565b81515f90611463836002611b08565b111561146d575f80fd5b50016002015161ffff1690565b81515f90611489836004611b08565b1115611493575f80fd5b50016004015163ffffffff1690565b5f818311156114b257508161019d565b50919050565b81516114c48383611060565b506114cf83826110c3565b50505050565b5f8060288385516114e69190611b1b565b10156114f657505f9050806111ca565b5f835b611504856028611b08565b8110156115a55760049190911b905f61151d8783610a40565b60ff169050603081101580156115335750603a81105b1561154c57611543603082611b1b565b8317925061159c565b6041811015801561155d5750604781105b1561156d57611543603782611b1b565b6061811015801561157e5750606781105b1561158e57611543605782611b1b565b5f80945094505050506111ca565b506001016114f9565b50946001945092505050565b5f602082840312156115c1575f80fd5b81356001600160e01b0319811681146110e8575f80fd5b6001600160a01b03811681146115ec575f80fd5b50565b5f602082840312156115ff575f80fd5b81356110e8816115d8565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156116415761164161160a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116705761167061160a565b604052919050565b5f67ffffffffffffffff8211156116915761169161160a565b50601f01601f191660200190565b5f82601f8301126116ae575f80fd5b81356116c16116bc82611678565b611647565b8181528460208386010111156116d5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112611700575f80fd5b8135602067ffffffffffffffff8083111561171d5761171d61160a565b8260051b61172c838201611647565b9384528581018301938381019088861115611745575f80fd5b84880192505b858310156117d457823584811115611761575f80fd5b88016040818b03601f1901811315611777575f80fd5b61177f61161e565b878301358781111561178f575f80fd5b61179d8d8a8387010161169f565b8252509082013590868211156117b1575f80fd5b6117bf8c898486010161169f565b8189015284525050918401919084019061174b565b98975050505050505050565b5f805f805f60a086880312156117f4575f80fd5b853567ffffffffffffffff8082111561180b575f80fd5b61181789838a0161169f565b9650602088013591508082111561182c575f80fd5b61183889838a016116f1565b9550604088013591508082111561184d575f80fd5b5061185a8882890161169f565b935050606086013561186b816115d8565b9150608086013561187b816115d8565b809150509295509295909350565b5f805f6060848603121561189b575f80fd5b833567ffffffffffffffff808211156118b2575f80fd5b6118be8783880161169f565b945060208601359150808211156118d3575f80fd5b6118df878388016116f1565b935060408601359150808211156118f4575f80fd5b506119018682870161169f565b9150509250925092565b5f806040838503121561191c575f80fd5b823567ffffffffffffffff80821115611933575f80fd5b61193f8683870161169f565b93506020850135915080821115611954575f80fd5b506119618582860161169f565b9150509250929050565b5f6020828403121561197b575f80fd5b81516110e8816115d8565b5f5b838110156119a0578181015183820152602001611988565b50505f910152565b5f81518084526119bf816020860160208601611986565b601f01601f19169290920160200192915050565b5f60408083016040845280865180835260608601915060608160051b870101925060208089015f5b83811015611a4b57888603605f1901855281518051888852611a1f898901826119a8565b9185015188830389870152919050611a3781836119a8565b9750505093820193908201906001016119fb565b505086840381880152505050611a6181866119a8565b9695505050505050565b5f60208284031215611a7b575f80fd5b815167ffffffffffffffff811115611a91575f80fd5b8201601f81018413611aa1575f80fd5b8051611aaf6116bc82611678565b818152856020838501011115611ac3575f80fd5b611ad4826020830160208601611986565b95945050505050565b5f60208284031215611aed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561019d5761019d611af4565b8181038181111561019d5761019d611af4565b602081525f6110e860208301846119a8565b5f60208284031215611b50575f80fd5b815180151581146110e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b61ffff83168152604060208201525f61144c60408301846119a8565b805163ffffffff81168114611ba2575f80fd5b919050565b5f805f60608486031215611bb9575f80fd5b611bc284611b8f565b9250611bd060208501611b8f565b915060408401516bffffffffffffffffffffffff1981168114611bf1575f80fd5b809150509250925092565b63ffffffff818116838216019080821115611c1957611c19611af4565b5092915050565b5f82611c3a57634e487b7160e01b5f52601260045260245ffd5b500690565b600382810b9082900b03637fffffff198112637fffffff8213171561019d5761019d611af4565b808202811582820484141761019d5761019d611af4565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c80633f15457f116100635780633f15457f1461010f5780637adbf973146101225780637dc0d1d0146101355780638bbedf7514610147578063be27b22c1461015a575f80fd5b806301ffc9a7146100945780631ecfc411146100bc578063224199c2146100d157806330349ebe146100e4575b5f80fd5b6100a76100a23660046115b1565b61016d565b60405190151581526020015b60405180910390f35b6100cf6100ca3660046115ef565b6101a3565b005b6100cf6100df3660046117e0565b6102de565b6002546100f7906001600160a01b031681565b6040516001600160a01b0390911681526020016100b3565b6001546100f7906001600160a01b031681565b6100cf6101303660046115ef565b61063c565b5f546100f7906001600160a01b031681565b6100cf610155366004611889565b61076d565b6100cf61016836600461190b565b6107f1565b5f6001600160e01b031982166301ffc9a760e01b148061019d57506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061196b565b9050336001600160a01b03821614610287575f80fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061030f90879087906004016119d3565b5f604051808303815f875af115801561032a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103519190810190611a6b565b92505f805f610360888761088b565b91945092509050336001600160a01b038216146103da5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105bb576001600160a01b03851661044e5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103d1565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b1580156104ac575f80fd5b505af11580156104be573d5f803e3d5ffd5b505050505f83836040516020016104df929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b00906044015f604051808303815f87803b15801561053e575f80fd5b505af1158015610550573d5f803e3d5ffd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c391506044015f604051808303815f87803b15801561059f575f80fd5b505af11580156105b1573d5f803e3d5ffd5b5050505050610632565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b15801561061b575f80fd5b505af115801561062d573d5f803e3d5ffd5b505050505b5050505050505050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a7919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a919061196b565b9050336001600160a01b03821614610720575f80fd5b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102d1565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061079e90859085906004016119d3565b5f604051808303815f875af11580156107b9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107e09190810190611a6b565b90506107ec83826107f1565b505050565b5f805f6107fe858561088b565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303815f875af115801561085f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108839190611add565b505050505050565b5f8080806108998682610a40565b60ff1690506108aa86600183610a63565b92505f6108dc6108bb836001611b08565b6001848a516108ca9190611b1b565b6108d49190611b1b565b899190610a85565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061090d908490600401611b2e565b602060405180830381865afa158015610928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094c9190611b40565b6109a45760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103d1565b6109ae815f610b05565b5f549095506109c7906001600160a01b03168888610de3565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a2f9190611b2e565b60405180910390a350509250925092565b5f828281518110610a5357610a53611b5f565b016020015160f81c905092915050565b82515f90610a718385611b08565b1115610a7b575f80fd5b5091016020012090565b8251606090610a948385611b08565b1115610a9e575f80fd5b5f8267ffffffffffffffff811115610ab857610ab861160a565b6040519080825280601f01601f191660200182016040528015610ae2576020820181803683370190505b50905060208082019086860101610afa82828761100b565b509095945050505050565b5f80610b118484610a40565b60ff169050805f03610b2657505f905061019d565b5f610b4585610b358487611b08565b610b40906001611b08565b610b05565b90505f610b5e610b56866001611b08565b879085610a63565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095505f916001600160a01b03909116906302571be390602401602060405180830381865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061196b565b90506001600160a01b0381161580610c1b57506001600160a01b03811630145b610c7a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103d1565b6001600160a01b0381163014610dd95782610d5e576001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061196b565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec906044015f604051808303815f87803b158015610d42575f80fd5b505af1158015610d54573d5f803e3d5ffd5b5050505050610dd9565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303815f875af1158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190611add565b505b5050505092915050565b5f80610e016040518060400160405280606081526020015f81525090565b610e1985516005610e129190611b08565b8290611060565b50604080518082019091526005815264045f656e7360d81b6020820152610e419082906110c3565b50610e4c81866110c3565b50805160405163021e646f60e21b81525f9182916001600160a01b038a169163087991bc91610e8091601091600401611b73565b606060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611ba7565b93509150506bffffffffffffffffffffffff198216158015610ee057508551155b15610ef3575f8094509450505050611003565b855160208701206bffffffffffffffffffffffff19838116911614610f16575f80fd5b5f610f2187826110ef565b90505b80515160208201511015610ff857610f4b816080015183610f459190611bfc565b4261114a565b610fbd5760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103d1565b5f80610fcd898460a00151611162565b925090508115610fe857965060019550611003945050505050565b5050610ff3816111d1565b610f24565b505f80945094505050505b935093915050565b602081106110435781518352611022602084611b08565b925061102f602083611b08565b915061103c602082611b1b565b905061100b565b905182516020929092036101000a5f190180199091169116179052565b60408051808201909152606081525f602082015261107f602083611c20565b156110a75761108f602083611c20565b61109a906020611b1b565b6110a49083611b08565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526110e883845f0151518485516112b6565b9392505050565b6111376040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261019d816111d1565b5f806111568385611c3f565b60030b12159392505050565b5f805b83518310156111c4575f6111798585610a40565b60ff169050611189600185611b08565b93505f8061119887878561139c565b9250905081156111b0579350600192506111ca915050565b6111ba8387611b08565b9550505050611165565b505f9050805b9250929050565b60c081015160208201819052815151116111e85750565b5f6111fa825f015183602001516113f5565b82602001516112099190611b08565b82519091506112189082611454565b61ffff16604083015261122c600282611b08565b825190915061123b9082611454565b61ffff16606083015261124f600282611b08565b825190915061125e908261147a565b63ffffffff166080830152611274600482611b08565b82519091505f906112859083611454565b61ffff169050611296600283611b08565b60a0840181905291506112a98183611b08565b60c0909301929092525050565b60408051808201909152606081525f602082015282518211156112d7575f80fd5b60208501516112e68386611b08565b11156113195761131985611309876020015187866113049190611b08565b6114a2565b611314906002611c66565b6114b8565b5f808651805187602083010193508088870111156113375787860182525b505050602084015b602084106113775780518252611356602083611b08565b9150611363602082611b08565b9050611370602085611b1b565b935061133f565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f806113a8858561147a565b63ffffffff1663613d3078146113c257505f905080611003565b602c8310156113d557505f905080611003565b6113e9856113e4866004611b08565b6114d5565b91509150935093915050565b5f815b8351811061140857611408611c7d565b5f6114138583610a40565b60ff169050611423816001611b08565b61142d9083611b08565b9150805f0361143c5750611442565b506113f8565b61144c8382611b1b565b949350505050565b81515f90611463836002611b08565b111561146d575f80fd5b50016002015161ffff1690565b81515f90611489836004611b08565b1115611493575f80fd5b50016004015163ffffffff1690565b5f818311156114b257508161019d565b50919050565b81516114c48383611060565b506114cf83826110c3565b50505050565b5f8060288385516114e69190611b1b565b10156114f657505f9050806111ca565b5f835b611504856028611b08565b8110156115a55760049190911b905f61151d8783610a40565b60ff169050603081101580156115335750603a81105b1561154c57611543603082611b1b565b8317925061159c565b6041811015801561155d5750604781105b1561156d57611543603782611b1b565b6061811015801561157e5750606781105b1561158e57611543605782611b1b565b5f80945094505050506111ca565b506001016114f9565b50946001945092505050565b5f602082840312156115c1575f80fd5b81356001600160e01b0319811681146110e8575f80fd5b6001600160a01b03811681146115ec575f80fd5b50565b5f602082840312156115ff575f80fd5b81356110e8816115d8565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156116415761164161160a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116705761167061160a565b604052919050565b5f67ffffffffffffffff8211156116915761169161160a565b50601f01601f191660200190565b5f82601f8301126116ae575f80fd5b81356116c16116bc82611678565b611647565b8181528460208386010111156116d5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112611700575f80fd5b8135602067ffffffffffffffff8083111561171d5761171d61160a565b8260051b61172c838201611647565b9384528581018301938381019088861115611745575f80fd5b84880192505b858310156117d457823584811115611761575f80fd5b88016040818b03601f1901811315611777575f80fd5b61177f61161e565b878301358781111561178f575f80fd5b61179d8d8a8387010161169f565b8252509082013590868211156117b1575f80fd5b6117bf8c898486010161169f565b8189015284525050918401919084019061174b565b98975050505050505050565b5f805f805f60a086880312156117f4575f80fd5b853567ffffffffffffffff8082111561180b575f80fd5b61181789838a0161169f565b9650602088013591508082111561182c575f80fd5b61183889838a016116f1565b9550604088013591508082111561184d575f80fd5b5061185a8882890161169f565b935050606086013561186b816115d8565b9150608086013561187b816115d8565b809150509295509295909350565b5f805f6060848603121561189b575f80fd5b833567ffffffffffffffff808211156118b2575f80fd5b6118be8783880161169f565b945060208601359150808211156118d3575f80fd5b6118df878388016116f1565b935060408601359150808211156118f4575f80fd5b506119018682870161169f565b9150509250925092565b5f806040838503121561191c575f80fd5b823567ffffffffffffffff80821115611933575f80fd5b61193f8683870161169f565b93506020850135915080821115611954575f80fd5b506119618582860161169f565b9150509250929050565b5f6020828403121561197b575f80fd5b81516110e8816115d8565b5f5b838110156119a0578181015183820152602001611988565b50505f910152565b5f81518084526119bf816020860160208601611986565b601f01601f19169290920160200192915050565b5f60408083016040845280865180835260608601915060608160051b870101925060208089015f5b83811015611a4b57888603605f1901855281518051888852611a1f898901826119a8565b9185015188830389870152919050611a3781836119a8565b9750505093820193908201906001016119fb565b505086840381880152505050611a6181866119a8565b9695505050505050565b5f60208284031215611a7b575f80fd5b815167ffffffffffffffff811115611a91575f80fd5b8201601f81018413611aa1575f80fd5b8051611aaf6116bc82611678565b818152856020838501011115611ac3575f80fd5b611ad4826020830160208601611986565b95945050505050565b5f60208284031215611aed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561019d5761019d611af4565b8181038181111561019d5761019d611af4565b602081525f6110e860208301846119a8565b5f60208284031215611b50575f80fd5b815180151581146110e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b61ffff83168152604060208201525f61144c60408301846119a8565b805163ffffffff81168114611ba2575f80fd5b919050565b5f805f60608486031215611bb9575f80fd5b611bc284611b8f565b9250611bd060208501611b8f565b915060408401516bffffffffffffffffffffffff1981168114611bf1575f80fd5b809150509250925092565b63ffffffff818116838216019080821115611c1957611c19611af4565b5092915050565b5f82611c3a57634e487b7160e01b5f52601260045260245ffd5b500690565b600382810b9082900b03637fffffff198112637fffffff8213171561019d5761019d611af4565b808202811582820484141761019d5761019d611af4565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/DNSSECImpl.json b/artifacts/DNSSECImpl.json index 60078833..b6aa9c05 100644 --- a/artifacts/DNSSECImpl.json +++ b/artifacts/DNSSECImpl.json @@ -463,8 +463,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200320d3803806200320d83398101604081905262000034916200018f565b600180546001600160a01b031916331790556000620000548282620002f3565b5060408051606081018252600080825263e090bba0602083015282519192830191620000819190620003bf565b60408051918290039091206001600160601b031916909152602b60009081527fc92a43746f20f69898978a3075767b860ba247ac0639d1831bf8c942c5db2389602090815283517f95c6356c1b7a542b884d2484ef785c9c7224e77e1016c20007bddc15c23b452f8054928601519585015160601c6801000000000000000002600160401b600160e01b031963ffffffff978816640100000000026001600160401b03199095169790931696909617929092171693909317909255517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b916200016a916200043d565b60405180910390a150620004e5565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620001a357600080fd5b82516001600160401b0380821115620001bb57600080fd5b818501915085601f830112620001d057600080fd5b815181811115620001e557620001e562000179565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000179565b8160405282815288868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280965050505050505092915050565b600181811c908216806200027957607f821691505b6020821081036200029a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ee57600081815260208120601f850160051c81016020861015620002c95750805b601f850160051c820191505b81811015620002ea57828155600101620002d5565b5050505b505050565b81516001600160401b038111156200030f576200030f62000179565b620003278162000320845462000264565b84620002a0565b602080601f8311600181146200035f5760008415620003465750858301515b600019600386901b1c1916600185901b178555620002ea565b600085815260208120601f198616915b8281101562000390578886015182559484019460019091019084016200036f565b5085821015620003af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354620003cf8162000264565b60018281168015620003ea5760018114620004005762000431565b60ff198416875282151583028701945062000431565b8760005260208060002060005b85811015620004285781548a8201529084019082016200040d565b50505082870194505b50929695505050505050565b604081526000600180604084015260006060840152602060808185015260008554620004698162000264565b80608088015260a0858316600081146200048c5760018114620004a757620004d7565b60ff1984168983015282151560051b890182019450620004d7565b896000528560002060005b84811015620004cf5781548b8201850152908801908701620004b2565b8a0183019550505b509298975050505050505050565b612d1880620004f56000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806373cc48a61161008c57806398d35f201161006657806398d35f201461021c578063bd7ed31a14610224578063c327deef1461024d578063d7b82ebe1461027657600080fd5b806373cc48a6146101b55780638438dc04146101f65780638da5cb5b1461020957600080fd5b806313af4035116100c857806313af40351461015c57806328e7677d1461016f5780632c095cbb14610182578063435cc1621461019557600080fd5b8063020ed8d3146100ef578063087991bc146101045780630b1a249514610149575b600080fd5b6101026100fd3660046123fa565b610289565b005b61011761011236600461248c565b61030b565b6040805163ffffffff94851681529390921660208401526001600160601b031916908201526060015b60405180910390f35b610102610157366004612620565b61037b565b61010261016a3660046126de565b6104ef565b61010261017d3660046123fa565b610528565b6101026101903660046126fb565b6105a2565b6101a86101a3366004612794565b610673565b60405161014091906128b8565b6101de6101c33660046128cb565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610140565b6101026102043660046123fa565b6106fb565b6001546101de906001600160a01b031681565b6101a8610775565b6101de6102323660046128cb565b6005602052600090815260409020546001600160a01b031681565b6101de61025b3660046128cb565b6003602052600090815260409020546001600160a01b031681565b6101a86102843660046128e6565b610803565b6001546001600160a01b031633146102a057600080fd5b60ff821660008181526003602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b60008060008060026000878760405161032592919061294a565b60408051918290039091208252602080830193909352908101600090812061ffff8b16825290925290205463ffffffff80821695506401000000008204169350600160401b900460601b91505093509350939050565b8351602080860191909120600090815260028252604080822061ffff891683529092529081205463ffffffff16906103b38584610818565b90506103c08187846108be565b6103c861232b565b845151156103e7576103da8585610818565b90506103e78188856108be565b60006103f283610904565b602081015190915060fe161561040757600080fd5b610412816027610963565b1580156104375750610425816002610963565b15806104375750610437816006610963565b61044057600080fd5b610451898985610120015184610975565b1561048d5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080546001600160e01b03191690556104e4565b6104ac88846101200151838561012001516104a787610904565b6109a5565b156100ea5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080546001600160e01b03191690555b505050505050505050565b6001546001600160a01b0316331461050657600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461053f57600080fd5b60ff821660008181526004602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c791016102ff565b6105aa61232b565b6105b48383610818565b805190915061ffff16602f146105c957600080fd5b60a08101518451602080870191909120600090815260028252604080822061ffff8a1683529092522054610603919063ffffffff16610ac0565b61060c57600080fd5b600061061782610ad9565b9050805151602082015110156100ea57610638818361012001518789610af1565b50508251602080850191909120600090815260028252604080822061ffff881683529092522080546001600160e01b03191690555b50505050565b6060600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505b85518110156106f0576106dc8682815181106106ce576106ce61295a565b602002602001015183610c9f565b9150806106e881612986565b9150506106b0565b5090505b9392505050565b6001546001600160a01b0316331461071257600080fd5b60ff821660008181526005602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d91016102ff565b600080546107829061299f565b80601f01602080910402602001604051908101604052809291908181526020018280546107ae9061299f565b80156107fb5780601f106107d0576101008083540402835291602001916107fb565b820191906000526020600020905b8154815290600101906020018083116107de57829003601f168201915b505050505081565b606061080f8383610c9f565b90505b92915050565b61082061232b565b825161082b90610e1e565b905061083b8160e0015183610f18565b61084457600080fd5b6000610854828360000151610f80565b604083015190915060ff1661086a82600061102e565b1461087457600080fd5b6101208201819052608082015161088b9042610ac0565b61089457600080fd5b6108a2428360a00151610ac0565b6108ab57600080fd5b6108b78183868661108b565b5092915050565b6108cc8360a0015182610ac0565b6108d557600080fd5b825161ffff166032146108e757600080fd5b6108f683610120015183611170565b6108ff57600080fd5b505050565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061093e83610ad9565b60a081015160c08201519192506106f49161095a9082906129d3565b835191906111de565b600061080f8360a00151600084611325565b600061098282848661143a565b15610999576109918286610963565b15905061099d565b5060005b949350505050565b602081015160009060fe16156109ba57600080fd5b60006109c586611461565b905060006109d285611461565b90506000806109e18a8261147d565b6109ec9060016129e6565b60ff1690505b8951811015610aae5783610a1e89610a1984858f51610a1191906129d3565b8f91906114a1565b611523565b03610a82576000610a3a87610a1985868f51610a1191906129d3565b90508660800151841015610a66578381118015610a5a5750866080015181105b95505050505050610ab7565b83811180610a5a57508660800151811095505050505050610ab7565b905080610a8f8a8261147d565b610a9a9060016129e6565b610aa79060ff16826129ff565b90506109f2565b50600093505050505b95945050505050565b600080610acd8385612a12565b60030b12159392505050565b610ae1612381565b61081282610100015160006115af565b60a08401518451600090610b0590836115ca565b905060008660a001518760c00151610b1d91906129d3565b9050818111610b2b57600080fd5b6000610b378688611624565b905080600003610b6657610b57610b4e84866129ff565b89519087611325565b15610b6157600080fd5b610bad565b8751600090610b769086866114a1565b905060008213610b8557600080fd5b6000610b918983611624565b12156104e4576000610ba38883611624565b126104e457600080fd5b5050505050505050565b60c08101516020820181905281515111610bce5750565b6000610be2826000015183602001516115ca565b8260200151610bf191906129ff565b8251909150610c00908261177d565b61ffff166040830152610c146002826129ff565b8251909150610c23908261177d565b61ffff166060830152610c376002826129ff565b8251909150610c4690826117a5565b63ffffffff166080830152610c5c6004826129ff565b8251909150600090610c6e908361177d565b61ffff169050610c7f6002836129ff565b60a084018190529150610c9281836129ff565b60c0909301929092525050565b6060610ca961232b565b610cb38484610818565b61012081015180516020918201206000908152600282526040808220845161ffff16835290925220805491925090600160401b900460601b6001600160601b03191615610d1a5760a08201518154610d11919063ffffffff16610ac0565b610d1a57600080fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301206001600160601b0319168688019081526101208a0180518051908501206000908152600285528981208c5161ffff16825290945292889020965187549451915190961c600160401b0268010000000000000000600160e01b03199186166401000000000267ffffffffffffffff19909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b92610e099291612a39565b60405180910390a15061010001519392505050565b610e2661232b565b610e3182600061177d565b61ffff168152610e4282600261147d565b60ff166020820152610e5582600361147d565b60ff166040820152610e688260046117a5565b63ffffffff9081166060830152610e849083906008906117a516565b63ffffffff9081166080830152610ea0908390600c906117a516565b63ffffffff90811660a0830152610ebc90839060109061177d16565b61ffff1660c0820152610ed08260126117cf565b60e0820181905251610f0d90610ee79060126129ff565b8260e001515160128551610efb91906129d3565b610f0591906129d3565b8491906114a1565b610100820152919050565b600080610f2f610f2884836115ca565b849061177d565b8351602080860191909120865187830120600090815260028352604080822061ffff90951682529390925291902054600160401b900460601b6001600160601b031990811691161491505092915050565b60606000610f8d84610ad9565b90505b805151602082015110156108b757606081015161ffff16600114610fb357600080fd5b8151600003610fcc57610fc5816117ea565b9150611008565b60208101518151610fdc916115ca565b825114610fe857600080fd5b805160208201518351610fff92859260009261180b565b61100857600080fd5b8261ffff16816040015161ffff161461102057600080fd5b61102981610bb7565b610f90565b6000805b8351831061104257611042612a5e565b600061104e858561147d565b60ff16905061105e8160016129ff565b61106890856129ff565b935080600003611078575061080f565b6110836001836129ff565b915050611032565b83518360e0015151111561109e57600080fd5b6110c36000858560e001515187516110b691906129d3565b60e087015192919061182e565b6110cc57600080fd5b60006110d882826115af565b9050602b61ffff16816040015161ffff1603611107576110f9848483611863565b61110257600080fd5b611169565b603061ffff16816040015161ffff1603611126576110f98484836118fc565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d985b1a59081c1c9bdbd988199bdd5b9960621b604482015260640160405180910390fd5b5050505050565b60008061117d848261147d565b6111889060016129e6565b60ff16905060005b8351811015610999576111a58482878561182e565b156111b557600192505050610812565b6111bf848261147d565b6111ca9060016129e6565b6111d79060ff16826129ff565b9050611190565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061121983856129ff565b90506112306112296000866129ff565b869061147d565b60ff1682526112436112296001866129ff565b60ff1660208301526112606112596002866129ff565b869061177d565b61ffff16604083015260006112806112796004876129ff565b879061147d565b905061128d6005866129ff565b945061129d868660ff84166114a1565b60608401526112af60ff8216866129ff565b945060006112bd878761147d565b905060208160ff1611156112d057600080fd5b6112db6001876129ff565b95506112eb878760ff84166119a4565b60808501526112fd60ff8216876129ff565b95506113158661130d81866129d3565b8991906114a1565b60a0850152509195945050505050565b600060ff600883811c821691839161133e918616612a8a565b90506000611350600780871690612aab565b600160ff919091161b9050855b875181101561142c576000611372898361147d565b9050600061138b6113848460016129ff565b8b9061147d565b90508160ff168660ff1610156113aa57600096505050505050506106f4565b8160ff168660ff160361140b578460ff168160ff16116113d357600096505050505050506106f4565b836113f66113e460ff8816866129ff565b6113ef9060026129ff565b8c9061147d565b1660ff166000141596505050505050506106f4565b6114168160026129e6565b6114239060ff16846129ff565b9250505061135d565b506000979650505050505050565b6000806114478584611523565b9050600061145485611461565b9190911495945050505050565b60006108126001611472848461147d565b84919060ff166119e5565b60008282815181106114915761149161295a565b016020015160f81c905092915050565b82516060906114b083856129ff565b11156114bb57600080fd5b60008267ffffffffffffffff8111156114d6576114d66124df565b6040519080825280601f01601f191660200182016040528015611500576020820181803683370190505b50905060208082019086860101611518828287611bfd565b509095945050505050565b815160ff1660009081526005602052604080822054606085015182860151925163347ced5960e11b81526001600160a01b03909216926368f9dab29261156e92918791600401612ac4565b602060405180830381865afa15801561158b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f9190612afe565b6115b7612381565b82815260c0810182905261081281610bb7565b6000815b835181106115de576115de612a5e565b60006115ea858361147d565b60ff1690506115fa8160016129ff565b61160490836129ff565b915080600003611614575061161a565b506115ce565b61099d83826129d3565b60006116308383611c53565b1561163d57506000610812565b600080600080600061165088600061102e565b9050600061165f88600061102e565b90505b8082111561168b578593506116778987611c71565b95508161168381612b17565b925050611662565b818111156116b4578492506116a08886611c71565b9450806116ac81612b17565b91505061168b565b6000821180156116cd57506116cb89878a8861182e565b155b15611702578593506116df8987611c71565b95508492506116ee8886611c71565b94506116fb6001836129d3565b91506116b4565b8560000361171a576000199650505050505050610812565b846000036117315760019650505050505050610812565b61177061173f8560016129ff565b6117498b8761147d565b60ff168a6117588760016129ff565b6117628d8961147d565b8e949392919060ff16611c95565b9998505050505050505050565b815160009061178d8360026129ff565b111561179857600080fd5b50016002015161ffff1690565b81516000906117b58360046129ff565b11156117c057600080fd5b50016004015163ffffffff1690565b606060006117dd84846115ca565b905061099d8484836114a1565b602081015181516060916108129161180290826115ca565b845191906114a1565b6000611818848484611d8a565b611823878785611d8a565b149695505050505050565b6000611847838384865161184291906129d3565b611d8a565b611859868687895161184291906129d3565b1495945050505050565b60008061186f85610ad9565b90505b8051516020820151101561099957604081015161ffff1660301461189557600080fd5b60006118a082611dae565b905060006118bb6000835184611dca9092919063ffffffff16565b90506118c981838989611e68565b156118ec576118e26118da846117ea565b868385611f6d565b93505050506106f4565b50506118f781610bb7565b611872565b60006119158460e0015161190f846117ea565b90611c53565b61191e57600080fd5b8151516020830151101561199a5761193d8460e0015161190f846117ea565b61194657600080fd5b600061195183611dae565b9050600061196c6000835184611dca9092919063ffffffff16565b905061197a81838888611e68565b1561198a576001925050506106f4565b505061199582610bb7565b61191e565b5060009392505050565b600060208211156119b457600080fd5b83516119c083856129ff565b11156119cb57600080fd5b506020919092018101519190036101000a60001901191690565b600060348211156119f557600080fd5b600080805b84811015611ae157600087611a0f83896129ff565b81518110611a1f57611a1f61295a565b01602001516001600160f81b0319169050600360fc1b8110801590611a525750603d60f91b6001600160f81b0319821611155b611a5b57600080fd5b604051806080016040528060478152602001612cc560479139611a83603060f884901c6129d3565b81518110611a9357611a9361295a565b0160209081015160f81c9350831115611aab57600080fd5b611ab66001876129d3565b8203611ac25750611ae1565b5060059290921b60ff8216179180611ad981612986565b9150506119fa565b506000611aef856005612b2e565b9050611afc600886612b45565b600003611b14578160ff16600584901b179250611be3565b611b1f600886612b45565b600203611b4d5760028260ff16901c60ff16600384901b179250600281611b4691906129d3565b9050611be3565b611b58600886612b45565b600403611b7f5760048260ff16901c60ff16600184901b179250600481611b4691906129d3565b611b8a600886612b45565b600503611bb15760018260ff16901c60ff16600484901b179250600181611b4691906129d3565b611bbc600886612b45565b6007036100ea5760038260ff16901c60ff16600284901b179250600381611b4691906129d3565b611bef816101006129d3565b9290921b9695505050505050565b60208110611c355781518352611c146020846129ff565b9250611c216020836129ff565b9150611c2e6020826129d3565b9050611bfd565b905182516020929092036101000a6000190180199091169116179052565b60008151835114801561080f575061080f836000846000875161180b565b6000611c7d838361147d565b60ff16611c8b8360016129ff565b61080f91906129ff565b60008480831015611ca35750815b60208789018101908587010160005b83811015611d6f5782518251808214611d3f5760006020871115611cd95750600019611d15565b600184611ce78960206129d3565b611cf191906129ff565b611cfc906008612b2e565b611d07906002612c3d565b611d1191906129d3565b1990505b6000611d25838316858416612c49565b90508015611d3c579750611d809650505050505050565b50505b611d4a6020866129ff565b9450611d576020856129ff565b93505050602081611d6891906129ff565b9050611cb2565b50611d7a8589612c49565b93505050505b9695505050505050565b8251600090611d9983856129ff565b1115611da457600080fd5b5091016020012090565b60a081015160c0820151606091610812916118029082906129d3565b6040805160808101825260008082526020820181905291810191909152606080820152611e02611dfb6000856129ff565b859061177d565b61ffff168152611e1d611e166002856129ff565b859061147d565b60ff166020820152611e33611e166003856129ff565b60ff166040820152611e5c611e496004856129ff565b611e546004856129d3565b8691906114a1565b60608201529392505050565b6000846020015160ff16600314611e815750600061099d565b826020015160ff16856040015160ff1614611e9e5750600061099d565b6000611ea98561206e565b90508360c0015161ffff168161ffff1614611ec857600091505061099d565b855161010016600003611edf57600091505061099d565b60408087015160ff166000908152600360209081529082902054855191860151925163de8f50a160e01b81526001600160a01b039091169263de8f50a192611f2c928a9290600401612c69565b602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612ca2565b600080611f798361206e565b90505b845151602086015110156120625760a085015160c0860151600091611faf91611fa69082906129d3565b88519190611dca565b90508161ffff16816000015161ffff1614611fca5750612054565b846040015160ff16816020015160ff1614611fe55750612054565b6040805180820190915260608152600060208201526120128551895161200b91906129ff565b82906120db565b5061201d8189612140565b506120288186612140565b50612040826040015182600001518460600151612167565b15612051576001935050505061099d565b50505b61205d85610bb7565b611f7c565b50600095945050505050565b60008060005b83518110156120cc57600181161561209857612090848261147d565b60ff166120aa565b60086120a4858361147d565b60ff16901b5b6120b89061ffff16836129ff565b9150806120c481612986565b915050612074565b506106f4601082901c826129ff565b6040805180820190915260608152600060208201526120fb602083612b45565b156121235761210b602083612b45565b6121169060206129d3565b61212090836129ff565b91505b506020828101829052604080518085526000815290920101905290565b60408051808201909152606081526000602082015261080f83846000015151848551612213565b60ff83166000908152600460205260408120546001600160a01b031661218f575060006106f4565b60ff8416600090815260046020819052604091829020549151637bf41d7760e11b81526001600160a01b039092169163f7e83aee916121d2918791879101612a39565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190612ca2565b604080518082019091526060815260006020820152825182111561223657600080fd5b602085015161224583866129ff565b111561227857612278856122688760200151878661226391906129ff565b6122fd565b612273906002612b2e565b612314565b6000808651805187602083010193508088870111156122975787860182525b505050602084015b602084106122d757805182526122b66020836129ff565b91506122c36020826129ff565b90506122d06020856129d3565b935061229f565b51815160001960208690036101000a019081169019919091161790525083949350505050565b60008183111561230e575081610812565b50919050565b815161232083836120db565b5061066d8382612140565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b803560ff811681146123dd57600080fd5b919050565b6001600160a01b03811681146123f757600080fd5b50565b6000806040838503121561240d57600080fd5b612416836123cc565b91506020830135612426816123e2565b809150509250929050565b803561ffff811681146123dd57600080fd5b60008083601f84011261245557600080fd5b50813567ffffffffffffffff81111561246d57600080fd5b60208301915083602082850101111561248557600080fd5b9250929050565b6000806000604084860312156124a157600080fd5b6124aa84612431565b9250602084013567ffffffffffffffff8111156124c657600080fd5b6124d286828701612443565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561251e5761251e6124df565b604052919050565b600082601f83011261253757600080fd5b813567ffffffffffffffff811115612551576125516124df565b612564601f8201601f19166020016124f5565b81815284602083860101111561257957600080fd5b816020850160208301376000918101602001919091529392505050565b6000604082840312156125a857600080fd5b6040516040810167ffffffffffffffff82821081831117156125cc576125cc6124df565b8160405282935084359150808211156125e457600080fd5b6125f086838701612526565b8352602085013591508082111561260657600080fd5b5061261385828601612526565b6020830152505092915050565b600080600080600060a0868803121561263857600080fd5b61264186612431565b9450602086013567ffffffffffffffff8082111561265e57600080fd5b61266a89838a01612526565b9550604088013591508082111561268057600080fd5b61268c89838a01612596565b945060608801359150808211156126a257600080fd5b6126ae89838a01612596565b935060808801359150808211156126c457600080fd5b506126d188828901612526565b9150509295509295909350565b6000602082840312156126f057600080fd5b813561080f816123e2565b6000806000806080858703121561271157600080fd5b61271a85612431565b9350602085013567ffffffffffffffff8082111561273757600080fd5b61274388838901612526565b9450604087013591508082111561275957600080fd5b61276588838901612596565b9350606087013591508082111561277b57600080fd5b5061278887828801612526565b91505092959194509250565b6000806000604084860312156127a957600080fd5b833567ffffffffffffffff808211156127c157600080fd5b818601915086601f8301126127d557600080fd5b81356020828211156127e9576127e96124df565b8160051b6127f88282016124f5565b928352848101820192828101908b85111561281257600080fd5b83870192505b8483101561284e578235868111156128305760008081fd5b61283e8d86838b0101612596565b8352509183019190830190612818565b985050508701359250508082111561286557600080fd5b506124d286828701612443565b6000815180845260005b818110156128985760208185018101518683018201520161287c565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061080f6020830184612872565b6000602082840312156128dd57600080fd5b61080f826123cc565b600080604083850312156128f957600080fd5b823567ffffffffffffffff8082111561291157600080fd5b61291d86838701612596565b9350602085013591508082111561293357600080fd5b5061294085828601612526565b9150509250929050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161299857612998612970565b5060010190565b600181811c908216806129b357607f821691505b60208210810361230e57634e487b7160e01b600052602260045260246000fd5b8181038181111561081257610812612970565b60ff818116838216019081111561081257610812612970565b8082018082111561081257610812612970565b600382810b9082900b03637fffffff198112637fffffff8213171561081257610812612970565b604081526000612a4c6040830185612872565b8281036020840152610ab78185612872565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680612a9f57612a9f612a74565b92169190910492915050565b60ff828116828216039081111561081257610812612970565b606081526000612ad76060830186612872565b8281036020840152612ae98186612872565b91505061ffff83166040830152949350505050565b600060208284031215612b1057600080fd5b5051919050565b600081612b2657612b26612970565b506000190190565b808202811582820484141761081257610812612970565b600082612b5457612b54612a74565b500690565b600181815b80851115612b94578160001904821115612b7a57612b7a612970565b80851615612b8757918102915b93841c9390800290612b5e565b509250929050565b600082612bab57506001610812565b81612bb857506000610812565b8160018114612bce5760028114612bd857612bf4565b6001915050610812565b60ff841115612be957612be9612970565b50506001821b610812565b5060208310610133831016604e8410600b8410161715612c17575081810a610812565b612c218383612b59565b8060001904821115612c3557612c35612970565b029392505050565b600061080f8383612b9c565b81810360008312801583831316838312821617156108b7576108b7612970565b606081526000612c7c6060830186612872565b8281036020840152612c8e8186612872565b90508281036040840152611d808185612872565b600060208284031215612cb457600080fd5b8151801515811461080f57600080fdfe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806373cc48a61161008c57806398d35f201161006657806398d35f201461021c578063bd7ed31a14610224578063c327deef1461024d578063d7b82ebe1461027657600080fd5b806373cc48a6146101b55780638438dc04146101f65780638da5cb5b1461020957600080fd5b806313af4035116100c857806313af40351461015c57806328e7677d1461016f5780632c095cbb14610182578063435cc1621461019557600080fd5b8063020ed8d3146100ef578063087991bc146101045780630b1a249514610149575b600080fd5b6101026100fd3660046123fa565b610289565b005b61011761011236600461248c565b61030b565b6040805163ffffffff94851681529390921660208401526001600160601b031916908201526060015b60405180910390f35b610102610157366004612620565b61037b565b61010261016a3660046126de565b6104ef565b61010261017d3660046123fa565b610528565b6101026101903660046126fb565b6105a2565b6101a86101a3366004612794565b610673565b60405161014091906128b8565b6101de6101c33660046128cb565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610140565b6101026102043660046123fa565b6106fb565b6001546101de906001600160a01b031681565b6101a8610775565b6101de6102323660046128cb565b6005602052600090815260409020546001600160a01b031681565b6101de61025b3660046128cb565b6003602052600090815260409020546001600160a01b031681565b6101a86102843660046128e6565b610803565b6001546001600160a01b031633146102a057600080fd5b60ff821660008181526003602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b60008060008060026000878760405161032592919061294a565b60408051918290039091208252602080830193909352908101600090812061ffff8b16825290925290205463ffffffff80821695506401000000008204169350600160401b900460601b91505093509350939050565b8351602080860191909120600090815260028252604080822061ffff891683529092529081205463ffffffff16906103b38584610818565b90506103c08187846108be565b6103c861232b565b845151156103e7576103da8585610818565b90506103e78188856108be565b60006103f283610904565b602081015190915060fe161561040757600080fd5b610412816027610963565b1580156104375750610425816002610963565b15806104375750610437816006610963565b61044057600080fd5b610451898985610120015184610975565b1561048d5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080546001600160e01b03191690556104e4565b6104ac88846101200151838561012001516104a787610904565b6109a5565b156100ea5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080546001600160e01b03191690555b505050505050505050565b6001546001600160a01b0316331461050657600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461053f57600080fd5b60ff821660008181526004602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c791016102ff565b6105aa61232b565b6105b48383610818565b805190915061ffff16602f146105c957600080fd5b60a08101518451602080870191909120600090815260028252604080822061ffff8a1683529092522054610603919063ffffffff16610ac0565b61060c57600080fd5b600061061782610ad9565b9050805151602082015110156100ea57610638818361012001518789610af1565b50508251602080850191909120600090815260028252604080822061ffff881683529092522080546001600160e01b03191690555b50505050565b6060600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505b85518110156106f0576106dc8682815181106106ce576106ce61295a565b602002602001015183610c9f565b9150806106e881612986565b9150506106b0565b5090505b9392505050565b6001546001600160a01b0316331461071257600080fd5b60ff821660008181526005602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d91016102ff565b600080546107829061299f565b80601f01602080910402602001604051908101604052809291908181526020018280546107ae9061299f565b80156107fb5780601f106107d0576101008083540402835291602001916107fb565b820191906000526020600020905b8154815290600101906020018083116107de57829003601f168201915b505050505081565b606061080f8383610c9f565b90505b92915050565b61082061232b565b825161082b90610e1e565b905061083b8160e0015183610f18565b61084457600080fd5b6000610854828360000151610f80565b604083015190915060ff1661086a82600061102e565b1461087457600080fd5b6101208201819052608082015161088b9042610ac0565b61089457600080fd5b6108a2428360a00151610ac0565b6108ab57600080fd5b6108b78183868661108b565b5092915050565b6108cc8360a0015182610ac0565b6108d557600080fd5b825161ffff166032146108e757600080fd5b6108f683610120015183611170565b6108ff57600080fd5b505050565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061093e83610ad9565b60a081015160c08201519192506106f49161095a9082906129d3565b835191906111de565b600061080f8360a00151600084611325565b600061098282848661143a565b15610999576109918286610963565b15905061099d565b5060005b949350505050565b602081015160009060fe16156109ba57600080fd5b60006109c586611461565b905060006109d285611461565b90506000806109e18a8261147d565b6109ec9060016129e6565b60ff1690505b8951811015610aae5783610a1e89610a1984858f51610a1191906129d3565b8f91906114a1565b611523565b03610a82576000610a3a87610a1985868f51610a1191906129d3565b90508660800151841015610a66578381118015610a5a5750866080015181105b95505050505050610ab7565b83811180610a5a57508660800151811095505050505050610ab7565b905080610a8f8a8261147d565b610a9a9060016129e6565b610aa79060ff16826129ff565b90506109f2565b50600093505050505b95945050505050565b600080610acd8385612a12565b60030b12159392505050565b610ae1612381565b61081282610100015160006115af565b60a08401518451600090610b0590836115ca565b905060008660a001518760c00151610b1d91906129d3565b9050818111610b2b57600080fd5b6000610b378688611624565b905080600003610b6657610b57610b4e84866129ff565b89519087611325565b15610b6157600080fd5b610bad565b8751600090610b769086866114a1565b905060008213610b8557600080fd5b6000610b918983611624565b12156104e4576000610ba38883611624565b126104e457600080fd5b5050505050505050565b60c08101516020820181905281515111610bce5750565b6000610be2826000015183602001516115ca565b8260200151610bf191906129ff565b8251909150610c00908261177d565b61ffff166040830152610c146002826129ff565b8251909150610c23908261177d565b61ffff166060830152610c376002826129ff565b8251909150610c4690826117a5565b63ffffffff166080830152610c5c6004826129ff565b8251909150600090610c6e908361177d565b61ffff169050610c7f6002836129ff565b60a084018190529150610c9281836129ff565b60c0909301929092525050565b6060610ca961232b565b610cb38484610818565b61012081015180516020918201206000908152600282526040808220845161ffff16835290925220805491925090600160401b900460601b6001600160601b03191615610d1a5760a08201518154610d11919063ffffffff16610ac0565b610d1a57600080fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301206001600160601b0319168688019081526101208a0180518051908501206000908152600285528981208c5161ffff16825290945292889020965187549451915190961c600160401b0268010000000000000000600160e01b03199186166401000000000267ffffffffffffffff19909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b92610e099291612a39565b60405180910390a15061010001519392505050565b610e2661232b565b610e3182600061177d565b61ffff168152610e4282600261147d565b60ff166020820152610e5582600361147d565b60ff166040820152610e688260046117a5565b63ffffffff9081166060830152610e849083906008906117a516565b63ffffffff9081166080830152610ea0908390600c906117a516565b63ffffffff90811660a0830152610ebc90839060109061177d16565b61ffff1660c0820152610ed08260126117cf565b60e0820181905251610f0d90610ee79060126129ff565b8260e001515160128551610efb91906129d3565b610f0591906129d3565b8491906114a1565b610100820152919050565b600080610f2f610f2884836115ca565b849061177d565b8351602080860191909120865187830120600090815260028352604080822061ffff90951682529390925291902054600160401b900460601b6001600160601b031990811691161491505092915050565b60606000610f8d84610ad9565b90505b805151602082015110156108b757606081015161ffff16600114610fb357600080fd5b8151600003610fcc57610fc5816117ea565b9150611008565b60208101518151610fdc916115ca565b825114610fe857600080fd5b805160208201518351610fff92859260009261180b565b61100857600080fd5b8261ffff16816040015161ffff161461102057600080fd5b61102981610bb7565b610f90565b6000805b8351831061104257611042612a5e565b600061104e858561147d565b60ff16905061105e8160016129ff565b61106890856129ff565b935080600003611078575061080f565b6110836001836129ff565b915050611032565b83518360e0015151111561109e57600080fd5b6110c36000858560e001515187516110b691906129d3565b60e087015192919061182e565b6110cc57600080fd5b60006110d882826115af565b9050602b61ffff16816040015161ffff1603611107576110f9848483611863565b61110257600080fd5b611169565b603061ffff16816040015161ffff1603611126576110f98484836118fc565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d985b1a59081c1c9bdbd988199bdd5b9960621b604482015260640160405180910390fd5b5050505050565b60008061117d848261147d565b6111889060016129e6565b60ff16905060005b8351811015610999576111a58482878561182e565b156111b557600192505050610812565b6111bf848261147d565b6111ca9060016129e6565b6111d79060ff16826129ff565b9050611190565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061121983856129ff565b90506112306112296000866129ff565b869061147d565b60ff1682526112436112296001866129ff565b60ff1660208301526112606112596002866129ff565b869061177d565b61ffff16604083015260006112806112796004876129ff565b879061147d565b905061128d6005866129ff565b945061129d868660ff84166114a1565b60608401526112af60ff8216866129ff565b945060006112bd878761147d565b905060208160ff1611156112d057600080fd5b6112db6001876129ff565b95506112eb878760ff84166119a4565b60808501526112fd60ff8216876129ff565b95506113158661130d81866129d3565b8991906114a1565b60a0850152509195945050505050565b600060ff600883811c821691839161133e918616612a8a565b90506000611350600780871690612aab565b600160ff919091161b9050855b875181101561142c576000611372898361147d565b9050600061138b6113848460016129ff565b8b9061147d565b90508160ff168660ff1610156113aa57600096505050505050506106f4565b8160ff168660ff160361140b578460ff168160ff16116113d357600096505050505050506106f4565b836113f66113e460ff8816866129ff565b6113ef9060026129ff565b8c9061147d565b1660ff166000141596505050505050506106f4565b6114168160026129e6565b6114239060ff16846129ff565b9250505061135d565b506000979650505050505050565b6000806114478584611523565b9050600061145485611461565b9190911495945050505050565b60006108126001611472848461147d565b84919060ff166119e5565b60008282815181106114915761149161295a565b016020015160f81c905092915050565b82516060906114b083856129ff565b11156114bb57600080fd5b60008267ffffffffffffffff8111156114d6576114d66124df565b6040519080825280601f01601f191660200182016040528015611500576020820181803683370190505b50905060208082019086860101611518828287611bfd565b509095945050505050565b815160ff1660009081526005602052604080822054606085015182860151925163347ced5960e11b81526001600160a01b03909216926368f9dab29261156e92918791600401612ac4565b602060405180830381865afa15801561158b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f9190612afe565b6115b7612381565b82815260c0810182905261081281610bb7565b6000815b835181106115de576115de612a5e565b60006115ea858361147d565b60ff1690506115fa8160016129ff565b61160490836129ff565b915080600003611614575061161a565b506115ce565b61099d83826129d3565b60006116308383611c53565b1561163d57506000610812565b600080600080600061165088600061102e565b9050600061165f88600061102e565b90505b8082111561168b578593506116778987611c71565b95508161168381612b17565b925050611662565b818111156116b4578492506116a08886611c71565b9450806116ac81612b17565b91505061168b565b6000821180156116cd57506116cb89878a8861182e565b155b15611702578593506116df8987611c71565b95508492506116ee8886611c71565b94506116fb6001836129d3565b91506116b4565b8560000361171a576000199650505050505050610812565b846000036117315760019650505050505050610812565b61177061173f8560016129ff565b6117498b8761147d565b60ff168a6117588760016129ff565b6117628d8961147d565b8e949392919060ff16611c95565b9998505050505050505050565b815160009061178d8360026129ff565b111561179857600080fd5b50016002015161ffff1690565b81516000906117b58360046129ff565b11156117c057600080fd5b50016004015163ffffffff1690565b606060006117dd84846115ca565b905061099d8484836114a1565b602081015181516060916108129161180290826115ca565b845191906114a1565b6000611818848484611d8a565b611823878785611d8a565b149695505050505050565b6000611847838384865161184291906129d3565b611d8a565b611859868687895161184291906129d3565b1495945050505050565b60008061186f85610ad9565b90505b8051516020820151101561099957604081015161ffff1660301461189557600080fd5b60006118a082611dae565b905060006118bb6000835184611dca9092919063ffffffff16565b90506118c981838989611e68565b156118ec576118e26118da846117ea565b868385611f6d565b93505050506106f4565b50506118f781610bb7565b611872565b60006119158460e0015161190f846117ea565b90611c53565b61191e57600080fd5b8151516020830151101561199a5761193d8460e0015161190f846117ea565b61194657600080fd5b600061195183611dae565b9050600061196c6000835184611dca9092919063ffffffff16565b905061197a81838888611e68565b1561198a576001925050506106f4565b505061199582610bb7565b61191e565b5060009392505050565b600060208211156119b457600080fd5b83516119c083856129ff565b11156119cb57600080fd5b506020919092018101519190036101000a60001901191690565b600060348211156119f557600080fd5b600080805b84811015611ae157600087611a0f83896129ff565b81518110611a1f57611a1f61295a565b01602001516001600160f81b0319169050600360fc1b8110801590611a525750603d60f91b6001600160f81b0319821611155b611a5b57600080fd5b604051806080016040528060478152602001612cc560479139611a83603060f884901c6129d3565b81518110611a9357611a9361295a565b0160209081015160f81c9350831115611aab57600080fd5b611ab66001876129d3565b8203611ac25750611ae1565b5060059290921b60ff8216179180611ad981612986565b9150506119fa565b506000611aef856005612b2e565b9050611afc600886612b45565b600003611b14578160ff16600584901b179250611be3565b611b1f600886612b45565b600203611b4d5760028260ff16901c60ff16600384901b179250600281611b4691906129d3565b9050611be3565b611b58600886612b45565b600403611b7f5760048260ff16901c60ff16600184901b179250600481611b4691906129d3565b611b8a600886612b45565b600503611bb15760018260ff16901c60ff16600484901b179250600181611b4691906129d3565b611bbc600886612b45565b6007036100ea5760038260ff16901c60ff16600284901b179250600381611b4691906129d3565b611bef816101006129d3565b9290921b9695505050505050565b60208110611c355781518352611c146020846129ff565b9250611c216020836129ff565b9150611c2e6020826129d3565b9050611bfd565b905182516020929092036101000a6000190180199091169116179052565b60008151835114801561080f575061080f836000846000875161180b565b6000611c7d838361147d565b60ff16611c8b8360016129ff565b61080f91906129ff565b60008480831015611ca35750815b60208789018101908587010160005b83811015611d6f5782518251808214611d3f5760006020871115611cd95750600019611d15565b600184611ce78960206129d3565b611cf191906129ff565b611cfc906008612b2e565b611d07906002612c3d565b611d1191906129d3565b1990505b6000611d25838316858416612c49565b90508015611d3c579750611d809650505050505050565b50505b611d4a6020866129ff565b9450611d576020856129ff565b93505050602081611d6891906129ff565b9050611cb2565b50611d7a8589612c49565b93505050505b9695505050505050565b8251600090611d9983856129ff565b1115611da457600080fd5b5091016020012090565b60a081015160c0820151606091610812916118029082906129d3565b6040805160808101825260008082526020820181905291810191909152606080820152611e02611dfb6000856129ff565b859061177d565b61ffff168152611e1d611e166002856129ff565b859061147d565b60ff166020820152611e33611e166003856129ff565b60ff166040820152611e5c611e496004856129ff565b611e546004856129d3565b8691906114a1565b60608201529392505050565b6000846020015160ff16600314611e815750600061099d565b826020015160ff16856040015160ff1614611e9e5750600061099d565b6000611ea98561206e565b90508360c0015161ffff168161ffff1614611ec857600091505061099d565b855161010016600003611edf57600091505061099d565b60408087015160ff166000908152600360209081529082902054855191860151925163de8f50a160e01b81526001600160a01b039091169263de8f50a192611f2c928a9290600401612c69565b602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612ca2565b600080611f798361206e565b90505b845151602086015110156120625760a085015160c0860151600091611faf91611fa69082906129d3565b88519190611dca565b90508161ffff16816000015161ffff1614611fca5750612054565b846040015160ff16816020015160ff1614611fe55750612054565b6040805180820190915260608152600060208201526120128551895161200b91906129ff565b82906120db565b5061201d8189612140565b506120288186612140565b50612040826040015182600001518460600151612167565b15612051576001935050505061099d565b50505b61205d85610bb7565b611f7c565b50600095945050505050565b60008060005b83518110156120cc57600181161561209857612090848261147d565b60ff166120aa565b60086120a4858361147d565b60ff16901b5b6120b89061ffff16836129ff565b9150806120c481612986565b915050612074565b506106f4601082901c826129ff565b6040805180820190915260608152600060208201526120fb602083612b45565b156121235761210b602083612b45565b6121169060206129d3565b61212090836129ff565b91505b506020828101829052604080518085526000815290920101905290565b60408051808201909152606081526000602082015261080f83846000015151848551612213565b60ff83166000908152600460205260408120546001600160a01b031661218f575060006106f4565b60ff8416600090815260046020819052604091829020549151637bf41d7760e11b81526001600160a01b039092169163f7e83aee916121d2918791879101612a39565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190612ca2565b604080518082019091526060815260006020820152825182111561223657600080fd5b602085015161224583866129ff565b111561227857612278856122688760200151878661226391906129ff565b6122fd565b612273906002612b2e565b612314565b6000808651805187602083010193508088870111156122975787860182525b505050602084015b602084106122d757805182526122b66020836129ff565b91506122c36020826129ff565b90506122d06020856129d3565b935061229f565b51815160001960208690036101000a019081169019919091161790525083949350505050565b60008183111561230e575081610812565b50919050565b815161232083836120db565b5061066d8382612140565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b803560ff811681146123dd57600080fd5b919050565b6001600160a01b03811681146123f757600080fd5b50565b6000806040838503121561240d57600080fd5b612416836123cc565b91506020830135612426816123e2565b809150509250929050565b803561ffff811681146123dd57600080fd5b60008083601f84011261245557600080fd5b50813567ffffffffffffffff81111561246d57600080fd5b60208301915083602082850101111561248557600080fd5b9250929050565b6000806000604084860312156124a157600080fd5b6124aa84612431565b9250602084013567ffffffffffffffff8111156124c657600080fd5b6124d286828701612443565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561251e5761251e6124df565b604052919050565b600082601f83011261253757600080fd5b813567ffffffffffffffff811115612551576125516124df565b612564601f8201601f19166020016124f5565b81815284602083860101111561257957600080fd5b816020850160208301376000918101602001919091529392505050565b6000604082840312156125a857600080fd5b6040516040810167ffffffffffffffff82821081831117156125cc576125cc6124df565b8160405282935084359150808211156125e457600080fd5b6125f086838701612526565b8352602085013591508082111561260657600080fd5b5061261385828601612526565b6020830152505092915050565b600080600080600060a0868803121561263857600080fd5b61264186612431565b9450602086013567ffffffffffffffff8082111561265e57600080fd5b61266a89838a01612526565b9550604088013591508082111561268057600080fd5b61268c89838a01612596565b945060608801359150808211156126a257600080fd5b6126ae89838a01612596565b935060808801359150808211156126c457600080fd5b506126d188828901612526565b9150509295509295909350565b6000602082840312156126f057600080fd5b813561080f816123e2565b6000806000806080858703121561271157600080fd5b61271a85612431565b9350602085013567ffffffffffffffff8082111561273757600080fd5b61274388838901612526565b9450604087013591508082111561275957600080fd5b61276588838901612596565b9350606087013591508082111561277b57600080fd5b5061278887828801612526565b91505092959194509250565b6000806000604084860312156127a957600080fd5b833567ffffffffffffffff808211156127c157600080fd5b818601915086601f8301126127d557600080fd5b81356020828211156127e9576127e96124df565b8160051b6127f88282016124f5565b928352848101820192828101908b85111561281257600080fd5b83870192505b8483101561284e578235868111156128305760008081fd5b61283e8d86838b0101612596565b8352509183019190830190612818565b985050508701359250508082111561286557600080fd5b506124d286828701612443565b6000815180845260005b818110156128985760208185018101518683018201520161287c565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061080f6020830184612872565b6000602082840312156128dd57600080fd5b61080f826123cc565b600080604083850312156128f957600080fd5b823567ffffffffffffffff8082111561291157600080fd5b61291d86838701612596565b9350602085013591508082111561293357600080fd5b5061294085828601612526565b9150509250929050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161299857612998612970565b5060010190565b600181811c908216806129b357607f821691505b60208210810361230e57634e487b7160e01b600052602260045260246000fd5b8181038181111561081257610812612970565b60ff818116838216019081111561081257610812612970565b8082018082111561081257610812612970565b600382810b9082900b03637fffffff198112637fffffff8213171561081257610812612970565b604081526000612a4c6040830185612872565b8281036020840152610ab78185612872565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680612a9f57612a9f612a74565b92169190910492915050565b60ff828116828216039081111561081257610812612970565b606081526000612ad76060830186612872565b8281036020840152612ae98186612872565b91505061ffff83166040830152949350505050565b600060208284031215612b1057600080fd5b5051919050565b600081612b2657612b26612970565b506000190190565b808202811582820484141761081257610812612970565b600082612b5457612b54612a74565b500690565b600181815b80851115612b94578160001904821115612b7a57612b7a612970565b80851615612b8757918102915b93841c9390800290612b5e565b509250929050565b600082612bab57506001610812565b81612bb857506000610812565b8160018114612bce5760028114612bd857612bf4565b6001915050610812565b60ff841115612be957612be9612970565b50506001821b610812565b5060208310610133831016604e8410600b8410161715612c17575081810a610812565b612c218383612b59565b8060001904821115612c3557612c35612970565b029392505050565b600061080f8383612b9c565b81810360008312801583831316838312821617156108b7576108b7612970565b606081526000612c7c6060830186612872565b8281036020840152612c8e8186612872565b90508281036040840152611d808185612872565b600060208284031215612cb457600080fd5b8151801515811461080f57600080fdfe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa164736f6c6343000811000a", + "bytecode": "0x608060405234801562000010575f80fd5b506040516200308b3803806200308b833981016040819052620000339162000189565b600180546001600160a01b031916331790555f620000528282620002e1565b50604080516060810182525f80825263e090bba06020830152825191928301916200007e9190620003ad565b60408051918290039091206001600160601b031916909152602b5f9081527fc92a43746f20f69898978a3075767b860ba247ac0639d1831bf8c942c5db2389602090815283517f95c6356c1b7a542b884d2484ef785c9c7224e77e1016c20007bddc15c23b452f8054928601519585015160601c6801000000000000000002600160401b600160e01b031963ffffffff978816640100000000026001600160401b03199095169790931696909617929092171693909317909255517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b91620001669162000427565b60405180910390a150620004ce565b634e487b7160e01b5f52604160045260245ffd5b5f60208083850312156200019b575f80fd5b82516001600160401b0380821115620001b2575f80fd5b818501915085601f830112620001c6575f80fd5b815181811115620001db57620001db62000175565b604051601f8201601f19908116603f0116810190838211818310171562000206576200020662000175565b8160405282815288868487010111156200021e575f80fd5b5f93505b8284101562000241578484018601518185018701529285019262000222565b5f86848301015280965050505050505092915050565b600181811c908216806200026c57607f821691505b6020821081036200028b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002dc57805f5260205f20601f840160051c81016020851015620002b85750805b601f840160051c820191505b81811015620002d9575f8155600101620002c4565b50505b505050565b81516001600160401b03811115620002fd57620002fd62000175565b62000315816200030e845462000257565b8462000291565b602080601f8311600181146200034b575f8415620003335750858301515b5f19600386901b1c1916600185901b178555620003a5565b5f85815260208120601f198616915b828110156200037b578886015182559484019460019091019084016200035a565b50858210156200039957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f808354620003bc8162000257565b60018281168015620003d75760018114620003ed576200041b565b60ff19841687528215158302870194506200041b565b875f526020805f205f5b85811015620004125781548a820152908401908201620003f7565b50505082870194505b50929695505050505050565b604081525f60018060408401525f60608401526020608060208501525f8554620004518162000257565b80608088015260a0600183165f81146200047457600181146200049157620004c0565b60ff19841660a08a015260a083151560051b8a01019450620004c0565b895f5260205f205f5b84811015620004b75781548b82018501529088019087016200049a565b8a0160a0019550505b509298975050505050505050565b612baf80620004dc5f395ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806373cc48a61161008857806398d35f201161006357806398d35f2014610215578063bd7ed31a1461021d578063c327deef14610245578063d7b82ebe1461026d575f80fd5b806373cc48a6146101af5780638438dc04146101ef5780638da5cb5b14610202575f80fd5b806313af4035116100c357806313af40351461015657806328e7677d146101695780632c095cbb1461017c578063435cc1621461018f575f80fd5b8063020ed8d3146100e9578063087991bc146100fe5780630b1a249514610143575b5f80fd5b6100fc6100f73660046122ff565b610280565b005b61011161010c36600461238a565b610300565b6040805163ffffffff94851681529390921660208401526001600160601b031916908201526060015b60405180910390f35b6100fc610151366004612510565b61036c565b6100fc6101643660046125c6565b6104da565b6100fc6101773660046122ff565b610512565b6100fc61018a3660046125e1565b61058a565b6101a261019d366004612674565b610656565b60405161013a919061278c565b6101d76101bd36600461279e565b60046020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161013a565b6100fc6101fd3660046122ff565b6106d2565b6001546101d7906001600160a01b031681565b6101a261074a565b6101d761022b36600461279e565b60056020525f90815260409020546001600160a01b031681565b6101d761025336600461279e565b60036020525f90815260409020546001600160a01b031681565b6101a261027b3660046127b7565b6107d5565b6001546001600160a01b03163314610296575f80fd5b60ff82165f8181526003602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b5f805f8060025f8787604051610317929190612817565b604080519182900390912082526020808301939093529081015f90812061ffff8b16825290925290205463ffffffff80821695506401000000008204169350600160401b900460601b91505093509350939050565b83516020808601919091205f90815260028252604080822061ffff891683529092529081205463ffffffff16906103a385846107ea565b90506103b0818784610889565b6103b8612239565b845151156103d7576103ca85856107ea565b90506103d7818885610889565b5f6103e1836108cc565b602081015190915060fe16156103f5575f80fd5b61040081602761092a565b158015610425575061041381600261092a565b1580610425575061042581600661092a565b61042d575f80fd5b61043e89898561012001518461093a565b156104795787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690556104cf565b6104988884610120015183856101200151610493876108cc565b610968565b156100e55787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690555b505050505050505050565b6001546001600160a01b031633146104f0575f80fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610528575f80fd5b60ff82165f8181526004602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c791016102f4565b610592612239565b61059c83836107ea565b805190915061ffff16602f146105b0575f80fd5b60a081015184516020808701919091205f90815260028252604080822061ffff8a16835290925220546105e9919063ffffffff16610a7c565b6105f1575f80fd5b5f6105fb82610a94565b9050805151602082015110156100e55761061c818361012001518789610aab565b505082516020808501919091205f90815260028252604080822061ffff881683529092522080546001600160e01b03191690555b50505050565b60605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b85518110156106c7576106bd8682815181106106af576106af612826565b602002602001015183610c4a565b9150600101610691565b5090505b9392505050565b6001546001600160a01b031633146106e8575f80fd5b60ff82165f8181526005602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d91016102f4565b5f80546107569061283a565b80601f01602080910402602001604051908101604052809291908181526020018280546107829061283a565b80156107cd5780601f106107a4576101008083540402835291602001916107cd565b820191905f5260205f20905b8154815290600101906020018083116107b057829003601f168201915b505050505081565b60606107e18383610c4a565b90505b92915050565b6107f2612239565b82516107fd90610dc6565b905061080d8160e0015183610ebf565b610815575f80fd5b5f61082382835f0151610f25565b604083015190915060ff16610838825f610fcc565b14610841575f80fd5b610120820181905260808201516108589042610a7c565b610860575f80fd5b61086e428360a00151610a7c565b610876575f80fd5b61088281838686611026565b5092915050565b6108978360a0015182610a7c565b61089f575f80fd5b825161ffff166032146108b0575f80fd5b6108bf83610120015183611106565b6108c7575f80fd5b505050565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a08201529061090583610a94565b60a081015160c08201519192506106cb91610921908290612880565b83519190611172565b5f6107e18360a001515f846112b4565b5f6109468284866113c1565b1561095d57610955828661092a565b159050610960565b505f5b949350505050565b60208101515f9060fe161561097b575f80fd5b5f610985866113e6565b90505f610991856113e6565b90505f8061099f8a82611401565b6109aa906001612893565b60ff1690505b8951811015610a6b57836109dc896109d784858f516109cf9190612880565b8f9190611424565b6114a4565b03610a3f575f6109f7876109d785868f516109cf9190612880565b90508660800151841015610a23578381118015610a175750866080015181105b95505050505050610a73565b83811180610a1757508660800151811095505050505050610a73565b905080610a4c8a82611401565b610a57906001612893565b610a649060ff16826128ac565b90506109b0565b505f93505050505b95945050505050565b5f80610a8883856128bf565b60030b12159392505050565b610a9c61228e565b6107e48261010001515f61152d565b60a084015184515f90610abe9083611548565b90505f8660a001518760c00151610ad59190612880565b9050818111610ae2575f80fd5b5f610aed868861159f565b9050805f03610b1a57610b0c610b0384866128ac565b895190876112b4565b15610b15575f80fd5b610b5b565b87515f90610b29908686611424565b90505f8213610b36575f80fd5b5f610b41898361159f565b12156104cf575f610b52888361159f565b126104cf575f80fd5b5050505050505050565b60c08101516020820181905281515111610b7c5750565b5f610b8e825f01518360200151611548565b8260200151610b9d91906128ac565b8251909150610bac90826116ec565b61ffff166040830152610bc06002826128ac565b8251909150610bcf90826116ec565b61ffff166060830152610be36002826128ac565b8251909150610bf29082611712565b63ffffffff166080830152610c086004826128ac565b82519091505f90610c1990836116ec565b61ffff169050610c2a6002836128ac565b60a084018190529150610c3d81836128ac565b60c0909301929092525050565b6060610c54612239565b610c5e84846107ea565b61012081015180516020918201205f908152600282526040808220845161ffff16835290925220805491925090600160401b900460601b6001600160601b03191615610cc35760a08201518154610cbb919063ffffffff16610a7c565b610cc3575f80fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301206001600160601b0319168688019081526101208a0180518051908501205f908152600285528981208c5161ffff16825290945292889020965187549451915190961c600160401b0268010000000000000000600160e01b03199186166401000000000267ffffffffffffffff19909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b92610db192916128e6565b60405180910390a15061010001519392505050565b610dce612239565b610dd8825f6116ec565b61ffff168152610de9826002611401565b60ff166020820152610dfc826003611401565b60ff166040820152610e0f826004611712565b63ffffffff9081166060830152610e2b90839060089061171216565b63ffffffff9081166080830152610e47908390600c9061171216565b63ffffffff90811660a0830152610e639083906010906116ec16565b61ffff1660c0820152610e7782601261173a565b60e0820181905251610eb490610e8e9060126128ac565b8260e001515160128551610ea29190612880565b610eac9190612880565b849190611424565b610100820152919050565b5f80610ed5610ece8483611548565b84906116ec565b83516020808601919091208651878301205f90815260028352604080822061ffff90951682529390925291902054600160401b900460601b6001600160601b031990811691161491505092915050565b60605f610f3184610a94565b90505b8051516020820151101561088257606081015161ffff16600114610f56575f80fd5b81515f03610f6e57610f6781611754565b9150610fa7565b60208101518151610f7e91611548565b825114610f89575f80fd5b805160208201518351610f9f9285925f92611775565b610fa7575f80fd5b8261ffff16816040015161ffff1614610fbe575f80fd5b610fc781610b65565b610f34565b5f805b83518310610fdf57610fdf61290a565b5f610fea8585611401565b60ff169050610ffa8160016128ac565b61100490856128ac565b9350805f0361101357506107e1565b61101e6001836128ac565b915050610fcf565b83518360e00151511115611038575f80fd5b61105c5f858560e0015151875161104f9190612880565b60e0870151929190611797565b611064575f80fd5b5f61106f828261152d565b9050602b61ffff16816040015161ffff160361109d576110908484836117cb565b611098575f80fd5b6110ff565b603061ffff16816040015161ffff16036110bc5761109084848361185f565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d985b1a59081c1c9bdbd988199bdd5b9960621b604482015260640160405180910390fd5b5050505050565b5f806111128482611401565b61111d906001612893565b60ff1690505f5b835181101561095d5761113984828785611797565b15611149576001925050506107e4565b6111538482611401565b61115e906001612893565b61116b9060ff16826128ac565b9050611124565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a0820152906111ac83856128ac565b90506111c26111bb5f866128ac565b8690611401565b60ff1682526111d56111bb6001866128ac565b60ff1660208301526111f26111eb6002866128ac565b86906116ec565b61ffff1660408301525f61121161120a6004876128ac565b8790611401565b905061121e6005866128ac565b945061122e868660ff8416611424565b606084015261124060ff8216866128ac565b94505f61124d8787611401565b905060208160ff16111561125f575f80fd5b61126a6001876128ac565b955061127a878760ff8416611900565b608085015261128c60ff8216876128ac565b95506112a48661129c8186612880565b899190611424565b60a0850152509195945050505050565b5f60ff600883811c82169183916112cc918616612932565b90505f6112dd600780871690612952565b600160ff919091161b9050855b87518110156113b4575f6112fe8983611401565b90505f61131661130f8460016128ac565b8b90611401565b90508160ff168660ff161015611334575f96505050505050506106cb565b8160ff168660ff1603611393578460ff168160ff161161135c575f96505050505050506106cb565b8361137f61136d60ff8816866128ac565b6113789060026128ac565b8c90611401565b1660ff165f141596505050505050506106cb565b61139e816002612893565b6113ab9060ff16846128ac565b925050506112ea565b505f979650505050505050565b5f806113cd85846114a4565b90505f6113d9856113e6565b9190911495945050505050565b5f6107e460016113f68484611401565b84919060ff1661193d565b5f82828151811061141457611414612826565b016020015160f81c905092915050565b825160609061143383856128ac565b111561143d575f80fd5b5f8267ffffffffffffffff811115611457576114576123d9565b6040519080825280601f01601f191660200182016040528015611481576020820181803683370190505b50905060208082019086860101611499828287611b43565b509095945050505050565b815160ff165f9081526005602052604080822054606085015182860151925163347ced5960e11b81526001600160a01b03909216926368f9dab2926114ee9291879160040161296b565b602060405180830381865afa158015611509573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e191906129a4565b61153561228e565b82815260c081018290526107e481610b65565b5f815b8351811061155b5761155b61290a565b5f6115668583611401565b60ff1690506115768160016128ac565b61158090836128ac565b9150805f0361158f5750611595565b5061154b565b6109608382612880565b5f6115aa8383611b98565b156115b657505f6107e4565b5f805f805f6115c5885f610fcc565b90505f6115d2885f610fcc565b90505b808211156115fe578593506115ea8987611bb3565b9550816115f6816129bb565b9250506115d5565b81811115611627578492506116138886611bb3565b94508061161f816129bb565b9150506115fe565b5f8211801561163f575061163d89878a88611797565b155b15611674578593506116518987611bb3565b95508492506116608886611bb3565b945061166d600183612880565b9150611627565b855f0361168a575f1996505050505050506107e4565b845f036116a057600196505050505050506107e4565b6116df6116ae8560016128ac565b6116b88b87611401565b60ff168a6116c78760016128ac565b6116d18d89611401565b8e949392919060ff16611bd6565b9998505050505050505050565b81515f906116fb8360026128ac565b1115611705575f80fd5b50016002015161ffff1690565b81515f906117218360046128ac565b111561172b575f80fd5b50016004015163ffffffff1690565b60605f6117478484611548565b9050610960848483611424565b602081015181516060916107e49161176c9082611548565b84519190611424565b5f611781848484611cc6565b61178c878785611cc6565b149695505050505050565b5f6117af83838486516117aa9190612880565b611cc6565b6117c186868789516117aa9190612880565b1495945050505050565b5f806117d685610a94565b90505b8051516020820151101561095d57604081015161ffff166030146117fb575f80fd5b5f61180582611ce8565b90505f61181e5f835184611d049092919063ffffffff16565b905061182c81838989611da0565b1561184f5761184561183d84611754565b868385611e9b565b93505050506106cb565b505061185a81610b65565b6117d9565b5f6118778460e0015161187184611754565b90611b98565b61187f575f80fd5b815151602083015110156118f75761189e8460e0015161187184611754565b6118a6575f80fd5b5f6118b083611ce8565b90505f6118c95f835184611d049092919063ffffffff16565b90506118d781838888611da0565b156118e7576001925050506106cb565b50506118f282610b65565b61187f565b505f9392505050565b5f602082111561190e575f80fd5b835161191a83856128ac565b1115611924575f80fd5b506020919092018101519190036101000a5f1901191690565b5f603482111561194b575f80fd5b5f80805b84811015611a29575f8761196383896128ac565b8151811061197357611973612826565b01602001516001600160f81b0319169050600360fc1b81108015906119a65750603d60f91b6001600160f81b0319821611155b6119ae575f80fd5b604051806080016040528060478152602001612b5c604791396119d6603060f884901c612880565b815181106119e6576119e6612826565b0160209081015160f81c93508311156119fd575f80fd5b611a08600187612880565b8203611a145750611a29565b5060059290921b60ff8216179160010161194f565b505f611a368560056129d0565b9050611a436008866129e7565b5f03611a5a578160ff16600584901b179250611b29565b611a656008866129e7565b600203611a935760028260ff16901c60ff16600384901b179250600281611a8c9190612880565b9050611b29565b611a9e6008866129e7565b600403611ac55760048260ff16901c60ff16600184901b179250600481611a8c9190612880565b611ad06008866129e7565b600503611af75760018260ff16901c60ff16600484901b179250600181611a8c9190612880565b611b026008866129e7565b6007036100e55760038260ff16901c60ff16600284901b179250600381611a8c9190612880565b611b3581610100612880565b9290921b9695505050505050565b60208110611b7b5781518352611b5a6020846128ac565b9250611b676020836128ac565b9150611b74602082612880565b9050611b43565b905182516020929092036101000a5f190180199091169116179052565b5f815183511480156107e157506107e1835f845f8751611775565b5f611bbe8383611401565b60ff16611bcc8360016128ac565b6107e191906128ac565b5f8480831015611be35750815b6020878901810190858701015f5b83811015611cab5782518251808214611c7b575f6020871115611c1657505f19611c52565b600184611c24896020612880565b611c2e91906128ac565b611c399060086129d0565b611c44906002612ada565b611c4e9190612880565b1990505b5f611c61838316858416612ae5565b90508015611c78579750611cbc9650505050505050565b50505b611c866020866128ac565b9450611c936020856128ac565b93505050602081611ca491906128ac565b9050611bf1565b50611cb68589612ae5565b93505050505b9695505050505050565b82515f90611cd483856128ac565b1115611cde575f80fd5b5091016020012090565b60a081015160c08201516060916107e49161176c908290612880565b604080516080810182525f8082526020820181905291810191909152606080820152611d3a611d335f856128ac565b85906116ec565b61ffff168152611d55611d4e6002856128ac565b8590611401565b60ff166020820152611d6b611d4e6003856128ac565b60ff166040820152611d94611d816004856128ac565b611d8c600485612880565b869190611424565b60608201529392505050565b5f846020015160ff16600314611db757505f610960565b826020015160ff16856040015160ff1614611dd357505f610960565b5f611ddd85611f96565b90508360c0015161ffff168161ffff1614611dfb575f915050610960565b8551610100165f03611e10575f915050610960565b60408087015160ff165f908152600360209081529082902054855191860151925163de8f50a160e01b81526001600160a01b039091169263de8f50a192611e5c928a9290600401612b04565b602060405180830381865afa158015611e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbc9190612b3c565b5f80611ea683611f96565b90505b84515160208601511015611f8b5760a085015160c08601515f91611edb91611ed2908290612880565b88519190611d04565b90508161ffff16815f015161ffff1614611ef55750611f7d565b846040015160ff16816020015160ff1614611f105750611f7d565b60408051808201909152606081525f6020820152611f3c85518951611f3591906128ac565b8290611ff7565b50611f47818961205a565b50611f52818661205a565b50611f698260400151825f0151846060015161207f565b15611f7a5760019350505050610960565b50505b611f8685610b65565b611ea9565b505f95945050505050565b5f805f5b8351811015611fe8576001811615611fbe57611fb68482611401565b60ff16611fd0565b6008611fca8583611401565b60ff16901b5b611fde9061ffff16836128ac565b9150600101611f9a565b506106cb601082901c826128ac565b60408051808201909152606081525f60208201526120166020836129e7565b1561203e576120266020836129e7565b612031906020612880565b61203b90836128ac565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526107e183845f015151848551612126565b60ff83165f908152600460205260408120546001600160a01b03166120a557505f6106cb565b60ff84165f90815260046020819052604091829020549151637bf41d7760e11b81526001600160a01b039092169163f7e83aee916120e79187918791016128e6565b602060405180830381865afa158015612102573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109609190612b3c565b60408051808201909152606081525f60208201528251821115612147575f80fd5b602085015161215683866128ac565b111561218957612189856121798760200151878661217491906128ac565b61220c565b6121849060026129d0565b612222565b5f808651805187602083010193508088870111156121a75787860182525b505050602084015b602084106121e757805182526121c66020836128ac565b91506121d36020826128ac565b90506121e0602085612880565b93506121af565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f8183111561221c5750816107e4565b50919050565b815161222e8383611ff7565b50610650838261205a565b60408051610140810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b803560ff811681146122e3575f80fd5b919050565b6001600160a01b03811681146122fc575f80fd5b50565b5f8060408385031215612310575f80fd5b612319836122d3565b91506020830135612329816122e8565b809150509250929050565b803561ffff811681146122e3575f80fd5b5f8083601f840112612355575f80fd5b50813567ffffffffffffffff81111561236c575f80fd5b602083019150836020828501011115612383575f80fd5b9250929050565b5f805f6040848603121561239c575f80fd5b6123a584612334565b9250602084013567ffffffffffffffff8111156123c0575f80fd5b6123cc86828701612345565b9497909650939450505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612416576124166123d9565b604052919050565b5f82601f83011261242d575f80fd5b813567ffffffffffffffff811115612447576124476123d9565b61245a601f8201601f19166020016123ed565b81815284602083860101111561246e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6040828403121561249a575f80fd5b6040516040810167ffffffffffffffff82821081831117156124be576124be6123d9565b8160405282935084359150808211156124d5575f80fd5b6124e18683870161241e565b835260208501359150808211156124f6575f80fd5b506125038582860161241e565b6020830152505092915050565b5f805f805f60a08688031215612524575f80fd5b61252d86612334565b9450602086013567ffffffffffffffff80821115612549575f80fd5b61255589838a0161241e565b9550604088013591508082111561256a575f80fd5b61257689838a0161248a565b9450606088013591508082111561258b575f80fd5b61259789838a0161248a565b935060808801359150808211156125ac575f80fd5b506125b98882890161241e565b9150509295509295909350565b5f602082840312156125d6575f80fd5b81356107e1816122e8565b5f805f80608085870312156125f4575f80fd5b6125fd85612334565b9350602085013567ffffffffffffffff80821115612619575f80fd5b6126258883890161241e565b9450604087013591508082111561263a575f80fd5b6126468883890161248a565b9350606087013591508082111561265b575f80fd5b506126688782880161241e565b91505092959194509250565b5f805f60408486031215612686575f80fd5b833567ffffffffffffffff8082111561269d575f80fd5b818601915086601f8301126126b0575f80fd5b81356020828211156126c4576126c46123d9565b8160051b6126d38282016123ed565b928352848101820192828101908b8511156126ec575f80fd5b83870192505b8483101561272657823586811115612708575f80fd5b6127168d86838b010161248a565b83525091830191908301906126f2565b985050508701359250508082111561273c575f80fd5b506123cc86828701612345565b5f81518084525f5b8181101561276d57602081850181015186830182015201612751565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6107e16020830184612749565b5f602082840312156127ae575f80fd5b6107e1826122d3565b5f80604083850312156127c8575f80fd5b823567ffffffffffffffff808211156127df575f80fd5b6127eb8683870161248a565b93506020850135915080821115612800575f80fd5b5061280d8582860161241e565b9150509250929050565b818382375f9101908152919050565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061284e57607f821691505b60208210810361221c57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156107e4576107e461286c565b60ff81811683821601908111156107e4576107e461286c565b808201808211156107e4576107e461286c565b600382810b9082900b03637fffffff198112637fffffff821317156107e4576107e461286c565b604081525f6128f86040830185612749565b8281036020840152610a738185612749565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f61ffff808416806129465761294661291e565b92169190910492915050565b60ff82811682821603908111156107e4576107e461286c565b606081525f61297d6060830186612749565b828103602084015261298f8186612749565b91505061ffff83166040830152949350505050565b5f602082840312156129b4575f80fd5b5051919050565b5f816129c9576129c961286c565b505f190190565b80820281158282048414176107e4576107e461286c565b5f826129f5576129f561291e565b500690565b600181815b80851115612a3457815f1904821115612a1a57612a1a61286c565b80851615612a2757918102915b93841c93908002906129ff565b509250929050565b5f82612a4a575060016107e4565b81612a5657505f6107e4565b8160018114612a6c5760028114612a7657612a92565b60019150506107e4565b60ff841115612a8757612a8761286c565b50506001821b6107e4565b5060208310610133831016604e8410600b8410161715612ab5575081810a6107e4565b612abf83836129fa565b805f1904821115612ad257612ad261286c565b029392505050565b5f6107e18383612a3c565b8181035f8312801583831316838312821617156108825761088261286c565b606081525f612b166060830186612749565b8281036020840152612b288186612749565b90508281036040840152611cbc8185612749565b5f60208284031215612b4c575f80fd5b815180151581146107e1575f80fdfe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806373cc48a61161008857806398d35f201161006357806398d35f2014610215578063bd7ed31a1461021d578063c327deef14610245578063d7b82ebe1461026d575f80fd5b806373cc48a6146101af5780638438dc04146101ef5780638da5cb5b14610202575f80fd5b806313af4035116100c357806313af40351461015657806328e7677d146101695780632c095cbb1461017c578063435cc1621461018f575f80fd5b8063020ed8d3146100e9578063087991bc146100fe5780630b1a249514610143575b5f80fd5b6100fc6100f73660046122ff565b610280565b005b61011161010c36600461238a565b610300565b6040805163ffffffff94851681529390921660208401526001600160601b031916908201526060015b60405180910390f35b6100fc610151366004612510565b61036c565b6100fc6101643660046125c6565b6104da565b6100fc6101773660046122ff565b610512565b6100fc61018a3660046125e1565b61058a565b6101a261019d366004612674565b610656565b60405161013a919061278c565b6101d76101bd36600461279e565b60046020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161013a565b6100fc6101fd3660046122ff565b6106d2565b6001546101d7906001600160a01b031681565b6101a261074a565b6101d761022b36600461279e565b60056020525f90815260409020546001600160a01b031681565b6101d761025336600461279e565b60036020525f90815260409020546001600160a01b031681565b6101a261027b3660046127b7565b6107d5565b6001546001600160a01b03163314610296575f80fd5b60ff82165f8181526003602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b5f805f8060025f8787604051610317929190612817565b604080519182900390912082526020808301939093529081015f90812061ffff8b16825290925290205463ffffffff80821695506401000000008204169350600160401b900460601b91505093509350939050565b83516020808601919091205f90815260028252604080822061ffff891683529092529081205463ffffffff16906103a385846107ea565b90506103b0818784610889565b6103b8612239565b845151156103d7576103ca85856107ea565b90506103d7818885610889565b5f6103e1836108cc565b602081015190915060fe16156103f5575f80fd5b61040081602761092a565b158015610425575061041381600261092a565b1580610425575061042581600661092a565b61042d575f80fd5b61043e89898561012001518461093a565b156104795787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690556104cf565b6104988884610120015183856101200151610493876108cc565b610968565b156100e55787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690555b505050505050505050565b6001546001600160a01b031633146104f0575f80fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610528575f80fd5b60ff82165f8181526004602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c791016102f4565b610592612239565b61059c83836107ea565b805190915061ffff16602f146105b0575f80fd5b60a081015184516020808701919091205f90815260028252604080822061ffff8a16835290925220546105e9919063ffffffff16610a7c565b6105f1575f80fd5b5f6105fb82610a94565b9050805151602082015110156100e55761061c818361012001518789610aab565b505082516020808501919091205f90815260028252604080822061ffff881683529092522080546001600160e01b03191690555b50505050565b60605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b85518110156106c7576106bd8682815181106106af576106af612826565b602002602001015183610c4a565b9150600101610691565b5090505b9392505050565b6001546001600160a01b031633146106e8575f80fd5b60ff82165f8181526005602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d91016102f4565b5f80546107569061283a565b80601f01602080910402602001604051908101604052809291908181526020018280546107829061283a565b80156107cd5780601f106107a4576101008083540402835291602001916107cd565b820191905f5260205f20905b8154815290600101906020018083116107b057829003601f168201915b505050505081565b60606107e18383610c4a565b90505b92915050565b6107f2612239565b82516107fd90610dc6565b905061080d8160e0015183610ebf565b610815575f80fd5b5f61082382835f0151610f25565b604083015190915060ff16610838825f610fcc565b14610841575f80fd5b610120820181905260808201516108589042610a7c565b610860575f80fd5b61086e428360a00151610a7c565b610876575f80fd5b61088281838686611026565b5092915050565b6108978360a0015182610a7c565b61089f575f80fd5b825161ffff166032146108b0575f80fd5b6108bf83610120015183611106565b6108c7575f80fd5b505050565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a08201529061090583610a94565b60a081015160c08201519192506106cb91610921908290612880565b83519190611172565b5f6107e18360a001515f846112b4565b5f6109468284866113c1565b1561095d57610955828661092a565b159050610960565b505f5b949350505050565b60208101515f9060fe161561097b575f80fd5b5f610985866113e6565b90505f610991856113e6565b90505f8061099f8a82611401565b6109aa906001612893565b60ff1690505b8951811015610a6b57836109dc896109d784858f516109cf9190612880565b8f9190611424565b6114a4565b03610a3f575f6109f7876109d785868f516109cf9190612880565b90508660800151841015610a23578381118015610a175750866080015181105b95505050505050610a73565b83811180610a1757508660800151811095505050505050610a73565b905080610a4c8a82611401565b610a57906001612893565b610a649060ff16826128ac565b90506109b0565b505f93505050505b95945050505050565b5f80610a8883856128bf565b60030b12159392505050565b610a9c61228e565b6107e48261010001515f61152d565b60a084015184515f90610abe9083611548565b90505f8660a001518760c00151610ad59190612880565b9050818111610ae2575f80fd5b5f610aed868861159f565b9050805f03610b1a57610b0c610b0384866128ac565b895190876112b4565b15610b15575f80fd5b610b5b565b87515f90610b29908686611424565b90505f8213610b36575f80fd5b5f610b41898361159f565b12156104cf575f610b52888361159f565b126104cf575f80fd5b5050505050505050565b60c08101516020820181905281515111610b7c5750565b5f610b8e825f01518360200151611548565b8260200151610b9d91906128ac565b8251909150610bac90826116ec565b61ffff166040830152610bc06002826128ac565b8251909150610bcf90826116ec565b61ffff166060830152610be36002826128ac565b8251909150610bf29082611712565b63ffffffff166080830152610c086004826128ac565b82519091505f90610c1990836116ec565b61ffff169050610c2a6002836128ac565b60a084018190529150610c3d81836128ac565b60c0909301929092525050565b6060610c54612239565b610c5e84846107ea565b61012081015180516020918201205f908152600282526040808220845161ffff16835290925220805491925090600160401b900460601b6001600160601b03191615610cc35760a08201518154610cbb919063ffffffff16610a7c565b610cc3575f80fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301206001600160601b0319168688019081526101208a0180518051908501205f908152600285528981208c5161ffff16825290945292889020965187549451915190961c600160401b0268010000000000000000600160e01b03199186166401000000000267ffffffffffffffff19909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b92610db192916128e6565b60405180910390a15061010001519392505050565b610dce612239565b610dd8825f6116ec565b61ffff168152610de9826002611401565b60ff166020820152610dfc826003611401565b60ff166040820152610e0f826004611712565b63ffffffff9081166060830152610e2b90839060089061171216565b63ffffffff9081166080830152610e47908390600c9061171216565b63ffffffff90811660a0830152610e639083906010906116ec16565b61ffff1660c0820152610e7782601261173a565b60e0820181905251610eb490610e8e9060126128ac565b8260e001515160128551610ea29190612880565b610eac9190612880565b849190611424565b610100820152919050565b5f80610ed5610ece8483611548565b84906116ec565b83516020808601919091208651878301205f90815260028352604080822061ffff90951682529390925291902054600160401b900460601b6001600160601b031990811691161491505092915050565b60605f610f3184610a94565b90505b8051516020820151101561088257606081015161ffff16600114610f56575f80fd5b81515f03610f6e57610f6781611754565b9150610fa7565b60208101518151610f7e91611548565b825114610f89575f80fd5b805160208201518351610f9f9285925f92611775565b610fa7575f80fd5b8261ffff16816040015161ffff1614610fbe575f80fd5b610fc781610b65565b610f34565b5f805b83518310610fdf57610fdf61290a565b5f610fea8585611401565b60ff169050610ffa8160016128ac565b61100490856128ac565b9350805f0361101357506107e1565b61101e6001836128ac565b915050610fcf565b83518360e00151511115611038575f80fd5b61105c5f858560e0015151875161104f9190612880565b60e0870151929190611797565b611064575f80fd5b5f61106f828261152d565b9050602b61ffff16816040015161ffff160361109d576110908484836117cb565b611098575f80fd5b6110ff565b603061ffff16816040015161ffff16036110bc5761109084848361185f565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d985b1a59081c1c9bdbd988199bdd5b9960621b604482015260640160405180910390fd5b5050505050565b5f806111128482611401565b61111d906001612893565b60ff1690505f5b835181101561095d5761113984828785611797565b15611149576001925050506107e4565b6111538482611401565b61115e906001612893565b61116b9060ff16826128ac565b9050611124565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a0820152906111ac83856128ac565b90506111c26111bb5f866128ac565b8690611401565b60ff1682526111d56111bb6001866128ac565b60ff1660208301526111f26111eb6002866128ac565b86906116ec565b61ffff1660408301525f61121161120a6004876128ac565b8790611401565b905061121e6005866128ac565b945061122e868660ff8416611424565b606084015261124060ff8216866128ac565b94505f61124d8787611401565b905060208160ff16111561125f575f80fd5b61126a6001876128ac565b955061127a878760ff8416611900565b608085015261128c60ff8216876128ac565b95506112a48661129c8186612880565b899190611424565b60a0850152509195945050505050565b5f60ff600883811c82169183916112cc918616612932565b90505f6112dd600780871690612952565b600160ff919091161b9050855b87518110156113b4575f6112fe8983611401565b90505f61131661130f8460016128ac565b8b90611401565b90508160ff168660ff161015611334575f96505050505050506106cb565b8160ff168660ff1603611393578460ff168160ff161161135c575f96505050505050506106cb565b8361137f61136d60ff8816866128ac565b6113789060026128ac565b8c90611401565b1660ff165f141596505050505050506106cb565b61139e816002612893565b6113ab9060ff16846128ac565b925050506112ea565b505f979650505050505050565b5f806113cd85846114a4565b90505f6113d9856113e6565b9190911495945050505050565b5f6107e460016113f68484611401565b84919060ff1661193d565b5f82828151811061141457611414612826565b016020015160f81c905092915050565b825160609061143383856128ac565b111561143d575f80fd5b5f8267ffffffffffffffff811115611457576114576123d9565b6040519080825280601f01601f191660200182016040528015611481576020820181803683370190505b50905060208082019086860101611499828287611b43565b509095945050505050565b815160ff165f9081526005602052604080822054606085015182860151925163347ced5960e11b81526001600160a01b03909216926368f9dab2926114ee9291879160040161296b565b602060405180830381865afa158015611509573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e191906129a4565b61153561228e565b82815260c081018290526107e481610b65565b5f815b8351811061155b5761155b61290a565b5f6115668583611401565b60ff1690506115768160016128ac565b61158090836128ac565b9150805f0361158f5750611595565b5061154b565b6109608382612880565b5f6115aa8383611b98565b156115b657505f6107e4565b5f805f805f6115c5885f610fcc565b90505f6115d2885f610fcc565b90505b808211156115fe578593506115ea8987611bb3565b9550816115f6816129bb565b9250506115d5565b81811115611627578492506116138886611bb3565b94508061161f816129bb565b9150506115fe565b5f8211801561163f575061163d89878a88611797565b155b15611674578593506116518987611bb3565b95508492506116608886611bb3565b945061166d600183612880565b9150611627565b855f0361168a575f1996505050505050506107e4565b845f036116a057600196505050505050506107e4565b6116df6116ae8560016128ac565b6116b88b87611401565b60ff168a6116c78760016128ac565b6116d18d89611401565b8e949392919060ff16611bd6565b9998505050505050505050565b81515f906116fb8360026128ac565b1115611705575f80fd5b50016002015161ffff1690565b81515f906117218360046128ac565b111561172b575f80fd5b50016004015163ffffffff1690565b60605f6117478484611548565b9050610960848483611424565b602081015181516060916107e49161176c9082611548565b84519190611424565b5f611781848484611cc6565b61178c878785611cc6565b149695505050505050565b5f6117af83838486516117aa9190612880565b611cc6565b6117c186868789516117aa9190612880565b1495945050505050565b5f806117d685610a94565b90505b8051516020820151101561095d57604081015161ffff166030146117fb575f80fd5b5f61180582611ce8565b90505f61181e5f835184611d049092919063ffffffff16565b905061182c81838989611da0565b1561184f5761184561183d84611754565b868385611e9b565b93505050506106cb565b505061185a81610b65565b6117d9565b5f6118778460e0015161187184611754565b90611b98565b61187f575f80fd5b815151602083015110156118f75761189e8460e0015161187184611754565b6118a6575f80fd5b5f6118b083611ce8565b90505f6118c95f835184611d049092919063ffffffff16565b90506118d781838888611da0565b156118e7576001925050506106cb565b50506118f282610b65565b61187f565b505f9392505050565b5f602082111561190e575f80fd5b835161191a83856128ac565b1115611924575f80fd5b506020919092018101519190036101000a5f1901191690565b5f603482111561194b575f80fd5b5f80805b84811015611a29575f8761196383896128ac565b8151811061197357611973612826565b01602001516001600160f81b0319169050600360fc1b81108015906119a65750603d60f91b6001600160f81b0319821611155b6119ae575f80fd5b604051806080016040528060478152602001612b5c604791396119d6603060f884901c612880565b815181106119e6576119e6612826565b0160209081015160f81c93508311156119fd575f80fd5b611a08600187612880565b8203611a145750611a29565b5060059290921b60ff8216179160010161194f565b505f611a368560056129d0565b9050611a436008866129e7565b5f03611a5a578160ff16600584901b179250611b29565b611a656008866129e7565b600203611a935760028260ff16901c60ff16600384901b179250600281611a8c9190612880565b9050611b29565b611a9e6008866129e7565b600403611ac55760048260ff16901c60ff16600184901b179250600481611a8c9190612880565b611ad06008866129e7565b600503611af75760018260ff16901c60ff16600484901b179250600181611a8c9190612880565b611b026008866129e7565b6007036100e55760038260ff16901c60ff16600284901b179250600381611a8c9190612880565b611b3581610100612880565b9290921b9695505050505050565b60208110611b7b5781518352611b5a6020846128ac565b9250611b676020836128ac565b9150611b74602082612880565b9050611b43565b905182516020929092036101000a5f190180199091169116179052565b5f815183511480156107e157506107e1835f845f8751611775565b5f611bbe8383611401565b60ff16611bcc8360016128ac565b6107e191906128ac565b5f8480831015611be35750815b6020878901810190858701015f5b83811015611cab5782518251808214611c7b575f6020871115611c1657505f19611c52565b600184611c24896020612880565b611c2e91906128ac565b611c399060086129d0565b611c44906002612ada565b611c4e9190612880565b1990505b5f611c61838316858416612ae5565b90508015611c78579750611cbc9650505050505050565b50505b611c866020866128ac565b9450611c936020856128ac565b93505050602081611ca491906128ac565b9050611bf1565b50611cb68589612ae5565b93505050505b9695505050505050565b82515f90611cd483856128ac565b1115611cde575f80fd5b5091016020012090565b60a081015160c08201516060916107e49161176c908290612880565b604080516080810182525f8082526020820181905291810191909152606080820152611d3a611d335f856128ac565b85906116ec565b61ffff168152611d55611d4e6002856128ac565b8590611401565b60ff166020820152611d6b611d4e6003856128ac565b60ff166040820152611d94611d816004856128ac565b611d8c600485612880565b869190611424565b60608201529392505050565b5f846020015160ff16600314611db757505f610960565b826020015160ff16856040015160ff1614611dd357505f610960565b5f611ddd85611f96565b90508360c0015161ffff168161ffff1614611dfb575f915050610960565b8551610100165f03611e10575f915050610960565b60408087015160ff165f908152600360209081529082902054855191860151925163de8f50a160e01b81526001600160a01b039091169263de8f50a192611e5c928a9290600401612b04565b602060405180830381865afa158015611e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbc9190612b3c565b5f80611ea683611f96565b90505b84515160208601511015611f8b5760a085015160c08601515f91611edb91611ed2908290612880565b88519190611d04565b90508161ffff16815f015161ffff1614611ef55750611f7d565b846040015160ff16816020015160ff1614611f105750611f7d565b60408051808201909152606081525f6020820152611f3c85518951611f3591906128ac565b8290611ff7565b50611f47818961205a565b50611f52818661205a565b50611f698260400151825f0151846060015161207f565b15611f7a5760019350505050610960565b50505b611f8685610b65565b611ea9565b505f95945050505050565b5f805f5b8351811015611fe8576001811615611fbe57611fb68482611401565b60ff16611fd0565b6008611fca8583611401565b60ff16901b5b611fde9061ffff16836128ac565b9150600101611f9a565b506106cb601082901c826128ac565b60408051808201909152606081525f60208201526120166020836129e7565b1561203e576120266020836129e7565b612031906020612880565b61203b90836128ac565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526107e183845f015151848551612126565b60ff83165f908152600460205260408120546001600160a01b03166120a557505f6106cb565b60ff84165f90815260046020819052604091829020549151637bf41d7760e11b81526001600160a01b039092169163f7e83aee916120e79187918791016128e6565b602060405180830381865afa158015612102573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109609190612b3c565b60408051808201909152606081525f60208201528251821115612147575f80fd5b602085015161215683866128ac565b111561218957612189856121798760200151878661217491906128ac565b61220c565b6121849060026129d0565b612222565b5f808651805187602083010193508088870111156121a75787860182525b505050602084015b602084106121e757805182526121c66020836128ac565b91506121d36020826128ac565b90506121e0602085612880565b93506121af565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f8183111561221c5750816107e4565b50919050565b815161222e8383611ff7565b50610650838261205a565b60408051610140810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b803560ff811681146122e3575f80fd5b919050565b6001600160a01b03811681146122fc575f80fd5b50565b5f8060408385031215612310575f80fd5b612319836122d3565b91506020830135612329816122e8565b809150509250929050565b803561ffff811681146122e3575f80fd5b5f8083601f840112612355575f80fd5b50813567ffffffffffffffff81111561236c575f80fd5b602083019150836020828501011115612383575f80fd5b9250929050565b5f805f6040848603121561239c575f80fd5b6123a584612334565b9250602084013567ffffffffffffffff8111156123c0575f80fd5b6123cc86828701612345565b9497909650939450505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612416576124166123d9565b604052919050565b5f82601f83011261242d575f80fd5b813567ffffffffffffffff811115612447576124476123d9565b61245a601f8201601f19166020016123ed565b81815284602083860101111561246e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6040828403121561249a575f80fd5b6040516040810167ffffffffffffffff82821081831117156124be576124be6123d9565b8160405282935084359150808211156124d5575f80fd5b6124e18683870161241e565b835260208501359150808211156124f6575f80fd5b506125038582860161241e565b6020830152505092915050565b5f805f805f60a08688031215612524575f80fd5b61252d86612334565b9450602086013567ffffffffffffffff80821115612549575f80fd5b61255589838a0161241e565b9550604088013591508082111561256a575f80fd5b61257689838a0161248a565b9450606088013591508082111561258b575f80fd5b61259789838a0161248a565b935060808801359150808211156125ac575f80fd5b506125b98882890161241e565b9150509295509295909350565b5f602082840312156125d6575f80fd5b81356107e1816122e8565b5f805f80608085870312156125f4575f80fd5b6125fd85612334565b9350602085013567ffffffffffffffff80821115612619575f80fd5b6126258883890161241e565b9450604087013591508082111561263a575f80fd5b6126468883890161248a565b9350606087013591508082111561265b575f80fd5b506126688782880161241e565b91505092959194509250565b5f805f60408486031215612686575f80fd5b833567ffffffffffffffff8082111561269d575f80fd5b818601915086601f8301126126b0575f80fd5b81356020828211156126c4576126c46123d9565b8160051b6126d38282016123ed565b928352848101820192828101908b8511156126ec575f80fd5b83870192505b8483101561272657823586811115612708575f80fd5b6127168d86838b010161248a565b83525091830191908301906126f2565b985050508701359250508082111561273c575f80fd5b506123cc86828701612345565b5f81518084525f5b8181101561276d57602081850181015186830182015201612751565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6107e16020830184612749565b5f602082840312156127ae575f80fd5b6107e1826122d3565b5f80604083850312156127c8575f80fd5b823567ffffffffffffffff808211156127df575f80fd5b6127eb8683870161248a565b93506020850135915080821115612800575f80fd5b5061280d8582860161241e565b9150509250929050565b818382375f9101908152919050565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061284e57607f821691505b60208210810361221c57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156107e4576107e461286c565b60ff81811683821601908111156107e4576107e461286c565b808201808211156107e4576107e461286c565b600382810b9082900b03637fffffff198112637fffffff821317156107e4576107e461286c565b604081525f6128f86040830185612749565b8281036020840152610a738185612749565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f61ffff808416806129465761294661291e565b92169190910492915050565b60ff82811682821603908111156107e4576107e461286c565b606081525f61297d6060830186612749565b828103602084015261298f8186612749565b91505061ffff83166040830152949350505050565b5f602082840312156129b4575f80fd5b5051919050565b5f816129c9576129c961286c565b505f190190565b80820281158282048414176107e4576107e461286c565b5f826129f5576129f561291e565b500690565b600181815b80851115612a3457815f1904821115612a1a57612a1a61286c565b80851615612a2757918102915b93841c93908002906129ff565b509250929050565b5f82612a4a575060016107e4565b81612a5657505f6107e4565b8160018114612a6c5760028114612a7657612a92565b60019150506107e4565b60ff841115612a8757612a8761286c565b50506001821b6107e4565b5060208310610133831016604e8410600b8410161715612ab5575081810a6107e4565b612abf83836129fa565b805f1904821115612ad257612ad261286c565b029392505050565b5f6107e18383612a3c565b8181035f8312801583831316838312821617156108825761088261286c565b606081525f612b166060830186612749565b8281036020840152612b288186612749565b90508281036040840152611cbc8185612749565b5f60208284031215612b4c575f80fd5b815180151581146107e1575f80fdfe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/DotCoinBurner.json b/artifacts/DotCoinBurner.json index 27e2d31f..7f0b324b 100644 --- a/artifacts/DotCoinBurner.json +++ b/artifacts/DotCoinBurner.json @@ -47,8 +47,8 @@ "type": "function" } ], - "bytecode": "0x60a060405234801561001057600080fd5b5060405161047d38038061047d83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516103f361008a600039600060d401526103f36000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063100cdd9114610030575b600080fd5b61004361003e3660046102e3565b610045565b005b60005b818110156101cb5760007f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e284848481811061008557610085610358565b905060200201356040516020016100a6929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206331a9108f60e11b82526004820181905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd908290636352211e90602401602060405180830381865afa15801561012b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014f919061036e565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015261dead602482015260448101849052606401600060405180830381600087803b15801561019f57600080fd5b505af11580156101b3573d6000803e3d6000fd5b505050505080806101c3906103b4565b915050610048565b5080156102df577f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e282826102006001826103cd565b81811061020f5761020f610358565b90506020020135604051602001610230929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e28383600081811061027d5761027d610358565b9050602002013560405160200161029e929190918252602082015260400190565b60408051601f19818403018152908290528051602090910120907fdf423376f9b0ab363b1b4d6f0b4cb6821921ec30f491555a97236a8a38ce095a90600090a35b5050565b600080602083850312156102f657600080fd5b823567ffffffffffffffff8082111561030e57600080fd5b818501915085601f83011261032257600080fd5b81358181111561033157600080fd5b8660208260051b850101111561034657600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561038057600080fd5b81516001600160a01b038116811461039757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016103c6576103c661039e565b5060010190565b818103818111156103e0576103e061039e565b9291505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063100cdd9114610030575b600080fd5b61004361003e3660046102e3565b610045565b005b60005b818110156101cb5760007f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e284848481811061008557610085610358565b905060200201356040516020016100a6929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206331a9108f60e11b82526004820181905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd908290636352211e90602401602060405180830381865afa15801561012b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014f919061036e565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015261dead602482015260448101849052606401600060405180830381600087803b15801561019f57600080fd5b505af11580156101b3573d6000803e3d6000fd5b505050505080806101c3906103b4565b915050610048565b5080156102df577f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e282826102006001826103cd565b81811061020f5761020f610358565b90506020020135604051602001610230929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e28383600081811061027d5761027d610358565b9050602002013560405160200161029e929190918252602082015260400190565b60408051601f19818403018152908290528051602090910120907fdf423376f9b0ab363b1b4d6f0b4cb6821921ec30f491555a97236a8a38ce095a90600090a35b5050565b600080602083850312156102f657600080fd5b823567ffffffffffffffff8082111561030e57600080fd5b818501915085601f83011261032257600080fd5b81358181111561033157600080fd5b8660208260051b850101111561034657600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561038057600080fd5b81516001600160a01b038116811461039757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016103c6576103c661039e565b5060010190565b818103818111156103e0576103e061039e565b9291505056fea164736f6c6343000811000a", + "bytecode": "0x60a060405234801561000f575f80fd5b5060405161043238038061043283398101604081905261002e9161003f565b6001600160a01b031660805261006c565b5f6020828403121561004f575f80fd5b81516001600160a01b0381168114610065575f80fd5b9392505050565b6080516103af6100835f395f60cf01526103af5ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063100cdd911461002d575b5f80fd5b61004061003b3660046102cd565b610042565b005b5f5b818110156101b8575f7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e28484848181106100805761008061033c565b905060200201356040516020016100a1929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206331a9108f60e11b82526004820181905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd908290636352211e90602401602060405180830381865afa158015610124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101489190610350565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015261dead6024820152604481018490526064015f604051808303815f87803b158015610195575f80fd5b505af11580156101a7573d5f803e3d5ffd5b505060019093019250610044915050565b5080156102c9577f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e282826101ed60018261037d565b8181106101fc576101fc61033c565b9050602002013560405160200161021d929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e283835f8181106102685761026861033c565b90506020020135604051602001610289929190918252602082015260400190565b60408051601f19818403018152908290528051602090910120907fdf423376f9b0ab363b1b4d6f0b4cb6821921ec30f491555a97236a8a38ce095a905f90a35b5050565b5f80602083850312156102de575f80fd5b823567ffffffffffffffff808211156102f5575f80fd5b818501915085601f830112610308575f80fd5b813581811115610316575f80fd5b8660208260051b850101111561032a575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610360575f80fd5b81516001600160a01b0381168114610376575f80fd5b9392505050565b8181038181111561039c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063100cdd911461002d575b5f80fd5b61004061003b3660046102cd565b610042565b005b5f5b818110156101b8575f7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e28484848181106100805761008061033c565b905060200201356040516020016100a1929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206331a9108f60e11b82526004820181905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd908290636352211e90602401602060405180830381865afa158015610124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101489190610350565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015261dead6024820152604481018490526064015f604051808303815f87803b158015610195575f80fd5b505af11580156101a7573d5f803e3d5ffd5b505060019093019250610044915050565b5080156102c9577f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e282826101ed60018261037d565b8181106101fc576101fc61033c565b9050602002013560405160200161021d929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e283835f8181106102685761026861033c565b90506020020135604051602001610289929190918252602082015260400190565b60408051601f19818403018152908290528051602090910120907fdf423376f9b0ab363b1b4d6f0b4cb6821921ec30f491555a97236a8a38ce095a905f90a35b5050565b5f80602083850312156102de575f80fd5b823567ffffffffffffffff808211156102f5575f80fd5b818501915085601f830112610308575f80fd5b813581811115610316575f80fd5b8660208260051b850101111561032a575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610360575f80fd5b81516001600160a01b0381168114610376575f80fd5b9392505050565b8181038181111561039c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/DummyAlgorithm.json b/artifacts/DummyAlgorithm.json index f1a40bf7..4e10bf4a 100644 --- a/artifacts/DummyAlgorithm.json +++ b/artifacts/DummyAlgorithm.json @@ -33,8 +33,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061014e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b61004a61003e3660046100a7565b60019695505050505050565b604051901515815260200160405180910390f35b60008083601f84011261007057600080fd5b50813567ffffffffffffffff81111561008857600080fd5b6020830191508360208285010111156100a057600080fd5b9250929050565b600080600080600080606087890312156100c057600080fd5b863567ffffffffffffffff808211156100d857600080fd5b6100e48a838b0161005e565b909850965060208901359150808211156100fd57600080fd5b6101098a838b0161005e565b9096509450604089013591508082111561012257600080fd5b5061012f89828a0161005e565b979a969950949750929593949250505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b61004a61003e3660046100a7565b60019695505050505050565b604051901515815260200160405180910390f35b60008083601f84011261007057600080fd5b50813567ffffffffffffffff81111561008857600080fd5b6020830191508360208285010111156100a057600080fd5b9250929050565b600080600080600080606087890312156100c057600080fd5b863567ffffffffffffffff808211156100d857600080fd5b6100e48a838b0161005e565b909850965060208901359150808211156100fd57600080fd5b6101098a838b0161005e565b9096509450604089013591508082111561012257600080fd5b5061012f89828a0161005e565b979a969950949750929593949250505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506101408061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004761003b3660046100a0565b60019695505050505050565b604051901515815260200160405180910390f35b5f8083601f84011261006b575f80fd5b50813567ffffffffffffffff811115610082575f80fd5b602083019150836020828501011115610099575f80fd5b9250929050565b5f805f805f80606087890312156100b5575f80fd5b863567ffffffffffffffff808211156100cc575f80fd5b6100d88a838b0161005b565b909850965060208901359150808211156100f0575f80fd5b6100fc8a838b0161005b565b90965094506040890135915080821115610114575f80fd5b5061012189828a0161005b565b979a969950949750929593949250505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004761003b3660046100a0565b60019695505050505050565b604051901515815260200160405180910390f35b5f8083601f84011261006b575f80fd5b50813567ffffffffffffffff811115610082575f80fd5b602083019150836020828501011115610099575f80fd5b9250929050565b5f805f805f80606087890312156100b5575f80fd5b863567ffffffffffffffff808211156100cc575f80fd5b6100d88a838b0161005b565b909850965060208901359150808211156100f0575f80fd5b6100fc8a838b0161005b565b90965094506040890135915080821115610114575f80fd5b5061012189828a0161005b565b979a969950949750929593949250505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/DummyOracle.json b/artifacts/DummyOracle.json index c9b9f1d4..b71210d3 100644 --- a/artifacts/DummyOracle.json +++ b/artifacts/DummyOracle.json @@ -41,8 +41,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516100e83803806100e883398101604081905261002f9161003e565b61003881600055565b50610057565b60006020828403121561005057600080fd5b5051919050565b6083806100656000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806350d25bcd146037578063e5c19b2d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea164736f6c6343000811000a", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c806350d25bcd146037578063e5c19b2d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506040516100db3803806100db83398101604081905261002e9161003c565b610036815f55565b50610053565b5f6020828403121561004c575f80fd5b5051919050565b607c8061005f5f395ff3fe6080604052348015600e575f80fd5b50600436106030575f3560e01c806350d25bcd146034578063e5c19b2d146048575b5f80fd5b5f5460405190815260200160405180910390f35b605760533660046059565b5f55565b005b5f602082840312156068575f80fd5b503591905056fea164736f6c6343000818000a", + "deployedBytecode": "0x6080604052348015600e575f80fd5b50600436106030575f3560e01c806350d25bcd146034578063e5c19b2d146048575b5f80fd5b5f5460405190815260200160405180910390f35b605760533660046059565b5f55565b005b5f602082840312156068575f80fd5b503591905056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ENSRegistry.json b/artifacts/ENSRegistry.json index bb988757..0736e046 100644 --- a/artifacts/ENSRegistry.json +++ b/artifacts/ENSRegistry.json @@ -378,8 +378,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb580546001600160a01b0319163317905561098c806100596000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635b0fc9c3116100715780635b0fc9c3146101ab5780635ef2c7f0146101be578063a22cb465146101d1578063cf408823146101e4578063e985e9c5146101f7578063f79fe5381461024357600080fd5b80630178b8bf146100b957806302571be31461010257806306ab59231461011557806314ab90381461013657806316a25cbd1461014b5780631896f70a14610198575b600080fd5b6100e56100c73660046107a4565b6000908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e56101103660046107a4565b61026e565b6101286101233660046107d9565b61029c565b6040519081526020016100f9565b610149610144366004610826565b61036c565b005b61017f6101593660046107a4565b600090815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100f9565b6101496101a6366004610852565b61043f565b6101496101b9366004610852565b610504565b6101496101cc366004610875565b6105a6565b6101496101df3660046108cc565b6105c8565b6101496101f2366004610908565b610634565b610233610205366004610955565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100f9565b6102336102513660046107a4565b6000908152602081905260409020546001600160a01b0316151590565b6000818152602081905260408120546001600160a01b03163081036102965750600092915050565b92915050565b60008381526020819052604081205484906001600160a01b0316338114806102e757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6102f057600080fd5b60408051602080820189905281830188905282518083038401815260609092019092528051910120610322818661064f565b6040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b60008281526020819052604090205482906001600160a01b0316338114806103b757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6103c057600080fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b60008281526020819052604090205482906001600160a01b03163381148061048a57506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61049357600080fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a2505060009182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b60008281526020819052604090205482906001600160a01b03163381148061054f57506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61055857600080fd5b610562848461064f565b6040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b60006105b386868661029c565b90506105c081848461067d565b505050505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61063e8484610504565b61064984838361067d565b50505050565b60009182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000838152602081905260409020600101546001600160a01b03838116911614610703576000838152602081815260409182902060010180546001600160a01b0319166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff828116600160a01b909204161461079f5760008381526020818152604091829020600101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b6000602082840312156107b657600080fd5b5035919050565b80356001600160a01b03811681146107d457600080fd5b919050565b6000806000606084860312156107ee57600080fd5b8335925060208401359150610805604085016107bd565b90509250925092565b803567ffffffffffffffff811681146107d457600080fd5b6000806040838503121561083957600080fd5b823591506108496020840161080e565b90509250929050565b6000806040838503121561086557600080fd5b82359150610849602084016107bd565b600080600080600060a0868803121561088d57600080fd5b85359450602086013593506108a4604087016107bd565b92506108b2606087016107bd565b91506108c06080870161080e565b90509295509295909350565b600080604083850312156108df57600080fd5b6108e8836107bd565b9150602083013580151581146108fd57600080fd5b809150509250929050565b6000806000806080858703121561091e57600080fd5b8435935061092e602086016107bd565b925061093c604086016107bd565b915061094a6060860161080e565b905092959194509250565b6000806040838503121561096857600080fd5b610971836107bd565b9150610849602084016107bd56fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80635b0fc9c3116100715780635b0fc9c3146101ab5780635ef2c7f0146101be578063a22cb465146101d1578063cf408823146101e4578063e985e9c5146101f7578063f79fe5381461024357600080fd5b80630178b8bf146100b957806302571be31461010257806306ab59231461011557806314ab90381461013657806316a25cbd1461014b5780631896f70a14610198575b600080fd5b6100e56100c73660046107a4565b6000908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e56101103660046107a4565b61026e565b6101286101233660046107d9565b61029c565b6040519081526020016100f9565b610149610144366004610826565b61036c565b005b61017f6101593660046107a4565b600090815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100f9565b6101496101a6366004610852565b61043f565b6101496101b9366004610852565b610504565b6101496101cc366004610875565b6105a6565b6101496101df3660046108cc565b6105c8565b6101496101f2366004610908565b610634565b610233610205366004610955565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100f9565b6102336102513660046107a4565b6000908152602081905260409020546001600160a01b0316151590565b6000818152602081905260408120546001600160a01b03163081036102965750600092915050565b92915050565b60008381526020819052604081205484906001600160a01b0316338114806102e757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6102f057600080fd5b60408051602080820189905281830188905282518083038401815260609092019092528051910120610322818661064f565b6040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b60008281526020819052604090205482906001600160a01b0316338114806103b757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6103c057600080fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b60008281526020819052604090205482906001600160a01b03163381148061048a57506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61049357600080fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a2505060009182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b60008281526020819052604090205482906001600160a01b03163381148061054f57506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61055857600080fd5b610562848461064f565b6040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b60006105b386868661029c565b90506105c081848461067d565b505050505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61063e8484610504565b61064984838361067d565b50505050565b60009182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000838152602081905260409020600101546001600160a01b03838116911614610703576000838152602081815260409182902060010180546001600160a01b0319166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff828116600160a01b909204161461079f5760008381526020818152604091829020600101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b6000602082840312156107b657600080fd5b5035919050565b80356001600160a01b03811681146107d457600080fd5b919050565b6000806000606084860312156107ee57600080fd5b8335925060208401359150610805604085016107bd565b90509250925092565b803567ffffffffffffffff811681146107d457600080fd5b6000806040838503121561083957600080fd5b823591506108496020840161080e565b90509250929050565b6000806040838503121561086557600080fd5b82359150610849602084016107bd565b600080600080600060a0868803121561088d57600080fd5b85359450602086013593506108a4604087016107bd565b92506108b2606087016107bd565b91506108c06080870161080e565b90509295509295909350565b600080604083850312156108df57600080fd5b6108e8836107bd565b9150602083013580151581146108fd57600080fd5b809150509250929050565b6000806000806080858703121561091e57600080fd5b8435935061092e602086016107bd565b925061093c604086016107bd565b915061094a6060860161080e565b905092959194509250565b6000806040838503121561096857600080fd5b610971836107bd565b9150610849602084016107bd56fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b505f8080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb580546001600160a01b03191633179055610956806100555f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80635b0fc9c31161006e5780635b0fc9c3146101a55780635ef2c7f0146101b8578063a22cb465146101cb578063cf408823146101de578063e985e9c5146101f1578063f79fe5381461023c575f80fd5b80630178b8bf146100b557806302571be3146100fd57806306ab59231461011057806314ab90381461013157806316a25cbd146101465780631896f70a14610192575b5f80fd5b6100e06100c3366004610785565b5f908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e061010b366004610785565b610266565b61012361011e3660046107b7565b610292565b6040519081526020016100f4565b61014461013f366004610800565b61035f565b005b610179610154366004610785565b5f90815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100f4565b6101446101a036600461082a565b61042e565b6101446101b336600461082a565b6104ef565b6101446101c636600461084b565b61058e565b6101446101d936600461089e565b6105af565b6101446101ec3660046108d7565b61061a565b61022c6101ff366004610921565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100f4565b61022c61024a366004610785565b5f908152602081905260409020546001600160a01b0316151590565b5f818152602081905260408120546001600160a01b031630810361028c57505f92915050565b92915050565b5f8381526020819052604081205484906001600160a01b0316338114806102db57506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6102e3575f80fd5b604080516020808201899052818301889052825180830384018152606090920190925280519101206103158186610635565b6040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b5f8281526020819052604090205482906001600160a01b0316338114806103a857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6103b0575f80fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a250505f91825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061047757506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b61047f575f80fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a250505f9182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061053857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b610540575f80fd5b61054a8484610635565b6040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b5f61059a868686610292565b90506105a7818484610662565b505050505050565b335f8181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61062484846104ef565b61062f848383610662565b50505050565b5f9182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f838152602081905260409020600101546001600160a01b038381169116146106e6575f838152602081815260409182902060010180546001600160a01b0319166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b5f8381526020819052604090206001015467ffffffffffffffff828116600160a01b9092041614610780575f8381526020818152604091829020600101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b5f60208284031215610795575f80fd5b5035919050565b80356001600160a01b03811681146107b2575f80fd5b919050565b5f805f606084860312156107c9575f80fd5b83359250602084013591506107e06040850161079c565b90509250925092565b803567ffffffffffffffff811681146107b2575f80fd5b5f8060408385031215610811575f80fd5b82359150610821602084016107e9565b90509250929050565b5f806040838503121561083b575f80fd5b823591506108216020840161079c565b5f805f805f60a0868803121561085f575f80fd5b85359450602086013593506108766040870161079c565b92506108846060870161079c565b9150610892608087016107e9565b90509295509295909350565b5f80604083850312156108af575f80fd5b6108b88361079c565b9150602083013580151581146108cc575f80fd5b809150509250929050565b5f805f80608085870312156108ea575f80fd5b843593506108fa6020860161079c565b92506109086040860161079c565b9150610916606086016107e9565b905092959194509250565b5f8060408385031215610932575f80fd5b61093b8361079c565b91506108216020840161079c56fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80635b0fc9c31161006e5780635b0fc9c3146101a55780635ef2c7f0146101b8578063a22cb465146101cb578063cf408823146101de578063e985e9c5146101f1578063f79fe5381461023c575f80fd5b80630178b8bf146100b557806302571be3146100fd57806306ab59231461011057806314ab90381461013157806316a25cbd146101465780631896f70a14610192575b5f80fd5b6100e06100c3366004610785565b5f908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e061010b366004610785565b610266565b61012361011e3660046107b7565b610292565b6040519081526020016100f4565b61014461013f366004610800565b61035f565b005b610179610154366004610785565b5f90815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100f4565b6101446101a036600461082a565b61042e565b6101446101b336600461082a565b6104ef565b6101446101c636600461084b565b61058e565b6101446101d936600461089e565b6105af565b6101446101ec3660046108d7565b61061a565b61022c6101ff366004610921565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100f4565b61022c61024a366004610785565b5f908152602081905260409020546001600160a01b0316151590565b5f818152602081905260408120546001600160a01b031630810361028c57505f92915050565b92915050565b5f8381526020819052604081205484906001600160a01b0316338114806102db57506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6102e3575f80fd5b604080516020808201899052818301889052825180830384018152606090920190925280519101206103158186610635565b6040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b5f8281526020819052604090205482906001600160a01b0316338114806103a857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6103b0575f80fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a250505f91825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061047757506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b61047f575f80fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a250505f9182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061053857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b610540575f80fd5b61054a8484610635565b6040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b5f61059a868686610292565b90506105a7818484610662565b505050505050565b335f8181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61062484846104ef565b61062f848383610662565b50505050565b5f9182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f838152602081905260409020600101546001600160a01b038381169116146106e6575f838152602081815260409182902060010180546001600160a01b0319166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b5f8381526020819052604090206001015467ffffffffffffffff828116600160a01b9092041614610780575f8381526020818152604091829020600101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b5f60208284031215610795575f80fd5b5035919050565b80356001600160a01b03811681146107b2575f80fd5b919050565b5f805f606084860312156107c9575f80fd5b83359250602084013591506107e06040850161079c565b90509250925092565b803567ffffffffffffffff811681146107b2575f80fd5b5f8060408385031215610811575f80fd5b82359150610821602084016107e9565b90509250929050565b5f806040838503121561083b575f80fd5b823591506108216020840161079c565b5f805f805f60a0868803121561085f575f80fd5b85359450602086013593506108766040870161079c565b92506108846060870161079c565b9150610892608087016107e9565b90509295509295909350565b5f80604083850312156108af575f80fd5b6108b88361079c565b9150602083013580151581146108cc575f80fd5b809150509250929050565b5f805f80608085870312156108ea575f80fd5b843593506108fa6020860161079c565b92506109086040860161079c565b9150610916606086016107e9565b905092959194509250565b5f8060408385031215610932575f80fd5b61093b8361079c565b91506108216020840161079c56fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC1155PresetMinterPauserUpgradeable.json b/artifacts/ERC1155PresetMinterPauserUpgradeable.json index a2089178..249780b8 100644 --- a/artifacts/ERC1155PresetMinterPauserUpgradeable.json +++ b/artifacts/ERC1155PresetMinterPauserUpgradeable.json @@ -751,8 +751,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50612ce5806100206000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80638456cb59116100de578063d539139311610097578063e985e9c511610071578063e985e9c514610377578063f242432a146103b3578063f5298aca146103c6578063f62d1888146103d957600080fd5b8063d53913931461033a578063d547741f1461034f578063e63ab1e91461036257600080fd5b80638456cb59146102c65780639010d07c146102ce57806391d14854146102f9578063a217fddf1461030c578063a22cb46514610314578063ca15c8731461032757600080fd5b80632f2ff15d1161014b5780634e1273f4116101255780634e1273f4146102745780635c975abb146102945780636b20c454146102a0578063731133e9146102b357600080fd5b80632f2ff15d1461024657806336568abe146102595780633f4ba83a1461026c57600080fd5b8062fdd58e1461019257806301ffc9a7146101b85780630e89341c146101db5780631f7fdffa146101fb578063248a9ca3146102105780632eb2c2d614610233575b600080fd5b6101a56101a0366004611edd565b6103ec565b6040519081526020015b60405180910390f35b6101cb6101c6366004611f1d565b610487565b60405190151581526020016101af565b6101ee6101e9366004611f3a565b610492565b6040516101af9190611fa3565b61020e610209366004612109565b610526565b005b6101a561021e366004611f3a565b60009081526065602052604090206001015490565b61020e6102413660046121a1565b61056c565b61020e61025436600461224a565b6105b8565b61020e61026736600461224a565b6105e2565b61020e610660565b610287610282366004612276565b6106f4565b6040516101af919061237b565b61012d5460ff166101cb565b61020e6102ae36600461238e565b61081d565b61020e6102c1366004612401565b610860565b61020e6108a0565b6102e16102dc366004612455565b610932565b6040516001600160a01b0390911681526020016101af565b6101cb61030736600461224a565b610951565b6101a5600081565b61020e610322366004612477565b61097c565b6101a5610335366004611f3a565b610987565b6101a5600080516020612cb983398151915281565b61020e61035d36600461224a565b61099e565b6101a5600080516020612c9983398151915281565b6101cb6103853660046124b3565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205460ff1690565b61020e6103c13660046124dd565b6109c3565b61020e6103d4366004612541565b610a08565b61020e6103e7366004612574565b610a4b565b60006001600160a01b03831661045c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b50600081815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b600061048182610b5d565b606060cb80546104a1906125c4565b80601f01602080910402602001604051908101604052809291908181526020018280546104cd906125c4565b801561051a5780601f106104ef5761010080835404028352916020019161051a565b820191906000526020600020905b8154815290600101906020018083116104fd57829003601f168201915b50505050509050919050565b61053e600080516020612cb983398151915233610951565b61055a5760405162461bcd60e51b8152600401610453906125fe565b61056684848484610b9d565b50505050565b6001600160a01b03851633148061058857506105888533610385565b6105a45760405162461bcd60e51b81526004016104539061265b565b6105b18585858585610cf8565b5050505050565b6000828152606560205260409020600101546105d381610ea5565b6105dd8383610eb2565b505050565b6001600160a01b03811633146106525760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610453565b61065c8282610ed4565b5050565b610678600080516020612c9983398151915233610951565b6106ea5760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610453565b6106f2610ef6565b565b606081518351146107595760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610453565b600083516001600160401b0381111561077457610774611fb6565b60405190808252806020026020018201604052801561079d578160200160208202803683370190505b50905060005b8451811015610815576107e88582815181106107c1576107c16126aa565b60200260200101518583815181106107db576107db6126aa565b60200260200101516103ec565b8282815181106107fa576107fa6126aa565b602090810291909101015261080e816126d6565b90506107a3565b509392505050565b6001600160a01b03831633148061083957506108398333610385565b6108555760405162461bcd60e51b81526004016104539061265b565b6105dd838383610f49565b610878600080516020612cb983398151915233610951565b6108945760405162461bcd60e51b8152600401610453906125fe565b610566848484846110e8565b6108b8600080516020612c9983398151915233610951565b61092a5760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610453565b6106f26111d3565b600082815260976020526040812061094a9083611211565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61065c33838361121d565b6000818152609760205260408120610481906112fd565b6000828152606560205260409020600101546109b981610ea5565b6105dd8383610ed4565b6001600160a01b0385163314806109df57506109df8533610385565b6109fb5760405162461bcd60e51b81526004016104539061265b565b6105b18585858585611307565b6001600160a01b038316331480610a245750610a248333610385565b610a405760405162461bcd60e51b81526004016104539061265b565b6105dd838383611443565b600054610100900460ff1615808015610a6b5750600054600160ff909116105b80610a855750303b158015610a85575060005460ff166001145b610ae85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610453565b6000805460ff191660011790558015610b0b576000805461ff0019166101001790555b610b148261155f565b801561065c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60006001600160e01b03198216636cdb3d1360e11b1480610b8e57506001600160e01b031982166303a24d0760e21b145b806104815750610481826115a0565b6001600160a01b038416610bc35760405162461bcd60e51b8152600401610453906126ef565b8151835114610be45760405162461bcd60e51b815260040161045390612730565b33610bf4816000878787876115c5565b60005b8451811015610c9057838181518110610c1257610c126126aa565b602002602001015160c96000878481518110610c3057610c306126aa565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c789190612778565b90915550819050610c88816126d6565b915050610bf7565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ce192919061278b565b60405180910390a46105b1816000878787876115d3565b8151835114610d195760405162461bcd60e51b815260040161045390612730565b6001600160a01b038416610d3f5760405162461bcd60e51b8152600401610453906127b9565b33610d4e8187878787876115c5565b60005b8451811015610e37576000858281518110610d6e57610d6e6126aa565b602002602001015190506000858381518110610d8c57610d8c6126aa565b602090810291909101810151600084815260c9835260408082206001600160a01b038e168352909352919091205490915081811015610ddd5760405162461bcd60e51b8152600401610453906127fe565b600083815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610e1c908490612778565b9250508190555050505080610e30906126d6565b9050610d51565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e8792919061278b565b60405180910390a4610e9d8187878787876115d3565b505050505050565b610eaf813361172e565b50565b610ebc8282611792565b60008281526097602052604090206105dd9082611818565b610ede828261182d565b60008281526097602052604090206105dd9082611894565b610efe6118a9565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316610f6f5760405162461bcd60e51b815260040161045390612848565b8051825114610f905760405162461bcd60e51b815260040161045390612730565b6000339050610fb3818560008686604051806020016040528060008152506115c5565b60005b835181101561107b576000848281518110610fd357610fd36126aa565b602002602001015190506000848381518110610ff157610ff16126aa565b602090810291909101810151600084815260c9835260408082206001600160a01b038c1683529093529190912054909150818110156110425760405162461bcd60e51b81526004016104539061288b565b600092835260c9602090815260408085206001600160a01b038b1686529091529092209103905580611073816126d6565b915050610fb6565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516110cc92919061278b565b60405180910390a4604080516020810190915260009052610566565b6001600160a01b03841661110e5760405162461bcd60e51b8152600401610453906126ef565b33600061111a856118f3565b90506000611127856118f3565b9050611138836000898585896115c5565b600086815260c9602090815260408083206001600160a01b038b1684529091528120805487929061116a908490612778565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111ca8360008989898961193e565b50505050505050565b6111db6119f9565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f2c3390565b600061094a8383611a40565b816001600160a01b0316836001600160a01b0316036112905760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610453565b6001600160a01b03838116600081815260ca6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610481825490565b6001600160a01b03841661132d5760405162461bcd60e51b8152600401610453906127b9565b336000611339856118f3565b90506000611346856118f3565b90506113568389898585896115c5565b600086815260c9602090815260408083206001600160a01b038c168452909152902054858110156113995760405162461bcd60e51b8152600401610453906127fe565b600087815260c9602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906113d8908490612778565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611438848a8a8a8a8a61193e565b505050505050505050565b6001600160a01b0383166114695760405162461bcd60e51b815260040161045390612848565b336000611475846118f3565b90506000611482846118f3565b90506114a2838760008585604051806020016040528060008152506115c5565b600085815260c9602090815260408083206001600160a01b038a168452909152902054848110156114e55760405162461bcd60e51b81526004016104539061288b565b600086815260c9602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526111ca565b600054610100900460ff166115865760405162461bcd60e51b8152600401610453906128cf565b61158f81611a6a565b611597611a9a565b610eaf81611ace565b60006001600160e01b03198216635a05180f60e01b1480610481575061048182611b30565b610e9d868686868686611b65565b6001600160a01b0384163b15610e9d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611617908990899088908890889060040161291a565b6020604051808303816000875af1925050508015611652575060408051601f3d908101601f1916820190925261164f91810190612978565b60015b6116fe5761165e612995565b806308c379a00361169757506116726129b1565b8061167d5750611699565b8060405162461bcd60e51b81526004016104539190611fa3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610453565b6001600160e01b0319811663bc197c8160e01b146111ca5760405162461bcd60e51b815260040161045390612a3a565b6117388282610951565b61065c57611750816001600160a01b03166014611bce565b61175b836020611bce565b60405160200161176c929190612a82565b60408051601f198184030181529082905262461bcd60e51b825261045391600401611fa3565b61179c8282610951565b61065c5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117d43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061094a836001600160a01b038416611d69565b6118378282610951565b1561065c5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061094a836001600160a01b038416611db8565b61012d5460ff166106f25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610453565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061192d5761192d6126aa565b602090810291909101015292915050565b6001600160a01b0384163b15610e9d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119829089908990889088908890600401612af7565b6020604051808303816000875af19250505080156119bd575060408051601f3d908101601f191682019092526119ba91810190612978565b60015b6119c95761165e612995565b6001600160e01b0319811663f23a6e6160e01b146111ca5760405162461bcd60e51b815260040161045390612a3a565b61012d5460ff16156106f25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610453565b6000826000018281548110611a5757611a576126aa565b9060005260206000200154905092915050565b600054610100900460ff16611a915760405162461bcd60e51b8152600401610453906128cf565b610eaf81611eab565b600054610100900460ff16611ac15760405162461bcd60e51b8152600401610453906128cf565b61012d805460ff19169055565b600054610100900460ff16611af55760405162461bcd60e51b8152600401610453906128cf565b611b00600033611eb7565b611b18600080516020612cb983398151915233611eb7565b610eaf600080516020612c9983398151915233611eb7565b60006001600160e01b03198216637965db0b60e01b148061048157506301ffc9a760e01b6001600160e01b0319831614610481565b61012d5460ff1615610e9d5760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610453565b60606000611bdd836002612b3c565b611be8906002612778565b6001600160401b03811115611bff57611bff611fb6565b6040519080825280601f01601f191660200182016040528015611c29576020820181803683370190505b509050600360fc1b81600081518110611c4457611c446126aa565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c7357611c736126aa565b60200101906001600160f81b031916908160001a9053506000611c97846002612b3c565b611ca2906001612778565b90505b6001811115611d1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cd657611cd66126aa565b1a60f81b828281518110611cec57611cec6126aa565b60200101906001600160f81b031916908160001a90535060049490941c93611d1381612b53565b9050611ca5565b50831561094a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610453565b6000818152600183016020526040812054611db057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610481565b506000610481565b60008181526001830160205260408120548015611ea1576000611ddc600183612b6a565b8554909150600090611df090600190612b6a565b9050818114611e55576000866000018281548110611e1057611e106126aa565b9060005260206000200154905080876000018481548110611e3357611e336126aa565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e6657611e66612b7d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610481565b6000915050610481565b60cb61065c8282612bd9565b61065c8282610eb2565b80356001600160a01b0381168114611ed857600080fd5b919050565b60008060408385031215611ef057600080fd5b611ef983611ec1565b946020939093013593505050565b6001600160e01b031981168114610eaf57600080fd5b600060208284031215611f2f57600080fd5b813561094a81611f07565b600060208284031215611f4c57600080fd5b5035919050565b60005b83811015611f6e578181015183820152602001611f56565b50506000910152565b60008151808452611f8f816020860160208601611f53565b601f01601f19169290920160200192915050565b60208152600061094a6020830184611f77565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611ff157611ff1611fb6565b6040525050565b60006001600160401b0382111561201157612011611fb6565b5060051b60200190565b600082601f83011261202c57600080fd5b8135602061203982611ff8565b6040516120468282611fcc565b83815260059390931b850182019282810191508684111561206657600080fd5b8286015b84811015612081578035835291830191830161206a565b509695505050505050565b60006001600160401b038311156120a5576120a5611fb6565b6040516120bc601f8501601f191660200182611fcc565b8091508381528484840111156120d157600080fd5b83836020830137600060208583010152509392505050565b600082601f8301126120fa57600080fd5b61094a8383356020850161208c565b6000806000806080858703121561211f57600080fd5b61212885611ec1565b935060208501356001600160401b038082111561214457600080fd5b6121508883890161201b565b9450604087013591508082111561216657600080fd5b6121728883890161201b565b9350606087013591508082111561218857600080fd5b50612195878288016120e9565b91505092959194509250565b600080600080600060a086880312156121b957600080fd5b6121c286611ec1565b94506121d060208701611ec1565b935060408601356001600160401b03808211156121ec57600080fd5b6121f889838a0161201b565b9450606088013591508082111561220e57600080fd5b61221a89838a0161201b565b9350608088013591508082111561223057600080fd5b5061223d888289016120e9565b9150509295509295909350565b6000806040838503121561225d57600080fd5b8235915061226d60208401611ec1565b90509250929050565b6000806040838503121561228957600080fd5b82356001600160401b03808211156122a057600080fd5b818501915085601f8301126122b457600080fd5b813560206122c182611ff8565b6040516122ce8282611fcc565b83815260059390931b85018201928281019150898411156122ee57600080fd5b948201945b838610156123135761230486611ec1565b825294820194908201906122f3565b9650508601359250508082111561232957600080fd5b506123368582860161201b565b9150509250929050565b600081518084526020808501945080840160005b8381101561237057815187529582019590820190600101612354565b509495945050505050565b60208152600061094a6020830184612340565b6000806000606084860312156123a357600080fd5b6123ac84611ec1565b925060208401356001600160401b03808211156123c857600080fd5b6123d48783880161201b565b935060408601359150808211156123ea57600080fd5b506123f78682870161201b565b9150509250925092565b6000806000806080858703121561241757600080fd5b61242085611ec1565b9350602085013592506040850135915060608501356001600160401b0381111561244957600080fd5b612195878288016120e9565b6000806040838503121561246857600080fd5b50508035926020909101359150565b6000806040838503121561248a57600080fd5b61249383611ec1565b9150602083013580151581146124a857600080fd5b809150509250929050565b600080604083850312156124c657600080fd5b6124cf83611ec1565b915061226d60208401611ec1565b600080600080600060a086880312156124f557600080fd5b6124fe86611ec1565b945061250c60208701611ec1565b9350604086013592506060860135915060808601356001600160401b0381111561253557600080fd5b61223d888289016120e9565b60008060006060848603121561255657600080fd5b61255f84611ec1565b95602085013595506040909401359392505050565b60006020828403121561258657600080fd5b81356001600160401b0381111561259c57600080fd5b8201601f810184136125ad57600080fd5b6125bc8482356020840161208c565b949350505050565b600181811c908216806125d857607f821691505b6020821081036125f857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126e8576126e86126c0565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b80820180821115610481576104816126c0565b60408152600061279e6040830185612340565b82810360208401526127b08185612340565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061294690830186612340565b82810360608401526129588186612340565b9050828103608084015261296c8185611f77565b98975050505050505050565b60006020828403121561298a57600080fd5b815161094a81611f07565b600060033d11156129ae5760046000803e5060005160e01c5b90565b600060443d10156129bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156129ee57505050505090565b8285019150815181811115612a065750505050505090565b843d8701016020828501011115612a205750505050505090565b612a2f60208286010187611fcc565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612aba816017850160208801611f53565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612aeb816028840160208801611f53565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b3190830184611f77565b979650505050505050565b8082028115828204841417610481576104816126c0565b600081612b6257612b626126c0565b506000190190565b81810381811115610481576104816126c0565b634e487b7160e01b600052603160045260246000fd5b601f8211156105dd57600081815260208120601f850160051c81016020861015612bba5750805b601f850160051c820191505b81811015610e9d57828155600101612bc6565b81516001600160401b03811115612bf257612bf2611fb6565b612c0681612c0084546125c4565b84612b93565b602080601f831160018114612c3b5760008415612c235750858301515b600019600386901b1c1916600185901b178555610e9d565b600085815260208120601f198616915b82811015612c6a57888601518255948401946001909101908401612c4b565b5085821015612c885787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80638456cb59116100de578063d539139311610097578063e985e9c511610071578063e985e9c514610377578063f242432a146103b3578063f5298aca146103c6578063f62d1888146103d957600080fd5b8063d53913931461033a578063d547741f1461034f578063e63ab1e91461036257600080fd5b80638456cb59146102c65780639010d07c146102ce57806391d14854146102f9578063a217fddf1461030c578063a22cb46514610314578063ca15c8731461032757600080fd5b80632f2ff15d1161014b5780634e1273f4116101255780634e1273f4146102745780635c975abb146102945780636b20c454146102a0578063731133e9146102b357600080fd5b80632f2ff15d1461024657806336568abe146102595780633f4ba83a1461026c57600080fd5b8062fdd58e1461019257806301ffc9a7146101b85780630e89341c146101db5780631f7fdffa146101fb578063248a9ca3146102105780632eb2c2d614610233575b600080fd5b6101a56101a0366004611edd565b6103ec565b6040519081526020015b60405180910390f35b6101cb6101c6366004611f1d565b610487565b60405190151581526020016101af565b6101ee6101e9366004611f3a565b610492565b6040516101af9190611fa3565b61020e610209366004612109565b610526565b005b6101a561021e366004611f3a565b60009081526065602052604090206001015490565b61020e6102413660046121a1565b61056c565b61020e61025436600461224a565b6105b8565b61020e61026736600461224a565b6105e2565b61020e610660565b610287610282366004612276565b6106f4565b6040516101af919061237b565b61012d5460ff166101cb565b61020e6102ae36600461238e565b61081d565b61020e6102c1366004612401565b610860565b61020e6108a0565b6102e16102dc366004612455565b610932565b6040516001600160a01b0390911681526020016101af565b6101cb61030736600461224a565b610951565b6101a5600081565b61020e610322366004612477565b61097c565b6101a5610335366004611f3a565b610987565b6101a5600080516020612cb983398151915281565b61020e61035d36600461224a565b61099e565b6101a5600080516020612c9983398151915281565b6101cb6103853660046124b3565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205460ff1690565b61020e6103c13660046124dd565b6109c3565b61020e6103d4366004612541565b610a08565b61020e6103e7366004612574565b610a4b565b60006001600160a01b03831661045c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b50600081815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b600061048182610b5d565b606060cb80546104a1906125c4565b80601f01602080910402602001604051908101604052809291908181526020018280546104cd906125c4565b801561051a5780601f106104ef5761010080835404028352916020019161051a565b820191906000526020600020905b8154815290600101906020018083116104fd57829003601f168201915b50505050509050919050565b61053e600080516020612cb983398151915233610951565b61055a5760405162461bcd60e51b8152600401610453906125fe565b61056684848484610b9d565b50505050565b6001600160a01b03851633148061058857506105888533610385565b6105a45760405162461bcd60e51b81526004016104539061265b565b6105b18585858585610cf8565b5050505050565b6000828152606560205260409020600101546105d381610ea5565b6105dd8383610eb2565b505050565b6001600160a01b03811633146106525760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610453565b61065c8282610ed4565b5050565b610678600080516020612c9983398151915233610951565b6106ea5760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610453565b6106f2610ef6565b565b606081518351146107595760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610453565b600083516001600160401b0381111561077457610774611fb6565b60405190808252806020026020018201604052801561079d578160200160208202803683370190505b50905060005b8451811015610815576107e88582815181106107c1576107c16126aa565b60200260200101518583815181106107db576107db6126aa565b60200260200101516103ec565b8282815181106107fa576107fa6126aa565b602090810291909101015261080e816126d6565b90506107a3565b509392505050565b6001600160a01b03831633148061083957506108398333610385565b6108555760405162461bcd60e51b81526004016104539061265b565b6105dd838383610f49565b610878600080516020612cb983398151915233610951565b6108945760405162461bcd60e51b8152600401610453906125fe565b610566848484846110e8565b6108b8600080516020612c9983398151915233610951565b61092a5760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610453565b6106f26111d3565b600082815260976020526040812061094a9083611211565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61065c33838361121d565b6000818152609760205260408120610481906112fd565b6000828152606560205260409020600101546109b981610ea5565b6105dd8383610ed4565b6001600160a01b0385163314806109df57506109df8533610385565b6109fb5760405162461bcd60e51b81526004016104539061265b565b6105b18585858585611307565b6001600160a01b038316331480610a245750610a248333610385565b610a405760405162461bcd60e51b81526004016104539061265b565b6105dd838383611443565b600054610100900460ff1615808015610a6b5750600054600160ff909116105b80610a855750303b158015610a85575060005460ff166001145b610ae85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610453565b6000805460ff191660011790558015610b0b576000805461ff0019166101001790555b610b148261155f565b801561065c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60006001600160e01b03198216636cdb3d1360e11b1480610b8e57506001600160e01b031982166303a24d0760e21b145b806104815750610481826115a0565b6001600160a01b038416610bc35760405162461bcd60e51b8152600401610453906126ef565b8151835114610be45760405162461bcd60e51b815260040161045390612730565b33610bf4816000878787876115c5565b60005b8451811015610c9057838181518110610c1257610c126126aa565b602002602001015160c96000878481518110610c3057610c306126aa565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c789190612778565b90915550819050610c88816126d6565b915050610bf7565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ce192919061278b565b60405180910390a46105b1816000878787876115d3565b8151835114610d195760405162461bcd60e51b815260040161045390612730565b6001600160a01b038416610d3f5760405162461bcd60e51b8152600401610453906127b9565b33610d4e8187878787876115c5565b60005b8451811015610e37576000858281518110610d6e57610d6e6126aa565b602002602001015190506000858381518110610d8c57610d8c6126aa565b602090810291909101810151600084815260c9835260408082206001600160a01b038e168352909352919091205490915081811015610ddd5760405162461bcd60e51b8152600401610453906127fe565b600083815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610e1c908490612778565b9250508190555050505080610e30906126d6565b9050610d51565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e8792919061278b565b60405180910390a4610e9d8187878787876115d3565b505050505050565b610eaf813361172e565b50565b610ebc8282611792565b60008281526097602052604090206105dd9082611818565b610ede828261182d565b60008281526097602052604090206105dd9082611894565b610efe6118a9565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316610f6f5760405162461bcd60e51b815260040161045390612848565b8051825114610f905760405162461bcd60e51b815260040161045390612730565b6000339050610fb3818560008686604051806020016040528060008152506115c5565b60005b835181101561107b576000848281518110610fd357610fd36126aa565b602002602001015190506000848381518110610ff157610ff16126aa565b602090810291909101810151600084815260c9835260408082206001600160a01b038c1683529093529190912054909150818110156110425760405162461bcd60e51b81526004016104539061288b565b600092835260c9602090815260408085206001600160a01b038b1686529091529092209103905580611073816126d6565b915050610fb6565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516110cc92919061278b565b60405180910390a4604080516020810190915260009052610566565b6001600160a01b03841661110e5760405162461bcd60e51b8152600401610453906126ef565b33600061111a856118f3565b90506000611127856118f3565b9050611138836000898585896115c5565b600086815260c9602090815260408083206001600160a01b038b1684529091528120805487929061116a908490612778565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111ca8360008989898961193e565b50505050505050565b6111db6119f9565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f2c3390565b600061094a8383611a40565b816001600160a01b0316836001600160a01b0316036112905760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610453565b6001600160a01b03838116600081815260ca6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000610481825490565b6001600160a01b03841661132d5760405162461bcd60e51b8152600401610453906127b9565b336000611339856118f3565b90506000611346856118f3565b90506113568389898585896115c5565b600086815260c9602090815260408083206001600160a01b038c168452909152902054858110156113995760405162461bcd60e51b8152600401610453906127fe565b600087815260c9602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906113d8908490612778565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611438848a8a8a8a8a61193e565b505050505050505050565b6001600160a01b0383166114695760405162461bcd60e51b815260040161045390612848565b336000611475846118f3565b90506000611482846118f3565b90506114a2838760008585604051806020016040528060008152506115c5565b600085815260c9602090815260408083206001600160a01b038a168452909152902054848110156114e55760405162461bcd60e51b81526004016104539061288b565b600086815260c9602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526111ca565b600054610100900460ff166115865760405162461bcd60e51b8152600401610453906128cf565b61158f81611a6a565b611597611a9a565b610eaf81611ace565b60006001600160e01b03198216635a05180f60e01b1480610481575061048182611b30565b610e9d868686868686611b65565b6001600160a01b0384163b15610e9d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611617908990899088908890889060040161291a565b6020604051808303816000875af1925050508015611652575060408051601f3d908101601f1916820190925261164f91810190612978565b60015b6116fe5761165e612995565b806308c379a00361169757506116726129b1565b8061167d5750611699565b8060405162461bcd60e51b81526004016104539190611fa3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610453565b6001600160e01b0319811663bc197c8160e01b146111ca5760405162461bcd60e51b815260040161045390612a3a565b6117388282610951565b61065c57611750816001600160a01b03166014611bce565b61175b836020611bce565b60405160200161176c929190612a82565b60408051601f198184030181529082905262461bcd60e51b825261045391600401611fa3565b61179c8282610951565b61065c5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117d43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061094a836001600160a01b038416611d69565b6118378282610951565b1561065c5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061094a836001600160a01b038416611db8565b61012d5460ff166106f25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610453565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061192d5761192d6126aa565b602090810291909101015292915050565b6001600160a01b0384163b15610e9d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119829089908990889088908890600401612af7565b6020604051808303816000875af19250505080156119bd575060408051601f3d908101601f191682019092526119ba91810190612978565b60015b6119c95761165e612995565b6001600160e01b0319811663f23a6e6160e01b146111ca5760405162461bcd60e51b815260040161045390612a3a565b61012d5460ff16156106f25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610453565b6000826000018281548110611a5757611a576126aa565b9060005260206000200154905092915050565b600054610100900460ff16611a915760405162461bcd60e51b8152600401610453906128cf565b610eaf81611eab565b600054610100900460ff16611ac15760405162461bcd60e51b8152600401610453906128cf565b61012d805460ff19169055565b600054610100900460ff16611af55760405162461bcd60e51b8152600401610453906128cf565b611b00600033611eb7565b611b18600080516020612cb983398151915233611eb7565b610eaf600080516020612c9983398151915233611eb7565b60006001600160e01b03198216637965db0b60e01b148061048157506301ffc9a760e01b6001600160e01b0319831614610481565b61012d5460ff1615610e9d5760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610453565b60606000611bdd836002612b3c565b611be8906002612778565b6001600160401b03811115611bff57611bff611fb6565b6040519080825280601f01601f191660200182016040528015611c29576020820181803683370190505b509050600360fc1b81600081518110611c4457611c446126aa565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c7357611c736126aa565b60200101906001600160f81b031916908160001a9053506000611c97846002612b3c565b611ca2906001612778565b90505b6001811115611d1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cd657611cd66126aa565b1a60f81b828281518110611cec57611cec6126aa565b60200101906001600160f81b031916908160001a90535060049490941c93611d1381612b53565b9050611ca5565b50831561094a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610453565b6000818152600183016020526040812054611db057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610481565b506000610481565b60008181526001830160205260408120548015611ea1576000611ddc600183612b6a565b8554909150600090611df090600190612b6a565b9050818114611e55576000866000018281548110611e1057611e106126aa565b9060005260206000200154905080876000018481548110611e3357611e336126aa565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e6657611e66612b7d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610481565b6000915050610481565b60cb61065c8282612bd9565b61065c8282610eb2565b80356001600160a01b0381168114611ed857600080fd5b919050565b60008060408385031215611ef057600080fd5b611ef983611ec1565b946020939093013593505050565b6001600160e01b031981168114610eaf57600080fd5b600060208284031215611f2f57600080fd5b813561094a81611f07565b600060208284031215611f4c57600080fd5b5035919050565b60005b83811015611f6e578181015183820152602001611f56565b50506000910152565b60008151808452611f8f816020860160208601611f53565b601f01601f19169290920160200192915050565b60208152600061094a6020830184611f77565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611ff157611ff1611fb6565b6040525050565b60006001600160401b0382111561201157612011611fb6565b5060051b60200190565b600082601f83011261202c57600080fd5b8135602061203982611ff8565b6040516120468282611fcc565b83815260059390931b850182019282810191508684111561206657600080fd5b8286015b84811015612081578035835291830191830161206a565b509695505050505050565b60006001600160401b038311156120a5576120a5611fb6565b6040516120bc601f8501601f191660200182611fcc565b8091508381528484840111156120d157600080fd5b83836020830137600060208583010152509392505050565b600082601f8301126120fa57600080fd5b61094a8383356020850161208c565b6000806000806080858703121561211f57600080fd5b61212885611ec1565b935060208501356001600160401b038082111561214457600080fd5b6121508883890161201b565b9450604087013591508082111561216657600080fd5b6121728883890161201b565b9350606087013591508082111561218857600080fd5b50612195878288016120e9565b91505092959194509250565b600080600080600060a086880312156121b957600080fd5b6121c286611ec1565b94506121d060208701611ec1565b935060408601356001600160401b03808211156121ec57600080fd5b6121f889838a0161201b565b9450606088013591508082111561220e57600080fd5b61221a89838a0161201b565b9350608088013591508082111561223057600080fd5b5061223d888289016120e9565b9150509295509295909350565b6000806040838503121561225d57600080fd5b8235915061226d60208401611ec1565b90509250929050565b6000806040838503121561228957600080fd5b82356001600160401b03808211156122a057600080fd5b818501915085601f8301126122b457600080fd5b813560206122c182611ff8565b6040516122ce8282611fcc565b83815260059390931b85018201928281019150898411156122ee57600080fd5b948201945b838610156123135761230486611ec1565b825294820194908201906122f3565b9650508601359250508082111561232957600080fd5b506123368582860161201b565b9150509250929050565b600081518084526020808501945080840160005b8381101561237057815187529582019590820190600101612354565b509495945050505050565b60208152600061094a6020830184612340565b6000806000606084860312156123a357600080fd5b6123ac84611ec1565b925060208401356001600160401b03808211156123c857600080fd5b6123d48783880161201b565b935060408601359150808211156123ea57600080fd5b506123f78682870161201b565b9150509250925092565b6000806000806080858703121561241757600080fd5b61242085611ec1565b9350602085013592506040850135915060608501356001600160401b0381111561244957600080fd5b612195878288016120e9565b6000806040838503121561246857600080fd5b50508035926020909101359150565b6000806040838503121561248a57600080fd5b61249383611ec1565b9150602083013580151581146124a857600080fd5b809150509250929050565b600080604083850312156124c657600080fd5b6124cf83611ec1565b915061226d60208401611ec1565b600080600080600060a086880312156124f557600080fd5b6124fe86611ec1565b945061250c60208701611ec1565b9350604086013592506060860135915060808601356001600160401b0381111561253557600080fd5b61223d888289016120e9565b60008060006060848603121561255657600080fd5b61255f84611ec1565b95602085013595506040909401359392505050565b60006020828403121561258657600080fd5b81356001600160401b0381111561259c57600080fd5b8201601f810184136125ad57600080fd5b6125bc8482356020840161208c565b949350505050565b600181811c908216806125d857607f821691505b6020821081036125f857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126e8576126e86126c0565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b80820180821115610481576104816126c0565b60408152600061279e6040830185612340565b82810360208401526127b08185612340565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061294690830186612340565b82810360608401526129588186612340565b9050828103608084015261296c8185611f77565b98975050505050505050565b60006020828403121561298a57600080fd5b815161094a81611f07565b600060033d11156129ae5760046000803e5060005160e01c5b90565b600060443d10156129bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156129ee57505050505090565b8285019150815181811115612a065750505050505090565b843d8701016020828501011115612a205750505050505090565b612a2f60208286010187611fcc565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612aba816017850160208801611f53565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612aeb816028840160208801611f53565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b3190830184611f77565b979650505050505050565b8082028115828204841417610481576104816126c0565b600081612b6257612b626126c0565b506000190190565b81810381811115610481576104816126c0565b634e487b7160e01b600052603160045260246000fd5b601f8211156105dd57600081815260208120601f850160051c81016020861015612bba5750805b601f850160051c820191505b81811015610e9d57828155600101612bc6565b81516001600160401b03811115612bf257612bf2611fb6565b612c0681612c0084546125c4565b84612b93565b602080601f831160018114612c3b5760008415612c235750858301515b600019600386901b1c1916600185901b178555610e9d565b600085815260208120601f198616915b82811015612c6a57888601518255948401946001909101908401612c4b565b5085821015612c885787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b50612bc98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610186575f3560e01c80638456cb59116100d9578063d539139311610093578063e985e9c51161006e578063e985e9c51461036b578063f242432a146103a6578063f5298aca146103b9578063f62d1888146103cc575f80fd5b8063d539139314610330578063d547741f14610344578063e63ab1e914610357575f80fd5b80638456cb59146102bd5780639010d07c146102c557806391d14854146102f0578063a217fddf14610303578063a22cb4651461030a578063ca15c8731461031d575f80fd5b80632f2ff15d116101445780634e1273f41161011f5780634e1273f41461026b5780635c975abb1461028b5780636b20c45414610297578063731133e9146102aa575f80fd5b80632f2ff15d1461023d57806336568abe146102505780633f4ba83a14610263575f80fd5b8062fdd58e1461018a57806301ffc9a7146101b05780630e89341c146101d35780631f7fdffa146101f3578063248a9ca3146102085780632eb2c2d61461022a575b5f80fd5b61019d610198366004611e38565b6103df565b6040519081526020015b60405180910390f35b6101c36101be366004611e75565b610478565b60405190151581526020016101a7565b6101e66101e1366004611e90565b610482565b6040516101a79190611ef4565b610206610201366004612053565b610514565b005b61019d610216366004611e90565b5f9081526065602052604090206001015490565b6102066102383660046120e5565b610559565b61020661024b366004612187565b6105a5565b61020661025e366004612187565b6105ce565b61020661064c565b61027e6102793660046121b1565b6106df565b6040516101a791906122af565b61012d5460ff166101c3565b6102066102a53660046122c1565b6107fe565b6102066102b836600461232f565b610841565b610206610880565b6102d86102d336600461237f565b610911565b6040516001600160a01b0390911681526020016101a7565b6101c36102fe366004612187565b61092f565b61019d5f81565b61020661031836600461239f565b610959565b61019d61032b366004611e90565b610964565b61019d5f80516020612b9d83398151915281565b610206610352366004612187565b61097a565b61019d5f80516020612b7d83398151915281565b6101c36103793660046123d8565b6001600160a01b039182165f90815260ca6020908152604080832093909416825291909152205460ff1690565b6102066103b4366004612400565b61099e565b6102066103c736600461245f565b6109e3565b6102066103da36600461248f565b610a26565b5f6001600160a01b03831661044e5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b5f61047282610b32565b606060cb8054610491906124db565b80601f01602080910402602001604051908101604052809291908181526020018280546104bd906124db565b80156105085780601f106104df57610100808354040283529160200191610508565b820191905f5260205f20905b8154815290600101906020018083116104eb57829003601f168201915b50505050509050919050565b61052b5f80516020612b9d8339815191523361092f565b6105475760405162461bcd60e51b815260040161044590612513565b61055384848484610b71565b50505050565b6001600160a01b03851633148061057557506105758533610379565b6105915760405162461bcd60e51b815260040161044590612570565b61059e8585858585610cb8565b5050505050565b5f828152606560205260409020600101546105bf81610e59565b6105c98383610e66565b505050565b6001600160a01b038116331461063e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610445565b6106488282610e87565b5050565b6106635f80516020612b7d8339815191523361092f565b6106d55760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610445565b6106dd610ea8565b565b606081518351146107445760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610445565b5f83516001600160401b0381111561075e5761075e611f06565b604051908082528060200260200182016040528015610787578160200160208202803683370190505b5090505f5b84518110156107f6576107d18582815181106107aa576107aa6125bf565b60200260200101518583815181106107c4576107c46125bf565b60200260200101516103df565b8282815181106107e3576107e36125bf565b602090810291909101015260010161078c565b509392505050565b6001600160a01b03831633148061081a575061081a8333610379565b6108365760405162461bcd60e51b815260040161044590612570565b6105c9838383610efb565b6108585f80516020612b9d8339815191523361092f565b6108745760405162461bcd60e51b815260040161044590612513565b61055384848484611086565b6108975f80516020612b7d8339815191523361092f565b6109095760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610445565b6106dd61116b565b5f82815260976020526040812061092890836111a9565b9392505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6106483383836111b4565b5f81815260976020526040812061047290611293565b5f8281526065602052604090206001015461099481610e59565b6105c98383610e87565b6001600160a01b0385163314806109ba57506109ba8533610379565b6109d65760405162461bcd60e51b815260040161044590612570565b61059e858585858561129c565b6001600160a01b0383163314806109ff57506109ff8333610379565b610a1b5760405162461bcd60e51b815260040161044590612570565b6105c98383836113d4565b5f54610100900460ff1615808015610a4457505f54600160ff909116105b80610a5d5750303b158015610a5d57505f5460ff166001145b610ac05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610445565b5f805460ff191660011790558015610ae1575f805461ff0019166101001790555b610aea826114e9565b8015610648575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f6001600160e01b03198216636cdb3d1360e11b1480610b6257506001600160e01b031982166303a24d0760e21b145b80610472575061047282611529565b6001600160a01b038416610b975760405162461bcd60e51b8152600401610445906125d3565b8151835114610bb85760405162461bcd60e51b815260040161044590612614565b33610bc7815f8787878761154d565b5f5b8451811015610c5257838181518110610be457610be46125bf565b602002602001015160c95f878481518110610c0157610c016125bf565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f828254610c459190612670565b9091555050600101610bc9565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ca2929190612683565b60405180910390a461059e815f8787878761155b565b8151835114610cd95760405162461bcd60e51b815260040161044590612614565b6001600160a01b038416610cff5760405162461bcd60e51b8152600401610445906126b0565b33610d0e81878787878761154d565b5f5b8451811015610deb575f858281518110610d2c57610d2c6125bf565b602002602001015190505f858381518110610d4957610d496125bf565b6020908102919091018101515f84815260c9835260408082206001600160a01b038e168352909352919091205490915081811015610d995760405162461bcd60e51b8152600401610445906126f5565b5f83815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610dd7908490612670565b909155505060019093019250610d10915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e3b929190612683565b60405180910390a4610e5181878787878761155b565b505050505050565b610e6381336116b5565b50565b610e708282611719565b5f8281526097602052604090206105c9908261179e565b610e9182826117b2565b5f8281526097602052604090206105c99082611818565b610eb061182c565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316610f215760405162461bcd60e51b81526004016104459061273f565b8051825114610f425760405162461bcd60e51b815260040161044590612614565b5f339050610f6281855f868660405180602001604052805f81525061154d565b5f5b835181101561101b575f848281518110610f8057610f806125bf565b602002602001015190505f848381518110610f9d57610f9d6125bf565b6020908102919091018101515f84815260c9835260408082206001600160a01b038c168352909352919091205490915081811015610fed5760405162461bcd60e51b815260040161044590612782565b5f92835260c9602090815260408085206001600160a01b038b16865290915290922091039055600101610f64565b505f6001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161106b929190612683565b60405180910390a460408051602081019091525f9052610553565b6001600160a01b0384166110ac5760405162461bcd60e51b8152600401610445906125d3565b335f6110b785611876565b90505f6110c385611876565b90506110d3835f8985858961154d565b5f86815260c9602090815260408083206001600160a01b038b16845290915281208054879290611104908490612670565b909155505060408051878152602081018790526001600160a01b03808a16925f92918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611162835f898989896118bf565b50505050505050565b611173611979565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ede3390565b5f61092883836119c0565b816001600160a01b0316836001600160a01b0316036112275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610445565b6001600160a01b038381165f81815260ca6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b5f610472825490565b6001600160a01b0384166112c25760405162461bcd60e51b8152600401610445906126b0565b335f6112cd85611876565b90505f6112d985611876565b90506112e983898985858961154d565b5f86815260c9602090815260408083206001600160a01b038c1684529091529020548581101561132b5760405162461bcd60e51b8152600401610445906126f5565b5f87815260c9602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611369908490612670565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46113c9848a8a8a8a8a6118bf565b505050505050505050565b6001600160a01b0383166113fa5760405162461bcd60e51b81526004016104459061273f565b335f61140584611876565b90505f61141184611876565b905061142f83875f858560405180602001604052805f81525061154d565b5f85815260c9602090815260408083206001600160a01b038a168452909152902054848110156114715760405162461bcd60e51b815260040161044590612782565b5f86815260c9602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f9052611162565b5f54610100900460ff1661150f5760405162461bcd60e51b8152600401610445906127c6565b611518816119e6565b611520611a15565b610e6381611a48565b5f6001600160e01b03198216635a05180f60e01b1480610472575061047282611aa6565b610e51868686868686611ada565b6001600160a01b0384163b15610e515760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061159f9089908990889088908890600401612811565b6020604051808303815f875af19250505080156115d9575060408051601f3d908101601f191682019092526115d69181019061286e565b60015b611685576115e5612889565b806308c379a00361161e57506115f96128a2565b806116045750611620565b8060405162461bcd60e51b81526004016104459190611ef4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610445565b6001600160e01b0319811663bc197c8160e01b146111625760405162461bcd60e51b81526004016104459061292a565b6116bf828261092f565b610648576116d7816001600160a01b03166014611b43565b6116e2836020611b43565b6040516020016116f3929190612972565b60408051601f198184030181529082905262461bcd60e51b825261044591600401611ef4565b611723828261092f565b610648575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561175a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f610928836001600160a01b038416611cd8565b6117bc828261092f565b15610648575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f610928836001600160a01b038416611d24565b61012d5460ff166106dd5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610445565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f815181106118ae576118ae6125bf565b602090810291909101015292915050565b6001600160a01b0384163b15610e515760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061190390899089908890889088906004016129e6565b6020604051808303815f875af192505050801561193d575060408051601f3d908101601f1916820190925261193a9181019061286e565b60015b611949576115e5612889565b6001600160e01b0319811663f23a6e6160e01b146111625760405162461bcd60e51b81526004016104459061292a565b61012d5460ff16156106dd5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610445565b5f825f0182815481106119d5576119d56125bf565b905f5260205f200154905092915050565b5f54610100900460ff16611a0c5760405162461bcd60e51b8152600401610445906127c6565b610e6381611e07565b5f54610100900460ff16611a3b5760405162461bcd60e51b8152600401610445906127c6565b61012d805460ff19169055565b5f54610100900460ff16611a6e5760405162461bcd60e51b8152600401610445906127c6565b611a785f33611e13565b611a8f5f80516020612b9d83398151915233611e13565b610e635f80516020612b7d83398151915233611e13565b5f6001600160e01b03198216637965db0b60e01b148061047257506301ffc9a760e01b6001600160e01b0319831614610472565b61012d5460ff1615610e515760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610445565b60605f611b51836002612a2a565b611b5c906002612670565b6001600160401b03811115611b7357611b73611f06565b6040519080825280601f01601f191660200182016040528015611b9d576020820181803683370190505b509050600360fc1b815f81518110611bb757611bb76125bf565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611be557611be56125bf565b60200101906001600160f81b03191690815f1a9053505f611c07846002612a2a565b611c12906001612670565b90505b6001811115611c89576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c4657611c466125bf565b1a60f81b828281518110611c5c57611c5c6125bf565b60200101906001600160f81b03191690815f1a90535060049490941c93611c8281612a41565b9050611c15565b5083156109285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610445565b5f818152600183016020526040812054611d1d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610472565b505f610472565b5f8181526001830160205260408120548015611dfe575f611d46600183612a56565b85549091505f90611d5990600190612a56565b9050818114611db8575f865f018281548110611d7757611d776125bf565b905f5260205f200154905080875f018481548110611d9757611d976125bf565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611dc957611dc9612a69565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610472565b5f915050610472565b60cb6106488282612ac1565b6106488282610e66565b80356001600160a01b0381168114611e33575f80fd5b919050565b5f8060408385031215611e49575f80fd5b611e5283611e1d565b946020939093013593505050565b6001600160e01b031981168114610e63575f80fd5b5f60208284031215611e85575f80fd5b813561092881611e60565b5f60208284031215611ea0575f80fd5b5035919050565b5f5b83811015611ec1578181015183820152602001611ea9565b50505f910152565b5f8151808452611ee0816020860160208601611ea7565b601f01601f19169290920160200192915050565b602081525f6109286020830184611ec9565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715611f3f57611f3f611f06565b6040525050565b5f6001600160401b03821115611f5e57611f5e611f06565b5060051b60200190565b5f82601f830112611f77575f80fd5b81356020611f8482611f46565b604051611f918282611f1a565b80915083815260208101915060208460051b870101935086841115611fb4575f80fd5b602086015b84811015611fd05780358352918301918301611fb9565b509695505050505050565b5f6001600160401b03831115611ff357611ff3611f06565b60405161200a601f8501601f191660200182611f1a565b80915083815284848401111561201e575f80fd5b838360208301375f60208583010152509392505050565b5f82601f830112612044575f80fd5b61092883833560208501611fdb565b5f805f8060808587031215612066575f80fd5b61206f85611e1d565b935060208501356001600160401b038082111561208a575f80fd5b61209688838901611f68565b945060408701359150808211156120ab575f80fd5b6120b788838901611f68565b935060608701359150808211156120cc575f80fd5b506120d987828801612035565b91505092959194509250565b5f805f805f60a086880312156120f9575f80fd5b61210286611e1d565b945061211060208701611e1d565b935060408601356001600160401b038082111561212b575f80fd5b61213789838a01611f68565b9450606088013591508082111561214c575f80fd5b61215889838a01611f68565b9350608088013591508082111561216d575f80fd5b5061217a88828901612035565b9150509295509295909350565b5f8060408385031215612198575f80fd5b823591506121a860208401611e1d565b90509250929050565b5f80604083850312156121c2575f80fd5b82356001600160401b03808211156121d8575f80fd5b818501915085601f8301126121eb575f80fd5b813560206121f882611f46565b6040516122058282611f1a565b83815260059390931b8501820192828101915089841115612224575f80fd5b948201945b838610156122495761223a86611e1d565b82529482019490820190612229565b9650508601359250508082111561225e575f80fd5b5061226b85828601611f68565b9150509250929050565b5f815180845260208085019450602084015f5b838110156122a457815187529582019590820190600101612288565b509495945050505050565b602081525f6109286020830184612275565b5f805f606084860312156122d3575f80fd5b6122dc84611e1d565b925060208401356001600160401b03808211156122f7575f80fd5b61230387838801611f68565b93506040860135915080821115612318575f80fd5b5061232586828701611f68565b9150509250925092565b5f805f8060808587031215612342575f80fd5b61234b85611e1d565b9350602085013592506040850135915060608501356001600160401b03811115612373575f80fd5b6120d987828801612035565b5f8060408385031215612390575f80fd5b50508035926020909101359150565b5f80604083850312156123b0575f80fd5b6123b983611e1d565b9150602083013580151581146123cd575f80fd5b809150509250929050565b5f80604083850312156123e9575f80fd5b6123f283611e1d565b91506121a860208401611e1d565b5f805f805f60a08688031215612414575f80fd5b61241d86611e1d565b945061242b60208701611e1d565b9350604086013592506060860135915060808601356001600160401b03811115612453575f80fd5b61217a88828901612035565b5f805f60608486031215612471575f80fd5b61247a84611e1d565b95602085013595506040909401359392505050565b5f6020828403121561249f575f80fd5b81356001600160401b038111156124b4575f80fd5b8201601f810184136124c4575f80fd5b6124d384823560208401611fdb565b949350505050565b600181811c908216806124ef57607f821691505b60208210810361250d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104725761047261265c565b604081525f6126956040830185612275565b82810360208401526126a78185612275565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061283c90830186612275565b828103606084015261284e8186612275565b905082810360808401526128628185611ec9565b98975050505050505050565b5f6020828403121561287e575f80fd5b815161092881611e60565b5f60033d111561289f5760045f803e505f5160e01c5b90565b5f60443d10156128af5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156128de57505050505090565b82850191508151818111156128f65750505050505090565b843d87010160208285010111156129105750505050505090565b61291f60208286010187611f1a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516129a9816017850160208801611ea7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516129da816028840160208801611ea7565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90612a1f90830184611ec9565b979650505050505050565b80820281158282048414176104725761047261265c565b5f81612a4f57612a4f61265c565b505f190190565b818103818111156104725761047261265c565b634e487b7160e01b5f52603160045260245ffd5b601f8211156105c957805f5260205f20601f840160051c81016020851015612aa25750805b601f840160051c820191505b8181101561059e575f8155600101612aae565b81516001600160401b03811115612ada57612ada611f06565b612aee81612ae884546124db565b84612a7d565b602080601f831160018114612b21575f8415612b0a5750858301515b5f19600386901b1c1916600185901b178555610e51565b5f85815260208120601f198616915b82811015612b4f57888601518255948401946001909101908401612b30565b5085821015612b6c57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610186575f3560e01c80638456cb59116100d9578063d539139311610093578063e985e9c51161006e578063e985e9c51461036b578063f242432a146103a6578063f5298aca146103b9578063f62d1888146103cc575f80fd5b8063d539139314610330578063d547741f14610344578063e63ab1e914610357575f80fd5b80638456cb59146102bd5780639010d07c146102c557806391d14854146102f0578063a217fddf14610303578063a22cb4651461030a578063ca15c8731461031d575f80fd5b80632f2ff15d116101445780634e1273f41161011f5780634e1273f41461026b5780635c975abb1461028b5780636b20c45414610297578063731133e9146102aa575f80fd5b80632f2ff15d1461023d57806336568abe146102505780633f4ba83a14610263575f80fd5b8062fdd58e1461018a57806301ffc9a7146101b05780630e89341c146101d35780631f7fdffa146101f3578063248a9ca3146102085780632eb2c2d61461022a575b5f80fd5b61019d610198366004611e38565b6103df565b6040519081526020015b60405180910390f35b6101c36101be366004611e75565b610478565b60405190151581526020016101a7565b6101e66101e1366004611e90565b610482565b6040516101a79190611ef4565b610206610201366004612053565b610514565b005b61019d610216366004611e90565b5f9081526065602052604090206001015490565b6102066102383660046120e5565b610559565b61020661024b366004612187565b6105a5565b61020661025e366004612187565b6105ce565b61020661064c565b61027e6102793660046121b1565b6106df565b6040516101a791906122af565b61012d5460ff166101c3565b6102066102a53660046122c1565b6107fe565b6102066102b836600461232f565b610841565b610206610880565b6102d86102d336600461237f565b610911565b6040516001600160a01b0390911681526020016101a7565b6101c36102fe366004612187565b61092f565b61019d5f81565b61020661031836600461239f565b610959565b61019d61032b366004611e90565b610964565b61019d5f80516020612b9d83398151915281565b610206610352366004612187565b61097a565b61019d5f80516020612b7d83398151915281565b6101c36103793660046123d8565b6001600160a01b039182165f90815260ca6020908152604080832093909416825291909152205460ff1690565b6102066103b4366004612400565b61099e565b6102066103c736600461245f565b6109e3565b6102066103da36600461248f565b610a26565b5f6001600160a01b03831661044e5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b5f61047282610b32565b606060cb8054610491906124db565b80601f01602080910402602001604051908101604052809291908181526020018280546104bd906124db565b80156105085780601f106104df57610100808354040283529160200191610508565b820191905f5260205f20905b8154815290600101906020018083116104eb57829003601f168201915b50505050509050919050565b61052b5f80516020612b9d8339815191523361092f565b6105475760405162461bcd60e51b815260040161044590612513565b61055384848484610b71565b50505050565b6001600160a01b03851633148061057557506105758533610379565b6105915760405162461bcd60e51b815260040161044590612570565b61059e8585858585610cb8565b5050505050565b5f828152606560205260409020600101546105bf81610e59565b6105c98383610e66565b505050565b6001600160a01b038116331461063e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610445565b6106488282610e87565b5050565b6106635f80516020612b7d8339815191523361092f565b6106d55760405162461bcd60e51b815260206004820152603b60248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f20756e706175736500000000006064820152608401610445565b6106dd610ea8565b565b606081518351146107445760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610445565b5f83516001600160401b0381111561075e5761075e611f06565b604051908082528060200260200182016040528015610787578160200160208202803683370190505b5090505f5b84518110156107f6576107d18582815181106107aa576107aa6125bf565b60200260200101518583815181106107c4576107c46125bf565b60200260200101516103df565b8282815181106107e3576107e36125bf565b602090810291909101015260010161078c565b509392505050565b6001600160a01b03831633148061081a575061081a8333610379565b6108365760405162461bcd60e51b815260040161044590612570565b6105c9838383610efb565b6108585f80516020612b9d8339815191523361092f565b6108745760405162461bcd60e51b815260040161044590612513565b61055384848484611086565b6108975f80516020612b7d8339815191523361092f565b6109095760405162461bcd60e51b815260206004820152603960248201527f455243313135355072657365744d696e7465725061757365723a206d7573742060448201527f686176652070617573657220726f6c6520746f207061757365000000000000006064820152608401610445565b6106dd61116b565b5f82815260976020526040812061092890836111a9565b9392505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6106483383836111b4565b5f81815260976020526040812061047290611293565b5f8281526065602052604090206001015461099481610e59565b6105c98383610e87565b6001600160a01b0385163314806109ba57506109ba8533610379565b6109d65760405162461bcd60e51b815260040161044590612570565b61059e858585858561129c565b6001600160a01b0383163314806109ff57506109ff8333610379565b610a1b5760405162461bcd60e51b815260040161044590612570565b6105c98383836113d4565b5f54610100900460ff1615808015610a4457505f54600160ff909116105b80610a5d5750303b158015610a5d57505f5460ff166001145b610ac05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610445565b5f805460ff191660011790558015610ae1575f805461ff0019166101001790555b610aea826114e9565b8015610648575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f6001600160e01b03198216636cdb3d1360e11b1480610b6257506001600160e01b031982166303a24d0760e21b145b80610472575061047282611529565b6001600160a01b038416610b975760405162461bcd60e51b8152600401610445906125d3565b8151835114610bb85760405162461bcd60e51b815260040161044590612614565b33610bc7815f8787878761154d565b5f5b8451811015610c5257838181518110610be457610be46125bf565b602002602001015160c95f878481518110610c0157610c016125bf565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f828254610c459190612670565b9091555050600101610bc9565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ca2929190612683565b60405180910390a461059e815f8787878761155b565b8151835114610cd95760405162461bcd60e51b815260040161044590612614565b6001600160a01b038416610cff5760405162461bcd60e51b8152600401610445906126b0565b33610d0e81878787878761154d565b5f5b8451811015610deb575f858281518110610d2c57610d2c6125bf565b602002602001015190505f858381518110610d4957610d496125bf565b6020908102919091018101515f84815260c9835260408082206001600160a01b038e168352909352919091205490915081811015610d995760405162461bcd60e51b8152600401610445906126f5565b5f83815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610dd7908490612670565b909155505060019093019250610d10915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e3b929190612683565b60405180910390a4610e5181878787878761155b565b505050505050565b610e6381336116b5565b50565b610e708282611719565b5f8281526097602052604090206105c9908261179e565b610e9182826117b2565b5f8281526097602052604090206105c99082611818565b610eb061182c565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316610f215760405162461bcd60e51b81526004016104459061273f565b8051825114610f425760405162461bcd60e51b815260040161044590612614565b5f339050610f6281855f868660405180602001604052805f81525061154d565b5f5b835181101561101b575f848281518110610f8057610f806125bf565b602002602001015190505f848381518110610f9d57610f9d6125bf565b6020908102919091018101515f84815260c9835260408082206001600160a01b038c168352909352919091205490915081811015610fed5760405162461bcd60e51b815260040161044590612782565b5f92835260c9602090815260408085206001600160a01b038b16865290915290922091039055600101610f64565b505f6001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161106b929190612683565b60405180910390a460408051602081019091525f9052610553565b6001600160a01b0384166110ac5760405162461bcd60e51b8152600401610445906125d3565b335f6110b785611876565b90505f6110c385611876565b90506110d3835f8985858961154d565b5f86815260c9602090815260408083206001600160a01b038b16845290915281208054879290611104908490612670565b909155505060408051878152602081018790526001600160a01b03808a16925f92918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611162835f898989896118bf565b50505050505050565b611173611979565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ede3390565b5f61092883836119c0565b816001600160a01b0316836001600160a01b0316036112275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610445565b6001600160a01b038381165f81815260ca6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b5f610472825490565b6001600160a01b0384166112c25760405162461bcd60e51b8152600401610445906126b0565b335f6112cd85611876565b90505f6112d985611876565b90506112e983898985858961154d565b5f86815260c9602090815260408083206001600160a01b038c1684529091529020548581101561132b5760405162461bcd60e51b8152600401610445906126f5565b5f87815260c9602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611369908490612670565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46113c9848a8a8a8a8a6118bf565b505050505050505050565b6001600160a01b0383166113fa5760405162461bcd60e51b81526004016104459061273f565b335f61140584611876565b90505f61141184611876565b905061142f83875f858560405180602001604052805f81525061154d565b5f85815260c9602090815260408083206001600160a01b038a168452909152902054848110156114715760405162461bcd60e51b815260040161044590612782565b5f86815260c9602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f9052611162565b5f54610100900460ff1661150f5760405162461bcd60e51b8152600401610445906127c6565b611518816119e6565b611520611a15565b610e6381611a48565b5f6001600160e01b03198216635a05180f60e01b1480610472575061047282611aa6565b610e51868686868686611ada565b6001600160a01b0384163b15610e515760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061159f9089908990889088908890600401612811565b6020604051808303815f875af19250505080156115d9575060408051601f3d908101601f191682019092526115d69181019061286e565b60015b611685576115e5612889565b806308c379a00361161e57506115f96128a2565b806116045750611620565b8060405162461bcd60e51b81526004016104459190611ef4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610445565b6001600160e01b0319811663bc197c8160e01b146111625760405162461bcd60e51b81526004016104459061292a565b6116bf828261092f565b610648576116d7816001600160a01b03166014611b43565b6116e2836020611b43565b6040516020016116f3929190612972565b60408051601f198184030181529082905262461bcd60e51b825261044591600401611ef4565b611723828261092f565b610648575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561175a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f610928836001600160a01b038416611cd8565b6117bc828261092f565b15610648575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f610928836001600160a01b038416611d24565b61012d5460ff166106dd5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610445565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f815181106118ae576118ae6125bf565b602090810291909101015292915050565b6001600160a01b0384163b15610e515760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061190390899089908890889088906004016129e6565b6020604051808303815f875af192505050801561193d575060408051601f3d908101601f1916820190925261193a9181019061286e565b60015b611949576115e5612889565b6001600160e01b0319811663f23a6e6160e01b146111625760405162461bcd60e51b81526004016104459061292a565b61012d5460ff16156106dd5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610445565b5f825f0182815481106119d5576119d56125bf565b905f5260205f200154905092915050565b5f54610100900460ff16611a0c5760405162461bcd60e51b8152600401610445906127c6565b610e6381611e07565b5f54610100900460ff16611a3b5760405162461bcd60e51b8152600401610445906127c6565b61012d805460ff19169055565b5f54610100900460ff16611a6e5760405162461bcd60e51b8152600401610445906127c6565b611a785f33611e13565b611a8f5f80516020612b9d83398151915233611e13565b610e635f80516020612b7d83398151915233611e13565b5f6001600160e01b03198216637965db0b60e01b148061047257506301ffc9a760e01b6001600160e01b0319831614610472565b61012d5460ff1615610e515760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201526b1dda1a5b19481c185d5cd95960a21b6064820152608401610445565b60605f611b51836002612a2a565b611b5c906002612670565b6001600160401b03811115611b7357611b73611f06565b6040519080825280601f01601f191660200182016040528015611b9d576020820181803683370190505b509050600360fc1b815f81518110611bb757611bb76125bf565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611be557611be56125bf565b60200101906001600160f81b03191690815f1a9053505f611c07846002612a2a565b611c12906001612670565b90505b6001811115611c89576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c4657611c466125bf565b1a60f81b828281518110611c5c57611c5c6125bf565b60200101906001600160f81b03191690815f1a90535060049490941c93611c8281612a41565b9050611c15565b5083156109285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610445565b5f818152600183016020526040812054611d1d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610472565b505f610472565b5f8181526001830160205260408120548015611dfe575f611d46600183612a56565b85549091505f90611d5990600190612a56565b9050818114611db8575f865f018281548110611d7757611d776125bf565b905f5260205f200154905080875f018481548110611d9757611d976125bf565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611dc957611dc9612a69565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610472565b5f915050610472565b60cb6106488282612ac1565b6106488282610e66565b80356001600160a01b0381168114611e33575f80fd5b919050565b5f8060408385031215611e49575f80fd5b611e5283611e1d565b946020939093013593505050565b6001600160e01b031981168114610e63575f80fd5b5f60208284031215611e85575f80fd5b813561092881611e60565b5f60208284031215611ea0575f80fd5b5035919050565b5f5b83811015611ec1578181015183820152602001611ea9565b50505f910152565b5f8151808452611ee0816020860160208601611ea7565b601f01601f19169290920160200192915050565b602081525f6109286020830184611ec9565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715611f3f57611f3f611f06565b6040525050565b5f6001600160401b03821115611f5e57611f5e611f06565b5060051b60200190565b5f82601f830112611f77575f80fd5b81356020611f8482611f46565b604051611f918282611f1a565b80915083815260208101915060208460051b870101935086841115611fb4575f80fd5b602086015b84811015611fd05780358352918301918301611fb9565b509695505050505050565b5f6001600160401b03831115611ff357611ff3611f06565b60405161200a601f8501601f191660200182611f1a565b80915083815284848401111561201e575f80fd5b838360208301375f60208583010152509392505050565b5f82601f830112612044575f80fd5b61092883833560208501611fdb565b5f805f8060808587031215612066575f80fd5b61206f85611e1d565b935060208501356001600160401b038082111561208a575f80fd5b61209688838901611f68565b945060408701359150808211156120ab575f80fd5b6120b788838901611f68565b935060608701359150808211156120cc575f80fd5b506120d987828801612035565b91505092959194509250565b5f805f805f60a086880312156120f9575f80fd5b61210286611e1d565b945061211060208701611e1d565b935060408601356001600160401b038082111561212b575f80fd5b61213789838a01611f68565b9450606088013591508082111561214c575f80fd5b61215889838a01611f68565b9350608088013591508082111561216d575f80fd5b5061217a88828901612035565b9150509295509295909350565b5f8060408385031215612198575f80fd5b823591506121a860208401611e1d565b90509250929050565b5f80604083850312156121c2575f80fd5b82356001600160401b03808211156121d8575f80fd5b818501915085601f8301126121eb575f80fd5b813560206121f882611f46565b6040516122058282611f1a565b83815260059390931b8501820192828101915089841115612224575f80fd5b948201945b838610156122495761223a86611e1d565b82529482019490820190612229565b9650508601359250508082111561225e575f80fd5b5061226b85828601611f68565b9150509250929050565b5f815180845260208085019450602084015f5b838110156122a457815187529582019590820190600101612288565b509495945050505050565b602081525f6109286020830184612275565b5f805f606084860312156122d3575f80fd5b6122dc84611e1d565b925060208401356001600160401b03808211156122f7575f80fd5b61230387838801611f68565b93506040860135915080821115612318575f80fd5b5061232586828701611f68565b9150509250925092565b5f805f8060808587031215612342575f80fd5b61234b85611e1d565b9350602085013592506040850135915060608501356001600160401b03811115612373575f80fd5b6120d987828801612035565b5f8060408385031215612390575f80fd5b50508035926020909101359150565b5f80604083850312156123b0575f80fd5b6123b983611e1d565b9150602083013580151581146123cd575f80fd5b809150509250929050565b5f80604083850312156123e9575f80fd5b6123f283611e1d565b91506121a860208401611e1d565b5f805f805f60a08688031215612414575f80fd5b61241d86611e1d565b945061242b60208701611e1d565b9350604086013592506060860135915060808601356001600160401b03811115612453575f80fd5b61217a88828901612035565b5f805f60608486031215612471575f80fd5b61247a84611e1d565b95602085013595506040909401359392505050565b5f6020828403121561249f575f80fd5b81356001600160401b038111156124b4575f80fd5b8201601f810184136124c4575f80fd5b6124d384823560208401611fdb565b949350505050565b600181811c908216806124ef57607f821691505b60208210810361250d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104725761047261265c565b604081525f6126956040830185612275565b82810360208401526126a78185612275565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061283c90830186612275565b828103606084015261284e8186612275565b905082810360808401526128628185611ec9565b98975050505050505050565b5f6020828403121561287e575f80fd5b815161092881611e60565b5f60033d111561289f5760045f803e505f5160e01c5b90565b5f60443d10156128af5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156128de57505050505090565b82850191508151818111156128f65750505050505090565b843d87010160208285010111156129105750505050505090565b61291f60208286010187611f1a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516129a9816017850160208801611ea7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516129da816028840160208801611ea7565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90612a1f90830184611ec9565b979650505050505050565b80820281158282048414176104725761047261265c565b5f81612a4f57612a4f61265c565b505f190190565b818103818111156104725761047261265c565b634e487b7160e01b5f52603160045260245ffd5b601f8211156105c957805f5260205f20601f840160051c81016020851015612aa25750805b601f840160051c820191505b8181101561059e575f8155600101612aae565b81516001600160401b03811115612ada57612ada611f06565b612aee81612ae884546124db565b84612a7d565b602080601f831160018114612b21575f8415612b0a5750858301515b5f19600386901b1c1916600185901b178555610e51565b5f85815260208120601f198616915b82811015612b4f57888601518255948401946001909101908401612b30565b5085821015612b6c57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC1155Upgradeable.json b/artifacts/ERC1155Upgradeable.json index 51eb0a70..20da597c 100644 --- a/artifacts/ERC1155Upgradeable.json +++ b/artifacts/ERC1155Upgradeable.json @@ -329,8 +329,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061135e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c80634e1273f41161005b5780634e1273f41461010a578063a22cb4651461012a578063e985e9c51461013d578063f242432a1461017957600080fd5b8062fdd58e1461008c57806301ffc9a7146100b25780630e89341c146100d55780632eb2c2d6146100f5575b600080fd5b61009f61009a366004610b49565b61018c565b6040519081526020015b60405180910390f35b6100c56100c0366004610b8c565b610227565b60405190151581526020016100a9565b6100e86100e3366004610bb0565b610277565b6040516100a99190610c0f565b610108610103366004610d6e565b61030b565b005b61011d610118366004610e18565b610357565b6040516100a99190610f1e565b610108610138366004610f31565b610481565b6100c561014b366004610f6d565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205460ff1690565b610108610187366004610fa0565b610490565b60006001600160a01b0383166101fc5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b5060008181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061025857506001600160e01b031982166303a24d0760e21b145b8061022157506301ffc9a760e01b6001600160e01b0319831614610221565b60606067805461028690611005565b80601f01602080910402602001604051908101604052809291908181526020018280546102b290611005565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b50505050509050919050565b6001600160a01b0385163314806103275750610327853361014b565b6103435760405162461bcd60e51b81526004016101f39061103f565b61035085858585856104d5565b5050505050565b606081518351146103bc5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101f3565b6000835167ffffffffffffffff8111156103d8576103d8610c22565b604051908082528060200260200182016040528015610401578160200160208202803683370190505b50905060005b84518110156104795761044c8582815181106104255761042561108e565b602002602001015185838151811061043f5761043f61108e565b602002602001015161018c565b82828151811061045e5761045e61108e565b6020908102919091010152610472816110ba565b9050610407565b509392505050565b61048c3383836106b5565b5050565b6001600160a01b0385163314806104ac57506104ac853361014b565b6104c85760405162461bcd60e51b81526004016101f39061103f565b6103508585858585610795565b81518351146105375760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101f3565b6001600160a01b03841661055d5760405162461bcd60e51b81526004016101f3906110d3565b3360005b845181101561064757600085828151811061057e5761057e61108e565b60200260200101519050600085838151811061059c5761059c61108e565b60209081029190910181015160008481526065835260408082206001600160a01b038e1683529093529190912054909150818110156105ed5760405162461bcd60e51b81526004016101f390611118565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061062c908490611162565b9250508190555050505080610640906110ba565b9050610561565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610697929190611175565b60405180910390a46106ad8187878787876108c3565b505050505050565b816001600160a01b0316836001600160a01b0316036107285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101f3565b6001600160a01b03838116600081815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166107bb5760405162461bcd60e51b81526004016101f3906110d3565b3360006107c785610a27565b905060006107d485610a27565b905060008681526065602090815260408083206001600160a01b038c168452909152902054858110156108195760405162461bcd60e51b81526004016101f390611118565b60008781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290610858908490611162565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108b8848a8a8a8a8a610a72565b505050505050505050565b6001600160a01b0384163b156106ad5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061090790899089908890889088906004016111a3565b6020604051808303816000875af1925050508015610942575060408051601f3d908101601f1916820190925261093f91810190611201565b60015b6109ee5761094e61121e565b806308c379a003610987575061096261123a565b8061096d5750610989565b8060405162461bcd60e51b81526004016101f39190610c0f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101f3565b6001600160e01b0319811663bc197c8160e01b14610a1e5760405162461bcd60e51b81526004016101f3906112c4565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610a6157610a6161108e565b602090810291909101015292915050565b6001600160a01b0384163b156106ad5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610ab6908990899088908890889060040161130c565b6020604051808303816000875af1925050508015610af1575060408051601f3d908101601f19168201909252610aee91810190611201565b60015b610afd5761094e61121e565b6001600160e01b0319811663f23a6e6160e01b14610a1e5760405162461bcd60e51b81526004016101f3906112c4565b80356001600160a01b0381168114610b4457600080fd5b919050565b60008060408385031215610b5c57600080fd5b610b6583610b2d565b946020939093013593505050565b6001600160e01b031981168114610b8957600080fd5b50565b600060208284031215610b9e57600080fd5b8135610ba981610b73565b9392505050565b600060208284031215610bc257600080fd5b5035919050565b6000815180845260005b81811015610bef57602081850181015186830182015201610bd3565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ba96020830184610bc9565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715610c5e57610c5e610c22565b6040525050565b600067ffffffffffffffff821115610c7f57610c7f610c22565b5060051b60200190565b600082601f830112610c9a57600080fd5b81356020610ca782610c65565b604051610cb48282610c38565b83815260059390931b8501820192828101915086841115610cd457600080fd5b8286015b84811015610cef5780358352918301918301610cd8565b509695505050505050565b600082601f830112610d0b57600080fd5b813567ffffffffffffffff811115610d2557610d25610c22565b604051610d3c601f8301601f191660200182610c38565b818152846020838601011115610d5157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610d8657600080fd5b610d8f86610b2d565b9450610d9d60208701610b2d565b9350604086013567ffffffffffffffff80821115610dba57600080fd5b610dc689838a01610c89565b94506060880135915080821115610ddc57600080fd5b610de889838a01610c89565b93506080880135915080821115610dfe57600080fd5b50610e0b88828901610cfa565b9150509295509295909350565b60008060408385031215610e2b57600080fd5b823567ffffffffffffffff80821115610e4357600080fd5b818501915085601f830112610e5757600080fd5b81356020610e6482610c65565b604051610e718282610c38565b83815260059390931b8501820192828101915089841115610e9157600080fd5b948201945b83861015610eb657610ea786610b2d565b82529482019490820190610e96565b96505086013592505080821115610ecc57600080fd5b50610ed985828601610c89565b9150509250929050565b600081518084526020808501945080840160005b83811015610f1357815187529582019590820190600101610ef7565b509495945050505050565b602081526000610ba96020830184610ee3565b60008060408385031215610f4457600080fd5b610f4d83610b2d565b915060208301358015158114610f6257600080fd5b809150509250929050565b60008060408385031215610f8057600080fd5b610f8983610b2d565b9150610f9760208401610b2d565b90509250929050565b600080600080600060a08688031215610fb857600080fd5b610fc186610b2d565b9450610fcf60208701610b2d565b93506040860135925060608601359150608086013567ffffffffffffffff811115610ff957600080fd5b610e0b88828901610cfa565b600181811c9082168061101957607f821691505b60208210810361103957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110cc576110cc6110a4565b5060010190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b80820180821115610221576102216110a4565b6040815260006111886040830185610ee3565b828103602084015261119a8185610ee3565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906111cf90830186610ee3565b82810360608401526111e18186610ee3565b905082810360808401526111f58185610bc9565b98975050505050505050565b60006020828403121561121357600080fd5b8151610ba981610b73565b600060033d11156112375760046000803e5060005160e01c5b90565b600060443d10156112485790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561127857505050505090565b82850191508151818111156112905750505050505090565b843d87010160208285010111156112aa5750505050505090565b6112b960208286010187610c38565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061134690830184610bc9565b97965050505050505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100875760003560e01c80634e1273f41161005b5780634e1273f41461010a578063a22cb4651461012a578063e985e9c51461013d578063f242432a1461017957600080fd5b8062fdd58e1461008c57806301ffc9a7146100b25780630e89341c146100d55780632eb2c2d6146100f5575b600080fd5b61009f61009a366004610b49565b61018c565b6040519081526020015b60405180910390f35b6100c56100c0366004610b8c565b610227565b60405190151581526020016100a9565b6100e86100e3366004610bb0565b610277565b6040516100a99190610c0f565b610108610103366004610d6e565b61030b565b005b61011d610118366004610e18565b610357565b6040516100a99190610f1e565b610108610138366004610f31565b610481565b6100c561014b366004610f6d565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205460ff1690565b610108610187366004610fa0565b610490565b60006001600160a01b0383166101fc5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b5060008181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061025857506001600160e01b031982166303a24d0760e21b145b8061022157506301ffc9a760e01b6001600160e01b0319831614610221565b60606067805461028690611005565b80601f01602080910402602001604051908101604052809291908181526020018280546102b290611005565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b50505050509050919050565b6001600160a01b0385163314806103275750610327853361014b565b6103435760405162461bcd60e51b81526004016101f39061103f565b61035085858585856104d5565b5050505050565b606081518351146103bc5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101f3565b6000835167ffffffffffffffff8111156103d8576103d8610c22565b604051908082528060200260200182016040528015610401578160200160208202803683370190505b50905060005b84518110156104795761044c8582815181106104255761042561108e565b602002602001015185838151811061043f5761043f61108e565b602002602001015161018c565b82828151811061045e5761045e61108e565b6020908102919091010152610472816110ba565b9050610407565b509392505050565b61048c3383836106b5565b5050565b6001600160a01b0385163314806104ac57506104ac853361014b565b6104c85760405162461bcd60e51b81526004016101f39061103f565b6103508585858585610795565b81518351146105375760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101f3565b6001600160a01b03841661055d5760405162461bcd60e51b81526004016101f3906110d3565b3360005b845181101561064757600085828151811061057e5761057e61108e565b60200260200101519050600085838151811061059c5761059c61108e565b60209081029190910181015160008481526065835260408082206001600160a01b038e1683529093529190912054909150818110156105ed5760405162461bcd60e51b81526004016101f390611118565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061062c908490611162565b9250508190555050505080610640906110ba565b9050610561565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610697929190611175565b60405180910390a46106ad8187878787876108c3565b505050505050565b816001600160a01b0316836001600160a01b0316036107285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101f3565b6001600160a01b03838116600081815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166107bb5760405162461bcd60e51b81526004016101f3906110d3565b3360006107c785610a27565b905060006107d485610a27565b905060008681526065602090815260408083206001600160a01b038c168452909152902054858110156108195760405162461bcd60e51b81526004016101f390611118565b60008781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290610858908490611162565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108b8848a8a8a8a8a610a72565b505050505050505050565b6001600160a01b0384163b156106ad5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061090790899089908890889088906004016111a3565b6020604051808303816000875af1925050508015610942575060408051601f3d908101601f1916820190925261093f91810190611201565b60015b6109ee5761094e61121e565b806308c379a003610987575061096261123a565b8061096d5750610989565b8060405162461bcd60e51b81526004016101f39190610c0f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101f3565b6001600160e01b0319811663bc197c8160e01b14610a1e5760405162461bcd60e51b81526004016101f3906112c4565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610a6157610a6161108e565b602090810291909101015292915050565b6001600160a01b0384163b156106ad5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610ab6908990899088908890889060040161130c565b6020604051808303816000875af1925050508015610af1575060408051601f3d908101601f19168201909252610aee91810190611201565b60015b610afd5761094e61121e565b6001600160e01b0319811663f23a6e6160e01b14610a1e5760405162461bcd60e51b81526004016101f3906112c4565b80356001600160a01b0381168114610b4457600080fd5b919050565b60008060408385031215610b5c57600080fd5b610b6583610b2d565b946020939093013593505050565b6001600160e01b031981168114610b8957600080fd5b50565b600060208284031215610b9e57600080fd5b8135610ba981610b73565b9392505050565b600060208284031215610bc257600080fd5b5035919050565b6000815180845260005b81811015610bef57602081850181015186830182015201610bd3565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ba96020830184610bc9565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715610c5e57610c5e610c22565b6040525050565b600067ffffffffffffffff821115610c7f57610c7f610c22565b5060051b60200190565b600082601f830112610c9a57600080fd5b81356020610ca782610c65565b604051610cb48282610c38565b83815260059390931b8501820192828101915086841115610cd457600080fd5b8286015b84811015610cef5780358352918301918301610cd8565b509695505050505050565b600082601f830112610d0b57600080fd5b813567ffffffffffffffff811115610d2557610d25610c22565b604051610d3c601f8301601f191660200182610c38565b818152846020838601011115610d5157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610d8657600080fd5b610d8f86610b2d565b9450610d9d60208701610b2d565b9350604086013567ffffffffffffffff80821115610dba57600080fd5b610dc689838a01610c89565b94506060880135915080821115610ddc57600080fd5b610de889838a01610c89565b93506080880135915080821115610dfe57600080fd5b50610e0b88828901610cfa565b9150509295509295909350565b60008060408385031215610e2b57600080fd5b823567ffffffffffffffff80821115610e4357600080fd5b818501915085601f830112610e5757600080fd5b81356020610e6482610c65565b604051610e718282610c38565b83815260059390931b8501820192828101915089841115610e9157600080fd5b948201945b83861015610eb657610ea786610b2d565b82529482019490820190610e96565b96505086013592505080821115610ecc57600080fd5b50610ed985828601610c89565b9150509250929050565b600081518084526020808501945080840160005b83811015610f1357815187529582019590820190600101610ef7565b509495945050505050565b602081526000610ba96020830184610ee3565b60008060408385031215610f4457600080fd5b610f4d83610b2d565b915060208301358015158114610f6257600080fd5b809150509250929050565b60008060408385031215610f8057600080fd5b610f8983610b2d565b9150610f9760208401610b2d565b90509250929050565b600080600080600060a08688031215610fb857600080fd5b610fc186610b2d565b9450610fcf60208701610b2d565b93506040860135925060608601359150608086013567ffffffffffffffff811115610ff957600080fd5b610e0b88828901610cfa565b600181811c9082168061101957607f821691505b60208210810361103957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110cc576110cc6110a4565b5060010190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b80820180821115610221576102216110a4565b6040815260006111886040830185610ee3565b828103602084015261119a8185610ee3565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906111cf90830186610ee3565b82810360608401526111e18186610ee3565b905082810360808401526111f58185610bc9565b98975050505050505050565b60006020828403121561121357600080fd5b8151610ba981610b73565b600060033d11156112375760046000803e5060005160e01c5b90565b600060443d10156112485790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561127857505050505090565b82850191508151818111156112905750505050505090565b843d87010160208285010111156112aa5750505050505090565b6112b960208286010187610c38565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061134690830184610bc9565b97965050505050505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506112db8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610084575f3560e01c80634e1273f4116100585780634e1273f414610106578063a22cb46514610126578063e985e9c514610139578063f242432a14610174575f80fd5b8062fdd58e1461008857806301ffc9a7146100ae5780630e89341c146100d15780632eb2c2d6146100f1575b5f80fd5b61009b610096366004610b1f565b610187565b6040519081526020015b60405180910390f35b6100c16100bc366004610b5f565b610220565b60405190151581526020016100a5565b6100e46100df366004610b81565b61026f565b6040516100a59190610bdb565b6101046100ff366004610d34565b610301565b005b610119610114366004610dd7565b61034d565b6040516100a59190610ed6565b610104610134366004610ee8565b61046d565b6100c1610147366004610f21565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205460ff1690565b610104610182366004610f52565b61047c565b5f6001600160a01b0383166101f65760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f8181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216636cdb3d1360e11b148061025057506001600160e01b031982166303a24d0760e21b145b8061021a57506301ffc9a760e01b6001600160e01b031983161461021a565b60606067805461027e90610fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90610fb2565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b50505050509050919050565b6001600160a01b03851633148061031d575061031d8533610147565b6103395760405162461bcd60e51b81526004016101ed90610fea565b61034685858585856104c1565b5050505050565b606081518351146103b25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101ed565b5f835167ffffffffffffffff8111156103cd576103cd610bed565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5090505f5b84518110156104655761044085828151811061041957610419611039565b602002602001015185838151811061043357610433611039565b6020026020010151610187565b82828151811061045257610452611039565b60209081029190910101526001016103fb565b509392505050565b610478338383610695565b5050565b6001600160a01b03851633148061049857506104988533610147565b6104b45760405162461bcd60e51b81526004016101ed90610fea565b6103468585858585610774565b81518351146105235760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101ed565b6001600160a01b0384166105495760405162461bcd60e51b81526004016101ed9061104d565b335f5b8451811015610627575f85828151811061056857610568611039565b602002602001015190505f85838151811061058557610585611039565b6020908102919091018101515f8481526065835260408082206001600160a01b038e1683529093529190912054909150818110156105d55760405162461bcd60e51b81526004016101ed90611092565b5f8381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906106139084906110dc565b90915550506001909301925061054c915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516106779291906110fb565b60405180910390a461068d81878787878761089e565b505050505050565b816001600160a01b0316836001600160a01b0316036107085760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101ed565b6001600160a01b038381165f81815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661079a5760405162461bcd60e51b81526004016101ed9061104d565b335f6107a585610a01565b90505f6107b185610a01565b90505f8681526065602090815260408083206001600160a01b038c168452909152902054858110156107f55760405162461bcd60e51b81526004016101ed90611092565b5f8781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906108339084906110dc565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610893848a8a8a8a8a610a4a565b505050505050505050565b6001600160a01b0384163b1561068d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906108e29089908990889088908890600401611128565b6020604051808303815f875af192505050801561091c575060408051601f3d908101601f1916820190925261091991810190611185565b60015b6109c8576109286111a0565b806308c379a003610961575061093c6111b9565b806109475750610963565b8060405162461bcd60e51b81526004016101ed9190610bdb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101ed565b6001600160e01b0319811663bc197c8160e01b146109f85760405162461bcd60e51b81526004016101ed90611242565b50505050505050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f81518110610a3957610a39611039565b602090810291909101015292915050565b6001600160a01b0384163b1561068d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610a8e908990899088908890889060040161128a565b6020604051808303815f875af1925050508015610ac8575060408051601f3d908101601f19168201909252610ac591810190611185565b60015b610ad4576109286111a0565b6001600160e01b0319811663f23a6e6160e01b146109f85760405162461bcd60e51b81526004016101ed90611242565b80356001600160a01b0381168114610b1a575f80fd5b919050565b5f8060408385031215610b30575f80fd5b610b3983610b04565b946020939093013593505050565b6001600160e01b031981168114610b5c575f80fd5b50565b5f60208284031215610b6f575f80fd5b8135610b7a81610b47565b9392505050565b5f60208284031215610b91575f80fd5b5035919050565b5f81518084525f5b81811015610bbc57602081850181015186830182015201610ba0565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610b7a6020830184610b98565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff81118282101715610c2757610c27610bed565b6040525050565b5f67ffffffffffffffff821115610c4757610c47610bed565b5060051b60200190565b5f82601f830112610c60575f80fd5b81356020610c6d82610c2e565b604051610c7a8282610c01565b80915083815260208101915060208460051b870101935086841115610c9d575f80fd5b602086015b84811015610cb95780358352918301918301610ca2565b509695505050505050565b5f82601f830112610cd3575f80fd5b813567ffffffffffffffff811115610ced57610ced610bed565b604051610d04601f8301601f191660200182610c01565b818152846020838601011115610d18575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610d48575f80fd5b610d5186610b04565b9450610d5f60208701610b04565b9350604086013567ffffffffffffffff80821115610d7b575f80fd5b610d8789838a01610c51565b94506060880135915080821115610d9c575f80fd5b610da889838a01610c51565b93506080880135915080821115610dbd575f80fd5b50610dca88828901610cc4565b9150509295509295909350565b5f8060408385031215610de8575f80fd5b823567ffffffffffffffff80821115610dff575f80fd5b818501915085601f830112610e12575f80fd5b81356020610e1f82610c2e565b604051610e2c8282610c01565b83815260059390931b8501820192828101915089841115610e4b575f80fd5b948201945b83861015610e7057610e6186610b04565b82529482019490820190610e50565b96505086013592505080821115610e85575f80fd5b50610e9285828601610c51565b9150509250929050565b5f815180845260208085019450602084015f5b83811015610ecb57815187529582019590820190600101610eaf565b509495945050505050565b602081525f610b7a6020830184610e9c565b5f8060408385031215610ef9575f80fd5b610f0283610b04565b915060208301358015158114610f16575f80fd5b809150509250929050565b5f8060408385031215610f32575f80fd5b610f3b83610b04565b9150610f4960208401610b04565b90509250929050565b5f805f805f60a08688031215610f66575f80fd5b610f6f86610b04565b9450610f7d60208701610b04565b93506040860135925060608601359150608086013567ffffffffffffffff811115610fa6575f80fd5b610dca88828901610cc4565b600181811c90821680610fc657607f821691505b602082108103610fe457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b8082018082111561021a57634e487b7160e01b5f52601160045260245ffd5b604081525f61110d6040830185610e9c565b828103602084015261111f8185610e9c565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190525f9061115390830186610e9c565b82810360608401526111658186610e9c565b905082810360808401526111798185610b98565b98975050505050505050565b5f60208284031215611195575f80fd5b8151610b7a81610b47565b5f60033d11156111b65760045f803e505f5160e01c5b90565b5f60443d10156111c65790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156111f657505050505090565b828501915081518181111561120e5750505050505090565b843d87010160208285010111156112285750505050505090565b61123760208286010187610c01565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112c390830184610b98565b97965050505050505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610084575f3560e01c80634e1273f4116100585780634e1273f414610106578063a22cb46514610126578063e985e9c514610139578063f242432a14610174575f80fd5b8062fdd58e1461008857806301ffc9a7146100ae5780630e89341c146100d15780632eb2c2d6146100f1575b5f80fd5b61009b610096366004610b1f565b610187565b6040519081526020015b60405180910390f35b6100c16100bc366004610b5f565b610220565b60405190151581526020016100a5565b6100e46100df366004610b81565b61026f565b6040516100a59190610bdb565b6101046100ff366004610d34565b610301565b005b610119610114366004610dd7565b61034d565b6040516100a59190610ed6565b610104610134366004610ee8565b61046d565b6100c1610147366004610f21565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205460ff1690565b610104610182366004610f52565b61047c565b5f6001600160a01b0383166101f65760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f8181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216636cdb3d1360e11b148061025057506001600160e01b031982166303a24d0760e21b145b8061021a57506301ffc9a760e01b6001600160e01b031983161461021a565b60606067805461027e90610fb2565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90610fb2565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b50505050509050919050565b6001600160a01b03851633148061031d575061031d8533610147565b6103395760405162461bcd60e51b81526004016101ed90610fea565b61034685858585856104c1565b5050505050565b606081518351146103b25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101ed565b5f835167ffffffffffffffff8111156103cd576103cd610bed565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5090505f5b84518110156104655761044085828151811061041957610419611039565b602002602001015185838151811061043357610433611039565b6020026020010151610187565b82828151811061045257610452611039565b60209081029190910101526001016103fb565b509392505050565b610478338383610695565b5050565b6001600160a01b03851633148061049857506104988533610147565b6104b45760405162461bcd60e51b81526004016101ed90610fea565b6103468585858585610774565b81518351146105235760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101ed565b6001600160a01b0384166105495760405162461bcd60e51b81526004016101ed9061104d565b335f5b8451811015610627575f85828151811061056857610568611039565b602002602001015190505f85838151811061058557610585611039565b6020908102919091018101515f8481526065835260408082206001600160a01b038e1683529093529190912054909150818110156105d55760405162461bcd60e51b81526004016101ed90611092565b5f8381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906106139084906110dc565b90915550506001909301925061054c915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516106779291906110fb565b60405180910390a461068d81878787878761089e565b505050505050565b816001600160a01b0316836001600160a01b0316036107085760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101ed565b6001600160a01b038381165f81815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661079a5760405162461bcd60e51b81526004016101ed9061104d565b335f6107a585610a01565b90505f6107b185610a01565b90505f8681526065602090815260408083206001600160a01b038c168452909152902054858110156107f55760405162461bcd60e51b81526004016101ed90611092565b5f8781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906108339084906110dc565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610893848a8a8a8a8a610a4a565b505050505050505050565b6001600160a01b0384163b1561068d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906108e29089908990889088908890600401611128565b6020604051808303815f875af192505050801561091c575060408051601f3d908101601f1916820190925261091991810190611185565b60015b6109c8576109286111a0565b806308c379a003610961575061093c6111b9565b806109475750610963565b8060405162461bcd60e51b81526004016101ed9190610bdb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101ed565b6001600160e01b0319811663bc197c8160e01b146109f85760405162461bcd60e51b81526004016101ed90611242565b50505050505050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f81518110610a3957610a39611039565b602090810291909101015292915050565b6001600160a01b0384163b1561068d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610a8e908990899088908890889060040161128a565b6020604051808303815f875af1925050508015610ac8575060408051601f3d908101601f19168201909252610ac591810190611185565b60015b610ad4576109286111a0565b6001600160e01b0319811663f23a6e6160e01b146109f85760405162461bcd60e51b81526004016101ed90611242565b80356001600160a01b0381168114610b1a575f80fd5b919050565b5f8060408385031215610b30575f80fd5b610b3983610b04565b946020939093013593505050565b6001600160e01b031981168114610b5c575f80fd5b50565b5f60208284031215610b6f575f80fd5b8135610b7a81610b47565b9392505050565b5f60208284031215610b91575f80fd5b5035919050565b5f81518084525f5b81811015610bbc57602081850181015186830182015201610ba0565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610b7a6020830184610b98565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff81118282101715610c2757610c27610bed565b6040525050565b5f67ffffffffffffffff821115610c4757610c47610bed565b5060051b60200190565b5f82601f830112610c60575f80fd5b81356020610c6d82610c2e565b604051610c7a8282610c01565b80915083815260208101915060208460051b870101935086841115610c9d575f80fd5b602086015b84811015610cb95780358352918301918301610ca2565b509695505050505050565b5f82601f830112610cd3575f80fd5b813567ffffffffffffffff811115610ced57610ced610bed565b604051610d04601f8301601f191660200182610c01565b818152846020838601011115610d18575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610d48575f80fd5b610d5186610b04565b9450610d5f60208701610b04565b9350604086013567ffffffffffffffff80821115610d7b575f80fd5b610d8789838a01610c51565b94506060880135915080821115610d9c575f80fd5b610da889838a01610c51565b93506080880135915080821115610dbd575f80fd5b50610dca88828901610cc4565b9150509295509295909350565b5f8060408385031215610de8575f80fd5b823567ffffffffffffffff80821115610dff575f80fd5b818501915085601f830112610e12575f80fd5b81356020610e1f82610c2e565b604051610e2c8282610c01565b83815260059390931b8501820192828101915089841115610e4b575f80fd5b948201945b83861015610e7057610e6186610b04565b82529482019490820190610e50565b96505086013592505080821115610e85575f80fd5b50610e9285828601610c51565b9150509250929050565b5f815180845260208085019450602084015f5b83811015610ecb57815187529582019590820190600101610eaf565b509495945050505050565b602081525f610b7a6020830184610e9c565b5f8060408385031215610ef9575f80fd5b610f0283610b04565b915060208301358015158114610f16575f80fd5b809150509250929050565b5f8060408385031215610f32575f80fd5b610f3b83610b04565b9150610f4960208401610b04565b90509250929050565b5f805f805f60a08688031215610f66575f80fd5b610f6f86610b04565b9450610f7d60208701610b04565b93506040860135925060608601359150608086013567ffffffffffffffff811115610fa6575f80fd5b610dca88828901610cc4565b600181811c90821680610fc657607f821691505b602082108103610fe457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b8082018082111561021a57634e487b7160e01b5f52601160045260245ffd5b604081525f61110d6040830185610e9c565b828103602084015261111f8185610e9c565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190525f9061115390830186610e9c565b82810360608401526111658186610e9c565b905082810360808401526111798185610b98565b98975050505050505050565b5f60208284031215611195575f80fd5b8151610b7a81610b47565b5f60033d11156111b65760045f803e505f5160e01c5b90565b5f60443d10156111c65790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156111f657505050505090565b828501915081518181111561120e5750505050505090565b843d87010160208285010111156112285750505050505090565b61123760208286010187610c01565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112c390830184610b98565b97965050505050505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC1271SimpleWallet.json b/artifacts/ERC1271SimpleWallet.json index 836f2c63..076115f2 100644 --- a/artifacts/ERC1271SimpleWallet.json +++ b/artifacts/ERC1271SimpleWallet.json @@ -39,8 +39,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161055138038061055183398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6104be806100936000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631626ba7e14610030575b600080fd5b61004361003e3660046103e0565b610060565b6040516001600160e01b0319909116815260200160405180910390f35b600080546001600160a01b031661007784846100b6565b6001600160a01b0316036100ac57507f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968696100b0565b5060005b92915050565b60008060006100c585856100da565b915091506100d28161011f565b509392505050565b60008082516041036101105760208301516040840151606085015160001a610104878285856102dd565b94509450505050610118565b506000905060025b9250929050565b60008160048111156101335761013361049b565b0361013b5750565b600181600481111561014f5761014f61049b565b036101a15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156101b5576101b561049b565b036102025760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610198565b60038160048111156102165761021661049b565b0361026e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610198565b60048160048111156102825761028261049b565b036102da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610198565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561031457506000905060036103c1565b8460ff16601b1415801561032c57508460ff16601c14155b1561033d57506000905060046103c1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610391573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166103ba576000600192509250506103c1565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156103f357600080fd5b82359150602083013567ffffffffffffffff8082111561041257600080fd5b818501915085601f83011261042657600080fd5b813581811115610438576104386103ca565b604051601f8201601f19908116603f01168101908382118183101715610460576104606103ca565b8160405282815288602084870101111561047957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80631626ba7e14610030575b600080fd5b61004361003e3660046103e0565b610060565b6040516001600160e01b0319909116815260200160405180910390f35b600080546001600160a01b031661007784846100b6565b6001600160a01b0316036100ac57507f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968696100b0565b5060005b92915050565b60008060006100c585856100da565b915091506100d28161011f565b509392505050565b60008082516041036101105760208301516040840151606085015160001a610104878285856102dd565b94509450505050610118565b506000905060025b9250929050565b60008160048111156101335761013361049b565b0361013b5750565b600181600481111561014f5761014f61049b565b036101a15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156101b5576101b561049b565b036102025760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610198565b60038160048111156102165761021661049b565b0361026e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610198565b60048160048111156102825761028261049b565b036102da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610198565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561031457506000905060036103c1565b8460ff16601b1415801561032c57508460ff16601c14155b1561033d57506000905060046103c1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610391573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166103ba576000600192509250506103c1565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156103f357600080fd5b82359150602083013567ffffffffffffffff8082111561041257600080fd5b818501915085601f83011261042657600080fd5b813581811115610438576104386103ca565b604051601f8201601f19908116603f01168101908382118183101715610460576104606103ca565b8160405282815288602084870101111561047957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b5060405161052d38038061052d83398101604081905261002e91610052565b5f80546001600160a01b0319166001600160a01b039290921691909117905561007f565b5f60208284031215610062575f80fd5b81516001600160a01b0381168114610078575f80fd5b9392505050565b6104a18061008c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80631626ba7e1461002d575b5f80fd5b61004061003b3660046103cb565b61005d565b6040516001600160e01b0319909116815260200160405180910390f35b5f80546001600160a01b031661007384846100b1565b6001600160a01b0316036100a857507f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968696100ab565b505f5b92915050565b5f805f6100be85856100d3565b915091506100cb81610115565b509392505050565b5f808251604103610107576020830151604084015160608501515f1a6100fb878285856102d2565b9450945050505061010e565b505f905060025b9250929050565b5f81600481111561012857610128610480565b036101305750565b600181600481111561014457610144610480565b036101965760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156101aa576101aa610480565b036101f75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161018d565b600381600481111561020b5761020b610480565b036102635760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161018d565b600481600481111561027757610277610480565b036102cf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161018d565b50565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561030757505f905060036103ae565b8460ff16601b1415801561031f57508460ff16601c14155b1561032f57505f905060046103ae565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610380573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166103a8575f600192509250506103ae565b91505f90505b94509492505050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156103dc575f80fd5b82359150602083013567ffffffffffffffff808211156103fa575f80fd5b818501915085601f83011261040d575f80fd5b81358181111561041f5761041f6103b7565b604051601f8201601f19908116603f01168101908382118183101715610447576104476103b7565b8160405282815288602084870101111561045f575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80631626ba7e1461002d575b5f80fd5b61004061003b3660046103cb565b61005d565b6040516001600160e01b0319909116815260200160405180910390f35b5f80546001600160a01b031661007384846100b1565b6001600160a01b0316036100a857507f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968696100ab565b505f5b92915050565b5f805f6100be85856100d3565b915091506100cb81610115565b509392505050565b5f808251604103610107576020830151604084015160608501515f1a6100fb878285856102d2565b9450945050505061010e565b505f905060025b9250929050565b5f81600481111561012857610128610480565b036101305750565b600181600481111561014457610144610480565b036101965760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156101aa576101aa610480565b036101f75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161018d565b600381600481111561020b5761020b610480565b036102635760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161018d565b600481600481111561027757610277610480565b036102cf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161018d565b50565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561030757505f905060036103ae565b8460ff16601b1415801561031f57508460ff16601c14155b1561032f57505f905060046103ae565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610380573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166103a8575f600192509250506103ae565b91505f90505b94509492505050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156103dc575f80fd5b82359150602083013567ffffffffffffffff808211156103fa575f80fd5b818501915085601f83011261040d575f80fd5b81358181111561041f5761041f6103b7565b604051601f8201601f19908116603f01168101908382118183101715610447576104476103b7565b8160405282815288602084870101111561045f575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC20.json b/artifacts/ERC20.json index 7285e8aa..93ca8727 100644 --- a/artifacts/ERC20.json +++ b/artifacts/ERC20.json @@ -290,8 +290,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000b1d38038062000b1d83398101604081905262000034916200011f565b600362000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61082980620002f46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea164736f6c6343000811000a", + "bytecode": "0x608060405234801562000010575f80fd5b5060405162000aeb38038062000aeb83398101604081905262000033916200011a565b60036200004183826200020a565b5060046200005082826200020a565b505050620002d6565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200007d575f80fd5b81516001600160401b03808211156200009a576200009a62000059565b604051601f8301601f19908116603f01168101908282118183101715620000c557620000c562000059565b8160405283815260209250866020858801011115620000e2575f80fd5b5f91505b83821015620001055785820183015181830184015290820190620000e6565b5f602085830101528094505050505092915050565b5f80604083850312156200012c575f80fd5b82516001600160401b038082111562000143575f80fd5b62000151868387016200006d565b9350602085015191508082111562000167575f80fd5b5062000176858286016200006d565b9150509250929050565b600181811c908216806200019557607f821691505b602082108103620001b457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200020557805f5260205f20601f840160051c81016020851015620001e15750805b601f840160051c820191505b8181101562000202575f8155600101620001ed565b50505b505050565b81516001600160401b0381111562000226576200022662000059565b6200023e8162000237845462000180565b84620001ba565b602080601f83116001811462000274575f84156200025c5750858301515b5f19600386901b1c1916600185901b178555620002ce565b5f85815260208120601f198616915b82811015620002a45788860151825594840194600190910190840162000283565b5085821015620002c257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b61080780620002e45f395ff3fe608060405234801561000f575f80fd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f80fd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f80fd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f1565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610719565b610244565b604051601281526020016100bf565b6100db61012d3660046106f1565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f1565b610297565b6100db6101833660046106f1565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b5f602080835283518060208501525f5b818110156106b65785810183015185820160400152820161069a565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106ec575f80fd5b919050565b5f8060408385031215610702575f80fd5b61070b836106d6565b946020939093013593505050565b5f805f6060848603121561072b575f80fd5b610734846106d6565b9250610742602085016106d6565b9150604084013590509250925092565b5f60208284031215610762575f80fd5b61076b826106d6565b9392505050565b5f8060408385031215610783575f80fd5b61078c836106d6565b915061079a602084016106d6565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f80fd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f80fd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f1565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610719565b610244565b604051601281526020016100bf565b6100db61012d3660046106f1565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f1565b610297565b6100db6101833660046106f1565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b5f602080835283518060208501525f5b818110156106b65785810183015185820160400152820161069a565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106ec575f80fd5b919050565b5f8060408385031215610702575f80fd5b61070b836106d6565b946020939093013593505050565b5f805f6060848603121561072b575f80fd5b610734846106d6565b9250610742602085016106d6565b9150604084013590509250925092565b5f60208284031215610762575f80fd5b61076b826106d6565b9392505050565b5f8060408385031215610783575f80fd5b61078c836106d6565b915061079a602084016106d6565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC20Recoverable.json b/artifacts/ERC20Recoverable.json index fb5becb9..1a376bee 100644 --- a/artifacts/ERC20Recoverable.json +++ b/artifacts/ERC20Recoverable.json @@ -79,8 +79,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103068061007e6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635d3590d514610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f366004610279565b6100a0565b005b610064610121565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b3660046102b5565b610135565b6100a86101b3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102d7565b50505050565b6101296101b3565b610133600061020d565b565b61013d6101b3565b6001600160a01b0381166101a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101b08161020d565b50565b6000546001600160a01b031633146101335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161019e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461027457600080fd5b919050565b60008060006060848603121561028e57600080fd5b6102978461025d565b92506102a56020850161025d565b9150604084013590509250925092565b6000602082840312156102c757600080fd5b6102d08261025d565b9392505050565b6000602082840312156102e957600080fd5b815180151581146102d057600080fdfea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80635d3590d514610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f366004610279565b6100a0565b005b610064610121565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b3660046102b5565b610135565b6100a86101b3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102d7565b50505050565b6101296101b3565b610133600061020d565b565b61013d6101b3565b6001600160a01b0381166101a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101b08161020d565b50565b6000546001600160a01b031633146101335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161019e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461027457600080fd5b919050565b60008060006060848603121561028e57600080fd5b6102978461025d565b92506102a56020850161025d565b9150604084013590509250925092565b6000602082840312156102c757600080fd5b6102d08261025d565b9392505050565b6000602082840312156102e957600080fd5b815180151581146102d057600080fdfea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506100193361001e565b61006d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6102f38061007a5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80635d3590d51461004e578063715018a6146100635780638da5cb5b1461006b578063f2fde38b14610089575b5f80fd5b61006161005c36600461026e565b61009c565b005b61006161011a565b5f54604080516001600160a01b039092168252519081900360200190f35b6100616100973660046102a7565b61012d565b6100a46101ab565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af11580156100f0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011491906102c7565b50505050565b6101226101ab565b61012b5f610204565b565b6101356101ab565b6001600160a01b03811661019f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101a881610204565b50565b5f546001600160a01b0316331461012b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610196565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610269575f80fd5b919050565b5f805f60608486031215610280575f80fd5b61028984610253565b925061029760208501610253565b9150604084013590509250925092565b5f602082840312156102b7575f80fd5b6102c082610253565b9392505050565b5f602082840312156102d7575f80fd5b815180151581146102c0575f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061004a575f3560e01c80635d3590d51461004e578063715018a6146100635780638da5cb5b1461006b578063f2fde38b14610089575b5f80fd5b61006161005c36600461026e565b61009c565b005b61006161011a565b5f54604080516001600160a01b039092168252519081900360200190f35b6100616100973660046102a7565b61012d565b6100a46101ab565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af11580156100f0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011491906102c7565b50505050565b6101226101ab565b61012b5f610204565b565b6101356101ab565b6001600160a01b03811661019f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101a881610204565b50565b5f546001600160a01b0316331461012b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610196565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610269575f80fd5b919050565b5f805f60608486031215610280575f80fd5b61028984610253565b925061029760208501610253565b9150604084013590509250925092565b5f602082840312156102b7575f80fd5b6102c082610253565b9392505050565b5f602082840312156102d7575f80fd5b815180151581146102c0575f80fdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC721.json b/artifacts/ERC721.json index 15b852a0..1a6d2d17 100644 --- a/artifacts/ERC721.json +++ b/artifacts/ERC721.json @@ -350,8 +350,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620013be380380620013be83398101604081905262000034916200011f565b600062000042838262000218565b50600162000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110ca80620002f46000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610c7f565b610228565b60405190151581526020015b60405180910390f35b61010461027a565b6040516100f39190610cec565b61012461011f366004610cff565b61030c565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610d34565b610333565b005b61014f61015f366004610d5e565b61044d565b61014f610172366004610d5e565b61047e565b610124610185366004610cff565b610499565b61019d610198366004610d9a565b6104f9565b6040519081526020016100f3565b61010461057f565b61014f6101c1366004610db5565b61058e565b61014f6101d4366004610e07565b61059d565b6101046101e7366004610cff565b6105d5565b6100e76101fa366004610ee3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461028990610f16565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590610f16565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b5050505050905090565b600061031782610649565b506000908152600460205260409020546001600160a01b031690565b600061033e82610499565b9050806001600160a01b0316836001600160a01b0316036103b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103cc57506103cc81336101fa565b61043e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103a7565b61044883836106ab565b505050565b6104573382610719565b6104735760405162461bcd60e51b81526004016103a790610f50565b610448838383610798565b6104488383836040518060200160405280600081525061059d565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a7565b60006001600160a01b0382166105635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103a7565b506001600160a01b031660009081526003602052604090205490565b60606001805461028990610f16565b6105993383836108fc565b5050565b6105a73383610719565b6105c35760405162461bcd60e51b81526004016103a790610f50565b6105cf848484846109ca565b50505050565b60606105e082610649565b60006105f760408051602081019091526000815290565b905060008151116106175760405180602001604052806000815250610642565b80610621846109fd565b604051602001610632929190610f9d565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b03166106a85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a7565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e082610499565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061072583610499565b9050806001600160a01b0316846001600160a01b0316148061076c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806107905750836001600160a01b03166107858461030c565b6001600160a01b0316145b949350505050565b826001600160a01b03166107ab82610499565b6001600160a01b0316146107d15760405162461bcd60e51b81526004016103a790610fcc565b6001600160a01b0382166108335760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103a7565b826001600160a01b031661084682610499565b6001600160a01b03161461086c5760405162461bcd60e51b81526004016103a790610fcc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361095d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103a7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d5848484610798565b6109e184848484610a90565b6105cf5760405162461bcd60e51b81526004016103a790611011565b60606000610a0a83610b91565b600101905060008167ffffffffffffffff811115610a2a57610a2a610df1565b6040519080825280601f01601f191660200182016040528015610a54576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a5e57509392505050565b60006001600160a01b0384163b15610b8657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ad4903390899088908890600401611063565b6020604051808303816000875af1925050508015610b0f575060408051601f3d908101601f19168201909252610b0c918101906110a0565b60015b610b6c573d808015610b3d576040519150601f19603f3d011682016040523d82523d6000602084013e610b42565b606091505b508051600003610b645760405162461bcd60e51b81526004016103a790611011565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610790565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bd05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610bfc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610c1a57662386f26fc10000830492506010015b6305f5e1008310610c32576305f5e100830492506008015b6127108310610c4657612710830492506004015b60648310610c58576064830492506002015b600a83106102745760010192915050565b6001600160e01b0319811681146106a857600080fd5b600060208284031215610c9157600080fd5b813561064281610c69565b60005b83811015610cb7578181015183820152602001610c9f565b50506000910152565b60008151808452610cd8816020860160208601610c9c565b601f01601f19169290920160200192915050565b6020815260006106426020830184610cc0565b600060208284031215610d1157600080fd5b5035919050565b80356001600160a01b0381168114610d2f57600080fd5b919050565b60008060408385031215610d4757600080fd5b610d5083610d18565b946020939093013593505050565b600080600060608486031215610d7357600080fd5b610d7c84610d18565b9250610d8a60208501610d18565b9150604084013590509250925092565b600060208284031215610dac57600080fd5b61064282610d18565b60008060408385031215610dc857600080fd5b610dd183610d18565b915060208301358015158114610de657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e1d57600080fd5b610e2685610d18565b9350610e3460208601610d18565b925060408501359150606085013567ffffffffffffffff80821115610e5857600080fd5b818701915087601f830112610e6c57600080fd5b813581811115610e7e57610e7e610df1565b604051601f8201601f19908116603f01168101908382118183101715610ea657610ea6610df1565b816040528281528a6020848701011115610ebf57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215610ef657600080fd5b610eff83610d18565b9150610f0d60208401610d18565b90509250929050565b600181811c90821680610f2a57607f821691505b602082108103610f4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60008351610faf818460208801610c9c565b835190830190610fc3818360208801610c9c565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061109690830184610cc0565b9695505050505050565b6000602082840312156110b257600080fd5b815161064281610c6956fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610c7f565b610228565b60405190151581526020015b60405180910390f35b61010461027a565b6040516100f39190610cec565b61012461011f366004610cff565b61030c565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610d34565b610333565b005b61014f61015f366004610d5e565b61044d565b61014f610172366004610d5e565b61047e565b610124610185366004610cff565b610499565b61019d610198366004610d9a565b6104f9565b6040519081526020016100f3565b61010461057f565b61014f6101c1366004610db5565b61058e565b61014f6101d4366004610e07565b61059d565b6101046101e7366004610cff565b6105d5565b6100e76101fa366004610ee3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061025957506001600160e01b03198216635b5e139f60e01b145b8061027457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461028990610f16565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590610f16565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b5050505050905090565b600061031782610649565b506000908152600460205260409020546001600160a01b031690565b600061033e82610499565b9050806001600160a01b0316836001600160a01b0316036103b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103cc57506103cc81336101fa565b61043e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103a7565b61044883836106ab565b505050565b6104573382610719565b6104735760405162461bcd60e51b81526004016103a790610f50565b610448838383610798565b6104488383836040518060200160405280600081525061059d565b6000818152600260205260408120546001600160a01b0316806102745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a7565b60006001600160a01b0382166105635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103a7565b506001600160a01b031660009081526003602052604090205490565b60606001805461028990610f16565b6105993383836108fc565b5050565b6105a73383610719565b6105c35760405162461bcd60e51b81526004016103a790610f50565b6105cf848484846109ca565b50505050565b60606105e082610649565b60006105f760408051602081019091526000815290565b905060008151116106175760405180602001604052806000815250610642565b80610621846109fd565b604051602001610632929190610f9d565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b03166106a85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103a7565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e082610499565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061072583610499565b9050806001600160a01b0316846001600160a01b0316148061076c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806107905750836001600160a01b03166107858461030c565b6001600160a01b0316145b949350505050565b826001600160a01b03166107ab82610499565b6001600160a01b0316146107d15760405162461bcd60e51b81526004016103a790610fcc565b6001600160a01b0382166108335760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103a7565b826001600160a01b031661084682610499565b6001600160a01b03161461086c5760405162461bcd60e51b81526004016103a790610fcc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361095d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103a7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d5848484610798565b6109e184848484610a90565b6105cf5760405162461bcd60e51b81526004016103a790611011565b60606000610a0a83610b91565b600101905060008167ffffffffffffffff811115610a2a57610a2a610df1565b6040519080825280601f01601f191660200182016040528015610a54576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a5e57509392505050565b60006001600160a01b0384163b15610b8657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ad4903390899088908890600401611063565b6020604051808303816000875af1925050508015610b0f575060408051601f3d908101601f19168201909252610b0c918101906110a0565b60015b610b6c573d808015610b3d576040519150601f19603f3d011682016040523d82523d6000602084013e610b42565b606091505b508051600003610b645760405162461bcd60e51b81526004016103a790611011565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610790565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bd05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610bfc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610c1a57662386f26fc10000830492506010015b6305f5e1008310610c32576305f5e100830492506008015b6127108310610c4657612710830492506004015b60648310610c58576064830492506002015b600a83106102745760010192915050565b6001600160e01b0319811681146106a857600080fd5b600060208284031215610c9157600080fd5b813561064281610c69565b60005b83811015610cb7578181015183820152602001610c9f565b50506000910152565b60008151808452610cd8816020860160208601610c9c565b601f01601f19169290920160200192915050565b6020815260006106426020830184610cc0565b600060208284031215610d1157600080fd5b5035919050565b80356001600160a01b0381168114610d2f57600080fd5b919050565b60008060408385031215610d4757600080fd5b610d5083610d18565b946020939093013593505050565b600080600060608486031215610d7357600080fd5b610d7c84610d18565b9250610d8a60208501610d18565b9150604084013590509250925092565b600060208284031215610dac57600080fd5b61064282610d18565b60008060408385031215610dc857600080fd5b610dd183610d18565b915060208301358015158114610de657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e1d57600080fd5b610e2685610d18565b9350610e3460208601610d18565b925060408501359150606085013567ffffffffffffffff80821115610e5857600080fd5b818701915087601f830112610e6c57600080fd5b813581811115610e7e57610e7e610df1565b604051601f8201601f19908116603f01168101908382118183101715610ea657610ea6610df1565b816040528281528a6020848701011115610ebf57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215610ef657600080fd5b610eff83610d18565b9150610f0d60208401610d18565b90509250929050565b600181811c90821680610f2a57607f821691505b602082108103610f4a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60008351610faf818460208801610c9c565b835190830190610fc3818360208801610c9c565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061109690830184610cc0565b9695505050505050565b6000602082840312156110b257600080fd5b815161064281610c6956fea164736f6c6343000811000a", + "bytecode": "0x608060405234801562000010575f80fd5b506040516200136438038062001364833981016040819052620000339162000119565b5f62000040838262000209565b5060016200004f828262000209565b505050620002d5565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200007c575f80fd5b81516001600160401b038082111562000099576200009962000058565b604051601f8301601f19908116603f01168101908282118183101715620000c457620000c462000058565b8160405283815260209250866020858801011115620000e1575f80fd5b5f91505b83821015620001045785820183015181830184015290820190620000e5565b5f602085830101528094505050505092915050565b5f80604083850312156200012b575f80fd5b82516001600160401b038082111562000142575f80fd5b62000150868387016200006c565b9350602085015191508082111562000166575f80fd5b5062000175858286016200006c565b9150509250929050565b600181811c908216806200019457607f821691505b602082108103620001b357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200020457805f5260205f20601f840160051c81016020851015620001e05750805b601f840160051c820191505b8181101562000201575f8155600101620001ec565b50505b505050565b81516001600160401b0381111562000225576200022562000058565b6200023d816200023684546200017f565b84620001b9565b602080601f83116001811462000273575f84156200025b5750858301515b5f19600386901b1c1916600185901b178555620002cd565b5f85815260208120601f198616915b82811015620002a35788860151825594840194600190910190840162000282565b5085821015620002c157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b61108180620002e35f395ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c80636352211e11610088578063a22cb46511610063578063a22cb465146101ae578063b88d4fde146101c1578063c87b56dd146101d4578063e985e9c5146101e7575f80fd5b80636352211e1461017257806370a082311461018557806395d89b41146101a6575f80fd5b806301ffc9a7146100cf57806306fdde03146100f7578063081812fc1461010c578063095ea7b31461013757806323b872dd1461014c57806342842e0e1461015f575b5f80fd5b6100e26100dd366004610c5a565b610222565b60405190151581526020015b60405180910390f35b6100ff610273565b6040516100ee9190610cc2565b61011f61011a366004610cd4565b610302565b6040516001600160a01b0390911681526020016100ee565b61014a610145366004610d06565b610327565b005b61014a61015a366004610d2e565b610440565b61014a61016d366004610d2e565b610471565b61011f610180366004610cd4565b61048b565b610198610193366004610d67565b6104ea565b6040519081526020016100ee565b6100ff61056e565b61014a6101bc366004610d80565b61057d565b61014a6101cf366004610dcd565b61058c565b6100ff6101e2366004610cd4565b6105c4565b6100e26101f5366004610ea2565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166380ac58cd60e01b148061025257506001600160e01b03198216635b5e139f60e01b145b8061026d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f805461028190610ed3565b80601f01602080910402602001604051908101604052809291908181526020018280546102ad90610ed3565b80156102f85780601f106102cf576101008083540402835291602001916102f8565b820191905f5260205f20905b8154815290600101906020018083116102db57829003601f168201915b5050505050905090565b5f61030c82610634565b505f908152600460205260409020546001600160a01b031690565b5f6103318261048b565b9050806001600160a01b0316836001600160a01b0316036103a35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103bf57506103bf81336101f5565b6104315760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161039a565b61043b8383610695565b505050565b61044a3382610702565b6104665760405162461bcd60e51b815260040161039a90610f0b565b61043b83838361077f565b61043b83838360405180602001604052805f81525061058c565b5f818152600260205260408120546001600160a01b03168061026d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161039a565b5f6001600160a01b0382166105535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161039a565b506001600160a01b03165f9081526003602052604090205490565b60606001805461028190610ed3565b6105883383836108e1565b5050565b6105963383610702565b6105b25760405162461bcd60e51b815260040161039a90610f0b565b6105be848484846109ae565b50505050565b60606105cf82610634565b5f6105e460408051602081019091525f815290565b90505f8151116106025760405180602001604052805f81525061062d565b8061060c846109e1565b60405160200161061d929190610f58565b6040516020818303038152906040525b9392505050565b5f818152600260205260409020546001600160a01b03166106925760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161039a565b50565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106c98261048b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f8061070d8361048b565b9050806001600160a01b0316846001600160a01b0316148061075357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b806107775750836001600160a01b031661076c84610302565b6001600160a01b0316145b949350505050565b826001600160a01b03166107928261048b565b6001600160a01b0316146107b85760405162461bcd60e51b815260040161039a90610f86565b6001600160a01b03821661081a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161039a565b826001600160a01b031661082d8261048b565b6001600160a01b0316146108535760405162461bcd60e51b815260040161039a90610f86565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316036109425760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161039a565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109b984848461077f565b6109c584848484610a71565b6105be5760405162461bcd60e51b815260040161039a90610fcb565b60605f6109ed83610b6e565b60010190505f8167ffffffffffffffff811115610a0c57610a0c610db9565b6040519080825280601f01601f191660200182016040528015610a36576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a4057509392505050565b5f6001600160a01b0384163b15610b6357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ab490339089908890889060040161101d565b6020604051808303815f875af1925050508015610aee575060408051601f3d908101601f19168201909252610aeb91810190611059565b60015b610b49573d808015610b1b576040519150601f19603f3d011682016040523d82523d5f602084013e610b20565b606091505b5080515f03610b415760405162461bcd60e51b815260040161039a90610fcb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610777565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bac5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610bd8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610bf657662386f26fc10000830492506010015b6305f5e1008310610c0e576305f5e100830492506008015b6127108310610c2257612710830492506004015b60648310610c34576064830492506002015b600a831061026d5760010192915050565b6001600160e01b031981168114610692575f80fd5b5f60208284031215610c6a575f80fd5b813561062d81610c45565b5f5b83811015610c8f578181015183820152602001610c77565b50505f910152565b5f8151808452610cae816020860160208601610c75565b601f01601f19169290920160200192915050565b602081525f61062d6020830184610c97565b5f60208284031215610ce4575f80fd5b5035919050565b80356001600160a01b0381168114610d01575f80fd5b919050565b5f8060408385031215610d17575f80fd5b610d2083610ceb565b946020939093013593505050565b5f805f60608486031215610d40575f80fd5b610d4984610ceb565b9250610d5760208501610ceb565b9150604084013590509250925092565b5f60208284031215610d77575f80fd5b61062d82610ceb565b5f8060408385031215610d91575f80fd5b610d9a83610ceb565b915060208301358015158114610dae575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610de0575f80fd5b610de985610ceb565b9350610df760208601610ceb565b925060408501359150606085013567ffffffffffffffff80821115610e1a575f80fd5b818701915087601f830112610e2d575f80fd5b813581811115610e3f57610e3f610db9565b604051601f8201601f19908116603f01168101908382118183101715610e6757610e67610db9565b816040528281528a6020848701011115610e7f575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215610eb3575f80fd5b610ebc83610ceb565b9150610eca60208401610ceb565b90509250929050565b600181811c90821680610ee757607f821691505b602082108103610f0557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f8351610f69818460208801610c75565b835190830190610f7d818360208801610c75565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061104f90830184610c97565b9695505050505050565b5f60208284031215611069575f80fd5b815161062d81610c4556fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100cb575f3560e01c80636352211e11610088578063a22cb46511610063578063a22cb465146101ae578063b88d4fde146101c1578063c87b56dd146101d4578063e985e9c5146101e7575f80fd5b80636352211e1461017257806370a082311461018557806395d89b41146101a6575f80fd5b806301ffc9a7146100cf57806306fdde03146100f7578063081812fc1461010c578063095ea7b31461013757806323b872dd1461014c57806342842e0e1461015f575b5f80fd5b6100e26100dd366004610c5a565b610222565b60405190151581526020015b60405180910390f35b6100ff610273565b6040516100ee9190610cc2565b61011f61011a366004610cd4565b610302565b6040516001600160a01b0390911681526020016100ee565b61014a610145366004610d06565b610327565b005b61014a61015a366004610d2e565b610440565b61014a61016d366004610d2e565b610471565b61011f610180366004610cd4565b61048b565b610198610193366004610d67565b6104ea565b6040519081526020016100ee565b6100ff61056e565b61014a6101bc366004610d80565b61057d565b61014a6101cf366004610dcd565b61058c565b6100ff6101e2366004610cd4565b6105c4565b6100e26101f5366004610ea2565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166380ac58cd60e01b148061025257506001600160e01b03198216635b5e139f60e01b145b8061026d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f805461028190610ed3565b80601f01602080910402602001604051908101604052809291908181526020018280546102ad90610ed3565b80156102f85780601f106102cf576101008083540402835291602001916102f8565b820191905f5260205f20905b8154815290600101906020018083116102db57829003601f168201915b5050505050905090565b5f61030c82610634565b505f908152600460205260409020546001600160a01b031690565b5f6103318261048b565b9050806001600160a01b0316836001600160a01b0316036103a35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103bf57506103bf81336101f5565b6104315760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161039a565b61043b8383610695565b505050565b61044a3382610702565b6104665760405162461bcd60e51b815260040161039a90610f0b565b61043b83838361077f565b61043b83838360405180602001604052805f81525061058c565b5f818152600260205260408120546001600160a01b03168061026d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161039a565b5f6001600160a01b0382166105535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161039a565b506001600160a01b03165f9081526003602052604090205490565b60606001805461028190610ed3565b6105883383836108e1565b5050565b6105963383610702565b6105b25760405162461bcd60e51b815260040161039a90610f0b565b6105be848484846109ae565b50505050565b60606105cf82610634565b5f6105e460408051602081019091525f815290565b90505f8151116106025760405180602001604052805f81525061062d565b8061060c846109e1565b60405160200161061d929190610f58565b6040516020818303038152906040525b9392505050565b5f818152600260205260409020546001600160a01b03166106925760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161039a565b50565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106c98261048b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f8061070d8361048b565b9050806001600160a01b0316846001600160a01b0316148061075357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b806107775750836001600160a01b031661076c84610302565b6001600160a01b0316145b949350505050565b826001600160a01b03166107928261048b565b6001600160a01b0316146107b85760405162461bcd60e51b815260040161039a90610f86565b6001600160a01b03821661081a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161039a565b826001600160a01b031661082d8261048b565b6001600160a01b0316146108535760405162461bcd60e51b815260040161039a90610f86565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b0316036109425760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161039a565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109b984848461077f565b6109c584848484610a71565b6105be5760405162461bcd60e51b815260040161039a90610fcb565b60605f6109ed83610b6e565b60010190505f8167ffffffffffffffff811115610a0c57610a0c610db9565b6040519080825280601f01601f191660200182016040528015610a36576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610a4057509392505050565b5f6001600160a01b0384163b15610b6357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610ab490339089908890889060040161101d565b6020604051808303815f875af1925050508015610aee575060408051601f3d908101601f19168201909252610aeb91810190611059565b60015b610b49573d808015610b1b576040519150601f19603f3d011682016040523d82523d5f602084013e610b20565b606091505b5080515f03610b415760405162461bcd60e51b815260040161039a90610fcb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610777565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bac5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610bd8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610bf657662386f26fc10000830492506010015b6305f5e1008310610c0e576305f5e100830492506008015b6127108310610c2257612710830492506004015b60648310610c34576064830492506002015b600a831061026d5760010192915050565b6001600160e01b031981168114610692575f80fd5b5f60208284031215610c6a575f80fd5b813561062d81610c45565b5f5b83811015610c8f578181015183820152602001610c77565b50505f910152565b5f8151808452610cae816020860160208601610c75565b601f01601f19169290920160200192915050565b602081525f61062d6020830184610c97565b5f60208284031215610ce4575f80fd5b5035919050565b80356001600160a01b0381168114610d01575f80fd5b919050565b5f8060408385031215610d17575f80fd5b610d2083610ceb565b946020939093013593505050565b5f805f60608486031215610d40575f80fd5b610d4984610ceb565b9250610d5760208501610ceb565b9150604084013590509250925092565b5f60208284031215610d77575f80fd5b61062d82610ceb565b5f8060408385031215610d91575f80fd5b610d9a83610ceb565b915060208301358015158114610dae575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610de0575f80fd5b610de985610ceb565b9350610df760208601610ceb565b925060408501359150606085013567ffffffffffffffff80821115610e1a575f80fd5b818701915087601f830112610e2d575f80fd5b813581811115610e3f57610e3f610db9565b604051601f8201601f19908116603f01168101908382118183101715610e6757610e67610db9565b816040528281528a6020848701011115610e7f575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215610eb3575f80fd5b610ebc83610ceb565b9150610eca60208401610ceb565b90509250929050565b600181811c90821680610ee757607f821691505b602082108103610f0557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f8351610f69818460208801610c75565b835190830190610f7d818360208801610c75565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061104f90830184610c97565b9695505050505050565b5f60208284031215611069575f80fd5b815161062d81610c4556fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ERC721Upgradeable.json b/artifacts/ERC721Upgradeable.json index fca6923a..35ab4b3b 100644 --- a/artifacts/ERC721Upgradeable.json +++ b/artifacts/ERC721Upgradeable.json @@ -347,8 +347,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506110e2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610c32565b6101ff565b60405190151581526020015b60405180910390f35b610104610251565b6040516100f39190610c9f565b61012461011f366004610cb2565b6102e3565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610ce7565b61030a565b005b61014f61015f366004610d11565b610424565b61014f610172366004610d11565b610455565b610124610185366004610cb2565b610470565b61019d610198366004610d4d565b6104d0565b6040519081526020016100f3565b610104610556565b61014f6101c1366004610d68565b610565565b61014f6101d4366004610dba565b610574565b6101046101e7366004610cb2565b6105ac565b6100e76101fa366004610e96565b610620565b60006001600160e01b031982166380ac58cd60e01b148061023057506001600160e01b03198216635b5e139f60e01b145b8061024b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606065805461026090610ec9565b80601f016020809104026020016040519081016040528092919081815260200182805461028c90610ec9565b80156102d95780601f106102ae576101008083540402835291602001916102d9565b820191906000526020600020905b8154815290600101906020018083116102bc57829003601f168201915b5050505050905090565b60006102ee8261064e565b506000908152606960205260409020546001600160a01b031690565b600061031582610470565b9050806001600160a01b0316836001600160a01b0316036103875760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103a357506103a38133610620565b6104155760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161037e565b61041f83836106b0565b505050565b61042e338261071e565b61044a5760405162461bcd60e51b815260040161037e90610f03565b61041f83838361077d565b61041f83838360405180602001604052806000815250610574565b6000818152606760205260408120546001600160a01b03168061024b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161037e565b60006001600160a01b03821661053a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161037e565b506001600160a01b031660009081526068602052604090205490565b60606066805461026090610ec9565b610570338383610919565b5050565b61057e338361071e565b61059a5760405162461bcd60e51b815260040161037e90610f03565b6105a6848484846109e7565b50505050565b60606105b78261064e565b60006105ce60408051602081019091526000815290565b905060008151116105ee5760405180602001604052806000815250610619565b806105f884610a1a565b604051602001610609929190610f51565b6040516020818303038152906040525b9392505050565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6000818152606760205260409020546001600160a01b03166106ad5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161037e565b50565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e582610470565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061072a83610470565b9050806001600160a01b0316846001600160a01b0316148061075157506107518185610620565b806107755750836001600160a01b031661076a846102e3565b6001600160a01b0316145b949350505050565b826001600160a01b031661079082610470565b6001600160a01b0316146107f45760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161037e565b6001600160a01b0382166108565760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161037e565b6108616000826106b0565b6001600160a01b038316600090815260686020526040812080546001929061088a908490610f96565b90915550506001600160a01b03821660009081526068602052604081208054600192906108b8908490610fa9565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361097a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161037e565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109f284848461077d565b6109fe84848484610b1b565b6105a65760405162461bcd60e51b815260040161037e90610fbc565b606081600003610a415750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610a6b5780610a558161100e565b9150610a649050600a8361103d565b9150610a45565b60008167ffffffffffffffff811115610a8657610a86610da4565b6040519080825280601f01601f191660200182016040528015610ab0576020820181803683370190505b5090505b841561077557610ac5600183610f96565b9150610ad2600a86611051565b610add906030610fa9565b60f81b818381518110610af257610af2611065565b60200101906001600160f81b031916908160001a905350610b14600a8661103d565b9450610ab4565b60006001600160a01b0384163b15610c1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b5f90339089908890889060040161107b565b6020604051808303816000875af1925050508015610b9a575060408051601f3d908101601f19168201909252610b97918101906110b8565b60015b610bf7573d808015610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b508051600003610bef5760405162461bcd60e51b815260040161037e90610fbc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610775565b506001949350505050565b6001600160e01b0319811681146106ad57600080fd5b600060208284031215610c4457600080fd5b813561061981610c1c565b60005b83811015610c6a578181015183820152602001610c52565b50506000910152565b60008151808452610c8b816020860160208601610c4f565b601f01601f19169290920160200192915050565b6020815260006106196020830184610c73565b600060208284031215610cc457600080fd5b5035919050565b80356001600160a01b0381168114610ce257600080fd5b919050565b60008060408385031215610cfa57600080fd5b610d0383610ccb565b946020939093013593505050565b600080600060608486031215610d2657600080fd5b610d2f84610ccb565b9250610d3d60208501610ccb565b9150604084013590509250925092565b600060208284031215610d5f57600080fd5b61061982610ccb565b60008060408385031215610d7b57600080fd5b610d8483610ccb565b915060208301358015158114610d9957600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610dd057600080fd5b610dd985610ccb565b9350610de760208601610ccb565b925060408501359150606085013567ffffffffffffffff80821115610e0b57600080fd5b818701915087601f830112610e1f57600080fd5b813581811115610e3157610e31610da4565b604051601f8201601f19908116603f01168101908382118183101715610e5957610e59610da4565b816040528281528a6020848701011115610e7257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215610ea957600080fd5b610eb283610ccb565b9150610ec060208401610ccb565b90509250929050565b600181811c90821680610edd57607f821691505b602082108103610efd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60008351610f63818460208801610c4f565b835190830190610f77818360208801610c4f565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561024b5761024b610f80565b8082018082111561024b5761024b610f80565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006001820161102057611020610f80565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261104c5761104c611027565b500490565b60008261106057611060611027565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906110ae90830184610c73565b9695505050505050565b6000602082840312156110ca57600080fd5b815161061981610c1c56fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101b3578063b88d4fde146101c6578063c87b56dd146101d9578063e985e9c5146101ec57600080fd5b80636352211e1461017757806370a082311461018a57806395d89b41146101ab57600080fd5b806301ffc9a7146100d457806306fdde03146100fc578063081812fc14610111578063095ea7b31461013c57806323b872dd1461015157806342842e0e14610164575b600080fd5b6100e76100e2366004610c32565b6101ff565b60405190151581526020015b60405180910390f35b610104610251565b6040516100f39190610c9f565b61012461011f366004610cb2565b6102e3565b6040516001600160a01b0390911681526020016100f3565b61014f61014a366004610ce7565b61030a565b005b61014f61015f366004610d11565b610424565b61014f610172366004610d11565b610455565b610124610185366004610cb2565b610470565b61019d610198366004610d4d565b6104d0565b6040519081526020016100f3565b610104610556565b61014f6101c1366004610d68565b610565565b61014f6101d4366004610dba565b610574565b6101046101e7366004610cb2565b6105ac565b6100e76101fa366004610e96565b610620565b60006001600160e01b031982166380ac58cd60e01b148061023057506001600160e01b03198216635b5e139f60e01b145b8061024b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606065805461026090610ec9565b80601f016020809104026020016040519081016040528092919081815260200182805461028c90610ec9565b80156102d95780601f106102ae576101008083540402835291602001916102d9565b820191906000526020600020905b8154815290600101906020018083116102bc57829003601f168201915b5050505050905090565b60006102ee8261064e565b506000908152606960205260409020546001600160a01b031690565b600061031582610470565b9050806001600160a01b0316836001600160a01b0316036103875760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103a357506103a38133610620565b6104155760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161037e565b61041f83836106b0565b505050565b61042e338261071e565b61044a5760405162461bcd60e51b815260040161037e90610f03565b61041f83838361077d565b61041f83838360405180602001604052806000815250610574565b6000818152606760205260408120546001600160a01b03168061024b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161037e565b60006001600160a01b03821661053a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161037e565b506001600160a01b031660009081526068602052604090205490565b60606066805461026090610ec9565b610570338383610919565b5050565b61057e338361071e565b61059a5760405162461bcd60e51b815260040161037e90610f03565b6105a6848484846109e7565b50505050565b60606105b78261064e565b60006105ce60408051602081019091526000815290565b905060008151116105ee5760405180602001604052806000815250610619565b806105f884610a1a565b604051602001610609929190610f51565b6040516020818303038152906040525b9392505050565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6000818152606760205260409020546001600160a01b03166106ad5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161037e565b50565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106e582610470565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061072a83610470565b9050806001600160a01b0316846001600160a01b0316148061075157506107518185610620565b806107755750836001600160a01b031661076a846102e3565b6001600160a01b0316145b949350505050565b826001600160a01b031661079082610470565b6001600160a01b0316146107f45760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161037e565b6001600160a01b0382166108565760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161037e565b6108616000826106b0565b6001600160a01b038316600090815260686020526040812080546001929061088a908490610f96565b90915550506001600160a01b03821660009081526068602052604081208054600192906108b8908490610fa9565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361097a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161037e565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109f284848461077d565b6109fe84848484610b1b565b6105a65760405162461bcd60e51b815260040161037e90610fbc565b606081600003610a415750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610a6b5780610a558161100e565b9150610a649050600a8361103d565b9150610a45565b60008167ffffffffffffffff811115610a8657610a86610da4565b6040519080825280601f01601f191660200182016040528015610ab0576020820181803683370190505b5090505b841561077557610ac5600183610f96565b9150610ad2600a86611051565b610add906030610fa9565b60f81b818381518110610af257610af2611065565b60200101906001600160f81b031916908160001a905350610b14600a8661103d565b9450610ab4565b60006001600160a01b0384163b15610c1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b5f90339089908890889060040161107b565b6020604051808303816000875af1925050508015610b9a575060408051601f3d908101601f19168201909252610b97918101906110b8565b60015b610bf7573d808015610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b508051600003610bef5760405162461bcd60e51b815260040161037e90610fbc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610775565b506001949350505050565b6001600160e01b0319811681146106ad57600080fd5b600060208284031215610c4457600080fd5b813561061981610c1c565b60005b83811015610c6a578181015183820152602001610c52565b50506000910152565b60008151808452610c8b816020860160208601610c4f565b601f01601f19169290920160200192915050565b6020815260006106196020830184610c73565b600060208284031215610cc457600080fd5b5035919050565b80356001600160a01b0381168114610ce257600080fd5b919050565b60008060408385031215610cfa57600080fd5b610d0383610ccb565b946020939093013593505050565b600080600060608486031215610d2657600080fd5b610d2f84610ccb565b9250610d3d60208501610ccb565b9150604084013590509250925092565b600060208284031215610d5f57600080fd5b61061982610ccb565b60008060408385031215610d7b57600080fd5b610d8483610ccb565b915060208301358015158114610d9957600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610dd057600080fd5b610dd985610ccb565b9350610de760208601610ccb565b925060408501359150606085013567ffffffffffffffff80821115610e0b57600080fd5b818701915087601f830112610e1f57600080fd5b813581811115610e3157610e31610da4565b604051601f8201601f19908116603f01168101908382118183101715610e5957610e59610da4565b816040528281528a6020848701011115610e7257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215610ea957600080fd5b610eb283610ccb565b9150610ec060208401610ccb565b90509250929050565b600181811c90821680610edd57607f821691505b602082108103610efd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60008351610f63818460208801610c4f565b835190830190610f77818360208801610c4f565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561024b5761024b610f80565b8082018082111561024b5761024b610f80565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006001820161102057611020610f80565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261104c5761104c611027565b500490565b60008261106057611060611027565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906110ae90830184610c73565b9695505050505050565b6000602082840312156110ca57600080fd5b815161061981610c1c56fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506110908061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c80636352211e11610088578063a22cb46511610063578063a22cb465146101ae578063b88d4fde146101c1578063c87b56dd146101d4578063e985e9c5146101e7575f80fd5b80636352211e1461017257806370a082311461018557806395d89b41146101a6575f80fd5b806301ffc9a7146100cf57806306fdde03146100f7578063081812fc1461010c578063095ea7b31461013757806323b872dd1461014c57806342842e0e1461015f575b5f80fd5b6100e26100dd366004610c0d565b6101fa565b60405190151581526020015b60405180910390f35b6100ff61024b565b6040516100ee9190610c75565b61011f61011a366004610c87565b6102db565b6040516001600160a01b0390911681526020016100ee565b61014a610145366004610cb9565b610300565b005b61014a61015a366004610ce1565b610419565b61014a61016d366004610ce1565b61044a565b61011f610180366004610c87565b610464565b610198610193366004610d1a565b6104c3565b6040519081526020016100ee565b6100ff610547565b61014a6101bc366004610d33565b610556565b61014a6101cf366004610d80565b610565565b6100ff6101e2366004610c87565b61059d565b6100e26101f5366004610e55565b61060d565b5f6001600160e01b031982166380ac58cd60e01b148061022a57506001600160e01b03198216635b5e139f60e01b145b8061024557506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606065805461025a90610e86565b80601f016020809104026020016040519081016040528092919081815260200182805461028690610e86565b80156102d15780601f106102a8576101008083540402835291602001916102d1565b820191905f5260205f20905b8154815290600101906020018083116102b457829003601f168201915b5050505050905090565b5f6102e58261063a565b505f908152606960205260409020546001600160a01b031690565b5f61030a82610464565b9050806001600160a01b0316836001600160a01b03160361037c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103985750610398813361060d565b61040a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610373565b610414838361069b565b505050565b6104233382610708565b61043f5760405162461bcd60e51b815260040161037390610ebe565b610414838383610766565b61041483838360405180602001604052805f815250610565565b5f818152606760205260408120546001600160a01b0316806102455760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610373565b5f6001600160a01b03821661052c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610373565b506001600160a01b03165f9081526068602052604090205490565b60606066805461025a90610e86565b6105613383836108fe565b5050565b61056f3383610708565b61058b5760405162461bcd60e51b815260040161037390610ebe565b610597848484846109cb565b50505050565b60606105a88261063a565b5f6105bd60408051602081019091525f815290565b90505f8151116105db5760405180602001604052805f815250610606565b806105e5846109fe565b6040516020016105f6929190610f0c565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f908152606a6020908152604080832093909416825291909152205460ff1690565b5f818152606760205260409020546001600160a01b03166106985760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610373565b50565b5f81815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106cf82610464565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f8061071383610464565b9050806001600160a01b0316846001600160a01b0316148061073a575061073a818561060d565b8061075e5750836001600160a01b0316610753846102db565b6001600160a01b0316145b949350505050565b826001600160a01b031661077982610464565b6001600160a01b0316146107dd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610373565b6001600160a01b03821661083f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6108495f8261069b565b6001600160a01b0383165f908152606860205260408120805460019290610871908490610f4e565b90915550506001600160a01b0382165f90815260686020526040812080546001929061089e908490610f61565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361095f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610373565b6001600160a01b038381165f818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d6848484610766565b6109e284848484610afb565b6105975760405162461bcd60e51b815260040161037390610f74565b6060815f03610a245750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610a4d5780610a3781610fc6565b9150610a469050600a83610ff2565b9150610a27565b5f8167ffffffffffffffff811115610a6757610a67610d6c565b6040519080825280601f01601f191660200182016040528015610a91576020820181803683370190505b5090505b841561075e57610aa6600183610f4e565b9150610ab3600a86611005565b610abe906030610f61565b60f81b818381518110610ad357610ad3611018565b60200101906001600160f81b03191690815f1a905350610af4600a86610ff2565b9450610a95565b5f6001600160a01b0384163b15610bed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b3e90339089908890889060040161102c565b6020604051808303815f875af1925050508015610b78575060408051601f3d908101601f19168201909252610b7591810190611068565b60015b610bd3573d808015610ba5576040519150601f19603f3d011682016040523d82523d5f602084013e610baa565b606091505b5080515f03610bcb5760405162461bcd60e51b815260040161037390610f74565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061075e565b506001949350505050565b6001600160e01b031981168114610698575f80fd5b5f60208284031215610c1d575f80fd5b813561060681610bf8565b5f5b83811015610c42578181015183820152602001610c2a565b50505f910152565b5f8151808452610c61816020860160208601610c28565b601f01601f19169290920160200192915050565b602081525f6106066020830184610c4a565b5f60208284031215610c97575f80fd5b5035919050565b80356001600160a01b0381168114610cb4575f80fd5b919050565b5f8060408385031215610cca575f80fd5b610cd383610c9e565b946020939093013593505050565b5f805f60608486031215610cf3575f80fd5b610cfc84610c9e565b9250610d0a60208501610c9e565b9150604084013590509250925092565b5f60208284031215610d2a575f80fd5b61060682610c9e565b5f8060408385031215610d44575f80fd5b610d4d83610c9e565b915060208301358015158114610d61575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610d93575f80fd5b610d9c85610c9e565b9350610daa60208601610c9e565b925060408501359150606085013567ffffffffffffffff80821115610dcd575f80fd5b818701915087601f830112610de0575f80fd5b813581811115610df257610df2610d6c565b604051601f8201601f19908116603f01168101908382118183101715610e1a57610e1a610d6c565b816040528281528a6020848701011115610e32575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215610e66575f80fd5b610e6f83610c9e565b9150610e7d60208401610c9e565b90509250929050565b600181811c90821680610e9a57607f821691505b602082108103610eb857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b5f8351610f1d818460208801610c28565b835190830190610f31818360208801610c28565b01949350505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561024557610245610f3a565b8082018082111561024557610245610f3a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201610fd757610fd7610f3a565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f8261100057611000610fde565b500490565b5f8261101357611013610fde565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061105e90830184610c4a565b9695505050505050565b5f60208284031215611078575f80fd5b815161060681610bf856fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100cb575f3560e01c80636352211e11610088578063a22cb46511610063578063a22cb465146101ae578063b88d4fde146101c1578063c87b56dd146101d4578063e985e9c5146101e7575f80fd5b80636352211e1461017257806370a082311461018557806395d89b41146101a6575f80fd5b806301ffc9a7146100cf57806306fdde03146100f7578063081812fc1461010c578063095ea7b31461013757806323b872dd1461014c57806342842e0e1461015f575b5f80fd5b6100e26100dd366004610c0d565b6101fa565b60405190151581526020015b60405180910390f35b6100ff61024b565b6040516100ee9190610c75565b61011f61011a366004610c87565b6102db565b6040516001600160a01b0390911681526020016100ee565b61014a610145366004610cb9565b610300565b005b61014a61015a366004610ce1565b610419565b61014a61016d366004610ce1565b61044a565b61011f610180366004610c87565b610464565b610198610193366004610d1a565b6104c3565b6040519081526020016100ee565b6100ff610547565b61014a6101bc366004610d33565b610556565b61014a6101cf366004610d80565b610565565b6100ff6101e2366004610c87565b61059d565b6100e26101f5366004610e55565b61060d565b5f6001600160e01b031982166380ac58cd60e01b148061022a57506001600160e01b03198216635b5e139f60e01b145b8061024557506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606065805461025a90610e86565b80601f016020809104026020016040519081016040528092919081815260200182805461028690610e86565b80156102d15780601f106102a8576101008083540402835291602001916102d1565b820191905f5260205f20905b8154815290600101906020018083116102b457829003601f168201915b5050505050905090565b5f6102e58261063a565b505f908152606960205260409020546001600160a01b031690565b5f61030a82610464565b9050806001600160a01b0316836001600160a01b03160361037c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103985750610398813361060d565b61040a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610373565b610414838361069b565b505050565b6104233382610708565b61043f5760405162461bcd60e51b815260040161037390610ebe565b610414838383610766565b61041483838360405180602001604052805f815250610565565b5f818152606760205260408120546001600160a01b0316806102455760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610373565b5f6001600160a01b03821661052c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610373565b506001600160a01b03165f9081526068602052604090205490565b60606066805461025a90610e86565b6105613383836108fe565b5050565b61056f3383610708565b61058b5760405162461bcd60e51b815260040161037390610ebe565b610597848484846109cb565b50505050565b60606105a88261063a565b5f6105bd60408051602081019091525f815290565b90505f8151116105db5760405180602001604052805f815250610606565b806105e5846109fe565b6040516020016105f6929190610f0c565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f908152606a6020908152604080832093909416825291909152205460ff1690565b5f818152606760205260409020546001600160a01b03166106985760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610373565b50565b5f81815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906106cf82610464565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f8061071383610464565b9050806001600160a01b0316846001600160a01b0316148061073a575061073a818561060d565b8061075e5750836001600160a01b0316610753846102db565b6001600160a01b0316145b949350505050565b826001600160a01b031661077982610464565b6001600160a01b0316146107dd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610373565b6001600160a01b03821661083f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6108495f8261069b565b6001600160a01b0383165f908152606860205260408120805460019290610871908490610f4e565b90915550506001600160a01b0382165f90815260686020526040812080546001929061089e908490610f61565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b03160361095f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610373565b6001600160a01b038381165f818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6109d6848484610766565b6109e284848484610afb565b6105975760405162461bcd60e51b815260040161037390610f74565b6060815f03610a245750506040805180820190915260018152600360fc1b602082015290565b815f5b8115610a4d5780610a3781610fc6565b9150610a469050600a83610ff2565b9150610a27565b5f8167ffffffffffffffff811115610a6757610a67610d6c565b6040519080825280601f01601f191660200182016040528015610a91576020820181803683370190505b5090505b841561075e57610aa6600183610f4e565b9150610ab3600a86611005565b610abe906030610f61565b60f81b818381518110610ad357610ad3611018565b60200101906001600160f81b03191690815f1a905350610af4600a86610ff2565b9450610a95565b5f6001600160a01b0384163b15610bed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b3e90339089908890889060040161102c565b6020604051808303815f875af1925050508015610b78575060408051601f3d908101601f19168201909252610b7591810190611068565b60015b610bd3573d808015610ba5576040519150601f19603f3d011682016040523d82523d5f602084013e610baa565b606091505b5080515f03610bcb5760405162461bcd60e51b815260040161037390610f74565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061075e565b506001949350505050565b6001600160e01b031981168114610698575f80fd5b5f60208284031215610c1d575f80fd5b813561060681610bf8565b5f5b83811015610c42578181015183820152602001610c2a565b50505f910152565b5f8151808452610c61816020860160208601610c28565b601f01601f19169290920160200192915050565b602081525f6106066020830184610c4a565b5f60208284031215610c97575f80fd5b5035919050565b80356001600160a01b0381168114610cb4575f80fd5b919050565b5f8060408385031215610cca575f80fd5b610cd383610c9e565b946020939093013593505050565b5f805f60608486031215610cf3575f80fd5b610cfc84610c9e565b9250610d0a60208501610c9e565b9150604084013590509250925092565b5f60208284031215610d2a575f80fd5b61060682610c9e565b5f8060408385031215610d44575f80fd5b610d4d83610c9e565b915060208301358015158114610d61575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610d93575f80fd5b610d9c85610c9e565b9350610daa60208601610c9e565b925060408501359150606085013567ffffffffffffffff80821115610dcd575f80fd5b818701915087601f830112610de0575f80fd5b813581811115610df257610df2610d6c565b604051601f8201601f19908116603f01168101908382118183101715610e1a57610e1a610d6c565b816040528281528a6020848701011115610e32575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215610e66575f80fd5b610e6f83610c9e565b9150610e7d60208401610c9e565b90509250929050565b600181811c90821680610e9a57607f821691505b602082108103610eb857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b5f8351610f1d818460208801610c28565b835190830190610f31818360208801610c28565b01949350505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561024557610245610f3a565b8082018082111561024557610245610f3a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201610fd757610fd7610f3a565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f8261100057611000610fde565b500490565b5f8261101357611013610fde565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061105e90830184610c4a565b9695505050505050565b5f60208284031215611078575f80fd5b815161060681610bf856fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ETHRegistrarController.json b/artifacts/ETHRegistrarController.json index 0156fd1a..ca9d5405 100644 --- a/artifacts/ETHRegistrarController.json +++ b/artifacts/ETHRegistrarController.json @@ -599,8 +599,8 @@ "type": "function" } ], - "bytecode": "0x6101406040523480156200001257600080fd5b5060405162001e7038038062001e70833981016040819052620000359162000222565b80336200004281620001b9565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526000906001600160a01b038416906302571be390602401602060405180830381865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d09190620002b6565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303816000875af11580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001439190620002dd565b5050505084841162000168576040516307cb550760e31b815260040160405180910390fd5b428411156200018a57604051630b4319e560e21b815260040160405180910390fd5b506001600160a01b0395861660805293851660a05260c09290925260e0528216610100521661012052620002f7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200021f57600080fd5b50565b600080600080600080600060e0888a0312156200023e57600080fd5b87516200024b8162000209565b60208901519097506200025e8162000209565b8096505060408801519450606088015193506080880151620002808162000209565b60a0890151909350620002938162000209565b60c0890151909250620002a68162000209565b8091505092959891949750929550565b600060208284031215620002c957600080fd5b8151620002d68162000209565b9392505050565b600060208284031215620002f057600080fd5b5051919050565b60805160a05160c05160e0516101005161012051611af16200037f60003960008181610335015281816106f30152610ab60152600081816101f80152610fe301526000818161039c01528181610c7b0152610e6e0152600081816102c30152610e100152600081816103d001526108f40152600081816109290152610bea0152611af16000f3fe60806040526004361061011f5760003560e01c80638d839ffe116100a0578063aeb8ce9b11610064578063aeb8ce9b1461036a578063ce1e09c01461038a578063d3419bf3146103be578063f14fcbc8146103f2578063f2fde38b1461041257600080fd5b80638d839ffe146102b15780638da5cb5b146102e55780639791c09714610303578063a8e5fbc014610323578063acf1a8411461035757600080fd5b806374694a2b116100e757806374694a2b146101d357806380869853146101e6578063839df9451461023257806383e7f6ff1461025f5780638a95b09f1461029a57600080fd5b806301ffc9a7146101245780633ccfd60b146101595780635d3590d51461017057806365a69dcf14610190578063715018a6146101be575b600080fd5b34801561013057600080fd5b5061014461013f366004611198565b610432565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b5061016e610469565b005b34801561017c57600080fd5b5061016e61018b3660046111de565b6104a6565b34801561019c57600080fd5b506101b06101ab36600461134b565b610527565b604051908152602001610150565b3480156101ca57600080fd5b5061016e6105ac565b61016e6101e136600461144e565b6105c0565b3480156101f257600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610150565b34801561023e57600080fd5b506101b061024d366004611518565b60016020526000908152604090205481565b34801561026b57600080fd5b5061027f61027a366004611531565b6108c3565b60408051825181526020928301519281019290925201610150565b3480156102a657600080fd5b506101b06224ea0081565b3480156102bd57600080fd5b506101b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f157600080fd5b506000546001600160a01b031661021a565b34801561030f57600080fd5b5061014461031e366004611576565b6109fd565b34801561032f57600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b61016e6103653660046115ab565b610a12565b34801561037657600080fd5b50610144610385366004611576565b610bba565b34801561039657600080fd5b506101b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ca57600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fe57600080fd5b5061016e61040d366004611518565b610c64565b34801561041e57600080fd5b5061016e61042d3660046115f7565b610cd9565b60006001600160e01b031982166301ffc9a760e01b148061046357506001600160e01b0319821663612e8c0960e01b145b92915050565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156104a3573d6000803e3d6000fd5b50565b6104ae610d4f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105219190611612565b50505050565b885160208a0120600090841580159061054757506001600160a01b038716155b15610565576040516334fd817160e21b815260040160405180910390fd5b808a8a8a8a8a8a8a8a604051602001610586999897969594939291906116ea565b604051602081830303815290604052805190602001209150509998505050505050505050565b6105b4610d4f565b6105be6000610da9565b565b60006106038b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506108c3915050565b6020810151815191925061061691611764565b3410156106365760405163044044a560e21b815260040160405180910390fd5b6106d98b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050896106d48e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d8d8d8d8d8d610527565b610df9565b604051635200a4c160e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a401498290610732908f908f908f908f908e908b90600401611777565b6020604051808303816000875af1158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906117c2565b905084156107a0576107a0878d8d6040516107919291906117db565b60405180910390208888610f17565b83156107e9576107e98c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250339150610fe19050565b896001600160a01b03168c8c6040516108039291906117db565b60405180910390207f69e37f151eb98a09618ddaa80c8cfaf1ce5996867c489f45b555b412271ebf278e8e866000015187602001518760405161084a9594939291906117eb565b60405180910390a3602082015182516108639190611764565b3411156108b5576020820151825133916108fc916108819190611764565b61088b903461181c565b6040518115909202916000818181858888f193505050501580156108b3573d6000803e3d6000fd5b505b505050505050505050505050565b604080518082019091526000808252602082015282516020840120604051636b727d4360e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116916350e9a7159187917f00000000000000000000000000000000000000000000000000000000000000009091169063d6e4fa8690602401602060405180830381865afa158015610972573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099691906117c2565b866040518463ffffffff1660e01b81526004016109b59392919061187f565b6040805180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f591906118a4565b949350505050565b60006003610a0a83611095565b101592915050565b60008383604051610a249291906117db565b604080519182900382206020601f870181900481028401810190925285835292508291600091610a71919088908890819084018382808284376000920191909152508892506108c3915050565b8051909150341015610a965760405163044044a560e21b815260040160405180910390fd5b60405163c475abff60e01b815260048101839052602481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff906044016020604051808303816000875af1158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b91906117c2565b8251909150341115610b7357815133906108fc90610b49903461181c565b6040518115909202916000818181858888f19350505050158015610b71573d6000803e3d6000fd5b505b837f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae88883485604051610ba994939291906118f3565b60405180910390a250505050505050565b80516020820120600090610bcd836109fd565b8015610c5d57506040516312dc929d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396e494e890602401602060405180830381865afa158015610c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5d9190611612565b9392505050565b6000818152600160205260409020544290610ca0907f000000000000000000000000000000000000000000000000000000000000000090611764565b10610cc657604051630a059d7160e01b8152600481018290526024015b60405180910390fd5b6000908152600160205260409020429055565b610ce1610d4f565b6001600160a01b038116610d465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6104a381610da9565b6000546001600160a01b031633146105be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600160205260409020544290610e35907f000000000000000000000000000000000000000000000000000000000000000090611764565b1115610e5757604051635320bcf960e01b815260048101829052602401610cbd565b6000818152600160205260409020544290610e93907f000000000000000000000000000000000000000000000000000000000000000090611764565b11610eb45760405163cb7690d760e01b815260048101829052602401610cbd565b610ebd83610bba565b610edc57826040516308eee0fd60e31b8152600401610cbd919061191a565b6000818152600160205260408120556224ea00821015610f1257604051639a71997b60e01b815260048101839052602401610cbd565b505050565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae6020808301919091528183018690528251808303840181526060830193849052805191012063e32954eb60e01b90925285906001600160a01b0382169063e32954eb90610f919085908890889060640161192d565b6000604051808303816000875af1158015610fb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd89190810190611950565b50505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a806d6b338385876040516020016110249190611a4f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016110529493929190611a77565b6020604051808303816000875af1158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052191906117c2565b8051600090819081905b8082101561118f5760008583815181106110bb576110bb611ab5565b01602001516001600160f81b0319169050600160ff1b8110156110ea576110e3600184611764565b925061117c565b600760fd1b6001600160f81b03198216101561110b576110e3600284611764565b600f60fc1b6001600160f81b03198216101561112c576110e3600384611764565b601f60fb1b6001600160f81b03198216101561114d576110e3600484611764565b603f60fa1b6001600160f81b03198216101561116e576110e3600584611764565b611179600684611764565b92505b508261118781611acb565b93505061109f565b50909392505050565b6000602082840312156111aa57600080fd5b81356001600160e01b031981168114610c5d57600080fd5b80356001600160a01b03811681146111d957600080fd5b919050565b6000806000606084860312156111f357600080fd5b6111fc846111c2565b925061120a602085016111c2565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112595761125961121a565b604052919050565b600067ffffffffffffffff82111561127b5761127b61121a565b50601f01601f191660200190565b600082601f83011261129a57600080fd5b81356112ad6112a882611261565b611230565b8181528460208386010111156112c257600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f8401126112f157600080fd5b50813567ffffffffffffffff81111561130957600080fd5b6020830191508360208260051b850101111561132457600080fd5b9250929050565b80151581146104a357600080fd5b803561ffff811681146111d957600080fd5b60008060008060008060008060006101008a8c03121561136a57600080fd5b893567ffffffffffffffff8082111561138257600080fd5b61138e8d838e01611289565b9a5061139c60208d016111c2565b995060408c0135985060608c013597506113b860808d016111c2565b965060a08c01359150808211156113ce57600080fd5b506113db8c828d016112df565b90955093505060c08a01356113ef8161132b565b91506113fd60e08b01611339565b90509295985092959850929598565b60008083601f84011261141e57600080fd5b50813567ffffffffffffffff81111561143657600080fd5b60208301915083602082850101111561132457600080fd5b6000806000806000806000806000806101008b8d03121561146e57600080fd5b8a3567ffffffffffffffff8082111561148657600080fd5b6114928e838f0161140c565b909c509a508a91506114a660208e016111c2565b995060408d0135985060608d013597506114c260808e016111c2565b965060a08d01359150808211156114d857600080fd5b506114e58d828e016112df565b90955093505060c08b01356114f98161132b565b915061150760e08c01611339565b90509295989b9194979a5092959850565b60006020828403121561152a57600080fd5b5035919050565b6000806040838503121561154457600080fd5b823567ffffffffffffffff81111561155b57600080fd5b61156785828601611289565b95602094909401359450505050565b60006020828403121561158857600080fd5b813567ffffffffffffffff81111561159f57600080fd5b6109f584828501611289565b6000806000604084860312156115c057600080fd5b833567ffffffffffffffff8111156115d757600080fd5b6115e38682870161140c565b909790965060209590950135949350505050565b60006020828403121561160957600080fd5b610c5d826111c2565b60006020828403121561162457600080fd5b8151610c5d8161132b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156116dd5782840389528135601e1988360301811261169357600080fd5b8701858101903567ffffffffffffffff8111156116af57600080fd5b8036038213156116be57600080fd5b6116c986828461162f565b9a87019a9550505090840190600101611672565b5091979650505050505050565b8981526001600160a01b03898116602083015260408201899052606082018890528616608082015261010060a0820181905260009061172c8382018789611658565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104635761046361174e565b60a08152600061178b60a08301888a61162f565b6001600160a01b03968716602084015260408301959095525091909316606082015261ffff90921660809092019190915292915050565b6000602082840312156117d457600080fd5b5051919050565b8183823760009101908152919050565b6080815260006117ff60808301878961162f565b602083019590955250604081019290925260609091015292915050565b818103818111156104635761046361174e565b60005b8381101561184a578181015183820152602001611832565b50506000910152565b6000815180845261186b81602086016020860161182f565b601f01601f19169290920160200192915050565b6060815260006118926060830186611853565b60208301949094525060400152919050565b6000604082840312156118b657600080fd5b6040516040810181811067ffffffffffffffff821117156118d9576118d961121a565b604052825181526020928301519281019290925250919050565b60608152600061190760608301868861162f565b6020830194909452506040015292915050565b602081526000610c5d6020830184611853565b838152604060208201526000611947604083018486611658565b95945050505050565b6000602080838503121561196357600080fd5b825167ffffffffffffffff8082111561197b57600080fd5b818501915085601f83011261198f57600080fd5b8151818111156119a1576119a161121a565b8060051b6119b0858201611230565b91825283810185019185810190898411156119ca57600080fd5b86860192505b83831015611a42578251858111156119e85760008081fd5b8601603f81018b136119fa5760008081fd5b878101516040611a0c6112a883611261565b8281528d82848601011115611a215760008081fd5b611a30838c830184870161182f565b855250505091860191908601906119d0565b9998505050505050505050565b60008251611a6181846020870161182f565b6305ccae8d60e31b920191825250600401919050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611aab90830184611853565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611add57611add61174e565b506001019056fea164736f6c6343000811000a", - "deployedBytecode": "0x60806040526004361061011f5760003560e01c80638d839ffe116100a0578063aeb8ce9b11610064578063aeb8ce9b1461036a578063ce1e09c01461038a578063d3419bf3146103be578063f14fcbc8146103f2578063f2fde38b1461041257600080fd5b80638d839ffe146102b15780638da5cb5b146102e55780639791c09714610303578063a8e5fbc014610323578063acf1a8411461035757600080fd5b806374694a2b116100e757806374694a2b146101d357806380869853146101e6578063839df9451461023257806383e7f6ff1461025f5780638a95b09f1461029a57600080fd5b806301ffc9a7146101245780633ccfd60b146101595780635d3590d51461017057806365a69dcf14610190578063715018a6146101be575b600080fd5b34801561013057600080fd5b5061014461013f366004611198565b610432565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b5061016e610469565b005b34801561017c57600080fd5b5061016e61018b3660046111de565b6104a6565b34801561019c57600080fd5b506101b06101ab36600461134b565b610527565b604051908152602001610150565b3480156101ca57600080fd5b5061016e6105ac565b61016e6101e136600461144e565b6105c0565b3480156101f257600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610150565b34801561023e57600080fd5b506101b061024d366004611518565b60016020526000908152604090205481565b34801561026b57600080fd5b5061027f61027a366004611531565b6108c3565b60408051825181526020928301519281019290925201610150565b3480156102a657600080fd5b506101b06224ea0081565b3480156102bd57600080fd5b506101b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f157600080fd5b506000546001600160a01b031661021a565b34801561030f57600080fd5b5061014461031e366004611576565b6109fd565b34801561032f57600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b61016e6103653660046115ab565b610a12565b34801561037657600080fd5b50610144610385366004611576565b610bba565b34801561039657600080fd5b506101b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ca57600080fd5b5061021a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fe57600080fd5b5061016e61040d366004611518565b610c64565b34801561041e57600080fd5b5061016e61042d3660046115f7565b610cd9565b60006001600160e01b031982166301ffc9a760e01b148061046357506001600160e01b0319821663612e8c0960e01b145b92915050565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156104a3573d6000803e3d6000fd5b50565b6104ae610d4f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105219190611612565b50505050565b885160208a0120600090841580159061054757506001600160a01b038716155b15610565576040516334fd817160e21b815260040160405180910390fd5b808a8a8a8a8a8a8a8a604051602001610586999897969594939291906116ea565b604051602081830303815290604052805190602001209150509998505050505050505050565b6105b4610d4f565b6105be6000610da9565b565b60006106038b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506108c3915050565b6020810151815191925061061691611764565b3410156106365760405163044044a560e21b815260040160405180910390fd5b6106d98b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050896106d48e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d8d8d8d8d8d610527565b610df9565b604051635200a4c160e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a401498290610732908f908f908f908f908e908b90600401611777565b6020604051808303816000875af1158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906117c2565b905084156107a0576107a0878d8d6040516107919291906117db565b60405180910390208888610f17565b83156107e9576107e98c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250339150610fe19050565b896001600160a01b03168c8c6040516108039291906117db565b60405180910390207f69e37f151eb98a09618ddaa80c8cfaf1ce5996867c489f45b555b412271ebf278e8e866000015187602001518760405161084a9594939291906117eb565b60405180910390a3602082015182516108639190611764565b3411156108b5576020820151825133916108fc916108819190611764565b61088b903461181c565b6040518115909202916000818181858888f193505050501580156108b3573d6000803e3d6000fd5b505b505050505050505050505050565b604080518082019091526000808252602082015282516020840120604051636b727d4360e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116916350e9a7159187917f00000000000000000000000000000000000000000000000000000000000000009091169063d6e4fa8690602401602060405180830381865afa158015610972573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099691906117c2565b866040518463ffffffff1660e01b81526004016109b59392919061187f565b6040805180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f591906118a4565b949350505050565b60006003610a0a83611095565b101592915050565b60008383604051610a249291906117db565b604080519182900382206020601f870181900481028401810190925285835292508291600091610a71919088908890819084018382808284376000920191909152508892506108c3915050565b8051909150341015610a965760405163044044a560e21b815260040160405180910390fd5b60405163c475abff60e01b815260048101839052602481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff906044016020604051808303816000875af1158015610b07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b91906117c2565b8251909150341115610b7357815133906108fc90610b49903461181c565b6040518115909202916000818181858888f19350505050158015610b71573d6000803e3d6000fd5b505b837f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae88883485604051610ba994939291906118f3565b60405180910390a250505050505050565b80516020820120600090610bcd836109fd565b8015610c5d57506040516312dc929d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396e494e890602401602060405180830381865afa158015610c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5d9190611612565b9392505050565b6000818152600160205260409020544290610ca0907f000000000000000000000000000000000000000000000000000000000000000090611764565b10610cc657604051630a059d7160e01b8152600481018290526024015b60405180910390fd5b6000908152600160205260409020429055565b610ce1610d4f565b6001600160a01b038116610d465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbd565b6104a381610da9565b6000546001600160a01b031633146105be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600160205260409020544290610e35907f000000000000000000000000000000000000000000000000000000000000000090611764565b1115610e5757604051635320bcf960e01b815260048101829052602401610cbd565b6000818152600160205260409020544290610e93907f000000000000000000000000000000000000000000000000000000000000000090611764565b11610eb45760405163cb7690d760e01b815260048101829052602401610cbd565b610ebd83610bba565b610edc57826040516308eee0fd60e31b8152600401610cbd919061191a565b6000818152600160205260408120556224ea00821015610f1257604051639a71997b60e01b815260048101839052602401610cbd565b505050565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae6020808301919091528183018690528251808303840181526060830193849052805191012063e32954eb60e01b90925285906001600160a01b0382169063e32954eb90610f919085908890889060640161192d565b6000604051808303816000875af1158015610fb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd89190810190611950565b50505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a806d6b338385876040516020016110249190611a4f565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016110529493929190611a77565b6020604051808303816000875af1158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052191906117c2565b8051600090819081905b8082101561118f5760008583815181106110bb576110bb611ab5565b01602001516001600160f81b0319169050600160ff1b8110156110ea576110e3600184611764565b925061117c565b600760fd1b6001600160f81b03198216101561110b576110e3600284611764565b600f60fc1b6001600160f81b03198216101561112c576110e3600384611764565b601f60fb1b6001600160f81b03198216101561114d576110e3600484611764565b603f60fa1b6001600160f81b03198216101561116e576110e3600584611764565b611179600684611764565b92505b508261118781611acb565b93505061109f565b50909392505050565b6000602082840312156111aa57600080fd5b81356001600160e01b031981168114610c5d57600080fd5b80356001600160a01b03811681146111d957600080fd5b919050565b6000806000606084860312156111f357600080fd5b6111fc846111c2565b925061120a602085016111c2565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112595761125961121a565b604052919050565b600067ffffffffffffffff82111561127b5761127b61121a565b50601f01601f191660200190565b600082601f83011261129a57600080fd5b81356112ad6112a882611261565b611230565b8181528460208386010111156112c257600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f8401126112f157600080fd5b50813567ffffffffffffffff81111561130957600080fd5b6020830191508360208260051b850101111561132457600080fd5b9250929050565b80151581146104a357600080fd5b803561ffff811681146111d957600080fd5b60008060008060008060008060006101008a8c03121561136a57600080fd5b893567ffffffffffffffff8082111561138257600080fd5b61138e8d838e01611289565b9a5061139c60208d016111c2565b995060408c0135985060608c013597506113b860808d016111c2565b965060a08c01359150808211156113ce57600080fd5b506113db8c828d016112df565b90955093505060c08a01356113ef8161132b565b91506113fd60e08b01611339565b90509295985092959850929598565b60008083601f84011261141e57600080fd5b50813567ffffffffffffffff81111561143657600080fd5b60208301915083602082850101111561132457600080fd5b6000806000806000806000806000806101008b8d03121561146e57600080fd5b8a3567ffffffffffffffff8082111561148657600080fd5b6114928e838f0161140c565b909c509a508a91506114a660208e016111c2565b995060408d0135985060608d013597506114c260808e016111c2565b965060a08d01359150808211156114d857600080fd5b506114e58d828e016112df565b90955093505060c08b01356114f98161132b565b915061150760e08c01611339565b90509295989b9194979a5092959850565b60006020828403121561152a57600080fd5b5035919050565b6000806040838503121561154457600080fd5b823567ffffffffffffffff81111561155b57600080fd5b61156785828601611289565b95602094909401359450505050565b60006020828403121561158857600080fd5b813567ffffffffffffffff81111561159f57600080fd5b6109f584828501611289565b6000806000604084860312156115c057600080fd5b833567ffffffffffffffff8111156115d757600080fd5b6115e38682870161140c565b909790965060209590950135949350505050565b60006020828403121561160957600080fd5b610c5d826111c2565b60006020828403121561162457600080fd5b8151610c5d8161132b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156116dd5782840389528135601e1988360301811261169357600080fd5b8701858101903567ffffffffffffffff8111156116af57600080fd5b8036038213156116be57600080fd5b6116c986828461162f565b9a87019a9550505090840190600101611672565b5091979650505050505050565b8981526001600160a01b03898116602083015260408201899052606082018890528616608082015261010060a0820181905260009061172c8382018789611658565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104635761046361174e565b60a08152600061178b60a08301888a61162f565b6001600160a01b03968716602084015260408301959095525091909316606082015261ffff90921660809092019190915292915050565b6000602082840312156117d457600080fd5b5051919050565b8183823760009101908152919050565b6080815260006117ff60808301878961162f565b602083019590955250604081019290925260609091015292915050565b818103818111156104635761046361174e565b60005b8381101561184a578181015183820152602001611832565b50506000910152565b6000815180845261186b81602086016020860161182f565b601f01601f19169290920160200192915050565b6060815260006118926060830186611853565b60208301949094525060400152919050565b6000604082840312156118b657600080fd5b6040516040810181811067ffffffffffffffff821117156118d9576118d961121a565b604052825181526020928301519281019290925250919050565b60608152600061190760608301868861162f565b6020830194909452506040015292915050565b602081526000610c5d6020830184611853565b838152604060208201526000611947604083018486611658565b95945050505050565b6000602080838503121561196357600080fd5b825167ffffffffffffffff8082111561197b57600080fd5b818501915085601f83011261198f57600080fd5b8151818111156119a1576119a161121a565b8060051b6119b0858201611230565b91825283810185019185810190898411156119ca57600080fd5b86860192505b83831015611a42578251858111156119e85760008081fd5b8601603f81018b136119fa5760008081fd5b878101516040611a0c6112a883611261565b8281528d82848601011115611a215760008081fd5b611a30838c830184870161182f565b855250505091860191908601906119d0565b9998505050505050505050565b60008251611a6181846020870161182f565b6305ccae8d60e31b920191825250600401919050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611aab90830184611853565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611add57611add61174e565b506001019056fea164736f6c6343000811000a", + "bytecode": "0x61014060405234801562000011575f80fd5b5060405162001da938038062001da9833981016040819052620000349162000219565b80336200004181620001b2565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201525f906001600160a01b038416906302571be390602401602060405180830381865afa158015620000a6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620002a8565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303815f875af115801562000116573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200013c9190620002cd565b5050505084841162000161576040516307cb550760e31b815260040160405180910390fd5b428411156200018357604051630b4319e560e21b815260040160405180910390fd5b506001600160a01b0395861660805293851660a05260c09290925260e0528216610100521661012052620002e5565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000216575f80fd5b50565b5f805f805f805f60e0888a03121562000230575f80fd5b87516200023d8162000201565b6020890151909750620002508162000201565b8096505060408801519450606088015193506080880151620002728162000201565b60a0890151909350620002858162000201565b60c0890151909250620002988162000201565b8091505092959891949750929550565b5f60208284031215620002b9575f80fd5b8151620002c68162000201565b9392505050565b5f60208284031215620002de575f80fd5b5051919050565b60805160a05160c05160e0516101005161012051611a44620003655f395f8181610321015281816106cc0152610a7d01525f81816101ed0152610f9501525f818161038601528181610c380152610e2601525f81816102b30152610dc901525f81816103b901526108c401525f81816108f90152610baa0152611a445ff3fe60806040526004361061011b575f3560e01c80638d839ffe1161009d578063aeb8ce9b11610062578063aeb8ce9b14610356578063ce1e09c014610375578063d3419bf3146103a8578063f14fcbc8146103db578063f2fde38b146103fa575f80fd5b80638d839ffe146102a25780638da5cb5b146102d55780639791c097146102f1578063a8e5fbc014610310578063acf1a84114610343575f80fd5b806374694a2b116100e357806374694a2b146101c957806380869853146101dc578063839df9451461022757806383e7f6ff146102525780638a95b09f1461028c575f80fd5b806301ffc9a71461011f5780633ccfd60b146101535780635d3590d51461016957806365a69dcf14610188578063715018a6146101b5575b5f80fd5b34801561012a575f80fd5b5061013e610139366004611145565b610419565b60405190151581526020015b60405180910390f35b34801561015e575f80fd5b5061016761044f565b005b348015610174575f80fd5b50610167610183366004611187565b610489565b348015610193575f80fd5b506101a76101a23660046112e4565b610507565b60405190815260200161014a565b3480156101c0575f80fd5b5061016761058b565b6101676101d73660046113db565b61059e565b3480156101e7575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014a565b348015610232575f80fd5b506101a761024136600461149d565b60016020525f908152604090205481565b34801561025d575f80fd5b5061027161026c3660046114b4565b610894565b6040805182518152602092830151928101929092520161014a565b348015610297575f80fd5b506101a76224ea0081565b3480156102ad575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e0575f80fd5b505f546001600160a01b031661020f565b3480156102fc575f80fd5b5061013e61030b3660046114f6565b6109c9565b34801561031b575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b610167610351366004611528565b6109dd565b348015610361575f80fd5b5061013e6103703660046114f6565b610b7b565b348015610380575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b3575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e6575f80fd5b506101676103f536600461149d565b610c22565b348015610405575f80fd5b50610167610414366004611570565b610c95565b5f6001600160e01b031982166301ffc9a760e01b148061044957506001600160e01b0319821663612e8c0960e01b145b92915050565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610486573d5f803e3d5ffd5b50565b610491610d0b565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af11580156104dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611589565b50505050565b885160208a01205f90841580159061052657506001600160a01b038716155b15610544576040516334fd817160e21b815260040160405180910390fd5b808a8a8a8a8a8a8a8a6040516020016105659998979695949392919061165e565b604051602081830303815290604052805190602001209150509998505050505050505050565b610593610d0b565b61059c5f610d64565b565b5f6105df8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c9250610894915050565b602081015181519192506105f2916116d5565b3410156106125760405163044044a560e21b815260040160405180910390fd5b6106b38b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050896106ae8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508d8d8d8d8d8d8d8d610507565b610db3565b604051635200a4c160e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a40149829061070b908f908f908f908f908e908b906004016116e8565b6020604051808303815f875af1158015610727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074b9190611732565b9050841561077657610776878d8d604051610767929190611749565b60405180910390208888610ece565b83156107be576107be8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b9250339150610f939050565b896001600160a01b03168c8c6040516107d8929190611749565b60405180910390207f69e37f151eb98a09618ddaa80c8cfaf1ce5996867c489f45b555b412271ebf278e8e865f015187602001518760405161081e959493929190611758565b60405180910390a36020820151825161083791906116d5565b341115610886576020820151825133916108fc9161085591906116d5565b61085f9034611788565b6040518115909202915f818181858888f19350505050158015610884573d5f803e3d5ffd5b505b505050505050505050505050565b604080518082019091525f808252602082015282516020840120604051636b727d4360e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116916350e9a7159187917f00000000000000000000000000000000000000000000000000000000000000009091169063d6e4fa8690602401602060405180830381865afa158015610940573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109649190611732565b866040518463ffffffff1660e01b8152600401610983939291906117e8565b6040805180830381865afa15801561099d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c1919061180c565b949350505050565b5f60036109d583611044565b101592915050565b5f83836040516109ee929190611749565b604080519182900382206020601f8701819004810284018101909252858352925082915f91610a39919088908890819084018382808284375f92019190915250889250610894915050565b8051909150341015610a5e5760405163044044a560e21b815260040160405180910390fd5b60405163c475abff60e01b815260048101839052602481018590525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff906044016020604051808303815f875af1158015610acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190611732565b8251909150341115610b3457815133906108fc90610b0d9034611788565b6040518115909202915f818181858888f19350505050158015610b32573d5f803e3d5ffd5b505b837f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae88883485604051610b6a9493929190611859565b60405180910390a250505050505050565b805160208201205f90610b8d836109c9565b8015610c1b57506040516312dc929d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396e494e890602401602060405180830381865afa158015610bf7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1b9190611589565b9392505050565b5f818152600160205260409020544290610c5d907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b10610c8357604051630a059d7160e01b8152600481018290526024015b60405180910390fd5b5f908152600160205260409020429055565b610c9d610d0b565b6001600160a01b038116610d025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7a565b61048681610d64565b5f546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c7a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600160205260409020544290610dee907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b1115610e1057604051635320bcf960e01b815260048101829052602401610c7a565b5f818152600160205260409020544290610e4b907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b11610e6c5760405163cb7690d760e01b815260048101829052602401610c7a565b610e7583610b7b565b610e9457826040516308eee0fd60e31b8152600401610c7a919061187f565b5f818152600160205260408120556224ea00821015610ec957604051639a71997b60e01b815260048101839052602401610c7a565b505050565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae6020808301919091528183018690528251808303840181526060830193849052805191012063e32954eb60e01b90925285906001600160a01b0382169063e32954eb90610f4890859088908890606401611891565b5f604051808303815f875af1158015610f63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8a91908101906118b3565b50505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a806d6b33838587604051602001610fd691906119a7565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161100494939291906119ce565b6020604051808303815f875af1158015611020573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611732565b80515f90819081905b8082101561113c575f85838151811061106857611068611a0b565b01602001516001600160f81b0319169050600160ff1b811015611097576110906001846116d5565b9250611129565b600760fd1b6001600160f81b0319821610156110b8576110906002846116d5565b600f60fc1b6001600160f81b0319821610156110d9576110906003846116d5565b601f60fb1b6001600160f81b0319821610156110fa576110906004846116d5565b603f60fa1b6001600160f81b03198216101561111b576110906005846116d5565b6111266006846116d5565b92505b508261113481611a1f565b93505061104d565b50909392505050565b5f60208284031215611155575f80fd5b81356001600160e01b031981168114610c1b575f80fd5b80356001600160a01b0381168114611182575f80fd5b919050565b5f805f60608486031215611199575f80fd5b6111a28461116c565b92506111b06020850161116c565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111fd576111fd6111c0565b604052919050565b5f67ffffffffffffffff82111561121e5761121e6111c0565b50601f01601f191660200190565b5f82601f83011261123b575f80fd5b813561124e61124982611205565b6111d4565b818152846020838601011115611262575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8083601f84011261128e575f80fd5b50813567ffffffffffffffff8111156112a5575f80fd5b6020830191508360208260051b85010111156112bf575f80fd5b9250929050565b8015158114610486575f80fd5b803561ffff81168114611182575f80fd5b5f805f805f805f805f6101008a8c0312156112fd575f80fd5b893567ffffffffffffffff80821115611314575f80fd5b6113208d838e0161122c565b9a5061132e60208d0161116c565b995060408c0135985060608c0135975061134a60808d0161116c565b965060a08c013591508082111561135f575f80fd5b5061136c8c828d0161127e565b90955093505060c08a0135611380816112c6565b915061138e60e08b016112d3565b90509295985092959850929598565b5f8083601f8401126113ad575f80fd5b50813567ffffffffffffffff8111156113c4575f80fd5b6020830191508360208285010111156112bf575f80fd5b5f805f805f805f805f806101008b8d0312156113f5575f80fd5b8a3567ffffffffffffffff8082111561140c575f80fd5b6114188e838f0161139d565b909c509a508a915061142c60208e0161116c565b995060408d0135985060608d0135975061144860808e0161116c565b965060a08d013591508082111561145d575f80fd5b5061146a8d828e0161127e565b90955093505060c08b013561147e816112c6565b915061148c60e08c016112d3565b90509295989b9194979a5092959850565b5f602082840312156114ad575f80fd5b5035919050565b5f80604083850312156114c5575f80fd5b823567ffffffffffffffff8111156114db575f80fd5b6114e78582860161122c565b95602094909401359450505050565b5f60208284031215611506575f80fd5b813567ffffffffffffffff81111561151c575f80fd5b6109c18482850161122c565b5f805f6040848603121561153a575f80fd5b833567ffffffffffffffff811115611550575f80fd5b61155c8682870161139d565b909790965060209590950135949350505050565b5f60208284031215611580575f80fd5b610c1b8261116c565b5f60208284031215611599575f80fd5b8151610c1b816112c6565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f838385526020808601955060208560051b830101845f5b8781101561165157848303601f19018952813536889003601e19018112611609575f80fd5b8701848101903567ffffffffffffffff811115611624575f80fd5b803603821315611632575f80fd5b61163d8582846115a4565b9a86019a94505050908301906001016115e4565b5090979650505050505050565b8981526001600160a01b03898116602083015260408201899052606082018890528616608082015261010060a082018190525f9061169f83820187896115cc565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610449576104496116c1565b60a081525f6116fb60a08301888a6115a4565b6001600160a01b03968716602084015260408301959095525091909316606082015261ffff90921660809092019190915292915050565b5f60208284031215611742575f80fd5b5051919050565b818382375f9101908152919050565b608081525f61176b6080830187896115a4565b602083019590955250604081019290925260609091015292915050565b81810381811115610449576104496116c1565b5f5b838110156117b557818101518382015260200161179d565b50505f910152565b5f81518084526117d481602086016020860161179b565b601f01601f19169290920160200192915050565b606081525f6117fa60608301866117bd565b60208301949094525060400152919050565b5f6040828403121561181c575f80fd5b6040516040810181811067ffffffffffffffff8211171561183f5761183f6111c0565b604052825181526020928301519281019290925250919050565b606081525f61186c6060830186886115a4565b6020830194909452506040015292915050565b602081525f610c1b60208301846117bd565b838152604060208201525f6118aa6040830184866115cc565b95945050505050565b5f60208083850312156118c4575f80fd5b825167ffffffffffffffff808211156118db575f80fd5b818501915085601f8301126118ee575f80fd5b815181811115611900576119006111c0565b8060051b61190f8582016111d4565b9182528381018501918581019089841115611928575f80fd5b86860192505b8383101561199a57825185811115611944575f80fd5b8601603f81018b13611954575f80fd5b87810151604061196661124983611205565b8281528d82848601011115611979575f80fd5b611988838c830184870161179b565b8552505050918601919086019061192e565b9998505050505050505050565b5f82516119b881846020870161179b565b6305ccae8d60e31b920191825250600401919050565b6001600160a01b0385811682528481166020830152831660408201526080606082018190525f90611a01908301846117bd565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611a3057611a306116c1565b506001019056fea164736f6c6343000818000a", + "deployedBytecode": "0x60806040526004361061011b575f3560e01c80638d839ffe1161009d578063aeb8ce9b11610062578063aeb8ce9b14610356578063ce1e09c014610375578063d3419bf3146103a8578063f14fcbc8146103db578063f2fde38b146103fa575f80fd5b80638d839ffe146102a25780638da5cb5b146102d55780639791c097146102f1578063a8e5fbc014610310578063acf1a84114610343575f80fd5b806374694a2b116100e357806374694a2b146101c957806380869853146101dc578063839df9451461022757806383e7f6ff146102525780638a95b09f1461028c575f80fd5b806301ffc9a71461011f5780633ccfd60b146101535780635d3590d51461016957806365a69dcf14610188578063715018a6146101b5575b5f80fd5b34801561012a575f80fd5b5061013e610139366004611145565b610419565b60405190151581526020015b60405180910390f35b34801561015e575f80fd5b5061016761044f565b005b348015610174575f80fd5b50610167610183366004611187565b610489565b348015610193575f80fd5b506101a76101a23660046112e4565b610507565b60405190815260200161014a565b3480156101c0575f80fd5b5061016761058b565b6101676101d73660046113db565b61059e565b3480156101e7575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014a565b348015610232575f80fd5b506101a761024136600461149d565b60016020525f908152604090205481565b34801561025d575f80fd5b5061027161026c3660046114b4565b610894565b6040805182518152602092830151928101929092520161014a565b348015610297575f80fd5b506101a76224ea0081565b3480156102ad575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e0575f80fd5b505f546001600160a01b031661020f565b3480156102fc575f80fd5b5061013e61030b3660046114f6565b6109c9565b34801561031b575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b610167610351366004611528565b6109dd565b348015610361575f80fd5b5061013e6103703660046114f6565b610b7b565b348015610380575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b3575f80fd5b5061020f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e6575f80fd5b506101676103f536600461149d565b610c22565b348015610405575f80fd5b50610167610414366004611570565b610c95565b5f6001600160e01b031982166301ffc9a760e01b148061044957506001600160e01b0319821663612e8c0960e01b145b92915050565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610486573d5f803e3d5ffd5b50565b610491610d0b565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af11580156104dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611589565b50505050565b885160208a01205f90841580159061052657506001600160a01b038716155b15610544576040516334fd817160e21b815260040160405180910390fd5b808a8a8a8a8a8a8a8a6040516020016105659998979695949392919061165e565b604051602081830303815290604052805190602001209150509998505050505050505050565b610593610d0b565b61059c5f610d64565b565b5f6105df8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c9250610894915050565b602081015181519192506105f2916116d5565b3410156106125760405163044044a560e21b815260040160405180910390fd5b6106b38b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050896106ae8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508d8d8d8d8d8d8d8d610507565b610db3565b604051635200a4c160e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a40149829061070b908f908f908f908f908e908b906004016116e8565b6020604051808303815f875af1158015610727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074b9190611732565b9050841561077657610776878d8d604051610767929190611749565b60405180910390208888610ece565b83156107be576107be8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b9250339150610f939050565b896001600160a01b03168c8c6040516107d8929190611749565b60405180910390207f69e37f151eb98a09618ddaa80c8cfaf1ce5996867c489f45b555b412271ebf278e8e865f015187602001518760405161081e959493929190611758565b60405180910390a36020820151825161083791906116d5565b341115610886576020820151825133916108fc9161085591906116d5565b61085f9034611788565b6040518115909202915f818181858888f19350505050158015610884573d5f803e3d5ffd5b505b505050505050505050505050565b604080518082019091525f808252602082015282516020840120604051636b727d4360e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116916350e9a7159187917f00000000000000000000000000000000000000000000000000000000000000009091169063d6e4fa8690602401602060405180830381865afa158015610940573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109649190611732565b866040518463ffffffff1660e01b8152600401610983939291906117e8565b6040805180830381865afa15801561099d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c1919061180c565b949350505050565b5f60036109d583611044565b101592915050565b5f83836040516109ee929190611749565b604080519182900382206020601f8701819004810284018101909252858352925082915f91610a39919088908890819084018382808284375f92019190915250889250610894915050565b8051909150341015610a5e5760405163044044a560e21b815260040160405180910390fd5b60405163c475abff60e01b815260048101839052602481018590525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c475abff906044016020604051808303815f875af1158015610acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190611732565b8251909150341115610b3457815133906108fc90610b0d9034611788565b6040518115909202915f818181858888f19350505050158015610b32573d5f803e3d5ffd5b505b837f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae88883485604051610b6a9493929190611859565b60405180910390a250505050505050565b805160208201205f90610b8d836109c9565b8015610c1b57506040516312dc929d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396e494e890602401602060405180830381865afa158015610bf7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1b9190611589565b9392505050565b5f818152600160205260409020544290610c5d907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b10610c8357604051630a059d7160e01b8152600481018290526024015b60405180910390fd5b5f908152600160205260409020429055565b610c9d610d0b565b6001600160a01b038116610d025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7a565b61048681610d64565b5f546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c7a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600160205260409020544290610dee907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b1115610e1057604051635320bcf960e01b815260048101829052602401610c7a565b5f818152600160205260409020544290610e4b907f0000000000000000000000000000000000000000000000000000000000000000906116d5565b11610e6c5760405163cb7690d760e01b815260048101829052602401610c7a565b610e7583610b7b565b610e9457826040516308eee0fd60e31b8152600401610c7a919061187f565b5f818152600160205260408120556224ea00821015610ec957604051639a71997b60e01b815260048101839052602401610c7a565b505050565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae6020808301919091528183018690528251808303840181526060830193849052805191012063e32954eb60e01b90925285906001600160a01b0382169063e32954eb90610f4890859088908890606401611891565b5f604051808303815f875af1158015610f63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8a91908101906118b3565b50505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a806d6b33838587604051602001610fd691906119a7565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161100494939291906119ce565b6020604051808303815f875af1158015611020573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611732565b80515f90819081905b8082101561113c575f85838151811061106857611068611a0b565b01602001516001600160f81b0319169050600160ff1b811015611097576110906001846116d5565b9250611129565b600760fd1b6001600160f81b0319821610156110b8576110906002846116d5565b600f60fc1b6001600160f81b0319821610156110d9576110906003846116d5565b601f60fb1b6001600160f81b0319821610156110fa576110906004846116d5565b603f60fa1b6001600160f81b03198216101561111b576110906005846116d5565b6111266006846116d5565b92505b508261113481611a1f565b93505061104d565b50909392505050565b5f60208284031215611155575f80fd5b81356001600160e01b031981168114610c1b575f80fd5b80356001600160a01b0381168114611182575f80fd5b919050565b5f805f60608486031215611199575f80fd5b6111a28461116c565b92506111b06020850161116c565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111fd576111fd6111c0565b604052919050565b5f67ffffffffffffffff82111561121e5761121e6111c0565b50601f01601f191660200190565b5f82601f83011261123b575f80fd5b813561124e61124982611205565b6111d4565b818152846020838601011115611262575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8083601f84011261128e575f80fd5b50813567ffffffffffffffff8111156112a5575f80fd5b6020830191508360208260051b85010111156112bf575f80fd5b9250929050565b8015158114610486575f80fd5b803561ffff81168114611182575f80fd5b5f805f805f805f805f6101008a8c0312156112fd575f80fd5b893567ffffffffffffffff80821115611314575f80fd5b6113208d838e0161122c565b9a5061132e60208d0161116c565b995060408c0135985060608c0135975061134a60808d0161116c565b965060a08c013591508082111561135f575f80fd5b5061136c8c828d0161127e565b90955093505060c08a0135611380816112c6565b915061138e60e08b016112d3565b90509295985092959850929598565b5f8083601f8401126113ad575f80fd5b50813567ffffffffffffffff8111156113c4575f80fd5b6020830191508360208285010111156112bf575f80fd5b5f805f805f805f805f806101008b8d0312156113f5575f80fd5b8a3567ffffffffffffffff8082111561140c575f80fd5b6114188e838f0161139d565b909c509a508a915061142c60208e0161116c565b995060408d0135985060608d0135975061144860808e0161116c565b965060a08d013591508082111561145d575f80fd5b5061146a8d828e0161127e565b90955093505060c08b013561147e816112c6565b915061148c60e08c016112d3565b90509295989b9194979a5092959850565b5f602082840312156114ad575f80fd5b5035919050565b5f80604083850312156114c5575f80fd5b823567ffffffffffffffff8111156114db575f80fd5b6114e78582860161122c565b95602094909401359450505050565b5f60208284031215611506575f80fd5b813567ffffffffffffffff81111561151c575f80fd5b6109c18482850161122c565b5f805f6040848603121561153a575f80fd5b833567ffffffffffffffff811115611550575f80fd5b61155c8682870161139d565b909790965060209590950135949350505050565b5f60208284031215611580575f80fd5b610c1b8261116c565b5f60208284031215611599575f80fd5b8151610c1b816112c6565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f838385526020808601955060208560051b830101845f5b8781101561165157848303601f19018952813536889003601e19018112611609575f80fd5b8701848101903567ffffffffffffffff811115611624575f80fd5b803603821315611632575f80fd5b61163d8582846115a4565b9a86019a94505050908301906001016115e4565b5090979650505050505050565b8981526001600160a01b03898116602083015260408201899052606082018890528616608082015261010060a082018190525f9061169f83820187896115cc565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610449576104496116c1565b60a081525f6116fb60a08301888a6115a4565b6001600160a01b03968716602084015260408301959095525091909316606082015261ffff90921660809092019190915292915050565b5f60208284031215611742575f80fd5b5051919050565b818382375f9101908152919050565b608081525f61176b6080830187896115a4565b602083019590955250604081019290925260609091015292915050565b81810381811115610449576104496116c1565b5f5b838110156117b557818101518382015260200161179d565b50505f910152565b5f81518084526117d481602086016020860161179b565b601f01601f19169290920160200192915050565b606081525f6117fa60608301866117bd565b60208301949094525060400152919050565b5f6040828403121561181c575f80fd5b6040516040810181811067ffffffffffffffff8211171561183f5761183f6111c0565b604052825181526020928301519281019290925250919050565b606081525f61186c6060830186886115a4565b6020830194909452506040015292915050565b602081525f610c1b60208301846117bd565b838152604060208201525f6118aa6040830184866115cc565b95945050505050565b5f60208083850312156118c4575f80fd5b825167ffffffffffffffff808211156118db575f80fd5b818501915085601f8301126118ee575f80fd5b815181811115611900576119006111c0565b8060051b61190f8582016111d4565b9182528381018501918581019089841115611928575f80fd5b86860192505b8383101561199a57825185811115611944575f80fd5b8601603f81018b13611954575f80fd5b87810151604061196661124983611205565b8281528d82848601011115611979575f80fd5b611988838c830184870161179b565b8552505050918601919086019061192e565b9998505050505050505050565b5f82516119b881846020870161179b565b6305ccae8d60e31b920191825250600401919050565b6001600160a01b0385811682528481166020830152831660408201526080606082018190525f90611a01908301846117bd565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611a3057611a306116c1565b506001019056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/Executor.json b/artifacts/Executor.json new file mode 100644 index 00000000..64248a00 --- /dev/null +++ b/artifacts/Executor.json @@ -0,0 +1,653 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Executor", + "sourceName": "seaport-core/src/lib/Executor.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079338038061079383398101604081905261002f916102f9565b8080808061003b61015c565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e99190610326565b506101a052505f90506100fa610282565b90506001600160a01b03811661012357604051632aea588760e01b815260040160405180910390fd5b5f61012d8261029b565b8015156101c0526001600160a01b0383166101e05290508061015257600163929eee14555b50505050506103ba565b5f808080808061018c60408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a8152602001610729606a913990505f6040518060c001604052806084815260200161057f6084913990505f60405180610100016040528060d4815260200161065560d4913990506040518060800160405280605281526020016106036052913980519060200120965082805190602001209550818051906020012094505f81838560405160200161025b93929190610375565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102b3919061039b565b6040515f8181818686fa925050503d805f81146102eb576040519150601f19603f3d011682016040523d82523d5f602084013e6102f0565b606091505b50909392505050565b5f60208284031215610309575f80fd5b81516001600160a01b038116811461031f575f80fd5b9392505050565b5f8060408385031215610337575f80fd5b505080516020909101519092909150565b5f81515f5b81811015610367576020818501810151868301520161034d565b505f93019283525090919050565b5f61039261038c6103868488610348565b86610348565b84610348565b95945050505050565b5f826103b557634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161016261041d5f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/FulfillmentApplicationErrors.json b/artifacts/FulfillmentApplicationErrors.json new file mode 100644 index 00000000..90113e64 --- /dev/null +++ b/artifacts/FulfillmentApplicationErrors.json @@ -0,0 +1,43 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FulfillmentApplicationErrors", + "sourceName": "seaport-types/src/interfaces/FulfillmentApplicationErrors.sol", + "abi": [ + { + "inputs": [], + "name": "InvalidFulfillmentComponentData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillmentIndex", + "type": "uint256" + } + ], + "name": "MismatchedFulfillmentOfferAndConsiderationComponents", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "MissingFulfillmentComponentOnAggregation", + "type": "error" + }, + { + "inputs": [], + "name": "OfferAndConsiderationRequiredOnFulfillment", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/FulfillmentApplier.json b/artifacts/FulfillmentApplier.json new file mode 100644 index 00000000..ec47865d --- /dev/null +++ b/artifacts/FulfillmentApplier.json @@ -0,0 +1,43 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FulfillmentApplier", + "sourceName": "seaport-core/src/lib/FulfillmentApplier.sol", + "abi": [ + { + "inputs": [], + "name": "InvalidFulfillmentComponentData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillmentIndex", + "type": "uint256" + } + ], + "name": "MismatchedFulfillmentOfferAndConsiderationComponents", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "MissingFulfillmentComponentOnAggregation", + "type": "error" + }, + { + "inputs": [], + "name": "OfferAndConsiderationRequiredOnFulfillment", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/GettersAndDerivers.json b/artifacts/GettersAndDerivers.json new file mode 100644 index 00000000..fde4b672 --- /dev/null +++ b/artifacts/GettersAndDerivers.json @@ -0,0 +1,475 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GettersAndDerivers", + "sourceName": "seaport-core/src/lib/GettersAndDerivers.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + } + ], + "bytecode": "0x6101c0604052348015610010575f80fd5b5060405161053338038061053383398101604081905261002f91610219565b806100386100f3565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e69190610246565b506101a052506102bb9050565b5f808080808061012360408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a81526020016104c9606a913990505f6040518060c001604052806084815260200161031f6084913990505f60405180610100016040528060d481526020016103f560d4913990506040518060800160405280605281526020016103a36052913980519060200120965082805190602001209550818051906020012094505f8183856040516020016101f293929190610295565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f60208284031215610229575f80fd5b81516001600160a01b038116811461023f575f80fd5b9392505050565b5f8060408385031215610257575f80fd5b505080516020909101519092909150565b5f81515f5b81811015610287576020818501810151868301520161026d565b505f93019283525090919050565b5f6102b26102ac6102a68488610268565b86610268565b84610268565b95945050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051601561030a5f395f50505f50505f50505f50505f50505f50505f50505f50505f50505f505060155ff3fe60806040525f80fdfea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ISeaportProxyBuyer.json b/artifacts/ISeaportProxyBuyer.json new file mode 100644 index 00000000..2672c38f --- /dev/null +++ b/artifacts/ISeaportProxyBuyer.json @@ -0,0 +1,265 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ISeaportProxyBuyer", + "sourceName": "contracts/marketplace/ISeaportProxyBuyer.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder", + "name": "advancedOrder", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "criteriaResolvers", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "fulfillAdvancedOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/LegacyETHRegistrarController.json b/artifacts/LegacyETHRegistrarController.json index ccf09298..1b3fc0ad 100644 --- a/artifacts/LegacyETHRegistrarController.json +++ b/artifacts/LegacyETHRegistrarController.json @@ -561,8 +561,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50604051611a13380380611a138339818101604052608081101561003357600080fd5b5080516020820151604080840151606090940151600080546001600160a01b031916331780825592519495939491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a381811161009d57600080fd5b600180546001600160a01b039586166001600160a01b031991821617909155600280549490951693169290921790925560039190915560045561192e806100e56000396000f3fe60806040526004361061012a5760003560e01c80638d839ffe116100ab578063aeb8ce9b1161006f578063aeb8ce9b146105d7578063ce1e09c014610688578063f14fcbc81461069d578063f2fde38b146106c7578063f49826be146106fa578063f7a16963146107b95761012a565b80638d839ffe1461045d5780638da5cb5b146104725780638f32d59b146104a35780639791c097146104b8578063acf1a841146105695761012a565b80637e324479116100f25780637e324479146102b8578063839df945146102e857806383e7f6ff1461031257806385f6d155146103c55780638a95b09f146104485761012a565b806301ffc9a71461012f5780633ccfd60b146101775780633d86c52f1461018e578063530e784f14610270578063715018a6146102a3575b600080fd5b34801561013b57600080fd5b506101636004803603602081101561015257600080fd5b50356001600160e01b031916610881565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610a12565b005b34801561019a57600080fd5b5061025e600480360360a08110156101b157600080fd5b810190602081018135600160201b8111156101cb57600080fd5b8201836020820111156101dd57600080fd5b803590602001918460018302840111600160201b831117156101fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401359360408101358216935060600135169050610a53565b60408051918252519081900360200190f35b34801561027c57600080fd5b5061018c6004803603602081101561029357600080fd5b50356001600160a01b0316610b42565b3480156102af57600080fd5b5061018c610ba3565b3480156102c457600080fd5b5061018c600480360360408110156102db57600080fd5b5080359060200135610bfe565b3480156102f457600080fd5b5061025e6004803603602081101561030b57600080fd5b5035610c1a565b34801561031e57600080fd5b5061025e6004803603604081101561033557600080fd5b810190602081018135600160201b81111561034f57600080fd5b82018360208201111561036157600080fd5b803590602001918460018302840111600160201b8311171561038257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c2c915050565b61018c600480360360808110156103db57600080fd5b810190602081018135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91935091506001600160a01b038135169060208101359060400135610d9e565b34801561045457600080fd5b5061025e610de9565b34801561046957600080fd5b5061025e610df0565b34801561047e57600080fd5b50610487610df6565b604080516001600160a01b039092168252519081900360200190f35b3480156104af57600080fd5b50610163610e05565b3480156104c457600080fd5b50610163600480360360208110156104db57600080fd5b810190602081018135600160201b8111156104f557600080fd5b82018360208201111561050757600080fd5b803590602001918460018302840111600160201b8311171561052857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e16945050505050565b61018c6004803603604081101561057f57600080fd5b810190602081018135600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b919350915035610e2b565b3480156105e357600080fd5b50610163600480360360208110156105fa57600080fd5b810190602081018135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcf945050505050565b34801561069457600080fd5b5061025e611069565b3480156106a957600080fd5b5061018c600480360360208110156106c057600080fd5b503561106f565b3480156106d357600080fd5b5061018c600480360360208110156106ea57600080fd5b50356001600160a01b03166110a1565b34801561070657600080fd5b5061025e6004803603606081101561071d57600080fd5b810190602081018135600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356110bb565b61018c600480360360c08110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460018302840111600160201b8311171561081c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135936040810135935060608101358216925060800135166110d3565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000906001600160e01b0319838116911614806109c05750604080517472656e657728737472696e672c75696e743235362960581b815290519081900360150181209080602861186a8239604080519182900360280182206e636f6d6d697428627974657333322960881b8352905191829003600f01822090925090806026611892823960260190506040518091039020604051808070617661696c61626c6528737472696e672960781b8152506011019050604051809103902060405180807f72656e74507269636528737472696e672c75696e7432353629000000000000008152506019019050604051809103902018181818186001600160e01b031916826001600160e01b031916145b80610a0c5750604051808061182a60409139604080519182900301812091508060426118b8823960420190506040518091039020186001600160e01b031916826001600160e01b031916145b92915050565b610a1a610e05565b610a2357600080fd5b6040513390303180156108fc02916000818181858888f19350505050158015610a50573d6000803e3d6000fd5b50565b845160208601206000906001600160a01b038416158015610a7b57506001600160a01b038316155b15610acb57604080516020808201939093526bffffffffffffffffffffffff19606089901b1681830152605480820188905282518083039091018152607490910190915280519101209050610b39565b6001600160a01b038416610ade57600080fd5b604080516020808201939093526bffffffffffffffffffffffff19606089811b82168385015287811b8216605484015286901b166068820152607c80820188905282518083039091018152609c909101909152805191012090505b95945050505050565b610b4a610e05565b610b5357600080fd5b600280546001600160a01b0319166001600160a01b0383811691909117918290556040519116907ff261845a790fe29bbd6631e2ca4a5bdc83e6eed7c3271d9590d97287e00e912390600090a250565b610bab610e05565b610bb457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c06610e05565b610c0f57600080fd5b600391909155600455565b60056020526000908152604090205481565b815160208084019190912060025460015460408051636b727d4360e11b81526004810185905290516000956001600160a01b03948516946350e9a715948a9491169263d6e4fa8692602480840193919291829003018186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d6020811015610cbb57600080fd5b50516040516001600160e01b031960e085901b168152602481018290526044810188905260606004820190815283516064830152835189928291608490910190602087019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b5051949350505050565b610de285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250889350879250869150806110d3565b5050505050565b6224ea0081565b60035481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60006003610e2383611646565b101592915050565b6000610e6e84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610c2c915050565b905080341015610e7d57600080fd5b60008484604051808383808284376040805193909101839003832060015463c475abff60e01b855260048501829052602485018b90529151909750600096506001600160a01b03909116945063c475abff93506044808401936020935082900301818787803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051905034831015610f565760405133903485900380156108fc02916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b505b817f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae8787868560405180806020018481526020018381526020018281038252868682818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a2505050505050565b80516020820120600090610fe283610e16565b80156110625750600154604080516312dc929d60e31b81526004810184905290516001600160a01b03909216916396e494e891602480820192602092909190829003018186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b50515b9392505050565b60045481565b6004546000828152600560205260409020544291011061108e57600080fd5b6000908152600560205260409020429055565b6110a9610e05565b6110b257600080fd5b610a508161172e565b60006110cb848484600080610a53565b949350505050565b60006110e28787868686610a53565b905060006110f188878461179c565b885160208a01209091508060006001600160a01b038716156114ac5760015460408051633f2891eb60e21b815260048101859052306024820152604481018c905290516001600160a01b039092169163fca247ac916064808201926020929091908290030181600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505160015460408051630ddf7fcb60e41b815290519293506000926001600160a01b039092169163ddf7fcb091600480820192602092909190829003018186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d602081101561120957600080fd5b50516040805160208181019390935280820187905281518082038301815260608201808452815191850191909120600154633f15457f60e01b90925292519294506001600160a01b031692633f15457f92606480840193829003018186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b505160408051630c4b7b8560e11b8152600481018490526001600160a01b038b8116602483015291519190921691631896f70a91604480830192600092919082900301818387803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506001600160a01b0387161561139257876001600160a01b031663d5fa2b0082896040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050505b60015460408051630a3b53db60e21b8152600481018690526001600160a01b038e81166024830152915191909216916328ed4f6c91604480830192600092919082900301818387803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd308d866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505061154c565b6001600160a01b038616156114c057600080fd5b60015460408051633f2891eb60e21b8152600481018590526001600160a01b038d81166024830152604482018d90529151919092169163fca247ac9160648083019260209291908290030181600087803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b505190505b896001600160a01b0316837fca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f8d87856040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156115c45781810151838201526020016115ac565b50505050905090810190601f1680156115f15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3833411156116395760405133903486900380156108fc02916000818181858888f19350505050158015611637573d6000803e3d6000fd5b505b5050505050505050505050565b8051600090819081905b8082101561172557600085838151811061166657fe5b01602001516001600160f81b0319169050600160ff1b81101561168e57600183019250611719565b600760fd1b6001600160f81b0319821610156116af57600283019250611719565b600f60fc1b6001600160f81b0319821610156116d057600383019250611719565b601f60fb1b6001600160f81b0319821610156116f157600483019250611719565b603f60fa1b6001600160f81b03198216101561171257600583019250611719565b6006830192505b50600190920191611650565b50909392505050565b6001600160a01b03811661174157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600354600082815260056020526040812054909142910111156117be57600080fd5b600454600083815260056020526040902054429101116117dd57600080fd5b6117e684610fcf565b6117ef57600080fd5b600082815260056020526040812081905561180a8585610c2c565b90506224ea0084101561181c57600080fd5b803410156110cb57600080fdfe6d616b65436f6d6d69746d656e7457697468436f6e66696728737472696e672c616464726573732c627974657333322c616464726573732c6164647265737329726567697374657228737472696e672c616464726573732c75696e743235362c62797465733332296d616b65436f6d6d69746d656e7428737472696e672c616464726573732c6279746573333229726567697374657257697468436f6e66696728737472696e672c616464726573732c75696e743235362c627974657333322c616464726573732c6164647265737329a265627a7a72315820ba74b4e49afb22de09a9ebda5d073d93e2a2a7b2530ce50def390c32cac92ea064736f6c634300050c0032", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c80638d839ffe116100ab578063aeb8ce9b1161006f578063aeb8ce9b146105d7578063ce1e09c014610688578063f14fcbc81461069d578063f2fde38b146106c7578063f49826be146106fa578063f7a16963146107b95761012a565b80638d839ffe1461045d5780638da5cb5b146104725780638f32d59b146104a35780639791c097146104b8578063acf1a841146105695761012a565b80637e324479116100f25780637e324479146102b8578063839df945146102e857806383e7f6ff1461031257806385f6d155146103c55780638a95b09f146104485761012a565b806301ffc9a71461012f5780633ccfd60b146101775780633d86c52f1461018e578063530e784f14610270578063715018a6146102a3575b600080fd5b34801561013b57600080fd5b506101636004803603602081101561015257600080fd5b50356001600160e01b031916610881565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610a12565b005b34801561019a57600080fd5b5061025e600480360360a08110156101b157600080fd5b810190602081018135600160201b8111156101cb57600080fd5b8201836020820111156101dd57600080fd5b803590602001918460018302840111600160201b831117156101fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401359360408101358216935060600135169050610a53565b60408051918252519081900360200190f35b34801561027c57600080fd5b5061018c6004803603602081101561029357600080fd5b50356001600160a01b0316610b42565b3480156102af57600080fd5b5061018c610ba3565b3480156102c457600080fd5b5061018c600480360360408110156102db57600080fd5b5080359060200135610bfe565b3480156102f457600080fd5b5061025e6004803603602081101561030b57600080fd5b5035610c1a565b34801561031e57600080fd5b5061025e6004803603604081101561033557600080fd5b810190602081018135600160201b81111561034f57600080fd5b82018360208201111561036157600080fd5b803590602001918460018302840111600160201b8311171561038257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c2c915050565b61018c600480360360808110156103db57600080fd5b810190602081018135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91935091506001600160a01b038135169060208101359060400135610d9e565b34801561045457600080fd5b5061025e610de9565b34801561046957600080fd5b5061025e610df0565b34801561047e57600080fd5b50610487610df6565b604080516001600160a01b039092168252519081900360200190f35b3480156104af57600080fd5b50610163610e05565b3480156104c457600080fd5b50610163600480360360208110156104db57600080fd5b810190602081018135600160201b8111156104f557600080fd5b82018360208201111561050757600080fd5b803590602001918460018302840111600160201b8311171561052857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e16945050505050565b61018c6004803603604081101561057f57600080fd5b810190602081018135600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b919350915035610e2b565b3480156105e357600080fd5b50610163600480360360208110156105fa57600080fd5b810190602081018135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcf945050505050565b34801561069457600080fd5b5061025e611069565b3480156106a957600080fd5b5061018c600480360360208110156106c057600080fd5b503561106f565b3480156106d357600080fd5b5061018c600480360360208110156106ea57600080fd5b50356001600160a01b03166110a1565b34801561070657600080fd5b5061025e6004803603606081101561071d57600080fd5b810190602081018135600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356110bb565b61018c600480360360c08110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460018302840111600160201b8311171561081c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135936040810135935060608101358216925060800135166110d3565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000906001600160e01b0319838116911614806109c05750604080517472656e657728737472696e672c75696e743235362960581b815290519081900360150181209080602861186a8239604080519182900360280182206e636f6d6d697428627974657333322960881b8352905191829003600f01822090925090806026611892823960260190506040518091039020604051808070617661696c61626c6528737472696e672960781b8152506011019050604051809103902060405180807f72656e74507269636528737472696e672c75696e7432353629000000000000008152506019019050604051809103902018181818186001600160e01b031916826001600160e01b031916145b80610a0c5750604051808061182a60409139604080519182900301812091508060426118b8823960420190506040518091039020186001600160e01b031916826001600160e01b031916145b92915050565b610a1a610e05565b610a2357600080fd5b6040513390303180156108fc02916000818181858888f19350505050158015610a50573d6000803e3d6000fd5b50565b845160208601206000906001600160a01b038416158015610a7b57506001600160a01b038316155b15610acb57604080516020808201939093526bffffffffffffffffffffffff19606089901b1681830152605480820188905282518083039091018152607490910190915280519101209050610b39565b6001600160a01b038416610ade57600080fd5b604080516020808201939093526bffffffffffffffffffffffff19606089811b82168385015287811b8216605484015286901b166068820152607c80820188905282518083039091018152609c909101909152805191012090505b95945050505050565b610b4a610e05565b610b5357600080fd5b600280546001600160a01b0319166001600160a01b0383811691909117918290556040519116907ff261845a790fe29bbd6631e2ca4a5bdc83e6eed7c3271d9590d97287e00e912390600090a250565b610bab610e05565b610bb457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c06610e05565b610c0f57600080fd5b600391909155600455565b60056020526000908152604090205481565b815160208084019190912060025460015460408051636b727d4360e11b81526004810185905290516000956001600160a01b03948516946350e9a715948a9491169263d6e4fa8692602480840193919291829003018186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d6020811015610cbb57600080fd5b50516040516001600160e01b031960e085901b168152602481018290526044810188905260606004820190815283516064830152835189928291608490910190602087019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b5051949350505050565b610de285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250889350879250869150806110d3565b5050505050565b6224ea0081565b60035481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60006003610e2383611646565b101592915050565b6000610e6e84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610c2c915050565b905080341015610e7d57600080fd5b60008484604051808383808284376040805193909101839003832060015463c475abff60e01b855260048501829052602485018b90529151909750600096506001600160a01b03909116945063c475abff93506044808401936020935082900301818787803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051905034831015610f565760405133903485900380156108fc02916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b505b817f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae8787868560405180806020018481526020018381526020018281038252868682818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a2505050505050565b80516020820120600090610fe283610e16565b80156110625750600154604080516312dc929d60e31b81526004810184905290516001600160a01b03909216916396e494e891602480820192602092909190829003018186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b50515b9392505050565b60045481565b6004546000828152600560205260409020544291011061108e57600080fd5b6000908152600560205260409020429055565b6110a9610e05565b6110b257600080fd5b610a508161172e565b60006110cb848484600080610a53565b949350505050565b60006110e28787868686610a53565b905060006110f188878461179c565b885160208a01209091508060006001600160a01b038716156114ac5760015460408051633f2891eb60e21b815260048101859052306024820152604481018c905290516001600160a01b039092169163fca247ac916064808201926020929091908290030181600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505160015460408051630ddf7fcb60e41b815290519293506000926001600160a01b039092169163ddf7fcb091600480820192602092909190829003018186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d602081101561120957600080fd5b50516040805160208181019390935280820187905281518082038301815260608201808452815191850191909120600154633f15457f60e01b90925292519294506001600160a01b031692633f15457f92606480840193829003018186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b505160408051630c4b7b8560e11b8152600481018490526001600160a01b038b8116602483015291519190921691631896f70a91604480830192600092919082900301818387803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506001600160a01b0387161561139257876001600160a01b031663d5fa2b0082896040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050505b60015460408051630a3b53db60e21b8152600481018690526001600160a01b038e81166024830152915191909216916328ed4f6c91604480830192600092919082900301818387803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd308d866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505061154c565b6001600160a01b038616156114c057600080fd5b60015460408051633f2891eb60e21b8152600481018590526001600160a01b038d81166024830152604482018d90529151919092169163fca247ac9160648083019260209291908290030181600087803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b505190505b896001600160a01b0316837fca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f8d87856040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156115c45781810151838201526020016115ac565b50505050905090810190601f1680156115f15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3833411156116395760405133903486900380156108fc02916000818181858888f19350505050158015611637573d6000803e3d6000fd5b505b5050505050505050505050565b8051600090819081905b8082101561172557600085838151811061166657fe5b01602001516001600160f81b0319169050600160ff1b81101561168e57600183019250611719565b600760fd1b6001600160f81b0319821610156116af57600283019250611719565b600f60fc1b6001600160f81b0319821610156116d057600383019250611719565b601f60fb1b6001600160f81b0319821610156116f157600483019250611719565b603f60fa1b6001600160f81b03198216101561171257600583019250611719565b6006830192505b50600190920191611650565b50909392505050565b6001600160a01b03811661174157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600354600082815260056020526040812054909142910111156117be57600080fd5b600454600083815260056020526040902054429101116117dd57600080fd5b6117e684610fcf565b6117ef57600080fd5b600082815260056020526040812081905561180a8585610c2c565b90506224ea0084101561181c57600080fd5b803410156110cb57600080fdfe6d616b65436f6d6d69746d656e7457697468436f6e66696728737472696e672c616464726573732c627974657333322c616464726573732c6164647265737329726567697374657228737472696e672c616464726573732c75696e743235362c62797465733332296d616b65436f6d6d69746d656e7428737472696e672c616464726573732c6279746573333229726567697374657257697468436f6e66696728737472696e672c616464726573732c75696e743235362c627974657333322c616464726573732c6164647265737329a265627a7a72315820ba74b4e49afb22de09a9ebda5d073d93e2a2a7b2530ce50def390c32cac92ea064736f6c634300050c0032", + "bytecode": "0x608060405234801561001057600080fd5b50604051611a13380380611a138339818101604052608081101561003357600080fd5b5080516020820151604080840151606090940151600080546001600160a01b031916331780825592519495939491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a381811161009d57600080fd5b600180546001600160a01b039586166001600160a01b031991821617909155600280549490951693169290921790925560039190915560045561192e806100e56000396000f3fe60806040526004361061012a5760003560e01c80638d839ffe116100ab578063aeb8ce9b1161006f578063aeb8ce9b146105d7578063ce1e09c014610688578063f14fcbc81461069d578063f2fde38b146106c7578063f49826be146106fa578063f7a16963146107b95761012a565b80638d839ffe1461045d5780638da5cb5b146104725780638f32d59b146104a35780639791c097146104b8578063acf1a841146105695761012a565b80637e324479116100f25780637e324479146102b8578063839df945146102e857806383e7f6ff1461031257806385f6d155146103c55780638a95b09f146104485761012a565b806301ffc9a71461012f5780633ccfd60b146101775780633d86c52f1461018e578063530e784f14610270578063715018a6146102a3575b600080fd5b34801561013b57600080fd5b506101636004803603602081101561015257600080fd5b50356001600160e01b031916610881565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610a12565b005b34801561019a57600080fd5b5061025e600480360360a08110156101b157600080fd5b810190602081018135600160201b8111156101cb57600080fd5b8201836020820111156101dd57600080fd5b803590602001918460018302840111600160201b831117156101fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401359360408101358216935060600135169050610a53565b60408051918252519081900360200190f35b34801561027c57600080fd5b5061018c6004803603602081101561029357600080fd5b50356001600160a01b0316610b42565b3480156102af57600080fd5b5061018c610ba3565b3480156102c457600080fd5b5061018c600480360360408110156102db57600080fd5b5080359060200135610bfe565b3480156102f457600080fd5b5061025e6004803603602081101561030b57600080fd5b5035610c1a565b34801561031e57600080fd5b5061025e6004803603604081101561033557600080fd5b810190602081018135600160201b81111561034f57600080fd5b82018360208201111561036157600080fd5b803590602001918460018302840111600160201b8311171561038257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c2c915050565b61018c600480360360808110156103db57600080fd5b810190602081018135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91935091506001600160a01b038135169060208101359060400135610d9e565b34801561045457600080fd5b5061025e610de9565b34801561046957600080fd5b5061025e610df0565b34801561047e57600080fd5b50610487610df6565b604080516001600160a01b039092168252519081900360200190f35b3480156104af57600080fd5b50610163610e05565b3480156104c457600080fd5b50610163600480360360208110156104db57600080fd5b810190602081018135600160201b8111156104f557600080fd5b82018360208201111561050757600080fd5b803590602001918460018302840111600160201b8311171561052857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e16945050505050565b61018c6004803603604081101561057f57600080fd5b810190602081018135600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b919350915035610e2b565b3480156105e357600080fd5b50610163600480360360208110156105fa57600080fd5b810190602081018135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcf945050505050565b34801561069457600080fd5b5061025e611069565b3480156106a957600080fd5b5061018c600480360360208110156106c057600080fd5b503561106f565b3480156106d357600080fd5b5061018c600480360360208110156106ea57600080fd5b50356001600160a01b03166110a1565b34801561070657600080fd5b5061025e6004803603606081101561071d57600080fd5b810190602081018135600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356110bb565b61018c600480360360c08110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460018302840111600160201b8311171561081c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135936040810135935060608101358216925060800135166110d3565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000906001600160e01b0319838116911614806109c05750604080517472656e657728737472696e672c75696e743235362960581b815290519081900360150181209080602861186a8239604080519182900360280182206e636f6d6d697428627974657333322960881b8352905191829003600f01822090925090806026611892823960260190506040518091039020604051808070617661696c61626c6528737472696e672960781b8152506011019050604051809103902060405180807f72656e74507269636528737472696e672c75696e7432353629000000000000008152506019019050604051809103902018181818186001600160e01b031916826001600160e01b031916145b80610a0c5750604051808061182a60409139604080519182900301812091508060426118b8823960420190506040518091039020186001600160e01b031916826001600160e01b031916145b92915050565b610a1a610e05565b610a2357600080fd5b6040513390303180156108fc02916000818181858888f19350505050158015610a50573d6000803e3d6000fd5b50565b845160208601206000906001600160a01b038416158015610a7b57506001600160a01b038316155b15610acb57604080516020808201939093526bffffffffffffffffffffffff19606089901b1681830152605480820188905282518083039091018152607490910190915280519101209050610b39565b6001600160a01b038416610ade57600080fd5b604080516020808201939093526bffffffffffffffffffffffff19606089811b82168385015287811b8216605484015286901b166068820152607c80820188905282518083039091018152609c909101909152805191012090505b95945050505050565b610b4a610e05565b610b5357600080fd5b600280546001600160a01b0319166001600160a01b0383811691909117918290556040519116907ff261845a790fe29bbd6631e2ca4a5bdc83e6eed7c3271d9590d97287e00e912390600090a250565b610bab610e05565b610bb457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c06610e05565b610c0f57600080fd5b600391909155600455565b60056020526000908152604090205481565b815160208084019190912060025460015460408051636b727d4360e11b81526004810185905290516000956001600160a01b03948516946350e9a715948a9491169263d6e4fa8692602480840193919291829003018186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d6020811015610cbb57600080fd5b50516040516001600160e01b031960e085901b168152602481018290526044810188905260606004820190815283516064830152835189928291608490910190602087019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b5051949350505050565b610de285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250889350879250869150806110d3565b5050505050565b6224ea0081565b60035481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60006003610e2383611646565b101592915050565b6000610e6e84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610c2c915050565b905080341015610e7d57600080fd5b60008484604051808383808284376040805193909101839003832060015463c475abff60e01b855260048501829052602485018b90529151909750600096506001600160a01b03909116945063c475abff93506044808401936020935082900301818787803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051905034831015610f565760405133903485900380156108fc02916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b505b817f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae8787868560405180806020018481526020018381526020018281038252868682818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a2505050505050565b80516020820120600090610fe283610e16565b80156110625750600154604080516312dc929d60e31b81526004810184905290516001600160a01b03909216916396e494e891602480820192602092909190829003018186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b50515b9392505050565b60045481565b6004546000828152600560205260409020544291011061108e57600080fd5b6000908152600560205260409020429055565b6110a9610e05565b6110b257600080fd5b610a508161172e565b60006110cb848484600080610a53565b949350505050565b60006110e28787868686610a53565b905060006110f188878461179c565b885160208a01209091508060006001600160a01b038716156114ac5760015460408051633f2891eb60e21b815260048101859052306024820152604481018c905290516001600160a01b039092169163fca247ac916064808201926020929091908290030181600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505160015460408051630ddf7fcb60e41b815290519293506000926001600160a01b039092169163ddf7fcb091600480820192602092909190829003018186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d602081101561120957600080fd5b50516040805160208181019390935280820187905281518082038301815260608201808452815191850191909120600154633f15457f60e01b90925292519294506001600160a01b031692633f15457f92606480840193829003018186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b505160408051630c4b7b8560e11b8152600481018490526001600160a01b038b8116602483015291519190921691631896f70a91604480830192600092919082900301818387803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506001600160a01b0387161561139257876001600160a01b031663d5fa2b0082896040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050505b60015460408051630a3b53db60e21b8152600481018690526001600160a01b038e81166024830152915191909216916328ed4f6c91604480830192600092919082900301818387803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd308d866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505061154c565b6001600160a01b038616156114c057600080fd5b60015460408051633f2891eb60e21b8152600481018590526001600160a01b038d81166024830152604482018d90529151919092169163fca247ac9160648083019260209291908290030181600087803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b505190505b896001600160a01b0316837fca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f8d87856040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156115c45781810151838201526020016115ac565b50505050905090810190601f1680156115f15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3833411156116395760405133903486900380156108fc02916000818181858888f19350505050158015611637573d6000803e3d6000fd5b505b5050505050505050505050565b8051600090819081905b8082101561172557600085838151811061166657fe5b01602001516001600160f81b0319169050600160ff1b81101561168e57600183019250611719565b600760fd1b6001600160f81b0319821610156116af57600283019250611719565b600f60fc1b6001600160f81b0319821610156116d057600383019250611719565b601f60fb1b6001600160f81b0319821610156116f157600483019250611719565b603f60fa1b6001600160f81b03198216101561171257600583019250611719565b6006830192505b50600190920191611650565b50909392505050565b6001600160a01b03811661174157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600354600082815260056020526040812054909142910111156117be57600080fd5b600454600083815260056020526040902054429101116117dd57600080fd5b6117e684610fcf565b6117ef57600080fd5b600082815260056020526040812081905561180a8585610c2c565b90506224ea0084101561181c57600080fd5b803410156110cb57600080fdfe6d616b65436f6d6d69746d656e7457697468436f6e66696728737472696e672c616464726573732c627974657333322c616464726573732c6164647265737329726567697374657228737472696e672c616464726573732c75696e743235362c62797465733332296d616b65436f6d6d69746d656e7428737472696e672c616464726573732c6279746573333229726567697374657257697468436f6e66696728737472696e672c616464726573732c75696e743235362c627974657333322c616464726573732c6164647265737329a265627a7a72315820dbcd3913c2076b23152296f549f9d7284be303cc004736992b455428cb03c12664736f6c634300050c0032", + "deployedBytecode": "0x60806040526004361061012a5760003560e01c80638d839ffe116100ab578063aeb8ce9b1161006f578063aeb8ce9b146105d7578063ce1e09c014610688578063f14fcbc81461069d578063f2fde38b146106c7578063f49826be146106fa578063f7a16963146107b95761012a565b80638d839ffe1461045d5780638da5cb5b146104725780638f32d59b146104a35780639791c097146104b8578063acf1a841146105695761012a565b80637e324479116100f25780637e324479146102b8578063839df945146102e857806383e7f6ff1461031257806385f6d155146103c55780638a95b09f146104485761012a565b806301ffc9a71461012f5780633ccfd60b146101775780633d86c52f1461018e578063530e784f14610270578063715018a6146102a3575b600080fd5b34801561013b57600080fd5b506101636004803603602081101561015257600080fd5b50356001600160e01b031916610881565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610a12565b005b34801561019a57600080fd5b5061025e600480360360a08110156101b157600080fd5b810190602081018135600160201b8111156101cb57600080fd5b8201836020820111156101dd57600080fd5b803590602001918460018302840111600160201b831117156101fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401359360408101358216935060600135169050610a53565b60408051918252519081900360200190f35b34801561027c57600080fd5b5061018c6004803603602081101561029357600080fd5b50356001600160a01b0316610b42565b3480156102af57600080fd5b5061018c610ba3565b3480156102c457600080fd5b5061018c600480360360408110156102db57600080fd5b5080359060200135610bfe565b3480156102f457600080fd5b5061025e6004803603602081101561030b57600080fd5b5035610c1a565b34801561031e57600080fd5b5061025e6004803603604081101561033557600080fd5b810190602081018135600160201b81111561034f57600080fd5b82018360208201111561036157600080fd5b803590602001918460018302840111600160201b8311171561038257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c2c915050565b61018c600480360360808110156103db57600080fd5b810190602081018135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91935091506001600160a01b038135169060208101359060400135610d9e565b34801561045457600080fd5b5061025e610de9565b34801561046957600080fd5b5061025e610df0565b34801561047e57600080fd5b50610487610df6565b604080516001600160a01b039092168252519081900360200190f35b3480156104af57600080fd5b50610163610e05565b3480156104c457600080fd5b50610163600480360360208110156104db57600080fd5b810190602081018135600160201b8111156104f557600080fd5b82018360208201111561050757600080fd5b803590602001918460018302840111600160201b8311171561052857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e16945050505050565b61018c6004803603604081101561057f57600080fd5b810190602081018135600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b919350915035610e2b565b3480156105e357600080fd5b50610163600480360360208110156105fa57600080fd5b810190602081018135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcf945050505050565b34801561069457600080fd5b5061025e611069565b3480156106a957600080fd5b5061018c600480360360208110156106c057600080fd5b503561106f565b3480156106d357600080fd5b5061018c600480360360208110156106ea57600080fd5b50356001600160a01b03166110a1565b34801561070657600080fd5b5061025e6004803603606081101561071d57600080fd5b810190602081018135600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356110bb565b61018c600480360360c08110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460018302840111600160201b8311171561081c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135936040810135935060608101358216925060800135166110d3565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000906001600160e01b0319838116911614806109c05750604080517472656e657728737472696e672c75696e743235362960581b815290519081900360150181209080602861186a8239604080519182900360280182206e636f6d6d697428627974657333322960881b8352905191829003600f01822090925090806026611892823960260190506040518091039020604051808070617661696c61626c6528737472696e672960781b8152506011019050604051809103902060405180807f72656e74507269636528737472696e672c75696e7432353629000000000000008152506019019050604051809103902018181818186001600160e01b031916826001600160e01b031916145b80610a0c5750604051808061182a60409139604080519182900301812091508060426118b8823960420190506040518091039020186001600160e01b031916826001600160e01b031916145b92915050565b610a1a610e05565b610a2357600080fd5b6040513390303180156108fc02916000818181858888f19350505050158015610a50573d6000803e3d6000fd5b50565b845160208601206000906001600160a01b038416158015610a7b57506001600160a01b038316155b15610acb57604080516020808201939093526bffffffffffffffffffffffff19606089901b1681830152605480820188905282518083039091018152607490910190915280519101209050610b39565b6001600160a01b038416610ade57600080fd5b604080516020808201939093526bffffffffffffffffffffffff19606089811b82168385015287811b8216605484015286901b166068820152607c80820188905282518083039091018152609c909101909152805191012090505b95945050505050565b610b4a610e05565b610b5357600080fd5b600280546001600160a01b0319166001600160a01b0383811691909117918290556040519116907ff261845a790fe29bbd6631e2ca4a5bdc83e6eed7c3271d9590d97287e00e912390600090a250565b610bab610e05565b610bb457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c06610e05565b610c0f57600080fd5b600391909155600455565b60056020526000908152604090205481565b815160208084019190912060025460015460408051636b727d4360e11b81526004810185905290516000956001600160a01b03948516946350e9a715948a9491169263d6e4fa8692602480840193919291829003018186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d6020811015610cbb57600080fd5b50516040516001600160e01b031960e085901b168152602481018290526044810188905260606004820190815283516064830152835189928291608490910190602087019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b5051949350505050565b610de285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250889350879250869150806110d3565b5050505050565b6224ea0081565b60035481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60006003610e2383611646565b101592915050565b6000610e6e84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610c2c915050565b905080341015610e7d57600080fd5b60008484604051808383808284376040805193909101839003832060015463c475abff60e01b855260048501829052602485018b90529151909750600096506001600160a01b03909116945063c475abff93506044808401936020935082900301818787803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051905034831015610f565760405133903485900380156108fc02916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b505b817f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae8787868560405180806020018481526020018381526020018281038252868682818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a2505050505050565b80516020820120600090610fe283610e16565b80156110625750600154604080516312dc929d60e31b81526004810184905290516001600160a01b03909216916396e494e891602480820192602092909190829003018186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b50515b9392505050565b60045481565b6004546000828152600560205260409020544291011061108e57600080fd5b6000908152600560205260409020429055565b6110a9610e05565b6110b257600080fd5b610a508161172e565b60006110cb848484600080610a53565b949350505050565b60006110e28787868686610a53565b905060006110f188878461179c565b885160208a01209091508060006001600160a01b038716156114ac5760015460408051633f2891eb60e21b815260048101859052306024820152604481018c905290516001600160a01b039092169163fca247ac916064808201926020929091908290030181600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505160015460408051630ddf7fcb60e41b815290519293506000926001600160a01b039092169163ddf7fcb091600480820192602092909190829003018186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d602081101561120957600080fd5b50516040805160208181019390935280820187905281518082038301815260608201808452815191850191909120600154633f15457f60e01b90925292519294506001600160a01b031692633f15457f92606480840193829003018186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b505160408051630c4b7b8560e11b8152600481018490526001600160a01b038b8116602483015291519190921691631896f70a91604480830192600092919082900301818387803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506001600160a01b0387161561139257876001600160a01b031663d5fa2b0082896040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050505b60015460408051630a3b53db60e21b8152600481018690526001600160a01b038e81166024830152915191909216916328ed4f6c91604480830192600092919082900301818387803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd308d866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505061154c565b6001600160a01b038616156114c057600080fd5b60015460408051633f2891eb60e21b8152600481018590526001600160a01b038d81166024830152604482018d90529151919092169163fca247ac9160648083019260209291908290030181600087803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b505190505b896001600160a01b0316837fca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f8d87856040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156115c45781810151838201526020016115ac565b50505050905090810190601f1680156115f15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3833411156116395760405133903486900380156108fc02916000818181858888f19350505050158015611637573d6000803e3d6000fd5b505b5050505050505050505050565b8051600090819081905b8082101561172557600085838151811061166657fe5b01602001516001600160f81b0319169050600160ff1b81101561168e57600183019250611719565b600760fd1b6001600160f81b0319821610156116af57600283019250611719565b600f60fc1b6001600160f81b0319821610156116d057600383019250611719565b601f60fb1b6001600160f81b0319821610156116f157600483019250611719565b603f60fa1b6001600160f81b03198216101561171257600583019250611719565b6006830192505b50600190920191611650565b50909392505050565b6001600160a01b03811661174157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600354600082815260056020526040812054909142910111156117be57600080fd5b600454600083815260056020526040902054429101116117dd57600080fd5b6117e684610fcf565b6117ef57600080fd5b600082815260056020526040812081905561180a8585610c2c565b90506224ea0084101561181c57600080fd5b803410156110cb57600080fdfe6d616b65436f6d6d69746d656e7457697468436f6e66696728737472696e672c616464726573732c627974657333322c616464726573732c6164647265737329726567697374657228737472696e672c616464726573732c75696e743235362c62797465733332296d616b65436f6d6d69746d656e7428737472696e672c616464726573732c6279746573333229726567697374657257697468436f6e66696728737472696e672c616464726573732c75696e743235362c627974657333322c616464726573732c6164647265737329a265627a7a72315820dbcd3913c2076b23152296f549f9d7284be303cc004736992b455428cb03c12664736f6c634300050c0032", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/MintingManagerForwarder.json b/artifacts/MintingManagerForwarder.json index e45e29f9..50c5aa89 100644 --- a/artifacts/MintingManagerForwarder.json +++ b/artifacts/MintingManagerForwarder.json @@ -126,8 +126,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610bdd380380610bdd83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610b4a806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631bf7e13e146100465780636ccbae5f1461006f578063a42474001461009d575b600080fd5b610059610054366004610771565b6100c0565b6040516100669190610860565b60405180910390f35b61008f61007d366004610873565b60009081526001602052604090205490565b604051908152602001610066565b6100b06100ab366004610771565b6101de565b6040519015158152602001610066565b606060005a90506100d28585856101de565b6101365760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e61676572466f727761726465723a205349474e415455604482015269149157d253959053125160b21b60648201526084015b60405180910390fd5b6101d361014660208701876108a8565b6000546001600160a01b031660408801358461016560608b018b6108c3565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061023d92505050565b9150505b9392505050565b60006102356101ec8561097a565b600054604080516020601f88018190048102820181019092528681526001600160a01b039092169190879087908190840183828082843760009201919091525061031e92505050565b949350505050565b606061024885610467565b600080876001600160a01b0316866102628b8a8989610494565b60405161026f9190610a3b565b60006040518083038160008787f1925050503d80600081146102ad576040519150601f19603f3d011682016040523d82523d6000602084013e6102b2565b606091505b5090925090506102c3603f87610a57565b5a116102d1576102d1610a79565b61031182826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506104c4565b9998505050505050505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015610365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103899190610a8f565b905060006104378660600151805190602001208688602001516040516020016103d79392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561045d5750855161045d906001600160a01b031682866104fd565b9695505050505050565b60008181526001602081905260409091205461048291610aa8565b60009182526001602052604090912055565b60608285856040516020016104ab93929190610acf565b6040516020818303038152906040529050949350505050565b606083156104d35750816101d7565b8251156104e35782518084602001fd5b8160405162461bcd60e51b815260040161012d9190610860565b600080600061050c858561063f565b9092509050600081600481111561052557610525610b0e565b1480156105435750856001600160a01b0316826001600160a01b0316145b15610553576001925050506101d7565b600080876001600160a01b0316631626ba7e60e01b888860405160240161057b929190610b24565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516105b99190610a3b565b600060405180830381855afa9150503d80600081146105f4576040519150601f19603f3d011682016040523d82523d6000602084013e6105f9565b606091505b509150915081801561060c575080516020145b801561063357508051630b135d3f60e11b906106319083016020908101908401610a8f565b145b98975050505050505050565b60008082516041036106755760208301516040840151606085015160001a61066987828585610684565b9450945050505061067d565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156106bb5750600090506003610768565b8460ff16601b141580156106d357508460ff16601c14155b156106e45750600090506004610768565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610738573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661076157600060019250925050610768565b9150600090505b94509492505050565b60008060006040848603121561078657600080fd5b833567ffffffffffffffff8082111561079e57600080fd5b90850190608082880312156107b257600080fd5b909350602085013590808211156107c857600080fd5b818601915086601f8301126107dc57600080fd5b8135818111156107eb57600080fd5b8760208285010111156107fd57600080fd5b6020830194508093505050509250925092565b60005b8381101561082b578181015183820152602001610813565b50506000910152565b6000815180845261084c816020860160208601610810565b601f01601f19169290920160200192915050565b6020815260006101d76020830184610834565b60006020828403121561088557600080fd5b5035919050565b80356001600160a01b03811681146108a357600080fd5b919050565b6000602082840312156108ba57600080fd5b6101d78261088c565b6000808335601e198436030181126108da57600080fd5b83018035915067ffffffffffffffff8211156108f557600080fd5b60200191503681900382131561067d57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156109435761094361090a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156109725761097261090a565b604052919050565b60006080823603121561098c57600080fd5b610994610920565b61099d8361088c565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff808211156109ce57600080fd5b9085019036601f8301126109e157600080fd5b8135818111156109f3576109f361090a565b610a05601f8201601f19168501610949565b91508082523684828501011115610a1b57600080fd5b808484018584013760009082019093019290925250606082015292915050565b60008251610a4d818460208701610810565b9190910192915050565b600082610a7457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b600060208284031215610aa157600080fd5b5051919050565b80820180821115610ac957634e487b7160e01b600052601160045260246000fd5b92915050565b60008451610ae1818460208901610810565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610235604083018461083456fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631bf7e13e146100465780636ccbae5f1461006f578063a42474001461009d575b600080fd5b610059610054366004610771565b6100c0565b6040516100669190610860565b60405180910390f35b61008f61007d366004610873565b60009081526001602052604090205490565b604051908152602001610066565b6100b06100ab366004610771565b6101de565b6040519015158152602001610066565b606060005a90506100d28585856101de565b6101365760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e61676572466f727761726465723a205349474e415455604482015269149157d253959053125160b21b60648201526084015b60405180910390fd5b6101d361014660208701876108a8565b6000546001600160a01b031660408801358461016560608b018b6108c3565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061023d92505050565b9150505b9392505050565b60006102356101ec8561097a565b600054604080516020601f88018190048102820181019092528681526001600160a01b039092169190879087908190840183828082843760009201919091525061031e92505050565b949350505050565b606061024885610467565b600080876001600160a01b0316866102628b8a8989610494565b60405161026f9190610a3b565b60006040518083038160008787f1925050503d80600081146102ad576040519150601f19603f3d011682016040523d82523d6000602084013e6102b2565b606091505b5090925090506102c3603f87610a57565b5a116102d1576102d1610a79565b61031182826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506104c4565b9998505050505050505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015610365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103899190610a8f565b905060006104378660600151805190602001208688602001516040516020016103d79392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561045d5750855161045d906001600160a01b031682866104fd565b9695505050505050565b60008181526001602081905260409091205461048291610aa8565b60009182526001602052604090912055565b60608285856040516020016104ab93929190610acf565b6040516020818303038152906040529050949350505050565b606083156104d35750816101d7565b8251156104e35782518084602001fd5b8160405162461bcd60e51b815260040161012d9190610860565b600080600061050c858561063f565b9092509050600081600481111561052557610525610b0e565b1480156105435750856001600160a01b0316826001600160a01b0316145b15610553576001925050506101d7565b600080876001600160a01b0316631626ba7e60e01b888860405160240161057b929190610b24565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516105b99190610a3b565b600060405180830381855afa9150503d80600081146105f4576040519150601f19603f3d011682016040523d82523d6000602084013e6105f9565b606091505b509150915081801561060c575080516020145b801561063357508051630b135d3f60e11b906106319083016020908101908401610a8f565b145b98975050505050505050565b60008082516041036106755760208301516040840151606085015160001a61066987828585610684565b9450945050505061067d565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156106bb5750600090506003610768565b8460ff16601b141580156106d357508460ff16601c14155b156106e45750600090506004610768565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610738573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661076157600060019250925050610768565b9150600090505b94509492505050565b60008060006040848603121561078657600080fd5b833567ffffffffffffffff8082111561079e57600080fd5b90850190608082880312156107b257600080fd5b909350602085013590808211156107c857600080fd5b818601915086601f8301126107dc57600080fd5b8135818111156107eb57600080fd5b8760208285010111156107fd57600080fd5b6020830194508093505050509250925092565b60005b8381101561082b578181015183820152602001610813565b50506000910152565b6000815180845261084c816020860160208601610810565b601f01601f19169290920160200192915050565b6020815260006101d76020830184610834565b60006020828403121561088557600080fd5b5035919050565b80356001600160a01b03811681146108a357600080fd5b919050565b6000602082840312156108ba57600080fd5b6101d78261088c565b6000808335601e198436030181126108da57600080fd5b83018035915067ffffffffffffffff8211156108f557600080fd5b60200191503681900382131561067d57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156109435761094361090a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156109725761097261090a565b604052919050565b60006080823603121561098c57600080fd5b610994610920565b61099d8361088c565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff808211156109ce57600080fd5b9085019036601f8301126109e157600080fd5b8135818111156109f3576109f361090a565b610a05601f8201601f19168501610949565b91508082523684828501011115610a1b57600080fd5b808484018584013760009082019093019290925250606082015292915050565b60008251610a4d818460208701610810565b9190910192915050565b600082610a7457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b600060208284031215610aa157600080fd5b5051919050565b80820180821115610ac957634e487b7160e01b600052601160045260246000fd5b92915050565b60008451610ae1818460208901610810565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610235604083018461083456fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b50604051610b82380380610b8283398101604081905261002e91610052565b5f80546001600160a01b0319166001600160a01b039290921691909117905561007f565b5f60208284031215610062575f80fd5b81516001600160a01b0381168114610078575f80fd5b9392505050565b610af68061008c5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80631bf7e13e146100435780636ccbae5f1461006c578063a424740014610099575b5f80fd5b610056610051366004610749565b6100bc565b604051610063919061082c565b60405180910390f35b61008b61007a36600461083e565b5f9081526001602052604090205490565b604051908152602001610063565b6100ac6100a7366004610749565b6101d6565b6040519015158152602001610063565b60605f5a90506100cd8585856101d6565b6101315760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e61676572466f727761726465723a205349474e415455604482015269149157d253959053125160b21b60648201526084015b60405180910390fd5b6101cb6101416020870187610870565b5f546001600160a01b031660408801358461015f60608b018b610889565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061023292505050565b9150505b9392505050565b5f61022a6101e38561093a565b5f54604080516020601f88018190048102820181019092528681526001600160a01b03909216919087908790819084018382808284375f9201919091525061030e92505050565b949350505050565b606061023d85610453565b5f80876001600160a01b0316866102568b8a898961047e565b60405161026391906109f5565b5f604051808303815f8787f1925050503d805f811461029d576040519150601f19603f3d011682016040523d82523d5f602084013e6102a2565b606091505b5090925090506102b3603f87610a10565b5a116102c1576102c1610a2f565b61030182826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506104ae565b9998505050505050505050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610352573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103769190610a43565b90505f6104238660600151805190602001208688602001516040516020016103c39392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561044957508551610449906001600160a01b031682866104e7565b9695505050505050565b5f8181526001602081905260409091205461046d91610a5a565b5f9182526001602052604090912055565b606082858560405160200161049593929190610a7f565b6040516020818303038152906040529050949350505050565b606083156104bd5750816101cf565b8251156104cd5782518084602001fd5b8160405162461bcd60e51b8152600401610128919061082c565b5f805f6104f48585610622565b90925090505f81600481111561050c5761050c610abd565b14801561052a5750856001600160a01b0316826001600160a01b0316145b1561053a576001925050506101cf565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401610561929190610ad1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161059f91906109f5565b5f60405180830381855afa9150503d805f81146105d7576040519150601f19603f3d011682016040523d82523d5f602084013e6105dc565b606091505b50915091508180156105ef575080516020145b801561061657508051630b135d3f60e11b906106149083016020908101908401610a43565b145b98975050505050505050565b5f808251604103610656576020830151604084015160608501515f1a61064a87828585610664565b9450945050505061065d565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561069957505f90506003610740565b8460ff16601b141580156106b157508460ff16601c14155b156106c157505f90506004610740565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610712573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661073a575f60019250925050610740565b91505f90505b94509492505050565b5f805f6040848603121561075b575f80fd5b833567ffffffffffffffff80821115610772575f80fd5b9085019060808288031215610785575f80fd5b9093506020850135908082111561079a575f80fd5b818601915086601f8301126107ad575f80fd5b8135818111156107bb575f80fd5b8760208285010111156107cc575f80fd5b6020830194508093505050509250925092565b5f5b838110156107f95781810151838201526020016107e1565b50505f910152565b5f81518084526108188160208601602086016107df565b601f01601f19169290920160200192915050565b602081525f6101cf6020830184610801565b5f6020828403121561084e575f80fd5b5035919050565b80356001600160a01b038116811461086b575f80fd5b919050565b5f60208284031215610880575f80fd5b6101cf82610855565b5f808335601e1984360301811261089e575f80fd5b83018035915067ffffffffffffffff8211156108b8575f80fd5b60200191503681900382131561065d575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715610903576109036108cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610932576109326108cc565b604052919050565b5f6080823603121561094a575f80fd5b6109526108e0565b61095b83610855565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561098b575f80fd5b9085019036601f83011261099d575f80fd5b8135818111156109af576109af6108cc565b6109c1601f8201601f19168501610909565b915080825236848285010111156109d6575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8251610a068184602087016107df565b9190910192915050565b5f82610a2a57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215610a53575f80fd5b5051919050565b80820180821115610a7957634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8451610a908184602089016107df565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f61022a604083018461080156fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c80631bf7e13e146100435780636ccbae5f1461006c578063a424740014610099575b5f80fd5b610056610051366004610749565b6100bc565b604051610063919061082c565b60405180910390f35b61008b61007a36600461083e565b5f9081526001602052604090205490565b604051908152602001610063565b6100ac6100a7366004610749565b6101d6565b6040519015158152602001610063565b60605f5a90506100cd8585856101d6565b6101315760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e61676572466f727761726465723a205349474e415455604482015269149157d253959053125160b21b60648201526084015b60405180910390fd5b6101cb6101416020870187610870565b5f546001600160a01b031660408801358461015f60608b018b610889565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061023292505050565b9150505b9392505050565b5f61022a6101e38561093a565b5f54604080516020601f88018190048102820181019092528681526001600160a01b03909216919087908790819084018382808284375f9201919091525061030e92505050565b949350505050565b606061023d85610453565b5f80876001600160a01b0316866102568b8a898961047e565b60405161026391906109f5565b5f604051808303815f8787f1925050503d805f811461029d576040519150601f19603f3d011682016040523d82523d5f602084013e6102a2565b606091505b5090925090506102b3603f87610a10565b5a116102c1576102c1610a2f565b61030182826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506104ae565b9998505050505050505050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610352573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103769190610a43565b90505f6104238660600151805190602001208688602001516040516020016103c39392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561044957508551610449906001600160a01b031682866104e7565b9695505050505050565b5f8181526001602081905260409091205461046d91610a5a565b5f9182526001602052604090912055565b606082858560405160200161049593929190610a7f565b6040516020818303038152906040529050949350505050565b606083156104bd5750816101cf565b8251156104cd5782518084602001fd5b8160405162461bcd60e51b8152600401610128919061082c565b5f805f6104f48585610622565b90925090505f81600481111561050c5761050c610abd565b14801561052a5750856001600160a01b0316826001600160a01b0316145b1561053a576001925050506101cf565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401610561929190610ad1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161059f91906109f5565b5f60405180830381855afa9150503d805f81146105d7576040519150601f19603f3d011682016040523d82523d5f602084013e6105dc565b606091505b50915091508180156105ef575080516020145b801561061657508051630b135d3f60e11b906106149083016020908101908401610a43565b145b98975050505050505050565b5f808251604103610656576020830151604084015160608501515f1a61064a87828585610664565b9450945050505061065d565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561069957505f90506003610740565b8460ff16601b141580156106b157508460ff16601c14155b156106c157505f90506004610740565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610712573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661073a575f60019250925050610740565b91505f90505b94509492505050565b5f805f6040848603121561075b575f80fd5b833567ffffffffffffffff80821115610772575f80fd5b9085019060808288031215610785575f80fd5b9093506020850135908082111561079a575f80fd5b818601915086601f8301126107ad575f80fd5b8135818111156107bb575f80fd5b8760208285010111156107cc575f80fd5b6020830194508093505050509250925092565b5f5b838110156107f95781810151838201526020016107e1565b50505f910152565b5f81518084526108188160208601602086016107df565b601f01601f19169290920160200192915050565b602081525f6101cf6020830184610801565b5f6020828403121561084e575f80fd5b5035919050565b80356001600160a01b038116811461086b575f80fd5b919050565b5f60208284031215610880575f80fd5b6101cf82610855565b5f808335601e1984360301811261089e575f80fd5b83018035915067ffffffffffffffff8211156108b8575f80fd5b60200191503681900382131561065d575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715610903576109036108cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610932576109326108cc565b604052919050565b5f6080823603121561094a575f80fd5b6109526108e0565b61095b83610855565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561098b575f80fd5b9085019036601f83011261099d575f80fd5b8135818111156109af576109af6108cc565b6109c1601f8201601f19168501610909565b915080825236848285010111156109d6575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8251610a068184602087016107df565b9190910192915050565b5f82610a2a57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215610a53575f80fd5b5051919050565b80820180821115610a7957634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8451610a908184602089016107df565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f61022a604083018461080156fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/MultiSend.json b/artifacts/MultiSend.json index 03f45b63..c7741d52 100644 --- a/artifacts/MultiSend.json +++ b/artifacts/MultiSend.json @@ -20,8 +20,8 @@ "type": "constructor" } ], - "bytecode": "0x608060405260405161029338038061029383398101604081905261002291610184565b60005b82518110156100ac5782818151811061004057610040610255565b60200260200101516001600160a01b03166108fc83838151811061006657610066610255565b60200260200101519081150290604051600060405180830381858888f19350505050158015610099573d6000803e3d6000fd5b50806100a48161026b565b915050610025565b5033ff5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156100ee576100ee6100b0565b604052919050565b60006001600160401b0382111561010f5761010f6100b0565b5060051b60200190565b600082601f83011261012a57600080fd5b8151602061013f61013a836100f6565b6100c6565b82815260059290921b8401810191818101908684111561015e57600080fd5b8286015b848110156101795780518352918301918301610162565b509695505050505050565b6000806040838503121561019757600080fd5b82516001600160401b03808211156101ae57600080fd5b818501915085601f8301126101c257600080fd5b815160206101d261013a836100f6565b82815260059290921b840181019181810190898411156101f157600080fd5b948201945b838610156102255785516001600160a01b03811681146102165760008081fd5b825294820194908201906101f6565b9188015191965090935050508082111561023e57600080fd5b5061024b85828601610119565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028b57634e487b7160e01b600052601160045260246000fd5b506001019056fe", - "deployedBytecode": "0x6080604052600080fdfea164736f6c6343000811000a", + "bytecode": "0x608060405260405161025238038061025283398101604081905261002291610174565b5f5b825181101561009e5782818151811061003f5761003f61023d565b60200260200101516001600160a01b03166108fc8383815181106100655761006561023d565b602002602001015190811502906040515f60405180830381858888f19350505050158015610095573d5f803e3d5ffd5b50600101610024565b5033ff5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156100de576100de6100a2565b604052919050565b5f6001600160401b038211156100fe576100fe6100a2565b5060051b60200190565b5f82601f830112610117575f80fd5b8151602061012c610127836100e6565b6100b6565b8083825260208201915060208460051b87010193508684111561014d575f80fd5b602086015b848110156101695780518352918301918301610152565b509695505050505050565b5f8060408385031215610185575f80fd5b82516001600160401b038082111561019b575f80fd5b818501915085601f8301126101ae575f80fd5b815160206101be610127836100e6565b82815260059290921b840181019181810190898411156101dc575f80fd5b948201945b8386101561020e5785516001600160a01b03811681146101ff575f80fd5b825294820194908201906101e1565b91880151919650909350505080821115610226575f80fd5b5061023385828601610108565b9150509250929050565b634e487b7160e01b5f52603260045260245ffdfe", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/NameWrapper.json b/artifacts/NameWrapper.json index 4185f49a..aacf3fe3 100644 --- a/artifacts/NameWrapper.json +++ b/artifacts/NameWrapper.json @@ -1457,8 +1457,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162005d2338038062005d238339810160408190526200003491620002f8565b823362000041816200028f565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526000906001600160a01b038416906302571be390602401602060405180830381865afa158015620000a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cf91906200034c565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303816000875af11580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000373565b505050506001600160a01b0383811660805282811660a052600580546001600160a01b031916918316919091179055600163fffeffff60a01b03197fafa26c20e8b3d9a2853d642cfe1021dae26242ffedfac91c97aab212c1a4b93b8190557fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4955604080518082019091526001815260006020808301829052908052600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f89062000210908262000432565b506040805180820190915260058152626cae8d60e31b6020808301919091527f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae600052600690527ffb9e8e321b8a5ec48f12a7b41f22c6e595d761285c9eb19d8dda7c99edf1b54f9062000285908262000432565b50505050620004fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620002f557600080fd5b50565b6000806000606084860312156200030e57600080fd5b83516200031b81620002df565b60208501519093506200032e81620002df565b60408501519092506200034181620002df565b809150509250925092565b6000602082840312156200035f57600080fd5b81516200036c81620002df565b9392505050565b6000602082840312156200038657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003b857607f821691505b602082108103620003d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042d57600081815260208120601f850160051c81016020861015620004085750805b601f850160051c820191505b81811015620004295782815560010162000414565b5050505b505050565b81516001600160401b038111156200044e576200044e6200038d565b62000466816200045f8454620003a3565b84620003df565b602080601f8311600181146200049e5760008415620004855750858301515b600019600386901b1c1916600185901b17855562000429565b600085815260208120601f198616915b82811015620004cf57888601518255948401946001909101908401620004ae565b5085821015620004ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516157186200060b6000396000818161047301528181610aee01528181610b9101528181610c20015281816118c60152818161195c01528181611a0a01528181611adc01528181611b4d01528181611bd201528181611de601528181611f2201528181612054015281816121ac0152818161223201526129700152600081816104c001528181610a7401528181610d6a01528181610ef901528181610faa015281816112bc01528181611fa7015281816120d9015281816122dd0152818161248f0152818161276001528181612ba901528181612c5701528181612d0c01528181612d8d01528181613298015281816133eb015281816136530152613bff01526157186000f3fe608060405234801561001057600080fd5b506004361061029f5760003560e01c80636352211e11610167578063c93ab3fd116100ce578063e985e9c511610087578063e985e9c5146106d4578063eb8ae530146106e7578063ed70554d146106fa578063f242432a1461071a578063f2fde38b1461072d578063fd0cd0d91461074057600080fd5b8063c93ab3fd14610652578063cf40882314610665578063d8c9921a14610678578063d9a50c121461068b578063da8c229e1461069e578063e0dba60f146106c157600080fd5b8063a22cb46511610120578063a22cb465146105e0578063a4014982146105f3578063adf4960a14610606578063b6bcad2614610619578063c475abff1461062c578063c658e0861461063f57600080fd5b80636352211e146105635780636e5d6ad214610576578063715018a6146105a15780638b4dfa75146105a95780638cf8b41e146105bc5780638da5cb5b146105cf57600080fd5b80631f4e15041161020b5780633f15457f116101c45780633f15457f146104bb578063402906fc146104e257806341415eab1461050a5780634e1273f41461051d578063530954671461053d5780635d3590d51461055057600080fd5b80631f4e15041461043557806320c38e2b1461044857806324c1af441461045b5780632b20e3971461046e5780632eb2c2d61461049557806333c69ea9146104a857600080fd5b80630e4cd7251161025d5780630e4cd725146103aa5780630e89341c146103bd57806314ab9038146103d0578063150b7a02146103e35780631534e1771461040f5780631896f70a1461042257600080fd5b8062fdd58e146102a45780630178fe3f146102ca57806301ffc9a71461031057806306fdde0314610333578063081812fc1461036a578063095ea7b314610395575b600080fd5b6102b76102b236600461444c565b610753565b6040519081526020015b60405180910390f35b6102dd6102d8366004614478565b610800565b604080516001600160a01b03909416845263ffffffff90921660208401526001600160401b0316908201526060016102c1565b61032361031e3660046144a7565b610830565b60405190151581526020016102c1565b61035d6040518060400160405280600b81526020016a2730b6b2abb930b83832b960a91b81525081565b6040516102c19190614514565b61037d610378366004614478565b610870565b6040516001600160a01b0390911681526020016102c1565b6103a86103a336600461444c565b6108b5565b005b6103236103b8366004614527565b6108fb565b61035d6103cb366004614478565b610975565b6103a86103de366004614573565b6109e7565b6103f66103f13660046145e7565b610ae1565b6040516001600160e01b031990911681526020016102c1565b6103a861041d366004614659565b610cc1565b6103a8610430366004614527565b610ceb565b60075461037d906001600160a01b031681565b61035d610456366004614478565b610da1565b6102b761046936600461474f565b610e3b565b61037d7f000000000000000000000000000000000000000000000000000000000000000081565b6103a86104a3366004614875565b611021565b6103a86104b6366004614922565b61125f565b61037d7f000000000000000000000000000000000000000000000000000000000000000081565b6104f56104f036600461497a565b611430565b60405163ffffffff90911681526020016102c1565b610323610518366004614527565b6114cd565b61053061052b36600461499d565b611506565b6040516102c19190614a9a565b60055461037d906001600160a01b031681565b6103a861055e366004614aad565b61162f565b61037d610571366004614478565b6116b0565b610589610584366004614aee565b6116bb565b6040516001600160401b0390911681526020016102c1565b6103a86117ee565b6103a86105b7366004614b23565b611802565b6105896105ca366004614b65565b611928565b6000546001600160a01b031661037d565b6103a86105ee366004614bed565b611ca4565b6102b7610601366004614c1b565b611d7a565b610323610614366004614c9b565b611ebb565b6103a8610627366004614659565b611ee0565b6102b761063a366004614cbe565b612138565b6102b761064d366004614ce0565b6123a2565b6103a8610660366004614d52565b61256a565b6103a8610673366004614dbd565b6126bd565b6103a8610686366004614df5565b612857565b610323610699366004614cbe565b612920565b6103236106ac366004614659565b60046020526000908152604090205460ff1681565b6103a86106cf366004614bed565b6129ff565b6103236106e2366004614e23565b612a67565b6103a86106f5366004614e51565b612a95565b6102b7610708366004614478565b60016020526000908152604090205481565b6103a8610728366004614eb8565b612e39565b6103a861073b366004614659565b612ee6565b61032361074e366004614478565b612f5c565b60006001600160a01b0383166107c45760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b60006107cf836116b0565b9050836001600160a01b0316816001600160a01b0316036107f45760019150506107fa565b60009150505b92915050565b60008181526001602052604090205460a081901c60c082901c610824838383613034565b90959094509092509050565b60006001600160e01b03198216631b05885b60e31b148061086157506001600160e01b03198216630a85bd0160e11b145b806107fa57506107fa8261306a565b60008061087c836116b0565b90506001600160a01b0381166108955750600092915050565b6000838152600360205260409020546001600160a01b03165b9392505050565b60006108c082610800565b50915050603f1960408216016108ec5760405163a2a7201360e01b8152600481018390526024016107bb565b6108f683836130ba565b505050565b600080808061090986610800565b925092509250846001600160a01b0316836001600160a01b0316148061093457506109348386612a67565b8061095857506001600160a01b03851661094d87610870565b6001600160a01b0316145b801561096b575061096982826131ca565b155b9695505050505050565b6005546040516303a24d0760e21b8152600481018390526060916001600160a01b031690630e89341c90602401600060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107fa9190810190614f20565b816109f281336114cd565b610a1357803360405163168ab55d60e31b81526004016107bb929190614f97565b8260106000610a2183610800565b5091505063ffffffff8282161615610a4f5760405163a2a7201360e01b8152600481018490526024016107bb565b604051630295720760e31b8152600481018790526001600160401b03861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b600060405180830381600087803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b50505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b2c5760405163032634a760e31b815260040160405180910390fd5b6000808080610b3d86880188614fae565b83516020850120939750919550935091508890808214610b7a576040516331970f3360e21b815260048101829052602481018390526044016107bb565b604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906328ed4f6c90610bc89085903090600401614f97565b600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b5050604051636b727d4360e11b8152600481018d9052600092506276a70091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6e4fa8690602401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190615015565b610c959190615044565b9050610ca887878761ffff1684886131fa565b50630a85bd0160e11b9c9b505050505050505050505050565b610cc961330b565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b81610cf681336114cd565b610d1757803360405163168ab55d60e31b81526004016107bb929190614f97565b8260086000610d2583610800565b5091505063ffffffff8282161615610d535760405163a2a7201360e01b8152600481018490526024016107bb565b604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90610aa79089908990600401614f97565b60066020526000908152604090208054610dba9061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054610de69061506b565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b505050505081565b600087610e4881336114cd565b610e6957803360405163168ab55d60e31b81526004016107bb929190614f97565b87516020890120610e7a8a82613365565b9250610e868a84613391565b610e9083866134cf565b610e9b8a848b613502565b50610ea88a8487876135cf565b9350610eb383613615565b610f68576040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015610f3d57600080fd5b505af1158015610f51573d6000803e3d6000fd5b50505050610f638a848b8b89896136ce565b611014565b6040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015610fee57600080fd5b505af1158015611002573d6000803e3d6000fd5b505050506110148a848b8b8989613705565b5050979650505050505050565b81518351146110835760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107bb565b6001600160a01b0384166110a95760405162461bcd60e51b81526004016107bb906150a5565b6001600160a01b0385163314806110c557506110c58533612a67565b61112c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107bb565b60005b83518110156111f257600084828151811061114c5761114c6150ea565b60200260200101519050600084838151811061116a5761116a6150ea565b60200260200101519050600080600061118285610800565b9250925092506111938583836137c9565b8360011480156111b457508a6001600160a01b0316836001600160a01b0316145b6111d05760405162461bcd60e51b81526004016107bb90615100565b6111dc858b8484613872565b5050505050806111eb9061514a565b905061112f565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611242929190615163565b60405180910390a46112583386868686866138b4565b5050505050565b600061126b8585613365565b905061127781846134cf565b6000808061128484610800565b919450925090506001600160a01b038316158061133357506040516302571be360e01b81526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113279190615191565b6001600160a01b031614155b1561135157604051635374b59960e01b815260040160405180910390fd5b60008061135d8a610800565b90935091508a90506113995761137386336114cd565b61139457853360405163168ab55d60e31b81526004016107bb929190614f97565b6113c4565b6113a38a336114cd565b6113c457893360405163168ab55d60e31b81526004016107bb929190614f97565b6113cf868984613a0f565b6113da878483613a4a565b9650620100008416158015906113fe57508363ffffffff1688851763ffffffff1614155b1561141f5760405163a2a7201360e01b8152600481018790526024016107bb565b96831796610ad586868a868b613a90565b60008261143d81336114cd565b61145e57803360405163168ab55d60e31b81526004016107bb929190614f97565b836002600061146c83610800565b5091505063ffffffff828216161561149a5760405163a2a7201360e01b8152600481018490526024016107bb565b600080806114a78a610800565b9250925092506114c08a84848c61ffff16178485613a90565b5098975050505050505050565b60008080806114db86610800565b925092509250846001600160a01b0316836001600160a01b0316148061095857506109588386612a67565b6060815183511461156b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107bb565b600083516001600160401b0381111561158657611586614676565b6040519080825280602002602001820160405280156115af578160200160208202803683370190505b50905060005b8451811015611627576115fa8582815181106115d3576115d36150ea565b60200260200101518583815181106115ed576115ed6150ea565b6020026020010151610753565b82828151811061160c5761160c6150ea565b60209081029190910101526116208161514a565b90506115b5565b509392505050565b61163761330b565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906151ae565b50505050565b60006107fa82613b37565b6000806116c88585613365565b90506116d381613615565b6116f057604051635374b59960e01b815260040160405180910390fd5b60006116fc86336108fb565b905080158015611713575061171182336114cd565b155b1561173557813360405163168ab55d60e31b81526004016107bb929190614f97565b6000808061174285610800565b925092509250831580156117595750620400008216155b1561177a5760405163a2a7201360e01b8152600481018690526024016107bb565b60006117858a610800565b92505050611794888383613a4a565b97506117a28685858b613b4d565b6040516001600160401b038916815286907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b1329060200160405180910390a2509598975050505050505050565b6117f661330b565b6118006000613b63565b565b61181a6000805160206156ec83398151915284613365565b61182481336114cd565b61184557803360405163168ab55d60e31b81526004016107bb929190614f97565b306001600160a01b0384160361187957604051632ca49b0d60e11b81526001600160a01b03841660048201526024016107bb565b61189a6118946000805160206156ec83398151915286613365565b83613bb3565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b5050505050505050565b600080868660405161193b9291906151cb565b6040519081900381206331a9108f60e11b82526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156119ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cf9190615191565b90506001600160a01b0381163314801590611a77575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015611a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7591906151ae565b155b15611ab057611a946000805160206156ec83398151915283613365565b3360405163168ab55d60e31b81526004016107bb929190614f97565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015611b2057600080fd5b505af1158015611b34573d6000803e3d6000fd5b5050604051630a3b53db60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506328ed4f6c9150611b869085903090600401614f97565b600060405180830381600087803b158015611ba057600080fd5b505af1158015611bb4573d6000803e3d6000fd5b5050604051636b727d4360e11b8152600481018590526276a70092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d6e4fa8690602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c469190615015565b611c509190615044565b9250611c9988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250505061ffff881686886131fa565b505095945050505050565b6001600160a01b0382163303611d0e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107bb565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526004602052604081205460ff16611da95760405162461bcd60e51b81526004016107bb906151db565b60008787604051611dbb9291906151cb565b604051908190038120633f2891eb60e21b8252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac906064016020604051808303816000875af1158015611e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5b9190615015565b9150611eb088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250505061ffff8616611eaa6276a70087615044565b886131fa565b509695505050505050565b600080611ec784610800565b50841663ffffffff908116908516149250505092915050565b611ee861330b565b6007546001600160a01b0316156120085760075460405163a22cb46560e01b81526001600160a01b039182166004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb46590604401600060405180830381600087803b158015611f6857600080fd5b505af1158015611f7c573d6000803e3d6000fd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600060248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb4659150604401600060405180830381600087803b158015611fef57600080fd5b505af1158015612003573d6000803e3d6000fd5b505050505b600780546001600160a01b0319166001600160a01b038316908117909155156121355760075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb46590604401600060405180830381600087803b15801561209a57600080fd5b505af11580156120ae573d6000803e3d6000fd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb4659150604401600060405180830381600087803b15801561212157600080fd5b505af1158015611258573d6000803e3d6000fd5b50565b3360009081526004602052604081205460ff166121675760405162461bcd60e51b81526004016107bb906151db565b60006121816000805160206156ec83398151915285613365565b60405163c475abff60e01b815260048101869052602481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c475abff906044016020604051808303816000875af11580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190615015565b6040516331a9108f60e11b8152600481018790529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa92505050801561229d575060408051601f3d908101601f1916820190925261229a91810190615191565b60015b6122aa5791506107fa9050565b6001600160a01b0381163014158061235457506040516302571be360e01b81526004810184905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190615191565b6001600160a01b031614155b15612363575091506107fa9050565b5060006123736276a70083615044565b60008481526001602052604090205490915060a081901c61239685838386613b4d565b50919695505050505050565b6000866123af81336114cd565b6123d057803360405163168ab55d60e31b81526004016107bb929190614f97565b600087876040516123e29291906151cb565b604051809103902090506123f68982613365565b92506124028984613391565b61240c83866134cf565b600061244f8a858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350292505050565b905061245d8a8588886135cf565b945061246884613615565b612517576040516306ab592360e01b8152600481018b9052602481018390523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906306ab5923906064016020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190615015565b506125128482898989613ca3565b61255d565b61255d8a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508b9050613705565b5050509695505050505050565b60006125b0600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613ce59050565b6007549091506001600160a01b03166125dc5760405163093075b560e21b815260040160405180910390fd5b6125e681336114cd565b61260757803360405163168ab55d60e31b81526004016107bb929190614f97565b6000808061261484610800565b91945092509050600061262685610870565b905061263185613da4565b600760009054906101000a90046001600160a01b03166001600160a01b0316639198c2768a8a878787878e8e6040518963ffffffff1660e01b815260040161268098979695949392919061524c565b600060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b50505050505050505050505050565b836126c881336114cd565b6126e957803360405163168ab55d60e31b81526004016107bb929190614f97565b84601c60006126f783610800565b5091505063ffffffff82821616156127255760405163a2a7201360e01b8152600481018490526024016107bb565b60405163cf40882360e01b8152600481018990523060248201526001600160a01b0387811660448301526001600160401b03871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf40882390608401600060405180830381600087803b1580156127a457600080fd5b505af11580156127b8573d6000803e3d6000fd5b5050506001600160a01b038816905061281f5760006127d689610800565b509150506201ffff196202000082160161280e57604051632ca49b0d60e11b81526001600160a01b03891660048201526024016107bb565b612819896000613bb3565b5061191e565b600061282a896116b0565b905061284c81898b60001c600160405180602001604052806000815250613e44565b505050505050505050565b6128618383613365565b61286b81336114cd565b61288c57803360405163168ab55d60e31b81526004016107bb929190614f97565b7f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b5284016128cc5760405163615a470360e01b815260040160405180910390fd5b6001600160a01b03821615806128ea57506001600160a01b03821630145b1561291357604051632ca49b0d60e11b81526001600160a01b03831660048201526024016107bb565b6116aa6118948585613365565b60008061292d8484613365565b9050600061293a82613615565b90506000805160206156ec833981519152851461295a5791506107fa9050565b6040516331a9108f60e11b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156129db575060408051601f3d908101601f191682019092526129d891810190615191565b60015b6129ea576000925050506107fa565b6001600160a01b0316301492506107fa915050565b612a0761330b565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b600080612adc600087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613f269050565b915091506000612b258288888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613ce59050565b90506000612b338285613365565b6000818152600660205260409020909150612b4f888a836152fa565b507f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b528201612b905760405163615a470360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015612bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1c9190615191565b90506001600160a01b0381163314801590612cc4575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc291906151ae565b155b15612ce657813360405163168ab55d60e31b81526004016107bb929190614f97565b6001600160a01b03861615612d7657604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90612d439085908a90600401614f97565b600060405180830381600087803b158015612d5d57600080fd5b505af1158015612d71573d6000803e3d6000fd5b505050505b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390612dc49085903090600401614f97565b600060405180830381600087803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b5050505061284c828a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508d93509150819050613ca3565b6001600160a01b038416612e5f5760405162461bcd60e51b81526004016107bb906150a5565b6001600160a01b038516331480612e7b5750612e7b8533612a67565b612ed95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107bb565b6112588585858585613e44565b612eee61330b565b6001600160a01b038116612f535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bb565b61213581613b63565b60008181526006602052604081208054829190612f789061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa49061506b565b8015612ff15780601f10612fc657610100808354040283529160200191612ff1565b820191906000526020600020905b815481529060010190602001808311612fd457829003601f168201915b50505050509050805160000361300a5750600092915050565b6000806130178382613f26565b909250905060006130288483613ce5565b905061096b8184612920565b60008042836001600160401b031610156130615761ffff196201000085160161305c57600094505b600093505b50929391925050565b60006001600160e01b03198216636cdb3d1360e11b148061309b57506001600160e01b031982166303a24d0760e21b145b806107fa57506301ffc9a760e01b6001600160e01b03198316146107fa565b60006130c5826116b0565b9050806001600160a01b0316836001600160a01b0316036131325760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107bb565b336001600160a01b038216148061314e575061314e8133612a67565b6131c05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107bb565b6108f68383613fdd565b6000620200008381161480156108ae5750426131e96276a700846153b9565b6001600160401b0316109392505050565b84516020860120600061321b6000805160206156ec83398151915283613365565b9050600061324488604051806040016040528060058152602001626cae8d60e31b81525061404b565b600083815260066020526040902090915061325f82826153d9565b50613272828289620300008a1789613ca3565b6001600160a01b0384161561191e57604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a906132cf9085908890600401614f97565b600060405180830381600087803b1580156132e957600080fd5b505af11580156132fd573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031633146118005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6000808061339e84610800565b91945092509050426001600160401b0382161080801561346157506001600160a01b038416158061346157506040516302571be360e01b8152600481018690526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134569190615191565b6001600160a01b0316145b156134a057600061347187610800565b50915050602081161561349a5760405163a2a7201360e01b8152600481018790526024016107bb565b506134c7565b620100008316156134c75760405163a2a7201360e01b8152600481018690526024016107bb565b505050505050565b63fffdffff81811763ffffffff16146134fe5760405163a2a7201360e01b8152600481018390526024016107bb565b5050565b606060006135ab836006600088815260200190815260200160002080546135289061506b565b80601f01602080910402602001604051908101604052809291908181526020018280546135549061506b565b80156135a15780601f10613576576101008083540402835291602001916135a1565b820191906000526020600020905b81548152906001019060200180831161358457829003601f168201915b505050505061404b565b60008581526006602052604090209091506135c682826153d9565b50949350505050565b6000806135db85610800565b925050506000806135ee8860001c610800565b92509250506135fe878784613a0f565b613609858483613a4a565b98975050505050505050565b600080613621836116b0565b6001600160a01b0316141580156107fa57506040516302571be360e01b81526004810183905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa15801561369a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136be9190615191565b6001600160a01b03161492915050565b600086815260066020526040812080546136ed9187916135289061506b565b90506136fc8682868686613ca3565b50505050505050565b6000808061371288610800565b925092509250600061373c88600660008d815260200190815260200160002080546135289061506b565b60008a81526006602052604090208054919250906137599061506b565b905060000361377c57600089815260066020526040902061377a82826153d9565b505b61378b89858886178589613a90565b6001600160a01b0387166137a9576137a4896000613bb3565b610ad5565b610ad584888b60001c600160405180602001604052806000815250613e44565b6201ffff19620200008316016137e9576137e66276a700826153b9565b90505b42816001600160401b03161015613822576201000082161561381d5760405162461bcd60e51b81526004016107bb90615100565b613847565b60048216156138475760405163a2a7201360e01b8152600481018490526024016107bb565b604082166000036108f6575050600090815260036020526040902080546001600160a01b0319169055565b60c0816001600160401b0316901b60a08363ffffffff16901b846001600160a01b03161717600160008681526020019081526020016000208190555050505050565b6001600160a01b0384163b156134c75760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906138f89089908990889088908890600401615498565b6020604051808303816000875af1925050508015613933575060408051601f3d908101601f19168201909252613930918101906154ea565b60015b6139df5761393f615507565b806308c379a0036139785750613953615523565b8061395e575061397a565b8060405162461bcd60e51b81526004016107bb9190614514565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107bb565b6001600160e01b0319811663bc197c8160e01b146136fc5760405162461bcd60e51b81526004016107bb906155ac565b63ffff00008216158015906001831615908290613a295750805b156112585760405163a2a7201360e01b8152600481018690526024016107bb565b6000816001600160401b0316846001600160401b03161115613a6a578193505b826001600160401b0316846001600160401b03161015613a88578293505b509192915050565b613a9c85858584613b4d565b60405163ffffffff8416815285907f39873f00c80f4f94b7bd1594aebcf650f003545b74824d57ddf4939e3ff3a34b9060200160405180910390a2816001600160401b0316816001600160401b03161115611258576040516001600160401b038216815285907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b132906020015b60405180910390a25050505050565b600080613b4383610800565b5090949350505050565b613b5784836140c2565b6116aa84848484613872565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613bbe826001611ebb565b15613bdf5760405163a2a7201360e01b8152600481018390526024016107bb565b613be882613da4565b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390613c369085908590600401614f97565b600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49150602001612a5b565b613caf858484846140fb565b847f8ce7013e8abebc55c3890a68f5a27c67c3f7efa64e584de5fb22363c606fd34085858585604051613b2894939291906155f4565b6000806000613cf48585613f26565b909250905081613d665760018551613d0c919061563b565b8414613d5a5760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d6500000060448201526064016107bb565b50600091506107fa9050565b613d708582613ce5565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b60008181526001602052604090205460a081901c60c082901c613dc8838383613034565b600086815260036020526040812080546001600160a01b0319169055909350613df5915085908484613872565b60408051858152600160208201526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6000806000613e5286610800565b925092509250613e638683836137c9565b846001148015613e845750876001600160a01b0316836001600160a01b0316145b613ea05760405162461bcd60e51b81526004016107bb90615100565b866001600160a01b0316836001600160a01b031603613ec157505050611258565b613ecd86888484613872565b60408051878152602081018790526001600160a01b03808a1692908b169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461191e33898989898961416f565b60008083518310613f795760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e6473000060448201526064016107bb565b6000848481518110613f8d57613f8d6150ea565b016020015160f81c90508015613fb957613fb285613fac86600161564e565b8361422a565b9250613fbe565b600092505b613fc8818561564e565b613fd390600161564e565b9150509250929050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190614012826116b0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060018351101561407057604051631406d65b60e11b815260040160405180910390fd5b60ff83511115614095578260405163e3ba295f60e01b81526004016107bb9190614514565b825183836040516020016140ab93929190615661565b604051602081830303815290604052905092915050565b61ffff8116158015906140da57506201000181811614155b156134fe5760405163a2a7201360e01b8152600481018390526024016107bb565b61410584836140c2565b6000848152600160205260409020546001600160a01b038116156141635761412c85613da4565b6040516000815285907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b6112588585858561424e565b6001600160a01b0384163b156134c75760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906141b390899089908890889088906004016156a6565b6020604051808303816000875af19250505080156141ee575060408051601f3d908101601f191682019092526141eb918101906154ea565b60015b6141fa5761393f615507565b6001600160e01b0319811663f23a6e6160e01b146136fc5760405162461bcd60e51b81526004016107bb906155ac565b8251600090614239838561564e565b111561424457600080fd5b5091016020012090565b836000808061425c84610800565b9194509250905063ffff000082166001600160401b038087169083161115614282578195505b42826001600160401b03161061429757958617955b6001600160a01b038416156142ee5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e0060448201526064016107bb565b6001600160a01b03881661434e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107bb565b306001600160a01b038916036143c35760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527313985b5955dc985c1c195c8818dbdb9d1c9858dd60621b60648201526084016107bb565b6143cf85898989613872565b60408051868152600160208201526001600160a01b038a169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461284c3360008a8860016040518060200160405280600081525061416f565b6001600160a01b038116811461213557600080fd5b6000806040838503121561445f57600080fd5b823561446a81614437565b946020939093013593505050565b60006020828403121561448a57600080fd5b5035919050565b6001600160e01b03198116811461213557600080fd5b6000602082840312156144b957600080fd5b81356108ae81614491565b60005b838110156144df5781810151838201526020016144c7565b50506000910152565b600081518084526145008160208601602086016144c4565b601f01601f19169290920160200192915050565b6020815260006108ae60208301846144e8565b6000806040838503121561453a57600080fd5b82359150602083013561454c81614437565b809150509250929050565b80356001600160401b038116811461456e57600080fd5b919050565b6000806040838503121561458657600080fd5b8235915061459660208401614557565b90509250929050565b60008083601f8401126145b157600080fd5b5081356001600160401b038111156145c857600080fd5b6020830191508360208285010111156145e057600080fd5b9250929050565b6000806000806000608086880312156145ff57600080fd5b853561460a81614437565b9450602086013561461a81614437565b93506040860135925060608601356001600160401b0381111561463c57600080fd5b6146488882890161459f565b969995985093965092949392505050565b60006020828403121561466b57600080fd5b81356108ae81614437565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156146b1576146b1614676565b6040525050565b60006001600160401b038211156146d1576146d1614676565b50601f01601f191660200190565b600082601f8301126146f057600080fd5b81356146fb816146b8565b604051614708828261468c565b82815285602084870101111561471d57600080fd5b82602086016020830137600092810160200192909252509392505050565b803563ffffffff8116811461456e57600080fd5b600080600080600080600060e0888a03121561476a57600080fd5b8735965060208801356001600160401b0381111561478757600080fd5b6147938a828b016146df565b96505060408801356147a481614437565b945060608801356147b481614437565b93506147c260808901614557565b92506147d060a0890161473b565b91506147de60c08901614557565b905092959891949750929550565b60006001600160401b0382111561480557614805614676565b5060051b60200190565b600082601f83011261482057600080fd5b8135602061482d826147ec565b60405161483a828261468c565b83815260059390931b850182019282810191508684111561485a57600080fd5b8286015b84811015611eb0578035835291830191830161485e565b600080600080600060a0868803121561488d57600080fd5b853561489881614437565b945060208601356148a881614437565b935060408601356001600160401b03808211156148c457600080fd5b6148d089838a0161480f565b945060608801359150808211156148e657600080fd5b6148f289838a0161480f565b9350608088013591508082111561490857600080fd5b50614915888289016146df565b9150509295509295909350565b6000806000806080858703121561493857600080fd5b843593506020850135925061494f6040860161473b565b915061495d60608601614557565b905092959194509250565b803561ffff8116811461456e57600080fd5b6000806040838503121561498d57600080fd5b8235915061459660208401614968565b600080604083850312156149b057600080fd5b82356001600160401b03808211156149c757600080fd5b818501915085601f8301126149db57600080fd5b813560206149e8826147ec565b6040516149f5828261468c565b83815260059390931b8501820192828101915089841115614a1557600080fd5b948201945b83861015614a3c578535614a2d81614437565b82529482019490820190614a1a565b96505086013592505080821115614a5257600080fd5b50613fd38582860161480f565b600081518084526020808501945080840160005b83811015614a8f57815187529582019590820190600101614a73565b509495945050505050565b6020815260006108ae6020830184614a5f565b600080600060608486031215614ac257600080fd5b8335614acd81614437565b92506020840135614add81614437565b929592945050506040919091013590565b600080600060608486031215614b0357600080fd5b8335925060208401359150614b1a60408501614557565b90509250925092565b600080600060608486031215614b3857600080fd5b833592506020840135614b4a81614437565b91506040840135614b5a81614437565b809150509250925092565b600080600080600060808688031215614b7d57600080fd5b85356001600160401b03811115614b9357600080fd5b614b9f8882890161459f565b9096509450506020860135614bb381614437565b9250614bc160408701614968565b91506060860135614bd181614437565b809150509295509295909350565b801515811461213557600080fd5b60008060408385031215614c0057600080fd5b8235614c0b81614437565b9150602083013561454c81614bdf565b60008060008060008060a08789031215614c3457600080fd5b86356001600160401b03811115614c4a57600080fd5b614c5689828a0161459f565b9097509550506020870135614c6a81614437565b9350604087013592506060870135614c8181614437565b9150614c8f60808801614968565b90509295509295509295565b60008060408385031215614cae57600080fd5b823591506145966020840161473b565b60008060408385031215614cd157600080fd5b50508035926020909101359150565b60008060008060008060a08789031215614cf957600080fd5b8635955060208701356001600160401b03811115614d1657600080fd5b614d2289828a0161459f565b9096509450506040870135614d3681614437565b9250614d446060880161473b565b9150614c8f60808801614557565b60008060008060408587031215614d6857600080fd5b84356001600160401b0380821115614d7f57600080fd5b614d8b8883890161459f565b90965094506020870135915080821115614da457600080fd5b50614db18782880161459f565b95989497509550505050565b60008060008060808587031215614dd357600080fd5b843593506020850135614de581614437565b9250604085013561494f81614437565b600080600060608486031215614e0a57600080fd5b83359250602084013591506040840135614b5a81614437565b60008060408385031215614e3657600080fd5b8235614e4181614437565b9150602083013561454c81614437565b60008060008060608587031215614e6757600080fd5b84356001600160401b03811115614e7d57600080fd5b614e898782880161459f565b9095509350506020850135614e9d81614437565b91506040850135614ead81614437565b939692955090935050565b600080600080600060a08688031215614ed057600080fd5b8535614edb81614437565b94506020860135614eeb81614437565b9350604086013592506060860135915060808601356001600160401b03811115614f1457600080fd5b614915888289016146df565b600060208284031215614f3257600080fd5b81516001600160401b03811115614f4857600080fd5b8201601f81018413614f5957600080fd5b8051614f64816146b8565b604051614f71828261468c565b828152866020848601011115614f8657600080fd5b61096b8360208301602087016144c4565b9182526001600160a01b0316602082015260400190565b60008060008060808587031215614fc457600080fd5b84356001600160401b03811115614fda57600080fd5b614fe6878288016146df565b9450506020850135614ff781614437565b925061500560408601614968565b91506060850135614ead81614437565b60006020828403121561502757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156150645761506461502e565b5092915050565b600181811c9082168061507f57607f821691505b60208210810361509f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60006001820161515c5761515c61502e565b5060010190565b6040815260006151766040830185614a5f565b82810360208401526151888185614a5f565b95945050505050565b6000602082840312156151a357600080fd5b81516108ae81614437565b6000602082840312156151c057600080fd5b81516108ae81614bdf565b8183823760009101908152919050565b60208082526028908201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60c08152600061526060c083018a8c615223565b6001600160a01b03898116602085015263ffffffff891660408501526001600160401b03881660608501528616608084015282810360a08401526152a5818587615223565b9b9a5050505050505050505050565b601f8211156108f657600081815260208120601f850160051c810160208610156152db5750805b601f850160051c820191505b818110156134c7578281556001016152e7565b6001600160401b0383111561531157615311614676565b6153258361531f835461506b565b836152b4565b6000601f84116001811461535957600085156153415750838201355b600019600387901b1c1916600186901b178355611258565b600083815260209020601f19861690835b8281101561538a578685013582556020948501946001909201910161536a565b50868210156153a75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b038281168282160390808211156150645761506461502e565b81516001600160401b038111156153f2576153f2614676565b61540681615400845461506b565b846152b4565b602080601f83116001811461543b57600084156154235750858301515b600019600386901b1c1916600185901b1785556134c7565b600085815260208120601f198616915b8281101561546a5788860151825594840194600190910190840161544b565b50858210156154885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a0604082018190526000906154c490830186614a5f565b82810360608401526154d68186614a5f565b9050828103608084015261360981856144e8565b6000602082840312156154fc57600080fd5b81516108ae81614491565b600060033d11156155205760046000803e5060005160e01c5b90565b600060443d10156155315790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561556057505050505090565b82850191508151818111156155785750505050505090565b843d87010160208285010111156155925750505050505090565b6155a16020828601018761468c565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60808152600061560760808301876144e8565b6001600160a01b039590951660208301525063ffffffff9290921660408301526001600160401b0316606090910152919050565b818103818111156107fa576107fa61502e565b808201808211156107fa576107fa61502e565b60ff60f81b8460f81b168152600083516156828160018501602088016144c4565b8351908301906156998160018401602088016144c4565b0160010195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906156e0908301846144e8565b97965050505050505056fe93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4aea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061029f5760003560e01c80636352211e11610167578063c93ab3fd116100ce578063e985e9c511610087578063e985e9c5146106d4578063eb8ae530146106e7578063ed70554d146106fa578063f242432a1461071a578063f2fde38b1461072d578063fd0cd0d91461074057600080fd5b8063c93ab3fd14610652578063cf40882314610665578063d8c9921a14610678578063d9a50c121461068b578063da8c229e1461069e578063e0dba60f146106c157600080fd5b8063a22cb46511610120578063a22cb465146105e0578063a4014982146105f3578063adf4960a14610606578063b6bcad2614610619578063c475abff1461062c578063c658e0861461063f57600080fd5b80636352211e146105635780636e5d6ad214610576578063715018a6146105a15780638b4dfa75146105a95780638cf8b41e146105bc5780638da5cb5b146105cf57600080fd5b80631f4e15041161020b5780633f15457f116101c45780633f15457f146104bb578063402906fc146104e257806341415eab1461050a5780634e1273f41461051d578063530954671461053d5780635d3590d51461055057600080fd5b80631f4e15041461043557806320c38e2b1461044857806324c1af441461045b5780632b20e3971461046e5780632eb2c2d61461049557806333c69ea9146104a857600080fd5b80630e4cd7251161025d5780630e4cd725146103aa5780630e89341c146103bd57806314ab9038146103d0578063150b7a02146103e35780631534e1771461040f5780631896f70a1461042257600080fd5b8062fdd58e146102a45780630178fe3f146102ca57806301ffc9a71461031057806306fdde0314610333578063081812fc1461036a578063095ea7b314610395575b600080fd5b6102b76102b236600461444c565b610753565b6040519081526020015b60405180910390f35b6102dd6102d8366004614478565b610800565b604080516001600160a01b03909416845263ffffffff90921660208401526001600160401b0316908201526060016102c1565b61032361031e3660046144a7565b610830565b60405190151581526020016102c1565b61035d6040518060400160405280600b81526020016a2730b6b2abb930b83832b960a91b81525081565b6040516102c19190614514565b61037d610378366004614478565b610870565b6040516001600160a01b0390911681526020016102c1565b6103a86103a336600461444c565b6108b5565b005b6103236103b8366004614527565b6108fb565b61035d6103cb366004614478565b610975565b6103a86103de366004614573565b6109e7565b6103f66103f13660046145e7565b610ae1565b6040516001600160e01b031990911681526020016102c1565b6103a861041d366004614659565b610cc1565b6103a8610430366004614527565b610ceb565b60075461037d906001600160a01b031681565b61035d610456366004614478565b610da1565b6102b761046936600461474f565b610e3b565b61037d7f000000000000000000000000000000000000000000000000000000000000000081565b6103a86104a3366004614875565b611021565b6103a86104b6366004614922565b61125f565b61037d7f000000000000000000000000000000000000000000000000000000000000000081565b6104f56104f036600461497a565b611430565b60405163ffffffff90911681526020016102c1565b610323610518366004614527565b6114cd565b61053061052b36600461499d565b611506565b6040516102c19190614a9a565b60055461037d906001600160a01b031681565b6103a861055e366004614aad565b61162f565b61037d610571366004614478565b6116b0565b610589610584366004614aee565b6116bb565b6040516001600160401b0390911681526020016102c1565b6103a86117ee565b6103a86105b7366004614b23565b611802565b6105896105ca366004614b65565b611928565b6000546001600160a01b031661037d565b6103a86105ee366004614bed565b611ca4565b6102b7610601366004614c1b565b611d7a565b610323610614366004614c9b565b611ebb565b6103a8610627366004614659565b611ee0565b6102b761063a366004614cbe565b612138565b6102b761064d366004614ce0565b6123a2565b6103a8610660366004614d52565b61256a565b6103a8610673366004614dbd565b6126bd565b6103a8610686366004614df5565b612857565b610323610699366004614cbe565b612920565b6103236106ac366004614659565b60046020526000908152604090205460ff1681565b6103a86106cf366004614bed565b6129ff565b6103236106e2366004614e23565b612a67565b6103a86106f5366004614e51565b612a95565b6102b7610708366004614478565b60016020526000908152604090205481565b6103a8610728366004614eb8565b612e39565b6103a861073b366004614659565b612ee6565b61032361074e366004614478565b612f5c565b60006001600160a01b0383166107c45760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b60006107cf836116b0565b9050836001600160a01b0316816001600160a01b0316036107f45760019150506107fa565b60009150505b92915050565b60008181526001602052604090205460a081901c60c082901c610824838383613034565b90959094509092509050565b60006001600160e01b03198216631b05885b60e31b148061086157506001600160e01b03198216630a85bd0160e11b145b806107fa57506107fa8261306a565b60008061087c836116b0565b90506001600160a01b0381166108955750600092915050565b6000838152600360205260409020546001600160a01b03165b9392505050565b60006108c082610800565b50915050603f1960408216016108ec5760405163a2a7201360e01b8152600481018390526024016107bb565b6108f683836130ba565b505050565b600080808061090986610800565b925092509250846001600160a01b0316836001600160a01b0316148061093457506109348386612a67565b8061095857506001600160a01b03851661094d87610870565b6001600160a01b0316145b801561096b575061096982826131ca565b155b9695505050505050565b6005546040516303a24d0760e21b8152600481018390526060916001600160a01b031690630e89341c90602401600060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107fa9190810190614f20565b816109f281336114cd565b610a1357803360405163168ab55d60e31b81526004016107bb929190614f97565b8260106000610a2183610800565b5091505063ffffffff8282161615610a4f5760405163a2a7201360e01b8152600481018490526024016107bb565b604051630295720760e31b8152600481018790526001600160401b03861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b600060405180830381600087803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b50505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b2c5760405163032634a760e31b815260040160405180910390fd5b6000808080610b3d86880188614fae565b83516020850120939750919550935091508890808214610b7a576040516331970f3360e21b815260048101829052602481018390526044016107bb565b604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906328ed4f6c90610bc89085903090600401614f97565b600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b5050604051636b727d4360e11b8152600481018d9052600092506276a70091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6e4fa8690602401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190615015565b610c959190615044565b9050610ca887878761ffff1684886131fa565b50630a85bd0160e11b9c9b505050505050505050505050565b610cc961330b565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b81610cf681336114cd565b610d1757803360405163168ab55d60e31b81526004016107bb929190614f97565b8260086000610d2583610800565b5091505063ffffffff8282161615610d535760405163a2a7201360e01b8152600481018490526024016107bb565b604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90610aa79089908990600401614f97565b60066020526000908152604090208054610dba9061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054610de69061506b565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b505050505081565b600087610e4881336114cd565b610e6957803360405163168ab55d60e31b81526004016107bb929190614f97565b87516020890120610e7a8a82613365565b9250610e868a84613391565b610e9083866134cf565b610e9b8a848b613502565b50610ea88a8487876135cf565b9350610eb383613615565b610f68576040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015610f3d57600080fd5b505af1158015610f51573d6000803e3d6000fd5b50505050610f638a848b8b89896136ce565b611014565b6040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b158015610fee57600080fd5b505af1158015611002573d6000803e3d6000fd5b505050506110148a848b8b8989613705565b5050979650505050505050565b81518351146110835760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107bb565b6001600160a01b0384166110a95760405162461bcd60e51b81526004016107bb906150a5565b6001600160a01b0385163314806110c557506110c58533612a67565b61112c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107bb565b60005b83518110156111f257600084828151811061114c5761114c6150ea565b60200260200101519050600084838151811061116a5761116a6150ea565b60200260200101519050600080600061118285610800565b9250925092506111938583836137c9565b8360011480156111b457508a6001600160a01b0316836001600160a01b0316145b6111d05760405162461bcd60e51b81526004016107bb90615100565b6111dc858b8484613872565b5050505050806111eb9061514a565b905061112f565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611242929190615163565b60405180910390a46112583386868686866138b4565b5050505050565b600061126b8585613365565b905061127781846134cf565b6000808061128484610800565b919450925090506001600160a01b038316158061133357506040516302571be360e01b81526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113279190615191565b6001600160a01b031614155b1561135157604051635374b59960e01b815260040160405180910390fd5b60008061135d8a610800565b90935091508a90506113995761137386336114cd565b61139457853360405163168ab55d60e31b81526004016107bb929190614f97565b6113c4565b6113a38a336114cd565b6113c457893360405163168ab55d60e31b81526004016107bb929190614f97565b6113cf868984613a0f565b6113da878483613a4a565b9650620100008416158015906113fe57508363ffffffff1688851763ffffffff1614155b1561141f5760405163a2a7201360e01b8152600481018790526024016107bb565b96831796610ad586868a868b613a90565b60008261143d81336114cd565b61145e57803360405163168ab55d60e31b81526004016107bb929190614f97565b836002600061146c83610800565b5091505063ffffffff828216161561149a5760405163a2a7201360e01b8152600481018490526024016107bb565b600080806114a78a610800565b9250925092506114c08a84848c61ffff16178485613a90565b5098975050505050505050565b60008080806114db86610800565b925092509250846001600160a01b0316836001600160a01b0316148061095857506109588386612a67565b6060815183511461156b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107bb565b600083516001600160401b0381111561158657611586614676565b6040519080825280602002602001820160405280156115af578160200160208202803683370190505b50905060005b8451811015611627576115fa8582815181106115d3576115d36150ea565b60200260200101518583815181106115ed576115ed6150ea565b6020026020010151610753565b82828151811061160c5761160c6150ea565b60209081029190910101526116208161514a565b90506115b5565b509392505050565b61163761330b565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906151ae565b50505050565b60006107fa82613b37565b6000806116c88585613365565b90506116d381613615565b6116f057604051635374b59960e01b815260040160405180910390fd5b60006116fc86336108fb565b905080158015611713575061171182336114cd565b155b1561173557813360405163168ab55d60e31b81526004016107bb929190614f97565b6000808061174285610800565b925092509250831580156117595750620400008216155b1561177a5760405163a2a7201360e01b8152600481018690526024016107bb565b60006117858a610800565b92505050611794888383613a4a565b97506117a28685858b613b4d565b6040516001600160401b038916815286907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b1329060200160405180910390a2509598975050505050505050565b6117f661330b565b6118006000613b63565b565b61181a6000805160206156ec83398151915284613365565b61182481336114cd565b61184557803360405163168ab55d60e31b81526004016107bb929190614f97565b306001600160a01b0384160361187957604051632ca49b0d60e11b81526001600160a01b03841660048201526024016107bb565b61189a6118946000805160206156ec83398151915286613365565b83613bb3565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b5050505050505050565b600080868660405161193b9291906151cb565b6040519081900381206331a9108f60e11b82526004820181905291506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156119ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cf9190615191565b90506001600160a01b0381163314801590611a77575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015611a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7591906151ae565b155b15611ab057611a946000805160206156ec83398151915283613365565b3360405163168ab55d60e31b81526004016107bb929190614f97565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015611b2057600080fd5b505af1158015611b34573d6000803e3d6000fd5b5050604051630a3b53db60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506328ed4f6c9150611b869085903090600401614f97565b600060405180830381600087803b158015611ba057600080fd5b505af1158015611bb4573d6000803e3d6000fd5b5050604051636b727d4360e11b8152600481018590526276a70092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d6e4fa8690602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c469190615015565b611c509190615044565b9250611c9988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250505061ffff881686886131fa565b505095945050505050565b6001600160a01b0382163303611d0e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107bb565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526004602052604081205460ff16611da95760405162461bcd60e51b81526004016107bb906151db565b60008787604051611dbb9291906151cb565b604051908190038120633f2891eb60e21b8252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac906064016020604051808303816000875af1158015611e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5b9190615015565b9150611eb088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250505061ffff8616611eaa6276a70087615044565b886131fa565b509695505050505050565b600080611ec784610800565b50841663ffffffff908116908516149250505092915050565b611ee861330b565b6007546001600160a01b0316156120085760075460405163a22cb46560e01b81526001600160a01b039182166004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb46590604401600060405180830381600087803b158015611f6857600080fd5b505af1158015611f7c573d6000803e3d6000fd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600060248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb4659150604401600060405180830381600087803b158015611fef57600080fd5b505af1158015612003573d6000803e3d6000fd5b505050505b600780546001600160a01b0319166001600160a01b038316908117909155156121355760075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb46590604401600060405180830381600087803b15801561209a57600080fd5b505af11580156120ae573d6000803e3d6000fd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb4659150604401600060405180830381600087803b15801561212157600080fd5b505af1158015611258573d6000803e3d6000fd5b50565b3360009081526004602052604081205460ff166121675760405162461bcd60e51b81526004016107bb906151db565b60006121816000805160206156ec83398151915285613365565b60405163c475abff60e01b815260048101869052602481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c475abff906044016020604051808303816000875af11580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190615015565b6040516331a9108f60e11b8152600481018790529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa92505050801561229d575060408051601f3d908101601f1916820190925261229a91810190615191565b60015b6122aa5791506107fa9050565b6001600160a01b0381163014158061235457506040516302571be360e01b81526004810184905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190615191565b6001600160a01b031614155b15612363575091506107fa9050565b5060006123736276a70083615044565b60008481526001602052604090205490915060a081901c61239685838386613b4d565b50919695505050505050565b6000866123af81336114cd565b6123d057803360405163168ab55d60e31b81526004016107bb929190614f97565b600087876040516123e29291906151cb565b604051809103902090506123f68982613365565b92506124028984613391565b61240c83866134cf565b600061244f8a858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350292505050565b905061245d8a8588886135cf565b945061246884613615565b612517576040516306ab592360e01b8152600481018b9052602481018390523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906306ab5923906064016020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190615015565b506125128482898989613ca3565b61255d565b61255d8a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c91508b9050613705565b5050509695505050505050565b60006125b0600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613ce59050565b6007549091506001600160a01b03166125dc5760405163093075b560e21b815260040160405180910390fd5b6125e681336114cd565b61260757803360405163168ab55d60e31b81526004016107bb929190614f97565b6000808061261484610800565b91945092509050600061262685610870565b905061263185613da4565b600760009054906101000a90046001600160a01b03166001600160a01b0316639198c2768a8a878787878e8e6040518963ffffffff1660e01b815260040161268098979695949392919061524c565b600060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b50505050505050505050505050565b836126c881336114cd565b6126e957803360405163168ab55d60e31b81526004016107bb929190614f97565b84601c60006126f783610800565b5091505063ffffffff82821616156127255760405163a2a7201360e01b8152600481018490526024016107bb565b60405163cf40882360e01b8152600481018990523060248201526001600160a01b0387811660448301526001600160401b03871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf40882390608401600060405180830381600087803b1580156127a457600080fd5b505af11580156127b8573d6000803e3d6000fd5b5050506001600160a01b038816905061281f5760006127d689610800565b509150506201ffff196202000082160161280e57604051632ca49b0d60e11b81526001600160a01b03891660048201526024016107bb565b612819896000613bb3565b5061191e565b600061282a896116b0565b905061284c81898b60001c600160405180602001604052806000815250613e44565b505050505050505050565b6128618383613365565b61286b81336114cd565b61288c57803360405163168ab55d60e31b81526004016107bb929190614f97565b7f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b5284016128cc5760405163615a470360e01b815260040160405180910390fd5b6001600160a01b03821615806128ea57506001600160a01b03821630145b1561291357604051632ca49b0d60e11b81526001600160a01b03831660048201526024016107bb565b6116aa6118948585613365565b60008061292d8484613365565b9050600061293a82613615565b90506000805160206156ec833981519152851461295a5791506107fa9050565b6040516331a9108f60e11b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156129db575060408051601f3d908101601f191682019092526129d891810190615191565b60015b6129ea576000925050506107fa565b6001600160a01b0316301492506107fa915050565b612a0761330b565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b600080612adc600087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613f269050565b915091506000612b258288888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050613ce59050565b90506000612b338285613365565b6000818152600660205260409020909150612b4f888a836152fa565b507f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b528201612b905760405163615a470360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015612bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1c9190615191565b90506001600160a01b0381163314801590612cc4575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc291906151ae565b155b15612ce657813360405163168ab55d60e31b81526004016107bb929190614f97565b6001600160a01b03861615612d7657604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90612d439085908a90600401614f97565b600060405180830381600087803b158015612d5d57600080fd5b505af1158015612d71573d6000803e3d6000fd5b505050505b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390612dc49085903090600401614f97565b600060405180830381600087803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b5050505061284c828a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508d93509150819050613ca3565b6001600160a01b038416612e5f5760405162461bcd60e51b81526004016107bb906150a5565b6001600160a01b038516331480612e7b5750612e7b8533612a67565b612ed95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107bb565b6112588585858585613e44565b612eee61330b565b6001600160a01b038116612f535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bb565b61213581613b63565b60008181526006602052604081208054829190612f789061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa49061506b565b8015612ff15780601f10612fc657610100808354040283529160200191612ff1565b820191906000526020600020905b815481529060010190602001808311612fd457829003601f168201915b50505050509050805160000361300a5750600092915050565b6000806130178382613f26565b909250905060006130288483613ce5565b905061096b8184612920565b60008042836001600160401b031610156130615761ffff196201000085160161305c57600094505b600093505b50929391925050565b60006001600160e01b03198216636cdb3d1360e11b148061309b57506001600160e01b031982166303a24d0760e21b145b806107fa57506301ffc9a760e01b6001600160e01b03198316146107fa565b60006130c5826116b0565b9050806001600160a01b0316836001600160a01b0316036131325760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107bb565b336001600160a01b038216148061314e575061314e8133612a67565b6131c05760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107bb565b6108f68383613fdd565b6000620200008381161480156108ae5750426131e96276a700846153b9565b6001600160401b0316109392505050565b84516020860120600061321b6000805160206156ec83398151915283613365565b9050600061324488604051806040016040528060058152602001626cae8d60e31b81525061404b565b600083815260066020526040902090915061325f82826153d9565b50613272828289620300008a1789613ca3565b6001600160a01b0384161561191e57604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a906132cf9085908890600401614f97565b600060405180830381600087803b1580156132e957600080fd5b505af11580156132fd573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031633146118005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6000808061339e84610800565b91945092509050426001600160401b0382161080801561346157506001600160a01b038416158061346157506040516302571be360e01b8152600481018690526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134569190615191565b6001600160a01b0316145b156134a057600061347187610800565b50915050602081161561349a5760405163a2a7201360e01b8152600481018790526024016107bb565b506134c7565b620100008316156134c75760405163a2a7201360e01b8152600481018690526024016107bb565b505050505050565b63fffdffff81811763ffffffff16146134fe5760405163a2a7201360e01b8152600481018390526024016107bb565b5050565b606060006135ab836006600088815260200190815260200160002080546135289061506b565b80601f01602080910402602001604051908101604052809291908181526020018280546135549061506b565b80156135a15780601f10613576576101008083540402835291602001916135a1565b820191906000526020600020905b81548152906001019060200180831161358457829003601f168201915b505050505061404b565b60008581526006602052604090209091506135c682826153d9565b50949350505050565b6000806135db85610800565b925050506000806135ee8860001c610800565b92509250506135fe878784613a0f565b613609858483613a4a565b98975050505050505050565b600080613621836116b0565b6001600160a01b0316141580156107fa57506040516302571be360e01b81526004810183905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa15801561369a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136be9190615191565b6001600160a01b03161492915050565b600086815260066020526040812080546136ed9187916135289061506b565b90506136fc8682868686613ca3565b50505050505050565b6000808061371288610800565b925092509250600061373c88600660008d815260200190815260200160002080546135289061506b565b60008a81526006602052604090208054919250906137599061506b565b905060000361377c57600089815260066020526040902061377a82826153d9565b505b61378b89858886178589613a90565b6001600160a01b0387166137a9576137a4896000613bb3565b610ad5565b610ad584888b60001c600160405180602001604052806000815250613e44565b6201ffff19620200008316016137e9576137e66276a700826153b9565b90505b42816001600160401b03161015613822576201000082161561381d5760405162461bcd60e51b81526004016107bb90615100565b613847565b60048216156138475760405163a2a7201360e01b8152600481018490526024016107bb565b604082166000036108f6575050600090815260036020526040902080546001600160a01b0319169055565b60c0816001600160401b0316901b60a08363ffffffff16901b846001600160a01b03161717600160008681526020019081526020016000208190555050505050565b6001600160a01b0384163b156134c75760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906138f89089908990889088908890600401615498565b6020604051808303816000875af1925050508015613933575060408051601f3d908101601f19168201909252613930918101906154ea565b60015b6139df5761393f615507565b806308c379a0036139785750613953615523565b8061395e575061397a565b8060405162461bcd60e51b81526004016107bb9190614514565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107bb565b6001600160e01b0319811663bc197c8160e01b146136fc5760405162461bcd60e51b81526004016107bb906155ac565b63ffff00008216158015906001831615908290613a295750805b156112585760405163a2a7201360e01b8152600481018690526024016107bb565b6000816001600160401b0316846001600160401b03161115613a6a578193505b826001600160401b0316846001600160401b03161015613a88578293505b509192915050565b613a9c85858584613b4d565b60405163ffffffff8416815285907f39873f00c80f4f94b7bd1594aebcf650f003545b74824d57ddf4939e3ff3a34b9060200160405180910390a2816001600160401b0316816001600160401b03161115611258576040516001600160401b038216815285907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b132906020015b60405180910390a25050505050565b600080613b4383610800565b5090949350505050565b613b5784836140c2565b6116aa84848484613872565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613bbe826001611ebb565b15613bdf5760405163a2a7201360e01b8152600481018390526024016107bb565b613be882613da4565b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390613c369085908590600401614f97565b600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49150602001612a5b565b613caf858484846140fb565b847f8ce7013e8abebc55c3890a68f5a27c67c3f7efa64e584de5fb22363c606fd34085858585604051613b2894939291906155f4565b6000806000613cf48585613f26565b909250905081613d665760018551613d0c919061563b565b8414613d5a5760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d6500000060448201526064016107bb565b50600091506107fa9050565b613d708582613ce5565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b60008181526001602052604090205460a081901c60c082901c613dc8838383613034565b600086815260036020526040812080546001600160a01b0319169055909350613df5915085908484613872565b60408051858152600160208201526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b6000806000613e5286610800565b925092509250613e638683836137c9565b846001148015613e845750876001600160a01b0316836001600160a01b0316145b613ea05760405162461bcd60e51b81526004016107bb90615100565b866001600160a01b0316836001600160a01b031603613ec157505050611258565b613ecd86888484613872565b60408051878152602081018790526001600160a01b03808a1692908b169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461191e33898989898961416f565b60008083518310613f795760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e6473000060448201526064016107bb565b6000848481518110613f8d57613f8d6150ea565b016020015160f81c90508015613fb957613fb285613fac86600161564e565b8361422a565b9250613fbe565b600092505b613fc8818561564e565b613fd390600161564e565b9150509250929050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190614012826116b0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060018351101561407057604051631406d65b60e11b815260040160405180910390fd5b60ff83511115614095578260405163e3ba295f60e01b81526004016107bb9190614514565b825183836040516020016140ab93929190615661565b604051602081830303815290604052905092915050565b61ffff8116158015906140da57506201000181811614155b156134fe5760405163a2a7201360e01b8152600481018390526024016107bb565b61410584836140c2565b6000848152600160205260409020546001600160a01b038116156141635761412c85613da4565b6040516000815285907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b6112588585858561424e565b6001600160a01b0384163b156134c75760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906141b390899089908890889088906004016156a6565b6020604051808303816000875af19250505080156141ee575060408051601f3d908101601f191682019092526141eb918101906154ea565b60015b6141fa5761393f615507565b6001600160e01b0319811663f23a6e6160e01b146136fc5760405162461bcd60e51b81526004016107bb906155ac565b8251600090614239838561564e565b111561424457600080fd5b5091016020012090565b836000808061425c84610800565b9194509250905063ffff000082166001600160401b038087169083161115614282578195505b42826001600160401b03161061429757958617955b6001600160a01b038416156142ee5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e0060448201526064016107bb565b6001600160a01b03881661434e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107bb565b306001600160a01b038916036143c35760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527313985b5955dc985c1c195c8818dbdb9d1c9858dd60621b60648201526084016107bb565b6143cf85898989613872565b60408051868152600160208201526001600160a01b038a169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461284c3360008a8860016040518060200160405280600081525061416f565b6001600160a01b038116811461213557600080fd5b6000806040838503121561445f57600080fd5b823561446a81614437565b946020939093013593505050565b60006020828403121561448a57600080fd5b5035919050565b6001600160e01b03198116811461213557600080fd5b6000602082840312156144b957600080fd5b81356108ae81614491565b60005b838110156144df5781810151838201526020016144c7565b50506000910152565b600081518084526145008160208601602086016144c4565b601f01601f19169290920160200192915050565b6020815260006108ae60208301846144e8565b6000806040838503121561453a57600080fd5b82359150602083013561454c81614437565b809150509250929050565b80356001600160401b038116811461456e57600080fd5b919050565b6000806040838503121561458657600080fd5b8235915061459660208401614557565b90509250929050565b60008083601f8401126145b157600080fd5b5081356001600160401b038111156145c857600080fd5b6020830191508360208285010111156145e057600080fd5b9250929050565b6000806000806000608086880312156145ff57600080fd5b853561460a81614437565b9450602086013561461a81614437565b93506040860135925060608601356001600160401b0381111561463c57600080fd5b6146488882890161459f565b969995985093965092949392505050565b60006020828403121561466b57600080fd5b81356108ae81614437565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156146b1576146b1614676565b6040525050565b60006001600160401b038211156146d1576146d1614676565b50601f01601f191660200190565b600082601f8301126146f057600080fd5b81356146fb816146b8565b604051614708828261468c565b82815285602084870101111561471d57600080fd5b82602086016020830137600092810160200192909252509392505050565b803563ffffffff8116811461456e57600080fd5b600080600080600080600060e0888a03121561476a57600080fd5b8735965060208801356001600160401b0381111561478757600080fd5b6147938a828b016146df565b96505060408801356147a481614437565b945060608801356147b481614437565b93506147c260808901614557565b92506147d060a0890161473b565b91506147de60c08901614557565b905092959891949750929550565b60006001600160401b0382111561480557614805614676565b5060051b60200190565b600082601f83011261482057600080fd5b8135602061482d826147ec565b60405161483a828261468c565b83815260059390931b850182019282810191508684111561485a57600080fd5b8286015b84811015611eb0578035835291830191830161485e565b600080600080600060a0868803121561488d57600080fd5b853561489881614437565b945060208601356148a881614437565b935060408601356001600160401b03808211156148c457600080fd5b6148d089838a0161480f565b945060608801359150808211156148e657600080fd5b6148f289838a0161480f565b9350608088013591508082111561490857600080fd5b50614915888289016146df565b9150509295509295909350565b6000806000806080858703121561493857600080fd5b843593506020850135925061494f6040860161473b565b915061495d60608601614557565b905092959194509250565b803561ffff8116811461456e57600080fd5b6000806040838503121561498d57600080fd5b8235915061459660208401614968565b600080604083850312156149b057600080fd5b82356001600160401b03808211156149c757600080fd5b818501915085601f8301126149db57600080fd5b813560206149e8826147ec565b6040516149f5828261468c565b83815260059390931b8501820192828101915089841115614a1557600080fd5b948201945b83861015614a3c578535614a2d81614437565b82529482019490820190614a1a565b96505086013592505080821115614a5257600080fd5b50613fd38582860161480f565b600081518084526020808501945080840160005b83811015614a8f57815187529582019590820190600101614a73565b509495945050505050565b6020815260006108ae6020830184614a5f565b600080600060608486031215614ac257600080fd5b8335614acd81614437565b92506020840135614add81614437565b929592945050506040919091013590565b600080600060608486031215614b0357600080fd5b8335925060208401359150614b1a60408501614557565b90509250925092565b600080600060608486031215614b3857600080fd5b833592506020840135614b4a81614437565b91506040840135614b5a81614437565b809150509250925092565b600080600080600060808688031215614b7d57600080fd5b85356001600160401b03811115614b9357600080fd5b614b9f8882890161459f565b9096509450506020860135614bb381614437565b9250614bc160408701614968565b91506060860135614bd181614437565b809150509295509295909350565b801515811461213557600080fd5b60008060408385031215614c0057600080fd5b8235614c0b81614437565b9150602083013561454c81614bdf565b60008060008060008060a08789031215614c3457600080fd5b86356001600160401b03811115614c4a57600080fd5b614c5689828a0161459f565b9097509550506020870135614c6a81614437565b9350604087013592506060870135614c8181614437565b9150614c8f60808801614968565b90509295509295509295565b60008060408385031215614cae57600080fd5b823591506145966020840161473b565b60008060408385031215614cd157600080fd5b50508035926020909101359150565b60008060008060008060a08789031215614cf957600080fd5b8635955060208701356001600160401b03811115614d1657600080fd5b614d2289828a0161459f565b9096509450506040870135614d3681614437565b9250614d446060880161473b565b9150614c8f60808801614557565b60008060008060408587031215614d6857600080fd5b84356001600160401b0380821115614d7f57600080fd5b614d8b8883890161459f565b90965094506020870135915080821115614da457600080fd5b50614db18782880161459f565b95989497509550505050565b60008060008060808587031215614dd357600080fd5b843593506020850135614de581614437565b9250604085013561494f81614437565b600080600060608486031215614e0a57600080fd5b83359250602084013591506040840135614b5a81614437565b60008060408385031215614e3657600080fd5b8235614e4181614437565b9150602083013561454c81614437565b60008060008060608587031215614e6757600080fd5b84356001600160401b03811115614e7d57600080fd5b614e898782880161459f565b9095509350506020850135614e9d81614437565b91506040850135614ead81614437565b939692955090935050565b600080600080600060a08688031215614ed057600080fd5b8535614edb81614437565b94506020860135614eeb81614437565b9350604086013592506060860135915060808601356001600160401b03811115614f1457600080fd5b614915888289016146df565b600060208284031215614f3257600080fd5b81516001600160401b03811115614f4857600080fd5b8201601f81018413614f5957600080fd5b8051614f64816146b8565b604051614f71828261468c565b828152866020848601011115614f8657600080fd5b61096b8360208301602087016144c4565b9182526001600160a01b0316602082015260400190565b60008060008060808587031215614fc457600080fd5b84356001600160401b03811115614fda57600080fd5b614fe6878288016146df565b9450506020850135614ff781614437565b925061500560408601614968565b91506060850135614ead81614437565b60006020828403121561502757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156150645761506461502e565b5092915050565b600181811c9082168061507f57607f821691505b60208210810361509f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60006001820161515c5761515c61502e565b5060010190565b6040815260006151766040830185614a5f565b82810360208401526151888185614a5f565b95945050505050565b6000602082840312156151a357600080fd5b81516108ae81614437565b6000602082840312156151c057600080fd5b81516108ae81614bdf565b8183823760009101908152919050565b60208082526028908201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60c08152600061526060c083018a8c615223565b6001600160a01b03898116602085015263ffffffff891660408501526001600160401b03881660608501528616608084015282810360a08401526152a5818587615223565b9b9a5050505050505050505050565b601f8211156108f657600081815260208120601f850160051c810160208610156152db5750805b601f850160051c820191505b818110156134c7578281556001016152e7565b6001600160401b0383111561531157615311614676565b6153258361531f835461506b565b836152b4565b6000601f84116001811461535957600085156153415750838201355b600019600387901b1c1916600186901b178355611258565b600083815260209020601f19861690835b8281101561538a578685013582556020948501946001909201910161536a565b50868210156153a75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b038281168282160390808211156150645761506461502e565b81516001600160401b038111156153f2576153f2614676565b61540681615400845461506b565b846152b4565b602080601f83116001811461543b57600084156154235750858301515b600019600386901b1c1916600185901b1785556134c7565b600085815260208120601f198616915b8281101561546a5788860151825594840194600190910190840161544b565b50858210156154885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a0604082018190526000906154c490830186614a5f565b82810360608401526154d68186614a5f565b9050828103608084015261360981856144e8565b6000602082840312156154fc57600080fd5b81516108ae81614491565b600060033d11156155205760046000803e5060005160e01c5b90565b600060443d10156155315790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561556057505050505090565b82850191508151818111156155785750505050505090565b843d87010160208285010111156155925750505050505090565b6155a16020828601018761468c565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60808152600061560760808301876144e8565b6001600160a01b039590951660208301525063ffffffff9290921660408301526001600160401b0316606090910152919050565b818103818111156107fa576107fa61502e565b808201808211156107fa576107fa61502e565b60ff60f81b8460f81b168152600083516156828160018501602088016144c4565b8351908301906156998160018401602088016144c4565b0160010195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906156e0908301846144e8565b97965050505050505056fe93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4aea164736f6c6343000811000a", + "bytecode": "0x60c060405234801562000010575f80fd5b5060405162005b1638038062005b168339810160408190526200003391620002ed565b8233620000408162000286565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201525f906001600160a01b038416906302571be390602401602060405180830381865afa158015620000a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000cb91906200033e565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303815f875af115801562000115573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200013b919062000363565b505050506001600160a01b0383811660805282811660a052600580546001600160a01b031916918316919091179055600163fffeffff60a01b03197fafa26c20e8b3d9a2853d642cfe1021dae26242ffedfac91c97aab212c1a4b93b8190557fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495560408051808201909152600181525f6020808301829052908052600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f89062000208908262000419565b506040805180820190915260058152626cae8d60e31b6020808301919091527f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae5f52600690527ffb9e8e321b8a5ec48f12a7b41f22c6e595d761285c9eb19d8dda7c99edf1b54f906200027c908262000419565b50505050620004e5565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620002ea575f80fd5b50565b5f805f6060848603121562000300575f80fd5b83516200030d81620002d5565b60208501519093506200032081620002d5565b60408501519092506200033381620002d5565b809150509250925092565b5f602082840312156200034f575f80fd5b81516200035c81620002d5565b9392505050565b5f6020828403121562000374575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620003a457607f821691505b602082108103620003c357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200041457805f5260205f20601f840160051c81016020851015620003f05750805b601f840160051c820191505b8181101562000411575f8155600101620003fc565b50505b505050565b81516001600160401b038111156200043557620004356200037b565b6200044d816200044684546200038f565b84620003c9565b602080601f83116001811462000483575f84156200046b5750858301515b5f19600386901b1c1916600185901b178555620004dd565b5f85815260208120601f198616915b82811015620004b35788860151825594840194600190910190840162000492565b5085821015620004d157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a051615528620005ee5f395f818161046901528181610acc01528181610b6e01528181610bf701528181611863015281816118f20152818161199e01528181611a6d01528181611ad901528181611b5901528181611d6701528181611e9d01528181611fc40152818161210e0152818161219101526128aa01525f81816104b601528181610a5801528181610d3e01528181610ec901528181610f750152818161127501528181611f1c015281816120440152818161223c015281816123e6015281816126a701528181612ad801528181612b8401528181612c3701528181612cb3015281816131a7015281816132f20152818161354d0152613ae401526155285ff3fe608060405234801561000f575f80fd5b5060043610610296575f3560e01c80636352211e11610161578063c93ab3fd116100ca578063e985e9c511610084578063e985e9c5146106c8578063eb8ae530146106db578063ed70554d146106ee578063f242432a1461070d578063f2fde38b14610720578063fd0cd0d914610733575f80fd5b8063c93ab3fd14610647578063cf4088231461065a578063d8c9921a1461066d578063d9a50c1214610680578063da8c229e14610693578063e0dba60f146106b5575f80fd5b8063a22cb4651161011b578063a22cb465146105d5578063a4014982146105e8578063adf4960a146105fb578063b6bcad261461060e578063c475abff14610621578063c658e08614610634575f80fd5b80636352211e146105595780636e5d6ad21461056c578063715018a6146105975780638b4dfa751461059f5780638cf8b41e146105b25780638da5cb5b146105c5575f80fd5b80631f4e1504116102035780633f15457f116101bd5780633f15457f146104b1578063402906fc146104d857806341415eab146105005780634e1273f41461051357806353095467146105335780635d3590d514610546575f80fd5b80631f4e15041461042b57806320c38e2b1461043e57806324c1af44146104515780632b20e397146104645780632eb2c2d61461048b57806333c69ea91461049e575f80fd5b80630e4cd725116102545780630e4cd725146103a05780630e89341c146103b357806314ab9038146103c6578063150b7a02146103d95780631534e177146104055780631896f70a14610418575f80fd5b8062fdd58e1461029a5780630178fe3f146102c057806301ffc9a71461030657806306fdde0314610329578063081812fc14610360578063095ea7b31461038b575b5f80fd5b6102ad6102a8366004614316565b610746565b6040519081526020015b60405180910390f35b6102d36102ce366004614340565b6107f0565b604080516001600160a01b03909416845263ffffffff90921660208401526001600160401b0316908201526060016102b7565b61031961031436600461436c565b61081f565b60405190151581526020016102b7565b6103536040518060400160405280600b81526020016a2730b6b2abb930b83832b960a91b81525081565b6040516102b791906143d4565b61037361036e366004614340565b61085e565b6040516001600160a01b0390911681526020016102b7565b61039e610399366004614316565b6108a0565b005b6103196103ae3660046143e6565b6108e5565b6103536103c1366004614340565b61095e565b61039e6103d436600461442f565b6109cc565b6103ec6103e736600461449d565b610ac0565b6040516001600160e01b031990911681526020016102b7565b61039e61041336600461450a565b610c96565b61039e6104263660046143e6565b610cc0565b600754610373906001600160a01b031681565b61035361044c366004614340565b610d75565b6102ad61045f3660046145f6565b610e0c565b6103737f000000000000000000000000000000000000000000000000000000000000000081565b61039e610499366004614717565b610fe7565b61039e6104ac3660046147bd565b61121a565b6103737f000000000000000000000000000000000000000000000000000000000000000081565b6104eb6104e6366004614811565b6113e6565b60405163ffffffff90911681526020016102b7565b61031961050e3660046143e6565b611480565b610526610521366004614832565b6114b8565b6040516102b79190614928565b600554610373906001600160a01b031681565b61039e61055436600461493a565b6115d7565b610373610567366004614340565b611655565b61057f61057a366004614978565b61165f565b6040516001600160401b0390911681526020016102b7565b61039e61178e565b61039e6105ad3660046149aa565b6117a1565b61057f6105c03660046149e9565b6118c0565b5f546001600160a01b0316610373565b61039e6105e3366004614a6b565b611c28565b6102ad6105f6366004614a97565b611cfd565b610319610609366004614b12565b611e38565b61039e61061c36600461450a565b611e5c565b6102ad61062f366004614b33565b61209e565b6102ad610642366004614b53565b6122fd565b61039e610655366004614bc0565b6124bd565b61039e610668366004614c26565b612605565b61039e61067b366004614c5b565b612794565b61031961068e366004614b33565b61285d565b6103196106a136600461450a565b60046020525f908152604090205460ff1681565b61039e6106c3366004614a6b565b612938565b6103196106d6366004614c86565b61299f565b61039e6106e9366004614cb2565b6129cc565b6102ad6106fc366004614340565b60016020525f908152604090205481565b61039e61071b366004614d15565b612d59565b61039e61072e36600461450a565b612e06565b610319610741366004614340565b612e7c565b5f6001600160a01b0383166107b65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5f6107c083611655565b9050836001600160a01b0316816001600160a01b0316036107e55760019150506107ea565b5f9150505b92915050565b5f8181526001602052604090205460a081901c60c082901c610813838383612f4d565b90959094509092509050565b5f6001600160e01b03198216631b05885b60e31b148061084f57506001600160e01b03198216630a85bd0160e11b145b806107ea57506107ea82612f80565b5f8061086983611655565b90506001600160a01b03811661088157505f92915050565b5f838152600360205260409020546001600160a01b03165b9392505050565b5f6108aa826107f0565b50915050603f1960408216016108d65760405163a2a7201360e01b8152600481018390526024016107ad565b6108e08383612fcf565b505050565b5f8080806108f2866107f0565b925092509250846001600160a01b0316836001600160a01b0316148061091d575061091d838661299f565b8061094157506001600160a01b0385166109368761085e565b6001600160a01b0316145b8015610954575061095282826130de565b155b9695505050505050565b6005546040516303a24d0760e21b8152600481018390526060916001600160a01b031690630e89341c906024015f60405180830381865afa1580156109a5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ea9190810190614d78565b816109d78133611480565b6109f857803360405163168ab55d60e31b81526004016107ad929190614dea565b8260105f610a05836107f0565b5091505063ffffffff8282161615610a335760405163a2a7201360e01b8152600481018490526024016107ad565b604051630295720760e31b8152600481018790526001600160401b03861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b5f604051808303815f87803b158015610aa2575f80fd5b505af1158015610ab4573d5f803e3d5ffd5b50505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b0a5760405163032634a760e31b815260040160405180910390fd5b5f808080610b1a86880188614e01565b83516020850120939750919550935091508890808214610b57576040516331970f3360e21b815260048101829052602481018390526044016107ad565b604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906328ed4f6c90610ba59085903090600401614dea565b5f604051808303815f87803b158015610bbc575f80fd5b505af1158015610bce573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018d90525f92506276a70091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6e4fa8690602401602060405180830381865afa158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190614e64565b610c6a9190614e8f565b9050610c7d87878761ffff16848861310d565b50630a85bd0160e11b9c9b505050505050505050505050565b610c9e613215565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b81610ccb8133611480565b610cec57803360405163168ab55d60e31b81526004016107ad929190614dea565b8260085f610cf9836107f0565b5091505063ffffffff8282161615610d275760405163a2a7201360e01b8152600481018490526024016107ad565b604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90610a8b9089908990600401614dea565b60066020525f908152604090208054610d8d90614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610db990614eb6565b8015610e045780601f10610ddb57610100808354040283529160200191610e04565b820191905f5260205f20905b815481529060010190602001808311610de757829003601f168201915b505050505081565b5f87610e188133611480565b610e3957803360405163168ab55d60e31b81526004016107ad929190614dea565b87516020890120610e4a8a8261326e565b9250610e568a8461329a565b610e6083866133d3565b610e6b8a848b613406565b50610e788a8487876134cd565b9350610e8383613510565b610f33576040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610f0a575f80fd5b505af1158015610f1c573d5f803e3d5ffd5b50505050610f2e8a848b8b89896135c6565b610fda565b6040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610fb6575f80fd5b505af1158015610fc8573d5f803e3d5ffd5b50505050610fda8a848b8b89896135fc565b5050979650505050505050565b81518351146110495760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107ad565b6001600160a01b03841661106f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b03851633148061108b575061108b853361299f565b6110f25760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107ad565b5f5b83518110156111ad575f84828151811061111057611110614f33565b602002602001015190505f84838151811061112d5761112d614f33565b602002602001015190505f805f611143856107f0565b9250925092506111548583836136b6565b83600114801561117557508a6001600160a01b0316836001600160a01b0316145b6111915760405162461bcd60e51b81526004016107ad90614f47565b61119d858b848461375d565b50505050508060010190506110f4565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516111fd929190614f91565b60405180910390a461121333868686868661379d565b5050505050565b5f611225858561326e565b905061123181846133d3565b5f808061123d846107f0565b919450925090506001600160a01b03831615806112ea57506040516302571be360e01b81526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa1580156112ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112de9190614fbe565b6001600160a01b031614155b1561130857604051635374b59960e01b815260040160405180910390fd5b5f806113138a6107f0565b90935091508a905061134f576113298633611480565b61134a57853360405163168ab55d60e31b81526004016107ad929190614dea565b61137a565b6113598a33611480565b61137a57893360405163168ab55d60e31b81526004016107ad929190614dea565b6113858689846138f7565b611390878483613932565b9650620100008416158015906113b457508363ffffffff1688851763ffffffff1614155b156113d55760405163a2a7201360e01b8152600481018790526024016107ad565b96831796610ab486868a868b613977565b5f826113f28133611480565b61141357803360405163168ab55d60e31b81526004016107ad929190614dea565b8360025f611420836107f0565b5091505063ffffffff828216161561144e5760405163a2a7201360e01b8152600481018490526024016107ad565b5f808061145a8a6107f0565b9250925092506114738a84848c61ffff16178485613977565b5098975050505050505050565b5f80808061148d866107f0565b925092509250846001600160a01b0316836001600160a01b031614806109415750610941838661299f565b6060815183511461151d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107ad565b5f83516001600160401b0381111561153757611537614525565b604051908082528060200260200182016040528015611560578160200160208202803683370190505b5090505f5b84518110156115cf576115aa85828151811061158357611583614f33565b602002602001015185838151811061159d5761159d614f33565b6020026020010151610746565b8282815181106115bc576115bc614f33565b6020908102919091010152600101611565565b509392505050565b6115df613215565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af115801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f9190614fd9565b50505050565b5f6107ea82613a1e565b5f8061166b858561326e565b905061167681613510565b61169357604051635374b59960e01b815260040160405180910390fd5b5f61169e86336108e5565b9050801580156116b557506116b38233611480565b155b156116d757813360405163168ab55d60e31b81526004016107ad929190614dea565b5f80806116e3856107f0565b925092509250831580156116fa5750620400008216155b1561171b5760405163a2a7201360e01b8152600481018690526024016107ad565b5f6117258a6107f0565b92505050611734888383613932565b97506117428685858b613a33565b6040516001600160401b038916815286907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b1329060200160405180910390a2509598975050505050505050565b611796613215565b61179f5f613a49565b565b6117b85f805160206154fc8339815191528461326e565b6117c28133611480565b6117e357803360405163168ab55d60e31b81526004016107ad929190614dea565b306001600160a01b0384160361181757604051632ca49b0d60e11b81526001600160a01b03841660048201526024016107ad565b6118376118315f805160206154fc8339815191528661326e565b83613a98565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906064015f604051808303815f87803b1580156118a4575f80fd5b505af11580156118b6573d5f803e3d5ffd5b5050505050505050565b5f8086866040516118d2929190614ff4565b6040519081900381206331a9108f60e11b82526004820181905291505f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190614fbe565b90506001600160a01b0381163314801590611a09575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa1580156119e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a079190614fd9565b155b15611a4157611a255f805160206154fc8339815191528361326e565b3360405163168ab55d60e31b81526004016107ad929190614dea565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015611aae575f80fd5b505af1158015611ac0573d5f803e3d5ffd5b5050604051630a3b53db60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506328ed4f6c9150611b129085903090600401614dea565b5f604051808303815f87803b158015611b29575f80fd5b505af1158015611b3b573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018590526276a70092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d6e4fa8690602401602060405180830381865afa158015611ba7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bcb9190614e64565b611bd59190614e8f565b9250611c1d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8816868861310d565b505095945050505050565b6001600160a01b0382163303611c925760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107ad565b335f8181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b335f9081526004602052604081205460ff16611d2b5760405162461bcd60e51b81526004016107ad90615003565b5f8787604051611d3c929190614ff4565b604051908190038120633f2891eb60e21b8252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac906064016020604051808303815f875af1158015611db5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd99190614e64565b9150611e2d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8616611e276276a70087614e8f565b8861310d565b509695505050505050565b5f80611e43846107f0565b50841663ffffffff908116908516149250505092915050565b611e64613215565b6007546001600160a01b031615611f785760075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb465906044015f604051808303815f87803b158015611ee0575f80fd5b505af1158015611ef2573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb46591506044015f604051808303815f87803b158015611f61575f80fd5b505af1158015611f73573d5f803e3d5ffd5b505050505b600780546001600160a01b0319166001600160a01b0383169081179091551561209b5760075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb465906044015f604051808303815f87803b158015612007575f80fd5b505af1158015612019573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb46591506044015f604051808303815f87803b158015612089575f80fd5b505af1158015611213573d5f803e3d5ffd5b50565b335f9081526004602052604081205460ff166120cc5760405162461bcd60e51b81526004016107ad90615003565b5f6120e45f805160206154fc8339815191528561326e565b60405163c475abff60e01b815260048101869052602481018590529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c475abff906044016020604051808303815f875af1158015612154573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121789190614e64565b6040516331a9108f60e11b8152600481018790529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156121fc575060408051601f3d908101601f191682019092526121f991810190614fbe565b60015b6122095791506107ea9050565b6001600160a01b038116301415806122b157506040516302571be360e01b81526004810184905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015612281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a59190614fbe565b6001600160a01b031614155b156122c0575091506107ea9050565b505f6122cf6276a70083614e8f565b5f8481526001602052604090205490915060a081901c6122f185838386613a33565b50919695505050505050565b5f866123098133611480565b61232a57803360405163168ab55d60e31b81526004016107ad929190614dea565b5f878760405161233b929190614ff4565b6040518091039020905061234f898261326e565b925061235b898461329a565b61236583866133d3565b5f6123a68a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061340692505050565b90506123b48a8588886134cd565b94506123bf84613510565b61246b576040516306ab592360e01b8152600481018b9052602481018390523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906306ab5923906064016020604051808303815f875af1158015612434573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124589190614e64565b506124668482898989613b83565b6124b0565b6124b08a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d92508c91508b90506135fc565b5050509695505050505050565b5f6125005f86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b6007549091506001600160a01b031661252c5760405163093075b560e21b815260040160405180910390fd5b6125368133611480565b61255757803360405163168ab55d60e31b81526004016107ad929190614dea565b5f8080612563846107f0565b919450925090505f6125748561085e565b905061257f85613c81565b60075f9054906101000a90046001600160a01b03166001600160a01b0316639198c2768a8a878787878e8e6040518963ffffffff1660e01b81526004016125cd989796959493929190615073565b5f604051808303815f87803b1580156125e4575f80fd5b505af11580156125f6573d5f803e3d5ffd5b50505050505050505050505050565b836126108133611480565b61263157803360405163168ab55d60e31b81526004016107ad929190614dea565b84601c5f61263e836107f0565b5091505063ffffffff828216161561266c5760405163a2a7201360e01b8152600481018490526024016107ad565b60405163cf40882360e01b8152600481018990523060248201526001600160a01b0387811660448301526001600160401b03871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf408823906084015f604051808303815f87803b1580156126e8575f80fd5b505af11580156126fa573d5f803e3d5ffd5b5050506001600160a01b038816905061275f575f612717896107f0565b509150506201ffff196202000082160161274f57604051632ca49b0d60e11b81526001600160a01b03891660048201526024016107ad565b612759895f613a98565b506118b6565b5f61276989611655565b905061278981898b5f1c600160405180602001604052805f815250613d1e565b505050505050505050565b61279e838361326e565b6127a88133611480565b6127c957803360405163168ab55d60e31b81526004016107ad929190614dea565b7f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b5284016128095760405163615a470360e01b815260040160405180910390fd5b6001600160a01b038216158061282757506001600160a01b03821630145b1561285057604051632ca49b0d60e11b81526001600160a01b03831660048201526024016107ad565b61164f611831858561326e565b5f80612869848461326e565b90505f61287582613510565b90505f805160206154fc83398151915285146128945791506107ea9050565b6040516331a9108f60e11b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa925050508015612915575060408051601f3d908101601f1916820190925261291291810190614fbe565b60015b612923575f925050506107ea565b6001600160a01b0316301492506107ea915050565b612940613215565b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b5f80612a105f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613dfe9050565b915091505f612a578288888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b90505f612a64828561326e565b5f818152600660205260409020909150612a7f888a8361511e565b507f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b528201612ac05760405163615a470360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015612b25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b499190614fbe565b90506001600160a01b0381163314801590612bef575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015612bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fd9565b155b15612c1157813360405163168ab55d60e31b81526004016107ad929190614dea565b6001600160a01b03861615612c9c57604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90612c6e9085908a90600401614dea565b5f604051808303815f87803b158015612c85575f80fd5b505af1158015612c97573d5f803e3d5ffd5b505050505b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390612cea9085903090600401614dea565b5f604051808303815f87803b158015612d01575f80fd5b505af1158015612d13573d5f803e3d5ffd5b50505050612789828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052508d93509150819050613b83565b6001600160a01b038416612d7f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b038516331480612d9b5750612d9b853361299f565b612df95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107ad565b6112138585858585613d1e565b612e0e613215565b6001600160a01b038116612e735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ad565b61209b81613a49565b5f8181526006602052604081208054829190612e9790614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec390614eb6565b8015612f0e5780601f10612ee557610100808354040283529160200191612f0e565b820191905f5260205f20905b815481529060010190602001808311612ef157829003601f168201915b5050505050905080515f03612f2557505f92915050565b5f80612f318382613dfe565b90925090505f612f418483613bc5565b9050610954818461285d565b5f8042836001600160401b03161015612f775761ffff1962010000851601612f73575f94505b5f93505b50929391925050565b5f6001600160e01b03198216636cdb3d1360e11b1480612fb057506001600160e01b031982166303a24d0760e21b145b806107ea57506301ffc9a760e01b6001600160e01b03198316146107ea565b5f612fd982611655565b9050806001600160a01b0316836001600160a01b0316036130465760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ad565b336001600160a01b03821614806130625750613062813361299f565b6130d45760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107ad565b6108e08383613eb2565b5f620200008381161480156108995750426130fc6276a700846151d7565b6001600160401b0316109392505050565b845160208601205f61312c5f805160206154fc8339815191528361326e565b90505f61315488604051806040016040528060058152602001626cae8d60e31b815250613f1f565b5f83815260066020526040902090915061316e82826151f7565b50613181828289620300008a1789613b83565b6001600160a01b038416156118b657604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a906131de9085908890600401614dea565b5f604051808303815f87803b1580156131f5575f80fd5b505af1158015613207573d5f803e3d5ffd5b505050505050505050505050565b5f546001600160a01b0316331461179f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ad565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b5f80806132a6846107f0565b91945092509050426001600160401b0382161080801561336657506001600160a01b038416158061336657506040516302571be360e01b8152600481018690525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335b9190614fbe565b6001600160a01b0316145b156133a4575f613375876107f0565b50915050602081161561339e5760405163a2a7201360e01b8152600481018790526024016107ad565b506133cb565b620100008316156133cb5760405163a2a7201360e01b8152600481018690526024016107ad565b505050505050565b63fffdffff81811763ffffffff16146134025760405163a2a7201360e01b8152600481018390526024016107ad565b5050565b60605f6134aa8360065f8881526020019081526020015f20805461342990614eb6565b80601f016020809104026020016040519081016040528092919081815260200182805461345590614eb6565b80156134a05780601f10613477576101008083540402835291602001916134a0565b820191905f5260205f20905b81548152906001019060200180831161348357829003601f168201915b5050505050613f1f565b5f8581526006602052604090209091506134c482826151f7565b50949350505050565b5f806134d8856107f0565b925050505f806134e9885f1c6107f0565b92509250506134f98787846138f7565b613504858483613932565b98975050505050505050565b5f8061351b83611655565b6001600160a01b0316141580156107ea57506040516302571be360e01b81526004810183905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b69190614fbe565b6001600160a01b03161492915050565b5f86815260066020526040812080546135e491879161342990614eb6565b90506135f38682868686613b83565b50505050505050565b5f8080613608886107f0565b9250925092505f61362f8860065f8d81526020019081526020015f20805461342990614eb6565b5f8a815260066020526040902080549192509061364b90614eb6565b90505f0361366c575f89815260066020526040902061366a82826151f7565b505b61367b89858886178589613977565b6001600160a01b03871661369857613693895f613a98565b610ab4565b610ab484888b5f1c600160405180602001604052805f815250613d1e565b6201ffff19620200008316016136d6576136d36276a700826151d7565b90505b42816001600160401b0316101561370f576201000082161561370a5760405162461bcd60e51b81526004016107ad90614f47565b613734565b60048216156137345760405163a2a7201360e01b8152600481018490526024016107ad565b604082165f036108e05750505f90815260036020526040902080546001600160a01b0319169055565b60c0816001600160401b0316901b60a08363ffffffff16901b846001600160a01b0316171760015f8681526020019081526020015f208190555050505050565b6001600160a01b0384163b156133cb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906137e190899089908890889088906004016152b2565b6020604051808303815f875af192505050801561381b575060408051601f3d908101601f1916820190925261381891810190615303565b60015b6138c75761382761531e565b806308c379a003613860575061383b615337565b806138465750613862565b8060405162461bcd60e51b81526004016107ad91906143d4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107ad565b6001600160e01b0319811663bc197c8160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b63ffff000082161580159060018316159082906139115750805b156112135760405163a2a7201360e01b8152600481018690526024016107ad565b5f816001600160401b0316846001600160401b03161115613951578193505b826001600160401b0316846001600160401b0316101561396f578293505b509192915050565b61398385858584613a33565b60405163ffffffff8416815285907f39873f00c80f4f94b7bd1594aebcf650f003545b74824d57ddf4939e3ff3a34b9060200160405180910390a2816001600160401b0316816001600160401b03161115611213576040516001600160401b038216815285907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b132906020015b60405180910390a25050505050565b5f80613a29836107f0565b5090949350505050565b613a3d8483613f96565b61164f8484848461375d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613aa3826001611e38565b15613ac45760405163a2a7201360e01b8152600481018390526024016107ad565b613acd82613c81565b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390613b1b9085908590600401614dea565b5f604051808303815f87803b158015613b32575f80fd5b505af1158015613b44573d5f803e3d5ffd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49150602001612993565b613b8f85848484613fcf565b847f8ce7013e8abebc55c3890a68f5a27c67c3f7efa64e584de5fb22363c606fd34085858585604051613a0f9493929190615407565b5f805f613bd28585613dfe565b909250905081613c435760018551613bea919061544d565b8414613c385760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d6500000060448201526064016107ad565b505f91506107ea9050565b613c4d8582613bc5565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b5f8181526001602052604090205460a081901c60c082901c613ca4838383612f4d565b5f86815260036020526040812080546001600160a01b0319169055909350613cd091508590848461375d565b60408051858152600160208201525f916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b5f805f613d2a866107f0565b925092509250613d3b8683836136b6565b846001148015613d5c5750876001600160a01b0316836001600160a01b0316145b613d785760405162461bcd60e51b81526004016107ad90614f47565b866001600160a01b0316836001600160a01b031603613d9957505050611213565b613da58688848461375d565b60408051878152602081018790526001600160a01b03808a1692908b169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118b6338989898989614041565b5f8083518310613e505760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e6473000060448201526064016107ad565b5f848481518110613e6357613e63614f33565b016020015160f81c90508015613e8f57613e8885613e82866001615460565b836140fb565b9250613e93565b5f92505b613e9d8185615460565b613ea8906001615460565b9150509250929050565b5f81815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613ee682611655565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060600183511015613f4457604051631406d65b60e11b815260040160405180910390fd5b60ff83511115613f69578260405163e3ba295f60e01b81526004016107ad91906143d4565b82518383604051602001613f7f93929190615473565b604051602081830303815290604052905092915050565b61ffff811615801590613fae57506201000181811614155b156134025760405163a2a7201360e01b8152600481018390526024016107ad565b613fd98483613f96565b5f848152600160205260409020546001600160a01b0381161561403557613fff85613c81565b6040515f815285907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b6112138585858561411d565b6001600160a01b0384163b156133cb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061408590899089908890889088906004016154b7565b6020604051808303815f875af19250505080156140bf575060408051601f3d908101601f191682019092526140bc91810190615303565b60015b6140cb5761382761531e565b6001600160e01b0319811663f23a6e6160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b82515f906141098385615460565b1115614113575f80fd5b5091016020012090565b835f808061412a846107f0565b9194509250905063ffff000082166001600160401b038087169083161115614150578195505b42826001600160401b03161061416557958617955b6001600160a01b038416156141bc5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e0060448201526064016107ad565b6001600160a01b03881661421c5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107ad565b306001600160a01b038916036142915760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527313985b5955dc985c1c195c8818dbdb9d1c9858dd60621b60648201526084016107ad565b61429d8589898961375d565b60408051868152600160208201526001600160a01b038a16915f9133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612789335f8a88600160405180602001604052805f815250614041565b6001600160a01b038116811461209b575f80fd5b5f8060408385031215614327575f80fd5b823561433281614302565b946020939093013593505050565b5f60208284031215614350575f80fd5b5035919050565b6001600160e01b03198116811461209b575f80fd5b5f6020828403121561437c575f80fd5b813561089981614357565b5f5b838110156143a1578181015183820152602001614389565b50505f910152565b5f81518084526143c0816020860160208601614387565b601f01601f19169290920160200192915050565b602081525f61089960208301846143a9565b5f80604083850312156143f7575f80fd5b82359150602083013561440981614302565b809150509250929050565b80356001600160401b038116811461442a575f80fd5b919050565b5f8060408385031215614440575f80fd5b8235915061445060208401614414565b90509250929050565b5f8083601f840112614469575f80fd5b5081356001600160401b0381111561447f575f80fd5b602083019150836020828501011115614496575f80fd5b9250929050565b5f805f805f608086880312156144b1575f80fd5b85356144bc81614302565b945060208601356144cc81614302565b93506040860135925060608601356001600160401b038111156144ed575f80fd5b6144f988828901614459565b969995985093965092949392505050565b5f6020828403121561451a575f80fd5b813561089981614302565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b038111828210171561455e5761455e614525565b6040525050565b5f6001600160401b0382111561457d5761457d614525565b50601f01601f191660200190565b5f82601f83011261459a575f80fd5b81356145a581614565565b6040516145b28282614539565b8281528560208487010111156145c6575f80fd5b826020860160208301375f92810160200192909252509392505050565b803563ffffffff8116811461442a575f80fd5b5f805f805f805f60e0888a03121561460c575f80fd5b8735965060208801356001600160401b03811115614628575f80fd5b6146348a828b0161458b565b965050604088013561464581614302565b9450606088013561465581614302565b935061466360808901614414565b925061467160a089016145e3565b915061467f60c08901614414565b905092959891949750929550565b5f6001600160401b038211156146a5576146a5614525565b5060051b60200190565b5f82601f8301126146be575f80fd5b813560206146cb8261468d565b6040516146d88282614539565b80915083815260208101915060208460051b8701019350868411156146fb575f80fd5b602086015b84811015611e2d5780358352918301918301614700565b5f805f805f60a0868803121561472b575f80fd5b853561473681614302565b9450602086013561474681614302565b935060408601356001600160401b0380821115614761575f80fd5b61476d89838a016146af565b94506060880135915080821115614782575f80fd5b61478e89838a016146af565b935060808801359150808211156147a3575f80fd5b506147b08882890161458b565b9150509295509295909350565b5f805f80608085870312156147d0575f80fd5b84359350602085013592506147e7604086016145e3565b91506147f560608601614414565b905092959194509250565b803561ffff8116811461442a575f80fd5b5f8060408385031215614822575f80fd5b8235915061445060208401614800565b5f8060408385031215614843575f80fd5b82356001600160401b0380821115614859575f80fd5b818501915085601f83011261486c575f80fd5b813560206148798261468d565b6040516148868282614539565b83815260059390931b85018201928281019150898411156148a5575f80fd5b948201945b838610156148cc5785356148bd81614302565b825294820194908201906148aa565b965050860135925050808211156148e1575f80fd5b50613ea8858286016146af565b5f815180845260208085019450602084015f5b8381101561491d57815187529582019590820190600101614901565b509495945050505050565b602081525f61089960208301846148ee565b5f805f6060848603121561494c575f80fd5b833561495781614302565b9250602084013561496781614302565b929592945050506040919091013590565b5f805f6060848603121561498a575f80fd5b83359250602084013591506149a160408501614414565b90509250925092565b5f805f606084860312156149bc575f80fd5b8335925060208401356149ce81614302565b915060408401356149de81614302565b809150509250925092565b5f805f805f608086880312156149fd575f80fd5b85356001600160401b03811115614a12575f80fd5b614a1e88828901614459565b9096509450506020860135614a3281614302565b9250614a4060408701614800565b91506060860135614a5081614302565b809150509295509295909350565b801515811461209b575f80fd5b5f8060408385031215614a7c575f80fd5b8235614a8781614302565b9150602083013561440981614a5e565b5f805f805f8060a08789031215614aac575f80fd5b86356001600160401b03811115614ac1575f80fd5b614acd89828a01614459565b9097509550506020870135614ae181614302565b9350604087013592506060870135614af881614302565b9150614b0660808801614800565b90509295509295509295565b5f8060408385031215614b23575f80fd5b82359150614450602084016145e3565b5f8060408385031215614b44575f80fd5b50508035926020909101359150565b5f805f805f8060a08789031215614b68575f80fd5b8635955060208701356001600160401b03811115614b84575f80fd5b614b9089828a01614459565b9096509450506040870135614ba481614302565b9250614bb2606088016145e3565b9150614b0660808801614414565b5f805f8060408587031215614bd3575f80fd5b84356001600160401b0380821115614be9575f80fd5b614bf588838901614459565b90965094506020870135915080821115614c0d575f80fd5b50614c1a87828801614459565b95989497509550505050565b5f805f8060808587031215614c39575f80fd5b843593506020850135614c4b81614302565b925060408501356147e781614302565b5f805f60608486031215614c6d575f80fd5b833592506020840135915060408401356149de81614302565b5f8060408385031215614c97575f80fd5b8235614ca281614302565b9150602083013561440981614302565b5f805f8060608587031215614cc5575f80fd5b84356001600160401b03811115614cda575f80fd5b614ce687828801614459565b9095509350506020850135614cfa81614302565b91506040850135614d0a81614302565b939692955090935050565b5f805f805f60a08688031215614d29575f80fd5b8535614d3481614302565b94506020860135614d4481614302565b9350604086013592506060860135915060808601356001600160401b03811115614d6c575f80fd5b6147b08882890161458b565b5f60208284031215614d88575f80fd5b81516001600160401b03811115614d9d575f80fd5b8201601f81018413614dad575f80fd5b8051614db881614565565b604051614dc58282614539565b828152866020848601011115614dd9575f80fd5b610954836020830160208701614387565b9182526001600160a01b0316602082015260400190565b5f805f8060808587031215614e14575f80fd5b84356001600160401b03811115614e29575f80fd5b614e358782880161458b565b9450506020850135614e4681614302565b9250614e5460408601614800565b91506060850135614d0a81614302565b5f60208284031215614e74575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115614eaf57614eaf614e7b565b5092915050565b600181811c90821680614eca57607f821691505b602082108103614ee857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081525f614fa360408301856148ee565b8281036020840152614fb581856148ee565b95945050505050565b5f60208284031215614fce575f80fd5b815161089981614302565b5f60208284031215614fe9575f80fd5b815161089981614a5e565b818382375f9101908152919050565b60208082526028908201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60c081525f61508660c083018a8c61504b565b6001600160a01b03898116602085015263ffffffff891660408501526001600160401b03881660608501528616608084015282810360a08401526150cb81858761504b565b9b9a5050505050505050505050565b601f8211156108e057805f5260205f20601f840160051c810160208510156150ff5750805b601f840160051c820191505b81811015611213575f815560010161510b565b6001600160401b0383111561513557615135614525565b615149836151438354614eb6565b836150da565b5f601f84116001811461517a575f85156151635750838201355b5f19600387901b1c1916600186901b178355611213565b5f83815260208120601f198716915b828110156151a95786850135825560209485019460019092019101615189565b50868210156151c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b03828116828216039080821115614eaf57614eaf614e7b565b81516001600160401b0381111561521057615210614525565b6152248161521e8454614eb6565b846150da565b602080601f831160018114615257575f84156152405750858301515b5f19600386901b1c1916600185901b1785556133cb565b5f85815260208120601f198616915b8281101561528557888601518255948401946001909101908401615266565b50858210156152a257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a0604082018190525f906152dd908301866148ee565b82810360608401526152ef81866148ee565b9050828103608084015261350481856143a9565b5f60208284031215615313575f80fd5b815161089981614357565b5f60033d11156153345760045f803e505f5160e01c5b90565b5f60443d10156153445790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561537357505050505090565b828501915081518181111561538b5750505050505090565b843d87010160208285010111156153a55750505050505090565b6153b460208286010187614539565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b608081525f61541960808301876143a9565b6001600160a01b039590951660208301525063ffffffff9290921660408301526001600160401b0316606090910152919050565b818103818111156107ea576107ea614e7b565b808201808211156107ea576107ea614e7b565b60ff60f81b8460f81b1681525f8351615493816001850160208801614387565b8351908301906154aa816001840160208801614387565b0160010195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906154f0908301846143a9565b97965050505050505056fe93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4aea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610296575f3560e01c80636352211e11610161578063c93ab3fd116100ca578063e985e9c511610084578063e985e9c5146106c8578063eb8ae530146106db578063ed70554d146106ee578063f242432a1461070d578063f2fde38b14610720578063fd0cd0d914610733575f80fd5b8063c93ab3fd14610647578063cf4088231461065a578063d8c9921a1461066d578063d9a50c1214610680578063da8c229e14610693578063e0dba60f146106b5575f80fd5b8063a22cb4651161011b578063a22cb465146105d5578063a4014982146105e8578063adf4960a146105fb578063b6bcad261461060e578063c475abff14610621578063c658e08614610634575f80fd5b80636352211e146105595780636e5d6ad21461056c578063715018a6146105975780638b4dfa751461059f5780638cf8b41e146105b25780638da5cb5b146105c5575f80fd5b80631f4e1504116102035780633f15457f116101bd5780633f15457f146104b1578063402906fc146104d857806341415eab146105005780634e1273f41461051357806353095467146105335780635d3590d514610546575f80fd5b80631f4e15041461042b57806320c38e2b1461043e57806324c1af44146104515780632b20e397146104645780632eb2c2d61461048b57806333c69ea91461049e575f80fd5b80630e4cd725116102545780630e4cd725146103a05780630e89341c146103b357806314ab9038146103c6578063150b7a02146103d95780631534e177146104055780631896f70a14610418575f80fd5b8062fdd58e1461029a5780630178fe3f146102c057806301ffc9a71461030657806306fdde0314610329578063081812fc14610360578063095ea7b31461038b575b5f80fd5b6102ad6102a8366004614316565b610746565b6040519081526020015b60405180910390f35b6102d36102ce366004614340565b6107f0565b604080516001600160a01b03909416845263ffffffff90921660208401526001600160401b0316908201526060016102b7565b61031961031436600461436c565b61081f565b60405190151581526020016102b7565b6103536040518060400160405280600b81526020016a2730b6b2abb930b83832b960a91b81525081565b6040516102b791906143d4565b61037361036e366004614340565b61085e565b6040516001600160a01b0390911681526020016102b7565b61039e610399366004614316565b6108a0565b005b6103196103ae3660046143e6565b6108e5565b6103536103c1366004614340565b61095e565b61039e6103d436600461442f565b6109cc565b6103ec6103e736600461449d565b610ac0565b6040516001600160e01b031990911681526020016102b7565b61039e61041336600461450a565b610c96565b61039e6104263660046143e6565b610cc0565b600754610373906001600160a01b031681565b61035361044c366004614340565b610d75565b6102ad61045f3660046145f6565b610e0c565b6103737f000000000000000000000000000000000000000000000000000000000000000081565b61039e610499366004614717565b610fe7565b61039e6104ac3660046147bd565b61121a565b6103737f000000000000000000000000000000000000000000000000000000000000000081565b6104eb6104e6366004614811565b6113e6565b60405163ffffffff90911681526020016102b7565b61031961050e3660046143e6565b611480565b610526610521366004614832565b6114b8565b6040516102b79190614928565b600554610373906001600160a01b031681565b61039e61055436600461493a565b6115d7565b610373610567366004614340565b611655565b61057f61057a366004614978565b61165f565b6040516001600160401b0390911681526020016102b7565b61039e61178e565b61039e6105ad3660046149aa565b6117a1565b61057f6105c03660046149e9565b6118c0565b5f546001600160a01b0316610373565b61039e6105e3366004614a6b565b611c28565b6102ad6105f6366004614a97565b611cfd565b610319610609366004614b12565b611e38565b61039e61061c36600461450a565b611e5c565b6102ad61062f366004614b33565b61209e565b6102ad610642366004614b53565b6122fd565b61039e610655366004614bc0565b6124bd565b61039e610668366004614c26565b612605565b61039e61067b366004614c5b565b612794565b61031961068e366004614b33565b61285d565b6103196106a136600461450a565b60046020525f908152604090205460ff1681565b61039e6106c3366004614a6b565b612938565b6103196106d6366004614c86565b61299f565b61039e6106e9366004614cb2565b6129cc565b6102ad6106fc366004614340565b60016020525f908152604090205481565b61039e61071b366004614d15565b612d59565b61039e61072e36600461450a565b612e06565b610319610741366004614340565b612e7c565b5f6001600160a01b0383166107b65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5f6107c083611655565b9050836001600160a01b0316816001600160a01b0316036107e55760019150506107ea565b5f9150505b92915050565b5f8181526001602052604090205460a081901c60c082901c610813838383612f4d565b90959094509092509050565b5f6001600160e01b03198216631b05885b60e31b148061084f57506001600160e01b03198216630a85bd0160e11b145b806107ea57506107ea82612f80565b5f8061086983611655565b90506001600160a01b03811661088157505f92915050565b5f838152600360205260409020546001600160a01b03165b9392505050565b5f6108aa826107f0565b50915050603f1960408216016108d65760405163a2a7201360e01b8152600481018390526024016107ad565b6108e08383612fcf565b505050565b5f8080806108f2866107f0565b925092509250846001600160a01b0316836001600160a01b0316148061091d575061091d838661299f565b8061094157506001600160a01b0385166109368761085e565b6001600160a01b0316145b8015610954575061095282826130de565b155b9695505050505050565b6005546040516303a24d0760e21b8152600481018390526060916001600160a01b031690630e89341c906024015f60405180830381865afa1580156109a5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ea9190810190614d78565b816109d78133611480565b6109f857803360405163168ab55d60e31b81526004016107ad929190614dea565b8260105f610a05836107f0565b5091505063ffffffff8282161615610a335760405163a2a7201360e01b8152600481018490526024016107ad565b604051630295720760e31b8152600481018790526001600160401b03861660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906314ab9038906044015b5f604051808303815f87803b158015610aa2575f80fd5b505af1158015610ab4573d5f803e3d5ffd5b50505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b0a5760405163032634a760e31b815260040160405180910390fd5b5f808080610b1a86880188614e01565b83516020850120939750919550935091508890808214610b57576040516331970f3360e21b815260048101829052602481018390526044016107ad565b604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906328ed4f6c90610ba59085903090600401614dea565b5f604051808303815f87803b158015610bbc575f80fd5b505af1158015610bce573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018d90525f92506276a70091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6e4fa8690602401602060405180830381865afa158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190614e64565b610c6a9190614e8f565b9050610c7d87878761ffff16848861310d565b50630a85bd0160e11b9c9b505050505050505050505050565b610c9e613215565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b81610ccb8133611480565b610cec57803360405163168ab55d60e31b81526004016107ad929190614dea565b8260085f610cf9836107f0565b5091505063ffffffff8282161615610d275760405163a2a7201360e01b8152600481018490526024016107ad565b604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90610a8b9089908990600401614dea565b60066020525f908152604090208054610d8d90614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610db990614eb6565b8015610e045780601f10610ddb57610100808354040283529160200191610e04565b820191905f5260205f20905b815481529060010190602001808311610de757829003601f168201915b505050505081565b5f87610e188133611480565b610e3957803360405163168ab55d60e31b81526004016107ad929190614dea565b87516020890120610e4a8a8261326e565b9250610e568a8461329a565b610e6083866133d3565b610e6b8a848b613406565b50610e788a8487876134cd565b9350610e8383613510565b610f33576040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610f0a575f80fd5b505af1158015610f1c573d5f803e3d5ffd5b50505050610f2e8a848b8b89896135c6565b610fda565b6040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610fb6575f80fd5b505af1158015610fc8573d5f803e3d5ffd5b50505050610fda8a848b8b89896135fc565b5050979650505050505050565b81518351146110495760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107ad565b6001600160a01b03841661106f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b03851633148061108b575061108b853361299f565b6110f25760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107ad565b5f5b83518110156111ad575f84828151811061111057611110614f33565b602002602001015190505f84838151811061112d5761112d614f33565b602002602001015190505f805f611143856107f0565b9250925092506111548583836136b6565b83600114801561117557508a6001600160a01b0316836001600160a01b0316145b6111915760405162461bcd60e51b81526004016107ad90614f47565b61119d858b848461375d565b50505050508060010190506110f4565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516111fd929190614f91565b60405180910390a461121333868686868661379d565b5050505050565b5f611225858561326e565b905061123181846133d3565b5f808061123d846107f0565b919450925090506001600160a01b03831615806112ea57506040516302571be360e01b81526004810185905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa1580156112ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112de9190614fbe565b6001600160a01b031614155b1561130857604051635374b59960e01b815260040160405180910390fd5b5f806113138a6107f0565b90935091508a905061134f576113298633611480565b61134a57853360405163168ab55d60e31b81526004016107ad929190614dea565b61137a565b6113598a33611480565b61137a57893360405163168ab55d60e31b81526004016107ad929190614dea565b6113858689846138f7565b611390878483613932565b9650620100008416158015906113b457508363ffffffff1688851763ffffffff1614155b156113d55760405163a2a7201360e01b8152600481018790526024016107ad565b96831796610ab486868a868b613977565b5f826113f28133611480565b61141357803360405163168ab55d60e31b81526004016107ad929190614dea565b8360025f611420836107f0565b5091505063ffffffff828216161561144e5760405163a2a7201360e01b8152600481018490526024016107ad565b5f808061145a8a6107f0565b9250925092506114738a84848c61ffff16178485613977565b5098975050505050505050565b5f80808061148d866107f0565b925092509250846001600160a01b0316836001600160a01b031614806109415750610941838661299f565b6060815183511461151d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107ad565b5f83516001600160401b0381111561153757611537614525565b604051908082528060200260200182016040528015611560578160200160208202803683370190505b5090505f5b84518110156115cf576115aa85828151811061158357611583614f33565b602002602001015185838151811061159d5761159d614f33565b6020026020010151610746565b8282815181106115bc576115bc614f33565b6020908102919091010152600101611565565b509392505050565b6115df613215565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af115801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f9190614fd9565b50505050565b5f6107ea82613a1e565b5f8061166b858561326e565b905061167681613510565b61169357604051635374b59960e01b815260040160405180910390fd5b5f61169e86336108e5565b9050801580156116b557506116b38233611480565b155b156116d757813360405163168ab55d60e31b81526004016107ad929190614dea565b5f80806116e3856107f0565b925092509250831580156116fa5750620400008216155b1561171b5760405163a2a7201360e01b8152600481018690526024016107ad565b5f6117258a6107f0565b92505050611734888383613932565b97506117428685858b613a33565b6040516001600160401b038916815286907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b1329060200160405180910390a2509598975050505050505050565b611796613215565b61179f5f613a49565b565b6117b85f805160206154fc8339815191528461326e565b6117c28133611480565b6117e357803360405163168ab55d60e31b81526004016107ad929190614dea565b306001600160a01b0384160361181757604051632ca49b0d60e11b81526001600160a01b03841660048201526024016107ad565b6118376118315f805160206154fc8339815191528661326e565b83613a98565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906064015f604051808303815f87803b1580156118a4575f80fd5b505af11580156118b6573d5f803e3d5ffd5b5050505050505050565b5f8086866040516118d2929190614ff4565b6040519081900381206331a9108f60e11b82526004820181905291505f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190614fbe565b90506001600160a01b0381163314801590611a09575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa1580156119e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a079190614fd9565b155b15611a4157611a255f805160206154fc8339815191528361326e565b3360405163168ab55d60e31b81526004016107ad929190614dea565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015611aae575f80fd5b505af1158015611ac0573d5f803e3d5ffd5b5050604051630a3b53db60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506328ed4f6c9150611b129085903090600401614dea565b5f604051808303815f87803b158015611b29575f80fd5b505af1158015611b3b573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018590526276a70092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d6e4fa8690602401602060405180830381865afa158015611ba7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bcb9190614e64565b611bd59190614e8f565b9250611c1d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8816868861310d565b505095945050505050565b6001600160a01b0382163303611c925760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107ad565b335f8181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b335f9081526004602052604081205460ff16611d2b5760405162461bcd60e51b81526004016107ad90615003565b5f8787604051611d3c929190614ff4565b604051908190038120633f2891eb60e21b8252600482018190523060248301526044820187905291507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fca247ac906064016020604051808303815f875af1158015611db5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd99190614e64565b9150611e2d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8616611e276276a70087614e8f565b8861310d565b509695505050505050565b5f80611e43846107f0565b50841663ffffffff908116908516149250505092915050565b611e64613215565b6007546001600160a01b031615611f785760075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb465906044015f604051808303815f87803b158015611ee0575f80fd5b505af1158015611ef2573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb46591506044015f604051808303815f87803b158015611f61575f80fd5b505af1158015611f73573d5f803e3d5ffd5b505050505b600780546001600160a01b0319166001600160a01b0383169081179091551561209b5760075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a22cb465906044015f604051808303815f87803b158015612007575f80fd5b505af1158015612019573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063a22cb46591506044015f604051808303815f87803b158015612089575f80fd5b505af1158015611213573d5f803e3d5ffd5b50565b335f9081526004602052604081205460ff166120cc5760405162461bcd60e51b81526004016107ad90615003565b5f6120e45f805160206154fc8339815191528561326e565b60405163c475abff60e01b815260048101869052602481018590529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c475abff906044016020604051808303815f875af1158015612154573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121789190614e64565b6040516331a9108f60e11b8152600481018790529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156121fc575060408051601f3d908101601f191682019092526121f991810190614fbe565b60015b6122095791506107ea9050565b6001600160a01b038116301415806122b157506040516302571be360e01b81526004810184905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015612281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a59190614fbe565b6001600160a01b031614155b156122c0575091506107ea9050565b505f6122cf6276a70083614e8f565b5f8481526001602052604090205490915060a081901c6122f185838386613a33565b50919695505050505050565b5f866123098133611480565b61232a57803360405163168ab55d60e31b81526004016107ad929190614dea565b5f878760405161233b929190614ff4565b6040518091039020905061234f898261326e565b925061235b898461329a565b61236583866133d3565b5f6123a68a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061340692505050565b90506123b48a8588886134cd565b94506123bf84613510565b61246b576040516306ab592360e01b8152600481018b9052602481018390523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906306ab5923906064016020604051808303815f875af1158015612434573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124589190614e64565b506124668482898989613b83565b6124b0565b6124b08a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d92508c91508b90506135fc565b5050509695505050505050565b5f6125005f86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b6007549091506001600160a01b031661252c5760405163093075b560e21b815260040160405180910390fd5b6125368133611480565b61255757803360405163168ab55d60e31b81526004016107ad929190614dea565b5f8080612563846107f0565b919450925090505f6125748561085e565b905061257f85613c81565b60075f9054906101000a90046001600160a01b03166001600160a01b0316639198c2768a8a878787878e8e6040518963ffffffff1660e01b81526004016125cd989796959493929190615073565b5f604051808303815f87803b1580156125e4575f80fd5b505af11580156125f6573d5f803e3d5ffd5b50505050505050505050505050565b836126108133611480565b61263157803360405163168ab55d60e31b81526004016107ad929190614dea565b84601c5f61263e836107f0565b5091505063ffffffff828216161561266c5760405163a2a7201360e01b8152600481018490526024016107ad565b60405163cf40882360e01b8152600481018990523060248201526001600160a01b0387811660448301526001600160401b03871660648301527f0000000000000000000000000000000000000000000000000000000000000000169063cf408823906084015f604051808303815f87803b1580156126e8575f80fd5b505af11580156126fa573d5f803e3d5ffd5b5050506001600160a01b038816905061275f575f612717896107f0565b509150506201ffff196202000082160161274f57604051632ca49b0d60e11b81526001600160a01b03891660048201526024016107ad565b612759895f613a98565b506118b6565b5f61276989611655565b905061278981898b5f1c600160405180602001604052805f815250613d1e565b505050505050505050565b61279e838361326e565b6127a88133611480565b6127c957803360405163168ab55d60e31b81526004016107ad929190614dea565b7f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b5284016128095760405163615a470360e01b815260040160405180910390fd5b6001600160a01b038216158061282757506001600160a01b03821630145b1561285057604051632ca49b0d60e11b81526001600160a01b03831660048201526024016107ad565b61164f611831858561326e565b5f80612869848461326e565b90505f61287582613510565b90505f805160206154fc83398151915285146128945791506107ea9050565b6040516331a9108f60e11b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa925050508015612915575060408051601f3d908101601f1916820190925261291291810190614fbe565b60015b612923575f925050506107ea565b6001600160a01b0316301492506107ea915050565b612940613215565b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b5f80612a105f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613dfe9050565b915091505f612a578288888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b90505f612a64828561326e565b5f818152600660205260409020909150612a7f888a8361511e565b507f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b528201612ac05760405163615a470360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015612b25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b499190614fbe565b90506001600160a01b0381163314801590612bef575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015612bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fd9565b155b15612c1157813360405163168ab55d60e31b81526004016107ad929190614dea565b6001600160a01b03861615612c9c57604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a90612c6e9085908a90600401614dea565b5f604051808303815f87803b158015612c85575f80fd5b505af1158015612c97573d5f803e3d5ffd5b505050505b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390612cea9085903090600401614dea565b5f604051808303815f87803b158015612d01575f80fd5b505af1158015612d13573d5f803e3d5ffd5b50505050612789828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052508d93509150819050613b83565b6001600160a01b038416612d7f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b038516331480612d9b5750612d9b853361299f565b612df95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107ad565b6112138585858585613d1e565b612e0e613215565b6001600160a01b038116612e735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ad565b61209b81613a49565b5f8181526006602052604081208054829190612e9790614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec390614eb6565b8015612f0e5780601f10612ee557610100808354040283529160200191612f0e565b820191905f5260205f20905b815481529060010190602001808311612ef157829003601f168201915b5050505050905080515f03612f2557505f92915050565b5f80612f318382613dfe565b90925090505f612f418483613bc5565b9050610954818461285d565b5f8042836001600160401b03161015612f775761ffff1962010000851601612f73575f94505b5f93505b50929391925050565b5f6001600160e01b03198216636cdb3d1360e11b1480612fb057506001600160e01b031982166303a24d0760e21b145b806107ea57506301ffc9a760e01b6001600160e01b03198316146107ea565b5f612fd982611655565b9050806001600160a01b0316836001600160a01b0316036130465760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ad565b336001600160a01b03821614806130625750613062813361299f565b6130d45760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107ad565b6108e08383613eb2565b5f620200008381161480156108995750426130fc6276a700846151d7565b6001600160401b0316109392505050565b845160208601205f61312c5f805160206154fc8339815191528361326e565b90505f61315488604051806040016040528060058152602001626cae8d60e31b815250613f1f565b5f83815260066020526040902090915061316e82826151f7565b50613181828289620300008a1789613b83565b6001600160a01b038416156118b657604051630c4b7b8560e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631896f70a906131de9085908890600401614dea565b5f604051808303815f87803b1580156131f5575f80fd5b505af1158015613207573d5f803e3d5ffd5b505050505050505050505050565b5f546001600160a01b0316331461179f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ad565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b5f80806132a6846107f0565b91945092509050426001600160401b0382161080801561336657506001600160a01b038416158061336657506040516302571be360e01b8152600481018690525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335b9190614fbe565b6001600160a01b0316145b156133a4575f613375876107f0565b50915050602081161561339e5760405163a2a7201360e01b8152600481018790526024016107ad565b506133cb565b620100008316156133cb5760405163a2a7201360e01b8152600481018690526024016107ad565b505050505050565b63fffdffff81811763ffffffff16146134025760405163a2a7201360e01b8152600481018390526024016107ad565b5050565b60605f6134aa8360065f8881526020019081526020015f20805461342990614eb6565b80601f016020809104026020016040519081016040528092919081815260200182805461345590614eb6565b80156134a05780601f10613477576101008083540402835291602001916134a0565b820191905f5260205f20905b81548152906001019060200180831161348357829003601f168201915b5050505050613f1f565b5f8581526006602052604090209091506134c482826151f7565b50949350505050565b5f806134d8856107f0565b925050505f806134e9885f1c6107f0565b92509250506134f98787846138f7565b613504858483613932565b98975050505050505050565b5f8061351b83611655565b6001600160a01b0316141580156107ea57506040516302571be360e01b81526004810183905230906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302571be390602401602060405180830381865afa158015613592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b69190614fbe565b6001600160a01b03161492915050565b5f86815260066020526040812080546135e491879161342990614eb6565b90506135f38682868686613b83565b50505050505050565b5f8080613608886107f0565b9250925092505f61362f8860065f8d81526020019081526020015f20805461342990614eb6565b5f8a815260066020526040902080549192509061364b90614eb6565b90505f0361366c575f89815260066020526040902061366a82826151f7565b505b61367b89858886178589613977565b6001600160a01b03871661369857613693895f613a98565b610ab4565b610ab484888b5f1c600160405180602001604052805f815250613d1e565b6201ffff19620200008316016136d6576136d36276a700826151d7565b90505b42816001600160401b0316101561370f576201000082161561370a5760405162461bcd60e51b81526004016107ad90614f47565b613734565b60048216156137345760405163a2a7201360e01b8152600481018490526024016107ad565b604082165f036108e05750505f90815260036020526040902080546001600160a01b0319169055565b60c0816001600160401b0316901b60a08363ffffffff16901b846001600160a01b0316171760015f8681526020019081526020015f208190555050505050565b6001600160a01b0384163b156133cb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906137e190899089908890889088906004016152b2565b6020604051808303815f875af192505050801561381b575060408051601f3d908101601f1916820190925261381891810190615303565b60015b6138c75761382761531e565b806308c379a003613860575061383b615337565b806138465750613862565b8060405162461bcd60e51b81526004016107ad91906143d4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107ad565b6001600160e01b0319811663bc197c8160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b63ffff000082161580159060018316159082906139115750805b156112135760405163a2a7201360e01b8152600481018690526024016107ad565b5f816001600160401b0316846001600160401b03161115613951578193505b826001600160401b0316846001600160401b0316101561396f578293505b509192915050565b61398385858584613a33565b60405163ffffffff8416815285907f39873f00c80f4f94b7bd1594aebcf650f003545b74824d57ddf4939e3ff3a34b9060200160405180910390a2816001600160401b0316816001600160401b03161115611213576040516001600160401b038216815285907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b132906020015b60405180910390a25050505050565b5f80613a29836107f0565b5090949350505050565b613a3d8483613f96565b61164f8484848461375d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613aa3826001611e38565b15613ac45760405163a2a7201360e01b8152600481018390526024016107ad565b613acd82613c81565b604051635b0fc9c360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635b0fc9c390613b1b9085908590600401614dea565b5f604051808303815f87803b158015613b32575f80fd5b505af1158015613b44573d5f803e3d5ffd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49150602001612993565b613b8f85848484613fcf565b847f8ce7013e8abebc55c3890a68f5a27c67c3f7efa64e584de5fb22363c606fd34085858585604051613a0f9493929190615407565b5f805f613bd28585613dfe565b909250905081613c435760018551613bea919061544d565b8414613c385760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d6500000060448201526064016107ad565b505f91506107ea9050565b613c4d8582613bc5565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b5f8181526001602052604090205460a081901c60c082901c613ca4838383612f4d565b5f86815260036020526040812080546001600160a01b0319169055909350613cd091508590848461375d565b60408051858152600160208201525f916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b5f805f613d2a866107f0565b925092509250613d3b8683836136b6565b846001148015613d5c5750876001600160a01b0316836001600160a01b0316145b613d785760405162461bcd60e51b81526004016107ad90614f47565b866001600160a01b0316836001600160a01b031603613d9957505050611213565b613da58688848461375d565b60408051878152602081018790526001600160a01b03808a1692908b169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118b6338989898989614041565b5f8083518310613e505760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e6473000060448201526064016107ad565b5f848481518110613e6357613e63614f33565b016020015160f81c90508015613e8f57613e8885613e82866001615460565b836140fb565b9250613e93565b5f92505b613e9d8185615460565b613ea8906001615460565b9150509250929050565b5f81815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613ee682611655565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060600183511015613f4457604051631406d65b60e11b815260040160405180910390fd5b60ff83511115613f69578260405163e3ba295f60e01b81526004016107ad91906143d4565b82518383604051602001613f7f93929190615473565b604051602081830303815290604052905092915050565b61ffff811615801590613fae57506201000181811614155b156134025760405163a2a7201360e01b8152600481018390526024016107ad565b613fd98483613f96565b5f848152600160205260409020546001600160a01b0381161561403557613fff85613c81565b6040515f815285907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b6112138585858561411d565b6001600160a01b0384163b156133cb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061408590899089908890889088906004016154b7565b6020604051808303815f875af19250505080156140bf575060408051601f3d908101601f191682019092526140bc91810190615303565b60015b6140cb5761382761531e565b6001600160e01b0319811663f23a6e6160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b82515f906141098385615460565b1115614113575f80fd5b5091016020012090565b835f808061412a846107f0565b9194509250905063ffff000082166001600160401b038087169083161115614150578195505b42826001600160401b03161061416557958617955b6001600160a01b038416156141bc5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e0060448201526064016107ad565b6001600160a01b03881661421c5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107ad565b306001600160a01b038916036142915760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527313985b5955dc985c1c195c8818dbdb9d1c9858dd60621b60648201526084016107ad565b61429d8589898961375d565b60408051868152600160208201526001600160a01b038a16915f9133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612789335f8a88600160405180602001604052805f815250614041565b6001600160a01b038116811461209b575f80fd5b5f8060408385031215614327575f80fd5b823561433281614302565b946020939093013593505050565b5f60208284031215614350575f80fd5b5035919050565b6001600160e01b03198116811461209b575f80fd5b5f6020828403121561437c575f80fd5b813561089981614357565b5f5b838110156143a1578181015183820152602001614389565b50505f910152565b5f81518084526143c0816020860160208601614387565b601f01601f19169290920160200192915050565b602081525f61089960208301846143a9565b5f80604083850312156143f7575f80fd5b82359150602083013561440981614302565b809150509250929050565b80356001600160401b038116811461442a575f80fd5b919050565b5f8060408385031215614440575f80fd5b8235915061445060208401614414565b90509250929050565b5f8083601f840112614469575f80fd5b5081356001600160401b0381111561447f575f80fd5b602083019150836020828501011115614496575f80fd5b9250929050565b5f805f805f608086880312156144b1575f80fd5b85356144bc81614302565b945060208601356144cc81614302565b93506040860135925060608601356001600160401b038111156144ed575f80fd5b6144f988828901614459565b969995985093965092949392505050565b5f6020828403121561451a575f80fd5b813561089981614302565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b038111828210171561455e5761455e614525565b6040525050565b5f6001600160401b0382111561457d5761457d614525565b50601f01601f191660200190565b5f82601f83011261459a575f80fd5b81356145a581614565565b6040516145b28282614539565b8281528560208487010111156145c6575f80fd5b826020860160208301375f92810160200192909252509392505050565b803563ffffffff8116811461442a575f80fd5b5f805f805f805f60e0888a03121561460c575f80fd5b8735965060208801356001600160401b03811115614628575f80fd5b6146348a828b0161458b565b965050604088013561464581614302565b9450606088013561465581614302565b935061466360808901614414565b925061467160a089016145e3565b915061467f60c08901614414565b905092959891949750929550565b5f6001600160401b038211156146a5576146a5614525565b5060051b60200190565b5f82601f8301126146be575f80fd5b813560206146cb8261468d565b6040516146d88282614539565b80915083815260208101915060208460051b8701019350868411156146fb575f80fd5b602086015b84811015611e2d5780358352918301918301614700565b5f805f805f60a0868803121561472b575f80fd5b853561473681614302565b9450602086013561474681614302565b935060408601356001600160401b0380821115614761575f80fd5b61476d89838a016146af565b94506060880135915080821115614782575f80fd5b61478e89838a016146af565b935060808801359150808211156147a3575f80fd5b506147b08882890161458b565b9150509295509295909350565b5f805f80608085870312156147d0575f80fd5b84359350602085013592506147e7604086016145e3565b91506147f560608601614414565b905092959194509250565b803561ffff8116811461442a575f80fd5b5f8060408385031215614822575f80fd5b8235915061445060208401614800565b5f8060408385031215614843575f80fd5b82356001600160401b0380821115614859575f80fd5b818501915085601f83011261486c575f80fd5b813560206148798261468d565b6040516148868282614539565b83815260059390931b85018201928281019150898411156148a5575f80fd5b948201945b838610156148cc5785356148bd81614302565b825294820194908201906148aa565b965050860135925050808211156148e1575f80fd5b50613ea8858286016146af565b5f815180845260208085019450602084015f5b8381101561491d57815187529582019590820190600101614901565b509495945050505050565b602081525f61089960208301846148ee565b5f805f6060848603121561494c575f80fd5b833561495781614302565b9250602084013561496781614302565b929592945050506040919091013590565b5f805f6060848603121561498a575f80fd5b83359250602084013591506149a160408501614414565b90509250925092565b5f805f606084860312156149bc575f80fd5b8335925060208401356149ce81614302565b915060408401356149de81614302565b809150509250925092565b5f805f805f608086880312156149fd575f80fd5b85356001600160401b03811115614a12575f80fd5b614a1e88828901614459565b9096509450506020860135614a3281614302565b9250614a4060408701614800565b91506060860135614a5081614302565b809150509295509295909350565b801515811461209b575f80fd5b5f8060408385031215614a7c575f80fd5b8235614a8781614302565b9150602083013561440981614a5e565b5f805f805f8060a08789031215614aac575f80fd5b86356001600160401b03811115614ac1575f80fd5b614acd89828a01614459565b9097509550506020870135614ae181614302565b9350604087013592506060870135614af881614302565b9150614b0660808801614800565b90509295509295509295565b5f8060408385031215614b23575f80fd5b82359150614450602084016145e3565b5f8060408385031215614b44575f80fd5b50508035926020909101359150565b5f805f805f8060a08789031215614b68575f80fd5b8635955060208701356001600160401b03811115614b84575f80fd5b614b9089828a01614459565b9096509450506040870135614ba481614302565b9250614bb2606088016145e3565b9150614b0660808801614414565b5f805f8060408587031215614bd3575f80fd5b84356001600160401b0380821115614be9575f80fd5b614bf588838901614459565b90965094506020870135915080821115614c0d575f80fd5b50614c1a87828801614459565b95989497509550505050565b5f805f8060808587031215614c39575f80fd5b843593506020850135614c4b81614302565b925060408501356147e781614302565b5f805f60608486031215614c6d575f80fd5b833592506020840135915060408401356149de81614302565b5f8060408385031215614c97575f80fd5b8235614ca281614302565b9150602083013561440981614302565b5f805f8060608587031215614cc5575f80fd5b84356001600160401b03811115614cda575f80fd5b614ce687828801614459565b9095509350506020850135614cfa81614302565b91506040850135614d0a81614302565b939692955090935050565b5f805f805f60a08688031215614d29575f80fd5b8535614d3481614302565b94506020860135614d4481614302565b9350604086013592506060860135915060808601356001600160401b03811115614d6c575f80fd5b6147b08882890161458b565b5f60208284031215614d88575f80fd5b81516001600160401b03811115614d9d575f80fd5b8201601f81018413614dad575f80fd5b8051614db881614565565b604051614dc58282614539565b828152866020848601011115614dd9575f80fd5b610954836020830160208701614387565b9182526001600160a01b0316602082015260400190565b5f805f8060808587031215614e14575f80fd5b84356001600160401b03811115614e29575f80fd5b614e358782880161458b565b9450506020850135614e4681614302565b9250614e5460408601614800565b91506060850135614d0a81614302565b5f60208284031215614e74575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115614eaf57614eaf614e7b565b5092915050565b600181811c90821680614eca57607f821691505b602082108103614ee857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081525f614fa360408301856148ee565b8281036020840152614fb581856148ee565b95945050505050565b5f60208284031215614fce575f80fd5b815161089981614302565b5f60208284031215614fe9575f80fd5b815161089981614a5e565b818382375f9101908152919050565b60208082526028908201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60c081525f61508660c083018a8c61504b565b6001600160a01b03898116602085015263ffffffff891660408501526001600160401b03881660608501528616608084015282810360a08401526150cb81858761504b565b9b9a5050505050505050505050565b601f8211156108e057805f5260205f20601f840160051c810160208510156150ff5750805b601f840160051c820191505b81811015611213575f815560010161510b565b6001600160401b0383111561513557615135614525565b615149836151438354614eb6565b836150da565b5f601f84116001811461517a575f85156151635750838201355b5f19600387901b1c1916600186901b178355611213565b5f83815260208120601f198716915b828110156151a95786850135825560209485019460019092019101615189565b50868210156151c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b03828116828216039080821115614eaf57614eaf614e7b565b81516001600160401b0381111561521057615210614525565b6152248161521e8454614eb6565b846150da565b602080601f831160018114615257575f84156152405750858301515b5f19600386901b1c1916600185901b1785556133cb565b5f85815260208120601f198616915b8281101561528557888601518255948401946001909101908401615266565b50858210156152a257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a0604082018190525f906152dd908301866148ee565b82810360608401526152ef81866148ee565b9050828103608084015261350481856143a9565b5f60208284031215615313575f80fd5b815161089981614357565b5f60033d11156153345760045f803e505f5160e01c5b90565b5f60443d10156153445790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561537357505050505090565b828501915081518181111561538b5750505050505090565b843d87010160208285010111156153a55750505050505090565b6153b460208286010187614539565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b608081525f61541960808301876143a9565b6001600160a01b039590951660208301525063ffffffff9290921660408301526001600160401b0316606090910152919050565b818103818111156107ea576107ea614e7b565b808201808211156107ea576107ea614e7b565b60ff60f81b8460f81b1681525f8351615493816001850160208801614387565b8351908301906154aa816001840160208801614387565b0160010195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906154f0908301846143a9565b97965050505050505056fe93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4aea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/OrderCombiner.json b/artifacts/OrderCombiner.json new file mode 100644 index 00000000..a2c333d2 --- /dev/null +++ b/artifacts/OrderCombiner.json @@ -0,0 +1,775 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "OrderCombiner", + "sourceName": "seaport-core/src/lib/OrderCombiner.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidFulfillmentComponentData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillmentIndex", + "type": "uint256" + } + ], + "name": "MismatchedFulfillmentOfferAndConsiderationComponents", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "MissingFulfillmentComponentOnAggregation", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [], + "name": "OfferAndConsiderationRequiredOnFulfillment", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079b38038061079b83398101604081905261002f91610301565b808080808080808061003f610164565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed919061032e565b506101a052505f90506100fe61028a565b90506001600160a01b03811661012757604051632aea588760e01b815260040160405180910390fd5b5f610131826102a3565b8015156101c0526001600160a01b0383166101e05290508061015657600163929eee14555b5050505050505050506103c2565b5f808080808061019460408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a8152602001610731606a913990505f6040518060c00160405280608481526020016105876084913990505f60405180610100016040528060d4815260200161065d60d49139905060405180608001604052806052815260200161060b6052913980519060200120965082805190602001209550818051906020012094505f8183856040516020016102639392919061037d565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102bb91906103a3565b6040515f8181818686fa925050503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909392505050565b5f60208284031215610311575f80fd5b81516001600160a01b0381168114610327575f80fd5b9392505050565b5f806040838503121561033f575f80fd5b505080516020909101519092909150565b5f81515f5b8181101561036f5760208185018101518683015201610355565b505f93019283525090919050565b5f61039a61039461038e8488610350565b86610350565b84610350565b95945050505050565b5f826103bd57634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516101626104255f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/OrderFulfiller.json b/artifacts/OrderFulfiller.json new file mode 100644 index 00000000..17fc9edc --- /dev/null +++ b/artifacts/OrderFulfiller.json @@ -0,0 +1,743 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "OrderFulfiller", + "sourceName": "seaport-core/src/lib/OrderFulfiller.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079938038061079983398101604081905261002f916102ff565b8080808080808061003e610162565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ec919061032c565b506101a052505f90506100fd610288565b90506001600160a01b03811661012657604051632aea588760e01b815260040160405180910390fd5b5f610130826102a1565b8015156101c0526001600160a01b0383166101e05290508061015557600163929eee14555b50505050505050506103c0565b5f808080808061019260408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a815260200161072f606a913990505f6040518060c00160405280608481526020016105856084913990505f60405180610100016040528060d4815260200161065b60d4913990506040518060800160405280605281526020016106096052913980519060200120965082805190602001209550818051906020012094505f8183856040516020016102619392919061037b565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102b991906103a1565b6040515f8181818686fa925050503d805f81146102f1576040519150601f19603f3d011682016040523d82523d5f602084013e6102f6565b606091505b50909392505050565b5f6020828403121561030f575f80fd5b81516001600160a01b0381168114610325575f80fd5b9392505050565b5f806040838503121561033d575f80fd5b505080516020909101519092909150565b5f81515f5b8181101561036d5760208185018101518683015201610353565b505f93019283525090919050565b5f61039861039261038c848861034e565b8661034e565b8461034e565b95945050505050565b5f826103bb57634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516101626104235f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/OrderValidator.json b/artifacts/OrderValidator.json new file mode 100644 index 00000000..9284fa68 --- /dev/null +++ b/artifacts/OrderValidator.json @@ -0,0 +1,675 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "OrderValidator", + "sourceName": "seaport-core/src/lib/OrderValidator.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079538038061079583398101604081905261002f916102fb565b808080808061003c61015e565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ea9190610328565b506101a052505f90506100fb610284565b90506001600160a01b03811661012457604051632aea588760e01b815260040160405180910390fd5b5f61012e8261029d565b8015156101c0526001600160a01b0383166101e05290508061015357600163929eee14555b5050505050506103bc565b5f808080808061018e60408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a815260200161072b606a913990505f6040518060c00160405280608481526020016105816084913990505f60405180610100016040528060d4815260200161065760d4913990506040518060800160405280605281526020016106056052913980519060200120965082805190602001209550818051906020012094505f81838560405160200161025d93929190610377565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102b5919061039d565b6040515f8181818686fa925050503d805f81146102ed576040519150601f19603f3d011682016040523d82523d5f602084013e6102f2565b606091505b50909392505050565b5f6020828403121561030b575f80fd5b81516001600160a01b0381168114610321575f80fd5b9392505050565b5f8060408385031215610339575f80fd5b505080516020909101519092909150565b5f81515f5b81811015610369576020818501810151868301520161034f565b505f93019283525090919050565b5f61039461038e610388848861034a565b8661034a565b8461034a565b95945050505050565b5f826103b757634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161016261041f5f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/Owned.json b/artifacts/Owned.json index 15ca875c..84bd21ef 100644 --- a/artifacts/Owned.json +++ b/artifacts/Owned.json @@ -35,8 +35,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560e9806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806313af40351460375780638da5cb5b146048575b600080fd5b6046604236600460ae565b6076565b005b600054605a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6000546001600160a01b03163314608c57600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121560bf57600080fd5b81356001600160a01b038116811460d557600080fd5b939250505056fea164736f6c6343000811000a", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c806313af40351460375780638da5cb5b146048575b600080fd5b6046604236600460ae565b6076565b005b600054605a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6000546001600160a01b03163314608c57600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121560bf57600080fd5b81356001600160a01b038116811460d557600080fd5b939250505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b505f80546001600160a01b0319163317905560df8061002d5f395ff3fe6080604052348015600e575f80fd5b50600436106030575f3560e01c806313af40351460345780638da5cb5b146045575b5f80fd5b6043603f36600460a7565b6072565b005b5f546056906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b5f546001600160a01b031633146086575f80fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6020828403121560b6575f80fd5b81356001600160a01b038116811460cb575f80fd5b939250505056fea164736f6c6343000818000a", + "deployedBytecode": "0x6080604052348015600e575f80fd5b50600436106030575f3560e01c806313af40351460345780638da5cb5b146045575b5f80fd5b6043603f36600460a7565b6072565b005b5f546056906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b5f546001600160a01b031633146086575f80fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6020828403121560b6575f80fd5b81356001600160a01b038116811460cb575f80fd5b939250505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ProxyReaderV04.json b/artifacts/ProxyReaderV04.json index ab39fe76..5d2aeeeb 100644 --- a/artifacts/ProxyReaderV04.json +++ b/artifacts/ProxyReaderV04.json @@ -608,8 +608,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50612c48806100206000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063869b8884116100de578063b3f9e4cb11610097578063c15ae7cf11610071578063c15ae7cf14610410578063c87b56dd14610430578063e985e9c514610443578063ffa1ad741461045657600080fd5b8063b3f9e4cb146103c9578063b85afd28146103dc578063bebec6b4146103fd57600080fd5b8063869b8884146102ff57806391015f6b14610322578063933c051d14610344578063a3f4df7e14610366578063a81ce6f914610396578063ac9650d8146103a957600080fd5b8063430c20811161014b5780636352211e116101255780636352211e146102a5578063672b9f81146102b857806370a08231146102d95780637e37479e146102ec57600080fd5b8063430c20811461026a578063485cc9551461027d5780634f558e791461029257600080fd5b806301ffc9a71461019357806303280755146101bb578063081812fc146101de5780631bd8cc1a146102095780631be5e7ed14610229578063276fabb114610249575b600080fd5b6101a66101a1366004612046565b61047a565b60405190151581526020015b60405180910390f35b6101ce6101c93660046120b4565b6104e7565b6040516101b294939291906121a7565b6101f16101ec3660046121f0565b61050a565b6040516001600160a01b0390911681526020016101b2565b61021c6102173660046120b4565b61060f565b6040516101b29190612209565b61023c61023736600461221c565b61062e565b6040516101b29190612293565b61025c6102573660046122a6565b610759565b6040519081526020016101b2565b6101a66102783660046122ff565b6107cd565b61029061028b36600461232b565b6108e0565b005b6101a66102a03660046121f0565b610a30565b6101f16102b33660046121f0565b610a3b565b6102cb6102c6366004612364565b610a46565b6040516101b2929190612386565b61025c6102e73660046123ab565b610b76565b61025c6102fa3660046123ab565b610c74565b61031261030d3660046123c8565b610ce3565b6040516101b2949392919061250f565b6103356103303660046120b4565b610ed9565b6040516101b29392919061255c565b6103576103523660046123c8565b610ef9565b6040516101b293929190612588565b61023c604051806040016040528060118152602001702aa7299d10283937bc3c902932b0b232b960791b81525081565b6101f16103a43660046121f0565b611082565b6103bc6103b73660046122a6565b611150565b6040516101b291906125cb565b6101f16103d73660046121f0565b611244565b6103ef6103ea3660046120b4565b6112ca565b6040516101b292919061262d565b61023c61040b3660046123ab565b6114a6565b61042361041e3660046122a6565b61151a565b6040516101b29190612652565b61023c61043e3660046121f0565b6115c8565b6101a661045136600461232b565b61169a565b61023c60405180604001604052806005815260200164302e342e3160d81b81525081565b60006001600160e01b031982166362526e6360e01b14806104ab57506001600160e01b03198216636fa624af60e11b145b806104c657506001600160e01b031982166308da864d60e31b145b806104e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806060806104f88787876116e5565b93509350935093505b93509350935093565b600061051582611947565b61052157506000919050565b61052a826119df565b6105a15760665460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190612665565b6104e1565b60655460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190612665565b606061062461061e8486612712565b83611a26565b90505b9392505050565b6060610639826119df565b156106be57606554604051631be5e7ed60e01b81526001600160a01b0390911690631be5e7ed90610672908790879087906004016127ef565b600060405180830381865afa15801561068f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b79190810190612858565b9050610627565b60006106c983611ba9565b90506001600160a01b0381163b1561075157604051631be5e7ed60e01b81526001600160a01b03821690631be5e7ed9061070b908890889088906004016127ef565b600060405180830381865afa92505050801561074957506040513d6000823e601f3d908101601f191682016040526107469190810190612858565b60015b156107515791505b509392505050565b60655460405163276fabb160e01b81526000916001600160a01b03169063276fabb19061078c908690869060040161291d565b602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612931565b60006107d882611947565b6107e4575060006104e1565b6107ed826119df565b61086b5760665460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061294a565b610627565b60655460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610627919061294a565b600054610100900460ff16158080156109005750600054600160ff909116105b8061091a5750303b15801561091a575060005460ff166001145b6109825760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109a5576000805461ff0019166101001790555b606580546001600160a01b038086166001600160a01b03199283161790925560668054928516929091169190911790556109dd611c1c565b6109e5611c1c565b8015610a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006104e182611947565b60006104e182611c89565b606080610a52836119df565b15610ad85760655460405163672b9f8160e01b815260048101869052602481018590526001600160a01b039091169063672b9f8190604401600060405180830381865afa158015610aa7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610acf919081019061296c565b91509150610b6f565b6000610ae384611ba9565b90506001600160a01b0381163b15610b6d5760405163672b9f8160e01b815260048101869052602481018590526001600160a01b0382169063672b9f8190604401600060405180830381865afa925050508015610b6257506040513d6000823e601f3d908101601f19168201604052610b5f919081019061296c565b60015b15610b6d5790935091505b505b9250929050565b6065546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190612931565b6066549091506001600160a01b0316156104e1576066546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190612931565b61062790826129e5565b606554604051633f1ba3cf60e11b81526001600160a01b0383811660048301526000921690637e37479e90602401602060405180830381865afa158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190612931565b6060808080846001600160401b03811115610d0057610d00612682565b604051908082528060200260200182016040528015610d29578160200160208202803683370190505b509350846001600160401b03811115610d4457610d44612682565b604051908082528060200260200182016040528015610d6d578160200160208202803683370190505b509250846001600160401b03811115610d8857610d88612682565b604051908082528060200260200182016040528015610dbb57816020015b6060815260200190600190039081610da65790505b509150846001600160401b03811115610dd657610dd6612682565b604051908082528060200260200182016040528015610e0957816020015b6060815260200190600190039081610df45790505b50905060005b85811015610ecd57610e3a8989898985818110610e2e57610e2e6129f8565b905060200201356116e5565b888581518110610e4c57610e4c6129f8565b60200260200101888681518110610e6557610e656129f8565b60200260200101888781518110610e7e57610e7e6129f8565b60200260200101888881518110610e9757610e976129f8565b6020908102919091010193909352929091526001600160a01b039283169091529116905280610ec581612a0e565b915050610e0f565b50945094509450949050565b6000806060610ee9868686611caa565b9250925092505b93509350939050565b60608080836001600160401b03811115610f1557610f15612682565b604051908082528060200260200182016040528015610f3e578160200160208202803683370190505b509250836001600160401b03811115610f5957610f59612682565b604051908082528060200260200182016040528015610f82578160200160208202803683370190505b509150836001600160401b03811115610f9d57610f9d612682565b604051908082528060200260200182016040528015610fd057816020015b6060815260200190600190039081610fbb5790505b50905060005b84811015611077576110018888888885818110610ff557610ff56129f8565b90506020020135611caa565b868481518110611013576110136129f8565b6020026020010186858151811061102c5761102c6129f8565b60200260200101868681518110611045576110456129f8565b60209081029190910101929092526001600160a01b03928316909152911690528061106f81612a0e565b915050610fd6565b509450945094915050565b606554604051634f558e7960e01b8152600481018390526000916001600160a01b031690634f558e7990602401602060405180830381865afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f0919061294a565b156111065750506065546001600160a01b031690565b6066546001600160a01b0316158015906111325750600061112683611eb5565b6001600160a01b031614155b156111485750506066546001600160a01b031690565b506000919050565b6060816001600160401b0381111561116a5761116a612682565b60405190808252806020026020018201604052801561119d57816020015b60608152602001906001900390816111885790505b50905060005b8281101561123d5761120d308585848181106111c1576111c16129f8565b90506020028101906111d39190612a27565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ee792505050565b82828151811061121f5761121f6129f8565b6020026020010181905250808061123590612a0e565b9150506111a3565b5092915050565b600061124f82611947565b61125b57506000919050565b611264826119df565b6112995760665460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb9060240161055b565b60655460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb906024016105ce565b606080836001600160401b038111156112e5576112e5612682565b60405190808252806020026020018201604052801561131857816020015b60608152602001906001900390816113035790505b509150836001600160401b0381111561133357611333612682565b60405190808252806020026020018201604052801561136657816020015b60608152602001906001900390816113515790505b509050611372836119df565b156113f95760655460405163170b5fa560e31b81526001600160a01b039091169063b85afd28906113ab90889088908890600401612a6d565b600060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f09190810190612b35565b9150915061149e565b600061140484611ba9565b90506001600160a01b0381163b1515801561141e57508415155b1561149c5760405163170b5fa560e31b81526001600160a01b0382169063b85afd289061145390899089908990600401612a6d565b600060405180830381865afa92505050801561149157506040513d6000823e601f3d908101601f1916820160405261148e9190810190612b35565b60015b1561149c5790935091505b505b935093915050565b606554604051632fafb1ad60e21b81526001600160a01b038381166004830152606092169063bebec6b4906024015b600060405180830381865afa1580156114f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e19190810190612858565b6060816001600160401b0381111561153457611534612682565b60405190808252806020026020018201604052801561155d578160200160208202803683370190505b50905060005b8281101561123d5761158c848483818110611580576115806129f8565b90506020020135611c89565b82828151811061159e5761159e6129f8565b6001600160a01b0390921660209283029190910190910152806115c081612a0e565b915050611563565b60606115d382611947565b6115eb57505060408051602081019091526000815290565b6115f4826119df565b6116695760665460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015611641573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261059c9190810190612858565b60655460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd906024016114d5565b60405162461bcd60e51b815260206004820152601f60248201527f50726f78795265616465723a20554e535550504f525445445f4d4554484f44006044820152600090606401610979565b600080606080856001600160401b0381111561170357611703612682565b60405190808252806020026020018201604052801561173657816020015b60608152602001906001900390816117215790505b509150856001600160401b0381111561175157611751612682565b60405190808252806020026020018201604052801561178457816020015b606081526020019060019003908161176f5790505b509050611790856119df565b156118915760655460405163b3f9e4cb60e01b8152600481018790526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa1580156117de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118029190612665565b935061180d85611fdb565b60655460405163170b5fa560e31b81529194506001600160a01b03169063b85afd2890611842908a908a908a90600401612a6d565b600060405180830381865afa15801561185f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118879190810190612b35565b9092509050610501565b61189a85611ba9565b93506118a585611eb5565b92506001600160a01b0384163b151580156118c1575060008251115b156105015760405163170b5fa560e31b81526001600160a01b0385169063b85afd28906118f6908a908a908a90600401612a6d565b600060405180830381865afa92505050801561193457506040513d6000823e601f3d908101601f191682016040526119319190810190612b35565b60015b1561050157909250905093509350935093565b6000611952826119df565b61197157600061196183611eb5565b6001600160a01b031614156104e1565b606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e79906024015b602060405180830381865afa1580156119bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e1919061294a565b6066546000906001600160a01b031615806104e15750606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e799060240161199e565b606082516001600160401b03811115611a4157611a41612682565b604051908082528060200260200182016040528015611a7457816020015b6060815260200190600190039081611a5f5790505b509050611a80826119df565b15611b0357606554604051630dec660d60e11b81526001600160a01b0390911690631bd8cc1a90611ab79086908690600401612b8e565b600060405180830381865afa158015611ad4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611afc9190810190612bb0565b90506104e1565b6000611b0e83611ba9565b90506001600160a01b0381163b15158015611b2a575060008451115b1561123d57604051630dec660d60e11b81526001600160a01b03821690631bd8cc1a90611b5d9087908790600401612b8e565b600060405180830381865afa925050508015611b9b57506040513d6000823e601f3d908101601f19168201604052611b989190810190612bb0565b60015b1561123d575b949350505050565b60665460405163b3f9e4cb60e01b8152600481018390526000916001600160a01b03169063b3f9e4cb906024015b602060405180830381865afa925050508015611c10575060408051601f3d908101601f19168201909252611c0d91810190612665565b60015b6104e157506000919050565b600054610100900460ff16611c875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610979565b565b6000611c94826119df565b611ca15761059c82611eb5565b6104e182611fdb565b6000806060846001600160401b03811115611cc757611cc7612682565b604051908082528060200260200182016040528015611cfa57816020015b6060815260200190600190039081611ce55790505b509050611d06846119df565b15611e045760655460405163b3f9e4cb60e01b8152600481018690526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612665565b9250611d8384611fdb565b606554604051630dec660d60e11b81529193506001600160a01b031690631bd8cc1a90611db890899089908990600401612be4565b600060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dfd9190810190612bb0565b9050610ef0565b611e0d84611ba9565b9250611e1884611eb5565b91506001600160a01b0383163b15158015611e3257508415155b15610ef057604051630dec660d60e11b81526001600160a01b03841690631bd8cc1a90611e6790899089908990600401612be4565b600060405180830381865afa925050508015611ea557506040513d6000823e601f3d908101601f19168201604052611ea29190810190612bb0565b60015b15610ef057905093509350939050565b6066546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401611bd7565b60606001600160a01b0383163b611f4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610979565b600080846001600160a01b031684604051611f6a9190612bf8565b600060405180830381855af49150503d8060008114611fa5576040519150601f19603f3d011682016040523d82523d6000602084013e611faa565b606091505b5091509150611fd28282604051806060016040528060278152602001612c156027913961200d565b95945050505050565b6065546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401611bd7565b6060831561201c575081610627565b82511561202c5782518084602001fd5b8160405162461bcd60e51b81526004016109799190612293565b60006020828403121561205857600080fd5b81356001600160e01b03198116811461062757600080fd5b60008083601f84011261208257600080fd5b5081356001600160401b0381111561209957600080fd5b6020830191508360208260051b8501011115610b6f57600080fd5b6000806000604084860312156120c957600080fd5b83356001600160401b038111156120df57600080fd5b6120eb86828701612070565b909790965060209590950135949350505050565b60005b8381101561211a578181015183820152602001612102565b50506000910152565b6000815180845261213b8160208601602086016120ff565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561219a57601f19868403018952612188838351612123565b9884019892509083019060010161216c565b5090979650505050505050565b6001600160a01b038581168252841660208201526080604082018190526000906121d39083018561214f565b82810360608401526121e5818561214f565b979650505050505050565b60006020828403121561220257600080fd5b5035919050565b602081526000610627602083018461214f565b60008060006040848603121561223157600080fd5b83356001600160401b038082111561224857600080fd5b818601915086601f83011261225c57600080fd5b81358181111561226b57600080fd5b87602082850101111561227d57600080fd5b6020928301989097509590910135949350505050565b6020815260006106276020830184612123565b600080602083850312156122b957600080fd5b82356001600160401b038111156122cf57600080fd5b6122db85828601612070565b90969095509350505050565b6001600160a01b03811681146122fc57600080fd5b50565b6000806040838503121561231257600080fd5b823561231d816122e7565b946020939093013593505050565b6000806040838503121561233e57600080fd5b8235612349816122e7565b91506020830135612359816122e7565b809150509250929050565b6000806040838503121561237757600080fd5b50508035926020909101359150565b6040815260006123996040830185612123565b8281036020840152611fd28185612123565b6000602082840312156123bd57600080fd5b8135610627816122e7565b600080600080604085870312156123de57600080fd5b84356001600160401b03808211156123f557600080fd5b61240188838901612070565b9096509450602087013591508082111561241a57600080fd5b5061242787828801612070565b95989497509550505050565b600081518084526020808501945080840160005b8381101561246c5781516001600160a01b031687529582019590820190600101612447565b509495945050505050565b600081518084526020808501808196506005915083821b81018387016000805b87811015612500578484038b5282518051808652908801908886019080891b87018a01855b828110156124ea57601f198983030184526124d8828651612123565b948c0194938c019391506001016124bc565b509d8a019d965050509287019250600101612497565b50919998505050505050505050565b6080815260006125226080830187612433565b82810360208401526125348187612433565b905082810360408401526125488186612477565b905082810360608401526121e58185612477565b6001600160a01b03848116825283166020820152606060408201819052600090611fd29083018461214f565b60608152600061259b6060830186612433565b82810360208401526125ad8186612433565b905082810360408401526125c18185612477565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561262057603f1988860301845261260e858351612123565b945092850192908501906001016125f2565b5092979650505050505050565b604081526000612640604083018561214f565b8281036020840152611fd2818561214f565b6020815260006106276020830184612433565b60006020828403121561267757600080fd5b8151610627816122e7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156126c0576126c0612682565b604052919050565b60006001600160401b038211156126e1576126e1612682565b5060051b60200190565b60006001600160401b0382111561270457612704612682565b50601f01601f191660200190565b6000612725612720846126c8565b612698565b80848252602080830192508560051b85013681111561274357600080fd5b855b818110156127ba5780356001600160401b038111156127645760008081fd5b870136601f8201126127765760008081fd5b8035612784612720826126eb565b81815236868385010111156127995760008081fd5b81868401878301376000918101860191909152865250938201938201612745565b50919695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006128036040830185876127c6565b9050826020830152949350505050565b600082601f83011261282457600080fd5b8151612832612720826126eb565b81815284602083860101111561284757600080fd5b611ba18260208301602087016120ff565b60006020828403121561286a57600080fd5b81516001600160401b0381111561288057600080fd5b611ba184828501612813565b81835260006020808501808196508560051b810191508460005b878110156129105782840389528135601e198836030181126128c757600080fd5b870185810190356001600160401b038111156128e257600080fd5b8036038213156128f157600080fd5b6128fc8682846127c6565b9a87019a95505050908401906001016128a6565b5091979650505050505050565b60208152600061062460208301848661288c565b60006020828403121561294357600080fd5b5051919050565b60006020828403121561295c57600080fd5b8151801515811461062757600080fd5b6000806040838503121561297f57600080fd5b82516001600160401b038082111561299657600080fd5b6129a286838701612813565b935060208501519150808211156129b857600080fd5b506129c585828601612813565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104e1576104e16129cf565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2057612a206129cf565b5060010190565b6000808335601e19843603018112612a3e57600080fd5b8301803591506001600160401b03821115612a5857600080fd5b602001915036819003821315610b6f57600080fd5b6040808252810183905260006001600160fb1b03841115612a8d57600080fd5b8360051b808660608501376020830193909352500160600192915050565b600082601f830112612abc57600080fd5b81516020612acc612720836126c8565b82815260059290921b84018101918181019086841115612aeb57600080fd5b8286015b84811015612b2a5780516001600160401b03811115612b0e5760008081fd5b612b1c8986838b0101612813565b845250918301918301612aef565b509695505050505050565b60008060408385031215612b4857600080fd5b82516001600160401b0380821115612b5f57600080fd5b612b6b86838701612aab565b93506020850151915080821115612b8157600080fd5b506129c585828601612aab565b604081526000612ba1604083018561214f565b90508260208301529392505050565b600060208284031215612bc257600080fd5b81516001600160401b03811115612bd857600080fd5b611ba184828501612aab565b60408152600061280360408301858761288c565b60008251612c0a8184602087016120ff565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063869b8884116100de578063b3f9e4cb11610097578063c15ae7cf11610071578063c15ae7cf14610410578063c87b56dd14610430578063e985e9c514610443578063ffa1ad741461045657600080fd5b8063b3f9e4cb146103c9578063b85afd28146103dc578063bebec6b4146103fd57600080fd5b8063869b8884146102ff57806391015f6b14610322578063933c051d14610344578063a3f4df7e14610366578063a81ce6f914610396578063ac9650d8146103a957600080fd5b8063430c20811161014b5780636352211e116101255780636352211e146102a5578063672b9f81146102b857806370a08231146102d95780637e37479e146102ec57600080fd5b8063430c20811461026a578063485cc9551461027d5780634f558e791461029257600080fd5b806301ffc9a71461019357806303280755146101bb578063081812fc146101de5780631bd8cc1a146102095780631be5e7ed14610229578063276fabb114610249575b600080fd5b6101a66101a1366004612046565b61047a565b60405190151581526020015b60405180910390f35b6101ce6101c93660046120b4565b6104e7565b6040516101b294939291906121a7565b6101f16101ec3660046121f0565b61050a565b6040516001600160a01b0390911681526020016101b2565b61021c6102173660046120b4565b61060f565b6040516101b29190612209565b61023c61023736600461221c565b61062e565b6040516101b29190612293565b61025c6102573660046122a6565b610759565b6040519081526020016101b2565b6101a66102783660046122ff565b6107cd565b61029061028b36600461232b565b6108e0565b005b6101a66102a03660046121f0565b610a30565b6101f16102b33660046121f0565b610a3b565b6102cb6102c6366004612364565b610a46565b6040516101b2929190612386565b61025c6102e73660046123ab565b610b76565b61025c6102fa3660046123ab565b610c74565b61031261030d3660046123c8565b610ce3565b6040516101b2949392919061250f565b6103356103303660046120b4565b610ed9565b6040516101b29392919061255c565b6103576103523660046123c8565b610ef9565b6040516101b293929190612588565b61023c604051806040016040528060118152602001702aa7299d10283937bc3c902932b0b232b960791b81525081565b6101f16103a43660046121f0565b611082565b6103bc6103b73660046122a6565b611150565b6040516101b291906125cb565b6101f16103d73660046121f0565b611244565b6103ef6103ea3660046120b4565b6112ca565b6040516101b292919061262d565b61023c61040b3660046123ab565b6114a6565b61042361041e3660046122a6565b61151a565b6040516101b29190612652565b61023c61043e3660046121f0565b6115c8565b6101a661045136600461232b565b61169a565b61023c60405180604001604052806005815260200164302e342e3160d81b81525081565b60006001600160e01b031982166362526e6360e01b14806104ab57506001600160e01b03198216636fa624af60e11b145b806104c657506001600160e01b031982166308da864d60e31b145b806104e157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806060806104f88787876116e5565b93509350935093505b93509350935093565b600061051582611947565b61052157506000919050565b61052a826119df565b6105a15760665460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190612665565b6104e1565b60655460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190612665565b606061062461061e8486612712565b83611a26565b90505b9392505050565b6060610639826119df565b156106be57606554604051631be5e7ed60e01b81526001600160a01b0390911690631be5e7ed90610672908790879087906004016127ef565b600060405180830381865afa15801561068f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b79190810190612858565b9050610627565b60006106c983611ba9565b90506001600160a01b0381163b1561075157604051631be5e7ed60e01b81526001600160a01b03821690631be5e7ed9061070b908890889088906004016127ef565b600060405180830381865afa92505050801561074957506040513d6000823e601f3d908101601f191682016040526107469190810190612858565b60015b156107515791505b509392505050565b60655460405163276fabb160e01b81526000916001600160a01b03169063276fabb19061078c908690869060040161291d565b602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612931565b60006107d882611947565b6107e4575060006104e1565b6107ed826119df565b61086b5760665460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061294a565b610627565b60655460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610627919061294a565b600054610100900460ff16158080156109005750600054600160ff909116105b8061091a5750303b15801561091a575060005460ff166001145b6109825760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109a5576000805461ff0019166101001790555b606580546001600160a01b038086166001600160a01b03199283161790925560668054928516929091169190911790556109dd611c1c565b6109e5611c1c565b8015610a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006104e182611947565b60006104e182611c89565b606080610a52836119df565b15610ad85760655460405163672b9f8160e01b815260048101869052602481018590526001600160a01b039091169063672b9f8190604401600060405180830381865afa158015610aa7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610acf919081019061296c565b91509150610b6f565b6000610ae384611ba9565b90506001600160a01b0381163b15610b6d5760405163672b9f8160e01b815260048101869052602481018590526001600160a01b0382169063672b9f8190604401600060405180830381865afa925050508015610b6257506040513d6000823e601f3d908101601f19168201604052610b5f919081019061296c565b60015b15610b6d5790935091505b505b9250929050565b6065546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190612931565b6066549091506001600160a01b0316156104e1576066546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190612931565b61062790826129e5565b606554604051633f1ba3cf60e11b81526001600160a01b0383811660048301526000921690637e37479e90602401602060405180830381865afa158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190612931565b6060808080846001600160401b03811115610d0057610d00612682565b604051908082528060200260200182016040528015610d29578160200160208202803683370190505b509350846001600160401b03811115610d4457610d44612682565b604051908082528060200260200182016040528015610d6d578160200160208202803683370190505b509250846001600160401b03811115610d8857610d88612682565b604051908082528060200260200182016040528015610dbb57816020015b6060815260200190600190039081610da65790505b509150846001600160401b03811115610dd657610dd6612682565b604051908082528060200260200182016040528015610e0957816020015b6060815260200190600190039081610df45790505b50905060005b85811015610ecd57610e3a8989898985818110610e2e57610e2e6129f8565b905060200201356116e5565b888581518110610e4c57610e4c6129f8565b60200260200101888681518110610e6557610e656129f8565b60200260200101888781518110610e7e57610e7e6129f8565b60200260200101888881518110610e9757610e976129f8565b6020908102919091010193909352929091526001600160a01b039283169091529116905280610ec581612a0e565b915050610e0f565b50945094509450949050565b6000806060610ee9868686611caa565b9250925092505b93509350939050565b60608080836001600160401b03811115610f1557610f15612682565b604051908082528060200260200182016040528015610f3e578160200160208202803683370190505b509250836001600160401b03811115610f5957610f59612682565b604051908082528060200260200182016040528015610f82578160200160208202803683370190505b509150836001600160401b03811115610f9d57610f9d612682565b604051908082528060200260200182016040528015610fd057816020015b6060815260200190600190039081610fbb5790505b50905060005b84811015611077576110018888888885818110610ff557610ff56129f8565b90506020020135611caa565b868481518110611013576110136129f8565b6020026020010186858151811061102c5761102c6129f8565b60200260200101868681518110611045576110456129f8565b60209081029190910101929092526001600160a01b03928316909152911690528061106f81612a0e565b915050610fd6565b509450945094915050565b606554604051634f558e7960e01b8152600481018390526000916001600160a01b031690634f558e7990602401602060405180830381865afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f0919061294a565b156111065750506065546001600160a01b031690565b6066546001600160a01b0316158015906111325750600061112683611eb5565b6001600160a01b031614155b156111485750506066546001600160a01b031690565b506000919050565b6060816001600160401b0381111561116a5761116a612682565b60405190808252806020026020018201604052801561119d57816020015b60608152602001906001900390816111885790505b50905060005b8281101561123d5761120d308585848181106111c1576111c16129f8565b90506020028101906111d39190612a27565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ee792505050565b82828151811061121f5761121f6129f8565b6020026020010181905250808061123590612a0e565b9150506111a3565b5092915050565b600061124f82611947565b61125b57506000919050565b611264826119df565b6112995760665460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb9060240161055b565b60655460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb906024016105ce565b606080836001600160401b038111156112e5576112e5612682565b60405190808252806020026020018201604052801561131857816020015b60608152602001906001900390816113035790505b509150836001600160401b0381111561133357611333612682565b60405190808252806020026020018201604052801561136657816020015b60608152602001906001900390816113515790505b509050611372836119df565b156113f95760655460405163170b5fa560e31b81526001600160a01b039091169063b85afd28906113ab90889088908890600401612a6d565b600060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f09190810190612b35565b9150915061149e565b600061140484611ba9565b90506001600160a01b0381163b1515801561141e57508415155b1561149c5760405163170b5fa560e31b81526001600160a01b0382169063b85afd289061145390899089908990600401612a6d565b600060405180830381865afa92505050801561149157506040513d6000823e601f3d908101601f1916820160405261148e9190810190612b35565b60015b1561149c5790935091505b505b935093915050565b606554604051632fafb1ad60e21b81526001600160a01b038381166004830152606092169063bebec6b4906024015b600060405180830381865afa1580156114f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e19190810190612858565b6060816001600160401b0381111561153457611534612682565b60405190808252806020026020018201604052801561155d578160200160208202803683370190505b50905060005b8281101561123d5761158c848483818110611580576115806129f8565b90506020020135611c89565b82828151811061159e5761159e6129f8565b6001600160a01b0390921660209283029190910190910152806115c081612a0e565b915050611563565b60606115d382611947565b6115eb57505060408051602081019091526000815290565b6115f4826119df565b6116695760665460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015611641573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261059c9190810190612858565b60655460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd906024016114d5565b60405162461bcd60e51b815260206004820152601f60248201527f50726f78795265616465723a20554e535550504f525445445f4d4554484f44006044820152600090606401610979565b600080606080856001600160401b0381111561170357611703612682565b60405190808252806020026020018201604052801561173657816020015b60608152602001906001900390816117215790505b509150856001600160401b0381111561175157611751612682565b60405190808252806020026020018201604052801561178457816020015b606081526020019060019003908161176f5790505b509050611790856119df565b156118915760655460405163b3f9e4cb60e01b8152600481018790526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa1580156117de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118029190612665565b935061180d85611fdb565b60655460405163170b5fa560e31b81529194506001600160a01b03169063b85afd2890611842908a908a908a90600401612a6d565b600060405180830381865afa15801561185f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118879190810190612b35565b9092509050610501565b61189a85611ba9565b93506118a585611eb5565b92506001600160a01b0384163b151580156118c1575060008251115b156105015760405163170b5fa560e31b81526001600160a01b0385169063b85afd28906118f6908a908a908a90600401612a6d565b600060405180830381865afa92505050801561193457506040513d6000823e601f3d908101601f191682016040526119319190810190612b35565b60015b1561050157909250905093509350935093565b6000611952826119df565b61197157600061196183611eb5565b6001600160a01b031614156104e1565b606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e79906024015b602060405180830381865afa1580156119bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e1919061294a565b6066546000906001600160a01b031615806104e15750606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e799060240161199e565b606082516001600160401b03811115611a4157611a41612682565b604051908082528060200260200182016040528015611a7457816020015b6060815260200190600190039081611a5f5790505b509050611a80826119df565b15611b0357606554604051630dec660d60e11b81526001600160a01b0390911690631bd8cc1a90611ab79086908690600401612b8e565b600060405180830381865afa158015611ad4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611afc9190810190612bb0565b90506104e1565b6000611b0e83611ba9565b90506001600160a01b0381163b15158015611b2a575060008451115b1561123d57604051630dec660d60e11b81526001600160a01b03821690631bd8cc1a90611b5d9087908790600401612b8e565b600060405180830381865afa925050508015611b9b57506040513d6000823e601f3d908101601f19168201604052611b989190810190612bb0565b60015b1561123d575b949350505050565b60665460405163b3f9e4cb60e01b8152600481018390526000916001600160a01b03169063b3f9e4cb906024015b602060405180830381865afa925050508015611c10575060408051601f3d908101601f19168201909252611c0d91810190612665565b60015b6104e157506000919050565b600054610100900460ff16611c875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610979565b565b6000611c94826119df565b611ca15761059c82611eb5565b6104e182611fdb565b6000806060846001600160401b03811115611cc757611cc7612682565b604051908082528060200260200182016040528015611cfa57816020015b6060815260200190600190039081611ce55790505b509050611d06846119df565b15611e045760655460405163b3f9e4cb60e01b8152600481018690526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612665565b9250611d8384611fdb565b606554604051630dec660d60e11b81529193506001600160a01b031690631bd8cc1a90611db890899089908990600401612be4565b600060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dfd9190810190612bb0565b9050610ef0565b611e0d84611ba9565b9250611e1884611eb5565b91506001600160a01b0383163b15158015611e3257508415155b15610ef057604051630dec660d60e11b81526001600160a01b03841690631bd8cc1a90611e6790899089908990600401612be4565b600060405180830381865afa925050508015611ea557506040513d6000823e601f3d908101601f19168201604052611ea29190810190612bb0565b60015b15610ef057905093509350939050565b6066546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401611bd7565b60606001600160a01b0383163b611f4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610979565b600080846001600160a01b031684604051611f6a9190612bf8565b600060405180830381855af49150503d8060008114611fa5576040519150601f19603f3d011682016040523d82523d6000602084013e611faa565b606091505b5091509150611fd28282604051806060016040528060278152602001612c156027913961200d565b95945050505050565b6065546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401611bd7565b6060831561201c575081610627565b82511561202c5782518084602001fd5b8160405162461bcd60e51b81526004016109799190612293565b60006020828403121561205857600080fd5b81356001600160e01b03198116811461062757600080fd5b60008083601f84011261208257600080fd5b5081356001600160401b0381111561209957600080fd5b6020830191508360208260051b8501011115610b6f57600080fd5b6000806000604084860312156120c957600080fd5b83356001600160401b038111156120df57600080fd5b6120eb86828701612070565b909790965060209590950135949350505050565b60005b8381101561211a578181015183820152602001612102565b50506000910152565b6000815180845261213b8160208601602086016120ff565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561219a57601f19868403018952612188838351612123565b9884019892509083019060010161216c565b5090979650505050505050565b6001600160a01b038581168252841660208201526080604082018190526000906121d39083018561214f565b82810360608401526121e5818561214f565b979650505050505050565b60006020828403121561220257600080fd5b5035919050565b602081526000610627602083018461214f565b60008060006040848603121561223157600080fd5b83356001600160401b038082111561224857600080fd5b818601915086601f83011261225c57600080fd5b81358181111561226b57600080fd5b87602082850101111561227d57600080fd5b6020928301989097509590910135949350505050565b6020815260006106276020830184612123565b600080602083850312156122b957600080fd5b82356001600160401b038111156122cf57600080fd5b6122db85828601612070565b90969095509350505050565b6001600160a01b03811681146122fc57600080fd5b50565b6000806040838503121561231257600080fd5b823561231d816122e7565b946020939093013593505050565b6000806040838503121561233e57600080fd5b8235612349816122e7565b91506020830135612359816122e7565b809150509250929050565b6000806040838503121561237757600080fd5b50508035926020909101359150565b6040815260006123996040830185612123565b8281036020840152611fd28185612123565b6000602082840312156123bd57600080fd5b8135610627816122e7565b600080600080604085870312156123de57600080fd5b84356001600160401b03808211156123f557600080fd5b61240188838901612070565b9096509450602087013591508082111561241a57600080fd5b5061242787828801612070565b95989497509550505050565b600081518084526020808501945080840160005b8381101561246c5781516001600160a01b031687529582019590820190600101612447565b509495945050505050565b600081518084526020808501808196506005915083821b81018387016000805b87811015612500578484038b5282518051808652908801908886019080891b87018a01855b828110156124ea57601f198983030184526124d8828651612123565b948c0194938c019391506001016124bc565b509d8a019d965050509287019250600101612497565b50919998505050505050505050565b6080815260006125226080830187612433565b82810360208401526125348187612433565b905082810360408401526125488186612477565b905082810360608401526121e58185612477565b6001600160a01b03848116825283166020820152606060408201819052600090611fd29083018461214f565b60608152600061259b6060830186612433565b82810360208401526125ad8186612433565b905082810360408401526125c18185612477565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561262057603f1988860301845261260e858351612123565b945092850192908501906001016125f2565b5092979650505050505050565b604081526000612640604083018561214f565b8281036020840152611fd2818561214f565b6020815260006106276020830184612433565b60006020828403121561267757600080fd5b8151610627816122e7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156126c0576126c0612682565b604052919050565b60006001600160401b038211156126e1576126e1612682565b5060051b60200190565b60006001600160401b0382111561270457612704612682565b50601f01601f191660200190565b6000612725612720846126c8565b612698565b80848252602080830192508560051b85013681111561274357600080fd5b855b818110156127ba5780356001600160401b038111156127645760008081fd5b870136601f8201126127765760008081fd5b8035612784612720826126eb565b81815236868385010111156127995760008081fd5b81868401878301376000918101860191909152865250938201938201612745565b50919695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006128036040830185876127c6565b9050826020830152949350505050565b600082601f83011261282457600080fd5b8151612832612720826126eb565b81815284602083860101111561284757600080fd5b611ba18260208301602087016120ff565b60006020828403121561286a57600080fd5b81516001600160401b0381111561288057600080fd5b611ba184828501612813565b81835260006020808501808196508560051b810191508460005b878110156129105782840389528135601e198836030181126128c757600080fd5b870185810190356001600160401b038111156128e257600080fd5b8036038213156128f157600080fd5b6128fc8682846127c6565b9a87019a95505050908401906001016128a6565b5091979650505050505050565b60208152600061062460208301848661288c565b60006020828403121561294357600080fd5b5051919050565b60006020828403121561295c57600080fd5b8151801515811461062757600080fd5b6000806040838503121561297f57600080fd5b82516001600160401b038082111561299657600080fd5b6129a286838701612813565b935060208501519150808211156129b857600080fd5b506129c585828601612813565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104e1576104e16129cf565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2057612a206129cf565b5060010190565b6000808335601e19843603018112612a3e57600080fd5b8301803591506001600160401b03821115612a5857600080fd5b602001915036819003821315610b6f57600080fd5b6040808252810183905260006001600160fb1b03841115612a8d57600080fd5b8360051b808660608501376020830193909352500160600192915050565b600082601f830112612abc57600080fd5b81516020612acc612720836126c8565b82815260059290921b84018101918181019086841115612aeb57600080fd5b8286015b84811015612b2a5780516001600160401b03811115612b0e5760008081fd5b612b1c8986838b0101612813565b845250918301918301612aef565b509695505050505050565b60008060408385031215612b4857600080fd5b82516001600160401b0380821115612b5f57600080fd5b612b6b86838701612aab565b93506020850151915080821115612b8157600080fd5b506129c585828601612aab565b604081526000612ba1604083018561214f565b90508260208301529392505050565b600060208284031215612bc257600080fd5b81516001600160401b03811115612bd857600080fd5b611ba184828501612aab565b60408152600061280360408301858761288c565b60008251612c0a8184602087016120ff565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b50612b068061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610187575f3560e01c8063869b8884116100d9578063b3f9e4cb11610093578063c15ae7cf1161006e578063c15ae7cf14610408578063c87b56dd14610428578063e985e9c51461043b578063ffa1ad741461044e575f80fd5b8063b3f9e4cb146103c1578063b85afd28146103d4578063bebec6b4146103f5575f80fd5b8063869b8884146102f757806391015f6b1461031a578063933c051d1461033c578063a3f4df7e1461035e578063a81ce6f91461038e578063ac9650d8146103a1575f80fd5b8063430c2081116101445780636352211e1161011f5780636352211e1461029d578063672b9f81146102b057806370a08231146102d15780637e37479e146102e4575f80fd5b8063430c208114610262578063485cc955146102755780634f558e791461028a575f80fd5b806301ffc9a71461018b57806303280755146101b3578063081812fc146101d65780631bd8cc1a146102015780631be5e7ed14610221578063276fabb114610241575b5f80fd5b61019e610199366004611f9e565b610472565b60405190151581526020015b60405180910390f35b6101c66101c1366004612005565b6104de565b6040516101aa94939291906120f1565b6101e96101e4366004612139565b610500565b6040516001600160a01b0390911681526020016101aa565b61021461020f366004612005565b6105ff565b6040516101aa9190612150565b61023461022f366004612162565b61061e565b6040516101aa91906121d2565b61025461024f3660046121e4565b610742565b6040519081526020016101aa565b61019e610270366004612239565b6107b3565b610288610283366004612263565b6108c0565b005b61019e610298366004612139565b610a0a565b6101e96102ab366004612139565b610a14565b6102c36102be36600461229a565b610a1e565b6040516101aa9291906122ba565b6102546102df3660046122de565b610b47565b6102546102f23660046122de565b610c40565b61030a6103053660046122f9565b610cac565b6040516101aa949392919061243a565b61032d610328366004612005565b610e97565b6040516101aa93929190612486565b61034f61034a3660046122f9565b610eb6565b6040516101aa939291906124b1565b610234604051806040016040528060118152602001702aa7299d10283937bc3c902932b0b232b960791b81525081565b6101e961039c366004612139565b611034565b6103b46103af3660046121e4565b6110fd565b6040516101aa91906124f3565b6101e96103cf366004612139565b6111e4565b6103e76103e2366004612005565b611268565b6040516101aa929190612555565b6102346104033660046122de565b61143d565b61041b6104163660046121e4565b6114ad565b6040516101aa9190612579565b610234610436366004612139565b611550565b61019e610449366004612263565b61161d565b61023460405180604001604052806005815260200164302e342e3160d81b81525081565b5f6001600160e01b031982166362526e6360e01b14806104a257506001600160e01b03198216636fa624af60e11b145b806104bd57506001600160e01b031982166308da864d60e31b145b806104d857506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f806060806104ee878787611667565b93509350935093505b93509350935093565b5f61050a826118bf565b61051557505f919050565b61051e82611953565b6105935760665460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa15801561056a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058e919061258b565b6104d8565b60655460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa1580156105db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d8919061258b565b606061061461060e8486612632565b83611999565b90505b9392505050565b606061062982611953565b156106aa57606554604051631be5e7ed60e01b81526001600160a01b0390911690631be5e7ed9061066290879087908790600401612705565b5f60405180830381865afa15801561067c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106a3919081019061276a565b9050610617565b5f6106b483611b14565b90506001600160a01b0381163b1561073a57604051631be5e7ed60e01b81526001600160a01b03821690631be5e7ed906106f690889088908890600401612705565b5f60405180830381865afa92505050801561073257506040513d5f823e601f3d908101601f1916820160405261072f919081019061276a565b60015b1561073a5791505b509392505050565b60655460405163276fabb160e01b81525f916001600160a01b03169063276fabb190610774908690869060040161281f565b602060405180830381865afa15801561078f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190612832565b5f6107bd826118bf565b6107c857505f6104d8565b6107d182611953565b61084d5760665460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610824573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108489190612849565b610617565b60655460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa15801561089c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190612849565b5f54610100900460ff16158080156108de57505f54600160ff909116105b806108f75750303b1580156108f757505f5460ff166001145b61095f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610980575f805461ff0019166101001790555b606580546001600160a01b038086166001600160a01b03199283161790925560668054928516929091169190911790556109b8611b85565b6109c0611b85565b8015610a05575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b5f6104d8826118bf565b5f6104d882611bf1565b606080610a2a83611953565b15610aac5760655460405163672b9f8160e01b815260048101869052602481018590526001600160a01b039091169063672b9f81906044015f60405180830381865afa158015610a7c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aa39190810190612868565b91509150610b40565b5f610ab684611b14565b90506001600160a01b0381163b15610b3e5760405163672b9f8160e01b815260048101869052602481018590526001600160a01b0382169063672b9f81906044015f60405180830381865afa925050508015610b3357506040513d5f823e601f3d908101601f19168201604052610b309190810190612868565b60015b15610b3e5790935091505b505b9250929050565b6065546040516370a0823160e01b81526001600160a01b0383811660048301525f9283929116906370a0823190602401602060405180830381865afa158015610b92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb69190612832565b6066549091506001600160a01b0316156104d8576066546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c369190612832565b61061790826128c7565b606554604051633f1ba3cf60e11b81526001600160a01b0383811660048301525f921690637e37479e90602401602060405180830381865afa158015610c88573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d89190612832565b6060808080846001600160401b03811115610cc957610cc96125a6565b604051908082528060200260200182016040528015610cf2578160200160208202803683370190505b509350846001600160401b03811115610d0d57610d0d6125a6565b604051908082528060200260200182016040528015610d36578160200160208202803683370190505b509250846001600160401b03811115610d5157610d516125a6565b604051908082528060200260200182016040528015610d8457816020015b6060815260200190600190039081610d6f5790505b509150846001600160401b03811115610d9f57610d9f6125a6565b604051908082528060200260200182016040528015610dd257816020015b6060815260200190600190039081610dbd5790505b5090505f5b85811015610e8b57610e028989898985818110610df657610df66128e6565b90506020020135611667565b888581518110610e1457610e146128e6565b60200260200101888681518110610e2d57610e2d6128e6565b60200260200101888781518110610e4657610e466128e6565b60200260200101888881518110610e5f57610e5f6128e6565b6020908102919091010193909352929091526001600160a01b0392831690915291169052600101610dd7565b50945094509450949050565b5f806060610ea6868686611c11565b9250925092505b93509350939050565b60608080836001600160401b03811115610ed257610ed26125a6565b604051908082528060200260200182016040528015610efb578160200160208202803683370190505b509250836001600160401b03811115610f1657610f166125a6565b604051908082528060200260200182016040528015610f3f578160200160208202803683370190505b509150836001600160401b03811115610f5a57610f5a6125a6565b604051908082528060200260200182016040528015610f8d57816020015b6060815260200190600190039081610f785790505b5090505f5b8481101561102957610fbd8888888885818110610fb157610fb16128e6565b90506020020135611c11565b868481518110610fcf57610fcf6128e6565b60200260200101868581518110610fe857610fe86128e6565b60200260200101868681518110611001576110016128e6565b60209081029190910101929092526001600160a01b0392831690915291169052600101610f92565b509450945094915050565b606554604051634f558e7960e01b8152600481018390525f916001600160a01b031690634f558e7990602401602060405180830381865afa15801561107b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109f9190612849565b156110b55750506065546001600160a01b031690565b6066546001600160a01b0316158015906110e057505f6110d483611e13565b6001600160a01b031614155b156110f65750506066546001600160a01b031690565b505f919050565b6060816001600160401b03811115611117576111176125a6565b60405190808252806020026020018201604052801561114a57816020015b60608152602001906001900390816111355790505b5090505f5b828110156111dd576111b83085858481811061116d5761116d6128e6565b905060200281019061117f91906128fa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e4492505050565b8282815181106111ca576111ca6128e6565b602090810291909101015260010161114f565b5092915050565b5f6111ee826118bf565b6111f957505f919050565b61120282611953565b6112375760665460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb9060240161054f565b60655460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb906024016105c0565b606080836001600160401b03811115611283576112836125a6565b6040519080825280602002602001820160405280156112b657816020015b60608152602001906001900390816112a15790505b509150836001600160401b038111156112d1576112d16125a6565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905061131083611953565b156113935760655460405163170b5fa560e31b81526001600160a01b039091169063b85afd28906113499088908890889060040161293c565b5f60405180830381865afa158015611363573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261138a91908101906129fd565b91509150611435565b5f61139d84611b14565b90506001600160a01b0381163b151580156113b757508415155b156114335760405163170b5fa560e31b81526001600160a01b0382169063b85afd28906113ec9089908990899060040161293c565b5f60405180830381865afa92505050801561142857506040513d5f823e601f3d908101601f1916820160405261142591908101906129fd565b60015b156114335790935091505b505b935093915050565b606554604051632fafb1ad60e21b81526001600160a01b038381166004830152606092169063bebec6b4906024015b5f60405180830381865afa158015611486573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526104d8919081019061276a565b6060816001600160401b038111156114c7576114c76125a6565b6040519080825280602002602001820160405280156114f0578160200160208202803683370190505b5090505f5b828110156111dd5761151e848483818110611512576115126128e6565b90506020020135611bf1565b828281518110611530576115306128e6565b6001600160a01b03909216602092830291909101909101526001016114f5565b606061155b826118bf565b61157257505060408051602081019091525f815290565b61157b82611953565b6115ec5760665460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd906024015f60405180830381865afa1580156115c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261058e919081019061276a565b60655460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240161146c565b60405162461bcd60e51b815260206004820152601f60248201527f50726f78795265616465723a20554e535550504f525445445f4d4554484f440060448201525f90606401610956565b5f80606080856001600160401b03811115611684576116846125a6565b6040519080825280602002602001820160405280156116b757816020015b60608152602001906001900390816116a25790505b509150856001600160401b038111156116d2576116d26125a6565b60405190808252806020026020018201604052801561170557816020015b60608152602001906001900390816116f05790505b50905061171185611953565b1561180c5760655460405163b3f9e4cb60e01b8152600481018790526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa15801561175d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611781919061258b565b935061178c85611f34565b60655460405163170b5fa560e31b81529194506001600160a01b03169063b85afd28906117c1908a908a908a9060040161293c565b5f60405180830381865afa1580156117db573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261180291908101906129fd565b90925090506104f7565b61181585611b14565b935061182085611e13565b92506001600160a01b0384163b1515801561183b57505f8251115b156104f75760405163170b5fa560e31b81526001600160a01b0385169063b85afd2890611870908a908a908a9060040161293c565b5f60405180830381865afa9250505080156118ac57506040513d5f823e601f3d908101601f191682016040526118a991908101906129fd565b60015b156104f757909250905093509350935093565b5f6118c982611953565b6118e7575f6118d783611e13565b6001600160a01b031614156104d8565b606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e79906024015b602060405180830381865afa15801561192f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d89190612849565b6066545f906001600160a01b031615806104d85750606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401611914565b606082516001600160401b038111156119b4576119b46125a6565b6040519080825280602002602001820160405280156119e757816020015b60608152602001906001900390816119d25790505b5090506119f382611953565b15611a7257606554604051630dec660d60e11b81526001600160a01b0390911690631bd8cc1a90611a2a9086908690600401612a52565b5f60405180830381865afa158015611a44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a6b9190810190612a73565b90506104d8565b5f611a7c83611b14565b90506001600160a01b0381163b15158015611a9757505f8451115b156111dd57604051630dec660d60e11b81526001600160a01b03821690631bd8cc1a90611aca9087908790600401612a52565b5f60405180830381865afa925050508015611b0657506040513d5f823e601f3d908101601f19168201604052611b039190810190612a73565b60015b156111dd575b949350505050565b60665460405163b3f9e4cb60e01b8152600481018390525f916001600160a01b03169063b3f9e4cb906024015b602060405180830381865afa925050508015611b7a575060408051601f3d908101601f19168201909252611b779181019061258b565b60015b6104d857505f919050565b5f54610100900460ff16611bef5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610956565b565b5f611bfb82611953565b611c085761058e82611e13565b6104d882611f34565b5f806060846001600160401b03811115611c2d57611c2d6125a6565b604051908082528060200260200182016040528015611c6057816020015b6060815260200190600190039081611c4b5790505b509050611c6c84611953565b15611d645760655460405163b3f9e4cb60e01b8152600481018690526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa158015611cb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cdc919061258b565b9250611ce784611f34565b606554604051630dec660d60e11b81529193506001600160a01b031690631bd8cc1a90611d1c90899089908990600401612aa4565b5f60405180830381865afa158015611d36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d5d9190810190612a73565b9050610ead565b611d6d84611b14565b9250611d7884611e13565b91506001600160a01b0383163b15158015611d9257508415155b15610ead57604051630dec660d60e11b81526001600160a01b03841690631bd8cc1a90611dc790899089908990600401612aa4565b5f60405180830381865afa925050508015611e0357506040513d5f823e601f3d908101601f19168201604052611e009190810190612a73565b60015b15610ead57905093509350939050565b6066546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401611b41565b60606001600160a01b0383163b611eac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610956565b5f80846001600160a01b031684604051611ec69190612ab7565b5f60405180830381855af49150503d805f8114611efe576040519150601f19603f3d011682016040523d82523d5f602084013e611f03565b606091505b5091509150611f2b8282604051806060016040528060278152602001612ad360279139611f65565b95945050505050565b6065546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401611b41565b60608315611f74575081610617565b825115611f845782518084602001fd5b8160405162461bcd60e51b815260040161095691906121d2565b5f60208284031215611fae575f80fd5b81356001600160e01b031981168114610617575f80fd5b5f8083601f840112611fd5575f80fd5b5081356001600160401b03811115611feb575f80fd5b6020830191508360208260051b8501011115610b40575f80fd5b5f805f60408486031215612017575f80fd5b83356001600160401b0381111561202c575f80fd5b61203886828701611fc5565b909790965060209590950135949350505050565b5f5b8381101561206657818101518382015260200161204e565b50505f910152565b5f815180845261208581602086016020860161204c565b601f01601f19169290920160200192915050565b5f8282518085526020808601955060208260051b840101602086015f5b848110156120e457601f198684030189526120d283835161206e565b988401989250908301906001016120b6565b5090979650505050505050565b6001600160a01b038581168252841660208201526080604082018190525f9061211c90830185612099565b828103606084015261212e8185612099565b979650505050505050565b5f60208284031215612149575f80fd5b5035919050565b602081525f6106176020830184612099565b5f805f60408486031215612174575f80fd5b83356001600160401b038082111561218a575f80fd5b818601915086601f83011261219d575f80fd5b8135818111156121ab575f80fd5b8760208285010111156121bc575f80fd5b6020928301989097509590910135949350505050565b602081525f610617602083018461206e565b5f80602083850312156121f5575f80fd5b82356001600160401b0381111561220a575f80fd5b61221685828601611fc5565b90969095509350505050565b6001600160a01b0381168114612236575f80fd5b50565b5f806040838503121561224a575f80fd5b823561225581612222565b946020939093013593505050565b5f8060408385031215612274575f80fd5b823561227f81612222565b9150602083013561228f81612222565b809150509250929050565b5f80604083850312156122ab575f80fd5b50508035926020909101359150565b604081525f6122cc604083018561206e565b8281036020840152611f2b818561206e565b5f602082840312156122ee575f80fd5b813561061781612222565b5f805f806040858703121561230c575f80fd5b84356001600160401b0380821115612322575f80fd5b61232e88838901611fc5565b90965094506020870135915080821115612346575f80fd5b5061235387828801611fc5565b95989497509550505050565b5f815180845260208085019450602084015f5b838110156123975781516001600160a01b031687529582019590820190600101612372565b509495945050505050565b5f828251808552602080860195506005818360051b8501018287015f5b8581101561242c57601f1987840381018b5282518051808652908701908786019080881b870189015f5b82811015612415578589830301845261240382865161206e565b948b0194938b019391506001016123e9565b509d89019d965050509286019250506001016123bf565b509098975050505050505050565b608081525f61244c608083018761235f565b828103602084015261245e818761235f565b9050828103604084015261247281866123a2565b9050828103606084015261212e81856123a2565b6001600160a01b038481168252831660208201526060604082018190525f90611f2b90830184612099565b606081525f6124c3606083018661235f565b82810360208401526124d5818661235f565b905082810360408401526124e981856123a2565b9695505050505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561254857603f1988860301845261253685835161206e565b9450928501929085019060010161251a565b5092979650505050505050565b604081525f6125676040830185612099565b8281036020840152611f2b8185612099565b602081525f610617602083018461235f565b5f6020828403121561259b575f80fd5b815161061781612222565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125e2576125e26125a6565b604052919050565b5f6001600160401b03821115612602576126026125a6565b5060051b60200190565b5f6001600160401b03821115612624576126246125a6565b50601f01601f191660200190565b5f61264461263f846125ea565b6125ba565b80848252602080830192508560051b850136811115612661575f80fd5b855b818110156126d15780356001600160401b03811115612680575f80fd5b870136601f820112612690575f80fd5b803561269e61263f8261260c565b81815236868385010111156126b1575f80fd5b81868401878301375f918101860191909152865250938201938201612663565b50919695505050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6127186040830185876126dd565b9050826020830152949350505050565b5f82601f830112612737575f80fd5b815161274561263f8261260c565b818152846020838601011115612759575f80fd5b611b0c82602083016020870161204c565b5f6020828403121561277a575f80fd5b81516001600160401b0381111561278f575f80fd5b611b0c84828501612728565b5f838385526020808601955060208560051b830101845f5b878110156120e457848303601f19018952813536889003601e190181126127d8575f80fd5b870184810190356001600160401b038111156127f2575f80fd5b803603821315612800575f80fd5b61280b8582846126dd565b9a86019a94505050908301906001016127b3565b602081525f61061460208301848661279b565b5f60208284031215612842575f80fd5b5051919050565b5f60208284031215612859575f80fd5b81518015158114610617575f80fd5b5f8060408385031215612879575f80fd5b82516001600160401b038082111561288f575f80fd5b61289b86838701612728565b935060208501519150808211156128b0575f80fd5b506128bd85828601612728565b9150509250929050565b808201808211156104d857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e1984360301811261290f575f80fd5b8301803591506001600160401b03821115612928575f80fd5b602001915036819003821315610b40575f80fd5b604080825281018390525f6001600160fb1b0384111561295a575f80fd5b8360051b808660608501376020830193909352500160600192915050565b5f82601f830112612987575f80fd5b8151602061299761263f836125ea565b82815260059290921b840181019181810190868411156129b5575f80fd5b8286015b848110156129f25780516001600160401b038111156129d6575f80fd5b6129e48986838b0101612728565b8452509183019183016129b9565b509695505050505050565b5f8060408385031215612a0e575f80fd5b82516001600160401b0380821115612a24575f80fd5b612a3086838701612978565b93506020850151915080821115612a45575f80fd5b506128bd85828601612978565b604081525f612a646040830185612099565b90508260208301529392505050565b5f60208284031215612a83575f80fd5b81516001600160401b03811115612a98575f80fd5b611b0c84828501612978565b604081525f61271860408301858761279b565b5f8251612ac881846020870161204c565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610187575f3560e01c8063869b8884116100d9578063b3f9e4cb11610093578063c15ae7cf1161006e578063c15ae7cf14610408578063c87b56dd14610428578063e985e9c51461043b578063ffa1ad741461044e575f80fd5b8063b3f9e4cb146103c1578063b85afd28146103d4578063bebec6b4146103f5575f80fd5b8063869b8884146102f757806391015f6b1461031a578063933c051d1461033c578063a3f4df7e1461035e578063a81ce6f91461038e578063ac9650d8146103a1575f80fd5b8063430c2081116101445780636352211e1161011f5780636352211e1461029d578063672b9f81146102b057806370a08231146102d15780637e37479e146102e4575f80fd5b8063430c208114610262578063485cc955146102755780634f558e791461028a575f80fd5b806301ffc9a71461018b57806303280755146101b3578063081812fc146101d65780631bd8cc1a146102015780631be5e7ed14610221578063276fabb114610241575b5f80fd5b61019e610199366004611f9e565b610472565b60405190151581526020015b60405180910390f35b6101c66101c1366004612005565b6104de565b6040516101aa94939291906120f1565b6101e96101e4366004612139565b610500565b6040516001600160a01b0390911681526020016101aa565b61021461020f366004612005565b6105ff565b6040516101aa9190612150565b61023461022f366004612162565b61061e565b6040516101aa91906121d2565b61025461024f3660046121e4565b610742565b6040519081526020016101aa565b61019e610270366004612239565b6107b3565b610288610283366004612263565b6108c0565b005b61019e610298366004612139565b610a0a565b6101e96102ab366004612139565b610a14565b6102c36102be36600461229a565b610a1e565b6040516101aa9291906122ba565b6102546102df3660046122de565b610b47565b6102546102f23660046122de565b610c40565b61030a6103053660046122f9565b610cac565b6040516101aa949392919061243a565b61032d610328366004612005565b610e97565b6040516101aa93929190612486565b61034f61034a3660046122f9565b610eb6565b6040516101aa939291906124b1565b610234604051806040016040528060118152602001702aa7299d10283937bc3c902932b0b232b960791b81525081565b6101e961039c366004612139565b611034565b6103b46103af3660046121e4565b6110fd565b6040516101aa91906124f3565b6101e96103cf366004612139565b6111e4565b6103e76103e2366004612005565b611268565b6040516101aa929190612555565b6102346104033660046122de565b61143d565b61041b6104163660046121e4565b6114ad565b6040516101aa9190612579565b610234610436366004612139565b611550565b61019e610449366004612263565b61161d565b61023460405180604001604052806005815260200164302e342e3160d81b81525081565b5f6001600160e01b031982166362526e6360e01b14806104a257506001600160e01b03198216636fa624af60e11b145b806104bd57506001600160e01b031982166308da864d60e31b145b806104d857506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f806060806104ee878787611667565b93509350935093505b93509350935093565b5f61050a826118bf565b61051557505f919050565b61051e82611953565b6105935760665460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa15801561056a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058e919061258b565b6104d8565b60655460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa1580156105db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d8919061258b565b606061061461060e8486612632565b83611999565b90505b9392505050565b606061062982611953565b156106aa57606554604051631be5e7ed60e01b81526001600160a01b0390911690631be5e7ed9061066290879087908790600401612705565b5f60405180830381865afa15801561067c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106a3919081019061276a565b9050610617565b5f6106b483611b14565b90506001600160a01b0381163b1561073a57604051631be5e7ed60e01b81526001600160a01b03821690631be5e7ed906106f690889088908890600401612705565b5f60405180830381865afa92505050801561073257506040513d5f823e601f3d908101601f1916820160405261072f919081019061276a565b60015b1561073a5791505b509392505050565b60655460405163276fabb160e01b81525f916001600160a01b03169063276fabb190610774908690869060040161281f565b602060405180830381865afa15801561078f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190612832565b5f6107bd826118bf565b6107c857505f6104d8565b6107d182611953565b61084d5760665460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610824573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108489190612849565b610617565b60655460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa15801561089c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190612849565b5f54610100900460ff16158080156108de57505f54600160ff909116105b806108f75750303b1580156108f757505f5460ff166001145b61095f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610980575f805461ff0019166101001790555b606580546001600160a01b038086166001600160a01b03199283161790925560668054928516929091169190911790556109b8611b85565b6109c0611b85565b8015610a05575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b5f6104d8826118bf565b5f6104d882611bf1565b606080610a2a83611953565b15610aac5760655460405163672b9f8160e01b815260048101869052602481018590526001600160a01b039091169063672b9f81906044015f60405180830381865afa158015610a7c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aa39190810190612868565b91509150610b40565b5f610ab684611b14565b90506001600160a01b0381163b15610b3e5760405163672b9f8160e01b815260048101869052602481018590526001600160a01b0382169063672b9f81906044015f60405180830381865afa925050508015610b3357506040513d5f823e601f3d908101601f19168201604052610b309190810190612868565b60015b15610b3e5790935091505b505b9250929050565b6065546040516370a0823160e01b81526001600160a01b0383811660048301525f9283929116906370a0823190602401602060405180830381865afa158015610b92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb69190612832565b6066549091506001600160a01b0316156104d8576066546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c369190612832565b61061790826128c7565b606554604051633f1ba3cf60e11b81526001600160a01b0383811660048301525f921690637e37479e90602401602060405180830381865afa158015610c88573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d89190612832565b6060808080846001600160401b03811115610cc957610cc96125a6565b604051908082528060200260200182016040528015610cf2578160200160208202803683370190505b509350846001600160401b03811115610d0d57610d0d6125a6565b604051908082528060200260200182016040528015610d36578160200160208202803683370190505b509250846001600160401b03811115610d5157610d516125a6565b604051908082528060200260200182016040528015610d8457816020015b6060815260200190600190039081610d6f5790505b509150846001600160401b03811115610d9f57610d9f6125a6565b604051908082528060200260200182016040528015610dd257816020015b6060815260200190600190039081610dbd5790505b5090505f5b85811015610e8b57610e028989898985818110610df657610df66128e6565b90506020020135611667565b888581518110610e1457610e146128e6565b60200260200101888681518110610e2d57610e2d6128e6565b60200260200101888781518110610e4657610e466128e6565b60200260200101888881518110610e5f57610e5f6128e6565b6020908102919091010193909352929091526001600160a01b0392831690915291169052600101610dd7565b50945094509450949050565b5f806060610ea6868686611c11565b9250925092505b93509350939050565b60608080836001600160401b03811115610ed257610ed26125a6565b604051908082528060200260200182016040528015610efb578160200160208202803683370190505b509250836001600160401b03811115610f1657610f166125a6565b604051908082528060200260200182016040528015610f3f578160200160208202803683370190505b509150836001600160401b03811115610f5a57610f5a6125a6565b604051908082528060200260200182016040528015610f8d57816020015b6060815260200190600190039081610f785790505b5090505f5b8481101561102957610fbd8888888885818110610fb157610fb16128e6565b90506020020135611c11565b868481518110610fcf57610fcf6128e6565b60200260200101868581518110610fe857610fe86128e6565b60200260200101868681518110611001576110016128e6565b60209081029190910101929092526001600160a01b0392831690915291169052600101610f92565b509450945094915050565b606554604051634f558e7960e01b8152600481018390525f916001600160a01b031690634f558e7990602401602060405180830381865afa15801561107b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109f9190612849565b156110b55750506065546001600160a01b031690565b6066546001600160a01b0316158015906110e057505f6110d483611e13565b6001600160a01b031614155b156110f65750506066546001600160a01b031690565b505f919050565b6060816001600160401b03811115611117576111176125a6565b60405190808252806020026020018201604052801561114a57816020015b60608152602001906001900390816111355790505b5090505f5b828110156111dd576111b83085858481811061116d5761116d6128e6565b905060200281019061117f91906128fa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e4492505050565b8282815181106111ca576111ca6128e6565b602090810291909101015260010161114f565b5092915050565b5f6111ee826118bf565b6111f957505f919050565b61120282611953565b6112375760665460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb9060240161054f565b60655460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb906024016105c0565b606080836001600160401b03811115611283576112836125a6565b6040519080825280602002602001820160405280156112b657816020015b60608152602001906001900390816112a15790505b509150836001600160401b038111156112d1576112d16125a6565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905061131083611953565b156113935760655460405163170b5fa560e31b81526001600160a01b039091169063b85afd28906113499088908890889060040161293c565b5f60405180830381865afa158015611363573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261138a91908101906129fd565b91509150611435565b5f61139d84611b14565b90506001600160a01b0381163b151580156113b757508415155b156114335760405163170b5fa560e31b81526001600160a01b0382169063b85afd28906113ec9089908990899060040161293c565b5f60405180830381865afa92505050801561142857506040513d5f823e601f3d908101601f1916820160405261142591908101906129fd565b60015b156114335790935091505b505b935093915050565b606554604051632fafb1ad60e21b81526001600160a01b038381166004830152606092169063bebec6b4906024015b5f60405180830381865afa158015611486573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526104d8919081019061276a565b6060816001600160401b038111156114c7576114c76125a6565b6040519080825280602002602001820160405280156114f0578160200160208202803683370190505b5090505f5b828110156111dd5761151e848483818110611512576115126128e6565b90506020020135611bf1565b828281518110611530576115306128e6565b6001600160a01b03909216602092830291909101909101526001016114f5565b606061155b826118bf565b61157257505060408051602081019091525f815290565b61157b82611953565b6115ec5760665460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd906024015f60405180830381865afa1580156115c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261058e919081019061276a565b60655460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240161146c565b60405162461bcd60e51b815260206004820152601f60248201527f50726f78795265616465723a20554e535550504f525445445f4d4554484f440060448201525f90606401610956565b5f80606080856001600160401b03811115611684576116846125a6565b6040519080825280602002602001820160405280156116b757816020015b60608152602001906001900390816116a25790505b509150856001600160401b038111156116d2576116d26125a6565b60405190808252806020026020018201604052801561170557816020015b60608152602001906001900390816116f05790505b50905061171185611953565b1561180c5760655460405163b3f9e4cb60e01b8152600481018790526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa15801561175d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611781919061258b565b935061178c85611f34565b60655460405163170b5fa560e31b81529194506001600160a01b03169063b85afd28906117c1908a908a908a9060040161293c565b5f60405180830381865afa1580156117db573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261180291908101906129fd565b90925090506104f7565b61181585611b14565b935061182085611e13565b92506001600160a01b0384163b1515801561183b57505f8251115b156104f75760405163170b5fa560e31b81526001600160a01b0385169063b85afd2890611870908a908a908a9060040161293c565b5f60405180830381865afa9250505080156118ac57506040513d5f823e601f3d908101601f191682016040526118a991908101906129fd565b60015b156104f757909250905093509350935093565b5f6118c982611953565b6118e7575f6118d783611e13565b6001600160a01b031614156104d8565b606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e79906024015b602060405180830381865afa15801561192f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d89190612849565b6066545f906001600160a01b031615806104d85750606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401611914565b606082516001600160401b038111156119b4576119b46125a6565b6040519080825280602002602001820160405280156119e757816020015b60608152602001906001900390816119d25790505b5090506119f382611953565b15611a7257606554604051630dec660d60e11b81526001600160a01b0390911690631bd8cc1a90611a2a9086908690600401612a52565b5f60405180830381865afa158015611a44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a6b9190810190612a73565b90506104d8565b5f611a7c83611b14565b90506001600160a01b0381163b15158015611a9757505f8451115b156111dd57604051630dec660d60e11b81526001600160a01b03821690631bd8cc1a90611aca9087908790600401612a52565b5f60405180830381865afa925050508015611b0657506040513d5f823e601f3d908101601f19168201604052611b039190810190612a73565b60015b156111dd575b949350505050565b60665460405163b3f9e4cb60e01b8152600481018390525f916001600160a01b03169063b3f9e4cb906024015b602060405180830381865afa925050508015611b7a575060408051601f3d908101601f19168201909252611b779181019061258b565b60015b6104d857505f919050565b5f54610100900460ff16611bef5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610956565b565b5f611bfb82611953565b611c085761058e82611e13565b6104d882611f34565b5f806060846001600160401b03811115611c2d57611c2d6125a6565b604051908082528060200260200182016040528015611c6057816020015b6060815260200190600190039081611c4b5790505b509050611c6c84611953565b15611d645760655460405163b3f9e4cb60e01b8152600481018690526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa158015611cb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cdc919061258b565b9250611ce784611f34565b606554604051630dec660d60e11b81529193506001600160a01b031690631bd8cc1a90611d1c90899089908990600401612aa4565b5f60405180830381865afa158015611d36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d5d9190810190612a73565b9050610ead565b611d6d84611b14565b9250611d7884611e13565b91506001600160a01b0383163b15158015611d9257508415155b15610ead57604051630dec660d60e11b81526001600160a01b03841690631bd8cc1a90611dc790899089908990600401612aa4565b5f60405180830381865afa925050508015611e0357506040513d5f823e601f3d908101601f19168201604052611e009190810190612a73565b60015b15610ead57905093509350939050565b6066546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401611b41565b60606001600160a01b0383163b611eac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610956565b5f80846001600160a01b031684604051611ec69190612ab7565b5f60405180830381855af49150503d805f8114611efe576040519150601f19603f3d011682016040523d82523d5f602084013e611f03565b606091505b5091509150611f2b8282604051806060016040528060278152602001612ad360279139611f65565b95945050505050565b6065546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401611b41565b60608315611f74575081610617565b825115611f845782518084602001fd5b8160405162461bcd60e51b815260040161095691906121d2565b5f60208284031215611fae575f80fd5b81356001600160e01b031981168114610617575f80fd5b5f8083601f840112611fd5575f80fd5b5081356001600160401b03811115611feb575f80fd5b6020830191508360208260051b8501011115610b40575f80fd5b5f805f60408486031215612017575f80fd5b83356001600160401b0381111561202c575f80fd5b61203886828701611fc5565b909790965060209590950135949350505050565b5f5b8381101561206657818101518382015260200161204e565b50505f910152565b5f815180845261208581602086016020860161204c565b601f01601f19169290920160200192915050565b5f8282518085526020808601955060208260051b840101602086015f5b848110156120e457601f198684030189526120d283835161206e565b988401989250908301906001016120b6565b5090979650505050505050565b6001600160a01b038581168252841660208201526080604082018190525f9061211c90830185612099565b828103606084015261212e8185612099565b979650505050505050565b5f60208284031215612149575f80fd5b5035919050565b602081525f6106176020830184612099565b5f805f60408486031215612174575f80fd5b83356001600160401b038082111561218a575f80fd5b818601915086601f83011261219d575f80fd5b8135818111156121ab575f80fd5b8760208285010111156121bc575f80fd5b6020928301989097509590910135949350505050565b602081525f610617602083018461206e565b5f80602083850312156121f5575f80fd5b82356001600160401b0381111561220a575f80fd5b61221685828601611fc5565b90969095509350505050565b6001600160a01b0381168114612236575f80fd5b50565b5f806040838503121561224a575f80fd5b823561225581612222565b946020939093013593505050565b5f8060408385031215612274575f80fd5b823561227f81612222565b9150602083013561228f81612222565b809150509250929050565b5f80604083850312156122ab575f80fd5b50508035926020909101359150565b604081525f6122cc604083018561206e565b8281036020840152611f2b818561206e565b5f602082840312156122ee575f80fd5b813561061781612222565b5f805f806040858703121561230c575f80fd5b84356001600160401b0380821115612322575f80fd5b61232e88838901611fc5565b90965094506020870135915080821115612346575f80fd5b5061235387828801611fc5565b95989497509550505050565b5f815180845260208085019450602084015f5b838110156123975781516001600160a01b031687529582019590820190600101612372565b509495945050505050565b5f828251808552602080860195506005818360051b8501018287015f5b8581101561242c57601f1987840381018b5282518051808652908701908786019080881b870189015f5b82811015612415578589830301845261240382865161206e565b948b0194938b019391506001016123e9565b509d89019d965050509286019250506001016123bf565b509098975050505050505050565b608081525f61244c608083018761235f565b828103602084015261245e818761235f565b9050828103604084015261247281866123a2565b9050828103606084015261212e81856123a2565b6001600160a01b038481168252831660208201526060604082018190525f90611f2b90830184612099565b606081525f6124c3606083018661235f565b82810360208401526124d5818661235f565b905082810360408401526124e981856123a2565b9695505050505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561254857603f1988860301845261253685835161206e565b9450928501929085019060010161251a565b5092979650505050505050565b604081525f6125676040830185612099565b8281036020840152611f2b8185612099565b602081525f610617602083018461235f565b5f6020828403121561259b575f80fd5b815161061781612222565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125e2576125e26125a6565b604052919050565b5f6001600160401b03821115612602576126026125a6565b5060051b60200190565b5f6001600160401b03821115612624576126246125a6565b50601f01601f191660200190565b5f61264461263f846125ea565b6125ba565b80848252602080830192508560051b850136811115612661575f80fd5b855b818110156126d15780356001600160401b03811115612680575f80fd5b870136601f820112612690575f80fd5b803561269e61263f8261260c565b81815236868385010111156126b1575f80fd5b81868401878301375f918101860191909152865250938201938201612663565b50919695505050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6127186040830185876126dd565b9050826020830152949350505050565b5f82601f830112612737575f80fd5b815161274561263f8261260c565b818152846020838601011115612759575f80fd5b611b0c82602083016020870161204c565b5f6020828403121561277a575f80fd5b81516001600160401b0381111561278f575f80fd5b611b0c84828501612728565b5f838385526020808601955060208560051b830101845f5b878110156120e457848303601f19018952813536889003601e190181126127d8575f80fd5b870184810190356001600160401b038111156127f2575f80fd5b803603821315612800575f80fd5b61280b8582846126dd565b9a86019a94505050908301906001016127b3565b602081525f61061460208301848661279b565b5f60208284031215612842575f80fd5b5051919050565b5f60208284031215612859575f80fd5b81518015158114610617575f80fd5b5f8060408385031215612879575f80fd5b82516001600160401b038082111561288f575f80fd5b61289b86838701612728565b935060208501519150808211156128b0575f80fd5b506128bd85828601612728565b9150509250929050565b808201808211156104d857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e1984360301811261290f575f80fd5b8301803591506001600160401b03821115612928575f80fd5b602001915036819003821315610b40575f80fd5b604080825281018390525f6001600160fb1b0384111561295a575f80fd5b8360051b808660608501376020830193909352500160600192915050565b5f82601f830112612987575f80fd5b8151602061299761263f836125ea565b82815260059290921b840181019181810190868411156129b5575f80fd5b8286015b848110156129f25780516001600160401b038111156129d6575f80fd5b6129e48986838b0101612728565b8452509183019183016129b9565b509695505050505050565b5f8060408385031215612a0e575f80fd5b82516001600160401b0380821115612a24575f80fd5b612a3086838701612978565b93506020850151915080821115612a45575f80fd5b506128bd85828601612978565b604081525f612a646040830185612099565b90508260208301529392505050565b5f60208284031215612a83575f80fd5b81516001600160401b03811115612a98575f80fd5b611b0c84828501612978565b604081525f61271860408301858761279b565b5f8251612ac881846020870161204c565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/PublicResolver.json b/artifacts/PublicResolver.json index aa273d76..df961e9a 100644 --- a/artifacts/PublicResolver.json +++ b/artifacts/PublicResolver.json @@ -1015,8 +1015,8 @@ "type": "function" } ], - "bytecode": "0x6101006040523480156200001257600080fd5b50604051620030403803806200304083398101604081905262000035916200017a565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152849033906000906001600160a01b038416906302571be390602401602060405180830381865afa158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c79190620001e2565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303816000875af115801562000114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013a919062000209565b5050506001600160a01b039485166080525091831660a052821660c0521660e05262000223565b6001600160a01b03811681146200017757600080fd5b50565b600080600080608085870312156200019157600080fd5b84516200019e8162000161565b6020860151909450620001b18162000161565b6040860151909350620001c48162000161565b6060860151909250620001d78162000161565b939692955090935050565b600060208284031215620001f557600080fd5b8151620002028162000161565b9392505050565b6000602082840312156200021c57600080fd5b5051919050565b60805160a05160c05160e051612ddc620002646000396000611720015260006116ee0152600081816117df015261182c015260006117680152612ddc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638b95dd7111610104578063c8690233116100a2578063e32954eb11610071578063e32954eb14610500578063e59d895d14610513578063e985e9c514610526578063f1cb7e061461056257600080fd5b8063c869023314610441578063ce3decdc14610499578063d5fa2b00146104ac578063d700ff33146104bf57600080fd5b8063a8fa5682116100de578063a8fa5682146103b7578063a9784b3e146103ca578063ac9650d81461040e578063bc1c58d11461042e57600080fd5b80638b95dd711461037e578063a22cb46514610391578063a4b91a01146103a457600080fd5b80633603d7581161017c5780635c98042b1161014b5780635c98042b14610332578063623195b014610345578063691f343114610358578063773722131461036b57600080fd5b80633603d758146102a15780633b3b57de146102b45780634cbf6ba4146102c757806359d1d43c1461031257600080fd5b8063124a319c116101b8578063124a319c1461022f5780632203ab561461025a57806329cd62ea1461027b578063304e6ade1461028e57600080fd5b806301ffc9a7146101df5780630af179d71461020757806310f13a8c1461021c575b600080fd5b6101f26101ed36600461230a565b610575565b60405190151581526020015b60405180910390f35b61021a610215366004612366565b610586565b005b61021a61022a3660046123b1565b61078f565b61024261023d36600461242a565b61085b565b6040516001600160a01b0390911681526020016101fe565b61026d610268366004612456565b610aac565b6040516101fe9291906124c8565b61021a6102893660046124e1565b610be2565b61021a61029c366004612366565b610c7c565b61021a6102af36600461250d565b610cf7565b6102426102c236600461250d565b610d98565b6101f26102d5366004612456565b600082815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b610325610320366004612366565b610dca565b6040516101fe9190612526565b61032561034036600461250d565b610ea9565b61021a610353366004612539565b610f67565b61032561036636600461250d565b611003565b61021a610379366004612366565b61103c565b61021a61038c3660046125a1565b6110b7565b61021a61039f366004612689565b611196565b61021a6103b23660046126b5565b611271565b6103256103c53660046126f3565b61133e565b6101f26103d8366004612733565b6001600160a01b039283166000908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b61042161041c3660046127ae565b61138b565b6040516101fe91906127ef565b61032561043c36600461250d565b611399565b61048461044f36600461250d565b600081815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101fe565b61021a6104a7366004612366565b6113d2565b61021a6104ba366004612851565b611513565b6104e86104cd36600461250d565b6000602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101fe565b61042161050e366004612881565b61153a565b61021a6105213660046128bf565b61154f565b6101f26105343660046128f4565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b610325610570366004612456565b6115f5565b6000610580826116bc565b92915050565b82610590816116e1565b61059957600080fd5b600084815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105fe9183918d908d908190840183828082843760009201919091525092939250506119169050565b90505b80515160208201511015610728578661ffff16600003610666578060400151965061062b81611977565b94508460405160200161063e9190612922565b60405160208183030381529060405280519060200120925061065f81611998565b935061071a565b600061067182611977565b9050816040015161ffff168861ffff16141580610695575061069386826119b4565b155b15610718576106f18c878a8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506106e8908290612954565b8b51158a6119d2565b81604001519750816020015196508095508580519060200120935061071582611998565b94505b505b61072381611c39565b610601565b50835115610783576107838a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061077a91508290508f612954565b895115886119d2565b50505050505050505050565b84610799816116e1565b6107a257600080fd5b600086815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107e19089908990612967565b908152602001604051809103902091826107fc9291906129ff565b50848460405161080d929190612967565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161084b9493929190612ae7565b60405180910390a3505050505050565b600082815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156108ae579050610580565b60006108b985610d98565b90506001600160a01b0381166108d457600092505050610580565b6040516301ffc9a760e01b602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161092c9190612922565b600060405180830381855afa9150503d8060008114610967576040519150601f19603f3d011682016040523d82523d6000602084013e61096c565b606091505b509150915081158061097f575060208151105b806109a9575080601f8151811061099857610998612b19565b01602001516001600160f81b031916155b156109bb576000945050505050610580565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251610a119190612922565b600060405180830381855afa9150503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b509092509050811580610a65575060208151105b80610a8f575080601f81518110610a7e57610a7e612b19565b01602001516001600160f81b031916155b15610aa1576000945050505050610580565b509095945050505050565b600082815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610bc25780851615801590610b0b575060008181526020839052604081208054610b0790612977565b9050115b15610bba5780826000838152602001908152602001600020808054610b2f90612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612977565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b50505050509050935093505050610bdb565b60011b610adb565b5060006040518060200160405280600081525092509250505b9250929050565b82610bec816116e1565b610bf557600080fd5b60408051808201825284815260208082018581526000888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c86816116e1565b610c8f57600080fd5b600084815260208181526040808320546001600160401b03168352600382528083208784529091529020610cc48385836129ff565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c6e929190612b2f565b80610d01816116e1565b610d0a57600080fd5b600082815260208190526040812080546001600160401b031691610d2d83612b43565b82546101009290920a6001600160401b03818102199093169183160217909155600084815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b600080610da683603c6115f5565b90508051600003610dba5750600092915050565b610dc381611d21565b9392505050565b600083815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610e099085908590612967565b90815260200160405180910390208054610e2290612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4e90612977565b8015610e9b5780601f10610e7057610100808354040283529160200191610e9b565b820191906000526020600020905b815481529060010190602001808311610e7e57829003601f168201915b505050505090509392505050565b600081815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ee290612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90612977565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b50505050509050919050565b83610f71816116e1565b610f7a57600080fd5b83610f86600182612954565b1615610f9157600080fd5b600085815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610fce8385836129ff565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35050505050565b600081815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ee290612977565b82611046816116e1565b61104f57600080fd5b600084815260208181526040808320546001600160401b031683526008825280832087845290915290206110848385836129ff565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c6e929190612b2f565b826110c1816116e1565b6110ca57600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110fc9291906124c8565b60405180910390a2603c830361115357837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261113784611d21565b6040516001600160a01b03909116815260200160405180910390a25b600084815260208181526040808320546001600160401b03168352600282528083208784528252808320868452909152902061118f8382612b69565b5050505050565b6001600160a01b03821633036112055760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112c95760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111fc565b336000818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b600083815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610e2290612977565b6060610dc360008484611d40565b600081815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ee290612977565b826113dc816116e1565b6113e557600080fd5b600084815260208181526040808320546001600160401b0316808452600483528184208885529092528220805491929161141e90612977565b80601f016020809104026020016040519081016040528092919081815260200182805461144a90612977565b80156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b505050506001600160401b03841660009081526004602090815260408083208b845290915290209192506114ce90508587836129ff565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582878760405161150393929190612c28565b60405180910390a2505050505050565b8161151d816116e1565b61152657600080fd5b61153583603c61038c85611f0f565b505050565b6060611547848484611d40565b949350505050565b82611559816116e1565b61156257600080fd5b600084815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b600082815260208181526040808320546001600160401b03168352600282528083208584528252808320848452909152902080546060919061163690612977565b80601f016020809104026020016040519081016040528092919081815260200182805461166290612977565b80156116af5780601f10611684576101008083540402835291602001916116af565b820191906000526020600020905b81548152906001019060200180831161169257829003601f168201915b5050505050905092915050565b60006001600160e01b03198216631674750f60e21b1480610580575061058082611f3f565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806117425750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b1561174f57506001919050565b6040516302571be360e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190612c58565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036118a2576040516331a9108f60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190612c58565b90505b6001600160a01b0381163314806118dc57506001600160a01b0381166000908152600b6020908152604080832033845290915290205460ff165b80610dc357506001600160a01b0381166000908152600c60209081526040808320868452825280832033845290915290205460ff16610dc3565b6119646040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261058081611c39565b602081015181516060916105809161198f9082611f64565b84519190611fbe565b60a081015160c08201516060916105809161198f908290612954565b600081518351148015610dc35750610dc38360008460008751612034565b8651602088012060006119e6878787611fbe565b90508315611b0d576001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611a3090612977565b159050611a8e576001600160401b03831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a7283612c75565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611ace91612297565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611b00929190612c93565b60405180910390a2610783565b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b4f90612977565b9050600003611baf576001600160401b03831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b9383612cb9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611bf08282612b69565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611c2593929190612cd0565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611c505750565b6000611c6482600001518360200151611f64565b8260200151611c739190612cff565b8251909150611c829082612057565b61ffff166040830152611c96600282612cff565b8251909150611ca59082612057565b61ffff166060830152611cb9600282612cff565b8251909150611cc8908261207f565b63ffffffff166080830152611cde600482612cff565b8251909150600090611cf09083612057565b61ffff169050611d01600283612cff565b60a084018190529150611d148183612cff565b60c0909301929092525050565b60008151601414611d3157600080fd5b5060200151600160601b900490565b6060816001600160401b03811115611d5a57611d5a61258b565b604051908082528060200260200182016040528015611d8d57816020015b6060815260200190600190039081611d785790505b50905060005b82811015611f07578415611e4f576000848483818110611db557611db5612b19565b9050602002810190611dc79190612d12565b611dd691602491600491612d58565b611ddf91612d82565b9050858114611e4d5760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111fc565b505b60008030868685818110611e6557611e65612b19565b9050602002810190611e779190612d12565b604051611e85929190612967565b600060405180830381855af49150503d8060008114611ec0576040519150601f19603f3d011682016040523d82523d6000602084013e611ec5565b606091505b509150915081611ed457600080fd5b80848481518110611ee757611ee7612b19565b602002602001018190525050508080611eff90612da0565b915050611d93565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b60006001600160e01b0319821663c869023360e01b14806105805750610580826120a9565b6000815b83518110611f7857611f78612db9565b6000611f8485836120ce565b60ff169050611f94816001612cff565b611f9e9083612cff565b915080600003611fae5750611fb4565b50611f68565b6115478382612954565b8251606090611fcd8385612cff565b1115611fd857600080fd5b6000826001600160401b03811115611ff257611ff261258b565b6040519080825280601f01601f19166020018201604052801561201c576020820181803683370190505b50905060208082019086860101610aa18282876120f2565b6000612041848484612148565b61204c878785612148565b149695505050505050565b8151600090612067836002612cff565b111561207257600080fd5b50016002015161ffff1690565b815160009061208f836004612cff565b111561209a57600080fd5b50016004015163ffffffff1690565b60006001600160e01b0319821663691f343160e01b148061058057506105808261216c565b60008282815181106120e2576120e2612b19565b016020015160f81c905092915050565b6020811061212a5781518352612109602084612cff565b9250612116602083612cff565b9150612123602082612954565b90506120f2565b905182516020929092036101000a6000190180199091169116179052565b82516000906121578385612cff565b111561216257600080fd5b5091016020012090565b60006001600160e01b031982166304928c6760e21b148061058057506105808260006001600160e01b0319821663547d2b4160e11b14806121bd57506001600160e01b03198216635c98042b60e01b145b8061058057506105808260006001600160e01b0319821663bc1c58d160e01b148061058057506105808260006001600160e01b03198216631d9dabef60e11b148061221857506001600160e01b031982166378e5bf0360e11b145b8061058057506105808260006001600160e01b03198216631101d5ab60e11b148061058057506105808260006001600160e01b0319821663d700ff3360e01b148061058057506105808260006001600160e01b03198216634fbf043360e01b148061058057506301ffc9a760e01b6001600160e01b0319831614610580565b5080546122a390612977565b6000825580601f106122b3575050565b601f0160209004906000526020600020908101906122d191906122d4565b50565b5b808211156122e957600081556001016122d5565b5090565b80356001600160e01b03198116811461230557600080fd5b919050565b60006020828403121561231c57600080fd5b610dc3826122ed565b60008083601f84011261233757600080fd5b5081356001600160401b0381111561234e57600080fd5b602083019150836020828501011115610bdb57600080fd5b60008060006040848603121561237b57600080fd5b8335925060208401356001600160401b0381111561239857600080fd5b6123a486828701612325565b9497909650939450505050565b6000806000806000606086880312156123c957600080fd5b8535945060208601356001600160401b03808211156123e757600080fd5b6123f389838a01612325565b9096509450604088013591508082111561240c57600080fd5b5061241988828901612325565b969995985093965092949392505050565b6000806040838503121561243d57600080fd5b8235915061244d602084016122ed565b90509250929050565b6000806040838503121561246957600080fd5b50508035926020909101359150565b60005b8381101561249357818101518382015260200161247b565b50506000910152565b600081518084526124b4816020860160208601612478565b601f01601f19169290920160200192915050565b828152604060208201526000611547604083018461249c565b6000806000606084860312156124f657600080fd5b505081359360208301359350604090920135919050565b60006020828403121561251f57600080fd5b5035919050565b602081526000610dc3602083018461249c565b6000806000806060858703121561254f57600080fd5b843593506020850135925060408501356001600160401b0381111561257357600080fd5b61257f87828801612325565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156125b657600080fd5b833592506020840135915060408401356001600160401b03808211156125db57600080fd5b818601915086601f8301126125ef57600080fd5b8135818111156126015761260161258b565b604051601f8201601f19908116603f011681019083821181831017156126295761262961258b565b8160405282815289602084870101111561264257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6001600160a01b03811681146122d157600080fd5b8035801515811461230557600080fd5b6000806040838503121561269c57600080fd5b82356126a781612664565b915061244d60208401612679565b6000806000606084860312156126ca57600080fd5b8335925060208401356126dc81612664565b91506126ea60408501612679565b90509250925092565b60008060006060848603121561270857600080fd5b8335925060208401359150604084013561ffff8116811461272857600080fd5b809150509250925092565b60008060006060848603121561274857600080fd5b833561275381612664565b925060208401359150604084013561272881612664565b60008083601f84011261277c57600080fd5b5081356001600160401b0381111561279357600080fd5b6020830191508360208260051b8501011115610bdb57600080fd5b600080602083850312156127c157600080fd5b82356001600160401b038111156127d757600080fd5b6127e38582860161276a565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561284457603f1988860301845261283285835161249c565b94509285019290850190600101612816565b5092979650505050505050565b6000806040838503121561286457600080fd5b82359150602083013561287681612664565b809150509250929050565b60008060006040848603121561289657600080fd5b8335925060208401356001600160401b038111156128b357600080fd5b6123a48682870161276a565b6000806000606084860312156128d457600080fd5b833592506128e4602085016122ed565b9150604084013561272881612664565b6000806040838503121561290757600080fd5b823561291281612664565b9150602083013561287681612664565b60008251612934818460208701612478565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105805761058061293e565b8183823760009101908152919050565b600181811c9082168061298b57607f821691505b6020821081036129ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561153557600081815260208120601f850160051c810160208610156129d85750805b601f850160051c820191505b818110156129f7578281556001016129e4565b505050505050565b6001600160401b03831115612a1657612a1661258b565b612a2a83612a248354612977565b836129b1565b6000601f841160018114612a5e5760008515612a465750838201355b600019600387901b1c1916600186901b17835561118f565b600083815260209020601f19861690835b82811015612a8f5786850135825560209485019460019092019101612a6f565b5086821015612aac5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612afb604083018688612abe565b8281036020840152612b0e818587612abe565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b602081526000611547602083018486612abe565b60006001600160401b03808316818103612b5f57612b5f61293e565b6001019392505050565b81516001600160401b03811115612b8257612b8261258b565b612b9681612b908454612977565b846129b1565b602080601f831160018114612bcb5760008415612bb35750858301515b600019600386901b1c1916600185901b1785556129f7565b600085815260208120601f198616915b82811015612bfa57888601518255948401946001909101908401612bdb565b5085821015612c185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612c3b604083018661249c565b8281036020840152612c4e818587612abe565b9695505050505050565b600060208284031215612c6a57600080fd5b8151610dc381612664565b600061ffff821680612c8957612c8961293e565b6000190192915050565b604081526000612ca6604083018561249c565b905061ffff831660208301529392505050565b600061ffff808316818103612b5f57612b5f61293e565b606081526000612ce3606083018661249c565b61ffff851660208401528281036040840152612c4e818561249c565b808201808211156105805761058061293e565b6000808335601e19843603018112612d2957600080fd5b8301803591506001600160401b03821115612d4357600080fd5b602001915036819003821315610bdb57600080fd5b60008085851115612d6857600080fd5b83861115612d7557600080fd5b5050820193919092039150565b8035602083101561058057600019602084900360031b1b1692915050565b600060018201612db257612db261293e565b5060010190565b634e487b7160e01b600052600160045260246000fdfea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80638b95dd7111610104578063c8690233116100a2578063e32954eb11610071578063e32954eb14610500578063e59d895d14610513578063e985e9c514610526578063f1cb7e061461056257600080fd5b8063c869023314610441578063ce3decdc14610499578063d5fa2b00146104ac578063d700ff33146104bf57600080fd5b8063a8fa5682116100de578063a8fa5682146103b7578063a9784b3e146103ca578063ac9650d81461040e578063bc1c58d11461042e57600080fd5b80638b95dd711461037e578063a22cb46514610391578063a4b91a01146103a457600080fd5b80633603d7581161017c5780635c98042b1161014b5780635c98042b14610332578063623195b014610345578063691f343114610358578063773722131461036b57600080fd5b80633603d758146102a15780633b3b57de146102b45780634cbf6ba4146102c757806359d1d43c1461031257600080fd5b8063124a319c116101b8578063124a319c1461022f5780632203ab561461025a57806329cd62ea1461027b578063304e6ade1461028e57600080fd5b806301ffc9a7146101df5780630af179d71461020757806310f13a8c1461021c575b600080fd5b6101f26101ed36600461230a565b610575565b60405190151581526020015b60405180910390f35b61021a610215366004612366565b610586565b005b61021a61022a3660046123b1565b61078f565b61024261023d36600461242a565b61085b565b6040516001600160a01b0390911681526020016101fe565b61026d610268366004612456565b610aac565b6040516101fe9291906124c8565b61021a6102893660046124e1565b610be2565b61021a61029c366004612366565b610c7c565b61021a6102af36600461250d565b610cf7565b6102426102c236600461250d565b610d98565b6101f26102d5366004612456565b600082815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b610325610320366004612366565b610dca565b6040516101fe9190612526565b61032561034036600461250d565b610ea9565b61021a610353366004612539565b610f67565b61032561036636600461250d565b611003565b61021a610379366004612366565b61103c565b61021a61038c3660046125a1565b6110b7565b61021a61039f366004612689565b611196565b61021a6103b23660046126b5565b611271565b6103256103c53660046126f3565b61133e565b6101f26103d8366004612733565b6001600160a01b039283166000908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b61042161041c3660046127ae565b61138b565b6040516101fe91906127ef565b61032561043c36600461250d565b611399565b61048461044f36600461250d565b600081815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101fe565b61021a6104a7366004612366565b6113d2565b61021a6104ba366004612851565b611513565b6104e86104cd36600461250d565b6000602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101fe565b61042161050e366004612881565b61153a565b61021a6105213660046128bf565b61154f565b6101f26105343660046128f4565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b610325610570366004612456565b6115f5565b6000610580826116bc565b92915050565b82610590816116e1565b61059957600080fd5b600084815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105fe9183918d908d908190840183828082843760009201919091525092939250506119169050565b90505b80515160208201511015610728578661ffff16600003610666578060400151965061062b81611977565b94508460405160200161063e9190612922565b60405160208183030381529060405280519060200120925061065f81611998565b935061071a565b600061067182611977565b9050816040015161ffff168861ffff16141580610695575061069386826119b4565b155b15610718576106f18c878a8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506106e8908290612954565b8b51158a6119d2565b81604001519750816020015196508095508580519060200120935061071582611998565b94505b505b61072381611c39565b610601565b50835115610783576107838a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061077a91508290508f612954565b895115886119d2565b50505050505050505050565b84610799816116e1565b6107a257600080fd5b600086815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107e19089908990612967565b908152602001604051809103902091826107fc9291906129ff565b50848460405161080d929190612967565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161084b9493929190612ae7565b60405180910390a3505050505050565b600082815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156108ae579050610580565b60006108b985610d98565b90506001600160a01b0381166108d457600092505050610580565b6040516301ffc9a760e01b602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161092c9190612922565b600060405180830381855afa9150503d8060008114610967576040519150601f19603f3d011682016040523d82523d6000602084013e61096c565b606091505b509150915081158061097f575060208151105b806109a9575080601f8151811061099857610998612b19565b01602001516001600160f81b031916155b156109bb576000945050505050610580565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251610a119190612922565b600060405180830381855afa9150503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b509092509050811580610a65575060208151105b80610a8f575080601f81518110610a7e57610a7e612b19565b01602001516001600160f81b031916155b15610aa1576000945050505050610580565b509095945050505050565b600082815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610bc25780851615801590610b0b575060008181526020839052604081208054610b0790612977565b9050115b15610bba5780826000838152602001908152602001600020808054610b2f90612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612977565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b50505050509050935093505050610bdb565b60011b610adb565b5060006040518060200160405280600081525092509250505b9250929050565b82610bec816116e1565b610bf557600080fd5b60408051808201825284815260208082018581526000888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c86816116e1565b610c8f57600080fd5b600084815260208181526040808320546001600160401b03168352600382528083208784529091529020610cc48385836129ff565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c6e929190612b2f565b80610d01816116e1565b610d0a57600080fd5b600082815260208190526040812080546001600160401b031691610d2d83612b43565b82546101009290920a6001600160401b03818102199093169183160217909155600084815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b600080610da683603c6115f5565b90508051600003610dba5750600092915050565b610dc381611d21565b9392505050565b600083815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610e099085908590612967565b90815260200160405180910390208054610e2290612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4e90612977565b8015610e9b5780601f10610e7057610100808354040283529160200191610e9b565b820191906000526020600020905b815481529060010190602001808311610e7e57829003601f168201915b505050505090509392505050565b600081815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ee290612977565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90612977565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b50505050509050919050565b83610f71816116e1565b610f7a57600080fd5b83610f86600182612954565b1615610f9157600080fd5b600085815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610fce8385836129ff565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35050505050565b600081815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ee290612977565b82611046816116e1565b61104f57600080fd5b600084815260208181526040808320546001600160401b031683526008825280832087845290915290206110848385836129ff565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c6e929190612b2f565b826110c1816116e1565b6110ca57600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110fc9291906124c8565b60405180910390a2603c830361115357837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261113784611d21565b6040516001600160a01b03909116815260200160405180910390a25b600084815260208181526040808320546001600160401b03168352600282528083208784528252808320868452909152902061118f8382612b69565b5050505050565b6001600160a01b03821633036112055760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112c95760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111fc565b336000818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b600083815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610e2290612977565b6060610dc360008484611d40565b600081815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ee290612977565b826113dc816116e1565b6113e557600080fd5b600084815260208181526040808320546001600160401b0316808452600483528184208885529092528220805491929161141e90612977565b80601f016020809104026020016040519081016040528092919081815260200182805461144a90612977565b80156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b505050506001600160401b03841660009081526004602090815260408083208b845290915290209192506114ce90508587836129ff565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582878760405161150393929190612c28565b60405180910390a2505050505050565b8161151d816116e1565b61152657600080fd5b61153583603c61038c85611f0f565b505050565b6060611547848484611d40565b949350505050565b82611559816116e1565b61156257600080fd5b600084815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b600082815260208181526040808320546001600160401b03168352600282528083208584528252808320848452909152902080546060919061163690612977565b80601f016020809104026020016040519081016040528092919081815260200182805461166290612977565b80156116af5780601f10611684576101008083540402835291602001916116af565b820191906000526020600020905b81548152906001019060200180831161169257829003601f168201915b5050505050905092915050565b60006001600160e01b03198216631674750f60e21b1480610580575061058082611f3f565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806117425750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b1561174f57506001919050565b6040516302571be360e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190612c58565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036118a2576040516331a9108f60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190612c58565b90505b6001600160a01b0381163314806118dc57506001600160a01b0381166000908152600b6020908152604080832033845290915290205460ff165b80610dc357506001600160a01b0381166000908152600c60209081526040808320868452825280832033845290915290205460ff16610dc3565b6119646040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261058081611c39565b602081015181516060916105809161198f9082611f64565b84519190611fbe565b60a081015160c08201516060916105809161198f908290612954565b600081518351148015610dc35750610dc38360008460008751612034565b8651602088012060006119e6878787611fbe565b90508315611b0d576001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611a3090612977565b159050611a8e576001600160401b03831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a7283612c75565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611ace91612297565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611b00929190612c93565b60405180910390a2610783565b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b4f90612977565b9050600003611baf576001600160401b03831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b9383612cb9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b03831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611bf08282612b69565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611c2593929190612cd0565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611c505750565b6000611c6482600001518360200151611f64565b8260200151611c739190612cff565b8251909150611c829082612057565b61ffff166040830152611c96600282612cff565b8251909150611ca59082612057565b61ffff166060830152611cb9600282612cff565b8251909150611cc8908261207f565b63ffffffff166080830152611cde600482612cff565b8251909150600090611cf09083612057565b61ffff169050611d01600283612cff565b60a084018190529150611d148183612cff565b60c0909301929092525050565b60008151601414611d3157600080fd5b5060200151600160601b900490565b6060816001600160401b03811115611d5a57611d5a61258b565b604051908082528060200260200182016040528015611d8d57816020015b6060815260200190600190039081611d785790505b50905060005b82811015611f07578415611e4f576000848483818110611db557611db5612b19565b9050602002810190611dc79190612d12565b611dd691602491600491612d58565b611ddf91612d82565b9050858114611e4d5760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111fc565b505b60008030868685818110611e6557611e65612b19565b9050602002810190611e779190612d12565b604051611e85929190612967565b600060405180830381855af49150503d8060008114611ec0576040519150601f19603f3d011682016040523d82523d6000602084013e611ec5565b606091505b509150915081611ed457600080fd5b80848481518110611ee757611ee7612b19565b602002602001018190525050508080611eff90612da0565b915050611d93565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b60006001600160e01b0319821663c869023360e01b14806105805750610580826120a9565b6000815b83518110611f7857611f78612db9565b6000611f8485836120ce565b60ff169050611f94816001612cff565b611f9e9083612cff565b915080600003611fae5750611fb4565b50611f68565b6115478382612954565b8251606090611fcd8385612cff565b1115611fd857600080fd5b6000826001600160401b03811115611ff257611ff261258b565b6040519080825280601f01601f19166020018201604052801561201c576020820181803683370190505b50905060208082019086860101610aa18282876120f2565b6000612041848484612148565b61204c878785612148565b149695505050505050565b8151600090612067836002612cff565b111561207257600080fd5b50016002015161ffff1690565b815160009061208f836004612cff565b111561209a57600080fd5b50016004015163ffffffff1690565b60006001600160e01b0319821663691f343160e01b148061058057506105808261216c565b60008282815181106120e2576120e2612b19565b016020015160f81c905092915050565b6020811061212a5781518352612109602084612cff565b9250612116602083612cff565b9150612123602082612954565b90506120f2565b905182516020929092036101000a6000190180199091169116179052565b82516000906121578385612cff565b111561216257600080fd5b5091016020012090565b60006001600160e01b031982166304928c6760e21b148061058057506105808260006001600160e01b0319821663547d2b4160e11b14806121bd57506001600160e01b03198216635c98042b60e01b145b8061058057506105808260006001600160e01b0319821663bc1c58d160e01b148061058057506105808260006001600160e01b03198216631d9dabef60e11b148061221857506001600160e01b031982166378e5bf0360e11b145b8061058057506105808260006001600160e01b03198216631101d5ab60e11b148061058057506105808260006001600160e01b0319821663d700ff3360e01b148061058057506105808260006001600160e01b03198216634fbf043360e01b148061058057506301ffc9a760e01b6001600160e01b0319831614610580565b5080546122a390612977565b6000825580601f106122b3575050565b601f0160209004906000526020600020908101906122d191906122d4565b50565b5b808211156122e957600081556001016122d5565b5090565b80356001600160e01b03198116811461230557600080fd5b919050565b60006020828403121561231c57600080fd5b610dc3826122ed565b60008083601f84011261233757600080fd5b5081356001600160401b0381111561234e57600080fd5b602083019150836020828501011115610bdb57600080fd5b60008060006040848603121561237b57600080fd5b8335925060208401356001600160401b0381111561239857600080fd5b6123a486828701612325565b9497909650939450505050565b6000806000806000606086880312156123c957600080fd5b8535945060208601356001600160401b03808211156123e757600080fd5b6123f389838a01612325565b9096509450604088013591508082111561240c57600080fd5b5061241988828901612325565b969995985093965092949392505050565b6000806040838503121561243d57600080fd5b8235915061244d602084016122ed565b90509250929050565b6000806040838503121561246957600080fd5b50508035926020909101359150565b60005b8381101561249357818101518382015260200161247b565b50506000910152565b600081518084526124b4816020860160208601612478565b601f01601f19169290920160200192915050565b828152604060208201526000611547604083018461249c565b6000806000606084860312156124f657600080fd5b505081359360208301359350604090920135919050565b60006020828403121561251f57600080fd5b5035919050565b602081526000610dc3602083018461249c565b6000806000806060858703121561254f57600080fd5b843593506020850135925060408501356001600160401b0381111561257357600080fd5b61257f87828801612325565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156125b657600080fd5b833592506020840135915060408401356001600160401b03808211156125db57600080fd5b818601915086601f8301126125ef57600080fd5b8135818111156126015761260161258b565b604051601f8201601f19908116603f011681019083821181831017156126295761262961258b565b8160405282815289602084870101111561264257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6001600160a01b03811681146122d157600080fd5b8035801515811461230557600080fd5b6000806040838503121561269c57600080fd5b82356126a781612664565b915061244d60208401612679565b6000806000606084860312156126ca57600080fd5b8335925060208401356126dc81612664565b91506126ea60408501612679565b90509250925092565b60008060006060848603121561270857600080fd5b8335925060208401359150604084013561ffff8116811461272857600080fd5b809150509250925092565b60008060006060848603121561274857600080fd5b833561275381612664565b925060208401359150604084013561272881612664565b60008083601f84011261277c57600080fd5b5081356001600160401b0381111561279357600080fd5b6020830191508360208260051b8501011115610bdb57600080fd5b600080602083850312156127c157600080fd5b82356001600160401b038111156127d757600080fd5b6127e38582860161276a565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561284457603f1988860301845261283285835161249c565b94509285019290850190600101612816565b5092979650505050505050565b6000806040838503121561286457600080fd5b82359150602083013561287681612664565b809150509250929050565b60008060006040848603121561289657600080fd5b8335925060208401356001600160401b038111156128b357600080fd5b6123a48682870161276a565b6000806000606084860312156128d457600080fd5b833592506128e4602085016122ed565b9150604084013561272881612664565b6000806040838503121561290757600080fd5b823561291281612664565b9150602083013561287681612664565b60008251612934818460208701612478565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105805761058061293e565b8183823760009101908152919050565b600181811c9082168061298b57607f821691505b6020821081036129ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561153557600081815260208120601f850160051c810160208610156129d85750805b601f850160051c820191505b818110156129f7578281556001016129e4565b505050505050565b6001600160401b03831115612a1657612a1661258b565b612a2a83612a248354612977565b836129b1565b6000601f841160018114612a5e5760008515612a465750838201355b600019600387901b1c1916600186901b17835561118f565b600083815260209020601f19861690835b82811015612a8f5786850135825560209485019460019092019101612a6f565b5086821015612aac5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612afb604083018688612abe565b8281036020840152612b0e818587612abe565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b602081526000611547602083018486612abe565b60006001600160401b03808316818103612b5f57612b5f61293e565b6001019392505050565b81516001600160401b03811115612b8257612b8261258b565b612b9681612b908454612977565b846129b1565b602080601f831160018114612bcb5760008415612bb35750858301515b600019600386901b1c1916600185901b1785556129f7565b600085815260208120601f198616915b82811015612bfa57888601518255948401946001909101908401612bdb565b5085821015612c185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612c3b604083018661249c565b8281036020840152612c4e818587612abe565b9695505050505050565b600060208284031215612c6a57600080fd5b8151610dc381612664565b600061ffff821680612c8957612c8961293e565b6000190192915050565b604081526000612ca6604083018561249c565b905061ffff831660208301529392505050565b600061ffff808316818103612b5f57612b5f61293e565b606081526000612ce3606083018661249c565b61ffff851660208401528281036040840152612c4e818561249c565b808201808211156105805761058061293e565b6000808335601e19843603018112612d2957600080fd5b8301803591506001600160401b03821115612d4357600080fd5b602001915036819003821315610bdb57600080fd5b60008085851115612d6857600080fd5b83861115612d7557600080fd5b5050820193919092039150565b8035602083101561058057600019602084900360031b1b1692915050565b600060018201612db257612db261293e565b5060010190565b634e487b7160e01b600052600160045260246000fdfea164736f6c6343000811000a", + "bytecode": "0x61010060405234801562000011575f80fd5b5060405162002ef638038062002ef6833981016040819052620000349162000172565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152849033905f906001600160a01b038416906302571be390602401602060405180830381865afa1580156200009d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000c39190620001d7565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303815f875af11580156200010d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001339190620001fc565b5050506001600160a01b039485166080525091831660a052821660c0521660e05262000214565b6001600160a01b03811681146200016f575f80fd5b50565b5f805f806080858703121562000186575f80fd5b845162000193816200015a565b6020860151909450620001a6816200015a565b6040860151909350620001b9816200015a565b6060860151909250620001cc816200015a565b939692955090935050565b5f60208284031215620001e8575f80fd5b8151620001f5816200015a565b9392505050565b5f602082840312156200020d575f80fd5b5051919050565b60805160a05160c05160e051612ca76200024f5f395f6116c801525f61169601525f818161178401526117d101525f61170f0152612ca75ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c80638b95dd71116100fe578063c86902331161009e578063e32954eb1161006e578063e32954eb146104f2578063e59d895d14610505578063e985e9c514610518578063f1cb7e0614610553575f80fd5b8063c869023314610435578063ce3decdc1461048c578063d5fa2b001461049f578063d700ff33146104b2575f80fd5b8063a8fa5682116100d9578063a8fa5682146103ac578063a9784b3e146103bf578063ac9650d814610402578063bc1c58d114610422575f80fd5b80638b95dd7114610373578063a22cb46514610386578063a4b91a0114610399575f80fd5b80633603d758116101745780635c98042b116101445780635c98042b14610327578063623195b01461033a578063691f34311461034d5780637737221314610360575f80fd5b80633603d758146102975780633b3b57de146102aa5780634cbf6ba4146102bd57806359d1d43c14610307575f80fd5b8063124a319c116101af578063124a319c146102255780632203ab561461025057806329cd62ea14610271578063304e6ade14610284575f80fd5b806301ffc9a7146101d55780630af179d7146101fd57806310f13a8c14610212575b5f80fd5b6101e86101e3366004612267565b610566565b60405190151581526020015b60405180910390f35b61021061020b3660046122bd565b610576565b005b610210610220366004612304565b610778565b610238610233366004612377565b610842565b6040516001600160a01b0390911681526020016101f4565b61026361025e3660046123a1565b610a87565b6040516101f492919061240e565b61021061027f366004612426565b610bb5565b6102106102923660046122bd565b610c4d565b6102106102a536600461244f565b610cc6565b6102386102b836600461244f565b610d64565b6101e86102cb3660046123a1565b5f82815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b61031a6103153660046122bd565b610d93565b6040516101f49190612466565b61031a61033536600461244f565b610e6f565b610210610348366004612478565b610f2a565b61031a61035b36600461244f565b610fc2565b61021061036e3660046122bd565b610ffa565b6102106103813660046124da565b611073565b6102106103943660046125b9565b611150565b6102106103a73660046125e3565b61122a565b61031a6103ba36600461261e565b6112f6565b6101e86103cd36600461265a565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b6104156104103660046126ce565b611342565b6040516101f4919061270c565b61031a61043036600461244f565b61134f565b61047761044336600461244f565b5f81815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f4565b61021061049a3660046122bd565b611387565b6102106104ad36600461276e565b6114c3565b6104da6104c036600461244f565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101f4565b61041561050036600461279c565b6114e9565b6102106105133660046127d6565b6114fe565b6101e8610526366004612808565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61031a6105613660046123a1565b6115a2565b5f61057082611666565b92915050565b826105808161168a565b610588575f80fd5b5f84815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105eb9183918d908d90819084018382808284375f9201919091525092939250506118b79050565b90505b80515160208201511015610712578661ffff165f03610652578060400151965061061781611912565b94508460405160200161062a9190612834565b60405160208183030381529060405280519060200120925061064b81611933565b9350610704565b5f61065c82611912565b9050816040015161ffff168861ffff16141580610680575061067e868261194f565b155b15610702576106db8c878a8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505060208801518d91506106d2908290612863565b8b51158a61196a565b8160400151975081602001519650809550858051906020012093506106ff82611933565b94505b505b61070d81611bc9565b6105ee565b5083511561076c5761076c8a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c925061076391508290508f612863565b8951158861196a565b50505050505050505050565b846107828161168a565b61078a575f80fd5b5f86815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107c89089908990612876565b908152602001604051809103902091826107e3929190612901565b5084846040516107f4929190612876565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161083294939291906129e2565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b03168015610894579050610570565b5f61089e85610d64565b90506001600160a01b0381166108b8575f92505050610570565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161090f9190612834565b5f60405180830381855afa9150503d805f8114610947576040519150601f19603f3d011682016040523d82523d5f602084013e61094c565b606091505b509150915081158061095f575060208151105b80610989575080601f8151811061097857610978612a13565b01602001516001600160f81b031916155b1561099a575f945050505050610570565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516109f09190612834565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b509092509050811580610a41575060208151105b80610a6b575080601f81518110610a5a57610a5a612a13565b01602001516001600160f81b031916155b15610a7c575f945050505050610570565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610b975780851615801590610ae457505f8181526020839052604081208054610ae090612885565b9050115b15610b8f5780825f8381526020019081526020015f20808054610b0690612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3290612885565b8015610b7d5780601f10610b5457610100808354040283529160200191610b7d565b820191905f5260205f20905b815481529060010190602001808311610b6057829003601f168201915b50505050509050935093505050610bae565b60011b610ab5565b505f60405180602001604052805f81525092509250505b9250929050565b82610bbf8161168a565b610bc7575f80fd5b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c578161168a565b610c5f575f80fd5b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610c93838583612901565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c3f929190612a27565b80610cd08161168a565b610cd8575f80fd5b5f82815260208190526040812080546001600160401b031691610cfa83612a3a565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f80610d7183603c6115a2565b905080515f03610d8357505f92915050565b610d8c81611cae565b9392505050565b5f83815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610dd19085908590612876565b90815260200160405180910390208054610dea90612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1690612885565b8015610e615780601f10610e3857610100808354040283529160200191610e61565b820191905f5260205f20905b815481529060010190602001808311610e4457829003601f168201915b505050505090509392505050565b5f81815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ea790612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed390612885565b8015610f1e5780601f10610ef557610100808354040283529160200191610f1e565b820191905f5260205f20905b815481529060010190602001808311610f0157829003601f168201915b50505050509050919050565b83610f348161168a565b610f3c575f80fd5b83610f48600182612863565b1615610f52575f80fd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610f8e838583612901565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ea790612885565b826110048161168a565b61100c575f80fd5b5f84815260208181526040808320546001600160401b03168352600882528083208784529091529020611040838583612901565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c3f929190612a27565b8261107d8161168a565b611085575f80fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110b792919061240e565b60405180910390a2603c830361110e57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110f284611cae565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b0316835260028252808320878452825280832086845290915290206111498382612a5f565b5050505050565b6001600160a01b03821633036111bf5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112825760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111b6565b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b5f83815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610dea90612885565b6060610d8c5f8484611ccb565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ea790612885565b826113918161168a565b611399575f80fd5b5f84815260208181526040808320546001600160401b031680845260048352818420888552909252822080549192916113d190612885565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90612885565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b505050506001600160401b0384165f9081526004602090815260408083208b8452909152902091925061147e9050858783612901565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f858287876040516114b393929190612b1e565b60405180910390a2505050505050565b816114cd8161168a565b6114d5575f80fd5b6114e483603c61038185611e88565b505050565b60606114f6848484611ccb565b949350505050565b826115088161168a565b611510575f80fd5b5f84815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906115e290612885565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612885565b80156116595780601f1061163057610100808354040283529160200191611659565b820191905f5260205f20905b81548152906001019060200180831161163c57829003601f168201915b5050505050905092915050565b5f6001600160e01b03198216631674750f60e21b1480610570575061057082611eb8565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806116ea5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b156116f757506001919050565b6040516302571be360e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa15801561175c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117809190612b4d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611845576040516331a9108f60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190612b4d565b90505b6001600160a01b03811633148061187e57506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610d8c57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610d8c565b6118ff6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261057081611bc9565b602081015181516060916105709161192a9082611edc565b84519190611f33565b60a081015160c08201516060916105709161192a908290612863565b5f81518351148015610d8c5750610d8c835f845f8751611fa7565b865160208801205f61197d878787611f33565b90508315611aa1576001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c168452909152902080546119c690612885565b159050611a23576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a0783612b68565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611a62916121f9565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611a94929190612b84565b60405180910390a261076c565b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611ae290612885565b90505f03611b40576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b2483612ba9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611b808282612a5f565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611bb593929190612bbf565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611be05750565b5f611bf2825f01518360200151611edc565b8260200151611c019190612bed565b8251909150611c109082611fc9565b61ffff166040830152611c24600282612bed565b8251909150611c339082611fc9565b61ffff166060830152611c47600282612bed565b8251909150611c569082611fef565b63ffffffff166080830152611c6c600482612bed565b82519091505f90611c7d9083611fc9565b61ffff169050611c8e600283612bed565b60a084018190529150611ca18183612bed565b60c0909301929092525050565b5f8151601414611cbc575f80fd5b5060200151600160601b900490565b6060816001600160401b03811115611ce557611ce56124c6565b604051908082528060200260200182016040528015611d1857816020015b6060815260200190600190039081611d035790505b5090505f5b82811015611e80578415611dd8575f848483818110611d3e57611d3e612a13565b9050602002810190611d509190612c00565b611d5f91602491600491612c42565b611d6891612c69565b9050858114611dd65760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111b6565b505b5f8030868685818110611ded57611ded612a13565b9050602002810190611dff9190612c00565b604051611e0d929190612876565b5f60405180830381855af49150503d805f8114611e45576040519150601f19603f3d011682016040523d82523d5f602084013e611e4a565b606091505b509150915081611e58575f80fd5b80848481518110611e6b57611e6b612a13565b60209081029190910101525050600101611d1d565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b1480610570575061057082612017565b5f815b83518110611eef57611eef612c86565b5f611efa858361203b565b60ff169050611f0a816001612bed565b611f149083612bed565b9150805f03611f235750611f29565b50611edf565b6114f68382612863565b8251606090611f428385612bed565b1115611f4c575f80fd5b5f826001600160401b03811115611f6557611f656124c6565b6040519080825280601f01601f191660200182016040528015611f8f576020820181803683370190505b50905060208082019086860101610a7c82828761205e565b5f611fb38484846120b3565b611fbe8787856120b3565b149695505050505050565b81515f90611fd8836002612bed565b1115611fe2575f80fd5b50016002015161ffff1690565b81515f90611ffe836004612bed565b1115612008575f80fd5b50016004015163ffffffff1690565b5f6001600160e01b0319821663691f343160e01b14806105705750610570826120d5565b5f82828151811061204e5761204e612a13565b016020015160f81c905092915050565b602081106120965781518352612075602084612bed565b9250612082602083612bed565b915061208f602082612863565b905061205e565b905182516020929092036101000a5f190180199091169116179052565b82515f906120c18385612bed565b11156120cb575f80fd5b5091016020012090565b5f6001600160e01b031982166304928c6760e21b14806105705750610570825f6001600160e01b0319821663547d2b4160e11b148061212457506001600160e01b03198216635c98042b60e01b145b806105705750610570825f6001600160e01b0319821663bc1c58d160e01b14806105705750610570825f6001600160e01b03198216631d9dabef60e11b148061217d57506001600160e01b031982166378e5bf0360e11b145b806105705750610570825f6001600160e01b03198216631101d5ab60e11b14806105705750610570825f6001600160e01b0319821663d700ff3360e01b14806105705750610570825f6001600160e01b03198216634fbf043360e01b148061057057506301ffc9a760e01b6001600160e01b0319831614610570565b50805461220590612885565b5f825580601f10612214575050565b601f0160209004905f5260205f20908101906122309190612233565b50565b5b80821115612247575f8155600101612234565b5090565b80356001600160e01b031981168114612262575f80fd5b919050565b5f60208284031215612277575f80fd5b610d8c8261224b565b5f8083601f840112612290575f80fd5b5081356001600160401b038111156122a6575f80fd5b602083019150836020828501011115610bae575f80fd5b5f805f604084860312156122cf575f80fd5b8335925060208401356001600160401b038111156122eb575f80fd5b6122f786828701612280565b9497909650939450505050565b5f805f805f60608688031215612318575f80fd5b8535945060208601356001600160401b0380821115612335575f80fd5b61234189838a01612280565b90965094506040880135915080821115612359575f80fd5b5061236688828901612280565b969995985093965092949392505050565b5f8060408385031215612388575f80fd5b823591506123986020840161224b565b90509250929050565b5f80604083850312156123b2575f80fd5b50508035926020909101359150565b5f5b838110156123db5781810151838201526020016123c3565b50505f910152565b5f81518084526123fa8160208601602086016123c1565b601f01601f19169290920160200192915050565b828152604060208201525f6114f660408301846123e3565b5f805f60608486031215612438575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561245f575f80fd5b5035919050565b602081525f610d8c60208301846123e3565b5f805f806060858703121561248b575f80fd5b843593506020850135925060408501356001600160401b038111156124ae575f80fd5b6124ba87828801612280565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156124ec575f80fd5b833592506020840135915060408401356001600160401b0380821115612510575f80fd5b818601915086601f830112612523575f80fd5b813581811115612535576125356124c6565b604051601f8201601f19908116603f0116810190838211818310171561255d5761255d6124c6565b81604052828152896020848701011115612575575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b6001600160a01b0381168114612230575f80fd5b80358015158114612262575f80fd5b5f80604083850312156125ca575f80fd5b82356125d581612596565b9150612398602084016125aa565b5f805f606084860312156125f5575f80fd5b83359250602084013561260781612596565b9150612615604085016125aa565b90509250925092565b5f805f60608486031215612630575f80fd5b8335925060208401359150604084013561ffff8116811461264f575f80fd5b809150509250925092565b5f805f6060848603121561266c575f80fd5b833561267781612596565b925060208401359150604084013561264f81612596565b5f8083601f84011261269e575f80fd5b5081356001600160401b038111156126b4575f80fd5b6020830191508360208260051b8501011115610bae575f80fd5b5f80602083850312156126df575f80fd5b82356001600160401b038111156126f4575f80fd5b6127008582860161268e565b90969095509350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561276157603f1988860301845261274f8583516123e3565b94509285019290850190600101612733565b5092979650505050505050565b5f806040838503121561277f575f80fd5b82359150602083013561279181612596565b809150509250929050565b5f805f604084860312156127ae575f80fd5b8335925060208401356001600160401b038111156127ca575f80fd5b6122f78682870161268e565b5f805f606084860312156127e8575f80fd5b833592506127f86020850161224b565b9150604084013561264f81612596565b5f8060408385031215612819575f80fd5b823561282481612596565b9150602083013561279181612596565b5f82516128458184602087016123c1565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105705761057061284f565b818382375f9101908152919050565b600181811c9082168061289957607f821691505b6020821081036128b757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156114e457805f5260205f20601f840160051c810160208510156128e25750805b601f840160051c820191505b81811015611149575f81556001016128ee565b6001600160401b03831115612918576129186124c6565b61292c836129268354612885565b836128bd565b5f601f84116001811461295d575f85156129465750838201355b5f19600387901b1c1916600186901b178355611149565b5f83815260208120601f198716915b8281101561298c578685013582556020948501946001909201910161296c565b50868210156129a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6129f56040830186886129ba565b8281036020840152612a088185876129ba565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6114f66020830184866129ba565b5f6001600160401b03808316818103612a5557612a5561284f565b6001019392505050565b81516001600160401b03811115612a7857612a786124c6565b612a8c81612a868454612885565b846128bd565b602080601f831160018114612abf575f8415612aa85750858301515b5f19600386901b1c1916600185901b178555612b16565b5f85815260208120601f198616915b82811015612aed57888601518255948401946001909101908401612ace565b5085821015612b0a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604081525f612b3060408301866123e3565b8281036020840152612b438185876129ba565b9695505050505050565b5f60208284031215612b5d575f80fd5b8151610d8c81612596565b5f61ffff821680612b7b57612b7b61284f565b5f190192915050565b604081525f612b9660408301856123e3565b905061ffff831660208301529392505050565b5f61ffff808316818103612a5557612a5561284f565b606081525f612bd160608301866123e3565b61ffff851660208401528281036040840152612b4381856123e3565b808201808211156105705761057061284f565b5f808335601e19843603018112612c15575f80fd5b8301803591506001600160401b03821115612c2e575f80fd5b602001915036819003821315610bae575f80fd5b5f8085851115612c50575f80fd5b83861115612c5c575f80fd5b5050820193919092039150565b80356020831015610570575f19602084900360031b1b1692915050565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106101d1575f3560e01c80638b95dd71116100fe578063c86902331161009e578063e32954eb1161006e578063e32954eb146104f2578063e59d895d14610505578063e985e9c514610518578063f1cb7e0614610553575f80fd5b8063c869023314610435578063ce3decdc1461048c578063d5fa2b001461049f578063d700ff33146104b2575f80fd5b8063a8fa5682116100d9578063a8fa5682146103ac578063a9784b3e146103bf578063ac9650d814610402578063bc1c58d114610422575f80fd5b80638b95dd7114610373578063a22cb46514610386578063a4b91a0114610399575f80fd5b80633603d758116101745780635c98042b116101445780635c98042b14610327578063623195b01461033a578063691f34311461034d5780637737221314610360575f80fd5b80633603d758146102975780633b3b57de146102aa5780634cbf6ba4146102bd57806359d1d43c14610307575f80fd5b8063124a319c116101af578063124a319c146102255780632203ab561461025057806329cd62ea14610271578063304e6ade14610284575f80fd5b806301ffc9a7146101d55780630af179d7146101fd57806310f13a8c14610212575b5f80fd5b6101e86101e3366004612267565b610566565b60405190151581526020015b60405180910390f35b61021061020b3660046122bd565b610576565b005b610210610220366004612304565b610778565b610238610233366004612377565b610842565b6040516001600160a01b0390911681526020016101f4565b61026361025e3660046123a1565b610a87565b6040516101f492919061240e565b61021061027f366004612426565b610bb5565b6102106102923660046122bd565b610c4d565b6102106102a536600461244f565b610cc6565b6102386102b836600461244f565b610d64565b6101e86102cb3660046123a1565b5f82815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b61031a6103153660046122bd565b610d93565b6040516101f49190612466565b61031a61033536600461244f565b610e6f565b610210610348366004612478565b610f2a565b61031a61035b36600461244f565b610fc2565b61021061036e3660046122bd565b610ffa565b6102106103813660046124da565b611073565b6102106103943660046125b9565b611150565b6102106103a73660046125e3565b61122a565b61031a6103ba36600461261e565b6112f6565b6101e86103cd36600461265a565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b6104156104103660046126ce565b611342565b6040516101f4919061270c565b61031a61043036600461244f565b61134f565b61047761044336600461244f565b5f81815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f4565b61021061049a3660046122bd565b611387565b6102106104ad36600461276e565b6114c3565b6104da6104c036600461244f565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101f4565b61041561050036600461279c565b6114e9565b6102106105133660046127d6565b6114fe565b6101e8610526366004612808565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61031a6105613660046123a1565b6115a2565b5f61057082611666565b92915050565b826105808161168a565b610588575f80fd5b5f84815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105eb9183918d908d90819084018382808284375f9201919091525092939250506118b79050565b90505b80515160208201511015610712578661ffff165f03610652578060400151965061061781611912565b94508460405160200161062a9190612834565b60405160208183030381529060405280519060200120925061064b81611933565b9350610704565b5f61065c82611912565b9050816040015161ffff168861ffff16141580610680575061067e868261194f565b155b15610702576106db8c878a8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505060208801518d91506106d2908290612863565b8b51158a61196a565b8160400151975081602001519650809550858051906020012093506106ff82611933565b94505b505b61070d81611bc9565b6105ee565b5083511561076c5761076c8a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c925061076391508290508f612863565b8951158861196a565b50505050505050505050565b846107828161168a565b61078a575f80fd5b5f86815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107c89089908990612876565b908152602001604051809103902091826107e3929190612901565b5084846040516107f4929190612876565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161083294939291906129e2565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b03168015610894579050610570565b5f61089e85610d64565b90506001600160a01b0381166108b8575f92505050610570565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161090f9190612834565b5f60405180830381855afa9150503d805f8114610947576040519150601f19603f3d011682016040523d82523d5f602084013e61094c565b606091505b509150915081158061095f575060208151105b80610989575080601f8151811061097857610978612a13565b01602001516001600160f81b031916155b1561099a575f945050505050610570565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516109f09190612834565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b509092509050811580610a41575060208151105b80610a6b575080601f81518110610a5a57610a5a612a13565b01602001516001600160f81b031916155b15610a7c575f945050505050610570565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610b975780851615801590610ae457505f8181526020839052604081208054610ae090612885565b9050115b15610b8f5780825f8381526020019081526020015f20808054610b0690612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3290612885565b8015610b7d5780601f10610b5457610100808354040283529160200191610b7d565b820191905f5260205f20905b815481529060010190602001808311610b6057829003601f168201915b50505050509050935093505050610bae565b60011b610ab5565b505f60405180602001604052805f81525092509250505b9250929050565b82610bbf8161168a565b610bc7575f80fd5b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c578161168a565b610c5f575f80fd5b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610c93838583612901565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c3f929190612a27565b80610cd08161168a565b610cd8575f80fd5b5f82815260208190526040812080546001600160401b031691610cfa83612a3a565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f80610d7183603c6115a2565b905080515f03610d8357505f92915050565b610d8c81611cae565b9392505050565b5f83815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610dd19085908590612876565b90815260200160405180910390208054610dea90612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1690612885565b8015610e615780601f10610e3857610100808354040283529160200191610e61565b820191905f5260205f20905b815481529060010190602001808311610e4457829003601f168201915b505050505090509392505050565b5f81815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ea790612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed390612885565b8015610f1e5780601f10610ef557610100808354040283529160200191610f1e565b820191905f5260205f20905b815481529060010190602001808311610f0157829003601f168201915b50505050509050919050565b83610f348161168a565b610f3c575f80fd5b83610f48600182612863565b1615610f52575f80fd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610f8e838583612901565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ea790612885565b826110048161168a565b61100c575f80fd5b5f84815260208181526040808320546001600160401b03168352600882528083208784529091529020611040838583612901565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c3f929190612a27565b8261107d8161168a565b611085575f80fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110b792919061240e565b60405180910390a2603c830361110e57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110f284611cae565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b0316835260028252808320878452825280832086845290915290206111498382612a5f565b5050505050565b6001600160a01b03821633036111bf5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112825760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111b6565b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b5f83815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610dea90612885565b6060610d8c5f8484611ccb565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ea790612885565b826113918161168a565b611399575f80fd5b5f84815260208181526040808320546001600160401b031680845260048352818420888552909252822080549192916113d190612885565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90612885565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b505050506001600160401b0384165f9081526004602090815260408083208b8452909152902091925061147e9050858783612901565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f858287876040516114b393929190612b1e565b60405180910390a2505050505050565b816114cd8161168a565b6114d5575f80fd5b6114e483603c61038185611e88565b505050565b60606114f6848484611ccb565b949350505050565b826115088161168a565b611510575f80fd5b5f84815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906115e290612885565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612885565b80156116595780601f1061163057610100808354040283529160200191611659565b820191905f5260205f20905b81548152906001019060200180831161163c57829003601f168201915b5050505050905092915050565b5f6001600160e01b03198216631674750f60e21b1480610570575061057082611eb8565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806116ea5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b156116f757506001919050565b6040516302571be360e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa15801561175c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117809190612b4d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611845576040516331a9108f60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190612b4d565b90505b6001600160a01b03811633148061187e57506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610d8c57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610d8c565b6118ff6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261057081611bc9565b602081015181516060916105709161192a9082611edc565b84519190611f33565b60a081015160c08201516060916105709161192a908290612863565b5f81518351148015610d8c5750610d8c835f845f8751611fa7565b865160208801205f61197d878787611f33565b90508315611aa1576001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c168452909152902080546119c690612885565b159050611a23576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a0783612b68565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611a62916121f9565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611a94929190612b84565b60405180910390a261076c565b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611ae290612885565b90505f03611b40576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b2483612ba9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611b808282612a5f565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611bb593929190612bbf565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611be05750565b5f611bf2825f01518360200151611edc565b8260200151611c019190612bed565b8251909150611c109082611fc9565b61ffff166040830152611c24600282612bed565b8251909150611c339082611fc9565b61ffff166060830152611c47600282612bed565b8251909150611c569082611fef565b63ffffffff166080830152611c6c600482612bed565b82519091505f90611c7d9083611fc9565b61ffff169050611c8e600283612bed565b60a084018190529150611ca18183612bed565b60c0909301929092525050565b5f8151601414611cbc575f80fd5b5060200151600160601b900490565b6060816001600160401b03811115611ce557611ce56124c6565b604051908082528060200260200182016040528015611d1857816020015b6060815260200190600190039081611d035790505b5090505f5b82811015611e80578415611dd8575f848483818110611d3e57611d3e612a13565b9050602002810190611d509190612c00565b611d5f91602491600491612c42565b611d6891612c69565b9050858114611dd65760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111b6565b505b5f8030868685818110611ded57611ded612a13565b9050602002810190611dff9190612c00565b604051611e0d929190612876565b5f60405180830381855af49150503d805f8114611e45576040519150601f19603f3d011682016040523d82523d5f602084013e611e4a565b606091505b509150915081611e58575f80fd5b80848481518110611e6b57611e6b612a13565b60209081029190910101525050600101611d1d565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b1480610570575061057082612017565b5f815b83518110611eef57611eef612c86565b5f611efa858361203b565b60ff169050611f0a816001612bed565b611f149083612bed565b9150805f03611f235750611f29565b50611edf565b6114f68382612863565b8251606090611f428385612bed565b1115611f4c575f80fd5b5f826001600160401b03811115611f6557611f656124c6565b6040519080825280601f01601f191660200182016040528015611f8f576020820181803683370190505b50905060208082019086860101610a7c82828761205e565b5f611fb38484846120b3565b611fbe8787856120b3565b149695505050505050565b81515f90611fd8836002612bed565b1115611fe2575f80fd5b50016002015161ffff1690565b81515f90611ffe836004612bed565b1115612008575f80fd5b50016004015163ffffffff1690565b5f6001600160e01b0319821663691f343160e01b14806105705750610570826120d5565b5f82828151811061204e5761204e612a13565b016020015160f81c905092915050565b602081106120965781518352612075602084612bed565b9250612082602083612bed565b915061208f602082612863565b905061205e565b905182516020929092036101000a5f190180199091169116179052565b82515f906120c18385612bed565b11156120cb575f80fd5b5091016020012090565b5f6001600160e01b031982166304928c6760e21b14806105705750610570825f6001600160e01b0319821663547d2b4160e11b148061212457506001600160e01b03198216635c98042b60e01b145b806105705750610570825f6001600160e01b0319821663bc1c58d160e01b14806105705750610570825f6001600160e01b03198216631d9dabef60e11b148061217d57506001600160e01b031982166378e5bf0360e11b145b806105705750610570825f6001600160e01b03198216631101d5ab60e11b14806105705750610570825f6001600160e01b0319821663d700ff3360e01b14806105705750610570825f6001600160e01b03198216634fbf043360e01b148061057057506301ffc9a760e01b6001600160e01b0319831614610570565b50805461220590612885565b5f825580601f10612214575050565b601f0160209004905f5260205f20908101906122309190612233565b50565b5b80821115612247575f8155600101612234565b5090565b80356001600160e01b031981168114612262575f80fd5b919050565b5f60208284031215612277575f80fd5b610d8c8261224b565b5f8083601f840112612290575f80fd5b5081356001600160401b038111156122a6575f80fd5b602083019150836020828501011115610bae575f80fd5b5f805f604084860312156122cf575f80fd5b8335925060208401356001600160401b038111156122eb575f80fd5b6122f786828701612280565b9497909650939450505050565b5f805f805f60608688031215612318575f80fd5b8535945060208601356001600160401b0380821115612335575f80fd5b61234189838a01612280565b90965094506040880135915080821115612359575f80fd5b5061236688828901612280565b969995985093965092949392505050565b5f8060408385031215612388575f80fd5b823591506123986020840161224b565b90509250929050565b5f80604083850312156123b2575f80fd5b50508035926020909101359150565b5f5b838110156123db5781810151838201526020016123c3565b50505f910152565b5f81518084526123fa8160208601602086016123c1565b601f01601f19169290920160200192915050565b828152604060208201525f6114f660408301846123e3565b5f805f60608486031215612438575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561245f575f80fd5b5035919050565b602081525f610d8c60208301846123e3565b5f805f806060858703121561248b575f80fd5b843593506020850135925060408501356001600160401b038111156124ae575f80fd5b6124ba87828801612280565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156124ec575f80fd5b833592506020840135915060408401356001600160401b0380821115612510575f80fd5b818601915086601f830112612523575f80fd5b813581811115612535576125356124c6565b604051601f8201601f19908116603f0116810190838211818310171561255d5761255d6124c6565b81604052828152896020848701011115612575575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b6001600160a01b0381168114612230575f80fd5b80358015158114612262575f80fd5b5f80604083850312156125ca575f80fd5b82356125d581612596565b9150612398602084016125aa565b5f805f606084860312156125f5575f80fd5b83359250602084013561260781612596565b9150612615604085016125aa565b90509250925092565b5f805f60608486031215612630575f80fd5b8335925060208401359150604084013561ffff8116811461264f575f80fd5b809150509250925092565b5f805f6060848603121561266c575f80fd5b833561267781612596565b925060208401359150604084013561264f81612596565b5f8083601f84011261269e575f80fd5b5081356001600160401b038111156126b4575f80fd5b6020830191508360208260051b8501011115610bae575f80fd5b5f80602083850312156126df575f80fd5b82356001600160401b038111156126f4575f80fd5b6127008582860161268e565b90969095509350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561276157603f1988860301845261274f8583516123e3565b94509285019290850190600101612733565b5092979650505050505050565b5f806040838503121561277f575f80fd5b82359150602083013561279181612596565b809150509250929050565b5f805f604084860312156127ae575f80fd5b8335925060208401356001600160401b038111156127ca575f80fd5b6122f78682870161268e565b5f805f606084860312156127e8575f80fd5b833592506127f86020850161224b565b9150604084013561264f81612596565b5f8060408385031215612819575f80fd5b823561282481612596565b9150602083013561279181612596565b5f82516128458184602087016123c1565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105705761057061284f565b818382375f9101908152919050565b600181811c9082168061289957607f821691505b6020821081036128b757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156114e457805f5260205f20601f840160051c810160208510156128e25750805b601f840160051c820191505b81811015611149575f81556001016128ee565b6001600160401b03831115612918576129186124c6565b61292c836129268354612885565b836128bd565b5f601f84116001811461295d575f85156129465750838201355b5f19600387901b1c1916600186901b178355611149565b5f83815260208120601f198716915b8281101561298c578685013582556020948501946001909201910161296c565b50868210156129a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6129f56040830186886129ba565b8281036020840152612a088185876129ba565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6114f66020830184866129ba565b5f6001600160401b03808316818103612a5557612a5561284f565b6001019392505050565b81516001600160401b03811115612a7857612a786124c6565b612a8c81612a868454612885565b846128bd565b602080601f831160018114612abf575f8415612aa85750858301515b5f19600386901b1c1916600185901b178555612b16565b5f85815260208120601f198616915b82811015612aed57888601518255948401946001909101908401612ace565b5085821015612b0a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604081525f612b3060408301866123e3565b8281036020840152612b438185876129ba565b9695505050505050565b5f60208284031215612b5d575f80fd5b8151610d8c81612596565b5f61ffff821680612b7b57612b7b61284f565b5f190192915050565b604081525f612b9660408301856123e3565b905061ffff831660208301529392505050565b5f61ffff808316818103612a5557612a5561284f565b606081525f612bd160608301866123e3565b61ffff851660208401528281036040840152612b4381856123e3565b808201808211156105705761057061284f565b5f808335601e19843603018112612c15575f80fd5b8301803591506001600160401b03821115612c2e575f80fd5b602001915036819003821315610bae575f80fd5b5f8085851115612c50575f80fd5b83861115612c5c575f80fd5b5050820193919092039150565b80356020831015610570575f19602084900360031b1b1692915050565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/RSASHA256Algorithm.json b/artifacts/RSASHA256Algorithm.json index 7b0e0fe4..87cee177 100644 --- a/artifacts/RSASHA256Algorithm.json +++ b/artifacts/RSASHA256Algorithm.json @@ -33,8 +33,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506106ff806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b61004361003e366004610539565b610057565b604051901515815260200160405180910390f35b600060608060006100a260048b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506102f59050565b60ff169050801561016e576100f760058261ffff168c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b92506101676101078260056105e9565b61ffff9081169060059061011d9085168d61060b565b610127919061060b565b8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b9150610227565b6101b260058b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061039c9050565b90506101fe60078261ffff168c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b925061022461020e8260076105e9565b61ffff9081169060079061011d9085168d61060b565b91505b6000606061026c84868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103c492505050565b90925090508180156102e557506102916020825161028a919061060b565b82906103df565b60028b8b6040516102a392919061061e565b602060405180830381855afa1580156102c0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102e3919061062e565b145b9c9b505050505050505050505050565b600082828151811061030957610309610647565b016020015160f81c90505b92915050565b8251606090610329838561065d565b111561033457600080fd5b60008267ffffffffffffffff81111561034f5761034f610670565b6040519080825280601f01601f191660200182016040528015610379576020820181803683370190505b50905060208082019086860101610391828287610403565b509095945050505050565b81516000906103ac83600261065d565b11156103b757600080fd5b50016002015161ffff1690565b600060606103d3838587610459565b91509150935093915050565b81516000906103ef83602061065d565b11156103fa57600080fd5b50016020015190565b6020811061043b578151835261041a60208461065d565b925061042760208361065d565b915061043460208261060b565b9050610403565b905182516020929092036101000a6000190180199091169116179052565b60006060600085518551855188888860405160200161047d969594939291906106b6565b6040516020818303038152906040529050835167ffffffffffffffff8111156104a8576104a8610670565b6040519080825280601f01601f1916602001820160405280156104d2576020820181803683370190505b50915083516020830182516020840160055afa925050935093915050565b60008083601f84011261050257600080fd5b50813567ffffffffffffffff81111561051a57600080fd5b60208301915083602082850101111561053257600080fd5b9250929050565b6000806000806000806060878903121561055257600080fd5b863567ffffffffffffffff8082111561056a57600080fd5b6105768a838b016104f0565b9098509650602089013591508082111561058f57600080fd5b61059b8a838b016104f0565b909650945060408901359150808211156105b457600080fd5b506105c189828a016104f0565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610604576106046105d3565b5092915050565b81810381811115610314576103146105d3565b8183823760009101908152919050565b60006020828403121561064057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610314576103146105d3565b634e487b7160e01b600052604160045260246000fd5b6000815160005b818110156106a7576020818501810151868301520161068d565b50600093019283525090919050565b86815285602082015284604082015260006106e66106e06106da6060850188610686565b86610686565b84610686565b9897505050505050505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b61004361003e366004610539565b610057565b604051901515815260200160405180910390f35b600060608060006100a260048b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506102f59050565b60ff169050801561016e576100f760058261ffff168c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b92506101676101078260056105e9565b61ffff9081169060059061011d9085168d61060b565b610127919061060b565b8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b9150610227565b6101b260058b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061039c9050565b90506101fe60078261ffff168c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061031a9050565b925061022461020e8260076105e9565b61ffff9081169060079061011d9085168d61060b565b91505b6000606061026c84868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103c492505050565b90925090508180156102e557506102916020825161028a919061060b565b82906103df565b60028b8b6040516102a392919061061e565b602060405180830381855afa1580156102c0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102e3919061062e565b145b9c9b505050505050505050505050565b600082828151811061030957610309610647565b016020015160f81c90505b92915050565b8251606090610329838561065d565b111561033457600080fd5b60008267ffffffffffffffff81111561034f5761034f610670565b6040519080825280601f01601f191660200182016040528015610379576020820181803683370190505b50905060208082019086860101610391828287610403565b509095945050505050565b81516000906103ac83600261065d565b11156103b757600080fd5b50016002015161ffff1690565b600060606103d3838587610459565b91509150935093915050565b81516000906103ef83602061065d565b11156103fa57600080fd5b50016020015190565b6020811061043b578151835261041a60208461065d565b925061042760208361065d565b915061043460208261060b565b9050610403565b905182516020929092036101000a6000190180199091169116179052565b60006060600085518551855188888860405160200161047d969594939291906106b6565b6040516020818303038152906040529050835167ffffffffffffffff8111156104a8576104a8610670565b6040519080825280601f01601f1916602001820160405280156104d2576020820181803683370190505b50915083516020830182516020840160055afa925050935093915050565b60008083601f84011261050257600080fd5b50813567ffffffffffffffff81111561051a57600080fd5b60208301915083602082850101111561053257600080fd5b9250929050565b6000806000806000806060878903121561055257600080fd5b863567ffffffffffffffff8082111561056a57600080fd5b6105768a838b016104f0565b9098509650602089013591508082111561058f57600080fd5b61059b8a838b016104f0565b909650945060408901359150808211156105b457600080fd5b506105c189828a016104f0565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610604576106046105d3565b5092915050565b81810381811115610314576103146105d3565b8183823760009101908152919050565b60006020828403121561064057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610314576103146105d3565b634e487b7160e01b600052604160045260246000fd5b6000815160005b818110156106a7576020818501810151868301520161068d565b50600093019283525090919050565b86815285602082015284604082015260006106e66106e06106da6060850188610686565b86610686565b84610686565b9897505050505050505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506106ce8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004061003b36600461051c565b610054565b604051901515815260200160405180910390f35b5f6060805f61009c60048b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506102e79050565b60ff1690508015610166576100f060058261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061015f6101008260056105c3565b61ffff908116906005906101169085168d6105e5565b61012091906105e5565b8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b915061021d565b6101a960058b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929392505061038b9050565b90506101f460078261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061021a6102048260076105c3565b61ffff908116906007906101169085168d6105e5565b91505b5f606061026084868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103b192505050565b90925090508180156102d757506102856020825161027e91906105e5565b82906103cb565b60028b8b6040516102979291906105f8565b602060405180830381855afa1580156102b2573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906102d59190610607565b145b9c9b505050505050505050505050565b5f8282815181106102fa576102fa61061e565b016020015160f81c90505b92915050565b825160609061031a8385610632565b1115610324575f80fd5b5f8267ffffffffffffffff81111561033e5761033e610645565b6040519080825280601f01601f191660200182016040528015610368576020820181803683370190505b509050602080820190868601016103808282876103ed565b509095945050505050565b81515f9061039a836002610632565b11156103a4575f80fd5b50016002015161ffff1690565b5f60606103bf838587610442565b91509150935093915050565b81515f906103da836020610632565b11156103e4575f80fd5b50016020015190565b602081106104255781518352610404602084610632565b9250610411602083610632565b915061041e6020826105e5565b90506103ed565b905182516020929092036101000a5f190180199091169116179052565b5f60605f85518551855188888860405160200161046496959493929190610686565b6040516020818303038152906040529050835167ffffffffffffffff81111561048f5761048f610645565b6040519080825280601f01601f1916602001820160405280156104b9576020820181803683370190505b50915083516020830182516020840160055afa925050935093915050565b5f8083601f8401126104e7575f80fd5b50813567ffffffffffffffff8111156104fe575f80fd5b602083019150836020828501011115610515575f80fd5b9250929050565b5f805f805f8060608789031215610531575f80fd5b863567ffffffffffffffff80821115610548575f80fd5b6105548a838b016104d7565b9098509650602089013591508082111561056c575f80fd5b6105788a838b016104d7565b90965094506040890135915080821115610590575f80fd5b5061059d89828a016104d7565b979a9699509497509295939492505050565b634e487b7160e01b5f52601160045260245ffd5b61ffff8181168382160190808211156105de576105de6105af565b5092915050565b81810381811115610305576103056105af565b818382375f9101908152919050565b5f60208284031215610617575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610305576103056105af565b634e487b7160e01b5f52604160045260245ffd5b5f81515f5b81811015610678576020818501810151868301520161065e565b505f93019283525090919050565b8681528560208201528460408201525f6106b56106af6106a96060850188610659565b86610659565b84610659565b9897505050505050505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004061003b36600461051c565b610054565b604051901515815260200160405180910390f35b5f6060805f61009c60048b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506102e79050565b60ff1690508015610166576100f060058261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061015f6101008260056105c3565b61ffff908116906005906101169085168d6105e5565b61012091906105e5565b8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b915061021d565b6101a960058b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929392505061038b9050565b90506101f460078261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061021a6102048260076105c3565b61ffff908116906007906101169085168d6105e5565b91505b5f606061026084868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103b192505050565b90925090508180156102d757506102856020825161027e91906105e5565b82906103cb565b60028b8b6040516102979291906105f8565b602060405180830381855afa1580156102b2573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906102d59190610607565b145b9c9b505050505050505050505050565b5f8282815181106102fa576102fa61061e565b016020015160f81c90505b92915050565b825160609061031a8385610632565b1115610324575f80fd5b5f8267ffffffffffffffff81111561033e5761033e610645565b6040519080825280601f01601f191660200182016040528015610368576020820181803683370190505b509050602080820190868601016103808282876103ed565b509095945050505050565b81515f9061039a836002610632565b11156103a4575f80fd5b50016002015161ffff1690565b5f60606103bf838587610442565b91509150935093915050565b81515f906103da836020610632565b11156103e4575f80fd5b50016020015190565b602081106104255781518352610404602084610632565b9250610411602083610632565b915061041e6020826105e5565b90506103ed565b905182516020929092036101000a5f190180199091169116179052565b5f60605f85518551855188888860405160200161046496959493929190610686565b6040516020818303038152906040529050835167ffffffffffffffff81111561048f5761048f610645565b6040519080825280601f01601f1916602001820160405280156104b9576020820181803683370190505b50915083516020830182516020840160055afa925050935093915050565b5f8083601f8401126104e7575f80fd5b50813567ffffffffffffffff8111156104fe575f80fd5b602083019150836020828501011115610515575f80fd5b9250929050565b5f805f805f8060608789031215610531575f80fd5b863567ffffffffffffffff80821115610548575f80fd5b6105548a838b016104d7565b9098509650602089013591508082111561056c575f80fd5b6105788a838b016104d7565b90965094506040890135915080821115610590575f80fd5b5061059d89828a016104d7565b979a9699509497509295939492505050565b634e487b7160e01b5f52601160045260245ffd5b61ffff8181168382160190808211156105de576105de6105af565b5092915050565b81810381811115610305576103056105af565b818382375f9101908152919050565b5f60208284031215610617575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610305576103056105af565b634e487b7160e01b5f52604160045260245ffd5b5f81515f5b81811015610678576020818501810151868301520161065e565b505f93019283525090919050565b8681528560208201528460408201525f6106b56106af6106a96060850188610659565b86610659565b84610659565b9897505050505050505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ReentrancyErrors.json b/artifacts/ReentrancyErrors.json new file mode 100644 index 00000000..194fa7e9 --- /dev/null +++ b/artifacts/ReentrancyErrors.json @@ -0,0 +1,31 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ReentrancyErrors", + "sourceName": "seaport-types/src/interfaces/ReentrancyErrors.sol", + "abi": [ + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ReentrancyGuard.json b/artifacts/ReentrancyGuard.json new file mode 100644 index 00000000..1797b594 --- /dev/null +++ b/artifacts/ReentrancyGuard.json @@ -0,0 +1,43 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ReentrancyGuard", + "sourceName": "seaport-core/src/lib/ReentrancyGuard.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801561000f575f80fd5b505f610019610076565b90506001600160a01b03811661004257604051632aea588760e01b815260040160405180910390fd5b5f61004c8261008f565b8015156080526001600160a01b03831660a05290508061006f57600163929eee14555b505061010c565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6100a791906100ed565b6040515f8181818686fa925050503d805f81146100df576040519150601f19603f3d011682016040523d82523d5f602084013e6100e4565b606091505b50909392505050565b5f8261010757634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05161016261012b5f395f608d01525f604201526101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ReverseClaimer.json b/artifacts/ReverseClaimer.json index 1053add1..862aed99 100644 --- a/artifacts/ReverseClaimer.json +++ b/artifacts/ReverseClaimer.json @@ -20,8 +20,8 @@ "type": "constructor" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516101e63803806101e683398101604081905261002f9161014b565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526000906001600160a01b038416906302571be390602401602060405180830381865afa158015610096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ba9190610185565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303816000875af1158015610106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012a91906101a9565b505050506101c2565b6001600160a01b038116811461014857600080fd5b50565b6000806040838503121561015e57600080fd5b825161016981610133565b602084015190925061017a81610133565b809150509250929050565b60006020828403121561019757600080fd5b81516101a281610133565b9392505050565b6000602082840312156101bb57600080fd5b5051919050565b6016806101d06000396000f3fe6080604052600080fdfea164736f6c6343000811000a", - "deployedBytecode": "0x6080604052600080fdfea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506040516101d53803806101d583398101604081905261002e91610143565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201525f906001600160a01b038416906302571be390602401602060405180830381865afa158015610092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b6919061017b565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303815f875af11580156100ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610123919061019d565b505050506101b4565b6001600160a01b0381168114610140575f80fd5b50565b5f8060408385031215610154575f80fd5b825161015f8161012c565b60208401519092506101708161012c565b809150509250929050565b5f6020828403121561018b575f80fd5b81516101968161012c565b9392505050565b5f602082840312156101ad575f80fd5b5051919050565b6015806101c05f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ReverseRegistrar.json b/artifacts/ReverseRegistrar.json index 0c951511..0f10f41a 100644 --- a/artifacts/ReverseRegistrar.json +++ b/artifacts/ReverseRegistrar.json @@ -338,8 +338,8 @@ "type": "function" } ], - "bytecode": "0x60a060405234801561001057600080fd5b50604051610e6b380380610e6b83398101604081905261002f916101b4565b6100383361014c565b6001600160a01b03811660808190526040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152600091906302571be390602401602060405180830381865afa1580156100a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c891906101b4565b90506001600160a01b0381161561014557604051630f41a04d60e11b81523360048201526001600160a01b03821690631e83409a906024016020604051808303816000875af115801561011f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014391906101d8565b505b50506101f1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101b157600080fd5b50565b6000602082840312156101c657600080fd5b81516101d18161019c565b9392505050565b6000602082840312156101ea57600080fd5b5051919050565b608051610c5161021a6000396000818161012d015281816102d701526104d50152610c516000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c66485b211610066578063c66485b2146101e1578063da8c229e146101f4578063e0dba60f14610227578063f2fde38b1461023a57600080fd5b80638da5cb5b146101aa578063bffbe61c146101bb578063c47f0027146101ce57600080fd5b806365669631116100c85780636566963114610167578063715018a61461017a5780637a806d6b14610184578063828eab0e1461019757600080fd5b80630f5a5466146100ef5780631e83409a146101155780633f15457f14610128575b600080fd5b6101026100fd366004610982565b61024d565b6040519081526020015b60405180910390f35b6101026101233660046109bb565b610261565b61014f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b6101026101753660046109d8565b610283565b61018261053c565b005b610102610192366004610ac6565b610550565b60025461014f906001600160a01b031681565b6000546001600160a01b031661014f565b6101026101c93660046109bb565b6105cb565b6101026101dc366004610b3b565b610626565b6101826101ef3660046109bb565b610643565b6102176102023660046109bb565b60016020526000908152604090205460ff1681565b604051901515815260200161010c565b610182610235366004610b86565b610704565b6101826102483660046109bb565b61076b565b600061025a338484610283565b9392505050565b60025460009061027d90339084906001600160a01b0316610283565b92915050565b6000836001600160a01b0381163314806102ac57503360009081526001602052604090205460ff165b80610342575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103429190610bb4565b806103515750610351816107e4565b6103ee5760405162461bcd60e51b815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b60006103f98661085d565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2602080830191909152818301849052825180830384018152606090920192839052815191012091925081906001600160a01b038916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e9290600090a36040516305ef2c7f60e41b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152602481018390526001600160a01b0387811660448301528681166064830152600060848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b15801561051957600080fd5b505af115801561052d573d6000803e3d6000fd5b50929998505050505050505050565b6105446108c3565b61054e600061091d565b565b60008061055e868686610283565b604051637737221360e01b81529091506001600160a01b0385169063773722139061058f9084908790600401610bd1565b600060405180830381600087803b1580156105a957600080fd5b505af11580156105bd573d6000803e3d6000fd5b509298975050505050505050565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26105f78361085d565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b60025460009061027d90339081906001600160a01b031685610550565b61064b6108c3565b6001600160a01b0381166106ba5760405162461bcd60e51b815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201526f07373206d757374206e6f7420626520360841b60648201526084016103e5565b600280546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b61070c6108c3565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b6107736108c3565b6001600160a01b0381166107d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e5565b6107e18161091d565b50565b6000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c27565b60015b61084c57506000919050565b6001600160a01b0316331492915050565b600060285b80156108b757600019016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a8153601090920491600019016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a8153601083049250610862565b50506028600020919050565b6000546001600160a01b0316331461054e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107e157600080fd5b6000806040838503121561099557600080fd5b82356109a08161096d565b915060208301356109b08161096d565b809150509250929050565b6000602082840312156109cd57600080fd5b813561025a8161096d565b6000806000606084860312156109ed57600080fd5b83356109f88161096d565b92506020840135610a088161096d565b91506040840135610a188161096d565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a4a57600080fd5b813567ffffffffffffffff80821115610a6557610a65610a23565b604051601f8301601f19908116603f01168101908282118183101715610a8d57610a8d610a23565b81604052838152866020858801011115610aa657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215610adc57600080fd5b8435610ae78161096d565b93506020850135610af78161096d565b92506040850135610b078161096d565b9150606085013567ffffffffffffffff811115610b2357600080fd5b610b2f87828801610a39565b91505092959194509250565b600060208284031215610b4d57600080fd5b813567ffffffffffffffff811115610b6457600080fd5b610b7084828501610a39565b949350505050565b80151581146107e157600080fd5b60008060408385031215610b9957600080fd5b8235610ba48161096d565b915060208301356109b081610b78565b600060208284031215610bc657600080fd5b815161025a81610b78565b82815260006020604081840152835180604085015260005b81811015610c0557858101830151858201606001528201610be9565b506000606082860101526060601f19601f830116850101925050509392505050565b600060208284031215610c3957600080fd5b815161025a8161096d56fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c66485b211610066578063c66485b2146101e1578063da8c229e146101f4578063e0dba60f14610227578063f2fde38b1461023a57600080fd5b80638da5cb5b146101aa578063bffbe61c146101bb578063c47f0027146101ce57600080fd5b806365669631116100c85780636566963114610167578063715018a61461017a5780637a806d6b14610184578063828eab0e1461019757600080fd5b80630f5a5466146100ef5780631e83409a146101155780633f15457f14610128575b600080fd5b6101026100fd366004610982565b61024d565b6040519081526020015b60405180910390f35b6101026101233660046109bb565b610261565b61014f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010c565b6101026101753660046109d8565b610283565b61018261053c565b005b610102610192366004610ac6565b610550565b60025461014f906001600160a01b031681565b6000546001600160a01b031661014f565b6101026101c93660046109bb565b6105cb565b6101026101dc366004610b3b565b610626565b6101826101ef3660046109bb565b610643565b6102176102023660046109bb565b60016020526000908152604090205460ff1681565b604051901515815260200161010c565b610182610235366004610b86565b610704565b6101826102483660046109bb565b61076b565b600061025a338484610283565b9392505050565b60025460009061027d90339084906001600160a01b0316610283565b92915050565b6000836001600160a01b0381163314806102ac57503360009081526001602052604090205460ff165b80610342575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103429190610bb4565b806103515750610351816107e4565b6103ee5760405162461bcd60e51b815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b60006103f98661085d565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2602080830191909152818301849052825180830384018152606090920192839052815191012091925081906001600160a01b038916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e9290600090a36040516305ef2c7f60e41b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152602481018390526001600160a01b0387811660448301528681166064830152600060848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b15801561051957600080fd5b505af115801561052d573d6000803e3d6000fd5b50929998505050505050505050565b6105446108c3565b61054e600061091d565b565b60008061055e868686610283565b604051637737221360e01b81529091506001600160a01b0385169063773722139061058f9084908790600401610bd1565b600060405180830381600087803b1580156105a957600080fd5b505af11580156105bd573d6000803e3d6000fd5b509298975050505050505050565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26105f78361085d565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b60025460009061027d90339081906001600160a01b031685610550565b61064b6108c3565b6001600160a01b0381166106ba5760405162461bcd60e51b815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201526f07373206d757374206e6f7420626520360841b60648201526084016103e5565b600280546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b61070c6108c3565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b6107736108c3565b6001600160a01b0381166107d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e5565b6107e18161091d565b50565b6000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c27565b60015b61084c57506000919050565b6001600160a01b0316331492915050565b600060285b80156108b757600019016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a8153601090920491600019016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a8153601083049250610862565b50506028600020919050565b6000546001600160a01b0316331461054e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107e157600080fd5b6000806040838503121561099557600080fd5b82356109a08161096d565b915060208301356109b08161096d565b809150509250929050565b6000602082840312156109cd57600080fd5b813561025a8161096d565b6000806000606084860312156109ed57600080fd5b83356109f88161096d565b92506020840135610a088161096d565b91506040840135610a188161096d565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a4a57600080fd5b813567ffffffffffffffff80821115610a6557610a65610a23565b604051601f8301601f19908116603f01168101908282118183101715610a8d57610a8d610a23565b81604052838152866020858801011115610aa657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215610adc57600080fd5b8435610ae78161096d565b93506020850135610af78161096d565b92506040850135610b078161096d565b9150606085013567ffffffffffffffff811115610b2357600080fd5b610b2f87828801610a39565b91505092959194509250565b600060208284031215610b4d57600080fd5b813567ffffffffffffffff811115610b6457600080fd5b610b7084828501610a39565b949350505050565b80151581146107e157600080fd5b60008060408385031215610b9957600080fd5b8235610ba48161096d565b915060208301356109b081610b78565b600060208284031215610bc657600080fd5b815161025a81610b78565b82815260006020604081840152835180604085015260005b81811015610c0557858101830151858201606001528201610be9565b506000606082860101526060601f19601f830116850101925050509392505050565b600060208284031215610c3957600080fd5b815161025a8161096d56fea164736f6c6343000811000a", + "bytecode": "0x60a060405234801561000f575f80fd5b50604051610e14380380610e1483398101604081905261002e916101ab565b61003733610145565b6001600160a01b03811660808190526040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201525f91906302571be390602401602060405180830381865afa1580156100a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100c491906101ab565b90506001600160a01b0381161561013e57604051630f41a04d60e11b81523360048201526001600160a01b03821690631e83409a906024016020604051808303815f875af1158015610118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013c91906101cd565b505b50506101e4565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101a8575f80fd5b50565b5f602082840312156101bb575f80fd5b81516101c681610194565b9392505050565b5f602082840312156101dd575f80fd5b5051919050565b608051610c0a61020a5f395f8181610127015281816102cb01526104c40152610c0a5ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80638da5cb5b11610088578063c66485b211610063578063c66485b2146101da578063da8c229e146101ed578063e0dba60f1461021f578063f2fde38b14610232575f80fd5b80638da5cb5b146101a4578063bffbe61c146101b4578063c47f0027146101c7575f80fd5b806365669631116100c35780636566963114610161578063715018a6146101745780637a806d6b1461017e578063828eab0e14610191575f80fd5b80630f5a5466146100e95780631e83409a1461010f5780633f15457f14610122575b5f80fd5b6100fc6100f7366004610958565b610245565b6040519081526020015b60405180910390f35b6100fc61011d36600461098f565b610258565b6101497f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610106565b6100fc61016f3660046109aa565b610279565b61017c610526565b005b6100fc61018c366004610a8f565b610539565b600254610149906001600160a01b031681565b5f546001600160a01b0316610149565b6100fc6101c236600461098f565b6105ae565b6100fc6101d5366004610b00565b610608565b61017c6101e836600461098f565b610624565b61020f6101fb36600461098f565b60016020525f908152604090205460ff1681565b6040519015158152602001610106565b61017c61022d366004610b47565b6106e4565b61017c61024036600461098f565b61074a565b5f610251338484610279565b9392505050565b6002545f9061027390339084906001600160a01b0316610279565b92915050565b5f836001600160a01b0381163314806102a05750335f9081526001602052604090205460ff165b80610334575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015610310573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103349190610b73565b806103435750610343816107c3565b6103e05760405162461bcd60e51b815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b5f6103ea8661083a565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2602080830191909152818301849052825180830384018152606090920192839052815191012091925081906001600160a01b038916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e92905f90a36040516305ef2c7f60e41b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152602481018390526001600160a01b03878116604483015286811660648301525f60848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610505575f80fd5b505af1158015610517573d5f803e3d5ffd5b50929998505050505050505050565b61052e61089c565b6105375f6108f5565b565b5f80610546868686610279565b604051637737221360e01b81529091506001600160a01b038516906377372213906105779084908790600401610b8e565b5f604051808303815f87803b15801561058e575f80fd5b505af11580156105a0573d5f803e3d5ffd5b509298975050505050505050565b5f7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26105d98361083a565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b6002545f9061027390339081906001600160a01b031685610539565b61062c61089c565b6001600160a01b03811661069b5760405162461bcd60e51b815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201526f07373206d757374206e6f7420626520360841b60648201526084016103d7565b600280546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf905f90a250565b6106ec61089c565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b61075261089c565b6001600160a01b0381166107b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d7565b6107c0816108f5565b50565b5f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561081e575060408051601f3d908101601f1916820190925261081b91810190610be2565b60015b61082957505f919050565b6001600160a01b0316331492915050565b5f60285b8015610891575f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a81536010909204915f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a815360108304925061083e565b505060285f20919050565b5f546001600160a01b031633146105375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107c0575f80fd5b5f8060408385031215610969575f80fd5b823561097481610944565b9150602083013561098481610944565b809150509250929050565b5f6020828403121561099f575f80fd5b813561025181610944565b5f805f606084860312156109bc575f80fd5b83356109c781610944565b925060208401356109d781610944565b915060408401356109e781610944565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610a15575f80fd5b813567ffffffffffffffff80821115610a3057610a306109f2565b604051601f8301601f19908116603f01168101908282118183101715610a5857610a586109f2565b81604052838152866020858801011115610a70575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f8060808587031215610aa2575f80fd5b8435610aad81610944565b93506020850135610abd81610944565b92506040850135610acd81610944565b9150606085013567ffffffffffffffff811115610ae8575f80fd5b610af487828801610a06565b91505092959194509250565b5f60208284031215610b10575f80fd5b813567ffffffffffffffff811115610b26575f80fd5b610b3284828501610a06565b949350505050565b80151581146107c0575f80fd5b5f8060408385031215610b58575f80fd5b8235610b6381610944565b9150602083013561098481610b3a565b5f60208284031215610b83575f80fd5b815161025181610b3a565b8281525f60206040602084015283518060408501525f5b81811015610bc157858101830151858201606001528201610ba5565b505f606082860101526060601f19601f830116850101925050509392505050565b5f60208284031215610bf2575f80fd5b81516102518161094456fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80638da5cb5b11610088578063c66485b211610063578063c66485b2146101da578063da8c229e146101ed578063e0dba60f1461021f578063f2fde38b14610232575f80fd5b80638da5cb5b146101a4578063bffbe61c146101b4578063c47f0027146101c7575f80fd5b806365669631116100c35780636566963114610161578063715018a6146101745780637a806d6b1461017e578063828eab0e14610191575f80fd5b80630f5a5466146100e95780631e83409a1461010f5780633f15457f14610122575b5f80fd5b6100fc6100f7366004610958565b610245565b6040519081526020015b60405180910390f35b6100fc61011d36600461098f565b610258565b6101497f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610106565b6100fc61016f3660046109aa565b610279565b61017c610526565b005b6100fc61018c366004610a8f565b610539565b600254610149906001600160a01b031681565b5f546001600160a01b0316610149565b6100fc6101c236600461098f565b6105ae565b6100fc6101d5366004610b00565b610608565b61017c6101e836600461098f565b610624565b61020f6101fb36600461098f565b60016020525f908152604090205460ff1681565b6040519015158152602001610106565b61017c61022d366004610b47565b6106e4565b61017c61024036600461098f565b61074a565b5f610251338484610279565b9392505050565b6002545f9061027390339084906001600160a01b0316610279565b92915050565b5f836001600160a01b0381163314806102a05750335f9081526001602052604090205460ff165b80610334575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015610310573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103349190610b73565b806103435750610343816107c3565b6103e05760405162461bcd60e51b815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b5f6103ea8661083a565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2602080830191909152818301849052825180830384018152606090920192839052815191012091925081906001600160a01b038916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e92905f90a36040516305ef2c7f60e41b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152602481018390526001600160a01b03878116604483015286811660648301525f60848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a4015f604051808303815f87803b158015610505575f80fd5b505af1158015610517573d5f803e3d5ffd5b50929998505050505050505050565b61052e61089c565b6105375f6108f5565b565b5f80610546868686610279565b604051637737221360e01b81529091506001600160a01b038516906377372213906105779084908790600401610b8e565b5f604051808303815f87803b15801561058e575f80fd5b505af11580156105a0573d5f803e3d5ffd5b509298975050505050505050565b5f7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26105d98361083a565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b6002545f9061027390339081906001600160a01b031685610539565b61062c61089c565b6001600160a01b03811661069b5760405162461bcd60e51b815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201526f07373206d757374206e6f7420626520360841b60648201526084016103d7565b600280546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf905f90a250565b6106ec61089c565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b61075261089c565b6001600160a01b0381166107b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d7565b6107c0816108f5565b50565b5f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561081e575060408051601f3d908101601f1916820190925261081b91810190610be2565b60015b61082957505f919050565b6001600160a01b0316331492915050565b5f60285b8015610891575f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a81536010909204915f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a815360108304925061083e565b505060285f20919050565b5f546001600160a01b031633146105375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107c0575f80fd5b5f8060408385031215610969575f80fd5b823561097481610944565b9150602083013561098481610944565b809150509250929050565b5f6020828403121561099f575f80fd5b813561025181610944565b5f805f606084860312156109bc575f80fd5b83356109c781610944565b925060208401356109d781610944565b915060408401356109e781610944565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610a15575f80fd5b813567ffffffffffffffff80821115610a3057610a306109f2565b604051601f8301601f19908116603f01168101908282118183101715610a5857610a586109f2565b81604052838152866020858801011115610a70575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f8060808587031215610aa2575f80fd5b8435610aad81610944565b93506020850135610abd81610944565b92506040850135610acd81610944565b9150606085013567ffffffffffffffff811115610ae8575f80fd5b610af487828801610a06565b91505092959194509250565b5f60208284031215610b10575f80fd5b813567ffffffffffffffff811115610b26575f80fd5b610b3284828501610a06565b949350505050565b80151581146107c0575f80fd5b5f8060408385031215610b58575f80fd5b8235610b6381610944565b9150602083013561098481610b3a565b5f60208284031215610b83575f80fd5b815161025181610b3a565b8281525f60206040602084015283518060408501525f5b81811015610bc157858101830151858201606001528201610ba5565b505f606082860101526060601f19601f830116850101925050509392505050565b5f60208284031215610bf2575f80fd5b81516102518161094456fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/Root.json b/artifacts/Root.json index 58a6d0ba..090bdee0 100644 --- a/artifacts/Root.json +++ b/artifacts/Root.json @@ -231,8 +231,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161073e38038061073e83398101604081905261002f916100ad565b6100383361005d565b600280546001600160a01b0319166001600160a01b03929092169190911790556100dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100bf57600080fd5b81516001600160a01b03811681146100d657600080fd5b9392505050565b610652806100ec6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638cb8ecec116100715780638cb8ecec146101425780638da5cb5b14610155578063cbe9e76414610166578063da8c229e14610189578063e0dba60f146101ac578063f2fde38b146101bf57600080fd5b806301670ba9146100ae57806301ffc9a7146100c35780633f15457f146100fc5780634e543b2614610127578063715018a61461013a575b600080fd5b6100c16100bc366004610543565b6101d2565b005b6100e76100d136600461055c565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b60025461010f906001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b6100c16101353660046105a9565b610220565b6100c1610291565b6100c16101503660046105c4565b6102a5565b6000546001600160a01b031661010f565b6100e7610174366004610543565b60036020526000908152604090205460ff1681565b6100e76101973660046105a9565b60016020526000908152604090205460ff1681565b6100c16101ba3660046105f0565b6103b9565b6100c16101cd3660046105a9565b610420565b6101da610499565b60405181907f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd617577756990600090a26000908152600360205260409020805460ff19166001179055565b610228610499565b600254604051630c4b7b8560e11b8152600060048201526001600160a01b03838116602483015290911690631896f70a90604401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b5050505050565b610299610499565b6102a360006104f3565b565b3360009081526001602052604090205460ff1661031a5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b60648201526084015b60405180910390fd5b60008281526003602052604090205460ff161561033657600080fd5b6002546040516306ab592360e01b815260006004820152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303816000875af1158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b4919061062c565b505050565b6103c1610499565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b610428610499565b6001600160a01b03811661048d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b610496816104f3565b50565b6000546001600160a01b031633146102a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561055557600080fd5b5035919050565b60006020828403121561056e57600080fd5b81356001600160e01b03198116811461058657600080fd5b9392505050565b80356001600160a01b03811681146105a457600080fd5b919050565b6000602082840312156105bb57600080fd5b6105868261058d565b600080604083850312156105d757600080fd5b823591506105e76020840161058d565b90509250929050565b6000806040838503121561060357600080fd5b61060c8361058d565b91506020830135801515811461062157600080fd5b809150509250929050565b60006020828403121561063e57600080fd5b505191905056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638cb8ecec116100715780638cb8ecec146101425780638da5cb5b14610155578063cbe9e76414610166578063da8c229e14610189578063e0dba60f146101ac578063f2fde38b146101bf57600080fd5b806301670ba9146100ae57806301ffc9a7146100c35780633f15457f146100fc5780634e543b2614610127578063715018a61461013a575b600080fd5b6100c16100bc366004610543565b6101d2565b005b6100e76100d136600461055c565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b60025461010f906001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b6100c16101353660046105a9565b610220565b6100c1610291565b6100c16101503660046105c4565b6102a5565b6000546001600160a01b031661010f565b6100e7610174366004610543565b60036020526000908152604090205460ff1681565b6100e76101973660046105a9565b60016020526000908152604090205460ff1681565b6100c16101ba3660046105f0565b6103b9565b6100c16101cd3660046105a9565b610420565b6101da610499565b60405181907f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd617577756990600090a26000908152600360205260409020805460ff19166001179055565b610228610499565b600254604051630c4b7b8560e11b8152600060048201526001600160a01b03838116602483015290911690631896f70a90604401600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b5050505050565b610299610499565b6102a360006104f3565b565b3360009081526001602052604090205460ff1661031a5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b60648201526084015b60405180910390fd5b60008281526003602052604090205460ff161561033657600080fd5b6002546040516306ab592360e01b815260006004820152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303816000875af1158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b4919061062c565b505050565b6103c1610499565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b610428610499565b6001600160a01b03811661048d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610311565b610496816104f3565b50565b6000546001600160a01b031633146102a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610311565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561055557600080fd5b5035919050565b60006020828403121561056e57600080fd5b81356001600160e01b03198116811461058657600080fd5b9392505050565b80356001600160a01b03811681146105a457600080fd5b919050565b6000602082840312156105bb57600080fd5b6105868261058d565b600080604083850312156105d757600080fd5b823591506105e76020840161058d565b90509250929050565b6000806040838503121561060357600080fd5b61060c8361058d565b91506020830135801515811461062157600080fd5b809150509250929050565b60006020828403121561063e57600080fd5b505191905056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b5060405161070e38038061070e83398101604081905261002e916100ab565b6100373361005c565b600280546001600160a01b0319166001600160a01b03929092169190911790556100d8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100bb575f80fd5b81516001600160a01b03811681146100d1575f80fd5b9392505050565b610629806100e55f395ff3fe608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80638cb8ecec1161006e5780638cb8ecec1461013e5780638da5cb5b14610151578063cbe9e76414610161578063da8c229e14610183578063e0dba60f146101a5578063f2fde38b146101b8575f80fd5b806301670ba9146100aa57806301ffc9a7146100bf5780633f15457f146100f85780634e543b2614610123578063715018a614610136575b5f80fd5b6100bd6100b8366004610529565b6101cb565b005b6100e36100cd366004610540565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b60025461010b906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100bd610131366004610589565b610217565b6100bd610282565b6100bd61014c3660046105a2565b610295565b5f546001600160a01b031661010b565b6100e361016f366004610529565b60036020525f908152604090205460ff1681565b6100e3610191366004610589565b60016020525f908152604090205460ff1681565b6100bd6101b33660046105cc565b6103a2565b6100bd6101c6366004610589565b610408565b6101d3610481565b60405181907f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd6175777569905f90a25f908152600360205260409020805460ff19166001179055565b61021f610481565b600254604051630c4b7b8560e11b81525f60048201526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b158015610269575f80fd5b505af115801561027b573d5f803e3d5ffd5b5050505050565b61028a610481565b6102935f6104da565b565b335f9081526001602052604090205460ff166103095760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b60648201526084015b60405180910390fd5b5f8281526003602052604090205460ff1615610323575f80fd5b6002546040516306ab592360e01b81525f6004820152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af1158015610379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039d9190610605565b505050565b6103aa610481565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b610410610481565b6001600160a01b0381166104755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b61047e816104da565b50565b5f546001600160a01b031633146102935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610539575f80fd5b5035919050565b5f60208284031215610550575f80fd5b81356001600160e01b031981168114610567575f80fd5b9392505050565b80356001600160a01b0381168114610584575f80fd5b919050565b5f60208284031215610599575f80fd5b6105678261056e565b5f80604083850312156105b3575f80fd5b823591506105c36020840161056e565b90509250929050565b5f80604083850312156105dd575f80fd5b6105e68361056e565b9150602083013580151581146105fa575f80fd5b809150509250929050565b5f60208284031215610615575f80fd5b505191905056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80638cb8ecec1161006e5780638cb8ecec1461013e5780638da5cb5b14610151578063cbe9e76414610161578063da8c229e14610183578063e0dba60f146101a5578063f2fde38b146101b8575f80fd5b806301670ba9146100aa57806301ffc9a7146100bf5780633f15457f146100f85780634e543b2614610123578063715018a614610136575b5f80fd5b6100bd6100b8366004610529565b6101cb565b005b6100e36100cd366004610540565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b60025461010b906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100bd610131366004610589565b610217565b6100bd610282565b6100bd61014c3660046105a2565b610295565b5f546001600160a01b031661010b565b6100e361016f366004610529565b60036020525f908152604090205460ff1681565b6100e3610191366004610589565b60016020525f908152604090205460ff1681565b6100bd6101b33660046105cc565b6103a2565b6100bd6101c6366004610589565b610408565b6101d3610481565b60405181907f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd6175777569905f90a25f908152600360205260409020805460ff19166001179055565b61021f610481565b600254604051630c4b7b8560e11b81525f60048201526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b158015610269575f80fd5b505af115801561027b573d5f803e3d5ffd5b5050505050565b61028a610481565b6102935f6104da565b565b335f9081526001602052604090205460ff166103095760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b60648201526084015b60405180910390fd5b5f8281526003602052604090205460ff1615610323575f80fd5b6002546040516306ab592360e01b81525f6004820152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af1158015610379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039d9190610605565b505050565b6103aa610481565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b610410610481565b6001600160a01b0381166104755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b61047e816104da565b50565b5f546001600160a01b031633146102935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610539575f80fd5b5035919050565b5f60208284031215610550575f80fd5b81356001600160e01b031981168114610567575f80fd5b9392505050565b80356001600160a01b0381168114610584575f80fd5b919050565b5f60208284031215610599575f80fd5b6105678261056e565b5f80604083850312156105b3575f80fd5b823591506105c36020840161056e565b90509250929050565b5f80604083850312156105dd575f80fd5b6105e68361056e565b9150602083013580151581146105fa575f80fd5b809150509250929050565b5f60208284031215610615575f80fd5b505191905056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/SHA1.json b/artifacts/SHA1.json index eea941e0..ddb7bf77 100644 --- a/artifacts/SHA1.json +++ b/artifacts/SHA1.json @@ -17,8 +17,8 @@ "type": "event" } ], - "bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000811000a", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000811000a", + "bytecode": "0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/SHA1Digest.json b/artifacts/SHA1Digest.json index ccb1fdc4..653fa2ca 100644 --- a/artifacts/SHA1Digest.json +++ b/artifacts/SHA1Digest.json @@ -28,8 +28,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061066f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f7e83aee14610030575b600080fd5b61004361003e3660046105cf565b610057565b604051901515815260200160405180910390f35b6000601482146100ad5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420736861312068617368206c656e6774680000000000000000604482015260640160405180910390fd5b60006100f3600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506101629050565b6bffffffffffffffffffffffff19169050600061014587878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061019592505050565b6bffffffffffffffffffffffff1916919091149695505050505050565b815160009061017283601461063b565b111561017d57600080fd5b5001602001516bffffffffffffffffffffffff191690565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036101c8576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f061021b565b600083831015610214575080820151928290039260208410156102145760001960208590036101000a0119165b9392505050565b60005b82811015610525576102318482896101e7565b85526102418460208301896101e7565b60208601526040818503106001810361025d5760808286038701535b506040830381146001810361027a57602086018051600887021790525b5060405b608081101561030257858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161027e565b5060805b61014081101561038b57858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c030000000300000003000000030000000300000003000000030000000316179052601801610306565b508160008060005b60508110156104fb576014810480156103c357600181146103ea576002811461040f57600381146104395761045a565b600160281b8504600160501b86048118600160781b870416189350635a827999925061045a565b600160281b8504600160781b8604600160501b870418189350636ed9eba1925061045a565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc925061045a565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8516179350600181019050610393565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161021e565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60008083601f84011261059857600080fd5b50813567ffffffffffffffff8111156105b057600080fd5b6020830191508360208285010111156105c857600080fd5b9250929050565b600080600080604085870312156105e557600080fd5b843567ffffffffffffffff808211156105fd57600080fd5b61060988838901610586565b9096509450602087013591508082111561062257600080fd5b5061062f87828801610586565b95989497509550505050565b8082018082111561065c57634e487b7160e01b600052601160045260246000fd5b9291505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f7e83aee14610030575b600080fd5b61004361003e3660046105cf565b610057565b604051901515815260200160405180910390f35b6000601482146100ad5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420736861312068617368206c656e6774680000000000000000604482015260640160405180910390fd5b60006100f3600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506101629050565b6bffffffffffffffffffffffff19169050600061014587878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061019592505050565b6bffffffffffffffffffffffff1916919091149695505050505050565b815160009061017283601461063b565b111561017d57600080fd5b5001602001516bffffffffffffffffffffffff191690565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036101c8576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f061021b565b600083831015610214575080820151928290039260208410156102145760001960208590036101000a0119165b9392505050565b60005b82811015610525576102318482896101e7565b85526102418460208301896101e7565b60208601526040818503106001810361025d5760808286038701535b506040830381146001810361027a57602086018051600887021790525b5060405b608081101561030257858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161027e565b5060805b61014081101561038b57858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c030000000300000003000000030000000300000003000000030000000316179052601801610306565b508160008060005b60508110156104fb576014810480156103c357600181146103ea576002811461040f57600381146104395761045a565b600160281b8504600160501b86048118600160781b870416189350635a827999925061045a565b600160281b8504600160781b8604600160501b870418189350636ed9eba1925061045a565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc925061045a565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8516179350600181019050610393565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161021e565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60008083601f84011261059857600080fd5b50813567ffffffffffffffff8111156105b057600080fd5b6020830191508360208285010111156105c857600080fd5b9250929050565b600080600080604085870312156105e557600080fd5b843567ffffffffffffffff808211156105fd57600080fd5b61060988838901610586565b9096509450602087013591508082111561062257600080fd5b5061062f87828801610586565b95989497509550505050565b8082018082111561065c57634e487b7160e01b600052601160045260246000fd5b9291505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506106538061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046105ba565b610054565b604051901515815260200160405180910390f35b5f601482146100a95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420736861312068617368206c656e6774680000000000000000604482015260640160405180910390fd5b5f6100ec5f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101599050565b6bffffffffffffffffffffffff191690505f61013c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061018a92505050565b6bffffffffffffffffffffffff1916919091149695505050505050565b81515f90610168836014610621565b1115610172575f80fd5b5001602001516bffffffffffffffffffffffff191690565b5f6040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036101bc576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f061020d565b5f8383101561020657508082015192829003926020841015610206575f1960208590036101000a0119165b9392505050565b5f5b82811015610514576102228482896101db565b85526102328460208301896101db565b60208601526040818503106001810361024e5760808286038701535b506040830381146001810361026b57602086018051600887021790525b5060405b60808110156102f357858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161026f565b5060805b61014081101561037c57858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016102f7565b50815f805f5b60508110156104ea576014810480156103b257600181146103d957600281146103fe576003811461042857610449565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610449565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610449565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610449565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8516179350600181019050610382565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161020f565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b5f8083601f840112610585575f80fd5b50813567ffffffffffffffff81111561059c575f80fd5b6020830191508360208285010111156105b3575f80fd5b9250929050565b5f805f80604085870312156105cd575f80fd5b843567ffffffffffffffff808211156105e4575f80fd5b6105f088838901610575565b90965094506020870135915080821115610608575f80fd5b5061061587828801610575565b95989497509550505050565b8082018082111561064057634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046105ba565b610054565b604051901515815260200160405180910390f35b5f601482146100a95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420736861312068617368206c656e6774680000000000000000604482015260640160405180910390fd5b5f6100ec5f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101599050565b6bffffffffffffffffffffffff191690505f61013c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061018a92505050565b6bffffffffffffffffffffffff1916919091149695505050505050565b81515f90610168836014610621565b1115610172575f80fd5b5001602001516bffffffffffffffffffffffff191690565b5f6040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036101bc576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f061020d565b5f8383101561020657508082015192829003926020841015610206575f1960208590036101000a0119165b9392505050565b5f5b82811015610514576102228482896101db565b85526102328460208301896101db565b60208601526040818503106001810361024e5760808286038701535b506040830381146001810361026b57602086018051600887021790525b5060405b60808110156102f357858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161026f565b5060805b61014081101561037c57858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016102f7565b50815f805f5b60508110156104ea576014810480156103b257600181146103d957600281146103fe576003811461042857610449565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610449565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610449565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610449565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8516179350600181019050610382565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161020f565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b5f8083601f840112610585575f80fd5b50813567ffffffffffffffff81111561059c575f80fd5b6020830191508360208285010111156105b3575f80fd5b9250929050565b5f805f80604085870312156105cd575f80fd5b843567ffffffffffffffff808211156105e4575f80fd5b6105f088838901610575565b90965094506020870135915080821115610608575f80fd5b5061061587828801610575565b95989497509550505050565b8082018082111561064057634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/SHA1NSEC3Digest.json b/artifacts/SHA1NSEC3Digest.json index 627f285e..5cca42ab 100644 --- a/artifacts/SHA1NSEC3Digest.json +++ b/artifacts/SHA1NSEC3Digest.json @@ -33,8 +33,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506109c9806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806368f9dab214610030575b600080fd5b61004361003e3660046108ba565b610055565b60405190815260200160405180910390f35b6000610074604051806040016040528060608152602001600081525090565b6100936100818588610944565b61008c906010610944565b82906101e9565b506100d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506102549050565b5061011987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506102549050565b5060006101298260000151610282565b905083156101d457604080518082019091526060815260006020909101819052825152610157826000610672565b5061019a88888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506102549050565b5060005b848110156101d2576101b2836000846106a2565b5082516101be90610282565b9150806101ca81610957565b91505061019e565b505b6001600160601b031916979650505050505050565b604080518082019091526060815260006020820152610209602083610970565b1561023157610219602083610970565b610224906020610992565b61022e9083610944565b91505b506020808301829052604080518085526000815283019091019052815b92915050565b60408051808201909152606081526000602082015261027b838460000151518485516106d6565b9392505050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036102b5576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610307565b60008383101561027b5750808201519282900392602084101561027b5760001960208590036101000a0119169392505050565b60005b828110156106115761031d8482896102d4565b855261032d8460208301896102d4565b6020860152604081850310600181036103495760808286038701535b506040830381146001810361036657602086018051600887021790525b5060405b60808110156103ee57858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161036a565b5060805b61014081101561047757858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016103f2565b508160008060005b60508110156105e7576014810480156104af57600181146104d657600281146104fb576003811461052557610546565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610546565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610546565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610546565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff851617935060018101905061047f565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161030a565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60408051808201909152606081526000602082015282515161027b9084906001600160601b0319851660146107c0565b6040805180820190915260608152600060208201526106ce84846001600160601b0319851660146107c0565b949350505050565b60408051808201909152606081526000602082015282518211156106f957600080fd5b60208501516107088386610944565b111561073b5761073b8561072b876020015187866107269190610944565b61083d565b6107369060026109a5565b610854565b60008086518051876020830101935080888701111561075a5787860182525b505050602084015b6020841061079a5780518252610779602083610944565b9150610786602082610944565b9050610793602085610992565b9350610762565b51815160001960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081526000602082015260208501516107e48584610944565b11156107f8576107f88561072b8685610944565b60006001836101000a0390508260200360080284901c93508551838682010185831982511617815250805184870111156108325783860181525b509495945050505050565b60008183111561084e57508161024e565b50919050565b815161086083836101e9565b5061086b8382610254565b50505050565b60008083601f84011261088357600080fd5b50813567ffffffffffffffff81111561089b57600080fd5b6020830191508360208285010111156108b357600080fd5b9250929050565b6000806000806000606086880312156108d257600080fd5b853567ffffffffffffffff808211156108ea57600080fd5b6108f689838a01610871565b9097509550602088013591508082111561090f57600080fd5b5061091c88828901610871565b96999598509660400135949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561024e5761024e61092e565b6000600182016109695761096961092e565b5060010190565b60008261098d57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561024e5761024e61092e565b808202811582820484141761024e5761024e61092e56fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806368f9dab214610030575b600080fd5b61004361003e3660046108ba565b610055565b60405190815260200160405180910390f35b6000610074604051806040016040528060608152602001600081525090565b6100936100818588610944565b61008c906010610944565b82906101e9565b506100d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506102549050565b5061011987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506102549050565b5060006101298260000151610282565b905083156101d457604080518082019091526060815260006020909101819052825152610157826000610672565b5061019a88888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506102549050565b5060005b848110156101d2576101b2836000846106a2565b5082516101be90610282565b9150806101ca81610957565b91505061019e565b505b6001600160601b031916979650505050505050565b604080518082019091526060815260006020820152610209602083610970565b1561023157610219602083610970565b610224906020610992565b61022e9083610944565b91505b506020808301829052604080518085526000815283019091019052815b92915050565b60408051808201909152606081526000602082015261027b838460000151518485516106d6565b9392505050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036102b5576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610307565b60008383101561027b5750808201519282900392602084101561027b5760001960208590036101000a0119169392505050565b60005b828110156106115761031d8482896102d4565b855261032d8460208301896102d4565b6020860152604081850310600181036103495760808286038701535b506040830381146001810361036657602086018051600887021790525b5060405b60808110156103ee57858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161036a565b5060805b61014081101561047757858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016103f2565b508160008060005b60508110156105e7576014810480156104af57600181146104d657600281146104fb576003811461052557610546565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610546565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610546565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610546565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff851617935060018101905061047f565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161030a565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60408051808201909152606081526000602082015282515161027b9084906001600160601b0319851660146107c0565b6040805180820190915260608152600060208201526106ce84846001600160601b0319851660146107c0565b949350505050565b60408051808201909152606081526000602082015282518211156106f957600080fd5b60208501516107088386610944565b111561073b5761073b8561072b876020015187866107269190610944565b61083d565b6107369060026109a5565b610854565b60008086518051876020830101935080888701111561075a5787860182525b505050602084015b6020841061079a5780518252610779602083610944565b9150610786602082610944565b9050610793602085610992565b9350610762565b51815160001960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081526000602082015260208501516107e48584610944565b11156107f8576107f88561072b8685610944565b60006001836101000a0390508260200360080284901c93508551838682010185831982511617815250805184870111156108325783860181525b509495945050505050565b60008183111561084e57508161024e565b50919050565b815161086083836101e9565b5061086b8382610254565b50505050565b60008083601f84011261088357600080fd5b50813567ffffffffffffffff81111561089b57600080fd5b6020830191508360208285010111156108b357600080fd5b9250929050565b6000806000806000606086880312156108d257600080fd5b853567ffffffffffffffff808211156108ea57600080fd5b6108f689838a01610871565b9097509550602088013591508082111561090f57600080fd5b5061091c88828901610871565b96999598509660400135949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561024e5761024e61092e565b6000600182016109695761096961092e565b5060010190565b60008261098d57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561024e5761024e61092e565b808202811582820484141761024e5761024e61092e56fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506109768061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c806368f9dab21461002d575b5f80fd5b61004061003b36600461088b565b610052565b60405190815260200160405180910390f35b5f61006f6040518060400160405280606081526020015f81525090565b61008e61007c858861090d565b61008790601061090d565b82906101d1565b506100d085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b5061011287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b505f610120825f0151610266565b905083156101bc5760408051808201909152606081525f602090910181905282515261014c825f610650565b5061018e88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869392505061023a9050565b505f5b848110156101ba576101a4835f8461067f565b5082516101b090610266565b9150600101610191565b505b6001600160601b031916979650505050505050565b60408051808201909152606081525f60208201526101f0602083610920565b1561021857610200602083610920565b61020b90602061093f565b610215908361090d565b91505b506020808301829052604080518085525f815283019091019052815b92915050565b60408051808201909152606081525f602082015261025f83845f0151518485516106b2565b9392505050565b5f6040518251602084019350604067ffffffffffffffc060018301160160098282031060018103610298576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f06102e8565b5f8383101561025f5750808201519282900392602084101561025f575f1960208590036101000a0119169392505050565b5f5b828110156105ef576102fd8482896102b7565b855261030d8460208301896102b7565b6020860152604081850310600181036103295760808286038701535b506040830381146001810361034657602086018051600887021790525b5060405b60808110156103ce57858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161034a565b5060805b61014081101561045757858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016103d2565b50815f805f5b60508110156105c55760148104801561048d57600181146104b457600281146104d9576003811461050357610524565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610524565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610524565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610524565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff851617935060018101905061045d565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff16906040016102ea565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60408051808201909152606081525f602082015282515161025f9084906001600160601b031985166014610798565b60408051808201909152606081525f60208201526106aa84846001600160601b031985166014610798565b949350505050565b60408051808201909152606081525f602082015282518211156106d3575f80fd5b60208501516106e2838661090d565b1115610715576107158561070587602001518786610700919061090d565b610813565b610710906002610952565b610829565b5f808651805187602083010193508088870111156107335787860182525b505050602084015b60208410610773578051825261075260208361090d565b915061075f60208261090d565b905061076c60208561093f565b935061073b565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081525f602082015260208501516107bb858461090d565b11156107cf576107cf85610705868561090d565b5f6001836101000a0390508260200360080284901c93508551838682010185831982511617815250805184870111156108085783860181525b509495945050505050565b5f81831115610823575081610234565b50919050565b815161083583836101d1565b50610840838261023a565b50505050565b5f8083601f840112610856575f80fd5b50813567ffffffffffffffff81111561086d575f80fd5b602083019150836020828501011115610884575f80fd5b9250929050565b5f805f805f6060868803121561089f575f80fd5b853567ffffffffffffffff808211156108b6575f80fd5b6108c289838a01610846565b909750955060208801359150808211156108da575f80fd5b506108e788828901610846565b96999598509660400135949350505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610234576102346108f9565b5f8261093a57634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115610234576102346108f9565b8082028115828204841417610234576102346108f956fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c806368f9dab21461002d575b5f80fd5b61004061003b36600461088b565b610052565b60405190815260200160405180910390f35b5f61006f6040518060400160405280606081526020015f81525090565b61008e61007c858861090d565b61008790601061090d565b82906101d1565b506100d085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b5061011287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b505f610120825f0151610266565b905083156101bc5760408051808201909152606081525f602090910181905282515261014c825f610650565b5061018e88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869392505061023a9050565b505f5b848110156101ba576101a4835f8461067f565b5082516101b090610266565b9150600101610191565b505b6001600160601b031916979650505050505050565b60408051808201909152606081525f60208201526101f0602083610920565b1561021857610200602083610920565b61020b90602061093f565b610215908361090d565b91505b506020808301829052604080518085525f815283019091019052815b92915050565b60408051808201909152606081525f602082015261025f83845f0151518485516106b2565b9392505050565b5f6040518251602084019350604067ffffffffffffffc060018301160160098282031060018103610298576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f06102e8565b5f8383101561025f5750808201519282900392602084101561025f575f1960208590036101000a0119169392505050565b5f5b828110156105ef576102fd8482896102b7565b855261030d8460208301896102b7565b6020860152604081850310600181036103295760808286038701535b506040830381146001810361034657602086018051600887021790525b5060405b60808110156103ce57858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161034a565b5060805b61014081101561045757858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016103d2565b50815f805f5b60508110156105c55760148104801561048d57600181146104b457600281146104d9576003811461050357610524565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610524565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610524565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610524565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff851617935060018101905061045d565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff16906040016102ea565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60408051808201909152606081525f602082015282515161025f9084906001600160601b031985166014610798565b60408051808201909152606081525f60208201526106aa84846001600160601b031985166014610798565b949350505050565b60408051808201909152606081525f602082015282518211156106d3575f80fd5b60208501516106e2838661090d565b1115610715576107158561070587602001518786610700919061090d565b610813565b610710906002610952565b610829565b5f808651805187602083010193508088870111156107335787860182525b505050602084015b60208410610773578051825261075260208361090d565b915061075f60208261090d565b905061076c60208561093f565b935061073b565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081525f602082015260208501516107bb858461090d565b11156107cf576107cf85610705868561090d565b5f6001836101000a0390508260200360080284901c93508551838682010185831982511617815250805184870111156108085783860181525b509495945050505050565b5f81831115610823575081610234565b50919050565b815161083583836101d1565b50610840838261023a565b50505050565b5f8083601f840112610856575f80fd5b50813567ffffffffffffffff81111561086d575f80fd5b602083019150836020828501011115610884575f80fd5b9250929050565b5f805f805f6060868803121561089f575f80fd5b853567ffffffffffffffff808211156108b6575f80fd5b6108c289838a01610846565b909750955060208801359150808211156108da575f80fd5b506108e788828901610846565b96999598509660400135949350505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610234576102346108f9565b5f8261093a57634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115610234576102346108f9565b8082028115828204841417610234576102346108f956fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/SHA256Digest.json b/artifacts/SHA256Digest.json index ebd14a29..402e63f0 100644 --- a/artifacts/SHA256Digest.json +++ b/artifacts/SHA256Digest.json @@ -28,8 +28,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610283806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f7e83aee14610030575b600080fd5b61004361003e3660046101ba565b610057565b604051901515815260200160405180910390f35b6000602082146100ad5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207368613235362068617368206c656e677468000000000000604482015260640160405180910390fd5b6100f1600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061014d9050565b60028686604051610103929190610226565b602060405180830381855afa158015610120573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101439190610236565b1495945050505050565b815160009061015d83602061024f565b111561016857600080fd5b50016020015190565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b600080600080604085870312156101d057600080fd5b843567ffffffffffffffff808211156101e857600080fd5b6101f488838901610171565b9096509450602087013591508082111561020d57600080fd5b5061021a87828801610171565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561024857600080fd5b5051919050565b8082018082111561027057634e487b7160e01b600052601160045260246000fd5b9291505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f7e83aee14610030575b600080fd5b61004361003e3660046101ba565b610057565b604051901515815260200160405180910390f35b6000602082146100ad5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207368613235362068617368206c656e677468000000000000604482015260640160405180910390fd5b6100f1600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061014d9050565b60028686604051610103929190610226565b602060405180830381855afa158015610120573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906101439190610236565b1495945050505050565b815160009061015d83602061024f565b111561016857600080fd5b50016020015190565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b600080600080604085870312156101d057600080fd5b843567ffffffffffffffff808211156101e857600080fd5b6101f488838901610171565b9096509450602087013591508082111561020d57600080fd5b5061021a87828801610171565b95989497509550505050565b8183823760009101908152919050565b60006020828403121561024857600080fd5b5051919050565b8082018082111561027057634e487b7160e01b600052601160045260246000fd5b9291505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b5061026b8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046101ac565b610054565b604051901515815260200160405180910390f35b5f602082146100a95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207368613235362068617368206c656e677468000000000000604482015260640160405180910390fd5b6100eb5f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101459050565b600286866040516100fd929190610213565b602060405180830381855afa158015610118573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061013b9190610222565b1495945050505050565b81515f90610154836020610239565b111561015e575f80fd5b50016020015190565b5f8083601f840112610177575f80fd5b50813567ffffffffffffffff81111561018e575f80fd5b6020830191508360208285010111156101a5575f80fd5b9250929050565b5f805f80604085870312156101bf575f80fd5b843567ffffffffffffffff808211156101d6575f80fd5b6101e288838901610167565b909650945060208701359150808211156101fa575f80fd5b5061020787828801610167565b95989497509550505050565b818382375f9101908152919050565b5f60208284031215610232575f80fd5b5051919050565b8082018082111561025857634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046101ac565b610054565b604051901515815260200160405180910390f35b5f602082146100a95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207368613235362068617368206c656e677468000000000000604482015260640160405180910390fd5b6100eb5f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101459050565b600286866040516100fd929190610213565b602060405180830381855afa158015610118573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061013b9190610222565b1495945050505050565b81515f90610154836020610239565b111561015e575f80fd5b50016020015190565b5f8083601f840112610177575f80fd5b50813567ffffffffffffffff81111561018e575f80fd5b6020830191508360208285010111156101a5575f80fd5b9250929050565b5f805f80604085870312156101bf575f80fd5b843567ffffffffffffffff808211156101d6575f80fd5b6101e288838901610167565b909650945060208701359150808211156101fa575f80fd5b5061020787828801610167565b95989497509550505050565b818382375f9101908152919050565b5f60208284031215610232575f80fd5b5051919050565b8082018082111561025857634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/Seaport.json b/artifacts/Seaport.json new file mode 100644 index 00000000..c0cd2dde --- /dev/null +++ b/artifacts/Seaport.json @@ -0,0 +1,2967 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Seaport", + "sourceName": "seaport-core/src/Seaport.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "CriteriaNotEnabledForItem", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InexactFraction", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidFulfillmentComponentData", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillmentIndex", + "type": "uint256" + } + ], + "name": "MismatchedFulfillmentOfferAndConsiderationComponents", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "MissingFulfillmentComponentOnAggregation", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [], + "name": "OfferAndConsiderationRequiredOnFulfillment", + "type": "error" + }, + { + "inputs": [], + "name": "OfferCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + } + ], + "name": "OrderCriteriaResolverOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + } + ], + "name": "UnresolvedConsiderationCriteria", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerIndex", + "type": "uint256" + } + ], + "name": "UnresolvedOfferCriteria", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents[]", + "name": "orders", + "type": "tuple[]" + } + ], + "name": "cancel", + "outputs": [ + { + "internalType": "bool", + "name": "cancelled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder", + "name": "", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "fulfillAdvancedOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableAdvancedOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[][]", + "name": "", + "type": "tuple[][]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maximumFulfilled", + "type": "uint256" + } + ], + "name": "fulfillAvailableOrders", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "considerationToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "considerationIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "internalType": "address", + "name": "offerToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "offerIdentifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offerAmount", + "type": "uint256" + }, + { + "internalType": "enum BasicOrderType", + "name": "basicOrderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "offererConduitKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalAdditionalRecipients", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct AdditionalRecipient[]", + "name": "additionalRecipients", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct BasicOrderParameters", + "name": "", + "type": "tuple" + } + ], + "name": "fulfillBasicOrder_efficient_6GL6yc", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order", + "name": "", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + } + ], + "name": "fulfillOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractOfferer", + "type": "address" + } + ], + "name": "getContractOffererNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "getCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "internalType": "struct OrderComponents", + "name": "", + "type": "tuple" + } + ], + "name": "getOrderHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "getOrderStatus", + "outputs": [ + { + "internalType": "bool", + "name": "isValidated", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isCancelled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "totalFilled", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSize", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "information", + "outputs": [ + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "domainSeparator", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "matchAdvancedOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "offerComponents", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "itemIndex", + "type": "uint256" + } + ], + "internalType": "struct FulfillmentComponent[]", + "name": "considerationComponents", + "type": "tuple[]" + } + ], + "internalType": "struct Fulfillment[]", + "name": "", + "type": "tuple[]" + } + ], + "name": "matchOrders", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ReceivedItem", + "name": "item", + "type": "tuple" + }, + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + } + ], + "internalType": "struct Execution[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct Order[]", + "name": "", + "type": "tuple[]" + } + ], + "name": "validate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801562000011575f80fd5b506040516200618b3803806200618b83398101604081905262000034916200031b565b808080808080808080806200004862000179565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa158015620000d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f991906200034a565b506101a052505f90506200010c620002a0565b90506001600160a01b0381166200013657604051632aea588760e01b815260040160405180910390fd5b5f6200014282620002b9565b8015156101c0526001600160a01b0383166101e0529050806200016857600163929eee14555b5050505050505050505050620003e8565b5f8080808080620001a460408051808201909152600781526614d9585c1bdc9d60ca1b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a815260200162006121606a913990505f6040518060c001604052806084815260200162005f776084913990505f60405180610100016040528060d481526020016200604d60d49139905060405180608001604052806052815260200162005ffb6052913980519060200120965082805190602001209550818051906020012094505f81838560405160200162000279939291906200039c565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a620002d39190620003c8565b6040515f8181818686fa925050503d805f81146200030d576040519150601f19603f3d011682016040523d82523d5f602084013e62000312565b606091505b50909392505050565b5f602082840312156200032c575f80fd5b81516001600160a01b038116811462000343575f80fd5b9392505050565b5f80604083850312156200035c575f80fd5b505080516020909101519092909150565b5f81515f5b818110156200038e576020818501810151868301520162000372565b505f93019283525090919050565b5f620003bf620003b8620003b184886200036d565b866200036d565b846200036d565b95945050505050565b5f82620003e357634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ad3620004a45f395f61047601525f818161036d0152818161042b01528181611a6001528181611ab301526124cd01525f61306901525f81816112ae015261303901525f612f1301525f612e5b01525f8181610c1e015261164901525f8181610bad015261149201525f8181610b4701526115db01525f612e8b01525f612ed401525f612eb00152615ad35ff3fe608060405260043610610103575f3560e01c8063a900866b11610092578063f07ec37311610062578063f07ec373146102f7578063f2d12b1214610316578063f47b774014610329578063fb0f3ee114610116578063fd9f1e101461034c575f80fd5b8063a900866b1461028a578063b3a34c4c146102be578063e7acab24146102d1578063ed98a574146102e4575f80fd5b80637423eb3c116100d85780637423eb3c146101f757806379df72bd1461020b57806387201b411461022a578063881477321461024b578063a81744041461026a575f80fd5b801561011657806306fdde031461013e57806346423aa71461015f5780635b34b966146101d5575f80fd5b366101125761011061036b565b005b5f80fd5b610129610124366004615115565b6103f9565b60405190151581526020015b60405180910390f35b348015610149575f80fd5b50610152610408565b604051610135919061518f565b34801561016a575f80fd5b506101b36101793660046151a1565b5f9081526001602052604090205460ff808216926101008304909116916001600160781b03620100008204811692600160881b9092041690565b6040805194151585529215156020850152918301526060820152608001610135565b3480156101e0575f80fd5b506101e9610417565b604051908152602001610135565b348015610202575f80fd5b50610110610420565b348015610216575f80fd5b506101e96102253660046151b8565b6104c1565b61023d61023836600461524c565b6104f8565b6040516101359291906153f0565b348015610256575f80fd5b5061012961026536600461543f565b610571565b61027d61027836600461547d565b61058f565b60405161013591906154e3565b348015610295575f80fd5b506101e96102a43660046154f5565b6001600160a01b03165f9081526002602052604090205490565b6101296102cc36600461550e565b61062a565b6101296102df366004615553565b6106a3565b61023d6102f23660046155d7565b6106e1565b348015610302575f80fd5b506101e96103113660046154f5565b610784565b61027d610324366004615677565b6107a1565b348015610334575f80fd5b5061033d6107ea565b60405161013593929190615719565b348015610357575f80fd5b5061012961036636600461543f565b610801565b7f000000000000000000000000000000000000000000000000000000000000000080156103b357600263929eee145c146103b05763a61be9f05f52346020526024601cfd5b50565b63929eee1454806103e057600263929eee145c146103dc5763a61be9f05f52346020526024601cfd5b5050565b600381146103dc5763a61be9f05f52346020526024601cfd5b5f61040261080c565b92915050565b60606104126109c0565b905090565b5f6104126109d8565b63929eee14546001147f000000000000000000000000000000000000000000000000000000000000000080610453575080155b1561047157604051630f45b98b60e41b815260040160405180910390fd5b61049a7f0000000000000000000000000000000000000000000000000000000000000000610a45565b6104b7576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f806104cd6004610aa3565b90506104f16104e282610ab35b63ffffffff16565b610140830135610b30565b3590565b9392505050565b60608061055d61051361050b6004610aa3565b610c746104da565b61052a61052260046020610cdc565b610cfa6104da565b61054161053960046040610cdc565b610d526104da565b61055061053960046060610cdc565b89338a15028a0189610daa565b915091509b509b9950505050505050505050565b5f6104f161058a6105826004610aa3565b610de46104da565b610e3c565b606061061f6105a96105a16004610aa3565b610f5d6104da565b604080515f8082526020820190925290610601565b6105ee6040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816105be5790505b5061061961061160046020610cdc565b610fb56104da565b3361100d565b90505b949350505050565b5f6104f161064361063b6004610aa3565b61104b6104da565b604080515f808252602082019092529061069b565b6106886040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816106585790505b5084336110c1565b5f6106d76106bc6106b46004610aa3565b6112406104da565b6106cb61052260046020610cdc565b853386150286016110c1565b9695505050505050565b6060806107736106f46105a16004610aa3565b604080515f808252602082019092529061074c565b6107396040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816107095790505b5061075c61053960046020610cdc565b61076b61053960046040610cdc565b883389610daa565b915091509850989650505050505050565b6001600160a01b0381165f90815260208190526040812054610402565b60606107dc6107b361050b6004610aa3565b6107c261052260046020610cdc565b6107d161061160046040610cdc565b33861502860161100d565b90505b979650505050505050565b60605f806107f661129c565b925092509250909192565b5f6104f183836112e8565b5f61012435600281901c90600316600182118334158214806108315761083134611423565b506003841160a0810260240135906502030203010160d01b861a905f630101020360d01b881a6108648882898888611434565b9096509150506101c4600583901b01355f87600581111561088757610887615329565b036108bc5760443560243517156108a557636ab37ce75f526004601cfd5b6108af8482611751565b6108b7611809565b61099d565b6040805160208082528183019092525f9160208201818036833701905050905060028a60058111156108f0576108f0615329565b036109135761090e60c4356084353360e435610104355b8787611889565b610988565b60038a600581111561092757610927615329565b036109455761090e60c4356084353360e435610104355b87876118d4565b60048a600581111561095957610959615329565b036109735761090e60243533608435604435606435610907565b6109886024353360843560443560643561093e565b610992848261190a565b61099b816119c4565b505b6109a88689846119e8565b6109b0611a5e565b6001995050505050505050505090565b6060602080526707536561706f727460475260606020f35b5f6109e1611ab1565b600143034060801c335f525f60205260405f208054820192508281555050336001600160a01b03167f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f82604051610a3a91815260200190565b60405180910390a290565b5f816001600160a01b0316600a5a610a5d9190615773565b6040515f8181818686fa925050503d805f8114610a95576040519150601f19603f3d011682016040523d82523d5f602084013e610a9a565b606091505b50909392505050565b5f813563ffffffff168201610402565b5f610ac661016060408051918201905290565b9050610ad58282610140611b28565b610af2610aeb610ae6846040610cdc565b611b31565b6040830152565b5f610b06610b01846060610cdc565b611b84565b9050610b13816060840152565b610b26610b1e825190565b610140840152565b50919050565b0190565b610140820151604080519084015180515f939284927f000000000000000000000000000000000000000000000000000000000000000092602090910190845b81811015610b9c578251601f1901805186825260c082208652905260209384019390920191600101610b6f565b508060051b6040512094505050505f7f0000000000000000000000000000000000000000000000000000000000000000915060405160206060890151015f5b86811015610c08578151601f1901805186825260e082208552905260209283019290910190600101610bdb565b505060408051600587901b9020601f198a0180517f00000000000000000000000000000000000000000000000000000000000000008252928b01805197815260608c018051938152610140909c019a8b5261018082209390915295909552939097525050925250919050565b5f8063ffffffff8335169050600581901b610c986020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610cca610cc4610cbf8484610cdc565b611240565b82850152565b602001610ca7565b5050505050919050565b5f6104f163ffffffff610cf46104ed8686610b2c8516565b16840190565b5f8063ffffffff8335169050600581901b610d1e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610d4a610cc4610d458484610cdc565b611bc7565b602001610d2d565b5f8063ffffffff8335169050600581901b610d766020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610da2610cc4610d9d8484610cdc565b611c09565b602001610d85565b60608036155f80610dbe8c8c85898b611c4c565b91509150610dd18c8b8b8b8b8787612029565b9450945050505097509795505050505050565b5f8063ffffffff8335169050600581901b610e086020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610e34610cc4610e2f8484610cdc565b61215b565b602001610e17565b5f610e45611ab1565b5f805f80855190505f5b81811015610f50575f878281518110610e6a57610e6a615792565b60209081029190910101518051909150600481608001516004811115610e9257610e92615329565b03610e9e575050610f48565b80519450610eab8161219e565b5f8181526001602052604081209850909650610ecd90879089903615156121d7565b50865460ff16610f455780610140015181606001515114610ef057610ef0612265565b610eff85878460200151612272565b865460ff191660011787556040517ff280791efe782edcf06ce15c8f4dff17601db3b88eb3805a0db7d77faf757f0490610f3c9088908490615895565b60405180910390a15b50505b600101610e4f565b5060019695505050505050565b5f8063ffffffff8335169050600581901b610f816020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610fad610cc4610fa88484610cdc565b61104b565b602001610f90565b5f8063ffffffff8335169050600581901b610fd96020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257611005610cc46110008484610cdc565b61230e565b602001610fe8565b60605f36151590505f806110258888858b5189611c4c565b9150915061103282612341565b61103f8887848885612380565b98975050505050505050565b5f61105e61020060408051918201905290565b60a0810180825290915061107a61107484610aa3565b82612453565b61108660016020840152565b61109260016040840152565b6110af6110a86110a3856020610cdc565b612489565b6060840152565b610b266110ba6124b1565b6080840152565b835160808101515f91906110e860048260048111156110e2576110e2615329565b146124cb565b5f80806110f78a36151561256c565b60408051600180825281830190925293965091945092505f9190816020015b61111e615027565b8152602001906001900390816111165790505090508a815f8151811061114657611146615792565b602002602001018190525061115b818b612764565b6111678684848b6128dd565b6040805160018082528183019092525f91602080830190803683375091925050503615156004878181111561119e5761119e615329565b146111c1576111af8d83885f6129dd565b6111bb86868684612a2f565b506111d3565b6111d0888e6080015183612b33565b95505b6111de888c8c612c03565b85825f815181106111f1576111f1615792565b6020026020010181815250506112088d8388612d26565b61122586895f01518a602001518d8c604001518d60600151612df3565b61122d611a5e565b5060019c9b505050505050505050505050565b5f61125361020060408051918201905290565b905061126760208381019083016040611b28565b60a0810180825261127a61107484610aa3565b61128b6110a86110a3856060610cdc565b610b266110ba6110a3856080610cdc565b60605f805f6112a9612e58565b90505f7f0000000000000000000000000000000000000000000000000000000000000000905060605f5281602052806040526303312e3660635260a05ff35b5f6112f1611ab1565b5f8083815b81811015611408573687878381811061131157611311615792565b90506020028101906113239190615977565b90505f61133360208301836154f5565b90505f61134660408401602085016154f5565b90505f61135960a0850160808601615996565b905081331483331417156004821417871796505f61138d61138261137a8790565b610ab36104da565b866101400135610b30565b5f8181526001602052604090819020805461ffff19166101001781559051909a509091506001600160a01b0380851691908616907f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d906113f09085815260200190565b60405180910390a385600101955050505050506112f6565b5050801561141857611418612f35565b506001949350505050565b63a61be9f05f52806020526024601cfd5b5f8061143f5f6124cb565b611447612f42565b426101643511154261014435111715611475576321ccfeb75f5261014435602052610164356040526044601cfd5b610204356102643510156114905763466aa6165f526004601cfd5b7f0000000000000000000000000000000000000000000000000000000000000000608081905260a08790526060602460c037604060646101203760e060802061016052610264356102043560051b6102a0016001820181526020810190508881526080602460208301376101608860a0528760c0525f60e0525f6102043593505f5b84811015611566578060400261028401602081610100376040816101203760208101358317925060208401935060e0608020845260a0850194508b85528a6020860152604081606087013750600101611512565b6001850160051b610160206060526102643594505b848110156115b6578060400261028401925060a0840193508a845289602085015260408360608601376020830135919091179060010161157b565b506001600160a01b038111156115d3576339f3e3fd5f526004601cfd5b50505050505f7f00000000000000000000000000000000000000000000000000000000000000009050806080528360a052606060c460c0376020610104610120375060c06080205f9081526020812060e05260843590611647826001600160a01b03165f9081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000060808190529091506040608460a03760605161010052896101205260a061014461014037816101e05261018060802094505050506102043560051b61018001828152336020820152608060408201526101206060820152600160808201528360a0820152606060c460c083013760a061026435026101e00160a4356084357f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318385a35f60605260608101820160405250505f61172383612f8d565b905061172f8389612fde565b7101000000000000000000000000000001000182559150509550959350505050565b60c43560843560e4356101043584156117b9575f6040519050632671a55160e11b815260206004820152600160248201528660448201528460648201528360848201523360a48201528260c48201528160e48201526117b38682610104613033565b50611801565b60028660058111156117cd576117cd615329565b036117f457806001146117e3576117e3816130ea565b6117ef848433856130fb565b611801565b61180184843385856131b0565b505050505050565b346064356084356102643560061b5f80805b8381101561185a5761028481013592506102a481013591508683111561184357611843613287565b82870396506118528284613294565b60400161181b565b508585111561186b5761186b613287565b6118758486613294565b848611156118015761180133868803613294565b61189381836132ca565b816118ba57826001146118a9576118a9836130ea565b6118b5878787876130fb565b6118cb565b6118cb828260028a8a8a8a8a6132e8565b50505050505050565b6118dd83613367565b6118e781836132ca565b816118f9576118b587878787876131b0565b6118cb828260038a8a8a8a8a6132e8565b5f805f805f861561192f57505060843592503391505060c4356101043560e435611944565b50339350506084359150506024356064356044355b801561195257611952613379565b50600586901b6101e403356102643560061b5f80805b838110156119a95761028481013592506102a481013591508a156119935761199083876159b4565b95505b6119a1878a8486898f613386565b604001611968565b506119b886898988888e613386565b50505050505050505050565b60408151146119d05750565b5f6119dc826020015190565b90506103dc81836133bb565b611a048260a4355b331415600182116004909210919091161690565b15611a5957805f611a13825190565b9050608081901c63ffffffff8216611a3484826317b1f94282526001905250565b601c840163fb5014fc6060529350611a5060a4358886856133df565b5f6060526118cb565b505050565b7f00000000000000000000000000000000000000000000000000000000000000008015611a8f575f63929eee145d50565b63929eee145480611aa5575f63929eee145d5050565b50600163929eee145550565b7f00000000000000000000000000000000000000000000000000000000000000008015611af05763929eee145c156103b057637fa8a9875f526004601cfd5b63929eee145480611b135763929eee145c156103dc57637fa8a9875f526004601cfd5b600181146103dc57637fa8a9875f526004601cfd5b80838337505050565b5f63ffffffff8235166040519150808252602082018160051b81018060a084026020870183378293505b81841015611b745780845260209093019260a001611b5b565b60405250919392505050565b9052565b5f63ffffffff8235166040519150808252602082018160051b81018060c084026020870183378293505b81841015611b745780845260209093019260c001611bae565b5f611bd960a060408051918201905290565b9050611be782826080611b28565b611c04611bfd611bf8846080610cdc565b613427565b6080830152565b919050565b5f63ffffffff8235166040519150808252602082018160051b8101808360061b6020870183378293505b81841015611b7457808452602090930192604001611c33565b60605f611c5960016124cb565b86515f90600160e61b82351690806001600160401b03811115611c7e57611c7e61574b565b604051908082528060200260200182016040528015611ca7578160200160208202803683370190505b50945060010160051b91505f60205b83811015611ea8575f611ccc8c83613cce6104da565b90505f805f611cdb848e61256c565b6001600160781b0382166020880152919450925090505f829003611d025750505050611ea0565b6001600160781b0381166040808601919091528a8601849052845160a081015160c0820151608083015192909301518051600184119d909d179c600490931099509092915f5b81811015611dea575f838281518110611d6357611d63615792565b602002602001015190508b8151108d179c505f611d858989846080015161345e565b90508160800151826060015103611da25760608201819052611db7565b611db18989846060015161345e565b60608301525b5f611dd08360600151838a8a611dcb361590565b61349a565b606084018190526080909301929092525050600101611d48565b5087516060015180515f5b81811015611e94575f838281518110611e1057611e10615792565b602002602001015190505f611e2a8b8b846080015161345e565b90508160800151826060015103611e475760608201819052611e5c565b611e568b8b846060015161345e565b60608301525b5f611e718360600151838c8c611dcb36151590565b6060840181905260a0840180516080909501949094529092525050600101611df5565b50505050505050505050505b602001611cb6565b50506001600160e61b018103611ec057611ec06134ed565b50611ecb8888612764565b5f8060205b8381101561200e578581015192508215612006575f611ef28c83613cce6104da565b9050885f03611f0d575f878301819052602090910152612006565b60048151608001516004811115611f2657611f26615329565b14611fa957611f3f8188866001600587901c038e6134fa565b611f55575f878301819052602090910152612006565b602080820151604083015183516080810151930151611f8e9388936001600160781b039081169316913314156001909111168e17612a2f565b611fa4575f878301819052602090910152612006565b611fd4565b611fbb815f015182608001518c612b33565b878301819052935083611fd4575f602090910152612006565b886001900398505f815f01519050611fff85825f015183602001518c85604001518660600151612df3565b6001935050505b602001611ed0565b508061201c5761201c613555565b5050509550959350505050565b85518551606091829161203c81836159c7565b6001600160401b038111156120535761205361574b565b60405190808252806020026020018201604052801561208c57816020015b61207961505a565b8152602001906001900390816120715790505b5092505f5b828110156120e4576120bf8c5f8d84815181106120b0576120b0615792565b60200260200101518c8c613562565b8482815181106120d1576120d1615792565b6020908102919091010152600101612091565b505f5b8181101561213d576121168c60018c848151811061210757612107615792565b60200260200101518c5f613562565b848483018151811061212a5761212a615792565b60209081029190910101526001016120e7565b5061214b8b84888a896135b1565b9350505097509795505050505050565b5f61216c6040808051918201905290565b905061218661218261217d84610aa3565b61389a565b8252565b611c046121976110a3846020610cdc565b6020830152565b5f6121b38260600151518361014001516138b9565b81516001600160a01b03165f90815260208190526040902054610402908390610b30565b82545f90610100900460ff16156121fe5781156121f7576121f7856138c9565b505f610622565b83546201000090046001600160781b0316801561225957831561222957612224866138da565b612259565b8454600160881b90046001600160781b0316811061225957821561225057612250866138eb565b5f915050610622565b50600195945050505050565b632165628a5f526004601cfd5b33831480156122815750505050565b5f61228a612e58565b61190160f01b5f9081526002828152602287815260428320908390528651939450929190601f601d840116106102e260621984011016156122f4576122cf86886138fc565b61190160f01b5f908152600286905260228281526042822091905290975090506122f7565b50815b612304888285858a613992565b5050505050505050565b5f61231f6040808051918201905290565b9050612330612182610d9d84610aa3565b611c04612197610d9d846020610cdc565b80518060051b6040019050602082038051602082527f4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e78383a190525050565b8351606090806001600160401b0381111561239d5761239d61574b565b6040519080825280602002602001820160405280156123d657816020015b6123c361505a565b8152602001906001900390816123bb5790505b5091505f5b81811015612439575f8782815181106123f6576123f6615792565b6020026020010151905061241389825f0151836020015185613adb565b84838151811061242557612425615792565b6020908102919091010152506001016123db565b5061244787838787876135b1565b50505b95945050505050565b6124608282610160611b28565b612471610aeb610ae6846040610cdc565b6103dc612482610b01846060610cdc565b6060830152565b6040518135601f0163ffffffe01660200180838337913563ffffffff16815290810160405290565b5f6124c3602060408051918201905290565b5f8152905090565b7f000000000000000000000000000000000000000000000000000000000000000080156125185763929eee145c1561250a57637fa8a9875f526004601cfd5b8160010163929eee145d5050565b63929eee14548061254a5763929eee145c1561253b57637fa8a9875f526004601cfd5b8260010163929eee145d505050565b6001811461255f57637fa8a9875f526004601cfd5b505060020163929eee1455565b5f805f80855f015190506125898160a001518260c0015187613c80565b61259c57505f925082915081905061275d565b602086015160408701516001600160781b0391821694501691505f6004826080015160048111156125cf576125cf615329565b036125fc57600183850218905080156125ea576125ea613ca3565b506001935083925082915061275d9050565b50818311831517801561261157612611613ca3565b608082015160011615848411161561262b5761262b613cb0565b6126348261219e565b5f81815260016020526040812091965061265290879083908a6121d7565b61266557505f935083925061275d915050565b805460ff1661268057612680835f0151878a60600151612272565b8054608881901c8061269457869150612757565b6001600160781b038260101c169150600186036126b8578181039650809550612757565b8086036126d357908601858103868211029096039590612757565b80860296810291909502810186810387821102918290039695919003906001600160781b0386111561275757612717565b5f5b8215610b2657908290069190612706565b61272a6127248784612704565b88612704565b8015019687900496909504946001600160781b0386111561275757634e487b715f5260116020526024601cfd5b50505050505b9250925092565b805182515f5b82811015612853575f84828151811061278557612785615792565b602002602001015190505f815f015190508381106127aa576127aa8260200151613cbd565b5f8782815181106127bd576127bd615792565b6020026020010151905080602001516001600160781b03165f036127e35750505061284b565b80516040808201519085015163bfb3f8ce5f8760200151600181111561280b5761280b615329565b14612827575f61281c856060613cce565b9350636088d7de9150505b8251821061283857805f526004601cfd5b612843838389613cd9565b505050505050505b60010161276a565b505f5b818110156128d6575f85828151811061287157612871615792565b6020026020010151905080602001516001600160781b03165f0361289557506128ce565b8051608081015160608201516128b29085908363a8930e9a613d8c565b6128ca8483604001518363d69293326104da613d8c90565b5050505b600101612856565b5050505050565b60a084015160c08501516040860151515f805b8281101561295a575f8960400151828151811061290f5761290f615792565b602002602001015190505f815f01519050801584179350505f612946826060015183608001518c8c8b8b612941361590565b613df3565b6060830152506080018690526001016128f0565b5060808801516004811082168015612974576129746134ed565b505050506060860151515f5b81811015612304575f8860600151828151811061299f5761299f615792565b602002602001015190505f6129c4826060015183608001518b8b8a8a61294136151590565b60608301525060a0810151608090910152600101612980565b8351608081015160208201513314156001821160049092109190911616156128d6575f80612a12858489608001518988613e2e565b63fb5014fc6060529092509050611a5083602001518684846133df565b5f848152600160205260408120805482908290608881901c80612a5457889150612adc565b6001600160781b038260101c169150808803612a7857908801878111935090612adc565b97880297808802979190910288018781119350906001600160781b038083119089111715612adc57612aaa8883612704565b8015019788900497909104906001600160781b038083119089111715612adc57634e487b715f5260116020526024601cfd5b508215612b15578515612b09576040516310fda3e160e01b8152600481018a905260240160405180910390fd5b5f945050505050610622565b8660881b8160101b1760011782556001945050505050949350505050565b5f83610140015184606001515114612b4d57612b4d612265565b83515f8080612b5c8888613fac565b915091505f8082845f885af16001600160a01b0385165f908152600260205260409020805460018101909155606086901b189550925082612bbb578515612bae57612ba5614056565b612bae8561409d565b505f93506104f192505050565b505050505f805f612bd8876040015188606001516104da6140ae90565b925092509250825f14612bee57612bee8461409d565b60408701919091526060860152509392505050565b6040805160208082528183019092525f916020820181803683375050506040850151519091505f5b81811015612c7b575f86604001518281518110612c4a57612c4a615792565b60200260200101519050846080820152612c7281885f0151896101200151876104da61432790565b50600101612c2b565b50506060840151515f90815b81811015612d09575f87606001518281518110612ca657612ca6615792565b602002602001015190505f6005811115612cc257612cc2615329565b81516005811115612cd557612cd5615329565b03612cf1574793508381606001511115612cf157612cf1613287565b612d00813389886143276104da565b50600101612c87565b5050612d14826119c4565b504780156128d6576128d63382613294565b8251608081015160208201515f92839283928392916004811060019091111633909114151615612d8857612d69612d6361010083015190565b5190565b8861441c565b9093509150612d7a60208201612d5f565b945063fb5014fc9350612dd4565b600481608001516004811115612da057612da0615329565b0361230457805194505f8560601b9050612dc187838b608001518b8561445d565b639397928596509094509250612dd49050565b612dde6060859052565b612dea858785856133df565b5f606052612304565b60608290506060829050856001600160a01b0316876001600160a01b03167f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318a888686604051612e469493929190615a13565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614612f10575060408051608080517f00000000000000000000000000000000000000000000000000000000000000005f9081527f00000000000000000000000000000000000000000000000000000000000000006020527f0000000000000000000000000000000000000000000000000000000000000000855246606090815230845260a08220949095529093529190915290565b507f000000000000000000000000000000000000000000000000000000000000000090565b63fed398fc5f526004601cfd5b600435602014610224356102401416610244356102606102643560061b01141660186101243510600160a01b60843560a4351760c4356024351717101616806103b0576103b0614528565b5f8181526001602081905260409091209060843590612fb290849084903615156121d7565b50815460ff16610b2657610b268184612fd9602463ffffffff6102443516016124896104da565b612272565b5f612feb8260a4356119f0565b15610402575f805f612ffc86614535565b63fb5014fc6060529194509250905061301c60a43587601c8601856133df565b5f60605260209190910160801b1781529392505050565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff60a01b175f90815260208690527f000000000000000000000000000000000000000000000000000000000000000083526055600b20919092526001600160a01b031690505f805f805260205f85875f875af191505f519050816130c8576130bf614056565b6130c8836145ed565b6001600160e01b03198116632671a55160e11b146118015761180186846145fe565b6369f958275f52806020526024601cfd5b833b61311257635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af1806131a2573d1561318057601f3d0160051c8260051c8160030281831115613169578183036003028280028480020360091c01015b5a60208201101561317c573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b6131c757635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af18061326c573d1561324b57601f3d0160051c8560051c8160030281831115613234578183036003028280028480020360091c01015b5a602082011015613247573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b638ffff9805f526004601cfd5b61329d81613367565b5f805f805f85875af1905080611a59576132b5614056565b63bc806b965f5282602052816040526044601cfd5b5f6132d6836020015190565b9050818114611a5957611a59836119c4565b5f60208851036133225750604080885260208089018a9052632671a55160e11b918901919091526044880152600160648801819052613331565b50606487018051600101908190525b603c60c082028901038781528660208201528560408201528460608201528360808201528260a082015250505050505050505050565b806103b0576391b3e5145f526004601cfd5b636ab37ce75f526004601cfd5b61338f83613367565b61339981836132ca565b816133aa576117ef86868686614613565b611801828260018989895f8a6132e8565b6064810151604082019060c0026044016133d6848383613033565b50506020905250565b5f806001600160e01b03198451165f805260205f85875f8b5af15f51909350149050816134185761340e614056565b846080526024607cfd5b8061180157846080526024607cfd5b5f8063ffffffff83351690506001810160051b61344a8160408051918201905290565b9250613457848483611b28565b5050919050565b5f82840361346d5750806104f1565b82848309156134835763c63cf0895f526004601cfd5b5f61348e8584615aaf565b93909304949350505050565b5f8486146134e357838303428590038082035f6134b7838a615aaf565b6134c1838c615aaf565b6134cb91906159c7565b9050858487830304018115150294505050505061244a565b5092949350505050565b6312d3f5a35f526004601cfd5b8451608081015160208201515f92916004811060019091111633909114151615610f50575f8061353187848b608001518b8a613e2e565b9150915061354b836020015188848463fb5014fc8a614707565b935050505061244a565b63d5da9a1b5f526004601cfd5b61356a61505a565b83515f0361357b5761357b85614774565b5f85600181111561358e5761358e615329565b036135a45761359f86858385614785565b61244a565b61244a86858333876148f5565b84516060905f816001600160401b038111156135cf576135cf61574b565b6040519080825280602002602001820160405280156135f8578160200160208202803683370190505b506040805160208082528183019092529192505f9190602082018180368337505089519192505060010160051b60205b81811015613687575f61363e8b83613cce6104da565b8051606081015191925090801561367c57478111825115161561366857638ffff9805f526004601cfd5b61367c828460200151856040015189614327565b505050602001613628565b50505f5b838110156137f3575f8a82815181106136a6576136a6615792565b6020026020010151905080602001516001600160781b03165f036136ed575f8483815181106136d7576136d7615792565b91151560209283029190910190910152506137eb565b600184838151811061370157613701615792565b911515602092830291909101909101528051604081015180515f5b81811015613786575f83828151811061373757613737615792565b6020026020010151905080606001515f1461377357608081018051908e9052855161012087015161376d9184918c6143276104da565b60808201525b608081015160609091015260010161371c565b505050606081015180515f5b818110156137e5575f8382815181106137ad576137ad615792565b602002602001015190505f81606001519050805f146137d1576137d1888483614a2c565b5060a0810151606090910152600101613792565b50505050505b60010161368b565b506137fd816119c4565b47801561380e5761380e3382613294565b8515613884575f5b848110156138825783818151811061383057613830615792565b60200260200101511561387a5761387a8b828151811061385257613852615792565b60200260200101518a8b848151811061386d5761386d615792565b6020026020010151612d26565b600101613816565b505b61388c611a5e565b509098975050505050505050565b5f6138ad61016060408051918201905290565b9050611c048282612453565b808210156103dc576103dc614a45565b631a5155745f52806020526024601cfd5b63ee9e0e635f52806020526024601cfd5b6310fda3e15f52806020526024601cfd5b5f805f84516001811660410380820360051c9250808752806020018701915050805160e81c6003820191506001811660051b868152825160208218525060015b838110156139685760405f2082821c60051b60209081169182529384018051919094185260010161393c565b50505060405f2091505f61397b82614a52565b5f9081526020939093525050604090209392505050565b5f805f528151602083038051826041035f600182116139f557604087015160608801515f1a83156139d657601b8260ff1c0190506001600160ff1b03821660408a01525b88528a855260205f60808760015afa508385528588526040880152505f515b8a148a1515169450849050613abe57858552604082526044850380516040870351630b135d3f60e11b835289604089035260205f60648b01858f5afa96508615613ab257630b135d3f60e11b5f5114613ab2578b3b15613a5c57634f7fb80d5f526004601cfd5b6001866041031115613a7557638baa579f5f526004601cfd5b64010100000060608901515f1a1a15604187141615613aa557631f003d0a5f5260608801515f1a6020526024601cfd5b63815e1d645f526004601cfd5b8385529152603f198601525b5050508061180157613ace614056565b634f7fb80d5f526004601cfd5b613ae361505a565b8251158451151715613afc576398e9db6e5f526004601cfd5b613b0461505a565b613b118685835f806148f5565b805160608101515f03613b2657509050610622565b613b368787858460800151614785565b82516040828101519082015160208085015190840151855185511891181791181715613b6d5763bced929d5f52846020526024601cfd5b806060015182606001511115613bf4575f865f81518110613b9057613b90615792565b60200260200101519050816060015183606001510389825f015181518110613bba57613bba615792565b60200260200101515f015160600151826020015181518110613bde57613bde615792565b6020026020010151606001818152505050613c75565b5f875f81518110613c0757613c07615792565b60200260200101519050826060015182606001510389825f015181518110613c3157613c31615792565b60200260200101515f015160400151826020015181518110613c5557613c55615792565b602002602001015160600181815250508260600151826060018181525050505b505050949350505050565b428084111590831116818015613c94575080155b156104f1576104f18484614e61565b635a052b325f526004601cfd5b63a11b63ff5f526004601cfd5b63133c37c65f52806020526024601cfd5b5f6104f18284015190565b5f838381518110613cec57613cec615792565b602002602001015190505f815f01519050613d078160031090565b613d1357613d13614e76565b60408201518015613d3657613d318460600151828660800151614e83565b613d49565b60808401515115613d4957613d49614ecd565b6004821460030383816005811115613d6357613d63615329565b90816005811115613d7657613d76615329565b9052505050606090920151604090910152505050565b82515f5b81811015611801575f858281518110613dab57613dab615792565b60209081029190910101518051604082015191925090600382116004881415821515171615613de557855f5288602052836040526044601cfd5b505050806001019050613d90565b5f868803613e0d57613e0686868961345e565b90506107df565b6107dc613e1b87878b61345e565b613e2688888b61345e565b86868661349a565b5f805f613e39614eda565b6301e4d72a815260208082015260408101898152336060830152601c820194509091508751604082015287613e79613e7260a083015190565b60e0840152565b613e8f613e8760c083015190565b610100840152565b613ea5613e9d60e083015190565b610120840152565b610140613eb3816060850152565b5f613ebf604084015190565b90505f613ece82848701614ee4565b928301929050613edf836080870152565b5f613eeb606086015190565b90505f613efa82868901614f4a565b948501949050613f0b8560a0890152565b5f613f188e878a01614faf565b959095019450613f298560c0890152565b8685015f613f378e83614fce565b602497019687019a50613f539050613f4e8c8c0190565b614ffe565b8060408b901b60808b901b17178f610100018181525050613f7d8c82611b8090919063ffffffff16565b60058c8e51613f8c91906159b4565b613f97911b8b6159b4565b99505050505050505050509550959350505050565b5f8083613fb7614eda565b639891976581523360208201908152608060408301819052601c9092019450905f613fe3604085015190565b90505f613ff282848601614ee4565b928301929050614003836040860152565b5f61400f606087015190565b90505f61401e82868801614ee4565b94850194905061402f856060880152565b895f61403d82898901614faf565b9a9d96909a016004019b50949950505050505050505050565b3d1561409b57601f3d0160051c60405160051c8160030281831115614088578183036003028280028480020360091c01015b5a602082011015611a59573d5f803e3d5ffd5b565b63939792855f52806020526024601cfd5b60603d105f8080808080866141205760405f803e5f51935060205192503d60208501113d60208501118082179850505086614120576020845f3e5f51915060208360203e60205190508160071b60208501018160a0026020850101803d10823d101761ffff8486171117985050505f80525b86614152575f8061413584602088018d61415b565b9250975061414783602087018c61423b565b929092179850909550505b5050505061275d565b5f806040519150825160c08602602001830160405285835260208660010160051b8085018360010160051b8701614199858b81811090829003020190565b60010160051b8a861196505b808510156141f957828589015260808a843e6060830151955085608084015260608201518681116141d685856142e2565b17881797505060808a01995060a08301925060a0820191506020850194506141a5565b50505b8183101561422f578083870152608088823e6060810151608082015260808801975060a0810190506020830192506141fc565b50505050935093915050565b604051815180851190808603818710028101602060e08202850181016040528185526001928301600590811b87019390920190911b908185015b8282101561422f57808287015260a088823e60206060890160a083013e606081015160608501516142b26080840151608088015180159114171590565b818311176142c084886142e2565b60a09b909b019a179690961795505060c0938401936020929092019101614275565b5f81516040830151801560038311161561430457506040840151600119909101905b604085015181148551831460208701516020870151141616159250505092915050565b5f8451600581111561433b5761433b615329565b0361437857604084015160208501516001600160a01b0316171561436157614361613379565b61437384608001518560600151613294565b614416565b60018451600581111561438d5761438d615329565b036143be576040840151156143a4576143a4613379565b614373846020015184866080015187606001518686613386565b6002845160058111156143d3576143d3615329565b036143f7576143738460200151848660800151876040015188606001518787611889565b61441684602001518486608001518760400151886060015187876118d4565b50505050565b608082901c63ffffffff604084901c811690808516906144449084906317b1f94290611b8016565b601c830192506144548482614fce565b50509250929050565b5f80614467614eda565b63f4dd92ce815287841860a0820152601c8101925060200160a0808252875f614491604083015190565b90505f6144a082858701614ee4565b9384019390506144b1846020870152565b5f6144bd606085015190565b90505f6144cc82878901614f4a565b9586019590506144dd866040890152565b5f6144ea8d888a01614faf565b9687019690506144fb8760608a0152565b5f6145088d898b01614fce565b905080880197508760040199505050505050505050509550959350505050565b6339f3e3fd5f526004601cfd5b6301e4d72a6102043560051b6080019081525f808260208082015260408101858152336060830152601c919091019061456f608435610aeb565b61458061014460e083016060611b28565b61014061458e816060840152565b61459c60a082016080840152565b61016060a06102643581029290920101906145b8908290840152565b6145c25f82840152565b6020016145d08160c0840152565b5f9181019182526020820196909652939560449095019492505050565b63d13d53d45f52806020526024601cfd5b631cf99b265f5281602052806040526044601cfd5b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166146f85780873b1515166146f857806146e757816146ca573d156146a957601f3d0160051c8360051c8160030281831115614692578183036003028280028480020360091c01015b5a6020820110156146a5573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b5f805f6001600160e01b03198751165f805260205f888a5f8e5af15f5190935014905081614753578361473e575f925050506106d7565b614746614056565b845f52876020526024601cfd5b8061476557845f52876020526024601cfd5b50600198975050505050505050565b63375c24c15f52806020526024601cfd5b5f805f85865160051b87015b808210156148a2576020820191508851825151106147b1576147b16148d6565b81515160051b60208a01015180516020845101515f6040830151602085015115815184101517156147e6575050505050614791565b8260051b60208201015191505060608101935083518901915083511589831060011b17881797508198505f84528a51935086156001811461484f5760608220881860408d01516101208601511860208e015186511817171561484a5761484a6148d6565b614898565b8151855260208201516020860152604082015160408601528a6080860152835160208d015261012084015160408d015260608520975060208d0192508683181561489857865183525b5050505050614791565b5050508160608551015280156148cf57600181036148c7576391b3e5145f526004601cfd5b6148cf6148e3565b5050614416565b637fda72795f526004601cfd5b634e487b715f5260116020526024601cfd5b5f805f86875160051b88015b808210156149f7576020820191508151518a518110614922576149226148d6565b8060051b60208c01015190506020835101515f606083510151602084015115815184101517156149555750505050614901565b8260051b60208201015191505060608101925082518801915082511588831060011b17871796508197505f83528a5192508515600181146149a75760a0822087146149a2576149a26148d6565b6149ee565b815184526020820151602085015260408201516040850152608082015160808501528a60208d01528960408d015260a08220965060208d019250858318156149ee57855183525b50505050614901565b50508551606001839052508015614a255760018103614a1d576391b3e5145f526004601cfd5b614a256148e3565b50506128d6565b63a5f542085f528260205281604052806060526064601cfd5b63466aa6165f526004601cfd5b5f614e58565b5f6009821015614bb1576005821015614b0e576003821015614ac1577f832c58a5b611aadcfa6a082ac9d04bace53d8278387f10040347b7e98eb5b30260018314027fbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde3018610402565b7ff3e8417a785f980bdaf134fa0274a6bf891eeb8195cd94b09d2aa651046e28bc60038314027fa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af118610402565b6007821015614b64577f25d02425402d882d211a7ab774c0ed6eca048c4d03d9af40132475744753b2a360058314027f1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b5518610402565b7fb58d772fb09b426b9dece637f61ca9065f2b994f1464b51e9207f55f7c8f594860078314027f7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc1418610402565b6011821015614d0957600d821015614c6657600b821015614c19577f6f0ec38c21f6f583ab7f3c5413c773ffd5344c34fde1d390958e438bf667448f60098314027fd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da0518610402565b7f32f4e7485d6485f9f6c255929b9905c62ba919758bbe231f231eaeecf33d810c600b8314027fbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f18610402565b600f821015614cbc577f8df51df98847160517f5b1186b4bc3f418d98b8a7f17f1292f392d79d600d79e600d8314027f6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a85259018610402565b7fcc4886e37eedd9aacd6c1c2c9247197a621a71282e87a7cbc673f3736d9aa141600f8314027f1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde818610402565b6015821015614db5576013821015614d68577f2d7a3ed6dab270fdb8e054b2ad525f0ce2a8b89cc76c17f0965434740f673a5560118314027fc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d8587718610402565b7f54b3212a178782f104e0d514b41a9a5c4ca9c980bf6597c3cecbf280917e202a60138314027f5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e6435001718610402565b6017821015614e0b577fbb40bf8cea3a5a716e2b6eb08bbdac8ec159f82f380783db3c56904f15a43d0460158314027f3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d18610402565b7f403be09941a31d05cfc2f896505811353d45d38743288b016630cce39435476a60178314027f1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c18610402565b61040282614a58565b6321ccfeb75f5281602052806040526044601cfd5b6394eb6af65f526004601cfd5b5f835f5260205f2060208301835160051b81015b80821015614ebe57815180841160051b93845260209384185260405f209290910190614e97565b50508314905080614416576144165b6309bde3395f526004601cfd5b5f61041260405190565b5f825180835260208401602084018260051b82015b80831015614f375782518051835260208101516020840152604081015160408401526060810151606084015250602083019250608082019150614ef9565b5050508060071b60200191505092915050565b5f80614f54845190565b8084529050602084810190600583901b860181019085015b82821115614f9c575f614f7e84615008565b9050614f8c818360a0615011565b506020929092019160a001614f6c565b60a0840260200194505050505092915050565b5f63ffffffe0603f614fbf855190565b01169050610402838383615011565b5f80614fd8845190565b8084529050600581901b614ff3602086810190860183615011565b602001949350505050565b6103b06040829052565b5f610402825190565b8082828560045afa80153d151715614416575f80fd5b6040518060a0016040528061503a61509c565b81525f602082018190526040820152606080820181905260809091015290565b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e083018290528252602082018190529181019190915290565b6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020015f60048111156150e6576150e6615329565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b5f60208284031215615125575f80fd5b81356001600160401b0381111561513a575f80fd5b820161024081850312156104f1575f80fd5b5f81518084525f5b8181101561517057602081850181015186830182015201615154565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6104f1602083018461514c565b5f602082840312156151b1575f80fd5b5035919050565b5f602082840312156151c8575f80fd5b81356001600160401b038111156151dd575f80fd5b820161016081850312156104f1575f80fd5b5f8083601f8401126151ff575f80fd5b5081356001600160401b03811115615215575f80fd5b6020830191508360208260051b850101111561522f575f80fd5b9250929050565b80356001600160a01b0381168114611c04575f80fd5b5f805f805f805f805f805f60e08c8e031215615266575f80fd5b6001600160401b03808d35111561527b575f80fd5b6152888e8e358f016151ef565b909c509a5060208d013581101561529d575f80fd5b6152ad8e60208f01358f016151ef565b909a50985060408d01358110156152c2575f80fd5b6152d28e60408f01358f016151ef565b909850965060608d01358110156152e7575f80fd5b506152f88d60608e01358e016151ef565b909550935060808c0135925061531060a08d01615236565b915060c08c013590509295989b509295989b9093969950565b634e487b7160e01b5f52602160045260245ffd5b60068110611b8057611b80615329565b61535882825161533d565b6020818101516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5f815180845260208085019450602084015f5b838110156153e55781516153b888825161534d565b808401516001600160a01b031660a08901526040015160c088015260e090960195908201906001016153a3565b509495945050505050565b604080825283519082018190525f906020906060840190828701845b8281101561542a57815115158452928401929084019060010161540c565b50505083810360208501526106d78186615390565b5f8060208385031215615450575f80fd5b82356001600160401b03811115615465575f80fd5b615471858286016151ef565b90969095509350505050565b5f805f8060408587031215615490575f80fd5b84356001600160401b03808211156154a6575f80fd5b6154b2888389016151ef565b909650945060208701359150808211156154ca575f80fd5b506154d7878288016151ef565b95989497509550505050565b602081525f6104f16020830184615390565b5f60208284031215615505575f80fd5b6104f182615236565b5f806040838503121561551f575f80fd5b82356001600160401b03811115615534575f80fd5b830160408186031215615545575f80fd5b946020939093013593505050565b5f805f805f60808688031215615567575f80fd5b85356001600160401b038082111561557d575f80fd5b9087019060a0828a031215615590575f80fd5b909550602087013590808211156155a5575f80fd5b506155b2888289016151ef565b909550935050604086013591506155cb60608701615236565b90509295509295909350565b5f805f805f805f8060a0898b0312156155ee575f80fd5b88356001600160401b0380821115615604575f80fd5b6156108c838d016151ef565b909a50985060208b0135915080821115615628575f80fd5b6156348c838d016151ef565b909850965060408b013591508082111561564c575f80fd5b506156598b828c016151ef565b999c989b509699959896976060870135966080013595509350505050565b5f805f805f805f6080888a03121561568d575f80fd5b87356001600160401b03808211156156a3575f80fd5b6156af8b838c016151ef565b909950975060208a01359150808211156156c7575f80fd5b6156d38b838c016151ef565b909750955060408a01359150808211156156eb575f80fd5b506156f88a828b016151ef565b909450925061570b905060608901615236565b905092959891949750929550565b606081525f61572b606083018661514c565b6020830194909452506001600160a01b0391909116604090910152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261578d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156153e55781516157ce88825161533d565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016157b9565b5f815180845260208085019450602084015f5b838110156153e557815161583788825161533d565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c09096019590820190600101615822565b60058110611b8057611b80615329565b828152604060208201526158b56040820183516001600160a01b03169052565b5f60208301516158d060608401826001600160a01b03169052565b5060408301516101608060808501526158ed6101a08501836157a6565b91506060850151603f198584030160a086015261590a838261580f565b925050608085015161591f60c0860182615885565b5060a085015160e085015260c0850151610100818187015260e0870151915061012082818801528188015192506101409150828288015280880151848801525080870151610180870152505050809150509392505050565b5f823561015e1983360301811261598c575f80fd5b9190910192915050565b5f602082840312156159a6575f80fd5b8135600581106104f1575f80fd5b818103818111156104025761040261575f565b808201808211156104025761040261575f565b5f815180845260208085019450602084015f5b838110156153e557615a0087835161534d565b60a09690960195908201906001016159ed565b5f6080808301878452602060018060a01b03808916602087015260406080604088015283895180865260a08901915060208b0195505f5b81811015615a8b578651615a5f84825161533d565b808701518616848801528481015185850152606090810151908401529585019591870191600101615a4a565b50508781036060890152615a9f818a6159da565b9c9b505050505050505050505050565b80820281158282048414176104025761040261575f56fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405260043610610103575f3560e01c8063a900866b11610092578063f07ec37311610062578063f07ec373146102f7578063f2d12b1214610316578063f47b774014610329578063fb0f3ee114610116578063fd9f1e101461034c575f80fd5b8063a900866b1461028a578063b3a34c4c146102be578063e7acab24146102d1578063ed98a574146102e4575f80fd5b80637423eb3c116100d85780637423eb3c146101f757806379df72bd1461020b57806387201b411461022a578063881477321461024b578063a81744041461026a575f80fd5b801561011657806306fdde031461013e57806346423aa71461015f5780635b34b966146101d5575f80fd5b366101125761011061036b565b005b5f80fd5b610129610124366004615115565b6103f9565b60405190151581526020015b60405180910390f35b348015610149575f80fd5b50610152610408565b604051610135919061518f565b34801561016a575f80fd5b506101b36101793660046151a1565b5f9081526001602052604090205460ff808216926101008304909116916001600160781b03620100008204811692600160881b9092041690565b6040805194151585529215156020850152918301526060820152608001610135565b3480156101e0575f80fd5b506101e9610417565b604051908152602001610135565b348015610202575f80fd5b50610110610420565b348015610216575f80fd5b506101e96102253660046151b8565b6104c1565b61023d61023836600461524c565b6104f8565b6040516101359291906153f0565b348015610256575f80fd5b5061012961026536600461543f565b610571565b61027d61027836600461547d565b61058f565b60405161013591906154e3565b348015610295575f80fd5b506101e96102a43660046154f5565b6001600160a01b03165f9081526002602052604090205490565b6101296102cc36600461550e565b61062a565b6101296102df366004615553565b6106a3565b61023d6102f23660046155d7565b6106e1565b348015610302575f80fd5b506101e96103113660046154f5565b610784565b61027d610324366004615677565b6107a1565b348015610334575f80fd5b5061033d6107ea565b60405161013593929190615719565b348015610357575f80fd5b5061012961036636600461543f565b610801565b7f000000000000000000000000000000000000000000000000000000000000000080156103b357600263929eee145c146103b05763a61be9f05f52346020526024601cfd5b50565b63929eee1454806103e057600263929eee145c146103dc5763a61be9f05f52346020526024601cfd5b5050565b600381146103dc5763a61be9f05f52346020526024601cfd5b5f61040261080c565b92915050565b60606104126109c0565b905090565b5f6104126109d8565b63929eee14546001147f000000000000000000000000000000000000000000000000000000000000000080610453575080155b1561047157604051630f45b98b60e41b815260040160405180910390fd5b61049a7f0000000000000000000000000000000000000000000000000000000000000000610a45565b6104b7576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f806104cd6004610aa3565b90506104f16104e282610ab35b63ffffffff16565b610140830135610b30565b3590565b9392505050565b60608061055d61051361050b6004610aa3565b610c746104da565b61052a61052260046020610cdc565b610cfa6104da565b61054161053960046040610cdc565b610d526104da565b61055061053960046060610cdc565b89338a15028a0189610daa565b915091509b509b9950505050505050505050565b5f6104f161058a6105826004610aa3565b610de46104da565b610e3c565b606061061f6105a96105a16004610aa3565b610f5d6104da565b604080515f8082526020820190925290610601565b6105ee6040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816105be5790505b5061061961061160046020610cdc565b610fb56104da565b3361100d565b90505b949350505050565b5f6104f161064361063b6004610aa3565b61104b6104da565b604080515f808252602082019092529061069b565b6106886040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816106585790505b5084336110c1565b5f6106d76106bc6106b46004610aa3565b6112406104da565b6106cb61052260046020610cdc565b853386150286016110c1565b9695505050505050565b6060806107736106f46105a16004610aa3565b604080515f808252602082019092529061074c565b6107396040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816107095790505b5061075c61053960046020610cdc565b61076b61053960046040610cdc565b883389610daa565b915091509850989650505050505050565b6001600160a01b0381165f90815260208190526040812054610402565b60606107dc6107b361050b6004610aa3565b6107c261052260046020610cdc565b6107d161061160046040610cdc565b33861502860161100d565b90505b979650505050505050565b60605f806107f661129c565b925092509250909192565b5f6104f183836112e8565b5f61012435600281901c90600316600182118334158214806108315761083134611423565b506003841160a0810260240135906502030203010160d01b861a905f630101020360d01b881a6108648882898888611434565b9096509150506101c4600583901b01355f87600581111561088757610887615329565b036108bc5760443560243517156108a557636ab37ce75f526004601cfd5b6108af8482611751565b6108b7611809565b61099d565b6040805160208082528183019092525f9160208201818036833701905050905060028a60058111156108f0576108f0615329565b036109135761090e60c4356084353360e435610104355b8787611889565b610988565b60038a600581111561092757610927615329565b036109455761090e60c4356084353360e435610104355b87876118d4565b60048a600581111561095957610959615329565b036109735761090e60243533608435604435606435610907565b6109886024353360843560443560643561093e565b610992848261190a565b61099b816119c4565b505b6109a88689846119e8565b6109b0611a5e565b6001995050505050505050505090565b6060602080526707536561706f727460475260606020f35b5f6109e1611ab1565b600143034060801c335f525f60205260405f208054820192508281555050336001600160a01b03167f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f82604051610a3a91815260200190565b60405180910390a290565b5f816001600160a01b0316600a5a610a5d9190615773565b6040515f8181818686fa925050503d805f8114610a95576040519150601f19603f3d011682016040523d82523d5f602084013e610a9a565b606091505b50909392505050565b5f813563ffffffff168201610402565b5f610ac661016060408051918201905290565b9050610ad58282610140611b28565b610af2610aeb610ae6846040610cdc565b611b31565b6040830152565b5f610b06610b01846060610cdc565b611b84565b9050610b13816060840152565b610b26610b1e825190565b610140840152565b50919050565b0190565b610140820151604080519084015180515f939284927f000000000000000000000000000000000000000000000000000000000000000092602090910190845b81811015610b9c578251601f1901805186825260c082208652905260209384019390920191600101610b6f565b508060051b6040512094505050505f7f0000000000000000000000000000000000000000000000000000000000000000915060405160206060890151015f5b86811015610c08578151601f1901805186825260e082208552905260209283019290910190600101610bdb565b505060408051600587901b9020601f198a0180517f00000000000000000000000000000000000000000000000000000000000000008252928b01805197815260608c018051938152610140909c019a8b5261018082209390915295909552939097525050925250919050565b5f8063ffffffff8335169050600581901b610c986020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610cca610cc4610cbf8484610cdc565b611240565b82850152565b602001610ca7565b5050505050919050565b5f6104f163ffffffff610cf46104ed8686610b2c8516565b16840190565b5f8063ffffffff8335169050600581901b610d1e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610d4a610cc4610d458484610cdc565b611bc7565b602001610d2d565b5f8063ffffffff8335169050600581901b610d766020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610da2610cc4610d9d8484610cdc565b611c09565b602001610d85565b60608036155f80610dbe8c8c85898b611c4c565b91509150610dd18c8b8b8b8b8787612029565b9450945050505097509795505050505050565b5f8063ffffffff8335169050600581901b610e086020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610e34610cc4610e2f8484610cdc565b61215b565b602001610e17565b5f610e45611ab1565b5f805f80855190505f5b81811015610f50575f878281518110610e6a57610e6a615792565b60209081029190910101518051909150600481608001516004811115610e9257610e92615329565b03610e9e575050610f48565b80519450610eab8161219e565b5f8181526001602052604081209850909650610ecd90879089903615156121d7565b50865460ff16610f455780610140015181606001515114610ef057610ef0612265565b610eff85878460200151612272565b865460ff191660011787556040517ff280791efe782edcf06ce15c8f4dff17601db3b88eb3805a0db7d77faf757f0490610f3c9088908490615895565b60405180910390a15b50505b600101610e4f565b5060019695505050505050565b5f8063ffffffff8335169050600581901b610f816020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610fad610cc4610fa88484610cdc565b61104b565b602001610f90565b5f8063ffffffff8335169050600581901b610fd96020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257611005610cc46110008484610cdc565b61230e565b602001610fe8565b60605f36151590505f806110258888858b5189611c4c565b9150915061103282612341565b61103f8887848885612380565b98975050505050505050565b5f61105e61020060408051918201905290565b60a0810180825290915061107a61107484610aa3565b82612453565b61108660016020840152565b61109260016040840152565b6110af6110a86110a3856020610cdc565b612489565b6060840152565b610b266110ba6124b1565b6080840152565b835160808101515f91906110e860048260048111156110e2576110e2615329565b146124cb565b5f80806110f78a36151561256c565b60408051600180825281830190925293965091945092505f9190816020015b61111e615027565b8152602001906001900390816111165790505090508a815f8151811061114657611146615792565b602002602001018190525061115b818b612764565b6111678684848b6128dd565b6040805160018082528183019092525f91602080830190803683375091925050503615156004878181111561119e5761119e615329565b146111c1576111af8d83885f6129dd565b6111bb86868684612a2f565b506111d3565b6111d0888e6080015183612b33565b95505b6111de888c8c612c03565b85825f815181106111f1576111f1615792565b6020026020010181815250506112088d8388612d26565b61122586895f01518a602001518d8c604001518d60600151612df3565b61122d611a5e565b5060019c9b505050505050505050505050565b5f61125361020060408051918201905290565b905061126760208381019083016040611b28565b60a0810180825261127a61107484610aa3565b61128b6110a86110a3856060610cdc565b610b266110ba6110a3856080610cdc565b60605f805f6112a9612e58565b90505f7f0000000000000000000000000000000000000000000000000000000000000000905060605f5281602052806040526303312e3660635260a05ff35b5f6112f1611ab1565b5f8083815b81811015611408573687878381811061131157611311615792565b90506020028101906113239190615977565b90505f61133360208301836154f5565b90505f61134660408401602085016154f5565b90505f61135960a0850160808601615996565b905081331483331417156004821417871796505f61138d61138261137a8790565b610ab36104da565b866101400135610b30565b5f8181526001602052604090819020805461ffff19166101001781559051909a509091506001600160a01b0380851691908616907f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d906113f09085815260200190565b60405180910390a385600101955050505050506112f6565b5050801561141857611418612f35565b506001949350505050565b63a61be9f05f52806020526024601cfd5b5f8061143f5f6124cb565b611447612f42565b426101643511154261014435111715611475576321ccfeb75f5261014435602052610164356040526044601cfd5b610204356102643510156114905763466aa6165f526004601cfd5b7f0000000000000000000000000000000000000000000000000000000000000000608081905260a08790526060602460c037604060646101203760e060802061016052610264356102043560051b6102a0016001820181526020810190508881526080602460208301376101608860a0528760c0525f60e0525f6102043593505f5b84811015611566578060400261028401602081610100376040816101203760208101358317925060208401935060e0608020845260a0850194508b85528a6020860152604081606087013750600101611512565b6001850160051b610160206060526102643594505b848110156115b6578060400261028401925060a0840193508a845289602085015260408360608601376020830135919091179060010161157b565b506001600160a01b038111156115d3576339f3e3fd5f526004601cfd5b50505050505f7f00000000000000000000000000000000000000000000000000000000000000009050806080528360a052606060c460c0376020610104610120375060c06080205f9081526020812060e05260843590611647826001600160a01b03165f9081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000060808190529091506040608460a03760605161010052896101205260a061014461014037816101e05261018060802094505050506102043560051b61018001828152336020820152608060408201526101206060820152600160808201528360a0820152606060c460c083013760a061026435026101e00160a4356084357f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318385a35f60605260608101820160405250505f61172383612f8d565b905061172f8389612fde565b7101000000000000000000000000000001000182559150509550959350505050565b60c43560843560e4356101043584156117b9575f6040519050632671a55160e11b815260206004820152600160248201528660448201528460648201528360848201523360a48201528260c48201528160e48201526117b38682610104613033565b50611801565b60028660058111156117cd576117cd615329565b036117f457806001146117e3576117e3816130ea565b6117ef848433856130fb565b611801565b61180184843385856131b0565b505050505050565b346064356084356102643560061b5f80805b8381101561185a5761028481013592506102a481013591508683111561184357611843613287565b82870396506118528284613294565b60400161181b565b508585111561186b5761186b613287565b6118758486613294565b848611156118015761180133868803613294565b61189381836132ca565b816118ba57826001146118a9576118a9836130ea565b6118b5878787876130fb565b6118cb565b6118cb828260028a8a8a8a8a6132e8565b50505050505050565b6118dd83613367565b6118e781836132ca565b816118f9576118b587878787876131b0565b6118cb828260038a8a8a8a8a6132e8565b5f805f805f861561192f57505060843592503391505060c4356101043560e435611944565b50339350506084359150506024356064356044355b801561195257611952613379565b50600586901b6101e403356102643560061b5f80805b838110156119a95761028481013592506102a481013591508a156119935761199083876159b4565b95505b6119a1878a8486898f613386565b604001611968565b506119b886898988888e613386565b50505050505050505050565b60408151146119d05750565b5f6119dc826020015190565b90506103dc81836133bb565b611a048260a4355b331415600182116004909210919091161690565b15611a5957805f611a13825190565b9050608081901c63ffffffff8216611a3484826317b1f94282526001905250565b601c840163fb5014fc6060529350611a5060a4358886856133df565b5f6060526118cb565b505050565b7f00000000000000000000000000000000000000000000000000000000000000008015611a8f575f63929eee145d50565b63929eee145480611aa5575f63929eee145d5050565b50600163929eee145550565b7f00000000000000000000000000000000000000000000000000000000000000008015611af05763929eee145c156103b057637fa8a9875f526004601cfd5b63929eee145480611b135763929eee145c156103dc57637fa8a9875f526004601cfd5b600181146103dc57637fa8a9875f526004601cfd5b80838337505050565b5f63ffffffff8235166040519150808252602082018160051b81018060a084026020870183378293505b81841015611b745780845260209093019260a001611b5b565b60405250919392505050565b9052565b5f63ffffffff8235166040519150808252602082018160051b81018060c084026020870183378293505b81841015611b745780845260209093019260c001611bae565b5f611bd960a060408051918201905290565b9050611be782826080611b28565b611c04611bfd611bf8846080610cdc565b613427565b6080830152565b919050565b5f63ffffffff8235166040519150808252602082018160051b8101808360061b6020870183378293505b81841015611b7457808452602090930192604001611c33565b60605f611c5960016124cb565b86515f90600160e61b82351690806001600160401b03811115611c7e57611c7e61574b565b604051908082528060200260200182016040528015611ca7578160200160208202803683370190505b50945060010160051b91505f60205b83811015611ea8575f611ccc8c83613cce6104da565b90505f805f611cdb848e61256c565b6001600160781b0382166020880152919450925090505f829003611d025750505050611ea0565b6001600160781b0381166040808601919091528a8601849052845160a081015160c0820151608083015192909301518051600184119d909d179c600490931099509092915f5b81811015611dea575f838281518110611d6357611d63615792565b602002602001015190508b8151108d179c505f611d858989846080015161345e565b90508160800151826060015103611da25760608201819052611db7565b611db18989846060015161345e565b60608301525b5f611dd08360600151838a8a611dcb361590565b61349a565b606084018190526080909301929092525050600101611d48565b5087516060015180515f5b81811015611e94575f838281518110611e1057611e10615792565b602002602001015190505f611e2a8b8b846080015161345e565b90508160800151826060015103611e475760608201819052611e5c565b611e568b8b846060015161345e565b60608301525b5f611e718360600151838c8c611dcb36151590565b6060840181905260a0840180516080909501949094529092525050600101611df5565b50505050505050505050505b602001611cb6565b50506001600160e61b018103611ec057611ec06134ed565b50611ecb8888612764565b5f8060205b8381101561200e578581015192508215612006575f611ef28c83613cce6104da565b9050885f03611f0d575f878301819052602090910152612006565b60048151608001516004811115611f2657611f26615329565b14611fa957611f3f8188866001600587901c038e6134fa565b611f55575f878301819052602090910152612006565b602080820151604083015183516080810151930151611f8e9388936001600160781b039081169316913314156001909111168e17612a2f565b611fa4575f878301819052602090910152612006565b611fd4565b611fbb815f015182608001518c612b33565b878301819052935083611fd4575f602090910152612006565b886001900398505f815f01519050611fff85825f015183602001518c85604001518660600151612df3565b6001935050505b602001611ed0565b508061201c5761201c613555565b5050509550959350505050565b85518551606091829161203c81836159c7565b6001600160401b038111156120535761205361574b565b60405190808252806020026020018201604052801561208c57816020015b61207961505a565b8152602001906001900390816120715790505b5092505f5b828110156120e4576120bf8c5f8d84815181106120b0576120b0615792565b60200260200101518c8c613562565b8482815181106120d1576120d1615792565b6020908102919091010152600101612091565b505f5b8181101561213d576121168c60018c848151811061210757612107615792565b60200260200101518c5f613562565b848483018151811061212a5761212a615792565b60209081029190910101526001016120e7565b5061214b8b84888a896135b1565b9350505097509795505050505050565b5f61216c6040808051918201905290565b905061218661218261217d84610aa3565b61389a565b8252565b611c046121976110a3846020610cdc565b6020830152565b5f6121b38260600151518361014001516138b9565b81516001600160a01b03165f90815260208190526040902054610402908390610b30565b82545f90610100900460ff16156121fe5781156121f7576121f7856138c9565b505f610622565b83546201000090046001600160781b0316801561225957831561222957612224866138da565b612259565b8454600160881b90046001600160781b0316811061225957821561225057612250866138eb565b5f915050610622565b50600195945050505050565b632165628a5f526004601cfd5b33831480156122815750505050565b5f61228a612e58565b61190160f01b5f9081526002828152602287815260428320908390528651939450929190601f601d840116106102e260621984011016156122f4576122cf86886138fc565b61190160f01b5f908152600286905260228281526042822091905290975090506122f7565b50815b612304888285858a613992565b5050505050505050565b5f61231f6040808051918201905290565b9050612330612182610d9d84610aa3565b611c04612197610d9d846020610cdc565b80518060051b6040019050602082038051602082527f4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e78383a190525050565b8351606090806001600160401b0381111561239d5761239d61574b565b6040519080825280602002602001820160405280156123d657816020015b6123c361505a565b8152602001906001900390816123bb5790505b5091505f5b81811015612439575f8782815181106123f6576123f6615792565b6020026020010151905061241389825f0151836020015185613adb565b84838151811061242557612425615792565b6020908102919091010152506001016123db565b5061244787838787876135b1565b50505b95945050505050565b6124608282610160611b28565b612471610aeb610ae6846040610cdc565b6103dc612482610b01846060610cdc565b6060830152565b6040518135601f0163ffffffe01660200180838337913563ffffffff16815290810160405290565b5f6124c3602060408051918201905290565b5f8152905090565b7f000000000000000000000000000000000000000000000000000000000000000080156125185763929eee145c1561250a57637fa8a9875f526004601cfd5b8160010163929eee145d5050565b63929eee14548061254a5763929eee145c1561253b57637fa8a9875f526004601cfd5b8260010163929eee145d505050565b6001811461255f57637fa8a9875f526004601cfd5b505060020163929eee1455565b5f805f80855f015190506125898160a001518260c0015187613c80565b61259c57505f925082915081905061275d565b602086015160408701516001600160781b0391821694501691505f6004826080015160048111156125cf576125cf615329565b036125fc57600183850218905080156125ea576125ea613ca3565b506001935083925082915061275d9050565b50818311831517801561261157612611613ca3565b608082015160011615848411161561262b5761262b613cb0565b6126348261219e565b5f81815260016020526040812091965061265290879083908a6121d7565b61266557505f935083925061275d915050565b805460ff1661268057612680835f0151878a60600151612272565b8054608881901c8061269457869150612757565b6001600160781b038260101c169150600186036126b8578181039650809550612757565b8086036126d357908601858103868211029096039590612757565b80860296810291909502810186810387821102918290039695919003906001600160781b0386111561275757612717565b5f5b8215610b2657908290069190612706565b61272a6127248784612704565b88612704565b8015019687900496909504946001600160781b0386111561275757634e487b715f5260116020526024601cfd5b50505050505b9250925092565b805182515f5b82811015612853575f84828151811061278557612785615792565b602002602001015190505f815f015190508381106127aa576127aa8260200151613cbd565b5f8782815181106127bd576127bd615792565b6020026020010151905080602001516001600160781b03165f036127e35750505061284b565b80516040808201519085015163bfb3f8ce5f8760200151600181111561280b5761280b615329565b14612827575f61281c856060613cce565b9350636088d7de9150505b8251821061283857805f526004601cfd5b612843838389613cd9565b505050505050505b60010161276a565b505f5b818110156128d6575f85828151811061287157612871615792565b6020026020010151905080602001516001600160781b03165f0361289557506128ce565b8051608081015160608201516128b29085908363a8930e9a613d8c565b6128ca8483604001518363d69293326104da613d8c90565b5050505b600101612856565b5050505050565b60a084015160c08501516040860151515f805b8281101561295a575f8960400151828151811061290f5761290f615792565b602002602001015190505f815f01519050801584179350505f612946826060015183608001518c8c8b8b612941361590565b613df3565b6060830152506080018690526001016128f0565b5060808801516004811082168015612974576129746134ed565b505050506060860151515f5b81811015612304575f8860600151828151811061299f5761299f615792565b602002602001015190505f6129c4826060015183608001518b8b8a8a61294136151590565b60608301525060a0810151608090910152600101612980565b8351608081015160208201513314156001821160049092109190911616156128d6575f80612a12858489608001518988613e2e565b63fb5014fc6060529092509050611a5083602001518684846133df565b5f848152600160205260408120805482908290608881901c80612a5457889150612adc565b6001600160781b038260101c169150808803612a7857908801878111935090612adc565b97880297808802979190910288018781119350906001600160781b038083119089111715612adc57612aaa8883612704565b8015019788900497909104906001600160781b038083119089111715612adc57634e487b715f5260116020526024601cfd5b508215612b15578515612b09576040516310fda3e160e01b8152600481018a905260240160405180910390fd5b5f945050505050610622565b8660881b8160101b1760011782556001945050505050949350505050565b5f83610140015184606001515114612b4d57612b4d612265565b83515f8080612b5c8888613fac565b915091505f8082845f885af16001600160a01b0385165f908152600260205260409020805460018101909155606086901b189550925082612bbb578515612bae57612ba5614056565b612bae8561409d565b505f93506104f192505050565b505050505f805f612bd8876040015188606001516104da6140ae90565b925092509250825f14612bee57612bee8461409d565b60408701919091526060860152509392505050565b6040805160208082528183019092525f916020820181803683375050506040850151519091505f5b81811015612c7b575f86604001518281518110612c4a57612c4a615792565b60200260200101519050846080820152612c7281885f0151896101200151876104da61432790565b50600101612c2b565b50506060840151515f90815b81811015612d09575f87606001518281518110612ca657612ca6615792565b602002602001015190505f6005811115612cc257612cc2615329565b81516005811115612cd557612cd5615329565b03612cf1574793508381606001511115612cf157612cf1613287565b612d00813389886143276104da565b50600101612c87565b5050612d14826119c4565b504780156128d6576128d63382613294565b8251608081015160208201515f92839283928392916004811060019091111633909114151615612d8857612d69612d6361010083015190565b5190565b8861441c565b9093509150612d7a60208201612d5f565b945063fb5014fc9350612dd4565b600481608001516004811115612da057612da0615329565b0361230457805194505f8560601b9050612dc187838b608001518b8561445d565b639397928596509094509250612dd49050565b612dde6060859052565b612dea858785856133df565b5f606052612304565b60608290506060829050856001600160a01b0316876001600160a01b03167f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318a888686604051612e469493929190615a13565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614612f10575060408051608080517f00000000000000000000000000000000000000000000000000000000000000005f9081527f00000000000000000000000000000000000000000000000000000000000000006020527f0000000000000000000000000000000000000000000000000000000000000000855246606090815230845260a08220949095529093529190915290565b507f000000000000000000000000000000000000000000000000000000000000000090565b63fed398fc5f526004601cfd5b600435602014610224356102401416610244356102606102643560061b01141660186101243510600160a01b60843560a4351760c4356024351717101616806103b0576103b0614528565b5f8181526001602081905260409091209060843590612fb290849084903615156121d7565b50815460ff16610b2657610b268184612fd9602463ffffffff6102443516016124896104da565b612272565b5f612feb8260a4356119f0565b15610402575f805f612ffc86614535565b63fb5014fc6060529194509250905061301c60a43587601c8601856133df565b5f60605260209190910160801b1781529392505050565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff60a01b175f90815260208690527f000000000000000000000000000000000000000000000000000000000000000083526055600b20919092526001600160a01b031690505f805f805260205f85875f875af191505f519050816130c8576130bf614056565b6130c8836145ed565b6001600160e01b03198116632671a55160e11b146118015761180186846145fe565b6369f958275f52806020526024601cfd5b833b61311257635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af1806131a2573d1561318057601f3d0160051c8260051c8160030281831115613169578183036003028280028480020360091c01015b5a60208201101561317c573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b6131c757635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af18061326c573d1561324b57601f3d0160051c8560051c8160030281831115613234578183036003028280028480020360091c01015b5a602082011015613247573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b638ffff9805f526004601cfd5b61329d81613367565b5f805f805f85875af1905080611a59576132b5614056565b63bc806b965f5282602052816040526044601cfd5b5f6132d6836020015190565b9050818114611a5957611a59836119c4565b5f60208851036133225750604080885260208089018a9052632671a55160e11b918901919091526044880152600160648801819052613331565b50606487018051600101908190525b603c60c082028901038781528660208201528560408201528460608201528360808201528260a082015250505050505050505050565b806103b0576391b3e5145f526004601cfd5b636ab37ce75f526004601cfd5b61338f83613367565b61339981836132ca565b816133aa576117ef86868686614613565b611801828260018989895f8a6132e8565b6064810151604082019060c0026044016133d6848383613033565b50506020905250565b5f806001600160e01b03198451165f805260205f85875f8b5af15f51909350149050816134185761340e614056565b846080526024607cfd5b8061180157846080526024607cfd5b5f8063ffffffff83351690506001810160051b61344a8160408051918201905290565b9250613457848483611b28565b5050919050565b5f82840361346d5750806104f1565b82848309156134835763c63cf0895f526004601cfd5b5f61348e8584615aaf565b93909304949350505050565b5f8486146134e357838303428590038082035f6134b7838a615aaf565b6134c1838c615aaf565b6134cb91906159c7565b9050858487830304018115150294505050505061244a565b5092949350505050565b6312d3f5a35f526004601cfd5b8451608081015160208201515f92916004811060019091111633909114151615610f50575f8061353187848b608001518b8a613e2e565b9150915061354b836020015188848463fb5014fc8a614707565b935050505061244a565b63d5da9a1b5f526004601cfd5b61356a61505a565b83515f0361357b5761357b85614774565b5f85600181111561358e5761358e615329565b036135a45761359f86858385614785565b61244a565b61244a86858333876148f5565b84516060905f816001600160401b038111156135cf576135cf61574b565b6040519080825280602002602001820160405280156135f8578160200160208202803683370190505b506040805160208082528183019092529192505f9190602082018180368337505089519192505060010160051b60205b81811015613687575f61363e8b83613cce6104da565b8051606081015191925090801561367c57478111825115161561366857638ffff9805f526004601cfd5b61367c828460200151856040015189614327565b505050602001613628565b50505f5b838110156137f3575f8a82815181106136a6576136a6615792565b6020026020010151905080602001516001600160781b03165f036136ed575f8483815181106136d7576136d7615792565b91151560209283029190910190910152506137eb565b600184838151811061370157613701615792565b911515602092830291909101909101528051604081015180515f5b81811015613786575f83828151811061373757613737615792565b6020026020010151905080606001515f1461377357608081018051908e9052855161012087015161376d9184918c6143276104da565b60808201525b608081015160609091015260010161371c565b505050606081015180515f5b818110156137e5575f8382815181106137ad576137ad615792565b602002602001015190505f81606001519050805f146137d1576137d1888483614a2c565b5060a0810151606090910152600101613792565b50505050505b60010161368b565b506137fd816119c4565b47801561380e5761380e3382613294565b8515613884575f5b848110156138825783818151811061383057613830615792565b60200260200101511561387a5761387a8b828151811061385257613852615792565b60200260200101518a8b848151811061386d5761386d615792565b6020026020010151612d26565b600101613816565b505b61388c611a5e565b509098975050505050505050565b5f6138ad61016060408051918201905290565b9050611c048282612453565b808210156103dc576103dc614a45565b631a5155745f52806020526024601cfd5b63ee9e0e635f52806020526024601cfd5b6310fda3e15f52806020526024601cfd5b5f805f84516001811660410380820360051c9250808752806020018701915050805160e81c6003820191506001811660051b868152825160208218525060015b838110156139685760405f2082821c60051b60209081169182529384018051919094185260010161393c565b50505060405f2091505f61397b82614a52565b5f9081526020939093525050604090209392505050565b5f805f528151602083038051826041035f600182116139f557604087015160608801515f1a83156139d657601b8260ff1c0190506001600160ff1b03821660408a01525b88528a855260205f60808760015afa508385528588526040880152505f515b8a148a1515169450849050613abe57858552604082526044850380516040870351630b135d3f60e11b835289604089035260205f60648b01858f5afa96508615613ab257630b135d3f60e11b5f5114613ab2578b3b15613a5c57634f7fb80d5f526004601cfd5b6001866041031115613a7557638baa579f5f526004601cfd5b64010100000060608901515f1a1a15604187141615613aa557631f003d0a5f5260608801515f1a6020526024601cfd5b63815e1d645f526004601cfd5b8385529152603f198601525b5050508061180157613ace614056565b634f7fb80d5f526004601cfd5b613ae361505a565b8251158451151715613afc576398e9db6e5f526004601cfd5b613b0461505a565b613b118685835f806148f5565b805160608101515f03613b2657509050610622565b613b368787858460800151614785565b82516040828101519082015160208085015190840151855185511891181791181715613b6d5763bced929d5f52846020526024601cfd5b806060015182606001511115613bf4575f865f81518110613b9057613b90615792565b60200260200101519050816060015183606001510389825f015181518110613bba57613bba615792565b60200260200101515f015160600151826020015181518110613bde57613bde615792565b6020026020010151606001818152505050613c75565b5f875f81518110613c0757613c07615792565b60200260200101519050826060015182606001510389825f015181518110613c3157613c31615792565b60200260200101515f015160400151826020015181518110613c5557613c55615792565b602002602001015160600181815250508260600151826060018181525050505b505050949350505050565b428084111590831116818015613c94575080155b156104f1576104f18484614e61565b635a052b325f526004601cfd5b63a11b63ff5f526004601cfd5b63133c37c65f52806020526024601cfd5b5f6104f18284015190565b5f838381518110613cec57613cec615792565b602002602001015190505f815f01519050613d078160031090565b613d1357613d13614e76565b60408201518015613d3657613d318460600151828660800151614e83565b613d49565b60808401515115613d4957613d49614ecd565b6004821460030383816005811115613d6357613d63615329565b90816005811115613d7657613d76615329565b9052505050606090920151604090910152505050565b82515f5b81811015611801575f858281518110613dab57613dab615792565b60209081029190910101518051604082015191925090600382116004881415821515171615613de557855f5288602052836040526044601cfd5b505050806001019050613d90565b5f868803613e0d57613e0686868961345e565b90506107df565b6107dc613e1b87878b61345e565b613e2688888b61345e565b86868661349a565b5f805f613e39614eda565b6301e4d72a815260208082015260408101898152336060830152601c820194509091508751604082015287613e79613e7260a083015190565b60e0840152565b613e8f613e8760c083015190565b610100840152565b613ea5613e9d60e083015190565b610120840152565b610140613eb3816060850152565b5f613ebf604084015190565b90505f613ece82848701614ee4565b928301929050613edf836080870152565b5f613eeb606086015190565b90505f613efa82868901614f4a565b948501949050613f0b8560a0890152565b5f613f188e878a01614faf565b959095019450613f298560c0890152565b8685015f613f378e83614fce565b602497019687019a50613f539050613f4e8c8c0190565b614ffe565b8060408b901b60808b901b17178f610100018181525050613f7d8c82611b8090919063ffffffff16565b60058c8e51613f8c91906159b4565b613f97911b8b6159b4565b99505050505050505050509550959350505050565b5f8083613fb7614eda565b639891976581523360208201908152608060408301819052601c9092019450905f613fe3604085015190565b90505f613ff282848601614ee4565b928301929050614003836040860152565b5f61400f606087015190565b90505f61401e82868801614ee4565b94850194905061402f856060880152565b895f61403d82898901614faf565b9a9d96909a016004019b50949950505050505050505050565b3d1561409b57601f3d0160051c60405160051c8160030281831115614088578183036003028280028480020360091c01015b5a602082011015611a59573d5f803e3d5ffd5b565b63939792855f52806020526024601cfd5b60603d105f8080808080866141205760405f803e5f51935060205192503d60208501113d60208501118082179850505086614120576020845f3e5f51915060208360203e60205190508160071b60208501018160a0026020850101803d10823d101761ffff8486171117985050505f80525b86614152575f8061413584602088018d61415b565b9250975061414783602087018c61423b565b929092179850909550505b5050505061275d565b5f806040519150825160c08602602001830160405285835260208660010160051b8085018360010160051b8701614199858b81811090829003020190565b60010160051b8a861196505b808510156141f957828589015260808a843e6060830151955085608084015260608201518681116141d685856142e2565b17881797505060808a01995060a08301925060a0820191506020850194506141a5565b50505b8183101561422f578083870152608088823e6060810151608082015260808801975060a0810190506020830192506141fc565b50505050935093915050565b604051815180851190808603818710028101602060e08202850181016040528185526001928301600590811b87019390920190911b908185015b8282101561422f57808287015260a088823e60206060890160a083013e606081015160608501516142b26080840151608088015180159114171590565b818311176142c084886142e2565b60a09b909b019a179690961795505060c0938401936020929092019101614275565b5f81516040830151801560038311161561430457506040840151600119909101905b604085015181148551831460208701516020870151141616159250505092915050565b5f8451600581111561433b5761433b615329565b0361437857604084015160208501516001600160a01b0316171561436157614361613379565b61437384608001518560600151613294565b614416565b60018451600581111561438d5761438d615329565b036143be576040840151156143a4576143a4613379565b614373846020015184866080015187606001518686613386565b6002845160058111156143d3576143d3615329565b036143f7576143738460200151848660800151876040015188606001518787611889565b61441684602001518486608001518760400151886060015187876118d4565b50505050565b608082901c63ffffffff604084901c811690808516906144449084906317b1f94290611b8016565b601c830192506144548482614fce565b50509250929050565b5f80614467614eda565b63f4dd92ce815287841860a0820152601c8101925060200160a0808252875f614491604083015190565b90505f6144a082858701614ee4565b9384019390506144b1846020870152565b5f6144bd606085015190565b90505f6144cc82878901614f4a565b9586019590506144dd866040890152565b5f6144ea8d888a01614faf565b9687019690506144fb8760608a0152565b5f6145088d898b01614fce565b905080880197508760040199505050505050505050509550959350505050565b6339f3e3fd5f526004601cfd5b6301e4d72a6102043560051b6080019081525f808260208082015260408101858152336060830152601c919091019061456f608435610aeb565b61458061014460e083016060611b28565b61014061458e816060840152565b61459c60a082016080840152565b61016060a06102643581029290920101906145b8908290840152565b6145c25f82840152565b6020016145d08160c0840152565b5f9181019182526020820196909652939560449095019492505050565b63d13d53d45f52806020526024601cfd5b631cf99b265f5281602052806040526044601cfd5b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166146f85780873b1515166146f857806146e757816146ca573d156146a957601f3d0160051c8360051c8160030281831115614692578183036003028280028480020360091c01015b5a6020820110156146a5573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b5f805f6001600160e01b03198751165f805260205f888a5f8e5af15f5190935014905081614753578361473e575f925050506106d7565b614746614056565b845f52876020526024601cfd5b8061476557845f52876020526024601cfd5b50600198975050505050505050565b63375c24c15f52806020526024601cfd5b5f805f85865160051b87015b808210156148a2576020820191508851825151106147b1576147b16148d6565b81515160051b60208a01015180516020845101515f6040830151602085015115815184101517156147e6575050505050614791565b8260051b60208201015191505060608101935083518901915083511589831060011b17881797508198505f84528a51935086156001811461484f5760608220881860408d01516101208601511860208e015186511817171561484a5761484a6148d6565b614898565b8151855260208201516020860152604082015160408601528a6080860152835160208d015261012084015160408d015260608520975060208d0192508683181561489857865183525b5050505050614791565b5050508160608551015280156148cf57600181036148c7576391b3e5145f526004601cfd5b6148cf6148e3565b5050614416565b637fda72795f526004601cfd5b634e487b715f5260116020526024601cfd5b5f805f86875160051b88015b808210156149f7576020820191508151518a518110614922576149226148d6565b8060051b60208c01015190506020835101515f606083510151602084015115815184101517156149555750505050614901565b8260051b60208201015191505060608101925082518801915082511588831060011b17871796508197505f83528a5192508515600181146149a75760a0822087146149a2576149a26148d6565b6149ee565b815184526020820151602085015260408201516040850152608082015160808501528a60208d01528960408d015260a08220965060208d019250858318156149ee57855183525b50505050614901565b50508551606001839052508015614a255760018103614a1d576391b3e5145f526004601cfd5b614a256148e3565b50506128d6565b63a5f542085f528260205281604052806060526064601cfd5b63466aa6165f526004601cfd5b5f614e58565b5f6009821015614bb1576005821015614b0e576003821015614ac1577f832c58a5b611aadcfa6a082ac9d04bace53d8278387f10040347b7e98eb5b30260018314027fbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde3018610402565b7ff3e8417a785f980bdaf134fa0274a6bf891eeb8195cd94b09d2aa651046e28bc60038314027fa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af118610402565b6007821015614b64577f25d02425402d882d211a7ab774c0ed6eca048c4d03d9af40132475744753b2a360058314027f1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b5518610402565b7fb58d772fb09b426b9dece637f61ca9065f2b994f1464b51e9207f55f7c8f594860078314027f7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc1418610402565b6011821015614d0957600d821015614c6657600b821015614c19577f6f0ec38c21f6f583ab7f3c5413c773ffd5344c34fde1d390958e438bf667448f60098314027fd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da0518610402565b7f32f4e7485d6485f9f6c255929b9905c62ba919758bbe231f231eaeecf33d810c600b8314027fbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f18610402565b600f821015614cbc577f8df51df98847160517f5b1186b4bc3f418d98b8a7f17f1292f392d79d600d79e600d8314027f6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a85259018610402565b7fcc4886e37eedd9aacd6c1c2c9247197a621a71282e87a7cbc673f3736d9aa141600f8314027f1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde818610402565b6015821015614db5576013821015614d68577f2d7a3ed6dab270fdb8e054b2ad525f0ce2a8b89cc76c17f0965434740f673a5560118314027fc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d8587718610402565b7f54b3212a178782f104e0d514b41a9a5c4ca9c980bf6597c3cecbf280917e202a60138314027f5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e6435001718610402565b6017821015614e0b577fbb40bf8cea3a5a716e2b6eb08bbdac8ec159f82f380783db3c56904f15a43d0460158314027f3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d18610402565b7f403be09941a31d05cfc2f896505811353d45d38743288b016630cce39435476a60178314027f1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c18610402565b61040282614a58565b6321ccfeb75f5281602052806040526044601cfd5b6394eb6af65f526004601cfd5b5f835f5260205f2060208301835160051b81015b80821015614ebe57815180841160051b93845260209384185260405f209290910190614e97565b50508314905080614416576144165b6309bde3395f526004601cfd5b5f61041260405190565b5f825180835260208401602084018260051b82015b80831015614f375782518051835260208101516020840152604081015160408401526060810151606084015250602083019250608082019150614ef9565b5050508060071b60200191505092915050565b5f80614f54845190565b8084529050602084810190600583901b860181019085015b82821115614f9c575f614f7e84615008565b9050614f8c818360a0615011565b506020929092019160a001614f6c565b60a0840260200194505050505092915050565b5f63ffffffe0603f614fbf855190565b01169050610402838383615011565b5f80614fd8845190565b8084529050600581901b614ff3602086810190860183615011565b602001949350505050565b6103b06040829052565b5f610402825190565b8082828560045afa80153d151715614416575f80fd5b6040518060a0016040528061503a61509c565b81525f602082018190526040820152606080820181905260809091015290565b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e083018290528252602082018190529181019190915290565b6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020015f60048111156150e6576150e6615329565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b5f60208284031215615125575f80fd5b81356001600160401b0381111561513a575f80fd5b820161024081850312156104f1575f80fd5b5f81518084525f5b8181101561517057602081850181015186830182015201615154565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6104f1602083018461514c565b5f602082840312156151b1575f80fd5b5035919050565b5f602082840312156151c8575f80fd5b81356001600160401b038111156151dd575f80fd5b820161016081850312156104f1575f80fd5b5f8083601f8401126151ff575f80fd5b5081356001600160401b03811115615215575f80fd5b6020830191508360208260051b850101111561522f575f80fd5b9250929050565b80356001600160a01b0381168114611c04575f80fd5b5f805f805f805f805f805f60e08c8e031215615266575f80fd5b6001600160401b03808d35111561527b575f80fd5b6152888e8e358f016151ef565b909c509a5060208d013581101561529d575f80fd5b6152ad8e60208f01358f016151ef565b909a50985060408d01358110156152c2575f80fd5b6152d28e60408f01358f016151ef565b909850965060608d01358110156152e7575f80fd5b506152f88d60608e01358e016151ef565b909550935060808c0135925061531060a08d01615236565b915060c08c013590509295989b509295989b9093969950565b634e487b7160e01b5f52602160045260245ffd5b60068110611b8057611b80615329565b61535882825161533d565b6020818101516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5f815180845260208085019450602084015f5b838110156153e55781516153b888825161534d565b808401516001600160a01b031660a08901526040015160c088015260e090960195908201906001016153a3565b509495945050505050565b604080825283519082018190525f906020906060840190828701845b8281101561542a57815115158452928401929084019060010161540c565b50505083810360208501526106d78186615390565b5f8060208385031215615450575f80fd5b82356001600160401b03811115615465575f80fd5b615471858286016151ef565b90969095509350505050565b5f805f8060408587031215615490575f80fd5b84356001600160401b03808211156154a6575f80fd5b6154b2888389016151ef565b909650945060208701359150808211156154ca575f80fd5b506154d7878288016151ef565b95989497509550505050565b602081525f6104f16020830184615390565b5f60208284031215615505575f80fd5b6104f182615236565b5f806040838503121561551f575f80fd5b82356001600160401b03811115615534575f80fd5b830160408186031215615545575f80fd5b946020939093013593505050565b5f805f805f60808688031215615567575f80fd5b85356001600160401b038082111561557d575f80fd5b9087019060a0828a031215615590575f80fd5b909550602087013590808211156155a5575f80fd5b506155b2888289016151ef565b909550935050604086013591506155cb60608701615236565b90509295509295909350565b5f805f805f805f8060a0898b0312156155ee575f80fd5b88356001600160401b0380821115615604575f80fd5b6156108c838d016151ef565b909a50985060208b0135915080821115615628575f80fd5b6156348c838d016151ef565b909850965060408b013591508082111561564c575f80fd5b506156598b828c016151ef565b999c989b509699959896976060870135966080013595509350505050565b5f805f805f805f6080888a03121561568d575f80fd5b87356001600160401b03808211156156a3575f80fd5b6156af8b838c016151ef565b909950975060208a01359150808211156156c7575f80fd5b6156d38b838c016151ef565b909750955060408a01359150808211156156eb575f80fd5b506156f88a828b016151ef565b909450925061570b905060608901615236565b905092959891949750929550565b606081525f61572b606083018661514c565b6020830194909452506001600160a01b0391909116604090910152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261578d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156153e55781516157ce88825161533d565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016157b9565b5f815180845260208085019450602084015f5b838110156153e557815161583788825161533d565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c09096019590820190600101615822565b60058110611b8057611b80615329565b828152604060208201526158b56040820183516001600160a01b03169052565b5f60208301516158d060608401826001600160a01b03169052565b5060408301516101608060808501526158ed6101a08501836157a6565b91506060850151603f198584030160a086015261590a838261580f565b925050608085015161591f60c0860182615885565b5060a085015160e085015260c0850151610100818187015260e0870151915061012082818801528188015192506101409150828288015280880151848801525080870151610180870152505050809150509392505050565b5f823561015e1983360301811261598c575f80fd5b9190910192915050565b5f602082840312156159a6575f80fd5b8135600581106104f1575f80fd5b818103818111156104025761040261575f565b808201808211156104025761040261575f565b5f815180845260208085019450602084015f5b838110156153e557615a0087835161534d565b60a09690960195908201906001016159ed565b5f6080808301878452602060018060a01b03808916602087015260406080604088015283895180865260a08901915060208b0195505f5b81811015615a8b578651615a5f84825161533d565b808701518616848801528481015185850152606090810151908401529585019591870191600101615a4a565b50508781036060890152615a9f818a6159da565b9c9b505050505050505050505050565b80820281158282048414176104025761040261575f56fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/SeaportProxyBuyer.json b/artifacts/SeaportProxyBuyer.json new file mode 100644 index 00000000..ce871aaf --- /dev/null +++ b/artifacts/SeaportProxyBuyer.json @@ -0,0 +1,895 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SeaportProxyBuyer", + "sourceName": "contracts/marketplace/SeaportProxyBuyer.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "InvalidForwardedToken", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidZone", + "type": "error" + }, + { + "inputs": [], + "name": "OrderIsNotFulfiled", + "type": "error" + }, + { + "inputs": [], + "name": "RecipientIsZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NAME", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "receiver", + "type": "address" + } + ], + "name": "closeMinter", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct IForwarder.ForwardRequest", + "name": "req", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "internalType": "struct OrderParameters", + "name": "parameters", + "type": "tuple" + }, + { + "internalType": "uint120", + "name": "numerator", + "type": "uint120" + }, + { + "internalType": "uint120", + "name": "denominator", + "type": "uint120" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct AdvancedOrder", + "name": "advancedOrder", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "enum Side", + "name": "side", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "criteriaProof", + "type": "bytes32[]" + } + ], + "internalType": "struct CriteriaResolver[]", + "name": "criteriaResolvers", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "fulfillerConduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "fulfillAdvancedOrder", + "outputs": [ + { + "internalType": "bool", + "name": "fulfilled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ConsiderationInterface", + "name": "seaport", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "isTrustedForwarder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "nonceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + } + ], + "name": "removeMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "receiver", + "type": "address" + } + ], + "name": "rotateMinter", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "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": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct IForwarder.ForwardRequest", + "name": "req", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612e5b80620000ee5f395ff3fe6080604052600436106101db575f3560e01c80638da5cb5b116100fd578063c4d66de811610092578063daea85c511610062578063daea85c51461055e578063e7acab241461057d578063f2fde38b1461059c578063ffa1ad74146105bb575f80fd5b8063c4d66de8146104e1578063d539139314610500578063d547741f14610520578063d9caed121461053f575f80fd5b8063a217fddf116100cd578063a217fddf14610452578063a3f4df7e14610465578063a4247400146104a3578063aa271e1a146104c2575f80fd5b80638da5cb5b146103d957806391d1485414610400578063983b2d561461041f578063986502751461043e575f80fd5b80635c975abb11610173578063715018a611610143578063715018a61461037f57806371e2a6571461039357806381c81d35146103b25780638456cb59146103c5575f80fd5b80635c975abb146103165780635fc1964f1461032e578063634486da1461034d5780636ccbae5f14610360575f80fd5b80633092afd5116101ae5780633092afd51461029c57806336568abe146102bb5780633f4ba83a146102da578063572b6c05146102ee575f80fd5b806301ffc9a7146101df5780631bf7e13e14610213578063248a9ca31461023f5780632f2ff15d1461027b575b5f80fd5b3480156101ea575f80fd5b506101fe6101f9366004611e68565b6105eb565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b5061023261022d366004611e8f565b610621565b60405161020a9190611f71565b34801561024a575f80fd5b5061026d610259366004611f83565b5f90815260fb602052604090206001015490565b60405190815260200161020a565b348015610286575f80fd5b5061029a610295366004611fbe565b6106ea565b005b3480156102a7575f80fd5b5061029a6102b6366004611fec565b610713565b3480156102c6575f80fd5b5061029a6102d5366004611fbe565b610727565b3480156102e5575f80fd5b5061029a6107ba565b3480156102f9575f80fd5b506101fe610308366004611fec565b6001600160a01b0316301490565b348015610321575f80fd5b5061012d5460ff166101fe565b348015610339575f80fd5b5061029a610348366004612073565b6107d4565b61029a61035b366004611fec565b610811565b34801561036b575f80fd5b5061026d61037a366004611f83565b6108d1565b34801561038a575f80fd5b5061029a61092a565b34801561039e575f80fd5b5061029a6103ad366004612073565b61093b565b61029a6103c0366004611fec565b610978565b3480156103d0575f80fd5b5061029a6109f5565b3480156103e4575f80fd5b506097546040516001600160a01b03909116815260200161020a565b34801561040b575f80fd5b506101fe61041a366004611fbe565b610a0d565b34801561042a575f80fd5b5061029a610439366004611fec565b610a37565b348015610449575f80fd5b5061029a610a48565b34801561045d575f80fd5b5061026d5f81565b348015610470575f80fd5b506102326040518060400160405280601381526020017229b2b0b837b93a10283937bc3c90213abcb2b960691b81525081565b3480156104ae575f80fd5b506101fe6104bd366004611e8f565b610a61565b3480156104cd575f80fd5b506101fe6104dc366004611fec565b610ab2565b3480156104ec575f80fd5b5061029a6104fb366004611fec565b610aca565b34801561050b575f80fd5b5061026d5f80516020612e2f83398151915281565b34801561052b575f80fd5b5061029a61053a366004611fbe565b610c21565b34801561054a575f80fd5b5061029a610559366004612113565b610c45565b348015610569575f80fd5b5061029a610578366004611fec565b610cef565b348015610588575f80fd5b506101fe610597366004612151565b610d9c565b3480156105a7575f80fd5b5061029a6105b6366004611fec565b6111dc565b3480156105c6575f80fd5b50610232604051806040016040528060058152602001640302e312e360dc1b81525081565b5f6001600160e01b03198216637965db0b60e01b148061061b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5a9050610632858585610a61565b61064f57604051638baa579f60e01b815260040160405180910390fd5b6106df61065f6020870187611fec565b3060408801358461067360608b018b612203565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f920191909152506111f792505050565b9150505b9392505050565b5f82815260fb6020526040902060010154610704816112d5565b61070e83836112e6565b505050565b61071b61136c565b610724816113e5565b50565b61072f6113fc565b6001600160a01b0316816001600160a01b0316146107ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107b6828261140a565b5050565b6107c261136c565b6107ca61148e565b6107d26114d8565b565b6107dc61136c565b5f5b81518110156107b6576108098282815181106107fc576107fc612245565b60200260200101516113e5565b6001016107de565b61081c6104dc6113fc565b6108385760405162461bcd60e51b81526004016107a390612259565b6001600160a01b03811661088e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b61089781611531565b61089f610a48565b6040516001600160a01b038216903480156108fc02915f818181858888f193505050501580156107b6573d5f803e3d5ffd5b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610923906060016040516020818303038152906040528051906020012090565b5492915050565b61093261136c565b6107d25f611548565b61094361136c565b5f5b81518110156107b65761097082828151811061096357610963612245565b6020026020010151611531565b600101610945565b6109836104dc6113fc565b61099f5760405162461bcd60e51b81526004016107a390612259565b6001600160a01b0381166108975760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b6109fd61136c565b610a05611599565b6107d26115e0565b5f91825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610a3f61136c565b61072481611531565b6107d25f80516020612e2f8339815191526102d56113fc565b5f610aaa610a6e8561228e565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061161f92505050565b949350505050565b5f61061b5f80516020612e2f83398151915283610a0d565b5f54610100900460ff1615808015610ae857505f54600160ff909116105b80610b015750303b158015610b0157505f5460ff166001145b610b645760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a3565b5f805460ff191660011790558015610b85575f805461ff0019166101001790555b61015f80546001600160a01b0319166001600160a01b038416179055610ba961175a565b610bb1611787565b610bb9611787565b610bc1611787565b610bc96117ad565b610bd16117e3565b610bd961181a565b80156107b6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f82815260fb6020526040902060010154610c3b816112d5565b61070e838361140a565b610c4d61136c565b600260335403610c6f5760405162461bcd60e51b81526004016107a39061234a565b600260335560405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce49190612381565b505060016033555050565b610cf761136c565b600260335403610d195760405162461bcd60e51b81526004016107a39061234a565b600260335561015f5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529082169063095ea7b3906044016020604051808303815f875af1158015610d6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d939190612381565b50506001603355565b5f610da86104dc6113fc565b610dc45760405162461bcd60e51b81526004016107a390612259565b600260335403610de65760405162461bcd60e51b81526004016107a39061234a565b6002603355610df3611599565b6001600160a01b038216610e1a576040516311d000e160e31b815260040160405180910390fd5b30610e2587806123a0565b610e36906040810190602001611fec565b6001600160a01b031614610e5d57604051639d3c586b60e01b815260040160405180910390fd5b61015f54604080516101608101909152611135916001600160a01b0316906379df72bd9080610e8c8b806123a0565b610e9a906020810190611fec565b6001600160a01b03168152602001610eb28b806123a0565b610ec3906040810190602001611fec565b6001600160a01b03168152602001610edb8b806123a0565b610ee99060408101906123bf565b808060200260200160405190810160405280939291908181526020015f905b82821015610f3457610f2560a08302860136819003810190612411565b81526020019060010190610f08565b5050509183525050602001610f498b806123a0565b610f5790606081019061248e565b808060200260200160405190810160405280939291908181526020015f905b82821015610fa257610f9360c083028601368190038101906124d2565b81526020019060010190610f76565b5050509183525050602001610fb78b806123a0565b610fc89060a081019060800161256d565b6004811115610fd957610fd9612586565b8152602001610fe88b806123a0565b60a001358152602001610ffb8b806123a0565b60c00135815260200161100e8b806123a0565b60e0013581526020016110218b806123a0565b610100013581526020016110358b806123a0565b6101200135815261015f546020909101906001600160a01b031663f07ec37361105e8d806123a0565b61106c906020810190611fec565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d2919061259a565b8152506040518263ffffffff1660e01b81526004016110f191906126bf565b602060405180830381865afa15801561110c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611130919061259a565b61184d565b61015f546040516339eb2ac960e21b81526001600160a01b039091169063e7acab249061116e9089908990899089908990600401612aac565b6020604051808303815f875af115801561118a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ae9190612381565b9050806111ce57604051636725093760e01b815260040160405180910390fd5b600160335595945050505050565b6111e461136c565b6111ed81611866565b6107245f826118dc565b6060611202856118e6565b5f80876001600160a01b03168661121b8b8a898961194b565b6040516112289190612c82565b5f604051808303815f8787f1925050503d805f8114611262576040519150601f19603f3d011682016040523d82523d5f602084013e611267565b606091505b509092509050611278603f87612ca7565b5a1161128657611286612cc6565b6112c682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061197b565b925050505b9695505050505050565b610724816112e16113fc565b6119b4565b6112f08282610a0d565b6107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113286113fc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113746113fc565b6001600160a01b031661138f6097546001600160a01b031690565b6001600160a01b0316146107d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107a3565b6107245f80516020612e2f83398151915282610c21565b5f611405611a18565b905090565b6114148282610a0d565b156107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff1916905561144a6113fc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61012d5460ff166107d25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107a3565b6114e061148e565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115146113fc565b6040516001600160a01b03909116815260200160405180910390a1565b6107245f80516020612e2f833981519152826118dc565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61012d5460ff16156107d25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107a3565b6115e8611599565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115146113fc565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015611663573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611687919061259a565b90505f6117348660600151805190602001208688602001516040516020016116d49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156112cb575085516112cb906001600160a01b03168286611a35565b5f54610100900460ff166117805760405162461bcd60e51b81526004016107a390612cda565b6001603355565b5f54610100900460ff166107d25760405162461bcd60e51b81526004016107a390612cda565b5f54610100900460ff166117d35760405162461bcd60e51b81526004016107a390612cda565b6107d26117de6113fc565b611548565b5f54610100900460ff166118095760405162461bcd60e51b81526004016107a390612cda565b6107d25f6118156113fc565b6118dc565b5f54610100900460ff166118405760405162461bcd60e51b81526004016107a390612cda565b61012d805460ff19169055565b30330361185d5761072481611b70565b610724816118e6565b61186e61136c565b6001600160a01b0381166118d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a3565b61072481611548565b6107b682826112e6565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9060600160405160208183030381529060405280519060200120905061193a8190565b54611946906001612d25565b905550565b606082858560405160200161196293929190612d38565b6040516020818303038152906040529050949350505050565b6060831561198a5750816106e3565b82511561199a5782518084602001fd5b8160405162461bcd60e51b81526004016107a39190611f71565b6119be8282610a0d565b6107b6576119d6816001600160a01b03166014611b9a565b6119e1836020611b9a565b6040516020016119f2929190612d76565b60408051601f198184030181529082905262461bcd60e51b82526107a391600401611f71565b5f303303611a2d575060331936013560601c90565b503390565b90565b5f805f611a428585611d2f565b90925090505f816004811115611a5a57611a5a612586565b148015611a785750856001600160a01b0316826001600160a01b0316145b15611a88576001925050506106e3565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611aaf929190612dea565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611aed9190612c82565b5f60405180830381855afa9150503d805f8114611b25576040519150601f19603f3d011682016040523d82523d5f602084013e611b2a565b606091505b5091509150818015611b3d575080516020145b8015611b6457508051630b135d3f60e11b90611b62908301602090810190840161259a565b145b98975050505050505050565b611b78611d71565b811461072457604051635637b6af60e11b8152600481018290526024016107a3565b60605f611ba8836002612e02565b611bb3906002612d25565b6001600160401b03811115611bca57611bca612007565b6040519080825280601f01601f191660200182016040528015611bf4576020820181803683370190505b509050600360fc1b815f81518110611c0e57611c0e612245565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c3c57611c3c612245565b60200101906001600160f81b03191690815f1a9053505f611c5e846002612e02565b611c69906001612d25565b90505b6001811115611ce0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c9d57611c9d612245565b1a60f81b828281518110611cb357611cb3612245565b60200101906001600160f81b03191690815f1a90535060049490941c93611cd981612e19565b9050611c6c565b5083156106e35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a3565b5f808251604103611d63576020830151604084015160608501515f1a611d5787828585611d83565b94509450505050611d6a565b505f905060025b9250929050565b5f303303611a325750601f1936013590565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611db857505f90506003611e5f565b8460ff16601b14158015611dd057508460ff16601c14155b15611de057505f90506004611e5f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e31573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611e59575f60019250925050611e5f565b91505f90505b94509492505050565b5f60208284031215611e78575f80fd5b81356001600160e01b0319811681146106e3575f80fd5b5f805f60408486031215611ea1575f80fd5b83356001600160401b0380821115611eb7575f80fd5b9085019060808288031215611eca575f80fd5b90935060208501359080821115611edf575f80fd5b818601915086601f830112611ef2575f80fd5b813581811115611f00575f80fd5b876020828501011115611f11575f80fd5b6020830194508093505050509250925092565b5f5b83811015611f3e578181015183820152602001611f26565b50505f910152565b5f8151808452611f5d816020860160208601611f24565b601f01601f19169290920160200192915050565b602081525f6106e36020830184611f46565b5f60208284031215611f93575f80fd5b5035919050565b6001600160a01b0381168114610724575f80fd5b8035611fb981611f9a565b919050565b5f8060408385031215611fcf575f80fd5b823591506020830135611fe181611f9a565b809150509250929050565b5f60208284031215611ffc575f80fd5b81356106e381611f9a565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b038111828210171561203d5761203d612007565b60405290565b604051601f8201601f191681016001600160401b038111828210171561206b5761206b612007565b604052919050565b5f6020808385031215612084575f80fd5b82356001600160401b038082111561209a575f80fd5b818501915085601f8301126120ad575f80fd5b8135818111156120bf576120bf612007565b8060051b91506120d0848301612043565b81815291830184019184810190888411156120e9575f80fd5b938501935b83851015611b64578435925061210383611f9a565b82825293850193908501906120ee565b5f805f60608486031215612125575f80fd5b833561213081611f9a565b9250602084013561214081611f9a565b929592945050506040919091013590565b5f805f805f60808688031215612165575f80fd5b85356001600160401b038082111561217b575f80fd5b9087019060a0828a03121561218e575f80fd5b909550602087013590808211156121a3575f80fd5b818801915088601f8301126121b6575f80fd5b8135818111156121c4575f80fd5b8960208260051b85010111156121d8575f80fd5b602083019650809550505050604086013591506121f760608701611fae565b90509295509295909350565b5f808335601e19843603018112612218575f80fd5b8301803591506001600160401b03821115612231575f80fd5b602001915036819003821315611d6a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b5f6080823603121561229e575f80fd5b6122a661201b565b82356122b181611f9a565b8152602083810135818301526040808501359083015260608401356001600160401b03808211156122e0575f80fd5b9085019036601f8301126122f2575f80fd5b81358181111561230457612304612007565b612316601f8201601f19168501612043565b9150808252368482850101111561232b575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f60208284031215612391575f80fd5b815180151581146106e3575f80fd5b5f823561015e198336030181126123b5575f80fd5b9190910192915050565b5f808335601e198436030181126123d4575f80fd5b8301803591506001600160401b038211156123ed575f80fd5b602001915060a081023603821315611d6a575f80fd5b803560068110611fb9575f80fd5b5f60a08284031215612421575f80fd5b60405160a081018181106001600160401b038211171561244357612443612007565b60405261244f83612403565b8152602083013561245f81611f9a565b806020830152506040830135604082015260608301356060820152608083013560808201528091505092915050565b5f808335601e198436030181126124a3575f80fd5b8301803591506001600160401b038211156124bc575f80fd5b602001915060c081023603821315611d6a575f80fd5b5f60c082840312156124e2575f80fd5b60405160c081018181106001600160401b038211171561250457612504612007565b60405261251083612403565b8152602083013561252081611f9a565b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013561255381611f9a565b60a08201529392505050565b803560058110611fb9575f80fd5b5f6020828403121561257d575f80fd5b6106e38261255f565b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156125aa575f80fd5b5051919050565b600681106125c1576125c1612586565b9052565b5f815180845260208085019450602084015f5b8381101561262e5781516125ed8882516125b1565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016125d8565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561262e5781516126618882516125b1565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c0909601959082019060010161264c565b600581106125c1576125c1612586565b602081526126d96020820183516001600160a01b03169052565b5f60208301516126f460408401826001600160a01b03169052565b5060408301516101608060608501526127116101808501836125c5565b91506060850151601f1985840301608086015261272e8382612639565b925050608085015161274360a08601826126af565b5060a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140818187015280870151838701525050508091505092915050565b5f808335601e198436030181126127ad575f80fd5b83016020810192503590506001600160401b038111156127cb575f80fd5b60a081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e57612804876127ff84612403565b6125b1565b8282013561281181611f9a565b6001600160a01b03168388015260408281013590880152606080830135908801526080808301359088015260a096870196909101906001016127ea565b5f808335601e19843603018112612863575f80fd5b83016020810192503590506001600160401b03811115612881575f80fd5b60c081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e576128b5876127ff84612403565b828201356128c281611f9a565b6001600160a01b039081168885015260408381013590890152606080840135908901526080808401359089015260a090838201356128ff81611f9a565b169088015260c09687019691909101906001016128a0565b80356001600160781b0381168114611fb9575f80fd5b5f808335601e19843603018112612942575f80fd5b83016020810192503590506001600160401b03811115612960575f80fd5b803603821315611d6a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b038311156129ad575f80fd5b8260051b80836020870137939093016020019392505050565b8183526020808401935f91600585811b8301820185855b88811015612a9e57858303601f19018a52813536899003609e19018112612a02575f80fd5b88018035845260a08682013560028110612a1a575f80fd5b85880152604082810135908601526060808301359086015260808083013536849003601e19018112612a4a575f80fd5b9092018781019290356001600160401b03811115612a66575f80fd5b80881b3603841315612a76575f80fd5b8282880152612a888388018286612996565b9d89019d965050509286019250506001016129dd565b509098975050505050505050565b608081525f610120873561015e19893603018112612ac8575f80fd5b60a060808501528801612aed828501612ae083611fae565b6001600160a01b03169052565b612af960208201611fae565b610140612b10818701836001600160a01b03169052565b612b1d6040840184612798565b610160888101529250612b35610280880184836127dc565b925050612b45606084018461284e565b87840361011f1901610180890152612b5e848284612892565b93505050612b6e6080840161255f565b612b7c6101a08801826126af565b5060a08301356101c087015260c08301356101e087015260e0830135610200870152610100808401356102208801528484013561024088015281840135610260880152612bcb60208d01612917565b6001600160781b03811660a08901529450612be860408d01612917565b6001600160781b03811660c08901529450612c0660608d018d61292d565b95509350607f199150818784030160e0880152612c2483868661296e565b9450612c3360808d018d61292d565b945092508187860301818801525050612c4d83838361296e565b925050508281036020840152612c648187896129c6565b9150508360408301526112cb60608301846001600160a01b03169052565b5f82516123b5818460208701611f24565b634e487b7160e01b5f52601160045260245ffd5b5f82612cc157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082018082111561061b5761061b612c93565b5f8451612d49818460208901611f24565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612dad816017850160208801611f24565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612dde816028840160208801611f24565b01602801949350505050565b828152604060208201525f610aaa6040830184611f46565b808202811582820484141761061b5761061b612c93565b5f81612e2757612e27612c93565b505f19019056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000818000a", + "deployedBytecode": "0x6080604052600436106101db575f3560e01c80638da5cb5b116100fd578063c4d66de811610092578063daea85c511610062578063daea85c51461055e578063e7acab241461057d578063f2fde38b1461059c578063ffa1ad74146105bb575f80fd5b8063c4d66de8146104e1578063d539139314610500578063d547741f14610520578063d9caed121461053f575f80fd5b8063a217fddf116100cd578063a217fddf14610452578063a3f4df7e14610465578063a4247400146104a3578063aa271e1a146104c2575f80fd5b80638da5cb5b146103d957806391d1485414610400578063983b2d561461041f578063986502751461043e575f80fd5b80635c975abb11610173578063715018a611610143578063715018a61461037f57806371e2a6571461039357806381c81d35146103b25780638456cb59146103c5575f80fd5b80635c975abb146103165780635fc1964f1461032e578063634486da1461034d5780636ccbae5f14610360575f80fd5b80633092afd5116101ae5780633092afd51461029c57806336568abe146102bb5780633f4ba83a146102da578063572b6c05146102ee575f80fd5b806301ffc9a7146101df5780631bf7e13e14610213578063248a9ca31461023f5780632f2ff15d1461027b575b5f80fd5b3480156101ea575f80fd5b506101fe6101f9366004611e68565b6105eb565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b5061023261022d366004611e8f565b610621565b60405161020a9190611f71565b34801561024a575f80fd5b5061026d610259366004611f83565b5f90815260fb602052604090206001015490565b60405190815260200161020a565b348015610286575f80fd5b5061029a610295366004611fbe565b6106ea565b005b3480156102a7575f80fd5b5061029a6102b6366004611fec565b610713565b3480156102c6575f80fd5b5061029a6102d5366004611fbe565b610727565b3480156102e5575f80fd5b5061029a6107ba565b3480156102f9575f80fd5b506101fe610308366004611fec565b6001600160a01b0316301490565b348015610321575f80fd5b5061012d5460ff166101fe565b348015610339575f80fd5b5061029a610348366004612073565b6107d4565b61029a61035b366004611fec565b610811565b34801561036b575f80fd5b5061026d61037a366004611f83565b6108d1565b34801561038a575f80fd5b5061029a61092a565b34801561039e575f80fd5b5061029a6103ad366004612073565b61093b565b61029a6103c0366004611fec565b610978565b3480156103d0575f80fd5b5061029a6109f5565b3480156103e4575f80fd5b506097546040516001600160a01b03909116815260200161020a565b34801561040b575f80fd5b506101fe61041a366004611fbe565b610a0d565b34801561042a575f80fd5b5061029a610439366004611fec565b610a37565b348015610449575f80fd5b5061029a610a48565b34801561045d575f80fd5b5061026d5f81565b348015610470575f80fd5b506102326040518060400160405280601381526020017229b2b0b837b93a10283937bc3c90213abcb2b960691b81525081565b3480156104ae575f80fd5b506101fe6104bd366004611e8f565b610a61565b3480156104cd575f80fd5b506101fe6104dc366004611fec565b610ab2565b3480156104ec575f80fd5b5061029a6104fb366004611fec565b610aca565b34801561050b575f80fd5b5061026d5f80516020612e2f83398151915281565b34801561052b575f80fd5b5061029a61053a366004611fbe565b610c21565b34801561054a575f80fd5b5061029a610559366004612113565b610c45565b348015610569575f80fd5b5061029a610578366004611fec565b610cef565b348015610588575f80fd5b506101fe610597366004612151565b610d9c565b3480156105a7575f80fd5b5061029a6105b6366004611fec565b6111dc565b3480156105c6575f80fd5b50610232604051806040016040528060058152602001640302e312e360dc1b81525081565b5f6001600160e01b03198216637965db0b60e01b148061061b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5a9050610632858585610a61565b61064f57604051638baa579f60e01b815260040160405180910390fd5b6106df61065f6020870187611fec565b3060408801358461067360608b018b612203565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f920191909152506111f792505050565b9150505b9392505050565b5f82815260fb6020526040902060010154610704816112d5565b61070e83836112e6565b505050565b61071b61136c565b610724816113e5565b50565b61072f6113fc565b6001600160a01b0316816001600160a01b0316146107ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107b6828261140a565b5050565b6107c261136c565b6107ca61148e565b6107d26114d8565b565b6107dc61136c565b5f5b81518110156107b6576108098282815181106107fc576107fc612245565b60200260200101516113e5565b6001016107de565b61081c6104dc6113fc565b6108385760405162461bcd60e51b81526004016107a390612259565b6001600160a01b03811661088e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b61089781611531565b61089f610a48565b6040516001600160a01b038216903480156108fc02915f818181858888f193505050501580156107b6573d5f803e3d5ffd5b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610923906060016040516020818303038152906040528051906020012090565b5492915050565b61093261136c565b6107d25f611548565b61094361136c565b5f5b81518110156107b65761097082828151811061096357610963612245565b6020026020010151611531565b600101610945565b6109836104dc6113fc565b61099f5760405162461bcd60e51b81526004016107a390612259565b6001600160a01b0381166108975760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b6109fd61136c565b610a05611599565b6107d26115e0565b5f91825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610a3f61136c565b61072481611531565b6107d25f80516020612e2f8339815191526102d56113fc565b5f610aaa610a6e8561228e565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061161f92505050565b949350505050565b5f61061b5f80516020612e2f83398151915283610a0d565b5f54610100900460ff1615808015610ae857505f54600160ff909116105b80610b015750303b158015610b0157505f5460ff166001145b610b645760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a3565b5f805460ff191660011790558015610b85575f805461ff0019166101001790555b61015f80546001600160a01b0319166001600160a01b038416179055610ba961175a565b610bb1611787565b610bb9611787565b610bc1611787565b610bc96117ad565b610bd16117e3565b610bd961181a565b80156107b6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f82815260fb6020526040902060010154610c3b816112d5565b61070e838361140a565b610c4d61136c565b600260335403610c6f5760405162461bcd60e51b81526004016107a39061234a565b600260335560405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce49190612381565b505060016033555050565b610cf761136c565b600260335403610d195760405162461bcd60e51b81526004016107a39061234a565b600260335561015f5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529082169063095ea7b3906044016020604051808303815f875af1158015610d6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d939190612381565b50506001603355565b5f610da86104dc6113fc565b610dc45760405162461bcd60e51b81526004016107a390612259565b600260335403610de65760405162461bcd60e51b81526004016107a39061234a565b6002603355610df3611599565b6001600160a01b038216610e1a576040516311d000e160e31b815260040160405180910390fd5b30610e2587806123a0565b610e36906040810190602001611fec565b6001600160a01b031614610e5d57604051639d3c586b60e01b815260040160405180910390fd5b61015f54604080516101608101909152611135916001600160a01b0316906379df72bd9080610e8c8b806123a0565b610e9a906020810190611fec565b6001600160a01b03168152602001610eb28b806123a0565b610ec3906040810190602001611fec565b6001600160a01b03168152602001610edb8b806123a0565b610ee99060408101906123bf565b808060200260200160405190810160405280939291908181526020015f905b82821015610f3457610f2560a08302860136819003810190612411565b81526020019060010190610f08565b5050509183525050602001610f498b806123a0565b610f5790606081019061248e565b808060200260200160405190810160405280939291908181526020015f905b82821015610fa257610f9360c083028601368190038101906124d2565b81526020019060010190610f76565b5050509183525050602001610fb78b806123a0565b610fc89060a081019060800161256d565b6004811115610fd957610fd9612586565b8152602001610fe88b806123a0565b60a001358152602001610ffb8b806123a0565b60c00135815260200161100e8b806123a0565b60e0013581526020016110218b806123a0565b610100013581526020016110358b806123a0565b6101200135815261015f546020909101906001600160a01b031663f07ec37361105e8d806123a0565b61106c906020810190611fec565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d2919061259a565b8152506040518263ffffffff1660e01b81526004016110f191906126bf565b602060405180830381865afa15801561110c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611130919061259a565b61184d565b61015f546040516339eb2ac960e21b81526001600160a01b039091169063e7acab249061116e9089908990899089908990600401612aac565b6020604051808303815f875af115801561118a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ae9190612381565b9050806111ce57604051636725093760e01b815260040160405180910390fd5b600160335595945050505050565b6111e461136c565b6111ed81611866565b6107245f826118dc565b6060611202856118e6565b5f80876001600160a01b03168661121b8b8a898961194b565b6040516112289190612c82565b5f604051808303815f8787f1925050503d805f8114611262576040519150601f19603f3d011682016040523d82523d5f602084013e611267565b606091505b509092509050611278603f87612ca7565b5a1161128657611286612cc6565b6112c682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061197b565b925050505b9695505050505050565b610724816112e16113fc565b6119b4565b6112f08282610a0d565b6107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113286113fc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113746113fc565b6001600160a01b031661138f6097546001600160a01b031690565b6001600160a01b0316146107d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107a3565b6107245f80516020612e2f83398151915282610c21565b5f611405611a18565b905090565b6114148282610a0d565b156107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff1916905561144a6113fc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61012d5460ff166107d25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107a3565b6114e061148e565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115146113fc565b6040516001600160a01b03909116815260200160405180910390a1565b6107245f80516020612e2f833981519152826118dc565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61012d5460ff16156107d25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107a3565b6115e8611599565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115146113fc565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015611663573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611687919061259a565b90505f6117348660600151805190602001208688602001516040516020016116d49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156112cb575085516112cb906001600160a01b03168286611a35565b5f54610100900460ff166117805760405162461bcd60e51b81526004016107a390612cda565b6001603355565b5f54610100900460ff166107d25760405162461bcd60e51b81526004016107a390612cda565b5f54610100900460ff166117d35760405162461bcd60e51b81526004016107a390612cda565b6107d26117de6113fc565b611548565b5f54610100900460ff166118095760405162461bcd60e51b81526004016107a390612cda565b6107d25f6118156113fc565b6118dc565b5f54610100900460ff166118405760405162461bcd60e51b81526004016107a390612cda565b61012d805460ff19169055565b30330361185d5761072481611b70565b610724816118e6565b61186e61136c565b6001600160a01b0381166118d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a3565b61072481611548565b6107b682826112e6565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9060600160405160208183030381529060405280519060200120905061193a8190565b54611946906001612d25565b905550565b606082858560405160200161196293929190612d38565b6040516020818303038152906040529050949350505050565b6060831561198a5750816106e3565b82511561199a5782518084602001fd5b8160405162461bcd60e51b81526004016107a39190611f71565b6119be8282610a0d565b6107b6576119d6816001600160a01b03166014611b9a565b6119e1836020611b9a565b6040516020016119f2929190612d76565b60408051601f198184030181529082905262461bcd60e51b82526107a391600401611f71565b5f303303611a2d575060331936013560601c90565b503390565b90565b5f805f611a428585611d2f565b90925090505f816004811115611a5a57611a5a612586565b148015611a785750856001600160a01b0316826001600160a01b0316145b15611a88576001925050506106e3565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611aaf929190612dea565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611aed9190612c82565b5f60405180830381855afa9150503d805f8114611b25576040519150601f19603f3d011682016040523d82523d5f602084013e611b2a565b606091505b5091509150818015611b3d575080516020145b8015611b6457508051630b135d3f60e11b90611b62908301602090810190840161259a565b145b98975050505050505050565b611b78611d71565b811461072457604051635637b6af60e11b8152600481018290526024016107a3565b60605f611ba8836002612e02565b611bb3906002612d25565b6001600160401b03811115611bca57611bca612007565b6040519080825280601f01601f191660200182016040528015611bf4576020820181803683370190505b509050600360fc1b815f81518110611c0e57611c0e612245565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c3c57611c3c612245565b60200101906001600160f81b03191690815f1a9053505f611c5e846002612e02565b611c69906001612d25565b90505b6001811115611ce0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c9d57611c9d612245565b1a60f81b828281518110611cb357611cb3612245565b60200101906001600160f81b03191690815f1a90535060049490941c93611cd981612e19565b9050611c6c565b5083156106e35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a3565b5f808251604103611d63576020830151604084015160608501515f1a611d5787828585611d83565b94509450505050611d6a565b505f905060025b9250929050565b5f303303611a325750601f1936013590565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611db857505f90506003611e5f565b8460ff16601b14158015611dd057508460ff16601c14155b15611de057505f90506004611e5f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e31573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611e59575f60019250925050611e5f565b91505f90505b94509492505050565b5f60208284031215611e78575f80fd5b81356001600160e01b0319811681146106e3575f80fd5b5f805f60408486031215611ea1575f80fd5b83356001600160401b0380821115611eb7575f80fd5b9085019060808288031215611eca575f80fd5b90935060208501359080821115611edf575f80fd5b818601915086601f830112611ef2575f80fd5b813581811115611f00575f80fd5b876020828501011115611f11575f80fd5b6020830194508093505050509250925092565b5f5b83811015611f3e578181015183820152602001611f26565b50505f910152565b5f8151808452611f5d816020860160208601611f24565b601f01601f19169290920160200192915050565b602081525f6106e36020830184611f46565b5f60208284031215611f93575f80fd5b5035919050565b6001600160a01b0381168114610724575f80fd5b8035611fb981611f9a565b919050565b5f8060408385031215611fcf575f80fd5b823591506020830135611fe181611f9a565b809150509250929050565b5f60208284031215611ffc575f80fd5b81356106e381611f9a565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b038111828210171561203d5761203d612007565b60405290565b604051601f8201601f191681016001600160401b038111828210171561206b5761206b612007565b604052919050565b5f6020808385031215612084575f80fd5b82356001600160401b038082111561209a575f80fd5b818501915085601f8301126120ad575f80fd5b8135818111156120bf576120bf612007565b8060051b91506120d0848301612043565b81815291830184019184810190888411156120e9575f80fd5b938501935b83851015611b64578435925061210383611f9a565b82825293850193908501906120ee565b5f805f60608486031215612125575f80fd5b833561213081611f9a565b9250602084013561214081611f9a565b929592945050506040919091013590565b5f805f805f60808688031215612165575f80fd5b85356001600160401b038082111561217b575f80fd5b9087019060a0828a03121561218e575f80fd5b909550602087013590808211156121a3575f80fd5b818801915088601f8301126121b6575f80fd5b8135818111156121c4575f80fd5b8960208260051b85010111156121d8575f80fd5b602083019650809550505050604086013591506121f760608701611fae565b90509295509295909350565b5f808335601e19843603018112612218575f80fd5b8301803591506001600160401b03821115612231575f80fd5b602001915036819003821315611d6a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b5f6080823603121561229e575f80fd5b6122a661201b565b82356122b181611f9a565b8152602083810135818301526040808501359083015260608401356001600160401b03808211156122e0575f80fd5b9085019036601f8301126122f2575f80fd5b81358181111561230457612304612007565b612316601f8201601f19168501612043565b9150808252368482850101111561232b575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f60208284031215612391575f80fd5b815180151581146106e3575f80fd5b5f823561015e198336030181126123b5575f80fd5b9190910192915050565b5f808335601e198436030181126123d4575f80fd5b8301803591506001600160401b038211156123ed575f80fd5b602001915060a081023603821315611d6a575f80fd5b803560068110611fb9575f80fd5b5f60a08284031215612421575f80fd5b60405160a081018181106001600160401b038211171561244357612443612007565b60405261244f83612403565b8152602083013561245f81611f9a565b806020830152506040830135604082015260608301356060820152608083013560808201528091505092915050565b5f808335601e198436030181126124a3575f80fd5b8301803591506001600160401b038211156124bc575f80fd5b602001915060c081023603821315611d6a575f80fd5b5f60c082840312156124e2575f80fd5b60405160c081018181106001600160401b038211171561250457612504612007565b60405261251083612403565b8152602083013561252081611f9a565b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013561255381611f9a565b60a08201529392505050565b803560058110611fb9575f80fd5b5f6020828403121561257d575f80fd5b6106e38261255f565b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156125aa575f80fd5b5051919050565b600681106125c1576125c1612586565b9052565b5f815180845260208085019450602084015f5b8381101561262e5781516125ed8882516125b1565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016125d8565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561262e5781516126618882516125b1565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c0909601959082019060010161264c565b600581106125c1576125c1612586565b602081526126d96020820183516001600160a01b03169052565b5f60208301516126f460408401826001600160a01b03169052565b5060408301516101608060608501526127116101808501836125c5565b91506060850151601f1985840301608086015261272e8382612639565b925050608085015161274360a08601826126af565b5060a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140818187015280870151838701525050508091505092915050565b5f808335601e198436030181126127ad575f80fd5b83016020810192503590506001600160401b038111156127cb575f80fd5b60a081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e57612804876127ff84612403565b6125b1565b8282013561281181611f9a565b6001600160a01b03168388015260408281013590880152606080830135908801526080808301359088015260a096870196909101906001016127ea565b5f808335601e19843603018112612863575f80fd5b83016020810192503590506001600160401b03811115612881575f80fd5b60c081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e576128b5876127ff84612403565b828201356128c281611f9a565b6001600160a01b039081168885015260408381013590890152606080840135908901526080808401359089015260a090838201356128ff81611f9a565b169088015260c09687019691909101906001016128a0565b80356001600160781b0381168114611fb9575f80fd5b5f808335601e19843603018112612942575f80fd5b83016020810192503590506001600160401b03811115612960575f80fd5b803603821315611d6a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b038311156129ad575f80fd5b8260051b80836020870137939093016020019392505050565b8183526020808401935f91600585811b8301820185855b88811015612a9e57858303601f19018a52813536899003609e19018112612a02575f80fd5b88018035845260a08682013560028110612a1a575f80fd5b85880152604082810135908601526060808301359086015260808083013536849003601e19018112612a4a575f80fd5b9092018781019290356001600160401b03811115612a66575f80fd5b80881b3603841315612a76575f80fd5b8282880152612a888388018286612996565b9d89019d965050509286019250506001016129dd565b509098975050505050505050565b608081525f610120873561015e19893603018112612ac8575f80fd5b60a060808501528801612aed828501612ae083611fae565b6001600160a01b03169052565b612af960208201611fae565b610140612b10818701836001600160a01b03169052565b612b1d6040840184612798565b610160888101529250612b35610280880184836127dc565b925050612b45606084018461284e565b87840361011f1901610180890152612b5e848284612892565b93505050612b6e6080840161255f565b612b7c6101a08801826126af565b5060a08301356101c087015260c08301356101e087015260e0830135610200870152610100808401356102208801528484013561024088015281840135610260880152612bcb60208d01612917565b6001600160781b03811660a08901529450612be860408d01612917565b6001600160781b03811660c08901529450612c0660608d018d61292d565b95509350607f199150818784030160e0880152612c2483868661296e565b9450612c3360808d018d61292d565b945092508187860301818801525050612c4d83838361296e565b925050508281036020840152612c648187896129c6565b9150508360408301526112cb60608301846001600160a01b03169052565b5f82516123b5818460208701611f24565b634e487b7160e01b5f52601160045260245ffd5b5f82612cc157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082018082111561061b5761061b612c93565b5f8451612d49818460208901611f24565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612dad816017850160208801611f24565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612dde816028840160208801611f24565b01602801949350505050565b828152604060208201525f610aaa6040830184611f46565b808202811582820484141761061b5761061b612c93565b5f81612e2757612e27612c93565b505f19019056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/SignatureVerification.json b/artifacts/SignatureVerification.json new file mode 100644 index 00000000..9a3fffbc --- /dev/null +++ b/artifacts/SignatureVerification.json @@ -0,0 +1,37 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SignatureVerification", + "sourceName": "seaport-core/src/lib/SignatureVerification.sol", + "abi": [ + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/SignatureVerificationErrors.json b/artifacts/SignatureVerificationErrors.json new file mode 100644 index 00000000..e572ac3c --- /dev/null +++ b/artifacts/SignatureVerificationErrors.json @@ -0,0 +1,37 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SignatureVerificationErrors", + "sourceName": "seaport-types/src/interfaces/SignatureVerificationErrors.sol", + "abi": [ + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/StablePriceOracle.json b/artifacts/StablePriceOracle.json index 5047c91b..6d4f1b97 100644 --- a/artifacts/StablePriceOracle.json +++ b/artifacts/StablePriceOracle.json @@ -200,8 +200,8 @@ "type": "function" } ], - "bytecode": "0x61014060405234801561001157600080fd5b506040516109e63803806109e683398101604081905261003091610106565b6001600160a01b0382166101205280518190600090610051576100516101e6565b60200260200101516080818152505080600181518110610073576100736101e6565b602002602001015160a0818152505080600281518110610095576100956101e6565b602002602001015160c08181525050806003815181106100b7576100b76101e6565b602002602001015160e08181525050806004815181106100d9576100d96101e6565b6020026020010151610100818152505050506101fc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561011957600080fd5b82516001600160a01b038116811461013057600080fd5b602084810151919350906001600160401b038082111561014f57600080fd5b818601915086601f83011261016357600080fd5b815181811115610175576101756100f0565b8060051b604051601f19603f8301168101818110858211171561019a5761019a6100f0565b6040529182528482019250838101850191898311156101b857600080fd5b938501935b828510156101d6578451845293850193928501926101bd565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161077261027460003960008181610189015261056701526000818161012801526102af0152600081816101ef01526102e801526000818161014f015261031a0152600081816101c8015261034c01526000818160c5015261037601526107726000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a200e15311610066578063a200e1531461014a578063a34e359614610171578063c8a4271f14610184578063cd5d2c74146101c3578063d820ed42146101ea57600080fd5b806301ffc9a7146100985780632c0fd74c146100c057806350e9a715146100f557806359b6b86c14610123575b600080fd5b6100ab6100a6366004610612565b610211565b60405190151581526020015b60405180910390f35b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b7565b61010861010336600461063c565b610248565b604080518251815260209283015192810192909252016100b7565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e761017f36600461063c565b61040e565b6101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166301ffc9a760e01b148061024257506001600160e01b031982166350e9a71560e01b145b92915050565b6040805180820190915260008082526020820152600061029d86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045f92505050565b90506000600582106102da576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b905061039d565b8160040361030c576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b8160030361033e576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b81600203610370576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b61039a847f00000000000000000000000000000000000000000000000000000000000000006106d1565b90505b60405180604001604052806103b183610562565b81526020016104016103fc8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506106099050565b610562565b9052979650505050505050565b60006104566103fc86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506106099050565b95945050505050565b8051600090819081905b80821015610559576000858381518110610485576104856106e8565b01602001516001600160f81b0319169050600160ff1b8110156104b4576104ad6001846106fe565b9250610546565b600760fd1b6001600160f81b0319821610156104d5576104ad6002846106fe565b600f60fc1b6001600160f81b0319821610156104f6576104ad6003846106fe565b601f60fb1b6001600160f81b031982161015610517576104ad6004846106fe565b603f60fa1b6001600160f81b031982161015610538576104ad6005846106fe565b6105436006846106fe565b92505b508261055181610711565b935050610469565b50909392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e7919061072a565b9050806105f8846305f5e1006106d1565b6106029190610743565b9392505050565b60009392505050565b60006020828403121561062457600080fd5b81356001600160e01b03198116811461060257600080fd5b6000806000806060858703121561065257600080fd5b843567ffffffffffffffff8082111561066a57600080fd5b818701915087601f83011261067e57600080fd5b81358181111561068d57600080fd5b88602082850101111561069f57600080fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610242576102426106bb565b634e487b7160e01b600052603260045260246000fd5b80820180821115610242576102426106bb565b600060018201610723576107236106bb565b5060010190565b60006020828403121561073c57600080fd5b5051919050565b60008261076057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a200e15311610066578063a200e1531461014a578063a34e359614610171578063c8a4271f14610184578063cd5d2c74146101c3578063d820ed42146101ea57600080fd5b806301ffc9a7146100985780632c0fd74c146100c057806350e9a715146100f557806359b6b86c14610123575b600080fd5b6100ab6100a6366004610612565b610211565b60405190151581526020015b60405180910390f35b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b7565b61010861010336600461063c565b610248565b604080518251815260209283015192810192909252016100b7565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e761017f36600461063c565b61040e565b6101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166301ffc9a760e01b148061024257506001600160e01b031982166350e9a71560e01b145b92915050565b6040805180820190915260008082526020820152600061029d86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045f92505050565b90506000600582106102da576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b905061039d565b8160040361030c576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b8160030361033e576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b81600203610370576102d3847f00000000000000000000000000000000000000000000000000000000000000006106d1565b61039a847f00000000000000000000000000000000000000000000000000000000000000006106d1565b90505b60405180604001604052806103b183610562565b81526020016104016103fc8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506106099050565b610562565b9052979650505050505050565b60006104566103fc86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506106099050565b95945050505050565b8051600090819081905b80821015610559576000858381518110610485576104856106e8565b01602001516001600160f81b0319169050600160ff1b8110156104b4576104ad6001846106fe565b9250610546565b600760fd1b6001600160f81b0319821610156104d5576104ad6002846106fe565b600f60fc1b6001600160f81b0319821610156104f6576104ad6003846106fe565b601f60fb1b6001600160f81b031982161015610517576104ad6004846106fe565b603f60fa1b6001600160f81b031982161015610538576104ad6005846106fe565b6105436006846106fe565b92505b508261055181610711565b935050610469565b50909392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e7919061072a565b9050806105f8846305f5e1006106d1565b6106029190610743565b9392505050565b60009392505050565b60006020828403121561062457600080fd5b81356001600160e01b03198116811461060257600080fd5b6000806000806060858703121561065257600080fd5b843567ffffffffffffffff8082111561066a57600080fd5b818701915087601f83011261067e57600080fd5b81358181111561068d57600080fd5b88602082850101111561069f57600080fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610242576102426106bb565b634e487b7160e01b600052603260045260246000fd5b80820180821115610242576102426106bb565b600060018201610723576107236106bb565b5060010190565b60006020828403121561073c57600080fd5b5051919050565b60008261076057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c6343000811000a", + "bytecode": "0x610140604052348015610010575f80fd5b506040516109ac3803806109ac83398101604081905261002f91610102565b6001600160a01b03821661012052805181905f9061004f5761004f6101dc565b60200260200101516080818152505080600181518110610071576100716101dc565b602002602001015160a0818152505080600281518110610093576100936101dc565b602002602001015160c08181525050806003815181106100b5576100b56101dc565b602002602001015160e08181525050806004815181106100d7576100d76101dc565b6020026020010151610100818152505050506101f0565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610113575f80fd5b82516001600160a01b0381168114610129575f80fd5b602084810151919350906001600160401b0380821115610147575f80fd5b818601915086601f83011261015a575f80fd5b81518181111561016c5761016c6100ee565b8060051b604051601f19603f83011681018181108582111715610191576101916100ee565b6040529182528482019250838101850191898311156101ae575f80fd5b938501935b828510156101cc578451845293850193928501926101b3565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161074c6102605f395f8181610185015261055801525f818161012401526102a601525f81816101eb01526102df01525f818161014b015261031101525f81816101c4015261034301525f818160c1015261036d015261074c5ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063a200e15311610063578063a200e15314610146578063a34e35961461016d578063c8a4271f14610180578063cd5d2c74146101bf578063d820ed42146101e6575f80fd5b806301ffc9a7146100945780632c0fd74c146100bc57806350e9a715146100f157806359b6b86c1461011f575b5f80fd5b6100a76100a2366004610600565b61020d565b60405190151581526020015b60405180910390f35b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b3565b6101046100ff366004610627565b610243565b604080518251815260209283015192810192909252016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e361017b366004610627565b610404565b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b5f6001600160e01b031982166301ffc9a760e01b148061023d57506001600160e01b031982166350e9a71560e01b145b92915050565b604080518082019091525f80825260208201525f61029586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061045392505050565b90505f600582106102d1576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b9050610394565b81600403610303576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b81600303610335576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b81600203610367576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b610391847f00000000000000000000000000000000000000000000000000000000000000006106b3565b90505b60405180604001604052806103a883610554565b81526020016103f76103f28a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b91506105f89050565b610554565b9052979650505050505050565b5f61044a6103f286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892508791506105f89050565b95945050505050565b80515f90819081905b8082101561054b575f858381518110610477576104776106ca565b01602001516001600160f81b0319169050600160ff1b8110156104a65761049f6001846106de565b9250610538565b600760fd1b6001600160f81b0319821610156104c75761049f6002846106de565b600f60fc1b6001600160f81b0319821610156104e85761049f6003846106de565b601f60fb1b6001600160f81b0319821610156105095761049f6004846106de565b603f60fa1b6001600160f81b03198216101561052a5761049f6005846106de565b6105356006846106de565b92505b5082610543816106f1565b93505061045c565b50909392505050565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d69190610709565b9050806105e7846305f5e1006106b3565b6105f19190610720565b9392505050565b5f9392505050565b5f60208284031215610610575f80fd5b81356001600160e01b0319811681146105f1575f80fd5b5f805f806060858703121561063a575f80fd5b843567ffffffffffffffff80821115610651575f80fd5b818701915087601f830112610664575f80fd5b813581811115610672575f80fd5b886020828501011115610683575f80fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761023d5761023d61069f565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561023d5761023d61069f565b5f600182016107025761070261069f565b5060010190565b5f60208284031215610719575f80fd5b5051919050565b5f8261073a57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063a200e15311610063578063a200e15314610146578063a34e35961461016d578063c8a4271f14610180578063cd5d2c74146101bf578063d820ed42146101e6575f80fd5b806301ffc9a7146100945780632c0fd74c146100bc57806350e9a715146100f157806359b6b86c1461011f575b5f80fd5b6100a76100a2366004610600565b61020d565b60405190151581526020015b60405180910390f35b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b3565b6101046100ff366004610627565b610243565b604080518251815260209283015192810192909252016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e361017b366004610627565b610404565b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b5f6001600160e01b031982166301ffc9a760e01b148061023d57506001600160e01b031982166350e9a71560e01b145b92915050565b604080518082019091525f80825260208201525f61029586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061045392505050565b90505f600582106102d1576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b9050610394565b81600403610303576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b81600303610335576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b81600203610367576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b610391847f00000000000000000000000000000000000000000000000000000000000000006106b3565b90505b60405180604001604052806103a883610554565b81526020016103f76103f28a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b91506105f89050565b610554565b9052979650505050505050565b5f61044a6103f286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892508791506105f89050565b95945050505050565b80515f90819081905b8082101561054b575f858381518110610477576104776106ca565b01602001516001600160f81b0319169050600160ff1b8110156104a65761049f6001846106de565b9250610538565b600760fd1b6001600160f81b0319821610156104c75761049f6002846106de565b600f60fc1b6001600160f81b0319821610156104e85761049f6003846106de565b601f60fb1b6001600160f81b0319821610156105095761049f6004846106de565b603f60fa1b6001600160f81b03198216101561052a5761049f6005846106de565b6105356006846106de565b92505b5082610543816106f1565b93505061045c565b50909392505050565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d69190610709565b9050806105e7846305f5e1006106b3565b6105f19190610720565b9392505050565b5f9392505050565b5f60208284031215610610575f80fd5b81356001600160e01b0319811681146105f1575f80fd5b5f805f806060858703121561063a575f80fd5b843567ffffffffffffffff80821115610651575f80fd5b818701915087601f830112610664575f80fd5b813581811115610672575f80fd5b886020828501011115610683575f80fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761023d5761023d61069f565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561023d5761023d61069f565b5f600182016107025761070261069f565b5060010190565b5f60208284031215610719575f80fd5b5051919050565b5f8261073a57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/TLDPublicSuffixList.json b/artifacts/TLDPublicSuffixList.json index de126baf..da247f41 100644 --- a/artifacts/TLDPublicSuffixList.json +++ b/artifacts/TLDPublicSuffixList.json @@ -23,8 +23,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506101e4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634f89059e14610030575b600080fd5b61004361003e36600461012e565b610057565b604051901515815260200160405180910390f35b60008061009e600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061010a9050565b60ff16905060008111801561010057506100fb6100bc8260016101a0565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061010a9050565b60ff16155b9150505b92915050565b600082828151811061011e5761011e6101c1565b016020015160f81c905092915050565b6000806020838503121561014157600080fd5b823567ffffffffffffffff8082111561015957600080fd5b818501915085601f83011261016d57600080fd5b81358181111561017c57600080fd5b86602082850101111561018e57600080fd5b60209290920196919550909350505050565b8082018082111561010457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80634f89059e14610030575b600080fd5b61004361003e36600461012e565b610057565b604051901515815260200160405180910390f35b60008061009e600085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061010a9050565b60ff16905060008111801561010057506100fb6100bc8260016101a0565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061010a9050565b60ff16155b9150505b92915050565b600082828151811061011e5761011e6101c1565b016020015160f81c905092915050565b6000806020838503121561014157600080fd5b823567ffffffffffffffff8082111561015957600080fd5b818501915085601f83011261016d57600080fd5b81358181111561017c57600080fd5b86602082850101111561018e57600080fd5b60209290920196919550909350505050565b8082018082111561010457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506101d18061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80634f89059e1461002d575b5f80fd5b61004061003b366004610125565b610054565b604051901515815260200160405180910390f35b5f806100985f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff1690505f811180156100f857506100f36100b5826001610191565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff16155b9150505b92915050565b5f828281518110610115576101156101b0565b016020015160f81c905092915050565b5f8060208385031215610136575f80fd5b823567ffffffffffffffff8082111561014d575f80fd5b818501915085601f830112610160575f80fd5b81358181111561016e575f80fd5b86602082850101111561017f575f80fd5b60209290920196919550909350505050565b808201808211156100fc57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80634f89059e1461002d575b5f80fd5b61004061003b366004610125565b610054565b604051901515815260200160405180910390f35b5f806100985f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff1690505f811180156100f857506100f36100b5826001610191565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff16155b9150505b92915050565b5f828281518110610115576101156101b0565b016020015160f81c905092915050565b5f8060208385031215610136575f80fd5b823567ffffffffffffffff8082111561014d575f80fd5b818501915085601f830112610160575f80fd5b81358181111561016e575f80fd5b86602082850101111561017f575f80fd5b60209290920196919550909350505050565b808201808211156100fc57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/TokenTransferrer.json b/artifacts/TokenTransferrer.json new file mode 100644 index 00000000..13521f8d --- /dev/null +++ b/artifacts/TokenTransferrer.json @@ -0,0 +1,136 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TokenTransferrer", + "sourceName": "seaport-core/src/lib/TokenTransferrer.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/TokenTransferrerErrors.json b/artifacts/TokenTransferrerErrors.json new file mode 100644 index 00000000..0d8d99dd --- /dev/null +++ b/artifacts/TokenTransferrerErrors.json @@ -0,0 +1,136 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TokenTransferrerErrors", + "sourceName": "seaport-types/src/interfaces/TokenTransferrerErrors.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/UNSOperator.json b/artifacts/UNSOperator.json index cf761779..46207936 100644 --- a/artifacts/UNSOperator.json +++ b/artifacts/UNSOperator.json @@ -102,8 +102,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610454806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638129fc1c146100715780638da5cb5b14610079578063a3f4df7e14610099578063f2fde38b146100d2578063ffa1ad74146100e5575b600080fd5b61006f610109565b005b61006f61011d565b6033546040516001600160a01b0390911681526020015b60405180910390f35b6100c56040518060400160405280600d81526020016c2aa7299d1027b832b930ba37b960991b81525081565b60405161009091906103c9565b61006f6100e0366004610417565b610233565b6100c5604051806040016040528060058152602001640302e312e360dc1b81525081565b6101116102a9565b61011b6000610303565b565b600054610100900460ff161580801561013d5750600054600160ff909116105b806101575750303b158015610157575060005460ff166001145b6101bf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156101e2576000805461ff0019166101001790555b6101ea610355565b8015610230576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b61023b6102a9565b6001600160a01b0381166102a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b6565b61023081610303565b6033546001600160a01b0316331461011b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166103c05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b6565b61011b33610303565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561042957600080fd5b81356001600160a01b038116811461044057600080fd5b939250505056fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638129fc1c146100715780638da5cb5b14610079578063a3f4df7e14610099578063f2fde38b146100d2578063ffa1ad74146100e5575b600080fd5b61006f610109565b005b61006f61011d565b6033546040516001600160a01b0390911681526020015b60405180910390f35b6100c56040518060400160405280600d81526020016c2aa7299d1027b832b930ba37b960991b81525081565b60405161009091906103c9565b61006f6100e0366004610417565b610233565b6100c5604051806040016040528060058152602001640302e312e360dc1b81525081565b6101116102a9565b61011b6000610303565b565b600054610100900460ff161580801561013d5750600054600160ff909116105b806101575750303b158015610157575060005460ff166001145b6101bf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156101e2576000805461ff0019166101001790555b6101ea610355565b8015610230576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b61023b6102a9565b6001600160a01b0381166102a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b6565b61023081610303565b6033546001600160a01b0316331461011b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166103c05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b6565b61011b33610303565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561042957600080fd5b81356001600160a01b038116811461044057600080fd5b939250505056fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b506104438061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c8063715018a6146100645780638129fc1c1461006e5780638da5cb5b14610076578063a3f4df7e14610096578063f2fde38b146100cf578063ffa1ad74146100e2575b5f80fd5b61006c610106565b005b61006c610119565b6033546040516001600160a01b0390911681526020015b60405180910390f35b6100c26040518060400160405280600d81526020016c2aa7299d1027b832b930ba37b960991b81525081565b60405161008d91906103bd565b61006c6100dd366004610409565b610229565b6100c2604051806040016040528060058152602001640302e312e360dc1b81525081565b61010e61029f565b6101175f6102f9565b565b5f54610100900460ff161580801561013757505f54600160ff909116105b806101505750303b15801561015057505f5460ff166001145b6101b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156101d9575f805461ff0019166101001790555b6101e161034a565b8015610226575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b61023161029f565b6001600160a01b0381166102965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101af565b610226816102f9565b6033546001600160a01b031633146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101af565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166103b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101af565b610117336102f9565b5f602080835283518060208501525f5b818110156103e9578581018301518582016040015282016103cd565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610419575f80fd5b81356001600160a01b038116811461042f575f80fd5b939250505056fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c8063715018a6146100645780638129fc1c1461006e5780638da5cb5b14610076578063a3f4df7e14610096578063f2fde38b146100cf578063ffa1ad74146100e2575b5f80fd5b61006c610106565b005b61006c610119565b6033546040516001600160a01b0390911681526020015b60405180910390f35b6100c26040518060400160405280600d81526020016c2aa7299d1027b832b930ba37b960991b81525081565b60405161008d91906103bd565b61006c6100dd366004610409565b610229565b6100c2604051806040016040528060058152602001640302e312e360dc1b81525081565b61010e61029f565b6101175f6102f9565b565b5f54610100900460ff161580801561013757505f54600160ff909116105b806101505750303b15801561015057505f5460ff166001145b6101b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156101d9575f805461ff0019166101001790555b6101e161034a565b8015610226575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b61023161029f565b6001600160a01b0381166102965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101af565b610226816102f9565b6033546001600160a01b031633146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101af565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166103b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101af565b610117336102f9565b5f602080835283518060208501525f5b818110156103e9578581018301518582016040015282016103cd565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610419575f80fd5b81356001600160a01b038116811461042f575f80fd5b939250505056fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/UNSRegistryV07.json b/artifacts/UNSRegistryV07.json index 35b6e2a2..3da456e2 100644 --- a/artifacts/UNSRegistryV07.json +++ b/artifacts/UNSRegistryV07.json @@ -1427,8 +1427,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c76806100206000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370a08231116101d3578063ba5d40b711610104578063ebf0c717116100a2578063f5c1f76e1161007c578063f5c1f76e14610806578063f7df5c6014610819578063f8c8765e1461082c578063ffa1ad741461083f57600080fd5b8063ebf0c717146107e4578063ec129eea146107eb578063f25eb5c1146107fe57600080fd5b8063c87b56dd116100de578063c87b56dd1461076f578063ce92b33e14610782578063cf2c52cb14610795578063e985e9c5146107a857600080fd5b8063ba5d40b714610736578063bb5b27e114610749578063bebec6b41461075c57600080fd5b8063a22cb46511610171578063ab3b87fe1161014b578063ab3b87fe146106dc578063b3f9e4cb146106ef578063b85afd2814610702578063b88d4fde1461072357600080fd5b8063a22cb4651461068a578063a3f4df7e1461069d578063a4247400146106c957600080fd5b80639508b1c4116101ad5780639508b1c4146106545780639559c0bd1461066757806395d89b411461066f57806399e0dd7c1461067757600080fd5b806370a082311461061b5780637e37479e1461062e57806394d008ef1461064157600080fd5b806342842e0e116102ad578063509602391161024b578063638e5c7811610225578063638e5c78146105b3578063663f7b2a146105c6578063672b9f81146105d95780636ccbae5f146105fa57600080fd5b80635096023914610571578063572b6c05146105845780636352211e146105a057600080fd5b806347c816991161028757806347c81699146105255780634a72584d146105385780634f558e791461054b57806350382c1a1461055e57600080fd5b806342842e0e146104ec57806342966c68146104ff578063430c20811461051257600080fd5b80631bf7e13e1161031a578063276fabb1116102f4578063276fabb11461049257806327f18975146104b3578063310bd74b146104c657806340c10f19146104d957600080fd5b80631bf7e13e146104595780631f71be061461046c57806323b872dd1461047f57600080fd5b8063095ea7b311610356578063095ea7b3146103e5578063150b7a02146103fa5780631bd8cc1a146104265780631be5e7ed1461044657600080fd5b806301ffc9a71461037d57806306fdde03146103a5578063081812fc146103ba575b600080fd5b61039061038b3660046139bf565b610863565b60405190151581526020015b60405180910390f35b6103ad610874565b60405161039c9190613a2c565b6103cd6103c8366004613a3f565b610906565b6040516001600160a01b03909116815260200161039c565b6103f86103f3366004613a6d565b61092d565b005b61040d610408366004613ada565b610946565b6040516001600160e01b0319909116815260200161039c565b610439610434366004613b90565b610aa0565b60405161039c9190613c30565b6103ad610454366004613c43565b610b96565b6103ad610467366004613c7a565b610be1565b6103f861047a366004613cff565b610cec565b6103f861048d366004613dbb565b610d93565b6104a56104a0366004613dfc565b610de6565b60405190815260200161039c565b6103f86104c1366004613e3d565b610df5565b6103f86104d4366004613a3f565b610e3d565b6103f86104e7366004613a6d565b610e78565b6103f86104fa366004613dbb565b610ec5565b6103f861050d366004613a3f565b610ee0565b610390610520366004613a6d565b610f24565b6103f8610533366004613eb0565b610f30565b6103f8610546366004613f11565b610f6f565b610390610559366004613a3f565b610fb5565b6103f861056c366004614018565b610fd4565b6103f861057f36600461404c565b61100a565b61039061059236600461404c565b6001600160a01b0316301490565b6103cd6105ae366004613a3f565b61106a565b6103f86105c1366004613a3f565b6110ca565b6103f86105d4366004614104565b611115565b6105ec6105e736600461414c565b61114e565b60405161039c92919061416e565b6104a5610608366004613a3f565b6000908152610100602052604090205490565b6104a561062936600461404c565b611166565b6104a561063c36600461404c565b6111ec565b6103f861064f366004614193565b61121d565b6103f86106623660046141ee565b61126c565b6104a5601481565b6103ad6112f3565b6103f8610685366004614291565b611302565b6103f86106983660046142c6565b611389565b6103ad6040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103906106d7366004613c7a565b61139b565b6103f86106ea366004613a6d565b6113e6565b6103cd6106fd366004613a3f565b61142b565b610715610710366004613b90565b611455565b60405161039c9291906142f2565b6103f8610731366004614317565b611577565b6103f8610744366004613cff565b6115be565b6103ad610757366004613a3f565b61162f565b6103ad61076a36600461404c565b6116d1565b6103ad61077d366004613a3f565b61179b565b6103f8610790366004613e3d565b611801565b6103f86107a3366004614382565b611840565b6103906107b63660046143c9565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104a5565b6103f86107f9366004613e3d565b61190f565b6103f861194e565b610439610814366004613dfc565b6119d5565b6103f8610827366004614402565b611a88565b6103f861083a366004614434565b611b19565b6103ad60405180604001604052806005815260200164302e372e3360d81b81525081565b600061086e82611cef565b92915050565b60606065805461088390614490565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90614490565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b600061091182611d3f565b506000908152606960205260409020546001600160a01b031690565b8061093781611d9e565b6109418383611e04565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b031661097b611f26565b6001600160a01b031603610a3c57610991611f26565b6001600160a01b03166342966c68856040518263ffffffff1660e01b81526004016109be91815260200190565b600060405180830381600087803b1580156109d857600080fd5b505af11580156109ec573d6000803e3d6000fd5b505050821580159150610a065750610a06828401846144c4565b15610a2457610a153085611f35565b610a1f8585612083565b610a2e565b610a2e8585611f35565b50630a85bd0160e11b610a97565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610aba57610aba613f63565b604051908082528060200260200182016040528015610aed57816020015b6060815260200190600190039081610ad85790505b50905060005b83811015610b8e57610b5e858583818110610b1057610b106144df565b9050602002810190610b2291906144f5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061212e915050565b828281518110610b7057610b706144df565b60200260200101819052508080610b8690614551565b915050610af3565b509392505050565b6060610bd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061212e915050565b949350505050565b606060005a9050610bf385858561139b565b610c4f5760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610a8e565b610ce1610c5f602087018761404c565b30604088013584610c7360608b018b6144f5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061216392505050565b9150505b9392505050565b610134546001600160a01b0316610d01611f26565b6001600160a01b031614610d275760405162461bcd60e51b8152600401610a8e9061456a565b6000610d3b610d36888a6145b1565b612244565b9050610d4681612293565b610d59610d528261106a565b8a83612300565b610d6686868686856124a7565b8115610d8857610d888982610d83610d7e8b8d6145b1565b612515565b612596565b505050505050505050565b80610da5610d9f611f26565b826125d8565b610dc15760405162461bcd60e51b8152600401610a8e906145be565b81610dcb81611d9e565b610dd483612293565b610ddf858585612300565b5050505050565b6000610ce5610d3683856145b1565b80610e01610d9f611f26565b610e1d5760405162461bcd60e51b8152600401610a8e906145be565b81610e2781611d9e565b610e348787878787612656565b50505050505050565b80610e49610d9f611f26565b610e655760405162461bcd60e51b8152600401610a8e906145be565b81610e6f81611d9e565b61094183612293565b610e806126b9565b6001600160a01b0316610e91611f26565b6001600160a01b031614610eb75760405162461bcd60e51b8152600401610a8e90614607565b610ec18282611f35565b5050565b61094183838360405180602001604052806000815250611577565b80610eec610d9f611f26565b610f085760405162461bcd60e51b8152600401610a8e906145be565b81610f1281611d9e565b610f1b83612293565b610941836127ba565b6000610ce583836125d8565b80610f3c610d9f611f26565b610f585760405162461bcd60e51b8152600401610a8e906145be565b81610f6281611d9e565b610e348787878787612861565b80610f7b610d9f611f26565b610f975760405162461bcd60e51b8152600401610a8e906145be565b81610fa181611d9e565b610fad86868686612940565b505050505050565b6000818152606760205260408120546001600160a01b0316151561086e565b61100781604051602001610fe89190614649565b6040516020818303038152906040528051906020012060001c826129e0565b50565b610134546001600160a01b031661101f611f26565b6001600160a01b0316146110455760405162461bcd60e51b8152600401610a8e9061456a565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b6000818152606760205260408120546001600160a01b03168061086e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a8e565b806110d6610d9f611f26565b6110f25760405162461bcd60e51b8152600401610a8e906145be565b6111046110fd611f26565b3084612300565b610ec161110f611f26565b83612083565b600061112082612244565b905061112b81612a05565b61113481611d9e565b610ec161113f611f26565b8261114985612515565b612a75565b60608061115b8484612afc565b909590945092505050565b60006001600160a01b0382166111d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a8e565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b0381166000908152610135602052604081205461120f81612b1d565b611217578091505b50919050565b6112256126b9565b6001600160a01b0316611236611f26565b6001600160a01b03161461125c5760405162461bcd60e51b8152600401610a8e90614607565b6112668484611f35565b50505050565b6112768787612b67565b61127e611f26565b6001600160a01b03166112908661106a565b6001600160a01b0316146112e65760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a8e565b610e3484848484896124a7565b60606066805461088390614490565b610134546001600160a01b0316611317611f26565b6001600160a01b03161461133d5760405162461bcd60e51b8152600401610a8e9061456a565b61013361134b8284836146ab565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b828260405161137d929190614793565b60405180910390a15050565b610ec1611394611f26565b8383612bd6565b6000610bd96113a9856147a7565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca492505050565b806113f2610d9f611f26565b61140e5760405162461bcd60e51b8152600401610a8e906145be565b8161141881611d9e565b6112666114248461106a565b8585612300565b6000818152606760205260408120546001600160a01b031661144e57600061086e565b3092915050565b606080836001600160401b0381111561147057611470613f63565b6040519080825280602002602001820160405280156114a357816020015b606081526020019060019003908161148e5790505b509150836001600160401b038111156114be576114be613f63565b6040519080825280602002602001820160405280156114f157816020015b60608152602001906001900390816114dc5790505b50905060005b8481101561156e57611521868683818110611514576115146144df565b9050602002013585612afc565b848381518110611533576115336144df565b6020026020010184848151811061154c5761154c6144df565b602002602001018290528290525050808061156690614551565b9150506114f7565b50935093915050565b81611583610d9f611f26565b61159f5760405162461bcd60e51b8152600401610a8e906145be565b826115a981611d9e565b6115b284612293565b610fad86868686612ded565b610134546001600160a01b03166115d3611f26565b6001600160a01b0316146115f95760405162461bcd60e51b8152600401610a8e9061456a565b6000611608610d36888a6145b1565b9050611622898261161c610d7e8b8d6145b1565b85612e20565b610d8886868686856124a7565b600081815260c96020526040902080546060919061164c90614490565b80601f016020809104026020016040519081016040528092919081815260200182805461167890614490565b80156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b50505050509050919050565b6001600160a01b038116600090815261013560205260409020546060906116f781612b1d565b61121757600081815261013860205260409020805461171590614490565b80601f016020809104026020016040519081016040528092919081815260200182805461174190614490565b801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b5050505050915050919050565b60606117a682611d3f565b60006117b0612e73565b905060008151116117d05760405180602001604052806000815250610ce5565b806117da84612e83565b6040516020016117eb929190614831565b6040516020818303038152906040529392505050565b8061180d610d9f611f26565b6118295760405162461bcd60e51b8152600401610a8e906145be565b8161183381611d9e565b610e3487878787876124a7565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611873611f26565b6001600160a01b0316146118995760405162461bcd60e51b8152600401610a8e90614607565b60208190036118bc5760006118b082840184613a3f565b90506112668482611f35565b60006118ca82840184614860565b805190915060005b81811015610fad576118fd868483815181106118f0576118f06144df565b6020026020010151611f35565b8061190781614551565b9150506118d2565b8061191b610d9f611f26565b6119375760405162461bcd60e51b8152600401610a8e906145be565b8161194181611d9e565b610e348787878787612f83565b6000611958611f26565b6001600160a01b03811660009081526101356020526040812054919250036119cc5760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610a8e565b61100781612f99565b6060816001600160401b038111156119ef576119ef613f63565b604051908082528060200260200182016040528015611a2257816020015b6060815260200190600190039081611a0d5790505b50905060005b82811015611a8157611a51848483818110611a4557611a456144df565b9050602002013561162f565b828281518110611a6357611a636144df565b60200260200101819052508080611a7990614551565b915050611a28565b5092915050565b610134546001600160a01b0316611a9d611f26565b6001600160a01b031614611ac35760405162461bcd60e51b8152600401610a8e9061456a565b61013454611ada906001600160a01b031684611f35565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611b0c929190614793565b60405180910390a2505050565b600054610100900460ff1615808015611b395750600054600160ff909116105b80611b535750303b158015611b53575060005460ff166001145b611bb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a8e565b6000805460ff191660011790558015611bd9576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611c8191612fde565b611c8961301e565b611c9161301e565b611c9a83613047565b611ca382613077565b8015610ddf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b1480611d2057506001600160e01b03198216635b5e139f60e01b145b8061086e57506301ffc9a760e01b6001600160e01b031983161461086e565b6000818152606760205260409020546001600160a01b03166110075760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a8e565b303303611dfb57611dad6130a7565b81146110075760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610a8e565b611007816130bb565b6000611e0f8261106a565b9050806001600160a01b0316836001600160a01b031603611e7c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a8e565b806001600160a01b0316611e8e611f26565b6001600160a01b03161480611eaa5750611eaa816107b6611f26565b611f1c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610a8e565b61094183836130e9565b6000611f30613157565b905090565b6001600160a01b038216611f8b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a8e565b6000818152606760205260409020546001600160a01b031615611ff05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a8e565b611ffc60008383613172565b6001600160a01b03821660009081526068602052604081208054600192906120259084906148f0565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061208d6126b9565b905061209981836130e9565b600080516020614c4a83398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb916120f6918891309190604401614903565b600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b5050505050505050565b6060610ce5836040516020016121449190614649565b6040516020818303038152906040528051906020012060001c8361320f565b606061216e856130bb565b600080876001600160a01b0316866121888b8a89896132f1565b6040516121959190614649565b60006040518083038160008787f1925050503d80600081146121d3576040519150601f19603f3d011682016040523d82523d6000602084013e6121d8565b606091505b5090925090506121e9603f87614945565b5a116121f7576121f7614959565b61223782826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250613321565b9998505050505050505050565b805160009081905b8015611a815761227f828561226260018561496f565b81518110612272576122726144df565b602002602001015161335a565b91508061228b81614982565b91505061224c565b61229c81613406565b6040516020016122ae91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b03166123138261106a565b6001600160a01b0316146123775760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a8e565b6001600160a01b0382166123d95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a8e565b6123e4838383613172565b6123ef6000826130e9565b6001600160a01b038316600090815260686020526040812080546001929061241890849061496f565b90915550506001600160a01b03821660009081526068602052604081208054600192906124469084906148f0565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b84811015610fad576125038686838181106124c7576124c76144df565b90506020028101906124d991906144f5565b8686858181106124eb576124eb6144df565b90506020028101906124fd91906144f5565b86612861565b8061250d81614551565b9150506124aa565b606060008260008151811061252c5761252c6144df565b602002602001015190506000600190505b8351811015611a815781848281518110612559576125596144df565b6020026020010151604051602001612572929190614999565b6040516020818303038152906040529150808061258e90614551565b91505061253d565b61dead6001600160a01b038416148015906125c857506001600160a01b03831660009081526101356020526040902054155b1561094157610941838383612a75565b6000806125e48361106a565b9050806001600160a01b0316846001600160a01b0316148061262b57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610bd95750836001600160a01b031661264484610906565b6001600160a01b031614949350505050565b60005b84811015610fad576126a7868683818110612676576126766144df565b9050602002013585858481811061268f5761268f6144df565b90506020028101906126a191906144f5565b85612940565b806126b181614551565b915050612659565b600080516020614c4a833981519152546000906001600160a01b031680156127b65760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612722573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274691906149d5565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa15801561278e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b291906149ee565b9250505b5090565b60006127c58261106a565b90506127d381600084613172565b6127de6000836130e9565b6001600160a01b038116600090815260686020526040812080546001929061280790849061496f565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612876929190614a0b565b60408051601f198184030181528282528051602091820120601f89018290048202840182019092528783529092506128ca91839189908990819084018382808284376000920191909152506129e092505050565b610fad8187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061342e915050565b61294984613563565b6129955760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610a8e565b611266846129a28661162f565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061342e915050565b6129e982613563565b610ec157600082815260c9602052604090206109418282614a1b565b612a0d611f26565b6001600160a01b0316612a1f8261106a565b6001600160a01b0316146110075760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a8e565b6000828152610138602052604090208054612a8f90614490565b9050600003612ab357600082815261013860205260409020612ab18282614a1b565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612b088461162f565b9150612b14848461320f565b90509250929050565b6000818152610137602052604081205460ff16801561086e57506101366000612b44611f26565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b600080516020614c4a83398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ba89086908690600401614793565b600060405180830381600087803b158015612bc257600080fd5b505af1158015610e34573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612c375760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a8e565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015612ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0f91906149d5565b90506000612dbd866060015180519060200120868860200151604051602001612d5d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050818660200151148015612de357508551612de3906001600160a01b03168286613589565b9695505050505050565b612df8848484612300565b612e04848484846136cb565b6112665760405162461bcd60e51b8152600401610a8e90614ada565b612e2a8484611f35565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c395283604051612e5a9190613a2c565b60405180910390a2801561126657611266848484612596565b6060610133805461088390614490565b606081600003612eaa5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ed45780612ebe81614551565b9150612ecd9050600a83614945565b9150612eae565b6000816001600160401b03811115612eee57612eee613f63565b6040519080825280601f01601f191660200182016040528015612f18576020820181803683370190505b5090505b8415610bd957612f2d60018361496f565b9150612f3a600a86614b2c565b612f459060306148f0565b60f81b818381518110612f5a57612f5a6144df565b60200101906001600160f81b031916908160001a905350612f7c600a86614945565b9450612f1c565b612f8c81612293565b610ddf85858585856124a7565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166130055760405162461bcd60e51b8152600401610a8e90614b40565b60656130118382614a1b565b5060666109418282614a1b565b600054610100900460ff166130455760405162461bcd60e51b8152600401610a8e90614b40565b565b600054610100900460ff1661306e5760405162461bcd60e51b8152600401610a8e90614b40565b611007816137d0565b600054610100900460ff1661309e5760405162461bcd60e51b8152600401610a8e90614b40565b61100781613829565b60003033036130b85750601f193601355b90565b600081815261010060205260409020546130d69060016148f0565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061311e8261106a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600030330361316d575060331936013560601c90565b503390565b6000818152610137602052604090205460ff16158061319957506001600160a01b03821615155b6131e55760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610a8e565b6001600160a01b038316600090815261013560205260409020548190036109415761094183612f99565b606061321a82612b1d565b15613234575060408051602081019091526000815261086e565b60ca600061324184613406565b81526020019081526020016000206000848152602001908152602001600020805461326b90614490565b80601f016020809104026020016040519081016040528092919081815260200182805461329790614490565b80156132e45780601f106132b9576101008083540402835291602001916132e4565b820191906000526020600020905b8154815290600101906020018083116132c757829003601f168201915b5050505050905092915050565b606082858560405160200161330893929190614b8b565b6040516020818303038152906040529050949350505050565b60608315613330575081610ce5565b8251156133405782518084602001fd5b8160405162461bcd60e51b8152600401610a8e9190613a2c565b600081516000036133a55760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610a8e565b82826040516020016133b79190614649565b604051602081830303815290604052805190602001206040516020016133e7929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb6020526040812054156127b657600082815260cb602052604090205461086e565b60ca600061343b83613406565b81526020019081526020016000206000858152602001908152602001600020805461346590614490565b90506000036134bd578260405161347c9190614649565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f86856040516134b49190613a2c565b60405180910390a35b8160ca60006134cb84613406565b8152602001908152602001600020600086815260200190815260200160002090816134f69190614a1b565b50816040516135059190614649565b60405180910390208360405161351b9190614649565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d92868660405161355592919061416e565b60405180910390a450505050565b600081815260c960205260408120805482919061357f90614490565b9050119050919050565b60008060006135988585613877565b909250905060008160048111156135b1576135b1614bca565b1480156135cf5750856001600160a01b0316826001600160a01b0316145b156135df57600192505050610ce5565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613607929190614be0565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516136459190614649565b600060405180830381855afa9150503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b5091509150818015613698575080516020145b80156136bf57508051630b135d3f60e11b906136bd90830160209081019084016149d5565b145b98975050505050505050565b60006001600160a01b0384163b156137c857836001600160a01b031663150b7a026136f4611f26565b8786866040518563ffffffff1660e01b81526004016137169493929190614bf9565b6020604051808303816000875af1925050508015613751575060408051601f3d908101601f1916820190925261374e91810190614c2c565b60015b6137ae573d80801561377f576040519150601f19603f3d011682016040523d82523d6000602084013e613784565b606091505b5080516000036137a65760405162461bcd60e51b8152600401610a8e90614ada565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bd9565b506001610bd9565b600054610100900460ff166137f75760405162461bcd60e51b8152600401610a8e90614b40565b80600080516020614c4a8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff166138505760405162461bcd60e51b8152600401610a8e90614b40565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613808565b60008082516041036138ad5760208301516040840151606085015160001a6138a1878285856138bc565b945094505050506138b5565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156138f357506000905060036139a0565b8460ff16601b1415801561390b57508460ff16601c14155b1561391c57506000905060046139a0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613970573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613999576000600192509250506139a0565b9150600090505b94509492505050565b6001600160e01b03198116811461100757600080fd5b6000602082840312156139d157600080fd5b8135610ce5816139a9565b60005b838110156139f75781810151838201526020016139df565b50506000910152565b60008151808452613a188160208601602086016139dc565b601f01601f19169290920160200192915050565b602081526000610ce56020830184613a00565b600060208284031215613a5157600080fd5b5035919050565b6001600160a01b038116811461100757600080fd5b60008060408385031215613a8057600080fd5b8235613a8b81613a58565b946020939093013593505050565b60008083601f840112613aab57600080fd5b5081356001600160401b03811115613ac257600080fd5b6020830191508360208285010111156138b557600080fd5b600080600080600060808688031215613af257600080fd5b8535613afd81613a58565b94506020860135613b0d81613a58565b93506040860135925060608601356001600160401b03811115613b2f57600080fd5b613b3b88828901613a99565b969995985093965092949392505050565b60008083601f840112613b5e57600080fd5b5081356001600160401b03811115613b7557600080fd5b6020830191508360208260051b85010111156138b557600080fd5b600080600060408486031215613ba557600080fd5b83356001600160401b03811115613bbb57600080fd5b613bc786828701613b4c565b909790965060209590950135949350505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613c23578284038952613c11848351613a00565b98850198935090840190600101613bf9565b5091979650505050505050565b602081526000610ce56020830184613bdb565b600080600060408486031215613c5857600080fd5b83356001600160401b03811115613c6e57600080fd5b613bc786828701613a99565b600080600060408486031215613c8f57600080fd5b83356001600160401b0380821115613ca657600080fd5b9085019060808288031215613cba57600080fd5b90935060208501359080821115613cd057600080fd5b50613cdd86828701613a99565b9497909650939450505050565b80358015158114613cfa57600080fd5b919050565b60008060008060008060008060a0898b031215613d1b57600080fd5b8835613d2681613a58565b975060208901356001600160401b0380821115613d4257600080fd5b613d4e8c838d01613b4c565b909950975060408b0135915080821115613d6757600080fd5b613d738c838d01613b4c565b909750955060608b0135915080821115613d8c57600080fd5b50613d998b828c01613b4c565b9094509250613dac905060808a01613cea565b90509295985092959890939650565b600080600060608486031215613dd057600080fd5b8335613ddb81613a58565b92506020840135613deb81613a58565b929592945050506040919091013590565b60008060208385031215613e0f57600080fd5b82356001600160401b03811115613e2557600080fd5b613e3185828601613b4c565b90969095509350505050565b600080600080600060608688031215613e5557600080fd5b85356001600160401b0380821115613e6c57600080fd5b613e7889838a01613b4c565b90975095506020880135915080821115613e9157600080fd5b50613e9e88828901613b4c565b96999598509660400135949350505050565b600080600080600060608688031215613ec857600080fd5b85356001600160401b0380821115613edf57600080fd5b613eeb89838a01613a99565b90975095506020880135915080821115613f0457600080fd5b50613e9e88828901613a99565b60008060008060608587031215613f2757600080fd5b8435935060208501356001600160401b03811115613f4457600080fd5b613f5087828801613a99565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613fa157613fa1613f63565b604052919050565b600082601f830112613fba57600080fd5b81356001600160401b03811115613fd357613fd3613f63565b613fe6601f8201601f1916602001613f79565b818152846020838601011115613ffb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561402a57600080fd5b81356001600160401b0381111561404057600080fd5b610bd984828501613fa9565b60006020828403121561405e57600080fd5b8135610ce581613a58565b60006001600160401b0382111561408257614082613f63565b5060051b60200190565b600061409f61409a84614069565b613f79565b8381529050602080820190600585901b8401868111156140be57600080fd5b845b818110156140f95780356001600160401b038111156140df5760008081fd5b6140eb89828901613fa9565b8552509282019282016140c0565b505050509392505050565b60006020828403121561411657600080fd5b81356001600160401b0381111561412c57600080fd5b8201601f8101841361413d57600080fd5b610bd98482356020840161408c565b6000806040838503121561415f57600080fd5b50508035926020909101359150565b6040815260006141816040830185613a00565b8281036020840152610ce18185613a00565b600080600080606085870312156141a957600080fd5b84356141b481613a58565b93506020850135925060408501356001600160401b038111156141d657600080fd5b6141e287828801613a99565b95989497509550505050565b60008060008060008060006080888a03121561420957600080fd5b87356001600160401b038082111561422057600080fd5b61422c8b838c01613a99565b909950975060208a0135965060408a013591508082111561424c57600080fd5b6142588b838c01613b4c565b909650945060608a013591508082111561427157600080fd5b5061427e8a828b01613b4c565b989b979a50959850939692959293505050565b600080602083850312156142a457600080fd5b82356001600160401b038111156142ba57600080fd5b613e3185828601613a99565b600080604083850312156142d957600080fd5b82356142e481613a58565b9150612b1460208401613cea565b6040815260006143056040830185613bdb565b8281036020840152610ce18185613bdb565b6000806000806080858703121561432d57600080fd5b843561433881613a58565b9350602085013561434881613a58565b92506040850135915060608501356001600160401b0381111561436a57600080fd5b61437687828801613fa9565b91505092959194509250565b60008060006040848603121561439757600080fd5b83356143a281613a58565b925060208401356001600160401b038111156143bd57600080fd5b613cdd86828701613a99565b600080604083850312156143dc57600080fd5b82356143e781613a58565b915060208301356143f781613a58565b809150509250929050565b60008060006040848603121561441757600080fd5b8335925060208401356001600160401b038111156143bd57600080fd5b6000806000806080858703121561444a57600080fd5b843561445581613a58565b9350602085013561446581613a58565b9250604085013561447581613a58565b9150606085013561448581613a58565b939692955090935050565b600181811c908216806144a457607f821691505b60208210810361121757634e487b7160e01b600052602260045260246000fd5b6000602082840312156144d657600080fd5b610ce582613cea565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261450c57600080fd5b8301803591506001600160401b0382111561452657600080fd5b6020019150368190038213156138b557600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145635761456361453b565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610ce536848461408c565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b6000825161465b8184602087016139dc565b9190910192915050565b601f82111561094157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b81811015610fad57828155600101614698565b6001600160401b038311156146c2576146c2613f63565b6146d6836146d08354614490565b83614665565b6000601f84116001811461470a57600085156146f25750838201355b600019600387901b1c1916600186901b178355610ddf565b600083815260209020601f19861690835b8281101561473b578685013582556020948501946001909201910161471b565b50868210156147585760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610bd960208301848661476a565b6000608082360312156147b957600080fd5b604051608081016001600160401b0382821081831117156147dc576147dc613f63565b81604052843591506147ed82613a58565b8183526020850135602084015260408501356040840152606085013591508082111561481857600080fd5b5061482536828601613fa9565b60608301525092915050565b600083516148438184602088016139dc565b8351908301906148578183602088016139dc565b01949350505050565b6000602080838503121561487357600080fd5b82356001600160401b0381111561488957600080fd5b8301601f8101851361489a57600080fd5b80356148a861409a82614069565b81815260059190911b820183019083810190878311156148c757600080fd5b928401925b828410156148e5578335825292840192908401906148cc565b979650505050505050565b8082018082111561086e5761086e61453b565b6001600160a01b03848116825283166020820152606060408201819052600090610a9790830184613a00565b634e487b7160e01b600052601260045260246000fd5b6000826149545761495461492f565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561086e5761086e61453b565b6000816149915761499161453b565b506000190190565b600083516149ab8184602088016139dc565b601760f91b90830190815283516149c98160018401602088016139dc565b01600101949350505050565b6000602082840312156149e757600080fd5b5051919050565b600060208284031215614a0057600080fd5b8151610ce581613a58565b8183823760009101908152919050565b81516001600160401b03811115614a3457614a34613f63565b614a4881614a428454614490565b84614665565b602080601f831160018114614a7d5760008415614a655750858301515b600019600386901b1c1916600185901b178555610fad565b600085815260208120601f198616915b82811015614aac57888601518255948401946001909101908401614a8d565b5085821015614aca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082614b3b57614b3b61492f565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008451614b9d8184602089016139dc565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610bd96040830184613a00565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612de390830184613a00565b600060208284031215614c3e57600080fd5b8151610ce5816139a956febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103785760003560e01c806370a08231116101d3578063ba5d40b711610104578063ebf0c717116100a2578063f5c1f76e1161007c578063f5c1f76e14610806578063f7df5c6014610819578063f8c8765e1461082c578063ffa1ad741461083f57600080fd5b8063ebf0c717146107e4578063ec129eea146107eb578063f25eb5c1146107fe57600080fd5b8063c87b56dd116100de578063c87b56dd1461076f578063ce92b33e14610782578063cf2c52cb14610795578063e985e9c5146107a857600080fd5b8063ba5d40b714610736578063bb5b27e114610749578063bebec6b41461075c57600080fd5b8063a22cb46511610171578063ab3b87fe1161014b578063ab3b87fe146106dc578063b3f9e4cb146106ef578063b85afd2814610702578063b88d4fde1461072357600080fd5b8063a22cb4651461068a578063a3f4df7e1461069d578063a4247400146106c957600080fd5b80639508b1c4116101ad5780639508b1c4146106545780639559c0bd1461066757806395d89b411461066f57806399e0dd7c1461067757600080fd5b806370a082311461061b5780637e37479e1461062e57806394d008ef1461064157600080fd5b806342842e0e116102ad578063509602391161024b578063638e5c7811610225578063638e5c78146105b3578063663f7b2a146105c6578063672b9f81146105d95780636ccbae5f146105fa57600080fd5b80635096023914610571578063572b6c05146105845780636352211e146105a057600080fd5b806347c816991161028757806347c81699146105255780634a72584d146105385780634f558e791461054b57806350382c1a1461055e57600080fd5b806342842e0e146104ec57806342966c68146104ff578063430c20811461051257600080fd5b80631bf7e13e1161031a578063276fabb1116102f4578063276fabb11461049257806327f18975146104b3578063310bd74b146104c657806340c10f19146104d957600080fd5b80631bf7e13e146104595780631f71be061461046c57806323b872dd1461047f57600080fd5b8063095ea7b311610356578063095ea7b3146103e5578063150b7a02146103fa5780631bd8cc1a146104265780631be5e7ed1461044657600080fd5b806301ffc9a71461037d57806306fdde03146103a5578063081812fc146103ba575b600080fd5b61039061038b3660046139bf565b610863565b60405190151581526020015b60405180910390f35b6103ad610874565b60405161039c9190613a2c565b6103cd6103c8366004613a3f565b610906565b6040516001600160a01b03909116815260200161039c565b6103f86103f3366004613a6d565b61092d565b005b61040d610408366004613ada565b610946565b6040516001600160e01b0319909116815260200161039c565b610439610434366004613b90565b610aa0565b60405161039c9190613c30565b6103ad610454366004613c43565b610b96565b6103ad610467366004613c7a565b610be1565b6103f861047a366004613cff565b610cec565b6103f861048d366004613dbb565b610d93565b6104a56104a0366004613dfc565b610de6565b60405190815260200161039c565b6103f86104c1366004613e3d565b610df5565b6103f86104d4366004613a3f565b610e3d565b6103f86104e7366004613a6d565b610e78565b6103f86104fa366004613dbb565b610ec5565b6103f861050d366004613a3f565b610ee0565b610390610520366004613a6d565b610f24565b6103f8610533366004613eb0565b610f30565b6103f8610546366004613f11565b610f6f565b610390610559366004613a3f565b610fb5565b6103f861056c366004614018565b610fd4565b6103f861057f36600461404c565b61100a565b61039061059236600461404c565b6001600160a01b0316301490565b6103cd6105ae366004613a3f565b61106a565b6103f86105c1366004613a3f565b6110ca565b6103f86105d4366004614104565b611115565b6105ec6105e736600461414c565b61114e565b60405161039c92919061416e565b6104a5610608366004613a3f565b6000908152610100602052604090205490565b6104a561062936600461404c565b611166565b6104a561063c36600461404c565b6111ec565b6103f861064f366004614193565b61121d565b6103f86106623660046141ee565b61126c565b6104a5601481565b6103ad6112f3565b6103f8610685366004614291565b611302565b6103f86106983660046142c6565b611389565b6103ad6040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103906106d7366004613c7a565b61139b565b6103f86106ea366004613a6d565b6113e6565b6103cd6106fd366004613a3f565b61142b565b610715610710366004613b90565b611455565b60405161039c9291906142f2565b6103f8610731366004614317565b611577565b6103f8610744366004613cff565b6115be565b6103ad610757366004613a3f565b61162f565b6103ad61076a36600461404c565b6116d1565b6103ad61077d366004613a3f565b61179b565b6103f8610790366004613e3d565b611801565b6103f86107a3366004614382565b611840565b6103906107b63660046143c9565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104a5565b6103f86107f9366004613e3d565b61190f565b6103f861194e565b610439610814366004613dfc565b6119d5565b6103f8610827366004614402565b611a88565b6103f861083a366004614434565b611b19565b6103ad60405180604001604052806005815260200164302e372e3360d81b81525081565b600061086e82611cef565b92915050565b60606065805461088390614490565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90614490565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b600061091182611d3f565b506000908152606960205260409020546001600160a01b031690565b8061093781611d9e565b6109418383611e04565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b031661097b611f26565b6001600160a01b031603610a3c57610991611f26565b6001600160a01b03166342966c68856040518263ffffffff1660e01b81526004016109be91815260200190565b600060405180830381600087803b1580156109d857600080fd5b505af11580156109ec573d6000803e3d6000fd5b505050821580159150610a065750610a06828401846144c4565b15610a2457610a153085611f35565b610a1f8585612083565b610a2e565b610a2e8585611f35565b50630a85bd0160e11b610a97565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610aba57610aba613f63565b604051908082528060200260200182016040528015610aed57816020015b6060815260200190600190039081610ad85790505b50905060005b83811015610b8e57610b5e858583818110610b1057610b106144df565b9050602002810190610b2291906144f5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061212e915050565b828281518110610b7057610b706144df565b60200260200101819052508080610b8690614551565b915050610af3565b509392505050565b6060610bd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061212e915050565b949350505050565b606060005a9050610bf385858561139b565b610c4f5760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610a8e565b610ce1610c5f602087018761404c565b30604088013584610c7360608b018b6144f5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061216392505050565b9150505b9392505050565b610134546001600160a01b0316610d01611f26565b6001600160a01b031614610d275760405162461bcd60e51b8152600401610a8e9061456a565b6000610d3b610d36888a6145b1565b612244565b9050610d4681612293565b610d59610d528261106a565b8a83612300565b610d6686868686856124a7565b8115610d8857610d888982610d83610d7e8b8d6145b1565b612515565b612596565b505050505050505050565b80610da5610d9f611f26565b826125d8565b610dc15760405162461bcd60e51b8152600401610a8e906145be565b81610dcb81611d9e565b610dd483612293565b610ddf858585612300565b5050505050565b6000610ce5610d3683856145b1565b80610e01610d9f611f26565b610e1d5760405162461bcd60e51b8152600401610a8e906145be565b81610e2781611d9e565b610e348787878787612656565b50505050505050565b80610e49610d9f611f26565b610e655760405162461bcd60e51b8152600401610a8e906145be565b81610e6f81611d9e565b61094183612293565b610e806126b9565b6001600160a01b0316610e91611f26565b6001600160a01b031614610eb75760405162461bcd60e51b8152600401610a8e90614607565b610ec18282611f35565b5050565b61094183838360405180602001604052806000815250611577565b80610eec610d9f611f26565b610f085760405162461bcd60e51b8152600401610a8e906145be565b81610f1281611d9e565b610f1b83612293565b610941836127ba565b6000610ce583836125d8565b80610f3c610d9f611f26565b610f585760405162461bcd60e51b8152600401610a8e906145be565b81610f6281611d9e565b610e348787878787612861565b80610f7b610d9f611f26565b610f975760405162461bcd60e51b8152600401610a8e906145be565b81610fa181611d9e565b610fad86868686612940565b505050505050565b6000818152606760205260408120546001600160a01b0316151561086e565b61100781604051602001610fe89190614649565b6040516020818303038152906040528051906020012060001c826129e0565b50565b610134546001600160a01b031661101f611f26565b6001600160a01b0316146110455760405162461bcd60e51b8152600401610a8e9061456a565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b6000818152606760205260408120546001600160a01b03168061086e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a8e565b806110d6610d9f611f26565b6110f25760405162461bcd60e51b8152600401610a8e906145be565b6111046110fd611f26565b3084612300565b610ec161110f611f26565b83612083565b600061112082612244565b905061112b81612a05565b61113481611d9e565b610ec161113f611f26565b8261114985612515565b612a75565b60608061115b8484612afc565b909590945092505050565b60006001600160a01b0382166111d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a8e565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b0381166000908152610135602052604081205461120f81612b1d565b611217578091505b50919050565b6112256126b9565b6001600160a01b0316611236611f26565b6001600160a01b03161461125c5760405162461bcd60e51b8152600401610a8e90614607565b6112668484611f35565b50505050565b6112768787612b67565b61127e611f26565b6001600160a01b03166112908661106a565b6001600160a01b0316146112e65760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a8e565b610e3484848484896124a7565b60606066805461088390614490565b610134546001600160a01b0316611317611f26565b6001600160a01b03161461133d5760405162461bcd60e51b8152600401610a8e9061456a565b61013361134b8284836146ab565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b828260405161137d929190614793565b60405180910390a15050565b610ec1611394611f26565b8383612bd6565b6000610bd96113a9856147a7565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca492505050565b806113f2610d9f611f26565b61140e5760405162461bcd60e51b8152600401610a8e906145be565b8161141881611d9e565b6112666114248461106a565b8585612300565b6000818152606760205260408120546001600160a01b031661144e57600061086e565b3092915050565b606080836001600160401b0381111561147057611470613f63565b6040519080825280602002602001820160405280156114a357816020015b606081526020019060019003908161148e5790505b509150836001600160401b038111156114be576114be613f63565b6040519080825280602002602001820160405280156114f157816020015b60608152602001906001900390816114dc5790505b50905060005b8481101561156e57611521868683818110611514576115146144df565b9050602002013585612afc565b848381518110611533576115336144df565b6020026020010184848151811061154c5761154c6144df565b602002602001018290528290525050808061156690614551565b9150506114f7565b50935093915050565b81611583610d9f611f26565b61159f5760405162461bcd60e51b8152600401610a8e906145be565b826115a981611d9e565b6115b284612293565b610fad86868686612ded565b610134546001600160a01b03166115d3611f26565b6001600160a01b0316146115f95760405162461bcd60e51b8152600401610a8e9061456a565b6000611608610d36888a6145b1565b9050611622898261161c610d7e8b8d6145b1565b85612e20565b610d8886868686856124a7565b600081815260c96020526040902080546060919061164c90614490565b80601f016020809104026020016040519081016040528092919081815260200182805461167890614490565b80156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b50505050509050919050565b6001600160a01b038116600090815261013560205260409020546060906116f781612b1d565b61121757600081815261013860205260409020805461171590614490565b80601f016020809104026020016040519081016040528092919081815260200182805461174190614490565b801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b5050505050915050919050565b60606117a682611d3f565b60006117b0612e73565b905060008151116117d05760405180602001604052806000815250610ce5565b806117da84612e83565b6040516020016117eb929190614831565b6040516020818303038152906040529392505050565b8061180d610d9f611f26565b6118295760405162461bcd60e51b8152600401610a8e906145be565b8161183381611d9e565b610e3487878787876124a7565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611873611f26565b6001600160a01b0316146118995760405162461bcd60e51b8152600401610a8e90614607565b60208190036118bc5760006118b082840184613a3f565b90506112668482611f35565b60006118ca82840184614860565b805190915060005b81811015610fad576118fd868483815181106118f0576118f06144df565b6020026020010151611f35565b8061190781614551565b9150506118d2565b8061191b610d9f611f26565b6119375760405162461bcd60e51b8152600401610a8e906145be565b8161194181611d9e565b610e348787878787612f83565b6000611958611f26565b6001600160a01b03811660009081526101356020526040812054919250036119cc5760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610a8e565b61100781612f99565b6060816001600160401b038111156119ef576119ef613f63565b604051908082528060200260200182016040528015611a2257816020015b6060815260200190600190039081611a0d5790505b50905060005b82811015611a8157611a51848483818110611a4557611a456144df565b9050602002013561162f565b828281518110611a6357611a636144df565b60200260200101819052508080611a7990614551565b915050611a28565b5092915050565b610134546001600160a01b0316611a9d611f26565b6001600160a01b031614611ac35760405162461bcd60e51b8152600401610a8e9061456a565b61013454611ada906001600160a01b031684611f35565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611b0c929190614793565b60405180910390a2505050565b600054610100900460ff1615808015611b395750600054600160ff909116105b80611b535750303b158015611b53575060005460ff166001145b611bb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a8e565b6000805460ff191660011790558015611bd9576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611c8191612fde565b611c8961301e565b611c9161301e565b611c9a83613047565b611ca382613077565b8015610ddf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b1480611d2057506001600160e01b03198216635b5e139f60e01b145b8061086e57506301ffc9a760e01b6001600160e01b031983161461086e565b6000818152606760205260409020546001600160a01b03166110075760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a8e565b303303611dfb57611dad6130a7565b81146110075760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610a8e565b611007816130bb565b6000611e0f8261106a565b9050806001600160a01b0316836001600160a01b031603611e7c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a8e565b806001600160a01b0316611e8e611f26565b6001600160a01b03161480611eaa5750611eaa816107b6611f26565b611f1c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610a8e565b61094183836130e9565b6000611f30613157565b905090565b6001600160a01b038216611f8b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a8e565b6000818152606760205260409020546001600160a01b031615611ff05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a8e565b611ffc60008383613172565b6001600160a01b03821660009081526068602052604081208054600192906120259084906148f0565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061208d6126b9565b905061209981836130e9565b600080516020614c4a83398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb916120f6918891309190604401614903565b600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b5050505050505050565b6060610ce5836040516020016121449190614649565b6040516020818303038152906040528051906020012060001c8361320f565b606061216e856130bb565b600080876001600160a01b0316866121888b8a89896132f1565b6040516121959190614649565b60006040518083038160008787f1925050503d80600081146121d3576040519150601f19603f3d011682016040523d82523d6000602084013e6121d8565b606091505b5090925090506121e9603f87614945565b5a116121f7576121f7614959565b61223782826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250613321565b9998505050505050505050565b805160009081905b8015611a815761227f828561226260018561496f565b81518110612272576122726144df565b602002602001015161335a565b91508061228b81614982565b91505061224c565b61229c81613406565b6040516020016122ae91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b03166123138261106a565b6001600160a01b0316146123775760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a8e565b6001600160a01b0382166123d95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a8e565b6123e4838383613172565b6123ef6000826130e9565b6001600160a01b038316600090815260686020526040812080546001929061241890849061496f565b90915550506001600160a01b03821660009081526068602052604081208054600192906124469084906148f0565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b84811015610fad576125038686838181106124c7576124c76144df565b90506020028101906124d991906144f5565b8686858181106124eb576124eb6144df565b90506020028101906124fd91906144f5565b86612861565b8061250d81614551565b9150506124aa565b606060008260008151811061252c5761252c6144df565b602002602001015190506000600190505b8351811015611a815781848281518110612559576125596144df565b6020026020010151604051602001612572929190614999565b6040516020818303038152906040529150808061258e90614551565b91505061253d565b61dead6001600160a01b038416148015906125c857506001600160a01b03831660009081526101356020526040902054155b1561094157610941838383612a75565b6000806125e48361106a565b9050806001600160a01b0316846001600160a01b0316148061262b57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610bd95750836001600160a01b031661264484610906565b6001600160a01b031614949350505050565b60005b84811015610fad576126a7868683818110612676576126766144df565b9050602002013585858481811061268f5761268f6144df565b90506020028101906126a191906144f5565b85612940565b806126b181614551565b915050612659565b600080516020614c4a833981519152546000906001600160a01b031680156127b65760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612722573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274691906149d5565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa15801561278e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b291906149ee565b9250505b5090565b60006127c58261106a565b90506127d381600084613172565b6127de6000836130e9565b6001600160a01b038116600090815260686020526040812080546001929061280790849061496f565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612876929190614a0b565b60408051601f198184030181528282528051602091820120601f89018290048202840182019092528783529092506128ca91839189908990819084018382808284376000920191909152506129e092505050565b610fad8187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061342e915050565b61294984613563565b6129955760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610a8e565b611266846129a28661162f565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061342e915050565b6129e982613563565b610ec157600082815260c9602052604090206109418282614a1b565b612a0d611f26565b6001600160a01b0316612a1f8261106a565b6001600160a01b0316146110075760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a8e565b6000828152610138602052604090208054612a8f90614490565b9050600003612ab357600082815261013860205260409020612ab18282614a1b565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612b088461162f565b9150612b14848461320f565b90509250929050565b6000818152610137602052604081205460ff16801561086e57506101366000612b44611f26565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b600080516020614c4a83398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ba89086908690600401614793565b600060405180830381600087803b158015612bc257600080fd5b505af1158015610e34573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612c375760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a8e565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015612ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0f91906149d5565b90506000612dbd866060015180519060200120868860200151604051602001612d5d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050818660200151148015612de357508551612de3906001600160a01b03168286613589565b9695505050505050565b612df8848484612300565b612e04848484846136cb565b6112665760405162461bcd60e51b8152600401610a8e90614ada565b612e2a8484611f35565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c395283604051612e5a9190613a2c565b60405180910390a2801561126657611266848484612596565b6060610133805461088390614490565b606081600003612eaa5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ed45780612ebe81614551565b9150612ecd9050600a83614945565b9150612eae565b6000816001600160401b03811115612eee57612eee613f63565b6040519080825280601f01601f191660200182016040528015612f18576020820181803683370190505b5090505b8415610bd957612f2d60018361496f565b9150612f3a600a86614b2c565b612f459060306148f0565b60f81b818381518110612f5a57612f5a6144df565b60200101906001600160f81b031916908160001a905350612f7c600a86614945565b9450612f1c565b612f8c81612293565b610ddf85858585856124a7565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166130055760405162461bcd60e51b8152600401610a8e90614b40565b60656130118382614a1b565b5060666109418282614a1b565b600054610100900460ff166130455760405162461bcd60e51b8152600401610a8e90614b40565b565b600054610100900460ff1661306e5760405162461bcd60e51b8152600401610a8e90614b40565b611007816137d0565b600054610100900460ff1661309e5760405162461bcd60e51b8152600401610a8e90614b40565b61100781613829565b60003033036130b85750601f193601355b90565b600081815261010060205260409020546130d69060016148f0565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061311e8261106a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600030330361316d575060331936013560601c90565b503390565b6000818152610137602052604090205460ff16158061319957506001600160a01b03821615155b6131e55760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610a8e565b6001600160a01b038316600090815261013560205260409020548190036109415761094183612f99565b606061321a82612b1d565b15613234575060408051602081019091526000815261086e565b60ca600061324184613406565b81526020019081526020016000206000848152602001908152602001600020805461326b90614490565b80601f016020809104026020016040519081016040528092919081815260200182805461329790614490565b80156132e45780601f106132b9576101008083540402835291602001916132e4565b820191906000526020600020905b8154815290600101906020018083116132c757829003601f168201915b5050505050905092915050565b606082858560405160200161330893929190614b8b565b6040516020818303038152906040529050949350505050565b60608315613330575081610ce5565b8251156133405782518084602001fd5b8160405162461bcd60e51b8152600401610a8e9190613a2c565b600081516000036133a55760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610a8e565b82826040516020016133b79190614649565b604051602081830303815290604052805190602001206040516020016133e7929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb6020526040812054156127b657600082815260cb602052604090205461086e565b60ca600061343b83613406565b81526020019081526020016000206000858152602001908152602001600020805461346590614490565b90506000036134bd578260405161347c9190614649565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f86856040516134b49190613a2c565b60405180910390a35b8160ca60006134cb84613406565b8152602001908152602001600020600086815260200190815260200160002090816134f69190614a1b565b50816040516135059190614649565b60405180910390208360405161351b9190614649565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d92868660405161355592919061416e565b60405180910390a450505050565b600081815260c960205260408120805482919061357f90614490565b9050119050919050565b60008060006135988585613877565b909250905060008160048111156135b1576135b1614bca565b1480156135cf5750856001600160a01b0316826001600160a01b0316145b156135df57600192505050610ce5565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613607929190614be0565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516136459190614649565b600060405180830381855afa9150503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b5091509150818015613698575080516020145b80156136bf57508051630b135d3f60e11b906136bd90830160209081019084016149d5565b145b98975050505050505050565b60006001600160a01b0384163b156137c857836001600160a01b031663150b7a026136f4611f26565b8786866040518563ffffffff1660e01b81526004016137169493929190614bf9565b6020604051808303816000875af1925050508015613751575060408051601f3d908101601f1916820190925261374e91810190614c2c565b60015b6137ae573d80801561377f576040519150601f19603f3d011682016040523d82523d6000602084013e613784565b606091505b5080516000036137a65760405162461bcd60e51b8152600401610a8e90614ada565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bd9565b506001610bd9565b600054610100900460ff166137f75760405162461bcd60e51b8152600401610a8e90614b40565b80600080516020614c4a8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff166138505760405162461bcd60e51b8152600401610a8e90614b40565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613808565b60008082516041036138ad5760208301516040840151606085015160001a6138a1878285856138bc565b945094505050506138b5565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156138f357506000905060036139a0565b8460ff16601b1415801561390b57508460ff16601c14155b1561391c57506000905060046139a0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613970573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613999576000600192509250506139a0565b9150600090505b94509492505050565b6001600160e01b03198116811461100757600080fd5b6000602082840312156139d157600080fd5b8135610ce5816139a9565b60005b838110156139f75781810151838201526020016139df565b50506000910152565b60008151808452613a188160208601602086016139dc565b601f01601f19169290920160200192915050565b602081526000610ce56020830184613a00565b600060208284031215613a5157600080fd5b5035919050565b6001600160a01b038116811461100757600080fd5b60008060408385031215613a8057600080fd5b8235613a8b81613a58565b946020939093013593505050565b60008083601f840112613aab57600080fd5b5081356001600160401b03811115613ac257600080fd5b6020830191508360208285010111156138b557600080fd5b600080600080600060808688031215613af257600080fd5b8535613afd81613a58565b94506020860135613b0d81613a58565b93506040860135925060608601356001600160401b03811115613b2f57600080fd5b613b3b88828901613a99565b969995985093965092949392505050565b60008083601f840112613b5e57600080fd5b5081356001600160401b03811115613b7557600080fd5b6020830191508360208260051b85010111156138b557600080fd5b600080600060408486031215613ba557600080fd5b83356001600160401b03811115613bbb57600080fd5b613bc786828701613b4c565b909790965060209590950135949350505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613c23578284038952613c11848351613a00565b98850198935090840190600101613bf9565b5091979650505050505050565b602081526000610ce56020830184613bdb565b600080600060408486031215613c5857600080fd5b83356001600160401b03811115613c6e57600080fd5b613bc786828701613a99565b600080600060408486031215613c8f57600080fd5b83356001600160401b0380821115613ca657600080fd5b9085019060808288031215613cba57600080fd5b90935060208501359080821115613cd057600080fd5b50613cdd86828701613a99565b9497909650939450505050565b80358015158114613cfa57600080fd5b919050565b60008060008060008060008060a0898b031215613d1b57600080fd5b8835613d2681613a58565b975060208901356001600160401b0380821115613d4257600080fd5b613d4e8c838d01613b4c565b909950975060408b0135915080821115613d6757600080fd5b613d738c838d01613b4c565b909750955060608b0135915080821115613d8c57600080fd5b50613d998b828c01613b4c565b9094509250613dac905060808a01613cea565b90509295985092959890939650565b600080600060608486031215613dd057600080fd5b8335613ddb81613a58565b92506020840135613deb81613a58565b929592945050506040919091013590565b60008060208385031215613e0f57600080fd5b82356001600160401b03811115613e2557600080fd5b613e3185828601613b4c565b90969095509350505050565b600080600080600060608688031215613e5557600080fd5b85356001600160401b0380821115613e6c57600080fd5b613e7889838a01613b4c565b90975095506020880135915080821115613e9157600080fd5b50613e9e88828901613b4c565b96999598509660400135949350505050565b600080600080600060608688031215613ec857600080fd5b85356001600160401b0380821115613edf57600080fd5b613eeb89838a01613a99565b90975095506020880135915080821115613f0457600080fd5b50613e9e88828901613a99565b60008060008060608587031215613f2757600080fd5b8435935060208501356001600160401b03811115613f4457600080fd5b613f5087828801613a99565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613fa157613fa1613f63565b604052919050565b600082601f830112613fba57600080fd5b81356001600160401b03811115613fd357613fd3613f63565b613fe6601f8201601f1916602001613f79565b818152846020838601011115613ffb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561402a57600080fd5b81356001600160401b0381111561404057600080fd5b610bd984828501613fa9565b60006020828403121561405e57600080fd5b8135610ce581613a58565b60006001600160401b0382111561408257614082613f63565b5060051b60200190565b600061409f61409a84614069565b613f79565b8381529050602080820190600585901b8401868111156140be57600080fd5b845b818110156140f95780356001600160401b038111156140df5760008081fd5b6140eb89828901613fa9565b8552509282019282016140c0565b505050509392505050565b60006020828403121561411657600080fd5b81356001600160401b0381111561412c57600080fd5b8201601f8101841361413d57600080fd5b610bd98482356020840161408c565b6000806040838503121561415f57600080fd5b50508035926020909101359150565b6040815260006141816040830185613a00565b8281036020840152610ce18185613a00565b600080600080606085870312156141a957600080fd5b84356141b481613a58565b93506020850135925060408501356001600160401b038111156141d657600080fd5b6141e287828801613a99565b95989497509550505050565b60008060008060008060006080888a03121561420957600080fd5b87356001600160401b038082111561422057600080fd5b61422c8b838c01613a99565b909950975060208a0135965060408a013591508082111561424c57600080fd5b6142588b838c01613b4c565b909650945060608a013591508082111561427157600080fd5b5061427e8a828b01613b4c565b989b979a50959850939692959293505050565b600080602083850312156142a457600080fd5b82356001600160401b038111156142ba57600080fd5b613e3185828601613a99565b600080604083850312156142d957600080fd5b82356142e481613a58565b9150612b1460208401613cea565b6040815260006143056040830185613bdb565b8281036020840152610ce18185613bdb565b6000806000806080858703121561432d57600080fd5b843561433881613a58565b9350602085013561434881613a58565b92506040850135915060608501356001600160401b0381111561436a57600080fd5b61437687828801613fa9565b91505092959194509250565b60008060006040848603121561439757600080fd5b83356143a281613a58565b925060208401356001600160401b038111156143bd57600080fd5b613cdd86828701613a99565b600080604083850312156143dc57600080fd5b82356143e781613a58565b915060208301356143f781613a58565b809150509250929050565b60008060006040848603121561441757600080fd5b8335925060208401356001600160401b038111156143bd57600080fd5b6000806000806080858703121561444a57600080fd5b843561445581613a58565b9350602085013561446581613a58565b9250604085013561447581613a58565b9150606085013561448581613a58565b939692955090935050565b600181811c908216806144a457607f821691505b60208210810361121757634e487b7160e01b600052602260045260246000fd5b6000602082840312156144d657600080fd5b610ce582613cea565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261450c57600080fd5b8301803591506001600160401b0382111561452657600080fd5b6020019150368190038213156138b557600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145635761456361453b565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610ce536848461408c565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b6000825161465b8184602087016139dc565b9190910192915050565b601f82111561094157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b81811015610fad57828155600101614698565b6001600160401b038311156146c2576146c2613f63565b6146d6836146d08354614490565b83614665565b6000601f84116001811461470a57600085156146f25750838201355b600019600387901b1c1916600186901b178355610ddf565b600083815260209020601f19861690835b8281101561473b578685013582556020948501946001909201910161471b565b50868210156147585760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610bd960208301848661476a565b6000608082360312156147b957600080fd5b604051608081016001600160401b0382821081831117156147dc576147dc613f63565b81604052843591506147ed82613a58565b8183526020850135602084015260408501356040840152606085013591508082111561481857600080fd5b5061482536828601613fa9565b60608301525092915050565b600083516148438184602088016139dc565b8351908301906148578183602088016139dc565b01949350505050565b6000602080838503121561487357600080fd5b82356001600160401b0381111561488957600080fd5b8301601f8101851361489a57600080fd5b80356148a861409a82614069565b81815260059190911b820183019083810190878311156148c757600080fd5b928401925b828410156148e5578335825292840192908401906148cc565b979650505050505050565b8082018082111561086e5761086e61453b565b6001600160a01b03848116825283166020820152606060408201819052600090610a9790830184613a00565b634e487b7160e01b600052601260045260246000fd5b6000826149545761495461492f565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561086e5761086e61453b565b6000816149915761499161453b565b506000190190565b600083516149ab8184602088016139dc565b601760f91b90830190815283516149c98160018401602088016139dc565b01600101949350505050565b6000602082840312156149e757600080fd5b5051919050565b600060208284031215614a0057600080fd5b8151610ce581613a58565b8183823760009101908152919050565b81516001600160401b03811115614a3457614a34613f63565b614a4881614a428454614490565b84614665565b602080601f831160018114614a7d5760008415614a655750858301515b600019600386901b1c1916600185901b178555610fad565b600085815260208120601f198616915b82811015614aac57888601518255948401946001909101908401614a8d565b5085821015614aca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082614b3b57614b3b61492f565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008451614b9d8184602089016139dc565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610bd96040830184613a00565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612de390830184613a00565b600060208284031215614c3e57600080fd5b8151610ce5816139a956febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b50614aa08061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610367575f3560e01c806370a08231116101c9578063ba5d40b7116100fe578063ebf0c7171161009e578063f5c1f76e11610079578063f5c1f76e146107f1578063f7df5c6014610804578063f8c8765e14610817578063ffa1ad741461082a575f80fd5b8063ebf0c717146107d0578063ec129eea146107d6578063f25eb5c1146107e9575f80fd5b8063c87b56dd116100d9578063c87b56dd1461075c578063ce92b33e1461076f578063cf2c52cb14610782578063e985e9c514610795575f80fd5b8063ba5d40b714610723578063bb5b27e114610736578063bebec6b414610749575f80fd5b8063a22cb46511610169578063ab3b87fe11610144578063ab3b87fe146106c9578063b3f9e4cb146106dc578063b85afd28146106ef578063b88d4fde14610710575f80fd5b8063a22cb46514610677578063a3f4df7e1461068a578063a4247400146106b6575f80fd5b80639508b1c4116101a45780639508b1c4146106415780639559c0bd1461065457806395d89b411461065c57806399e0dd7c14610664575f80fd5b806370a08231146106085780637e37479e1461061b57806394d008ef1461062e575f80fd5b806342842e0e1161029f578063509602391161023f578063638e5c781161021a578063638e5c78146105a1578063663f7b2a146105b4578063672b9f81146105c75780636ccbae5f146105e8575f80fd5b8063509602391461055f578063572b6c05146105725780636352211e1461058e575f80fd5b806347c816991161027a57806347c81699146105135780634a72584d146105265780634f558e791461053957806350382c1a1461054c575f80fd5b806342842e0e146104da57806342966c68146104ed578063430c208114610500575f80fd5b80631bf7e13e1161030a578063276fabb1116102e5578063276fabb11461048057806327f18975146104a1578063310bd74b146104b457806340c10f19146104c7575f80fd5b80631bf7e13e146104475780631f71be061461045a57806323b872dd1461046d575f80fd5b8063095ea7b311610345578063095ea7b3146103d3578063150b7a02146103e85780631bd8cc1a146104145780631be5e7ed14610434575f80fd5b806301ffc9a71461036b57806306fdde0314610393578063081812fc146103a8575b5f80fd5b61037e6103793660046138a2565b61084e565b60405190151581526020015b60405180910390f35b61039b61085e565b60405161038a919061390a565b6103bb6103b636600461391c565b6108ee565b6040516001600160a01b03909116815260200161038a565b6103e66103e1366004613947565b610913565b005b6103fb6103f63660046139ae565b61092c565b6040516001600160e01b0319909116815260200161038a565b610427610422366004613a5b565b610a80565b60405161038a9190613afa565b61039b610442366004613b0c565b610b69565b61039b610455366004613b3f565b610bb3565b6103e6610468366004613bbd565b610cbb565b6103e661047b366004613c71565b610d61565b61049361048e366004613caf565b610db4565b60405190815260200161038a565b6103e66104af366004613ced565b610dc2565b6103e66104c236600461391c565b610e0a565b6103e66104d5366004613947565b610e45565b6103e66104e8366004613c71565b610e92565b6103e66104fb36600461391c565b610eac565b61037e61050e366004613947565b610ef0565b6103e6610521366004613d5a565b610efb565b6103e6610534366004613db5565b610f3a565b61037e61054736600461391c565b610f80565b6103e661055a366004613eb2565b610f9e565b6103e661056d366004613ee3565b610fd3565b61037e610580366004613ee3565b6001600160a01b0316301490565b6103bb61059c36600461391c565b611032565b6103e66105af36600461391c565b611091565b6103e66105c2366004613f94565b6110dc565b6105da6105d5366004613fd8565b611114565b60405161038a929190613ff8565b6104936105f636600461391c565b5f908152610100602052604090205490565b610493610616366004613ee3565b61112c565b610493610629366004613ee3565b6111b0565b6103e661063c36600461401c565b6111e0565b6103e661064f366004614073565b61122f565b610493601481565b61039b6112b6565b6103e661067236600461410e565b6112c5565b6103e6610685366004614140565b61134c565b61039b6040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b61037e6106c4366004613b3f565b61135e565b6103e66106d7366004613947565b6113a7565b6103bb6106ea36600461391c565b6113ec565b6107026106fd366004613a5b565b611414565b60405161038a92919061416a565b6103e661071e36600461418e565b61152a565b6103e6610731366004613bbd565b611571565b61039b61074436600461391c565b6115e1565b61039b610757366004613ee3565b611680565b61039b61076a36600461391c565b611746565b6103e661077d366004613ced565b6117a9565b6103e66107903660046141f5565b6117e8565b61037e6107a3366004614238565b6001600160a01b039182165f908152606a6020908152604080832093909416825291909152205460ff1690565b5f610493565b6103e66107e4366004613ced565b6118aa565b6103e66118e9565b6104276107ff366004613caf565b61196e565b6103e661081236600461426f565b611a15565b6103e661082536600461429d565b611aa6565b61039b60405180604001604052806005815260200164302e372e3360d81b81525081565b5f61085882611c76565b92915050565b60606065805461086d906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906142f6565b80156108e45780601f106108bb576101008083540402835291602001916108e4565b820191905f5260205f20905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b5f6108f882611cc5565b505f908152606960205260409020546001600160a01b031690565b8061091d81611d23565b6109278383611d89565b505050565b5f7f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610960611eaa565b6001600160a01b031603610a1c57610976611eaa565b6001600160a01b03166342966c68856040518263ffffffff1660e01b81526004016109a391815260200190565b5f604051808303815f87803b1580156109ba575f80fd5b505af11580156109cc573d5f803e3d5ffd5b5050508215801591506109e657506109e682840184614328565b15610a04576109f53085611eb8565b6109ff8585612002565b610a0e565b610a0e8585611eb8565b50630a85bd0160e11b610a77565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610a9a57610a9a613e03565b604051908082528060200260200182016040528015610acd57816020015b6060815260200190600190039081610ab85790505b5090505f5b83811015610b6157610b3c858583818110610aef57610aef614341565b9050602002810190610b019190614355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792506120a6915050565b828281518110610b4e57610b4e614341565b6020908102919091010152600101610ad2565b509392505050565b6060610bab84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508692506120a6915050565b949350505050565b60605f5a9050610bc485858561135e565b610c205760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610a6e565b610cb0610c306020870187613ee3565b30604088013584610c4460608b018b614355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f920191909152506120da92505050565b9150505b9392505050565b610134546001600160a01b0316610cd0611eaa565b6001600160a01b031614610cf65760405162461bcd60e51b8152600401610a6e90614397565b5f610d09610d04888a6143de565b6121b6565b9050610d1481612204565b610d27610d2082611032565b8a83612270565b610d348686868685612413565b8115610d5657610d568982610d51610d4c8b8d6143de565b612476565b6124ea565b505050505050505050565b80610d73610d6d611eaa565b8261252b565b610d8f5760405162461bcd60e51b8152600401610a6e906143ea565b81610d9981611d23565b610da283612204565b610dad858585612270565b5050505050565b5f610cb4610d0483856143de565b80610dce610d6d611eaa565b610dea5760405162461bcd60e51b8152600401610a6e906143ea565b81610df481611d23565b610e0187878787876125a7565b50505050505050565b80610e16610d6d611eaa565b610e325760405162461bcd60e51b8152600401610a6e906143ea565b81610e3c81611d23565b61092783612204565b610e4d6125ff565b6001600160a01b0316610e5e611eaa565b6001600160a01b031614610e845760405162461bcd60e51b8152600401610a6e90614433565b610e8e8282611eb8565b5050565b61092783838360405180602001604052805f81525061152a565b80610eb8610d6d611eaa565b610ed45760405162461bcd60e51b8152600401610a6e906143ea565b81610ede81611d23565b610ee783612204565b610927836126f9565b5f610cb4838361252b565b80610f07610d6d611eaa565b610f235760405162461bcd60e51b8152600401610a6e906143ea565b81610f2d81611d23565b610e01878787878761279b565b80610f46610d6d611eaa565b610f625760405162461bcd60e51b8152600401610a6e906143ea565b81610f6c81611d23565b610f7886868686612876565b505050505050565b5f818152606760205260408120546001600160a01b03161515610858565b610fd081604051602001610fb29190614475565b604051602081830303815290604052805190602001205f1c82612915565b50565b610134546001600160a01b0316610fe8611eaa565b6001600160a01b03161461100e5760405162461bcd60e51b8152600401610a6e90614397565b6001600160a01b03165f90815261013660205260409020805460ff19166001179055565b5f818152606760205260408120546001600160a01b0316806108585760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6e565b8061109d610d6d611eaa565b6110b95760405162461bcd60e51b8152600401610a6e906143ea565b6110cb6110c4611eaa565b3084612270565b610e8e6110d6611eaa565b83612002565b5f6110e6826121b6565b90506110f181612939565b6110fa81611d23565b610e8e611105611eaa565b8261110f85612476565b6129a9565b6060806111218484612a2c565b909590945092505050565b5f6001600160a01b0382166111955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a6e565b506001600160a01b03165f9081526068602052604090205490565b6001600160a01b0381165f90815261013560205260408120546111d281612a4d565b6111da578091505b50919050565b6111e86125ff565b6001600160a01b03166111f9611eaa565b6001600160a01b03161461121f5760405162461bcd60e51b8152600401610a6e90614433565b6112298484611eb8565b50505050565b6112398787612a94565b611241611eaa565b6001600160a01b031661125386611032565b6001600160a01b0316146112a95760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a6e565b610e018484848489612413565b60606066805461086d906142f6565b610134546001600160a01b03166112da611eaa565b6001600160a01b0316146113005760405162461bcd60e51b8152600401610a6e90614397565b61013361130e8284836144d4565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b82826040516113409291906145b5565b60405180910390a15050565b610e8e611357611eaa565b8383612afd565b5f610bab61136b856145c8565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bca92505050565b806113b3610d6d611eaa565b6113cf5760405162461bcd60e51b8152600401610a6e906143ea565b816113d981611d23565b6112296113e584611032565b8585612270565b5f818152606760205260408120546001600160a01b031661140d575f610858565b3092915050565b606080836001600160401b0381111561142f5761142f613e03565b60405190808252806020026020018201604052801561146257816020015b606081526020019060019003908161144d5790505b509150836001600160401b0381111561147d5761147d613e03565b6040519080825280602002602001820160405280156114b057816020015b606081526020019060019003908161149b5790505b5090505f5b84811015611521576114df8686838181106114d2576114d2614341565b9050602002013585612a2c565b8483815181106114f1576114f1614341565b6020026020010184848151811061150a5761150a614341565b6020908102919091010191909152526001016114b5565b50935093915050565b81611536610d6d611eaa565b6115525760405162461bcd60e51b8152600401610a6e906143ea565b8261155c81611d23565b61156584612204565b610f7886868686612d0f565b610134546001600160a01b0316611586611eaa565b6001600160a01b0316146115ac5760405162461bcd60e51b8152600401610a6e90614397565b5f6115ba610d04888a6143de565b90506115d489826115ce610d4c8b8d6143de565b85612d42565b610d568686868685612413565b5f81815260c9602052604090208054606091906115fd906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611629906142f6565b80156116745780601f1061164b57610100808354040283529160200191611674565b820191905f5260205f20905b81548152906001019060200180831161165757829003601f168201915b50505050509050919050565b6001600160a01b0381165f90815261013560205260409020546060906116a581612a4d565b6111da575f8181526101386020526040902080546116c2906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116ee906142f6565b80156117395780601f1061171057610100808354040283529160200191611739565b820191905f5260205f20905b81548152906001019060200180831161171c57829003601f168201915b5050505050915050919050565b606061175182611cc5565b5f61175a612d95565b90505f8151116117785760405180602001604052805f815250610cb4565b8061178284612da5565b60405160200161179392919061464f565b6040516020818303038152906040529392505050565b806117b5610d6d611eaa565b6117d15760405162461bcd60e51b8152600401610a6e906143ea565b816117db81611d23565b610e018787878787612413565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b031661181b611eaa565b6001600160a01b0316146118415760405162461bcd60e51b8152600401610a6e90614433565b6020819003611863575f6118578284018461391c565b90506112298482611eb8565b5f6118708284018461467d565b80519091505f5b81811015610f78576118a28684838151811061189557611895614341565b6020026020010151611eb8565b600101611877565b806118b6610d6d611eaa565b6118d25760405162461bcd60e51b8152600401610a6e906143ea565b816118dc81611d23565b610e018787878787612ea1565b5f6118f2611eaa565b6001600160a01b0381165f9081526101356020526040812054919250036119655760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610a6e565b610fd081612eb7565b6060816001600160401b0381111561198857611988613e03565b6040519080825280602002602001820160405280156119bb57816020015b60608152602001906001900390816119a65790505b5090505f5b82811015611a0e576119e98484838181106119dd576119dd614341565b905060200201356115e1565b8282815181106119fb576119fb614341565b60209081029190910101526001016119c0565b5092915050565b610134546001600160a01b0316611a2a611eaa565b6001600160a01b031614611a505760405162461bcd60e51b8152600401610a6e90614397565b61013454611a67906001600160a01b031684611eb8565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611a999291906145b5565b60405180910390a2505050565b5f54610100900460ff1615808015611ac457505f54600160ff909116105b80611add5750303b158015611add57505f5460ff166001145b611b405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a6e565b5f805460ff191660011790558015611b61575f805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611c0991612efb565b611c11612f3a565b611c19612f3a565b611c2283612f62565b611c2b82612f91565b8015610dad575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b5f6001600160e01b031982166380ac58cd60e01b1480611ca657506001600160e01b03198216635b5e139f60e01b145b8061085857506301ffc9a760e01b6001600160e01b0319831614610858565b5f818152606760205260409020546001600160a01b0316610fd05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6e565b303303611d8057611d32612fc0565b8114610fd05760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610a6e565b610fd081612fd3565b5f611d9382611032565b9050806001600160a01b0316836001600160a01b031603611e005760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a6e565b806001600160a01b0316611e12611eaa565b6001600160a01b03161480611e2e5750611e2e816107a3611eaa565b611ea05760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610a6e565b6109278383612fff565b5f611eb361306c565b905090565b6001600160a01b038216611f0e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a6e565b5f818152606760205260409020546001600160a01b031615611f725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6e565b611f7d5f8383613086565b6001600160a01b0382165f908152606860205260408120805460019290611fa590849061471c565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f61200b6125ff565b90506120178183612fff565b5f80516020614a7483398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb9161207391889130919060440161472f565b5f604051808303815f87803b15801561208a575f80fd5b505af115801561209c573d5f803e3d5ffd5b5050505050505050565b6060610cb4836040516020016120bc9190614475565b604051602081830303815290604052805190602001205f1c83613121565b60606120e585612fd3565b5f80876001600160a01b0316866120fe8b8a89896131fc565b60405161210b9190614475565b5f604051808303815f8787f1925050503d805f8114612145576040519150601f19603f3d011682016040523d82523d5f602084013e61214a565b606091505b50909250905061215b603f8761476e565b5a1161216957612169614781565b6121a982826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061322c565b9998505050505050505050565b80515f9081905b8015611a0e576121f082856121d3600185614795565b815181106121e3576121e3614341565b6020026020010151613265565b9150806121fc816147a8565b9150506121bd565b61220d8161330f565b60405160200161221f91815260200190565b60408051601f1981840301815282825280516020918201205f85815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b031661228382611032565b6001600160a01b0316146122e75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a6e565b6001600160a01b0382166123495760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6e565b612354838383613086565b61235e5f82612fff565b6001600160a01b0383165f908152606860205260408120805460019290612386908490614795565b90915550506001600160a01b0382165f9081526068602052604081208054600192906123b390849061471c565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5b84811015610f785761246e86868381811061243257612432614341565b90506020028101906124449190614355565b86868581811061245657612456614341565b90506020028101906124689190614355565b8661279b565b600101612415565b60605f825f8151811061248b5761248b614341565b602002602001015190505f600190505b8351811015611a0e57818482815181106124b7576124b7614341565b60200260200101516040516020016124d09291906147bd565b60408051601f19818403018152919052915060010161249b565b61dead6001600160a01b0384161480159061251b57506001600160a01b0383165f9081526101356020526040902054155b15610927576109278383836129a9565b5f8061253683611032565b9050806001600160a01b0316846001600160a01b0316148061257c57506001600160a01b038082165f908152606a602090815260408083209388168352929052205460ff165b80610bab5750836001600160a01b0316612595846108ee565b6001600160a01b031614949350505050565b5f5b84811015610f78576125f78686838181106125c6576125c6614341565b905060200201358585848181106125df576125df614341565b90506020028101906125f19190614355565b85612876565b6001016125a9565b5f80516020614a74833981519152545f906001600160a01b031680156126f55760405163721804d360e11b81523060048201525f906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612663573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268791906147f8565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa1580156126cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f1919061480f565b9250505b5090565b5f61270382611032565b9050612710815f84613086565b61271a5f83612fff565b6001600160a01b0381165f908152606860205260408120805460019290612742908490614795565b90915550505f8281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f85856040516020016127af92919061482a565b60408051601f198184030181528282528051602091820120601f890182900482028401820190925287835290925061280291839189908990819084018382808284375f9201919091525061291592505050565b610f788187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250889250613335915050565b61287f84613461565b6128cb5760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610a6e565b611229846128d8866115e1565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250613335915050565b61291e82613461565b610e8e575f82815260c9602052604090206109278282614839565b612941611eaa565b6001600160a01b031661295382611032565b6001600160a01b031614610fd05760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a6e565b5f8281526101386020526040902080546129c2906142f6565b90505f036129e4575f828152610138602052604090206129e28282614839565b505b6001600160a01b0383165f8181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612a38846115e1565b9150612a448484613121565b90509250929050565b5f818152610137602052604081205460ff16801561085857506101365f612a72611eaa565b6001600160a01b0316815260208101919091526040015f205460ff1692915050565b5f80516020614a7483398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ad490869086906004016145b5565b5f604051808303815f87803b158015612aeb575f80fd5b505af1158015610e01573d5f803e3d5ffd5b816001600160a01b0316836001600160a01b031603612b5e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a6e565b6001600160a01b038381165f818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015612c0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3291906147f8565b90505f612cdf866060015180519060200120868860200151604051602001612c7f9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050818660200151148015612d0557508551612d05906001600160a01b03168286613486565b9695505050505050565b612d1a848484612270565b612d26848484846135c1565b6112295760405162461bcd60e51b8152600401610a6e906148f4565b612d4c8484611eb8565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c395283604051612d7c919061390a565b60405180910390a28015611229576112298484846124ea565b6060610133805461086d906142f6565b6060815f03612dcb5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612df45780612dde81614946565b9150612ded9050600a8361476e565b9150612dce565b5f816001600160401b03811115612e0d57612e0d613e03565b6040519080825280601f01601f191660200182016040528015612e37576020820181803683370190505b5090505b8415610bab57612e4c600183614795565b9150612e59600a8661495e565b612e6490603061471c565b60f81b818381518110612e7957612e79614341565b60200101906001600160f81b03191690815f1a905350612e9a600a8661476e565b9450612e3b565b612eaa81612204565b610dad8585858585612413565b6001600160a01b0381165f8181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b5f54610100900460ff16612f215760405162461bcd60e51b8152600401610a6e90614971565b6065612f2d8382614839565b5060666109278282614839565b5f54610100900460ff16612f605760405162461bcd60e51b8152600401610a6e90614971565b565b5f54610100900460ff16612f885760405162461bcd60e51b8152600401610a6e90614971565b610fd0816136c2565b5f54610100900460ff16612fb75760405162461bcd60e51b8152600401610a6e90614971565b610fd081613719565b5f303303612fd05750601f193601355b90565b5f8181526101006020526040902054612fed90600161471c565b5f918252610100602052604090912055565b5f81815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061303382611032565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f303303613081575060331936013560601c90565b503390565b5f818152610137602052604090205460ff1615806130ac57506001600160a01b03821615155b6130f85760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610a6e565b6001600160a01b0383165f90815261013560205260409020548190036109275761092783612eb7565b606061312c82612a4d565b15613145575060408051602081019091525f8152610858565b60ca5f6131518461330f565b81526020019081526020015f205f8481526020019081526020015f208054613178906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546131a4906142f6565b80156131ef5780601f106131c6576101008083540402835291602001916131ef565b820191905f5260205f20905b8154815290600101906020018083116131d257829003601f168201915b5050505050905092915050565b6060828585604051602001613213939291906149bc565b6040516020818303038152906040529050949350505050565b6060831561323b575081610cb4565b82511561324b5782518084602001fd5b8160405162461bcd60e51b8152600401610a6e919061390a565b5f81515f036132ae5760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610a6e565b82826040516020016132c09190614475565b604051602081830303815290604052805190602001206040516020016132f0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b5f81815260cb6020526040812054156126f5575f82815260cb6020526040902054610858565b60ca5f6133418361330f565b81526020019081526020015f205f8581526020019081526020015f208054613368906142f6565b90505f036133bf578260405161337e9190614475565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f86856040516133b6919061390a565b60405180910390a35b8160ca5f6133cc8461330f565b81526020019081526020015f205f8681526020019081526020015f2090816133f49190614839565b50816040516134039190614475565b6040518091039020836040516134199190614475565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613453929190613ff8565b60405180910390a450505050565b5f81815260c960205260408120805482919061347c906142f6565b9050119050919050565b5f805f6134938585613766565b90925090505f8160048111156134ab576134ab6149fa565b1480156134c95750856001600160a01b0316826001600160a01b0316145b156134d957600192505050610cb4565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401613500929190614a0e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161353e9190614475565b5f60405180830381855afa9150503d805f8114613576576040519150601f19603f3d011682016040523d82523d5f602084013e61357b565b606091505b509150915081801561358e575080516020145b80156135b557508051630b135d3f60e11b906135b390830160209081019084016147f8565b145b98975050505050505050565b5f6001600160a01b0384163b156136ba57836001600160a01b031663150b7a026135e9611eaa565b8786866040518563ffffffff1660e01b815260040161360b9493929190614a26565b6020604051808303815f875af1925050508015613645575060408051601f3d908101601f1916820190925261364291810190614a58565b60015b6136a0573d808015613672576040519150601f19603f3d011682016040523d82523d5f602084013e613677565b606091505b5080515f036136985760405162461bcd60e51b8152600401610a6e906148f4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bab565b506001610bab565b5f54610100900460ff166136e85760405162461bcd60e51b8152600401610a6e90614971565b805f80516020614a748339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f54610100900460ff1661373f5760405162461bcd60e51b8152600401610a6e90614971565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b876136f8565b5f80825160410361379a576020830151604084015160608501515f1a61378e878285856137a8565b945094505050506137a1565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137dd57505f90506003613884565b8460ff16601b141580156137f557508460ff16601c14155b1561380557505f90506004613884565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613856573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661387e575f60019250925050613884565b91505f90505b94509492505050565b6001600160e01b031981168114610fd0575f80fd5b5f602082840312156138b2575f80fd5b8135610cb48161388d565b5f5b838110156138d75781810151838201526020016138bf565b50505f910152565b5f81518084526138f68160208601602086016138bd565b601f01601f19169290920160200192915050565b602081525f610cb460208301846138df565b5f6020828403121561392c575f80fd5b5035919050565b6001600160a01b0381168114610fd0575f80fd5b5f8060408385031215613958575f80fd5b823561396381613933565b946020939093013593505050565b5f8083601f840112613981575f80fd5b5081356001600160401b03811115613997575f80fd5b6020830191508360208285010111156137a1575f80fd5b5f805f805f608086880312156139c2575f80fd5b85356139cd81613933565b945060208601356139dd81613933565b93506040860135925060608601356001600160401b038111156139fe575f80fd5b613a0a88828901613971565b969995985093965092949392505050565b5f8083601f840112613a2b575f80fd5b5081356001600160401b03811115613a41575f80fd5b6020830191508360208260051b85010111156137a1575f80fd5b5f805f60408486031215613a6d575f80fd5b83356001600160401b03811115613a82575f80fd5b613a8e86828701613a1b565b909790965060209590950135949350505050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015613aed57601f19868403018952613adb8383516138df565b98840198925090830190600101613abf565b5090979650505050505050565b602081525f610cb46020830184613aa2565b5f805f60408486031215613b1e575f80fd5b83356001600160401b03811115613b33575f80fd5b613a8e86828701613971565b5f805f60408486031215613b51575f80fd5b83356001600160401b0380821115613b67575f80fd5b9085019060808288031215613b7a575f80fd5b90935060208501359080821115613b8f575f80fd5b50613b9c86828701613971565b9497909650939450505050565b80358015158114613bb8575f80fd5b919050565b5f805f805f805f8060a0898b031215613bd4575f80fd5b8835613bdf81613933565b975060208901356001600160401b0380821115613bfa575f80fd5b613c068c838d01613a1b565b909950975060408b0135915080821115613c1e575f80fd5b613c2a8c838d01613a1b565b909750955060608b0135915080821115613c42575f80fd5b50613c4f8b828c01613a1b565b9094509250613c62905060808a01613ba9565b90509295985092959890939650565b5f805f60608486031215613c83575f80fd5b8335613c8e81613933565b92506020840135613c9e81613933565b929592945050506040919091013590565b5f8060208385031215613cc0575f80fd5b82356001600160401b03811115613cd5575f80fd5b613ce185828601613a1b565b90969095509350505050565b5f805f805f60608688031215613d01575f80fd5b85356001600160401b0380821115613d17575f80fd5b613d2389838a01613a1b565b90975095506020880135915080821115613d3b575f80fd5b50613d4888828901613a1b565b96999598509660400135949350505050565b5f805f805f60608688031215613d6e575f80fd5b85356001600160401b0380821115613d84575f80fd5b613d9089838a01613971565b90975095506020880135915080821115613da8575f80fd5b50613d4888828901613971565b5f805f8060608587031215613dc8575f80fd5b8435935060208501356001600160401b03811115613de4575f80fd5b613df087828801613971565b9598909750949560400135949350505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613e3f57613e3f613e03565b604052919050565b5f82601f830112613e56575f80fd5b81356001600160401b03811115613e6f57613e6f613e03565b613e82601f8201601f1916602001613e17565b818152846020838601011115613e96575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215613ec2575f80fd5b81356001600160401b03811115613ed7575f80fd5b610bab84828501613e47565b5f60208284031215613ef3575f80fd5b8135610cb481613933565b5f6001600160401b03821115613f1657613f16613e03565b5060051b60200190565b5f613f32613f2d84613efe565b613e17565b8381529050602080820190600585901b840186811115613f50575f80fd5b845b81811015613f895780356001600160401b03811115613f6f575f80fd5b613f7b89828901613e47565b855250928201928201613f52565b505050509392505050565b5f60208284031215613fa4575f80fd5b81356001600160401b03811115613fb9575f80fd5b8201601f81018413613fc9575f80fd5b610bab84823560208401613f20565b5f8060408385031215613fe9575f80fd5b50508035926020909101359150565b604081525f61400a60408301856138df565b8281036020840152610cb081856138df565b5f805f806060858703121561402f575f80fd5b843561403a81613933565b93506020850135925060408501356001600160401b0381111561405b575f80fd5b61406787828801613971565b95989497509550505050565b5f805f805f805f6080888a031215614089575f80fd5b87356001600160401b038082111561409f575f80fd5b6140ab8b838c01613971565b909950975060208a0135965060408a01359150808211156140ca575f80fd5b6140d68b838c01613a1b565b909650945060608a01359150808211156140ee575f80fd5b506140fb8a828b01613a1b565b989b979a50959850939692959293505050565b5f806020838503121561411f575f80fd5b82356001600160401b03811115614134575f80fd5b613ce185828601613971565b5f8060408385031215614151575f80fd5b823561415c81613933565b9150612a4460208401613ba9565b604081525f61417c6040830185613aa2565b8281036020840152610cb08185613aa2565b5f805f80608085870312156141a1575f80fd5b84356141ac81613933565b935060208501356141bc81613933565b92506040850135915060608501356001600160401b038111156141dd575f80fd5b6141e987828801613e47565b91505092959194509250565b5f805f60408486031215614207575f80fd5b833561421281613933565b925060208401356001600160401b0381111561422c575f80fd5b613b9c86828701613971565b5f8060408385031215614249575f80fd5b823561425481613933565b9150602083013561426481613933565b809150509250929050565b5f805f60408486031215614281575f80fd5b8335925060208401356001600160401b0381111561422c575f80fd5b5f805f80608085870312156142b0575f80fd5b84356142bb81613933565b935060208501356142cb81613933565b925060408501356142db81613933565b915060608501356142eb81613933565b939692955090935050565b600181811c9082168061430a57607f821691505b6020821081036111da57634e487b7160e01b5f52602260045260245ffd5b5f60208284031215614338575f80fd5b610cb482613ba9565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e1984360301811261436a575f80fd5b8301803591506001600160401b03821115614383575f80fd5b6020019150368190038213156137a1575f80fd5b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b5f610cb4368484613f20565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b5f82516144868184602087016138bd565b9190910192915050565b601f82111561092757805f5260205f20601f840160051c810160208510156144b55750805b601f840160051c820191505b81811015610dad575f81556001016144c1565b6001600160401b038311156144eb576144eb613e03565b6144ff836144f983546142f6565b83614490565b5f601f841160018114614530575f85156145195750838201355b5f19600387901b1c1916600186901b178355610dad565b5f83815260208120601f198716915b8281101561455f578685013582556020948501946001909201910161453f565b508682101561457b575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610bab60208301848661458d565b5f608082360312156145d8575f80fd5b604051608081016001600160401b0382821081831117156145fb576145fb613e03565b816040528435915061460c82613933565b81835260208501356020840152604085013560408401526060850135915080821115614636575f80fd5b5061464336828601613e47565b60608301525092915050565b5f83516146608184602088016138bd565b8351908301906146748183602088016138bd565b01949350505050565b5f602080838503121561468e575f80fd5b82356001600160401b038111156146a3575f80fd5b8301601f810185136146b3575f80fd5b80356146c1613f2d82613efe565b81815260059190911b820183019083810190878311156146df575f80fd5b928401925b828410156146fd578335825292840192908401906146e4565b979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085857610858614708565b6001600160a01b038481168252831660208201526060604082018190525f90610a77908301846138df565b634e487b7160e01b5f52601260045260245ffd5b5f8261477c5761477c61475a565b500490565b634e487b7160e01b5f52600160045260245ffd5b8181038181111561085857610858614708565b5f816147b6576147b6614708565b505f190190565b5f83516147ce8184602088016138bd565b601760f91b90830190815283516147ec8160018401602088016138bd565b01600101949350505050565b5f60208284031215614808575f80fd5b5051919050565b5f6020828403121561481f575f80fd5b8151610cb481613933565b818382375f9101908152919050565b81516001600160401b0381111561485257614852613e03565b6148668161486084546142f6565b84614490565b602080601f831160018114614899575f84156148825750858301515b5f19600386901b1c1916600185901b178555610f78565b5f85815260208120601f198616915b828110156148c7578886015182559484019460019091019084016148a8565b50858210156148e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6001820161495757614957614708565b5060010190565b5f8261496c5761496c61475a565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f84516149cd8184602089016138bd565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f610bab60408301846138df565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612d05908301846138df565b5f60208284031215614a68575f80fd5b8151610cb48161388d56febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610367575f3560e01c806370a08231116101c9578063ba5d40b7116100fe578063ebf0c7171161009e578063f5c1f76e11610079578063f5c1f76e146107f1578063f7df5c6014610804578063f8c8765e14610817578063ffa1ad741461082a575f80fd5b8063ebf0c717146107d0578063ec129eea146107d6578063f25eb5c1146107e9575f80fd5b8063c87b56dd116100d9578063c87b56dd1461075c578063ce92b33e1461076f578063cf2c52cb14610782578063e985e9c514610795575f80fd5b8063ba5d40b714610723578063bb5b27e114610736578063bebec6b414610749575f80fd5b8063a22cb46511610169578063ab3b87fe11610144578063ab3b87fe146106c9578063b3f9e4cb146106dc578063b85afd28146106ef578063b88d4fde14610710575f80fd5b8063a22cb46514610677578063a3f4df7e1461068a578063a4247400146106b6575f80fd5b80639508b1c4116101a45780639508b1c4146106415780639559c0bd1461065457806395d89b411461065c57806399e0dd7c14610664575f80fd5b806370a08231146106085780637e37479e1461061b57806394d008ef1461062e575f80fd5b806342842e0e1161029f578063509602391161023f578063638e5c781161021a578063638e5c78146105a1578063663f7b2a146105b4578063672b9f81146105c75780636ccbae5f146105e8575f80fd5b8063509602391461055f578063572b6c05146105725780636352211e1461058e575f80fd5b806347c816991161027a57806347c81699146105135780634a72584d146105265780634f558e791461053957806350382c1a1461054c575f80fd5b806342842e0e146104da57806342966c68146104ed578063430c208114610500575f80fd5b80631bf7e13e1161030a578063276fabb1116102e5578063276fabb11461048057806327f18975146104a1578063310bd74b146104b457806340c10f19146104c7575f80fd5b80631bf7e13e146104475780631f71be061461045a57806323b872dd1461046d575f80fd5b8063095ea7b311610345578063095ea7b3146103d3578063150b7a02146103e85780631bd8cc1a146104145780631be5e7ed14610434575f80fd5b806301ffc9a71461036b57806306fdde0314610393578063081812fc146103a8575b5f80fd5b61037e6103793660046138a2565b61084e565b60405190151581526020015b60405180910390f35b61039b61085e565b60405161038a919061390a565b6103bb6103b636600461391c565b6108ee565b6040516001600160a01b03909116815260200161038a565b6103e66103e1366004613947565b610913565b005b6103fb6103f63660046139ae565b61092c565b6040516001600160e01b0319909116815260200161038a565b610427610422366004613a5b565b610a80565b60405161038a9190613afa565b61039b610442366004613b0c565b610b69565b61039b610455366004613b3f565b610bb3565b6103e6610468366004613bbd565b610cbb565b6103e661047b366004613c71565b610d61565b61049361048e366004613caf565b610db4565b60405190815260200161038a565b6103e66104af366004613ced565b610dc2565b6103e66104c236600461391c565b610e0a565b6103e66104d5366004613947565b610e45565b6103e66104e8366004613c71565b610e92565b6103e66104fb36600461391c565b610eac565b61037e61050e366004613947565b610ef0565b6103e6610521366004613d5a565b610efb565b6103e6610534366004613db5565b610f3a565b61037e61054736600461391c565b610f80565b6103e661055a366004613eb2565b610f9e565b6103e661056d366004613ee3565b610fd3565b61037e610580366004613ee3565b6001600160a01b0316301490565b6103bb61059c36600461391c565b611032565b6103e66105af36600461391c565b611091565b6103e66105c2366004613f94565b6110dc565b6105da6105d5366004613fd8565b611114565b60405161038a929190613ff8565b6104936105f636600461391c565b5f908152610100602052604090205490565b610493610616366004613ee3565b61112c565b610493610629366004613ee3565b6111b0565b6103e661063c36600461401c565b6111e0565b6103e661064f366004614073565b61122f565b610493601481565b61039b6112b6565b6103e661067236600461410e565b6112c5565b6103e6610685366004614140565b61134c565b61039b6040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b61037e6106c4366004613b3f565b61135e565b6103e66106d7366004613947565b6113a7565b6103bb6106ea36600461391c565b6113ec565b6107026106fd366004613a5b565b611414565b60405161038a92919061416a565b6103e661071e36600461418e565b61152a565b6103e6610731366004613bbd565b611571565b61039b61074436600461391c565b6115e1565b61039b610757366004613ee3565b611680565b61039b61076a36600461391c565b611746565b6103e661077d366004613ced565b6117a9565b6103e66107903660046141f5565b6117e8565b61037e6107a3366004614238565b6001600160a01b039182165f908152606a6020908152604080832093909416825291909152205460ff1690565b5f610493565b6103e66107e4366004613ced565b6118aa565b6103e66118e9565b6104276107ff366004613caf565b61196e565b6103e661081236600461426f565b611a15565b6103e661082536600461429d565b611aa6565b61039b60405180604001604052806005815260200164302e372e3360d81b81525081565b5f61085882611c76565b92915050565b60606065805461086d906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906142f6565b80156108e45780601f106108bb576101008083540402835291602001916108e4565b820191905f5260205f20905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b5f6108f882611cc5565b505f908152606960205260409020546001600160a01b031690565b8061091d81611d23565b6109278383611d89565b505050565b5f7f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610960611eaa565b6001600160a01b031603610a1c57610976611eaa565b6001600160a01b03166342966c68856040518263ffffffff1660e01b81526004016109a391815260200190565b5f604051808303815f87803b1580156109ba575f80fd5b505af11580156109cc573d5f803e3d5ffd5b5050508215801591506109e657506109e682840184614328565b15610a04576109f53085611eb8565b6109ff8585612002565b610a0e565b610a0e8585611eb8565b50630a85bd0160e11b610a77565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610a9a57610a9a613e03565b604051908082528060200260200182016040528015610acd57816020015b6060815260200190600190039081610ab85790505b5090505f5b83811015610b6157610b3c858583818110610aef57610aef614341565b9050602002810190610b019190614355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792506120a6915050565b828281518110610b4e57610b4e614341565b6020908102919091010152600101610ad2565b509392505050565b6060610bab84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508692506120a6915050565b949350505050565b60605f5a9050610bc485858561135e565b610c205760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610a6e565b610cb0610c306020870187613ee3565b30604088013584610c4460608b018b614355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f920191909152506120da92505050565b9150505b9392505050565b610134546001600160a01b0316610cd0611eaa565b6001600160a01b031614610cf65760405162461bcd60e51b8152600401610a6e90614397565b5f610d09610d04888a6143de565b6121b6565b9050610d1481612204565b610d27610d2082611032565b8a83612270565b610d348686868685612413565b8115610d5657610d568982610d51610d4c8b8d6143de565b612476565b6124ea565b505050505050505050565b80610d73610d6d611eaa565b8261252b565b610d8f5760405162461bcd60e51b8152600401610a6e906143ea565b81610d9981611d23565b610da283612204565b610dad858585612270565b5050505050565b5f610cb4610d0483856143de565b80610dce610d6d611eaa565b610dea5760405162461bcd60e51b8152600401610a6e906143ea565b81610df481611d23565b610e0187878787876125a7565b50505050505050565b80610e16610d6d611eaa565b610e325760405162461bcd60e51b8152600401610a6e906143ea565b81610e3c81611d23565b61092783612204565b610e4d6125ff565b6001600160a01b0316610e5e611eaa565b6001600160a01b031614610e845760405162461bcd60e51b8152600401610a6e90614433565b610e8e8282611eb8565b5050565b61092783838360405180602001604052805f81525061152a565b80610eb8610d6d611eaa565b610ed45760405162461bcd60e51b8152600401610a6e906143ea565b81610ede81611d23565b610ee783612204565b610927836126f9565b5f610cb4838361252b565b80610f07610d6d611eaa565b610f235760405162461bcd60e51b8152600401610a6e906143ea565b81610f2d81611d23565b610e01878787878761279b565b80610f46610d6d611eaa565b610f625760405162461bcd60e51b8152600401610a6e906143ea565b81610f6c81611d23565b610f7886868686612876565b505050505050565b5f818152606760205260408120546001600160a01b03161515610858565b610fd081604051602001610fb29190614475565b604051602081830303815290604052805190602001205f1c82612915565b50565b610134546001600160a01b0316610fe8611eaa565b6001600160a01b03161461100e5760405162461bcd60e51b8152600401610a6e90614397565b6001600160a01b03165f90815261013660205260409020805460ff19166001179055565b5f818152606760205260408120546001600160a01b0316806108585760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6e565b8061109d610d6d611eaa565b6110b95760405162461bcd60e51b8152600401610a6e906143ea565b6110cb6110c4611eaa565b3084612270565b610e8e6110d6611eaa565b83612002565b5f6110e6826121b6565b90506110f181612939565b6110fa81611d23565b610e8e611105611eaa565b8261110f85612476565b6129a9565b6060806111218484612a2c565b909590945092505050565b5f6001600160a01b0382166111955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a6e565b506001600160a01b03165f9081526068602052604090205490565b6001600160a01b0381165f90815261013560205260408120546111d281612a4d565b6111da578091505b50919050565b6111e86125ff565b6001600160a01b03166111f9611eaa565b6001600160a01b03161461121f5760405162461bcd60e51b8152600401610a6e90614433565b6112298484611eb8565b50505050565b6112398787612a94565b611241611eaa565b6001600160a01b031661125386611032565b6001600160a01b0316146112a95760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a6e565b610e018484848489612413565b60606066805461086d906142f6565b610134546001600160a01b03166112da611eaa565b6001600160a01b0316146113005760405162461bcd60e51b8152600401610a6e90614397565b61013361130e8284836144d4565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b82826040516113409291906145b5565b60405180910390a15050565b610e8e611357611eaa565b8383612afd565b5f610bab61136b856145c8565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bca92505050565b806113b3610d6d611eaa565b6113cf5760405162461bcd60e51b8152600401610a6e906143ea565b816113d981611d23565b6112296113e584611032565b8585612270565b5f818152606760205260408120546001600160a01b031661140d575f610858565b3092915050565b606080836001600160401b0381111561142f5761142f613e03565b60405190808252806020026020018201604052801561146257816020015b606081526020019060019003908161144d5790505b509150836001600160401b0381111561147d5761147d613e03565b6040519080825280602002602001820160405280156114b057816020015b606081526020019060019003908161149b5790505b5090505f5b84811015611521576114df8686838181106114d2576114d2614341565b9050602002013585612a2c565b8483815181106114f1576114f1614341565b6020026020010184848151811061150a5761150a614341565b6020908102919091010191909152526001016114b5565b50935093915050565b81611536610d6d611eaa565b6115525760405162461bcd60e51b8152600401610a6e906143ea565b8261155c81611d23565b61156584612204565b610f7886868686612d0f565b610134546001600160a01b0316611586611eaa565b6001600160a01b0316146115ac5760405162461bcd60e51b8152600401610a6e90614397565b5f6115ba610d04888a6143de565b90506115d489826115ce610d4c8b8d6143de565b85612d42565b610d568686868685612413565b5f81815260c9602052604090208054606091906115fd906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611629906142f6565b80156116745780601f1061164b57610100808354040283529160200191611674565b820191905f5260205f20905b81548152906001019060200180831161165757829003601f168201915b50505050509050919050565b6001600160a01b0381165f90815261013560205260409020546060906116a581612a4d565b6111da575f8181526101386020526040902080546116c2906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116ee906142f6565b80156117395780601f1061171057610100808354040283529160200191611739565b820191905f5260205f20905b81548152906001019060200180831161171c57829003601f168201915b5050505050915050919050565b606061175182611cc5565b5f61175a612d95565b90505f8151116117785760405180602001604052805f815250610cb4565b8061178284612da5565b60405160200161179392919061464f565b6040516020818303038152906040529392505050565b806117b5610d6d611eaa565b6117d15760405162461bcd60e51b8152600401610a6e906143ea565b816117db81611d23565b610e018787878787612413565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b031661181b611eaa565b6001600160a01b0316146118415760405162461bcd60e51b8152600401610a6e90614433565b6020819003611863575f6118578284018461391c565b90506112298482611eb8565b5f6118708284018461467d565b80519091505f5b81811015610f78576118a28684838151811061189557611895614341565b6020026020010151611eb8565b600101611877565b806118b6610d6d611eaa565b6118d25760405162461bcd60e51b8152600401610a6e906143ea565b816118dc81611d23565b610e018787878787612ea1565b5f6118f2611eaa565b6001600160a01b0381165f9081526101356020526040812054919250036119655760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610a6e565b610fd081612eb7565b6060816001600160401b0381111561198857611988613e03565b6040519080825280602002602001820160405280156119bb57816020015b60608152602001906001900390816119a65790505b5090505f5b82811015611a0e576119e98484838181106119dd576119dd614341565b905060200201356115e1565b8282815181106119fb576119fb614341565b60209081029190910101526001016119c0565b5092915050565b610134546001600160a01b0316611a2a611eaa565b6001600160a01b031614611a505760405162461bcd60e51b8152600401610a6e90614397565b61013454611a67906001600160a01b031684611eb8565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611a999291906145b5565b60405180910390a2505050565b5f54610100900460ff1615808015611ac457505f54600160ff909116105b80611add5750303b158015611add57505f5460ff166001145b611b405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a6e565b5f805460ff191660011790558015611b61575f805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611c0991612efb565b611c11612f3a565b611c19612f3a565b611c2283612f62565b611c2b82612f91565b8015610dad575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b5f6001600160e01b031982166380ac58cd60e01b1480611ca657506001600160e01b03198216635b5e139f60e01b145b8061085857506301ffc9a760e01b6001600160e01b0319831614610858565b5f818152606760205260409020546001600160a01b0316610fd05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6e565b303303611d8057611d32612fc0565b8114610fd05760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610a6e565b610fd081612fd3565b5f611d9382611032565b9050806001600160a01b0316836001600160a01b031603611e005760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a6e565b806001600160a01b0316611e12611eaa565b6001600160a01b03161480611e2e5750611e2e816107a3611eaa565b611ea05760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610a6e565b6109278383612fff565b5f611eb361306c565b905090565b6001600160a01b038216611f0e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a6e565b5f818152606760205260409020546001600160a01b031615611f725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6e565b611f7d5f8383613086565b6001600160a01b0382165f908152606860205260408120805460019290611fa590849061471c565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f61200b6125ff565b90506120178183612fff565b5f80516020614a7483398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb9161207391889130919060440161472f565b5f604051808303815f87803b15801561208a575f80fd5b505af115801561209c573d5f803e3d5ffd5b5050505050505050565b6060610cb4836040516020016120bc9190614475565b604051602081830303815290604052805190602001205f1c83613121565b60606120e585612fd3565b5f80876001600160a01b0316866120fe8b8a89896131fc565b60405161210b9190614475565b5f604051808303815f8787f1925050503d805f8114612145576040519150601f19603f3d011682016040523d82523d5f602084013e61214a565b606091505b50909250905061215b603f8761476e565b5a1161216957612169614781565b6121a982826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061322c565b9998505050505050505050565b80515f9081905b8015611a0e576121f082856121d3600185614795565b815181106121e3576121e3614341565b6020026020010151613265565b9150806121fc816147a8565b9150506121bd565b61220d8161330f565b60405160200161221f91815260200190565b60408051601f1981840301815282825280516020918201205f85815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b031661228382611032565b6001600160a01b0316146122e75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610a6e565b6001600160a01b0382166123495760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6e565b612354838383613086565b61235e5f82612fff565b6001600160a01b0383165f908152606860205260408120805460019290612386908490614795565b90915550506001600160a01b0382165f9081526068602052604081208054600192906123b390849061471c565b90915550505f8181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5b84811015610f785761246e86868381811061243257612432614341565b90506020028101906124449190614355565b86868581811061245657612456614341565b90506020028101906124689190614355565b8661279b565b600101612415565b60605f825f8151811061248b5761248b614341565b602002602001015190505f600190505b8351811015611a0e57818482815181106124b7576124b7614341565b60200260200101516040516020016124d09291906147bd565b60408051601f19818403018152919052915060010161249b565b61dead6001600160a01b0384161480159061251b57506001600160a01b0383165f9081526101356020526040902054155b15610927576109278383836129a9565b5f8061253683611032565b9050806001600160a01b0316846001600160a01b0316148061257c57506001600160a01b038082165f908152606a602090815260408083209388168352929052205460ff165b80610bab5750836001600160a01b0316612595846108ee565b6001600160a01b031614949350505050565b5f5b84811015610f78576125f78686838181106125c6576125c6614341565b905060200201358585848181106125df576125df614341565b90506020028101906125f19190614355565b85612876565b6001016125a9565b5f80516020614a74833981519152545f906001600160a01b031680156126f55760405163721804d360e11b81523060048201525f906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612663573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268791906147f8565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa1580156126cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f1919061480f565b9250505b5090565b5f61270382611032565b9050612710815f84613086565b61271a5f83612fff565b6001600160a01b0381165f908152606860205260408120805460019290612742908490614795565b90915550505f8281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f85856040516020016127af92919061482a565b60408051601f198184030181528282528051602091820120601f890182900482028401820190925287835290925061280291839189908990819084018382808284375f9201919091525061291592505050565b610f788187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250889250613335915050565b61287f84613461565b6128cb5760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610a6e565b611229846128d8866115e1565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250613335915050565b61291e82613461565b610e8e575f82815260c9602052604090206109278282614839565b612941611eaa565b6001600160a01b031661295382611032565b6001600160a01b031614610fd05760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610a6e565b5f8281526101386020526040902080546129c2906142f6565b90505f036129e4575f828152610138602052604090206129e28282614839565b505b6001600160a01b0383165f8181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612a38846115e1565b9150612a448484613121565b90509250929050565b5f818152610137602052604081205460ff16801561085857506101365f612a72611eaa565b6001600160a01b0316815260208101919091526040015f205460ff1692915050565b5f80516020614a7483398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ad490869086906004016145b5565b5f604051808303815f87803b158015612aeb575f80fd5b505af1158015610e01573d5f803e3d5ffd5b816001600160a01b0316836001600160a01b031603612b5e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a6e565b6001600160a01b038381165f818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015612c0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3291906147f8565b90505f612cdf866060015180519060200120868860200151604051602001612c7f9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050818660200151148015612d0557508551612d05906001600160a01b03168286613486565b9695505050505050565b612d1a848484612270565b612d26848484846135c1565b6112295760405162461bcd60e51b8152600401610a6e906148f4565b612d4c8484611eb8565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c395283604051612d7c919061390a565b60405180910390a28015611229576112298484846124ea565b6060610133805461086d906142f6565b6060815f03612dcb5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612df45780612dde81614946565b9150612ded9050600a8361476e565b9150612dce565b5f816001600160401b03811115612e0d57612e0d613e03565b6040519080825280601f01601f191660200182016040528015612e37576020820181803683370190505b5090505b8415610bab57612e4c600183614795565b9150612e59600a8661495e565b612e6490603061471c565b60f81b818381518110612e7957612e79614341565b60200101906001600160f81b03191690815f1a905350612e9a600a8661476e565b9450612e3b565b612eaa81612204565b610dad8585858585612413565b6001600160a01b0381165f8181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b5f54610100900460ff16612f215760405162461bcd60e51b8152600401610a6e90614971565b6065612f2d8382614839565b5060666109278282614839565b5f54610100900460ff16612f605760405162461bcd60e51b8152600401610a6e90614971565b565b5f54610100900460ff16612f885760405162461bcd60e51b8152600401610a6e90614971565b610fd0816136c2565b5f54610100900460ff16612fb75760405162461bcd60e51b8152600401610a6e90614971565b610fd081613719565b5f303303612fd05750601f193601355b90565b5f8181526101006020526040902054612fed90600161471c565b5f918252610100602052604090912055565b5f81815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061303382611032565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f303303613081575060331936013560601c90565b503390565b5f818152610137602052604090205460ff1615806130ac57506001600160a01b03821615155b6130f85760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610a6e565b6001600160a01b0383165f90815261013560205260409020548190036109275761092783612eb7565b606061312c82612a4d565b15613145575060408051602081019091525f8152610858565b60ca5f6131518461330f565b81526020019081526020015f205f8481526020019081526020015f208054613178906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546131a4906142f6565b80156131ef5780601f106131c6576101008083540402835291602001916131ef565b820191905f5260205f20905b8154815290600101906020018083116131d257829003601f168201915b5050505050905092915050565b6060828585604051602001613213939291906149bc565b6040516020818303038152906040529050949350505050565b6060831561323b575081610cb4565b82511561324b5782518084602001fd5b8160405162461bcd60e51b8152600401610a6e919061390a565b5f81515f036132ae5760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610a6e565b82826040516020016132c09190614475565b604051602081830303815290604052805190602001206040516020016132f0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b5f81815260cb6020526040812054156126f5575f82815260cb6020526040902054610858565b60ca5f6133418361330f565b81526020019081526020015f205f8581526020019081526020015f208054613368906142f6565b90505f036133bf578260405161337e9190614475565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f86856040516133b6919061390a565b60405180910390a35b8160ca5f6133cc8461330f565b81526020019081526020015f205f8681526020019081526020015f2090816133f49190614839565b50816040516134039190614475565b6040518091039020836040516134199190614475565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613453929190613ff8565b60405180910390a450505050565b5f81815260c960205260408120805482919061347c906142f6565b9050119050919050565b5f805f6134938585613766565b90925090505f8160048111156134ab576134ab6149fa565b1480156134c95750856001600160a01b0316826001600160a01b0316145b156134d957600192505050610cb4565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401613500929190614a0e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161353e9190614475565b5f60405180830381855afa9150503d805f8114613576576040519150601f19603f3d011682016040523d82523d5f602084013e61357b565b606091505b509150915081801561358e575080516020145b80156135b557508051630b135d3f60e11b906135b390830160209081019084016147f8565b145b98975050505050505050565b5f6001600160a01b0384163b156136ba57836001600160a01b031663150b7a026135e9611eaa565b8786866040518563ffffffff1660e01b815260040161360b9493929190614a26565b6020604051808303815f875af1925050508015613645575060408051601f3d908101601f1916820190925261364291810190614a58565b60015b6136a0573d808015613672576040519150601f19603f3d011682016040523d82523d5f602084013e613677565b606091505b5080515f036136985760405162461bcd60e51b8152600401610a6e906148f4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bab565b506001610bab565b5f54610100900460ff166136e85760405162461bcd60e51b8152600401610a6e90614971565b805f80516020614a748339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f54610100900460ff1661373f5760405162461bcd60e51b8152600401610a6e90614971565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b876136f8565b5f80825160410361379a576020830151604084015160608501515f1a61378e878285856137a8565b945094505050506137a1565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137dd57505f90506003613884565b8460ff16601b141580156137f557508460ff16601c14155b1561380557505f90506004613884565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613856573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661387e575f60019250925050613884565b91505f90505b94509492505050565b6001600160e01b031981168114610fd0575f80fd5b5f602082840312156138b2575f80fd5b8135610cb48161388d565b5f5b838110156138d75781810151838201526020016138bf565b50505f910152565b5f81518084526138f68160208601602086016138bd565b601f01601f19169290920160200192915050565b602081525f610cb460208301846138df565b5f6020828403121561392c575f80fd5b5035919050565b6001600160a01b0381168114610fd0575f80fd5b5f8060408385031215613958575f80fd5b823561396381613933565b946020939093013593505050565b5f8083601f840112613981575f80fd5b5081356001600160401b03811115613997575f80fd5b6020830191508360208285010111156137a1575f80fd5b5f805f805f608086880312156139c2575f80fd5b85356139cd81613933565b945060208601356139dd81613933565b93506040860135925060608601356001600160401b038111156139fe575f80fd5b613a0a88828901613971565b969995985093965092949392505050565b5f8083601f840112613a2b575f80fd5b5081356001600160401b03811115613a41575f80fd5b6020830191508360208260051b85010111156137a1575f80fd5b5f805f60408486031215613a6d575f80fd5b83356001600160401b03811115613a82575f80fd5b613a8e86828701613a1b565b909790965060209590950135949350505050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015613aed57601f19868403018952613adb8383516138df565b98840198925090830190600101613abf565b5090979650505050505050565b602081525f610cb46020830184613aa2565b5f805f60408486031215613b1e575f80fd5b83356001600160401b03811115613b33575f80fd5b613a8e86828701613971565b5f805f60408486031215613b51575f80fd5b83356001600160401b0380821115613b67575f80fd5b9085019060808288031215613b7a575f80fd5b90935060208501359080821115613b8f575f80fd5b50613b9c86828701613971565b9497909650939450505050565b80358015158114613bb8575f80fd5b919050565b5f805f805f805f8060a0898b031215613bd4575f80fd5b8835613bdf81613933565b975060208901356001600160401b0380821115613bfa575f80fd5b613c068c838d01613a1b565b909950975060408b0135915080821115613c1e575f80fd5b613c2a8c838d01613a1b565b909750955060608b0135915080821115613c42575f80fd5b50613c4f8b828c01613a1b565b9094509250613c62905060808a01613ba9565b90509295985092959890939650565b5f805f60608486031215613c83575f80fd5b8335613c8e81613933565b92506020840135613c9e81613933565b929592945050506040919091013590565b5f8060208385031215613cc0575f80fd5b82356001600160401b03811115613cd5575f80fd5b613ce185828601613a1b565b90969095509350505050565b5f805f805f60608688031215613d01575f80fd5b85356001600160401b0380821115613d17575f80fd5b613d2389838a01613a1b565b90975095506020880135915080821115613d3b575f80fd5b50613d4888828901613a1b565b96999598509660400135949350505050565b5f805f805f60608688031215613d6e575f80fd5b85356001600160401b0380821115613d84575f80fd5b613d9089838a01613971565b90975095506020880135915080821115613da8575f80fd5b50613d4888828901613971565b5f805f8060608587031215613dc8575f80fd5b8435935060208501356001600160401b03811115613de4575f80fd5b613df087828801613971565b9598909750949560400135949350505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613e3f57613e3f613e03565b604052919050565b5f82601f830112613e56575f80fd5b81356001600160401b03811115613e6f57613e6f613e03565b613e82601f8201601f1916602001613e17565b818152846020838601011115613e96575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215613ec2575f80fd5b81356001600160401b03811115613ed7575f80fd5b610bab84828501613e47565b5f60208284031215613ef3575f80fd5b8135610cb481613933565b5f6001600160401b03821115613f1657613f16613e03565b5060051b60200190565b5f613f32613f2d84613efe565b613e17565b8381529050602080820190600585901b840186811115613f50575f80fd5b845b81811015613f895780356001600160401b03811115613f6f575f80fd5b613f7b89828901613e47565b855250928201928201613f52565b505050509392505050565b5f60208284031215613fa4575f80fd5b81356001600160401b03811115613fb9575f80fd5b8201601f81018413613fc9575f80fd5b610bab84823560208401613f20565b5f8060408385031215613fe9575f80fd5b50508035926020909101359150565b604081525f61400a60408301856138df565b8281036020840152610cb081856138df565b5f805f806060858703121561402f575f80fd5b843561403a81613933565b93506020850135925060408501356001600160401b0381111561405b575f80fd5b61406787828801613971565b95989497509550505050565b5f805f805f805f6080888a031215614089575f80fd5b87356001600160401b038082111561409f575f80fd5b6140ab8b838c01613971565b909950975060208a0135965060408a01359150808211156140ca575f80fd5b6140d68b838c01613a1b565b909650945060608a01359150808211156140ee575f80fd5b506140fb8a828b01613a1b565b989b979a50959850939692959293505050565b5f806020838503121561411f575f80fd5b82356001600160401b03811115614134575f80fd5b613ce185828601613971565b5f8060408385031215614151575f80fd5b823561415c81613933565b9150612a4460208401613ba9565b604081525f61417c6040830185613aa2565b8281036020840152610cb08185613aa2565b5f805f80608085870312156141a1575f80fd5b84356141ac81613933565b935060208501356141bc81613933565b92506040850135915060608501356001600160401b038111156141dd575f80fd5b6141e987828801613e47565b91505092959194509250565b5f805f60408486031215614207575f80fd5b833561421281613933565b925060208401356001600160401b0381111561422c575f80fd5b613b9c86828701613971565b5f8060408385031215614249575f80fd5b823561425481613933565b9150602083013561426481613933565b809150509250929050565b5f805f60408486031215614281575f80fd5b8335925060208401356001600160401b0381111561422c575f80fd5b5f805f80608085870312156142b0575f80fd5b84356142bb81613933565b935060208501356142cb81613933565b925060408501356142db81613933565b915060608501356142eb81613933565b939692955090935050565b600181811c9082168061430a57607f821691505b6020821081036111da57634e487b7160e01b5f52602260045260245ffd5b5f60208284031215614338575f80fd5b610cb482613ba9565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e1984360301811261436a575f80fd5b8301803591506001600160401b03821115614383575f80fd5b6020019150368190038213156137a1575f80fd5b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b5f610cb4368484613f20565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b5f82516144868184602087016138bd565b9190910192915050565b601f82111561092757805f5260205f20601f840160051c810160208510156144b55750805b601f840160051c820191505b81811015610dad575f81556001016144c1565b6001600160401b038311156144eb576144eb613e03565b6144ff836144f983546142f6565b83614490565b5f601f841160018114614530575f85156145195750838201355b5f19600387901b1c1916600186901b178355610dad565b5f83815260208120601f198716915b8281101561455f578685013582556020948501946001909201910161453f565b508682101561457b575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610bab60208301848661458d565b5f608082360312156145d8575f80fd5b604051608081016001600160401b0382821081831117156145fb576145fb613e03565b816040528435915061460c82613933565b81835260208501356020840152604085013560408401526060850135915080821115614636575f80fd5b5061464336828601613e47565b60608301525092915050565b5f83516146608184602088016138bd565b8351908301906146748183602088016138bd565b01949350505050565b5f602080838503121561468e575f80fd5b82356001600160401b038111156146a3575f80fd5b8301601f810185136146b3575f80fd5b80356146c1613f2d82613efe565b81815260059190911b820183019083810190878311156146df575f80fd5b928401925b828410156146fd578335825292840192908401906146e4565b979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085857610858614708565b6001600160a01b038481168252831660208201526060604082018190525f90610a77908301846138df565b634e487b7160e01b5f52601260045260245ffd5b5f8261477c5761477c61475a565b500490565b634e487b7160e01b5f52600160045260245ffd5b8181038181111561085857610858614708565b5f816147b6576147b6614708565b505f190190565b5f83516147ce8184602088016138bd565b601760f91b90830190815283516147ec8160018401602088016138bd565b01600101949350505050565b5f60208284031215614808575f80fd5b5051919050565b5f6020828403121561481f575f80fd5b8151610cb481613933565b818382375f9101908152919050565b81516001600160401b0381111561485257614852613e03565b6148668161486084546142f6565b84614490565b602080601f831160018114614899575f84156148825750858301515b5f19600386901b1c1916600185901b178555610f78565b5f85815260208120601f198616915b828110156148c7578886015182559484019460019091019084016148a8565b50858210156148e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6001820161495757614957614708565b5060010190565b5f8261496c5761496c61475a565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f84516149cd8184602089016138bd565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f610bab60408301846138df565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612d05908301846138df565b5f60208284031215614a68575f80fd5b8151610cb48161388d56febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/Verifiers.json b/artifacts/Verifiers.json new file mode 100644 index 00000000..3ea9d868 --- /dev/null +++ b/artifacts/Verifiers.json @@ -0,0 +1,653 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Verifiers", + "sourceName": "seaport-core/src/lib/Verifiers.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "conduitController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BadContractSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BadFraction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadReturnValueFromERC20OnTransfer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "BadSignatureV", + "type": "error" + }, + { + "inputs": [], + "name": "CannotCancelOrder", + "type": "error" + }, + { + "inputs": [], + "name": "ConsiderationLengthNotEqualToTotalOriginal", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "orderIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "considerationIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shortfallAmount", + "type": "uint256" + } + ], + "name": "ConsiderationNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "identifiers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "ERC1155BatchTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientNativeTokensSupplied", + "type": "error" + }, + { + "inputs": [], + "name": "Invalid1155BatchTransferEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBasicOrderParameterEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidCallToConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "conduit", + "type": "address" + } + ], + "name": "InvalidConduit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InvalidERC721TransferAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "InvalidMsgValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNativeOfferItem", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidTime", + "type": "error" + }, + { + "inputs": [], + "name": "MissingItemAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MissingOriginalConsiderationItems", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "NativeTokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NoContract", + "type": "error" + }, + { + "inputs": [], + "name": "NoReentrantCalls", + "type": "error" + }, + { + "inputs": [], + "name": "NoSpecifiedOrdersAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderAlreadyFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderIsCancelled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "OrderPartiallyFilled", + "type": "error" + }, + { + "inputs": [], + "name": "PartialFillsNotEnabledForOrder", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreAlreadyActivated", + "type": "error" + }, + { + "inputs": [], + "name": "TStoreNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TloadTestContractDeploymentFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokenTransferGenericFailure", + "type": "error" + }, + { + "inputs": [], + "name": "UnusedItemParameters", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newCounter", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + } + ], + "name": "CounterIncremented", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + } + ], + "name": "OrderCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SpentItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ReceivedItem[]", + "name": "consideration", + "type": "tuple[]" + } + ], + "name": "OrderFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "offerer", + "type": "address" + }, + { + "internalType": "address", + "name": "zone", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + } + ], + "internalType": "struct OfferItem[]", + "name": "offer", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum ItemType", + "name": "itemType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "identifierOrCriteria", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct ConsiderationItem[]", + "name": "consideration", + "type": "tuple[]" + }, + { + "internalType": "enum OrderType", + "name": "orderType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "zoneHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "conduitKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "totalOriginalConsiderationItems", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct OrderParameters", + "name": "orderParameters", + "type": "tuple" + } + ], + "name": "OrderValidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32[]", + "name": "orderHashes", + "type": "bytes32[]" + } + ], + "name": "OrdersMatched", + "type": "event" + }, + { + "inputs": [], + "name": "__activateTstore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x610200604052348015610010575f80fd5b5060405161079138038061079183398101604081905261002f916102f7565b80808061003a61015a565b610120526101005260e05260c081905260a082815246610140819052604080515f9485526020879052948152606091825230608090815292842085825293909152939052610160526001600160a01b038316610180819052630a96ad3960e01b825282519092630a96ad3992600480820193918290030181865afa1580156100c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e89190610324565b506101a052505f90506100f9610280565b90506001600160a01b03811661012257604051632aea588760e01b815260040160405180910390fd5b5f61012c82610299565b8015156101c0526001600160a01b0383166101e05290508061015157600163929eee14555b505050506103b8565b5f808080808061018a60408051808201909152600d81526c21b7b739b4b232b930ba34b7b760991b602082015290565b8051906020012095506040518060400160405280600381526020016218971b60e91b8152508051906020012094505f6040518060a00160405280606a8152602001610727606a913990505f6040518060c001604052806084815260200161057d6084913990505f60405180610100016040528060d4815260200161065360d4913990506040518060800160405280605281526020016106016052913980519060200120965082805190602001209550818051906020012094505f81838560405160200161025993929190610373565b60405160208183030381529060405290508080519060200120945050505050909192939495565b5f696002601e613d5c3d52f35f52600a60165ff0905090565b5f816001600160a01b0316600a5a6102b19190610399565b6040515f8181818686fa925050503d805f81146102e9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ee565b606091505b50909392505050565b5f60208284031215610307575f80fd5b81516001600160a01b038116811461031d575f80fd5b9392505050565b5f8060408385031215610335575f80fd5b505080516020909101519092909150565b5f81515f5b81811015610365576020818501810151868301520161034b565b505f93019283525090919050565b5f61039061038a6103848488610346565b86610346565b84610346565b95945050505050565b5f826103b357634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161016261041b5f395f608d01525f604201525f50505f50505f50505f50505f50505f50505f50505f50505f50505f50506101625ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a436f6e73696465726174696f6e4974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e742c6164647265737320726563697069656e7429454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294f72646572436f6d706f6e656e74732861646472657373206f6666657265722c61646472657373207a6f6e652c4f666665724974656d5b5d206f666665722c436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f6e2c75696e7438206f72646572547970652c75696e7432353620737461727454696d652c75696e7432353620656e6454696d652c62797465733332207a6f6e65486173682c75696e743235362073616c742c6279746573333220636f6e647569744b65792c75696e7432353620636f756e746572294f666665724974656d2875696e7438206974656d547970652c6164647265737320746f6b656e2c75696e74323536206964656e7469666965724f7243726974657269612c75696e74323536207374617274416d6f756e742c75696e7432353620656e64416d6f756e7429", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80637423eb3c1461002d575b5f80fd5b610035610037565b005b63929eee14546001147f00000000000000000000000000000000000000000000000000000000000000008061006a575080155b1561008857604051630f45b98b60e41b815260040160405180910390fd5b6100b17f00000000000000000000000000000000000000000000000000000000000000006100d8565b6100ce576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f816001600160a01b0316600a5a6100f09190610136565b6040515f8181818686fa925050503d805f8114610128576040519150601f19603f3d011682016040523d82523d5f602084013e61012d565b606091505b50909392505050565b5f8261015057634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ZilliqaRecover.json b/artifacts/ZilliqaRecover.json index 2d46ba82..f7723614 100644 --- a/artifacts/ZilliqaRecover.json +++ b/artifacts/ZilliqaRecover.json @@ -569,8 +569,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611c80806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806371017a54116100a25780639e32d364116100715780639e32d36414610260578063a424740014610287578063dd6b9e221461029a578063e1c4b65a146102ad578063e35a14e5146102c057600080fd5b806371017a54146102145780637b103999146102275780638f0dbd251461023a5780639810b6951461024d57600080fd5b8063485cc955116100de578063485cc95514610197578063572b6c05146101aa57806358884432146101d65780636ccbae5f1461020157600080fd5b8063150b7a02146101105780631694116d146101415780631bf7e13e146101565780631c351a9d14610176575b600080fd5b61012361011e3660046114ae565b6102e9565b6040516001600160e01b031990911681526020015b60405180910390f35b61015461014f366004611566565b61037b565b005b6101696101643660046115d1565b610422565b6040516101389190611692565b6101896101843660046116a5565b6104ee565b604051908152602001610138565b6101546101a53660046116fc565b6105df565b6101c66101b8366004611735565b6001600160a01b0316301490565b6040519015158152602001610138565b6067546101e9906001600160a01b031681565b6040516001600160a01b039091168152602001610138565b61018961020f366004611752565b61071a565b6101e961022236600461176b565b610774565b6066546101e9906001600160a01b031681565b61015461024836600461178d565b6107b5565b6101e961025b36600461176b565b61082a565b6101897fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c66102953660046115d1565b610886565b6101c66102a83660046117ce565b6108d1565b6101546102bb366004611816565b610953565b6101e96102ce366004611752565b6000908152606560205260409020546001600160a01b031690565b6066546000906001600160a01b0316610300610a86565b6001600160a01b031614158061032b57506000848152606560205260409020546001600160a01b0316155b156103695783610339610a86565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b82826103878282610774565b6001600160a01b0316610398610a86565b6001600160a01b0316146103c957604051632cd9b44d60e11b81526004810183905260248101829052604401610360565b60006103d5868661082a565b905060005b87811015610417576104058989838181106103f7576103f7611858565b905060200201358387610a95565b8061040f81611884565b9150506103da565b505050505050505050565b606060005a9050610434858585610886565b61045157604051638baa579f60e01b815260040160405180910390fd5b6104e36104616020870187611735565b3060408801358461047560608b018b61189d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250610bd092505050565b9150505b9392505050565b6067546000906001600160a01b031663aa271e1a61050a610a86565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906118e4565b158061058d575030610582610a86565b6001600160a01b0316145b156105bf5761059a610a86565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610360565b60006105cc858585610cb1565b90506105d781610ece565b949350505050565b600054610100900460ff16158080156105ff5750600054600160ff909116105b806106195750303b158015610619575060005460ff166001145b61067c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610360565b6000805460ff19166001179055801561069f576000805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b03199283161790925560678054928516929091169190911790558015610715576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a83815602082015290810182905260009061076d906060016040516020818303038152906040528051906020012090565b5492915050565b6000808383604051602001610793929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b82826107c18282610774565b6001600160a01b03166107d2610a86565b6001600160a01b03161461080357604051632cd9b44d60e11b81526004810183905260248101829052604401610360565b8561080d81610ece565b6108218761081b888961082a565b86610a95565b50505050505050565b60008060026108398585610eea565b6040516108469190611906565b602060405180830381855afa158015610863573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105d79190611922565b60006105d7610894856119ab565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f7092505050565b6000805b8281101561094857846001600160a01b031661091e8585848181106108fc576108fc611858565b905060200201356000908152606560205260409020546001600160a01b031690565b6001600160a01b0316146109365760009150506104e7565b8061094081611884565b9150506108d5565b506001949350505050565b6067546001600160a01b031663aa271e1a61096c610a86565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d491906118e4565b15806109ef5750306109e4610a86565b6001600160a01b0316145b156109fc5761059a610a86565b60005b8181101561071557610a73838383818110610a1c57610a1c611858565b9050602002810190610a2e9190611a6e565b610a3c90602081019061189d565b858585818110610a4e57610a4e611858565b9050602002810190610a609190611a6e565b610a6e906020810190611735565b610cb1565b5080610a7e81611884565b9150506109ff565b6000610a906110b9565b905090565b6000838152606560205260409020546001600160a01b03838116911614610afa57600083815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610360565b6000838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e90606401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50505050806001600160a01b0316610b95610a86565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610bdb856110d7565b600080876001600160a01b031686610bf58b8a898961113d565b604051610c029190611906565b60006040518083038160008787f1925050503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b509092509050610c56603f87611a9a565b5a11610c6457610c64611aae565b610ca482826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061116d565b9998505050505050505050565b6000606060007fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610ceb929190611ac4565b60405160208183030381529060405280519060200120604051602001610d1b929190918252602082015260400190565b60408051808303601f190181528282528051602090910120600280845260608401909252925060009190816020015b6060815260200190600190039081610d4a57905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250855186945090925015159050610dab57610dab611858565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610de557610de5611858565b60209081029190910181019190915260008381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610e4e91309186918991829190600401611b29565b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610ebc929190611b88565b60405180910390a35095945050505050565b303303610ee157610ede816111a6565b50565b610ede816110d7565b6060600082610efb60016020611bb7565b60ff1660208110610f0e57610f0e611858565b1a9050610f1c600282611bd0565b60ff1615610f2b576003610f2e565b60025b84604051602001610f5892919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611922565b905060006110898660600151805190602001208688602001516040516020016110299392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156110af575085516110af906001600160a01b031682866111d0565b9695505050505050565b60003033036110cf575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a83815602082015290810182905260009060600160405160208183030381529060405280519060200120905061112c8190565b54611138906001611bf2565b905550565b606082858560405160200161115493929190611c05565b6040516020818303038152906040529050949350505050565b6060831561117c5750816104e7565b82511561118c5782518084602001fd5b8160405162461bcd60e51b81526004016103609190611692565b6111ae611312565b8114610ede57604051635637b6af60e11b815260048101829052602401610360565b60008060006111df8585611325565b909250905060008160048111156111f8576111f8611c44565b1480156112165750856001600160a01b0316826001600160a01b0316145b15611226576001925050506104e7565b600080876001600160a01b0316631626ba7e60e01b888860405160240161124e929190611c5a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161128c9190611906565b600060405180830381855afa9150503d80600081146112c7576040519150601f19603f3d011682016040523d82523d6000602084013e6112cc565b606091505b50915091508180156112df575080516020145b801561130657508051630b135d3f60e11b906113049083016020908101908401611922565b145b98975050505050505050565b60003033036110d45750601f1936013590565b600080825160410361135b5760208301516040840151606085015160001a61134f8782858561136a565b94509450505050611363565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113a1575060009050600361144e565b8460ff16601b141580156113b957508460ff16601c14155b156113ca575060009050600461144e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561141e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114475760006001925092505061144e565b9150600090505b94509492505050565b6001600160a01b0381168114610ede57600080fd5b60008083601f84011261147e57600080fd5b50813567ffffffffffffffff81111561149657600080fd5b60208301915083602082850101111561136357600080fd5b6000806000806000608086880312156114c657600080fd5b85356114d181611457565b945060208601356114e181611457565b935060408601359250606086013567ffffffffffffffff81111561150457600080fd5b6115108882890161146c565b969995985093965092949392505050565b60008083601f84011261153357600080fd5b50813567ffffffffffffffff81111561154b57600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060006080868803121561157e57600080fd5b853567ffffffffffffffff81111561159557600080fd5b6115a188828901611521565b909650945050602086013592506040860135915060608601356115c381611457565b809150509295509295909350565b6000806000604084860312156115e657600080fd5b833567ffffffffffffffff808211156115fe57600080fd5b908501906080828803121561161257600080fd5b9093506020850135908082111561162857600080fd5b506116358682870161146c565b9497909650939450505050565b60005b8381101561165d578181015183820152602001611645565b50506000910152565b6000815180845261167e816020860160208601611642565b601f01601f19169290920160200192915050565b6020815260006104e76020830184611666565b6000806000604084860312156116ba57600080fd5b833567ffffffffffffffff8111156116d157600080fd5b6116dd8682870161146c565b90945092505060208401356116f181611457565b809150509250925092565b6000806040838503121561170f57600080fd5b823561171a81611457565b9150602083013561172a81611457565b809150509250929050565b60006020828403121561174757600080fd5b81356104e781611457565b60006020828403121561176457600080fd5b5035919050565b6000806040838503121561177e57600080fd5b50508035926020909101359150565b600080600080608085870312156117a357600080fd5b84359350602085013592506040850135915060608501356117c381611457565b939692955090935050565b6000806000604084860312156117e357600080fd5b83356117ee81611457565b9250602084013567ffffffffffffffff81111561180a57600080fd5b61163586828701611521565b6000806020838503121561182957600080fd5b823567ffffffffffffffff81111561184057600080fd5b61184c85828601611521565b90969095509350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118965761189661186e565b5060010190565b6000808335601e198436030181126118b457600080fd5b83018035915067ffffffffffffffff8211156118cf57600080fd5b60200191503681900382131561136357600080fd5b6000602082840312156118f657600080fd5b815180151581146104e757600080fd5b60008251611918818460208701611642565b9190910192915050565b60006020828403121561193457600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156119745761197461193b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119a3576119a361193b565b604052919050565b6000608082360312156119bd57600080fd5b6119c5611951565b82356119d081611457565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff80821115611a0157600080fd5b9085019036601f830112611a1457600080fd5b813581811115611a2657611a2661193b565b611a38601f8201601f1916850161197a565b91508082523684828501011115611a4e57600080fd5b808484018584013760009082019093019290925250606082015292915050565b60008235603e1983360301811261191857600080fd5b634e487b7160e01b600052601260045260246000fd5b600082611aa957611aa9611a84565b500490565b634e487b7160e01b600052600160045260246000fd5b8183823760009101908152919050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b1c578284038952611b0a848351611666565b98850198935090840190600101611af2565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090611b4d90830187611ad4565b8281036040840152611b5f8187611ad4565b90508281036060840152611b738186611ad4565b91505082151560808301529695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60ff82811682821603908111156107af576107af61186e565b600060ff831680611be357611be3611a84565b8060ff84160691505092915050565b808201808211156107af576107af61186e565b60008451611c17818460208901611642565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260006105d7604083018461166656fea164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806371017a54116100a25780639e32d364116100715780639e32d36414610260578063a424740014610287578063dd6b9e221461029a578063e1c4b65a146102ad578063e35a14e5146102c057600080fd5b806371017a54146102145780637b103999146102275780638f0dbd251461023a5780639810b6951461024d57600080fd5b8063485cc955116100de578063485cc95514610197578063572b6c05146101aa57806358884432146101d65780636ccbae5f1461020157600080fd5b8063150b7a02146101105780631694116d146101415780631bf7e13e146101565780631c351a9d14610176575b600080fd5b61012361011e3660046114ae565b6102e9565b6040516001600160e01b031990911681526020015b60405180910390f35b61015461014f366004611566565b61037b565b005b6101696101643660046115d1565b610422565b6040516101389190611692565b6101896101843660046116a5565b6104ee565b604051908152602001610138565b6101546101a53660046116fc565b6105df565b6101c66101b8366004611735565b6001600160a01b0316301490565b6040519015158152602001610138565b6067546101e9906001600160a01b031681565b6040516001600160a01b039091168152602001610138565b61018961020f366004611752565b61071a565b6101e961022236600461176b565b610774565b6066546101e9906001600160a01b031681565b61015461024836600461178d565b6107b5565b6101e961025b36600461176b565b61082a565b6101897fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c66102953660046115d1565b610886565b6101c66102a83660046117ce565b6108d1565b6101546102bb366004611816565b610953565b6101e96102ce366004611752565b6000908152606560205260409020546001600160a01b031690565b6066546000906001600160a01b0316610300610a86565b6001600160a01b031614158061032b57506000848152606560205260409020546001600160a01b0316155b156103695783610339610a86565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b82826103878282610774565b6001600160a01b0316610398610a86565b6001600160a01b0316146103c957604051632cd9b44d60e11b81526004810183905260248101829052604401610360565b60006103d5868661082a565b905060005b87811015610417576104058989838181106103f7576103f7611858565b905060200201358387610a95565b8061040f81611884565b9150506103da565b505050505050505050565b606060005a9050610434858585610886565b61045157604051638baa579f60e01b815260040160405180910390fd5b6104e36104616020870187611735565b3060408801358461047560608b018b61189d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250610bd092505050565b9150505b9392505050565b6067546000906001600160a01b031663aa271e1a61050a610a86565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906118e4565b158061058d575030610582610a86565b6001600160a01b0316145b156105bf5761059a610a86565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610360565b60006105cc858585610cb1565b90506105d781610ece565b949350505050565b600054610100900460ff16158080156105ff5750600054600160ff909116105b806106195750303b158015610619575060005460ff166001145b61067c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610360565b6000805460ff19166001179055801561069f576000805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b03199283161790925560678054928516929091169190911790558015610715576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a83815602082015290810182905260009061076d906060016040516020818303038152906040528051906020012090565b5492915050565b6000808383604051602001610793929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b82826107c18282610774565b6001600160a01b03166107d2610a86565b6001600160a01b03161461080357604051632cd9b44d60e11b81526004810183905260248101829052604401610360565b8561080d81610ece565b6108218761081b888961082a565b86610a95565b50505050505050565b60008060026108398585610eea565b6040516108469190611906565b602060405180830381855afa158015610863573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105d79190611922565b60006105d7610894856119ab565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f7092505050565b6000805b8281101561094857846001600160a01b031661091e8585848181106108fc576108fc611858565b905060200201356000908152606560205260409020546001600160a01b031690565b6001600160a01b0316146109365760009150506104e7565b8061094081611884565b9150506108d5565b506001949350505050565b6067546001600160a01b031663aa271e1a61096c610a86565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d491906118e4565b15806109ef5750306109e4610a86565b6001600160a01b0316145b156109fc5761059a610a86565b60005b8181101561071557610a73838383818110610a1c57610a1c611858565b9050602002810190610a2e9190611a6e565b610a3c90602081019061189d565b858585818110610a4e57610a4e611858565b9050602002810190610a609190611a6e565b610a6e906020810190611735565b610cb1565b5080610a7e81611884565b9150506109ff565b6000610a906110b9565b905090565b6000838152606560205260409020546001600160a01b03838116911614610afa57600083815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610360565b6000838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e90606401600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b50505050806001600160a01b0316610b95610a86565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610bdb856110d7565b600080876001600160a01b031686610bf58b8a898961113d565b604051610c029190611906565b60006040518083038160008787f1925050503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b509092509050610c56603f87611a9a565b5a11610c6457610c64611aae565b610ca482826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061116d565b9998505050505050505050565b6000606060007fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610ceb929190611ac4565b60405160208183030381529060405280519060200120604051602001610d1b929190918252602082015260400190565b60408051808303601f190181528282528051602090910120600280845260608401909252925060009190816020015b6060815260200190600190039081610d4a57905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250855186945090925015159050610dab57610dab611858565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610de557610de5611858565b60209081029190910181019190915260008381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610e4e91309186918991829190600401611b29565b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610ebc929190611b88565b60405180910390a35095945050505050565b303303610ee157610ede816111a6565b50565b610ede816110d7565b6060600082610efb60016020611bb7565b60ff1660208110610f0e57610f0e611858565b1a9050610f1c600282611bd0565b60ff1615610f2b576003610f2e565b60025b84604051602001610f5892919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611922565b905060006110898660600151805190602001208688602001516040516020016110299392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156110af575085516110af906001600160a01b031682866111d0565b9695505050505050565b60003033036110cf575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a83815602082015290810182905260009060600160405160208183030381529060405280519060200120905061112c8190565b54611138906001611bf2565b905550565b606082858560405160200161115493929190611c05565b6040516020818303038152906040529050949350505050565b6060831561117c5750816104e7565b82511561118c5782518084602001fd5b8160405162461bcd60e51b81526004016103609190611692565b6111ae611312565b8114610ede57604051635637b6af60e11b815260048101829052602401610360565b60008060006111df8585611325565b909250905060008160048111156111f8576111f8611c44565b1480156112165750856001600160a01b0316826001600160a01b0316145b15611226576001925050506104e7565b600080876001600160a01b0316631626ba7e60e01b888860405160240161124e929190611c5a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161128c9190611906565b600060405180830381855afa9150503d80600081146112c7576040519150601f19603f3d011682016040523d82523d6000602084013e6112cc565b606091505b50915091508180156112df575080516020145b801561130657508051630b135d3f60e11b906113049083016020908101908401611922565b145b98975050505050505050565b60003033036110d45750601f1936013590565b600080825160410361135b5760208301516040840151606085015160001a61134f8782858561136a565b94509450505050611363565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113a1575060009050600361144e565b8460ff16601b141580156113b957508460ff16601c14155b156113ca575060009050600461144e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561141e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114475760006001925092505061144e565b9150600090505b94509492505050565b6001600160a01b0381168114610ede57600080fd5b60008083601f84011261147e57600080fd5b50813567ffffffffffffffff81111561149657600080fd5b60208301915083602082850101111561136357600080fd5b6000806000806000608086880312156114c657600080fd5b85356114d181611457565b945060208601356114e181611457565b935060408601359250606086013567ffffffffffffffff81111561150457600080fd5b6115108882890161146c565b969995985093965092949392505050565b60008083601f84011261153357600080fd5b50813567ffffffffffffffff81111561154b57600080fd5b6020830191508360208260051b850101111561136357600080fd5b60008060008060006080868803121561157e57600080fd5b853567ffffffffffffffff81111561159557600080fd5b6115a188828901611521565b909650945050602086013592506040860135915060608601356115c381611457565b809150509295509295909350565b6000806000604084860312156115e657600080fd5b833567ffffffffffffffff808211156115fe57600080fd5b908501906080828803121561161257600080fd5b9093506020850135908082111561162857600080fd5b506116358682870161146c565b9497909650939450505050565b60005b8381101561165d578181015183820152602001611645565b50506000910152565b6000815180845261167e816020860160208601611642565b601f01601f19169290920160200192915050565b6020815260006104e76020830184611666565b6000806000604084860312156116ba57600080fd5b833567ffffffffffffffff8111156116d157600080fd5b6116dd8682870161146c565b90945092505060208401356116f181611457565b809150509250925092565b6000806040838503121561170f57600080fd5b823561171a81611457565b9150602083013561172a81611457565b809150509250929050565b60006020828403121561174757600080fd5b81356104e781611457565b60006020828403121561176457600080fd5b5035919050565b6000806040838503121561177e57600080fd5b50508035926020909101359150565b600080600080608085870312156117a357600080fd5b84359350602085013592506040850135915060608501356117c381611457565b939692955090935050565b6000806000604084860312156117e357600080fd5b83356117ee81611457565b9250602084013567ffffffffffffffff81111561180a57600080fd5b61163586828701611521565b6000806020838503121561182957600080fd5b823567ffffffffffffffff81111561184057600080fd5b61184c85828601611521565b90969095509350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118965761189661186e565b5060010190565b6000808335601e198436030181126118b457600080fd5b83018035915067ffffffffffffffff8211156118cf57600080fd5b60200191503681900382131561136357600080fd5b6000602082840312156118f657600080fd5b815180151581146104e757600080fd5b60008251611918818460208701611642565b9190910192915050565b60006020828403121561193457600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156119745761197461193b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119a3576119a361193b565b604052919050565b6000608082360312156119bd57600080fd5b6119c5611951565b82356119d081611457565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff80821115611a0157600080fd5b9085019036601f830112611a1457600080fd5b813581811115611a2657611a2661193b565b611a38601f8201601f1916850161197a565b91508082523684828501011115611a4e57600080fd5b808484018584013760009082019093019290925250606082015292915050565b60008235603e1983360301811261191857600080fd5b634e487b7160e01b600052601260045260246000fd5b600082611aa957611aa9611a84565b500490565b634e487b7160e01b600052600160045260246000fd5b8183823760009101908152919050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b1c578284038952611b0a848351611666565b98850198935090840190600101611af2565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090611b4d90830187611ad4565b8281036040840152611b5f8187611ad4565b90508281036060840152611b738186611ad4565b91505082151560808301529695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60ff82811682821603908111156107af576107af61186e565b600060ff831680611be357611be3611a84565b8060ff84160691505092915050565b808201808211156107af576107af61186e565b60008451611c17818460208901611642565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260006105d7604083018461166656fea164736f6c6343000811000a", + "bytecode": "0x608060405234801561000f575f80fd5b5061001861001d565b6100da565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156100d8575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b9d806100e75f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806371017a541161009e5780639e32d3641161006e5780639e32d3641461025a578063a424740014610281578063dd6b9e2214610294578063e1c4b65a146102a7578063e35a14e5146102ba575f80fd5b806371017a541461020e5780637b103999146102215780638f0dbd25146102345780639810b69514610247575f80fd5b8063485cc955116100d9578063485cc95514610191578063572b6c05146101a457806358884432146101d05780636ccbae5f146101fb575f80fd5b8063150b7a021461010a5780631694116d1461013b5780631bf7e13e146101505780631c351a9d14610170575b5f80fd5b61011d610118366004611434565b6102e2565b6040516001600160e01b031990911681526020015b60405180910390f35b61014e6101493660046114e3565b610372565b005b61016361015e366004611549565b61040d565b6040516101329190611601565b61018361017e366004611613565b6104d6565b604051908152602001610132565b61014e61019f366004611666565b6105c3565b6101c06101b236600461169d565b6001600160a01b0316301490565b6040519015158152602001610132565b6067546101e3906001600160a01b031681565b6040516001600160a01b039091168152602001610132565b6101836102093660046116b8565b6106f8565b6101e361021c3660046116cf565b610751565b6066546101e3906001600160a01b031681565b61014e6102423660046116ef565b610791565b6101e36102553660046116cf565b610806565b6101837fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c061028f366004611549565b61085f565b6101c06102a236600461172d565b6108a8565b61014e6102b5366004611771565b61091d565b6101e36102c83660046116b8565b5f908152606560205260409020546001600160a01b031690565b6066545f906001600160a01b03166102f8610a43565b6001600160a01b031614158061032257505f848152606560205260409020546001600160a01b0316155b156103605783610330610a43565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b828261037e8282610751565b6001600160a01b031661038f610a43565b6001600160a01b0316146103c057604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b5f6103cb8686610806565b90505f5b87811015610402576103fa8989838181106103ec576103ec6117b0565b905060200201358387610a51565b6001016103cf565b505050505050505050565b60605f5a905061041e85858561085f565b61043b57604051638baa579f60e01b815260040160405180910390fd5b6104cb61044b602087018761169d565b3060408801358461045f60608b018b6117c4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f92019190915250610b8492505050565b9150505b9392505050565b6067545f906001600160a01b031663aa271e1a6104f1610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610533573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105579190611807565b1580610572575030610567610a43565b6001600160a01b0316145b156105a45761057f610a43565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610357565b5f6105b0858585610c60565b90506105bb81610e73565b949350505050565b5f54610100900460ff16158080156105e157505f54600160ff909116105b806105fa5750303b1580156105fa57505f5460ff166001145b61065d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610357565b5f805460ff19166001179055801561067e575f805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b031992831617909255606780549285169290911691909117905580156106f3575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9061074a906060016040516020818303038152906040528051906020012090565b5492915050565b5f80838360405160200161076f929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b828261079d8282610751565b6001600160a01b03166107ae610a43565b6001600160a01b0316146107df57604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b856107e981610e73565b6107fd876107f78889610806565b86610a51565b50505050505050565b5f8060026108148585610e8f565b6040516108219190611826565b602060405180830381855afa15801561083c573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bb9190611841565b5f6105bb61086c856118c6565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f1492505050565b5f805b8281101561091257846001600160a01b03166108f38585848181106108d2576108d26117b0565b905060200201355f908152606560205260409020546001600160a01b031690565b6001600160a01b03161461090a575f9150506104cf565b6001016108ab565b506001949350505050565b6067546001600160a01b031663aa271e1a610936610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099c9190611807565b15806109b75750306109ac610a43565b6001600160a01b0316145b156109c45761057f610a43565b5f5b818110156106f357610a3a8383838181106109e3576109e36117b0565b90506020028101906109f59190611983565b610a039060208101906117c4565b858585818110610a1557610a156117b0565b9050602002810190610a279190611983565b610a3590602081019061169d565b610c60565b506001016109c6565b5f610a4c611059565b905090565b5f838152606560205260409020546001600160a01b03838116911614610ab4575f83815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610357565b5f838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e906064015f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b50505050806001600160a01b0316610b49610a43565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610b8f85611076565b5f80876001600160a01b031686610ba88b8a89896110db565b604051610bb59190611826565b5f604051808303815f8787f1925050503d805f8114610bef576040519150601f19603f3d011682016040523d82523d5f602084013e610bf4565b606091505b509092509050610c05603f876119bf565b5a11610c1357610c136119d2565b610c5382826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061110b565b9998505050505050505050565b5f60605f7fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610c989291906119e6565b60405160208183030381529060405280519060200120604051602001610cc8929190918252602082015260400190565b60408051808303601f19018152828252805160209091012060028084526060840190925292505f9190816020015b6060815260200190600190039081610cf657905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250855186945090925015159050610d5657610d566117b0565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610d9057610d906117b0565b6020908102919091018101919091525f8381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610df891309186918991829190600401611a4d565b5f604051808303815f87803b158015610e0f575f80fd5b505af1158015610e21573d5f803e3d5ffd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610e61929190611aab565b60405180910390a35095945050505050565b303303610e8657610e8381611144565b50565b610e8381611076565b60605f82610e9f60016020611ad9565b60ff1660208110610eb257610eb26117b0565b1a9050610ec0600282611af2565b60ff1615610ecf576003610ed2565b60025b84604051602001610efc92919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611841565b90505f611029866060015180519060200120868860200151604051602001610fc99392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561104f5750855161104f906001600160a01b0316828661116e565b9695505050505050565b5f30330361106e575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506110ca8190565b546110d6906001611b13565b905550565b60608285856040516020016110f293929190611b26565b6040516020818303038152906040529050949350505050565b6060831561111a5750816104cf565b82511561112a5782518084602001fd5b8160405162461bcd60e51b81526004016103579190611601565b61114c6112a9565b8114610e8357604051635637b6af60e11b815260048101829052602401610357565b5f805f61117b85856112bb565b90925090505f81600481111561119357611193611b64565b1480156111b15750856001600160a01b0316826001600160a01b0316145b156111c1576001925050506104cf565b5f80876001600160a01b0316631626ba7e60e01b88886040516024016111e8929190611b78565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112269190611826565b5f60405180830381855afa9150503d805f811461125e576040519150601f19603f3d011682016040523d82523d5f602084013e611263565b606091505b5091509150818015611276575080516020145b801561129d57508051630b135d3f60e11b9061129b9083016020908101908401611841565b145b98975050505050505050565b5f3033036110735750601f1936013590565b5f8082516041036112ef576020830151604084015160608501515f1a6112e3878285856112fd565b945094505050506112f6565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561133257505f905060036113d9565b8460ff16601b1415801561134a57508460ff16601c14155b1561135a57505f905060046113d9565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156113ab573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166113d3575f600192509250506113d9565b91505f90505b94509492505050565b6001600160a01b0381168114610e83575f80fd5b5f8083601f840112611406575f80fd5b50813567ffffffffffffffff81111561141d575f80fd5b6020830191508360208285010111156112f6575f80fd5b5f805f805f60808688031215611448575f80fd5b8535611453816113e2565b94506020860135611463816113e2565b935060408601359250606086013567ffffffffffffffff811115611485575f80fd5b611491888289016113f6565b969995985093965092949392505050565b5f8083601f8401126114b2575f80fd5b50813567ffffffffffffffff8111156114c9575f80fd5b6020830191508360208260051b85010111156112f6575f80fd5b5f805f805f608086880312156114f7575f80fd5b853567ffffffffffffffff81111561150d575f80fd5b611519888289016114a2565b9096509450506020860135925060408601359150606086013561153b816113e2565b809150509295509295909350565b5f805f6040848603121561155b575f80fd5b833567ffffffffffffffff80821115611572575f80fd5b9085019060808288031215611585575f80fd5b9093506020850135908082111561159a575f80fd5b506115a7868287016113f6565b9497909650939450505050565b5f5b838110156115ce5781810151838201526020016115b6565b50505f910152565b5f81518084526115ed8160208601602086016115b4565b601f01601f19169290920160200192915050565b602081525f6104cf60208301846115d6565b5f805f60408486031215611625575f80fd5b833567ffffffffffffffff81111561163b575f80fd5b611647868287016113f6565b909450925050602084013561165b816113e2565b809150509250925092565b5f8060408385031215611677575f80fd5b8235611682816113e2565b91506020830135611692816113e2565b809150509250929050565b5f602082840312156116ad575f80fd5b81356104cf816113e2565b5f602082840312156116c8575f80fd5b5035919050565b5f80604083850312156116e0575f80fd5b50508035926020909101359150565b5f805f8060808587031215611702575f80fd5b8435935060208501359250604085013591506060850135611722816113e2565b939692955090935050565b5f805f6040848603121561173f575f80fd5b833561174a816113e2565b9250602084013567ffffffffffffffff811115611765575f80fd5b6115a7868287016114a2565b5f8060208385031215611782575f80fd5b823567ffffffffffffffff811115611798575f80fd5b6117a4858286016114a2565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126117d9575f80fd5b83018035915067ffffffffffffffff8211156117f3575f80fd5b6020019150368190038213156112f6575f80fd5b5f60208284031215611817575f80fd5b815180151581146104cf575f80fd5b5f82516118378184602087016115b4565b9190910192915050565b5f60208284031215611851575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561188f5761188f611858565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118be576118be611858565b604052919050565b5f608082360312156118d6575f80fd5b6118de61186c565b82356118e9816113e2565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff80821115611919575f80fd5b9085019036601f83011261192b575f80fd5b81358181111561193d5761193d611858565b61194f601f8201601f19168501611895565b91508082523684828501011115611964575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8235603e19833603018112611837575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826119cd576119cd611997565b500490565b634e487b7160e01b5f52600160045260245ffd5b818382375f9101908152919050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611a4057601f19868403018952611a2e8383516115d6565b98840198925090830190600101611a12565b5090979650505050505050565b6001600160a01b038616815260a0602082018190525f90611a70908301876119f5565b8281036040840152611a8281876119f5565b90508281036060840152611a9681866119f5565b91505082151560808301529695505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b60ff828116828216039081111561078b5761078b6119ab565b5f60ff831680611b0457611b04611997565b8060ff84160691505092915050565b8082018082111561078b5761078b6119ab565b5f8451611b378184602089016115b4565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f6105bb60408301846115d656fea164736f6c6343000818000a", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c806371017a541161009e5780639e32d3641161006e5780639e32d3641461025a578063a424740014610281578063dd6b9e2214610294578063e1c4b65a146102a7578063e35a14e5146102ba575f80fd5b806371017a541461020e5780637b103999146102215780638f0dbd25146102345780639810b69514610247575f80fd5b8063485cc955116100d9578063485cc95514610191578063572b6c05146101a457806358884432146101d05780636ccbae5f146101fb575f80fd5b8063150b7a021461010a5780631694116d1461013b5780631bf7e13e146101505780631c351a9d14610170575b5f80fd5b61011d610118366004611434565b6102e2565b6040516001600160e01b031990911681526020015b60405180910390f35b61014e6101493660046114e3565b610372565b005b61016361015e366004611549565b61040d565b6040516101329190611601565b61018361017e366004611613565b6104d6565b604051908152602001610132565b61014e61019f366004611666565b6105c3565b6101c06101b236600461169d565b6001600160a01b0316301490565b6040519015158152602001610132565b6067546101e3906001600160a01b031681565b6040516001600160a01b039091168152602001610132565b6101836102093660046116b8565b6106f8565b6101e361021c3660046116cf565b610751565b6066546101e3906001600160a01b031681565b61014e6102423660046116ef565b610791565b6101e36102553660046116cf565b610806565b6101837fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c061028f366004611549565b61085f565b6101c06102a236600461172d565b6108a8565b61014e6102b5366004611771565b61091d565b6101e36102c83660046116b8565b5f908152606560205260409020546001600160a01b031690565b6066545f906001600160a01b03166102f8610a43565b6001600160a01b031614158061032257505f848152606560205260409020546001600160a01b0316155b156103605783610330610a43565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b828261037e8282610751565b6001600160a01b031661038f610a43565b6001600160a01b0316146103c057604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b5f6103cb8686610806565b90505f5b87811015610402576103fa8989838181106103ec576103ec6117b0565b905060200201358387610a51565b6001016103cf565b505050505050505050565b60605f5a905061041e85858561085f565b61043b57604051638baa579f60e01b815260040160405180910390fd5b6104cb61044b602087018761169d565b3060408801358461045f60608b018b6117c4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f92019190915250610b8492505050565b9150505b9392505050565b6067545f906001600160a01b031663aa271e1a6104f1610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610533573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105579190611807565b1580610572575030610567610a43565b6001600160a01b0316145b156105a45761057f610a43565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610357565b5f6105b0858585610c60565b90506105bb81610e73565b949350505050565b5f54610100900460ff16158080156105e157505f54600160ff909116105b806105fa5750303b1580156105fa57505f5460ff166001145b61065d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610357565b5f805460ff19166001179055801561067e575f805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b031992831617909255606780549285169290911691909117905580156106f3575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9061074a906060016040516020818303038152906040528051906020012090565b5492915050565b5f80838360405160200161076f929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b828261079d8282610751565b6001600160a01b03166107ae610a43565b6001600160a01b0316146107df57604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b856107e981610e73565b6107fd876107f78889610806565b86610a51565b50505050505050565b5f8060026108148585610e8f565b6040516108219190611826565b602060405180830381855afa15801561083c573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bb9190611841565b5f6105bb61086c856118c6565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f1492505050565b5f805b8281101561091257846001600160a01b03166108f38585848181106108d2576108d26117b0565b905060200201355f908152606560205260409020546001600160a01b031690565b6001600160a01b03161461090a575f9150506104cf565b6001016108ab565b506001949350505050565b6067546001600160a01b031663aa271e1a610936610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099c9190611807565b15806109b75750306109ac610a43565b6001600160a01b0316145b156109c45761057f610a43565b5f5b818110156106f357610a3a8383838181106109e3576109e36117b0565b90506020028101906109f59190611983565b610a039060208101906117c4565b858585818110610a1557610a156117b0565b9050602002810190610a279190611983565b610a3590602081019061169d565b610c60565b506001016109c6565b5f610a4c611059565b905090565b5f838152606560205260409020546001600160a01b03838116911614610ab4575f83815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610357565b5f838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e906064015f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b50505050806001600160a01b0316610b49610a43565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610b8f85611076565b5f80876001600160a01b031686610ba88b8a89896110db565b604051610bb59190611826565b5f604051808303815f8787f1925050503d805f8114610bef576040519150601f19603f3d011682016040523d82523d5f602084013e610bf4565b606091505b509092509050610c05603f876119bf565b5a11610c1357610c136119d2565b610c5382826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061110b565b9998505050505050505050565b5f60605f7fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610c989291906119e6565b60405160208183030381529060405280519060200120604051602001610cc8929190918252602082015260400190565b60408051808303601f19018152828252805160209091012060028084526060840190925292505f9190816020015b6060815260200190600190039081610cf657905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250855186945090925015159050610d5657610d566117b0565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610d9057610d906117b0565b6020908102919091018101919091525f8381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610df891309186918991829190600401611a4d565b5f604051808303815f87803b158015610e0f575f80fd5b505af1158015610e21573d5f803e3d5ffd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610e61929190611aab565b60405180910390a35095945050505050565b303303610e8657610e8381611144565b50565b610e8381611076565b60605f82610e9f60016020611ad9565b60ff1660208110610eb257610eb26117b0565b1a9050610ec0600282611af2565b60ff1615610ecf576003610ed2565b60025b84604051602001610efc92919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611841565b90505f611029866060015180519060200120868860200151604051602001610fc99392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561104f5750855161104f906001600160a01b0316828661116e565b9695505050505050565b5f30330361106e575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506110ca8190565b546110d6906001611b13565b905550565b60608285856040516020016110f293929190611b26565b6040516020818303038152906040529050949350505050565b6060831561111a5750816104cf565b82511561112a5782518084602001fd5b8160405162461bcd60e51b81526004016103579190611601565b61114c6112a9565b8114610e8357604051635637b6af60e11b815260048101829052602401610357565b5f805f61117b85856112bb565b90925090505f81600481111561119357611193611b64565b1480156111b15750856001600160a01b0316826001600160a01b0316145b156111c1576001925050506104cf565b5f80876001600160a01b0316631626ba7e60e01b88886040516024016111e8929190611b78565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112269190611826565b5f60405180830381855afa9150503d805f811461125e576040519150601f19603f3d011682016040523d82523d5f602084013e611263565b606091505b5091509150818015611276575080516020145b801561129d57508051630b135d3f60e11b9061129b9083016020908101908401611841565b145b98975050505050505050565b5f3033036110735750601f1936013590565b5f8082516041036112ef576020830151604084015160608501515f1a6112e3878285856112fd565b945094505050506112f6565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561133257505f905060036113d9565b8460ff16601b1415801561134a57508460ff16601c14155b1561135a57505f905060046113d9565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156113ab573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166113d3575f600192509250506113d9565b91505f90505b94509492505050565b6001600160a01b0381168114610e83575f80fd5b5f8083601f840112611406575f80fd5b50813567ffffffffffffffff81111561141d575f80fd5b6020830191508360208285010111156112f6575f80fd5b5f805f805f60808688031215611448575f80fd5b8535611453816113e2565b94506020860135611463816113e2565b935060408601359250606086013567ffffffffffffffff811115611485575f80fd5b611491888289016113f6565b969995985093965092949392505050565b5f8083601f8401126114b2575f80fd5b50813567ffffffffffffffff8111156114c9575f80fd5b6020830191508360208260051b85010111156112f6575f80fd5b5f805f805f608086880312156114f7575f80fd5b853567ffffffffffffffff81111561150d575f80fd5b611519888289016114a2565b9096509450506020860135925060408601359150606086013561153b816113e2565b809150509295509295909350565b5f805f6040848603121561155b575f80fd5b833567ffffffffffffffff80821115611572575f80fd5b9085019060808288031215611585575f80fd5b9093506020850135908082111561159a575f80fd5b506115a7868287016113f6565b9497909650939450505050565b5f5b838110156115ce5781810151838201526020016115b6565b50505f910152565b5f81518084526115ed8160208601602086016115b4565b601f01601f19169290920160200192915050565b602081525f6104cf60208301846115d6565b5f805f60408486031215611625575f80fd5b833567ffffffffffffffff81111561163b575f80fd5b611647868287016113f6565b909450925050602084013561165b816113e2565b809150509250925092565b5f8060408385031215611677575f80fd5b8235611682816113e2565b91506020830135611692816113e2565b809150509250929050565b5f602082840312156116ad575f80fd5b81356104cf816113e2565b5f602082840312156116c8575f80fd5b5035919050565b5f80604083850312156116e0575f80fd5b50508035926020909101359150565b5f805f8060808587031215611702575f80fd5b8435935060208501359250604085013591506060850135611722816113e2565b939692955090935050565b5f805f6040848603121561173f575f80fd5b833561174a816113e2565b9250602084013567ffffffffffffffff811115611765575f80fd5b6115a7868287016114a2565b5f8060208385031215611782575f80fd5b823567ffffffffffffffff811115611798575f80fd5b6117a4858286016114a2565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126117d9575f80fd5b83018035915067ffffffffffffffff8211156117f3575f80fd5b6020019150368190038213156112f6575f80fd5b5f60208284031215611817575f80fd5b815180151581146104cf575f80fd5b5f82516118378184602087016115b4565b9190910192915050565b5f60208284031215611851575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561188f5761188f611858565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118be576118be611858565b604052919050565b5f608082360312156118d6575f80fd5b6118de61186c565b82356118e9816113e2565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff80821115611919575f80fd5b9085019036601f83011261192b575f80fd5b81358181111561193d5761193d611858565b61194f601f8201601f19168501611895565b91508082523684828501011115611964575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8235603e19833603018112611837575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826119cd576119cd611997565b500490565b634e487b7160e01b5f52600160045260245ffd5b818382375f9101908152919050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611a4057601f19868403018952611a2e8383516115d6565b98840198925090830190600101611a12565b5090979650505050505050565b6001600160a01b038616815260a0602082018190525f90611a70908301876119f5565b8281036040840152611a8281876119f5565b90508281036060840152611a9681866119f5565b91505082151560808301529695505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b60ff828116828216039081111561078b5761078b6119ab565b5f60ff831680611b0457611b04611997565b8060ff84160691505092915050565b8082018082111561078b5761078b6119ab565b5f8451611b378184602089016115b4565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f6105bb60408301846115d656fea164736f6c6343000818000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/ZoneInteraction.json b/artifacts/ZoneInteraction.json new file mode 100644 index 00000000..4d6f5322 --- /dev/null +++ b/artifacts/ZoneInteraction.json @@ -0,0 +1,33 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ZoneInteraction", + "sourceName": "seaport-core/src/lib/ZoneInteraction.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600e575f80fd5b50601580601a5f395ff3fe60806040525f80fdfea164736f6c6343000818000a", + "deployedBytecode": "0x60806040525f80fdfea164736f6c6343000818000a", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/ZoneInteractionErrors.json b/artifacts/ZoneInteractionErrors.json new file mode 100644 index 00000000..608da8eb --- /dev/null +++ b/artifacts/ZoneInteractionErrors.json @@ -0,0 +1,33 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ZoneInteractionErrors", + "sourceName": "seaport-types/src/interfaces/ZoneInteractionErrors.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidContractOrder", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], + "name": "InvalidRestrictedOrder", + "type": "error" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/artifacts/abi/AmountDerivationErrors.json b/artifacts/abi/AmountDerivationErrors.json new file mode 100644 index 00000000..711bb3bb --- /dev/null +++ b/artifacts/abi/AmountDerivationErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"InexactFraction","type":"error"}] diff --git a/artifacts/abi/AmountDeriver.json b/artifacts/abi/AmountDeriver.json new file mode 100644 index 00000000..711bb3bb --- /dev/null +++ b/artifacts/abi/AmountDeriver.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"InexactFraction","type":"error"}] diff --git a/artifacts/abi/Assertions.json b/artifacts/abi/Assertions.json new file mode 100644 index 00000000..e10b75a3 --- /dev/null +++ b/artifacts/abi/Assertions.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/BasicOrderFulfiller.json b/artifacts/abi/BasicOrderFulfiller.json new file mode 100644 index 00000000..24f4e091 --- /dev/null +++ b/artifacts/abi/BasicOrderFulfiller.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/Conduit.json b/artifacts/abi/Conduit.json new file mode 100644 index 00000000..a11433da --- /dev/null +++ b/artifacts/abi/Conduit.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"address","name":"channel","type":"address"}],"name":"ChannelClosed","type":"error"},{"inputs":[{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"ChannelStatusAlreadySet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidController","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidItemType","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"channel","type":"address"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"}],"name":"ChannelUpdated","type":"event"},{"inputs":[{"components":[{"internalType":"enum ConduitItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ConduitTransfer[]","name":"transfers","type":"tuple[]"}],"name":"execute","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct ConduitBatch1155Transfer[]","name":"batchTransfers","type":"tuple[]"}],"name":"executeBatch1155","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum ConduitItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ConduitTransfer[]","name":"standardTransfers","type":"tuple[]"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct ConduitBatch1155Transfer[]","name":"batchTransfers","type":"tuple[]"}],"name":"executeWithBatch1155","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"updateChannel","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/ConduitController.json b/artifacts/abi/ConduitController.json new file mode 100644 index 00000000..51fd822b --- /dev/null +++ b/artifacts/abi/ConduitController.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"CallerIsNotOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ChannelOutOfRange","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ConduitAlreadyExists","type":"error"},{"inputs":[],"name":"InvalidCreator","type":"error"},{"inputs":[],"name":"InvalidInitialOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"NewPotentialOwnerAlreadySet","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"NewPotentialOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoConduit","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"NoPotentialOwnerCurrentlySet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"conduit","type":"address"},{"indexed":false,"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"name":"NewConduit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"conduit","type":"address"},{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"initialOwner","type":"address"}],"name":"createConduit","outputs":[{"internalType":"address","name":"conduit","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"uint256","name":"channelIndex","type":"uint256"}],"name":"getChannel","outputs":[{"internalType":"address","name":"channel","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"}],"name":"getChannelStatus","outputs":[{"internalType":"bool","name":"isOpen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getChannels","outputs":[{"internalType":"address[]","name":"channels","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"name":"getConduit","outputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConduitCodeHashes","outputs":[{"internalType":"bytes32","name":"creationCodeHash","type":"bytes32"},{"internalType":"bytes32","name":"runtimeCodeHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getKey","outputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getPotentialOwner","outputs":[{"internalType":"address","name":"potentialOwner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getTotalChannels","outputs":[{"internalType":"uint256","name":"totalChannels","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"updateChannel","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/ConduitControllerInterface.json b/artifacts/abi/ConduitControllerInterface.json new file mode 100644 index 00000000..d1b87c47 --- /dev/null +++ b/artifacts/abi/ConduitControllerInterface.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"CallerIsNotOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ChannelOutOfRange","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ConduitAlreadyExists","type":"error"},{"inputs":[],"name":"InvalidCreator","type":"error"},{"inputs":[],"name":"InvalidInitialOwner","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"NewPotentialOwnerAlreadySet","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"NewPotentialOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoConduit","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"NoPotentialOwnerCurrentlySet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"conduit","type":"address"},{"indexed":false,"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"name":"NewConduit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"conduit","type":"address"},{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"initialOwner","type":"address"}],"name":"createConduit","outputs":[{"internalType":"address","name":"conduit","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"uint256","name":"channelIndex","type":"uint256"}],"name":"getChannel","outputs":[{"internalType":"address","name":"channel","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"}],"name":"getChannelStatus","outputs":[{"internalType":"bool","name":"isOpen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getChannels","outputs":[{"internalType":"address[]","name":"channels","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"name":"getConduit","outputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConduitCodeHashes","outputs":[{"internalType":"bytes32","name":"creationCodeHash","type":"bytes32"},{"internalType":"bytes32","name":"runtimeCodeHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getKey","outputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getPotentialOwner","outputs":[{"internalType":"address","name":"potentialOwner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"getTotalChannels","outputs":[{"internalType":"uint256","name":"totalChannels","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"updateChannel","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/ConduitInterface.json b/artifacts/abi/ConduitInterface.json new file mode 100644 index 00000000..ddee3e71 --- /dev/null +++ b/artifacts/abi/ConduitInterface.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"channel","type":"address"}],"name":"ChannelClosed","type":"error"},{"inputs":[{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"ChannelStatusAlreadySet","type":"error"},{"inputs":[],"name":"InvalidController","type":"error"},{"inputs":[],"name":"InvalidItemType","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"channel","type":"address"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"}],"name":"ChannelUpdated","type":"event"},{"inputs":[{"components":[{"internalType":"enum ConduitItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ConduitTransfer[]","name":"transfers","type":"tuple[]"}],"name":"execute","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct ConduitBatch1155Transfer[]","name":"batch1155Transfers","type":"tuple[]"}],"name":"executeBatch1155","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum ConduitItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ConduitTransfer[]","name":"standardTransfers","type":"tuple[]"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct ConduitBatch1155Transfer[]","name":"batch1155Transfers","type":"tuple[]"}],"name":"executeWithBatch1155","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"updateChannel","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/Consideration.json b/artifacts/abi/Consideration.json new file mode 100644 index 00000000..9aed30ff --- /dev/null +++ b/artifacts/abi/Consideration.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"","type":"tuple"}],"name":"fulfillBasicOrder_efficient_6GL6yc","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractOfferer","type":"address"}],"name":"getContractOffererNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"","type":"tuple[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] diff --git a/artifacts/abi/ConsiderationBase.json b/artifacts/abi/ConsiderationBase.json new file mode 100644 index 00000000..60f50bb4 --- /dev/null +++ b/artifacts/abi/ConsiderationBase.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"}] diff --git a/artifacts/abi/ConsiderationEventsAndErrors.json b/artifacts/abi/ConsiderationEventsAndErrors.json new file mode 100644 index 00000000..df5d260f --- /dev/null +++ b/artifacts/abi/ConsiderationEventsAndErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"}] diff --git a/artifacts/abi/ConsiderationInterface.json b/artifacts/abi/ConsiderationInterface.json new file mode 100644 index 00000000..5f8ff1f8 --- /dev/null +++ b/artifacts/abi/ConsiderationInterface.json @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder_efficient_6GL6yc","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractOfferer","type":"address"}],"name":"getContractOffererNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/CounterManager.json b/artifacts/abi/CounterManager.json new file mode 100644 index 00000000..a1684b45 --- /dev/null +++ b/artifacts/abi/CounterManager.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/CriteriaResolution.json b/artifacts/abi/CriteriaResolution.json new file mode 100644 index 00000000..8fe7a5b2 --- /dev/null +++ b/artifacts/abi/CriteriaResolution.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"}] diff --git a/artifacts/abi/CriteriaResolutionErrors.json b/artifacts/abi/CriteriaResolutionErrors.json new file mode 100644 index 00000000..8fe7a5b2 --- /dev/null +++ b/artifacts/abi/CriteriaResolutionErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"}] diff --git a/artifacts/abi/Executor.json b/artifacts/abi/Executor.json new file mode 100644 index 00000000..b622ded1 --- /dev/null +++ b/artifacts/abi/Executor.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/FulfillmentApplicationErrors.json b/artifacts/abi/FulfillmentApplicationErrors.json new file mode 100644 index 00000000..e7d67293 --- /dev/null +++ b/artifacts/abi/FulfillmentApplicationErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"}] diff --git a/artifacts/abi/FulfillmentApplier.json b/artifacts/abi/FulfillmentApplier.json new file mode 100644 index 00000000..e7d67293 --- /dev/null +++ b/artifacts/abi/FulfillmentApplier.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"}] diff --git a/artifacts/abi/GettersAndDerivers.json b/artifacts/abi/GettersAndDerivers.json new file mode 100644 index 00000000..60f50bb4 --- /dev/null +++ b/artifacts/abi/GettersAndDerivers.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"}] diff --git a/artifacts/abi/ISeaportProxyBuyer.json b/artifacts/abi/ISeaportProxyBuyer.json new file mode 100644 index 00000000..b366faaa --- /dev/null +++ b/artifacts/abi/ISeaportProxyBuyer.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/OrderCombiner.json b/artifacts/abi/OrderCombiner.json new file mode 100644 index 00000000..f8919196 --- /dev/null +++ b/artifacts/abi/OrderCombiner.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/OrderFulfiller.json b/artifacts/abi/OrderFulfiller.json new file mode 100644 index 00000000..f5d0b79b --- /dev/null +++ b/artifacts/abi/OrderFulfiller.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/OrderValidator.json b/artifacts/abi/OrderValidator.json new file mode 100644 index 00000000..24f4e091 --- /dev/null +++ b/artifacts/abi/OrderValidator.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/ReentrancyErrors.json b/artifacts/abi/ReentrancyErrors.json new file mode 100644 index 00000000..bf472cf1 --- /dev/null +++ b/artifacts/abi/ReentrancyErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"}] diff --git a/artifacts/abi/ReentrancyGuard.json b/artifacts/abi/ReentrancyGuard.json new file mode 100644 index 00000000..d7eadb2f --- /dev/null +++ b/artifacts/abi/ReentrancyGuard.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/Seaport.json b/artifacts/abi/Seaport.json new file mode 100644 index 00000000..9aed30ff --- /dev/null +++ b/artifacts/abi/Seaport.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"","type":"tuple"}],"name":"fulfillBasicOrder_efficient_6GL6yc","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractOfferer","type":"address"}],"name":"getContractOffererNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"","type":"tuple[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] diff --git a/artifacts/abi/SeaportProxyBuyer.json b/artifacts/abi/SeaportProxyBuyer.json new file mode 100644 index 00000000..1ef3206d --- /dev/null +++ b/artifacts/abi/SeaportProxyBuyer.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"InvalidForwardedToken","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidZone","type":"error"},{"inputs":[],"name":"OrderIsNotFulfiled","type":"error"},{"inputs":[],"name":"RecipientIsZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"closeMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ConsiderationInterface","name":"seaport","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"rotateMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/SignatureVerification.json b/artifacts/abi/SignatureVerification.json new file mode 100644 index 00000000..5e611812 --- /dev/null +++ b/artifacts/abi/SignatureVerification.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"}] diff --git a/artifacts/abi/SignatureVerificationErrors.json b/artifacts/abi/SignatureVerificationErrors.json new file mode 100644 index 00000000..5e611812 --- /dev/null +++ b/artifacts/abi/SignatureVerificationErrors.json @@ -0,0 +1 @@ +[{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"}] diff --git a/artifacts/abi/TokenTransferrer.json b/artifacts/abi/TokenTransferrer.json new file mode 100644 index 00000000..304abdb2 --- /dev/null +++ b/artifacts/abi/TokenTransferrer.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"}] diff --git a/artifacts/abi/TokenTransferrerErrors.json b/artifacts/abi/TokenTransferrerErrors.json new file mode 100644 index 00000000..304abdb2 --- /dev/null +++ b/artifacts/abi/TokenTransferrerErrors.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"}] diff --git a/artifacts/abi/Verifiers.json b/artifacts/abi/Verifiers.json new file mode 100644 index 00000000..b622ded1 --- /dev/null +++ b/artifacts/abi/Verifiers.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[],"name":"TStoreAlreadyActivated","type":"error"},{"inputs":[],"name":"TStoreNotSupported","type":"error"},{"inputs":[],"name":"TloadTestContractDeploymentFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"struct OrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"},{"inputs":[],"name":"__activateTstore","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/ZoneInteraction.json b/artifacts/abi/ZoneInteraction.json new file mode 100644 index 00000000..7079ec6c --- /dev/null +++ b/artifacts/abi/ZoneInteraction.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"}] diff --git a/artifacts/abi/ZoneInteractionErrors.json b/artifacts/abi/ZoneInteractionErrors.json new file mode 100644 index 00000000..7079ec6c --- /dev/null +++ b/artifacts/abi/ZoneInteractionErrors.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"}] diff --git a/contracts/@ens/LegacyENSRegistry.sol b/contracts/@ens/LegacyENSRegistry.sol index 0ddb0794..9699290e 100644 --- a/contracts/@ens/LegacyENSRegistry.sol +++ b/contracts/@ens/LegacyENSRegistry.sol @@ -1,4 +1,4 @@ -pragma solidity >=0.4.24; +pragma solidity >=0.4.24 <=0.8.17; interface LegacyENS { // Logged when the owner of a node assigns a new owner to a subnode. diff --git a/contracts/@ens/LegacyETHRegistrarController.sol b/contracts/@ens/LegacyETHRegistrarController.sol index 6f3f403a..9cb43e63 100644 --- a/contracts/@ens/LegacyETHRegistrarController.sol +++ b/contracts/@ens/LegacyETHRegistrarController.sol @@ -2,7 +2,7 @@ // File: @ensdomains/ethregistrar/contracts/PriceOracle.sol -pragma solidity >=0.4.24; +pragma solidity >=0.4.24 <=0.8.17; interface PriceOracle { /** diff --git a/contracts/MintingManager.sol b/contracts/MintingManager.sol index d0408f79..3b8a2e71 100644 --- a/contracts/MintingManager.sol +++ b/contracts/MintingManager.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date June 16th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol'; import '@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol'; diff --git a/contracts/ProxyReader.sol b/contracts/ProxyReader.sol index b324d53f..c75bf247 100644 --- a/contracts/ProxyReader.sol +++ b/contracts/ProxyReader.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date June 16th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol'; import '@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol'; diff --git a/contracts/UNSRegistry.sol b/contracts/UNSRegistry.sol index 4d7ad2a1..cb46c0b4 100644 --- a/contracts/UNSRegistry.sol +++ b/contracts/UNSRegistry.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date June 16th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol'; import '@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol'; diff --git a/contracts/custody/ENSCustody.sol b/contracts/custody/ENSCustody.sol index fc0ea2ec..8fb63e08 100644 --- a/contracts/custody/ENSCustody.sol +++ b/contracts/custody/ENSCustody.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date May 30th, 2023 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import {IPriceOracle} from '@ensdomains/ens-contracts/contracts/ethregistrar/IPriceOracle.sol'; import {IETHRegistrarController} from '@ensdomains/ens-contracts/contracts/ethregistrar/IETHRegistrarController.sol'; diff --git a/contracts/custody/_refs.sol b/contracts/custody/_refs.sol index 0e1b4c40..7ad46460 100644 --- a/contracts/custody/_refs.sol +++ b/contracts/custody/_refs.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date May 30th, 2023 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '@ensdomains/ens-contracts/contracts/ethregistrar/ETHRegistrarController.sol'; import '@ensdomains/ens-contracts/contracts/registry/ENSRegistry.sol'; diff --git a/contracts/marketplace/ISeaportProxyBuyer.sol b/contracts/marketplace/ISeaportProxyBuyer.sol new file mode 100644 index 00000000..188ecc91 --- /dev/null +++ b/contracts/marketplace/ISeaportProxyBuyer.sol @@ -0,0 +1,85 @@ +// @author Unstoppable Domains, Inc. +// @date April 25th, 2024 + +pragma solidity ^0.8.24; + +import {AdvancedOrder, CriteriaResolver} from 'seaport-types/src/lib/ConsiderationStructs.sol'; + +error OrderIsNotFulfiled(); +error RecipientIsZeroAddress(); +error InvalidZone(); + +interface ISeaportProxyBuyer { + /** + * @dev Fill an order, fully or partially, with an arbitrary number of + * items for offer and consideration alongside criteria resolvers + * containing specific token identifiers and associated proofs. + * + * @param advancedOrder The order to fulfill along with the fraction + * of the order to attempt to fill. Note that + * both the offerer and the fulfiller must first + * approve this contract (or their preferred + * conduit if indicated by the order) to transfer + * any relevant tokens on their behalf and that + * contracts must implement `onERC1155Received` + * to receive ERC1155 tokens as consideration. + * Also note that all offer and consideration + * components must have no remainder after + * multiplication of the respective amount with + * the supplied fraction for the partial fill to + * be considered valid. + * @param criteriaResolvers An array where each element contains a + * reference to a specific offer or + * consideration, a token identifier, and a proof + * that the supplied token identifier is + * contained in the merkle root held by the item + * in question's criteria element. Note that an + * empty criteria indicates that any + * (transferable) token identifier on the token + * in question is valid and that no associated + * proof needs to be supplied. + * @param fulfillerConduitKey A bytes32 value indicating what conduit, if + * any, to source the fulfiller's token approvals + * from. The zero hash signifies that no conduit + * should be used, with direct approvals set on + * Consideration. + * @param recipient The intended recipient for all received items, + * with `address(0)` indicating that the caller + * should receive the items. + * + * @return fulfilled A boolean indicating whether the order has been + * successfully fulfilled. + */ + function fulfillAdvancedOrder( + AdvancedOrder calldata advancedOrder, + CriteriaResolver[] calldata criteriaResolvers, + bytes32 fulfillerConduitKey, + address recipient + ) external returns (bool fulfilled); + + /** + * @dev Withdraw USDC from the contract balance. + * + * @param token Token to withdraw + * @param recipient Recipient of the USDC on contract balance + * @param amount Amount of USDC to withdraw + */ + function withdraw(address token, address recipient, uint256 amount) external; + + /** + * @dev Approve USDC for the contract. + * + * @param token Token to approve + */ + function approve(address token) external; + + /** + * @dev Pause the contract. + */ + function pause() external; + + /** + * @dev Unpause the contract. + */ + function unpause() external; +} diff --git a/contracts/marketplace/SeaportProxyBuyer.sol b/contracts/marketplace/SeaportProxyBuyer.sol new file mode 100644 index 00000000..497b6218 --- /dev/null +++ b/contracts/marketplace/SeaportProxyBuyer.sol @@ -0,0 +1,122 @@ +// @author Unstoppable Domains, Inc. +// @date April 25th, 2024 + +pragma solidity ^0.8.24; + +import {Initializable} from '@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol'; +import {ContextUpgradeable} from '@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol'; +import {ReentrancyGuardUpgradeable} from '@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol'; +import {PausableUpgradeable} from '@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol'; +import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; +import {ERC2771RegistryContext} from '../metatx/ERC2771RegistryContext.sol'; +import {Forwarder} from '../metatx/Forwarder.sol'; +import {MinterRole} from '../roles/MinterRole.sol'; +import {ISeaportProxyBuyer, OrderIsNotFulfiled, RecipientIsZeroAddress, InvalidZone} from './ISeaportProxyBuyer.sol'; +import {ConsiderationInterface} from 'seaport-types/src/interfaces/ConsiderationInterface.sol'; +import {AdvancedOrder, CriteriaResolver, OrderComponents, OrderParameters} from 'seaport-types/src/lib/ConsiderationStructs.sol'; + +contract SeaportProxyBuyer is + Initializable, + ContextUpgradeable, + ReentrancyGuardUpgradeable, + ERC2771RegistryContext, + Forwarder, + MinterRole, + PausableUpgradeable, + ISeaportProxyBuyer +{ + string public constant NAME = 'Seaport Proxy Buyer'; + string public constant VERSION = '0.1.0'; + + ConsiderationInterface private _seaport; + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function initialize(ConsiderationInterface seaport) public initializer { + _seaport = seaport; + + __ReentrancyGuard_init_unchained(); + __Context_init_unchained(); + __ERC2771RegistryContext_init_unchained(); + __Forwarder_init_unchained(); + __Ownable_init_unchained(); + __MinterRole_init_unchained(); + __Pausable_init_unchained(); + } + + function fulfillAdvancedOrder( + AdvancedOrder calldata advancedOrder, + CriteriaResolver[] calldata criteriaResolvers, + bytes32 fulfillerConduitKey, + address recipient + ) external onlyMinter nonReentrant whenNotPaused returns (bool fulfilled) { + if (recipient == address(0)) { + revert RecipientIsZeroAddress(); + } + if (advancedOrder.parameters.zone != address(this)) { + revert InvalidZone(); + } + + _protectTokenOperation( + uint256( + _seaport.getOrderHash( + OrderComponents({ + offerer: advancedOrder.parameters.offerer, + zone: advancedOrder.parameters.zone, + offer: advancedOrder.parameters.offer, + consideration: advancedOrder.parameters.consideration, + orderType: advancedOrder.parameters.orderType, + startTime: advancedOrder.parameters.startTime, + endTime: advancedOrder.parameters.endTime, + zoneHash: advancedOrder.parameters.zoneHash, + salt: advancedOrder.parameters.salt, + conduitKey: advancedOrder.parameters.conduitKey, + counter: _seaport.getCounter(advancedOrder.parameters.offerer) + }) + ) + ) + ); + + fulfilled = _seaport.fulfillAdvancedOrder(advancedOrder, criteriaResolvers, fulfillerConduitKey, recipient); + if (!fulfilled) { + revert OrderIsNotFulfiled(); + } + } + + function approve(address token) external onlyOwner nonReentrant { + IERC20(token).approve(address(_seaport), type(uint256).max); + } + + function withdraw(address token, address recipient, uint256 amount) external onlyOwner nonReentrant { + IERC20(token).transfer(recipient, amount); + } + + function pause() external onlyOwner whenNotPaused { + _pause(); + } + + function unpause() external onlyOwner whenPaused { + _unpause(); + } + + function _msgSender() internal view override(ContextUpgradeable, ERC2771RegistryContext) returns (address) { + return super._msgSender(); + } + + function _msgData() internal view override(ContextUpgradeable, ERC2771RegistryContext) returns (bytes calldata) { + return super._msgData(); + } + + function _protectTokenOperation(uint256 tokenId) internal { + if (isTrustedForwarder(msg.sender)) { + _validateForwardedToken(tokenId); + } else { + _invalidateNonce(tokenId); + } + } + + uint256[50] private __gap; +} diff --git a/contracts/marketplace/_refs.sol b/contracts/marketplace/_refs.sol new file mode 100644 index 00000000..f69983e6 --- /dev/null +++ b/contracts/marketplace/_refs.sol @@ -0,0 +1,7 @@ +// @author Unstoppable Domains, Inc. +// @date April 25th, 2024 + +pragma solidity ^0.8.24; + +import {Seaport} from 'seaport-core/src/Seaport.sol'; +import {ConduitController} from 'seaport-core/src/conduit/ConduitController.sol'; diff --git a/contracts/metatx/CNSRegistryForwarder.sol b/contracts/metatx/CNSRegistryForwarder.sol index 9cb7b10e..fc608a4a 100644 --- a/contracts/metatx/CNSRegistryForwarder.sol +++ b/contracts/metatx/CNSRegistryForwarder.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date August 12th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import './IForwarder.sol'; import './BaseRoutingForwarder.sol'; diff --git a/contracts/metatx/ResolverForwarder.sol b/contracts/metatx/ResolverForwarder.sol index 70d79db4..9d520808 100644 --- a/contracts/metatx/ResolverForwarder.sol +++ b/contracts/metatx/ResolverForwarder.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date August 19th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol'; diff --git a/contracts/mocks/MintingManagerMock.sol b/contracts/mocks/MintingManagerMock.sol index 0142065e..37b6dc88 100644 --- a/contracts/mocks/MintingManagerMock.sol +++ b/contracts/mocks/MintingManagerMock.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date May 8th, 2023 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '../MintingManager.sol'; import './UNSRegistryMock.sol'; diff --git a/contracts/mocks/UNSRegistryForwarderMock.sol b/contracts/mocks/UNSRegistryForwarderMock.sol index 7b3567a2..30b1e265 100644 --- a/contracts/mocks/UNSRegistryForwarderMock.sol +++ b/contracts/mocks/UNSRegistryForwarderMock.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date June 16th, 2021 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '../metatx/UNSRegistryForwarder.sol'; diff --git a/contracts/mocks/UNSRegistryMock.sol b/contracts/mocks/UNSRegistryMock.sol index 53865540..c829456d 100644 --- a/contracts/mocks/UNSRegistryMock.sol +++ b/contracts/mocks/UNSRegistryMock.sol @@ -1,7 +1,7 @@ // @author Unstoppable Domains, Inc. // @date November 10th, 2022 -pragma solidity ^0.8.0; +pragma solidity 0.8.17; import '../UNSRegistry.sol'; diff --git a/dist/sandbox/db.tgz b/dist/sandbox/db.tgz deleted file mode 100644 index bac527ed..00000000 Binary files a/dist/sandbox/db.tgz and /dev/null differ diff --git a/ens-config.json b/ens-config.json index 75d34e1c..7f8894e6 100644 --- a/ens-config.json +++ b/ens-config.json @@ -1,5 +1,5 @@ { - "version": "0.2.0", + "version": "0.2.1", "networks": { "1": { "contracts": { @@ -73,45 +73,45 @@ "1337": { "contracts": { "ENSRegistry": { - "address": "0xD178b720229c39De617846F84cf9c8D32a63a23D", - "deploymentBlock": "0x2b", + "address": "0x3F1194B9019002863Ad0DBBE295294547c0d36A9", + "deploymentBlock": "0x32", "legacyAddresses": [] }, "BaseRegistrarImplementation": { - "address": "0x00e39A5004299871aB3b00FeD5A39a715F181d02", - "deploymentBlock": "0x2c", + "address": "0xc965345EDaC823D56812cD20A10316233916a605", + "deploymentBlock": "0x33", "legacyAddresses": [] }, "ReverseRegistrar": { - "address": "0xf6b7c221342BC966f4396790895530bF4E9799eB", - "deploymentBlock": "0x2d", + "address": "0xf670681605eFc4efC804F5a9b97ee89520473d56", + "deploymentBlock": "0x34", "legacyAddresses": [] }, "NameWrapper": { - "address": "0xf7c9FD8E37863CF3f2da6A3ea0B1D1E3FaadeAD4", - "deploymentBlock": "0x30", + "address": "0x6aC8F19d1E0F81147cdF2a1e53cb1f4E18417204", + "deploymentBlock": "0x37", "legacyAddresses": [] }, "DummyOracle": { - "address": "0x3F1194B9019002863Ad0DBBE295294547c0d36A9", - "deploymentBlock": "0x32", + "address": "0xf3810eB7d64D1C11AE12727d957c6202B24492F5", + "deploymentBlock": "0x39", "legacyAddresses": [] }, "StablePriceOracle": { - "address": "0xc965345EDaC823D56812cD20A10316233916a605", - "deploymentBlock": "0x33", + "address": "0xeC71E4E674fe0f432693DC2b935C34bd2774C003", + "deploymentBlock": "0x3a", "legacyAddresses": [] }, "ETHRegistrarController": { - "address": "0xf670681605eFc4efC804F5a9b97ee89520473d56", - "deploymentBlock": "0x34", + "address": "0x4fbf7B2f171336958BE5D15FF762a5CfF5363568", + "deploymentBlock": "0x3b", "legacyAddresses": [] }, "PublicResolver": { - "address": "0x653F5A2aF800684EcF2aAeAcE8dBE86afEaaEBC0", - "deploymentBlock": "0x3d", + "address": "0x9dF67c91f1bFCB4D966cF764E9218685E7c59E8a", + "deploymentBlock": "0x44", "legacyAddresses": [ - "0x38b83990077ac5DA78Aa9e72f5747D3A0b2374D9" + "0xF1Ad43dc647f27c2366Ab4742d68d21282F7d50e" ] }, "ProxyAdmin": { @@ -120,33 +120,33 @@ "legacyAddresses": [] }, "ENSCustody": { - "address": "0x287DeE389Caaa49edc112888f2BcFD927b472e25", - "deploymentBlock": "0x54", - "implementation": "0x0794D2ccC545a585C114A4680d43484100E6ba44", - "forwarder": "0x287DeE389Caaa49edc112888f2BcFD927b472e25", + "address": "0x3198fc981626687F4B5BDf0fbEABB0a5E0489C03", + "deploymentBlock": "0x5b", + "implementation": "0xc2110388dd54228aE0A834119457edE938BF0B57", + "forwarder": "0x3198fc981626687F4B5BDf0fbEABB0a5E0489C03", "legacyAddresses": [] }, "LegacyENSRegistry": { - "address": "0xDa429c9136b95E18c6396c7B18f85ACcc8575164", - "deploymentBlock": "0x40", + "address": "0x6E1Eb616c7d69491f9a880f815Ff5574768cBa20", + "deploymentBlock": "0x47", "legacyAddresses": [] }, "LegacyETHRegistrarController": { - "address": "0x72FA6D0C2F56b802D762a14F1a71f9A56221cabe", - "deploymentBlock": "0x35", + "address": "0xB17aAe5B3A7815433fC82Cfd67Ea245767894f03", + "deploymentBlock": "0x3c", "legacyAddresses": [] }, "DNSSECImpl": { - "address": "0x6E1Eb616c7d69491f9a880f815Ff5574768cBa20", - "deploymentBlock": "0x47" - }, - "DNSRegistrar": { "address": "0x9B2565a3545A1312bdCb6e7148A7f7cAe8C2706B", "deploymentBlock": "0x4e" }, + "DNSRegistrar": { + "address": "0x6265cc8D1b28eDfd4D76C80bf774c0D446FFfbde", + "deploymentBlock": "0x55" + }, "Root": { - "address": "0xFb82C655715B43b07863e9c2fd42f60bbd9838B0", - "deploymentBlock": "0x4f" + "address": "0xE4fDf45C2F8D198854f8823809C7a988eeAAA493", + "deploymentBlock": "0x56" } } }, diff --git a/hardhat.config.ts b/hardhat.config.ts index 471394d9..e7a3530f 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -118,6 +118,16 @@ const config: HardhatUserConfig = { }, }, }, + { + version: '0.8.24', + settings: { + ...settings, + metadata: { + bytecodeHash: 'none', + }, + evmVersion: 'cancun', + }, + }, ], }, paths: { @@ -128,7 +138,7 @@ const config: HardhatUserConfig = { hardhat: { blockGasLimit: 10000000, initialBaseFeePerGas: 0, - hardfork: 'merge', + hardfork: 'cancun', }, localhost: { url: 'http://localhost:8545', diff --git a/package.json b/package.json index 96f56fef..7307e6ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uns", - "version": "0.9.14", + "version": "0.9.15", "description": "UNS contracts and tools", "repository": "https://github.com/unstoppabledomains/uns.git", "main": "./dist/index.js", @@ -10,7 +10,7 @@ "compile": "hardhat compile --force;", "build:package": "yarn compile; rm -Rf dist/*; tsc --project tsconfig.build.json", "build:ci": "yarn build:package && yarn rebuild:sandbox && yarn copy:assets", - "copy:assets": "cp sandbox/db.tgz dist/sandbox/; cp uns-config.json dist/", + "copy:assets": "mkdir -p dist/sandbox/foundry/bin; cp sandbox/foundry/bin/.gitkeep dist/sandbox/foundry/bin/.gitkeep; cp sandbox/state.json dist/sandbox/; cp sandbox/foundry/foundryup.sh dist/sandbox/foundry; cp uns-config.json dist/; cp ens-config.json dist/;", "compile:size": "env ENABLE_CONTRACT_SIZER=true yarn compile", "coverage": "hardhat coverage", "test": "yarn test:sol && yarn test:sandbox", @@ -43,6 +43,7 @@ "@nomicfoundation/hardhat-ethers": "^3.0.0", "@nomicfoundation/hardhat-verify": "^1.1.0", "@nomiclabs/hardhat-solhint": "^3.0.1", + "@opensea/seaport-js": "^4.0.0", "@openzeppelin/contracts-upgradeable": "^4.7.3", "@openzeppelin/hardhat-upgrades": "^2.0.0", "@openzeppelin/upgrades-core": "^1.32.5", @@ -74,7 +75,6 @@ "ethereumjs-common": "^1.5.2", "ethereumjs-tx": "^1.3.7", "ethereumjs-util": "^7.1.0", - "ethers": "^6.1.0", "hardhat": "~2.20.0", "hardhat-abi-exporter": "^2.2.1", "hardhat-contract-sizer": "~2.6.0", @@ -86,6 +86,8 @@ "mocha": "^10.0.0", "prettier": "^2.3.0", "prettier-plugin-solidity": "^1.3.1", + "seaport-core": "1.6.4", + "seaport-types": "1.6.3", "solhint": "^3.3.7", "solidity-coverage": "^0.8.4", "tar": "^6.1.9", @@ -99,7 +101,7 @@ "@ensdomains/address-encoder": "^0.2.22", "bip39": "^3.0.0", "bip44-constants": "^243.0.0", - "ganache": "^7.9.1", + "ethers": "^6.11.1", "hdkey": "^2.0.1", "web3": "^1.7.4" }, diff --git a/sandbox/CHANGELOG.md b/sandbox/CHANGELOG.md index 05294eef..af530f83 100644 --- a/sandbox/CHANGELOG.md +++ b/sandbox/CHANGELOG.md @@ -1,3 +1,6 @@ +## v1.0 +- Migrate sandbox RPC to Foundry Anvil server + ## v0.6 - Rebuild sandbox (UNS v0.6.0) diff --git a/sandbox/anvil-server.ts b/sandbox/anvil-server.ts new file mode 100644 index 00000000..086c8536 --- /dev/null +++ b/sandbox/anvil-server.ts @@ -0,0 +1,129 @@ +import { spawn, ChildProcessWithoutNullStreams } from 'child_process'; +import debug from 'debug'; +import _ from 'lodash'; +import { installAnvil, getAnvilCommand } from './foundry-cli'; + +const log = debug('UNS:sandbox'); + +export type AnvilServerOptions = { + port: number; + hostIpAddress: string; + chainId: number; + hardfork: string; + gasPrice: number; + gasLimit: number; + mnemonic: string; + hdPath: string; + totalAccounts: number; + defaultBalanceEther: number; + dumpStatePath: string; + loadStatePath: string; + silent: boolean; + anvilCliPath: string; +}; + +const ANVIL_ARGUMENTS_MAP: Record, string> = { + port: '--port', + hostIpAddress: '--host', + chainId: '--chain-id', + hardfork: '--hardfork', + gasPrice: '--gas-price', + gasLimit: '--gas-limit', + mnemonic: '--mnemonic', + hdPath: '--derivation-path', + totalAccounts: '--accounts', + defaultBalanceEther: '--balance', + dumpStatePath: '--dump-state', + loadStatePath: '--load-state', + silent: '--silent', +}; + +const BLOCKS_TO_KEEP = 500; + +export class AnvilServer { + readonly options: Partial; + private readonly _anvil: ChildProcessWithoutNullStreams; + + private constructor (anvil: ChildProcessWithoutNullStreams, options: Partial) { + this._anvil = anvil; + this.options = options; + } + + public static async launch (options: Partial, inherit = false): Promise { + try { + await getAnvilCommand(); + } catch (e) { + await installAnvil(); + } + + if (!options.silent) { + log('Launching anvil'); + } + const anvilPath = options.anvilCliPath ?? (await getAnvilCommand()); + const args: (string | number)[] = []; + for (const [key, value] of Object.entries(options)) { + if (!value) { + continue; + } + const arg = ANVIL_ARGUMENTS_MAP[key]; + if (arg) { + if (_.isBoolean(value) && value) { + args.push(arg); + } else { + args.push(arg, value); + } + } + } + args.push('--disable-default-create2-deployer'); + args.push('--prune-history', BLOCKS_TO_KEEP); + args.push('--order', 'fifo'); + args.push('--transaction-block-keeper', BLOCKS_TO_KEEP); + + const opts = inherit ? { stdio: 'inherit' } : {}; + + const anvil: ChildProcessWithoutNullStreams = spawn(anvilPath, args as never, opts as never); + + anvil.on('close', (code: any) => { + log(`anvil child process exited with code ${code}`); + }); + + process.on('exit', function () { + anvil.kill(); + }); + + if (!inherit) { + let serverReady = false; + anvil.stdout?.on('data', (data: any) => { + const output = data.toString(); + if (output.includes('Listening')) { + serverReady = true; + } + if (!options.silent) { + log(`${data}`); + } + }); + + anvil.stderr?.on('data', (data: any) => { + log(`${data}`); + }); + + // wait until server ready + const retries = 30; // 3secs + for (let i = 0; i < retries; i++) { + if (serverReady) { + if (!options.silent) { + log('anvil server ready'); + } + break; + } + await new Promise((resolve) => setTimeout(resolve, 100)); + } + } + + return new AnvilServer(anvil, options); + } + + public kill () { + this._anvil?.kill(); + } +} diff --git a/sandbox/anvil-service.ts b/sandbox/anvil-service.ts new file mode 100644 index 00000000..f3268e24 --- /dev/null +++ b/sandbox/anvil-service.ts @@ -0,0 +1,36 @@ +import { JsonRpcProvider } from 'ethers'; +import { AnvilServer, AnvilServerOptions } from './anvil-server'; + +export default class AnvilService { + private _server?: AnvilServer; + private readonly _provider: JsonRpcProvider; + private readonly _options: Partial; + + constructor (options: Partial = {}) { + this._options = options; + this._provider = new JsonRpcProvider(this.getRpcEndpoint()); + } + + async startServer () { + if (this._server) { + throw new Error('Anvil server is already started'); + } + this._server = await AnvilServer.launch(this._options, false); + } + + stopServer () { + this._server?.kill(); + } + + get provider (): JsonRpcProvider { + return this._provider; + } + + get server (): AnvilServer | undefined { + return this._server; + } + + private getRpcEndpoint () { + return `http://${this._options.hostIpAddress}:${this._options.port}`; + } +} diff --git a/sandbox/db.tgz b/sandbox/db.tgz deleted file mode 100644 index bac527ed..00000000 Binary files a/sandbox/db.tgz and /dev/null differ diff --git a/sandbox/foundry-cli.ts b/sandbox/foundry-cli.ts new file mode 100644 index 00000000..6fb42c01 --- /dev/null +++ b/sandbox/foundry-cli.ts @@ -0,0 +1,95 @@ +import { exec, execSync, spawn } from 'child_process'; +import path from 'path'; + +const FOUNDRY_VERSION = 'nightly-de33b6af53005037b463318d2628b5cfcaf39916'; + +/** + * @returns the path to the anvil path to use, if `anvil` is in path then this will be returned + * + */ +export async function getAnvilCommand (): Promise { + const cmd = foundryAnvilBinPath(); + const commandExists = await checkCommand(`${cmd} --version`); + if (!commandExists) { + throw new Error('Anvil not found'); + } + return cmd; +} + +/** + * Executes `foundryup` to install `anvil` RPC server + */ +export async function installAnvil (): Promise { + const checkAnvilCommandCli = `${foundryAnvilBinPath()} --version`; + if (!(await checkCommand(checkAnvilCommandCli))) { + if (!(await runFoundryUp())) { + throw new Error('Failed to install anvil'); + } + if (!(await checkCommand(checkAnvilCommandCli))) { + throw new Error('Failed to install anvil'); + } + } +} + +/** + * Executes the given command + * + * @param cmd the command to run + * @return returns true if the command succeeded, false otherwise + */ +async function checkCommand (cmd: string): Promise { + return new Promise((resolve) => { + const process = exec(cmd); + process.on('exit', (code) => { + resolve(code === 0); + }); + }); +} + +/** + * Runs foundryup via subprocess + */ +async function runFoundryUp (): Promise { + return new Promise((resolve) => { + execSync(`chmod +x ${foundryUpBinPath()}`); + const p = spawn('/bin/bash', ['-c', foundryUpBinPath()], { + stdio: 'inherit', + env: { + ...process.env, + FOUNDRY_DIR: foundryDir(), + FOUNDRYUP_VERSION: FOUNDRY_VERSION, + }, + }); + p.on('exit', (code) => { + resolve(code === 0); + }); + }); +} + +/** + * @returns the path to the foundry directory + */ +function foundryDir (): string { + return path.join(__dirname, 'foundry'); +} + +/** + * @returns the path to the foundry bin directory + */ +function foundryBinDir (): string { + return path.join(foundryDir(), 'bin'); +} + +/** + * @returns the path to the anvil binary in the foundry dir + */ +function foundryAnvilBinPath (): string { + return path.join(foundryBinDir(), 'anvil'); +} + +/** + * @returns the path to the cast binary in the foundry dir + */ +function foundryUpBinPath (): string { + return path.join(foundryDir(), 'foundryup.sh'); +} diff --git a/sandbox/foundry/bin/.gitignore b/sandbox/foundry/bin/.gitignore new file mode 100644 index 00000000..bf27f311 --- /dev/null +++ b/sandbox/foundry/bin/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!.gitkeep diff --git a/sandbox/foundry/bin/.gitkeep b/sandbox/foundry/bin/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sandbox/foundry/foundryup.sh b/sandbox/foundry/foundryup.sh new file mode 100755 index 00000000..5f89bf4d --- /dev/null +++ b/sandbox/foundry/foundryup.sh @@ -0,0 +1,307 @@ +#!/usr/bin/env bash + +# foundryup - Foundry Installer +# Readme: https://github.com/foundry-rs/foundry/blob/master/foundryup/README.md +# Source: https://github.com/foundry-rs/foundry/blob/master/foundryup/foundryup + +set -eo pipefail + +BASE_DIR=${XDG_CONFIG_HOME:-$HOME} +FOUNDRY_DIR=${FOUNDRY_DIR:-"$BASE_DIR/.foundry"} +FOUNDRY_BIN_DIR="$FOUNDRY_DIR/bin" + +BINS=(forge cast anvil chisel) + +export RUSTFLAGS="${RUSTFLAGS:--C target-cpu=native}" + +main() { + need_cmd git + need_cmd curl + + while [[ -n $1 ]]; do + case $1 in + --) shift; break;; + + -r|--repo) shift; FOUNDRYUP_REPO=$1;; + -b|--branch) shift; FOUNDRYUP_BRANCH=$1;; + -v|--version) shift; FOUNDRYUP_VERSION=$1;; + -p|--path) shift; FOUNDRYUP_LOCAL_REPO=$1;; + -P|--pr) shift; FOUNDRYUP_PR=$1;; + -C|--commit) shift; FOUNDRYUP_COMMIT=$1;; + --arch) shift; FOUNDRYUP_ARCH=$1;; + --platform) shift; FOUNDRYUP_PLATFORM=$1;; + -h|--help) + usage + exit 0 + ;; + *) + warn "unknown option: $1" + usage + exit 1 + esac; shift + done + + # Print the banner after successfully parsing args + banner + + if [ -n "$FOUNDRYUP_PR" ]; then + if [ -z "$FOUNDRYUP_BRANCH" ]; then + FOUNDRYUP_BRANCH="refs/pull/$FOUNDRYUP_PR/head" + else + err "can't use --pr and --branch at the same time" + fi + fi + + # Installs foundry from a local repository if --path parameter is provided + if [[ -n "$FOUNDRYUP_LOCAL_REPO" ]]; then + need_cmd cargo + + # Ignore branches/versions as we do not want to modify local git state + if [ -n "$FOUNDRYUP_REPO" ] || [ -n "$FOUNDRYUP_BRANCH" ] || [ -n "$FOUNDRYUP_VERSION" ]; then + warn "--branch, --version, and --repo arguments are ignored during local install" + fi + + # Enter local repo and build + say "installing from $FOUNDRYUP_LOCAL_REPO" + cd "$FOUNDRYUP_LOCAL_REPO" + ensure cargo build --bins --release # need 4 speed + + for bin in "${BINS[@]}"; do + # Remove prior installations if they exist + rm -f "$FOUNDRY_BIN_DIR/$bin" + # Symlink from local repo binaries to bin dir + ensure ln -s "$PWD/target/release/$bin" "$FOUNDRY_BIN_DIR/$bin" + done + + say "done" + exit 0 + fi + + FOUNDRYUP_REPO=${FOUNDRYUP_REPO:-foundry-rs/foundry} + + # Install by downloading binaries + if [[ "$FOUNDRYUP_REPO" == "foundry-rs/foundry" && -z "$FOUNDRYUP_BRANCH" && -z "$FOUNDRYUP_COMMIT" ]]; then + FOUNDRYUP_VERSION=${FOUNDRYUP_VERSION:-nightly} + FOUNDRYUP_TAG=$FOUNDRYUP_VERSION + + # Normalize versions (handle channels, versions without v prefix + if [[ "$FOUNDRYUP_VERSION" =~ ^nightly ]]; then + FOUNDRYUP_VERSION="nightly" + elif [[ "$FOUNDRYUP_VERSION" == [[:digit:]]* ]]; then + # Add v prefix + FOUNDRYUP_VERSION="v${FOUNDRYUP_VERSION}" + FOUNDRYUP_TAG="${FOUNDRYUP_VERSION}" + fi + + say "installing foundry (version ${FOUNDRYUP_VERSION}, tag ${FOUNDRYUP_TAG})" + + uname_s=$(uname -s) + PLATFORM=$(tolower "${FOUNDRYUP_PLATFORM:-$uname_s}") + EXT="tar.gz" + case $PLATFORM in + linux) ;; + darwin|mac*) + PLATFORM="darwin" + ;; + mingw*|win*) + EXT="zip" + PLATFORM="win32" + ;; + *) + err "unsupported platform: $PLATFORM" + ;; + esac + + uname_m=$(uname -m) + ARCHITECTURE=$(tolower "${FOUNDRYUP_ARCH:-$uname_m}") + if [ "${ARCHITECTURE}" = "x86_64" ]; then + # Redirect stderr to /dev/null to avoid printing errors if non Rosetta. + if [ "$(sysctl -n sysctl.proc_translated 2>/dev/null)" = "1" ]; then + ARCHITECTURE="arm64" # Rosetta. + else + ARCHITECTURE="amd64" # Intel. + fi + elif [ "${ARCHITECTURE}" = "arm64" ] ||[ "${ARCHITECTURE}" = "aarch64" ] ; then + ARCHITECTURE="arm64" # Arm. + else + ARCHITECTURE="amd64" # Amd. + fi + + # Compute the URL of the release tarball in the Foundry repository. + RELEASE_URL="https://github.com/${FOUNDRYUP_REPO}/releases/download/${FOUNDRYUP_TAG}/" + BIN_ARCHIVE_URL="${RELEASE_URL}foundry_${FOUNDRYUP_VERSION}_${PLATFORM}_${ARCHITECTURE}.$EXT" + + # Download and extract the binaries archive + say "downloading latest forge, cast, anvil, and chisel" + if [ "$PLATFORM" = "win32" ]; then + tmp="$(mktemp -d 2>/dev/null || echo ".")/foundry.zip" + ensure download "$BIN_ARCHIVE_URL" "$tmp" + ensure unzip "$tmp" -d "$FOUNDRY_BIN_DIR" + rm -f "$tmp" + else + ensure download "$BIN_ARCHIVE_URL" | ensure tar -xzC "$FOUNDRY_BIN_DIR" + fi + + + for bin in "${BINS[@]}"; do + bin_path="$FOUNDRY_BIN_DIR/$bin" + + # Print installed msg + say "installed - $(ensure "$bin_path" --version)" + + # Check if the default path of the binary is not in FOUNDRY_BIN_DIR + which_path="$(command -v "$bin" || true)" + if [ -n "$which_path" ] && [ "$which_path" != "$bin_path" ]; then + warn "" + cat 1>&2 <&2 < + +OPTIONS: + -h, --help Print help information + -v, --version Install a specific version + -b, --branch Install a specific branch + -P, --pr Install a specific Pull Request + -C, --commit Install a specific commit + -r, --repo Install from a remote GitHub repo (uses default branch if no other options are set) + -p, --path Install a local repository + --arch Install a specific architecture (supports amd64 and arm64) + --platform Install a specific platform (supports win32, linux, and darwin) +EOF +} + +say() { + printf "foundryup: %s\n" "$1" +} + +warn() { + say "warning: ${1}" >&2 +} + +err() { + say "$1" >&2 + exit 1 +} + +tolower() { + echo "$1" | awk '{print tolower($0)}' +} + +need_cmd() { + if ! check_cmd "$1"; then + err "need '$1' (command not found)" + fi +} + +check_cmd() { + command -v "$1" &>/dev/null +} + +# Run a command that should never fail. If the command fails execution +# will immediately terminate with an error showing the failing command. +ensure() { + if ! "$@"; then err "command failed: $*"; fi +} + +# Downloads $1 into $2 or stdout +download() { + if [ -n "$2" ]; then + # output into $2 + if check_cmd curl; then + curl -#o "$2" -L "$1" + else + wget --show-progress -qO "$2" "$1" + fi + else + # output to stdout + if check_cmd curl; then + curl -#L "$1" + else + wget --show-progress -qO- "$1" + fi + fi +} + +# Banner Function for Foundry +banner() { + printf ' + +.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx + + ╔═╗ ╔═╗ ╦ ╦ ╔╗╔ ╔╦╗ ╦═╗ ╦ ╦ Portable and modular toolkit + ╠╣ ║ ║ ║ ║ ║║║ ║║ ╠╦╝ ╚╦╝ for Ethereum Application Development + ╚ ╚═╝ ╚═╝ ╝╚╝ ═╩╝ ╩╚═ ╩ written in Rust. + +.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx + +Repo : https://github.com/foundry-rs/ +Book : https://book.getfoundry.sh/ +Chat : https://t.me/foundry_rs/ +Support : https://t.me/foundry_support/ +Contribute : https://github.com/orgs/foundry-rs/projects/2/ + +.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx + +' +} + + +main "$@" diff --git a/sandbox/ganache-service.ts b/sandbox/ganache-service.ts deleted file mode 100644 index c92fa57f..00000000 --- a/sandbox/ganache-service.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { server, Server, EthereumProvider, ServerOptions } from 'ganache'; - -const DEFAULT_PORT = 7545; - -export type ServerConfigOptions = ServerOptions & { - url: string; - port?: number; - hostname?: string; -}; - -export class GanacheService { - public server: Server; - public provider: EthereumProvider; - - private options: ServerConfigOptions; - - constructor (options: ServerConfigOptions) { - this.options = this.validateAndTransformOptions(options); - this.server = server(this.options as ServerOptions); - this.provider = this.server.provider; - } - - startServer () { - const { port } = this.options; - - if (!port) { - throw new Error('Port sohuld be defined in the ServerConfigOptions URL'); - } - - return this.server.listen(port); - } - - stopServer () { - return this.server.close(); - } - - private validateAndTransformOptions (options: ServerConfigOptions): ServerConfigOptions { - const validatedOptions = options; - - const url = new URL(options.url); - if (url.hostname !== 'localhost' && url.hostname !== '127.0.0.1') { - throw new Error('Ganache network only works with localhost'); - } - - validatedOptions.hostname = url.hostname; - - validatedOptions.port = url.port !== undefined && url.port !== '' ? parseInt(url.port, 10) : DEFAULT_PORT; - - const optionsToInclude = ['accountsKeyPath', 'dbPath', 'defaultBalanceEther', 'totalAccounts', 'unlockedAccounts']; - for (const [key, value] of Object.entries(options)) { - if (value !== undefined && optionsToInclude.includes(key)) { - validatedOptions[this.snakeCase(key)] = value; - delete validatedOptions[key]; - } - } - - return validatedOptions; - } - - private snakeCase (value: string): string { - return value.replace(/([A-Z]){1}/g, (match) => `_${match.toLowerCase()}`); - } -} diff --git a/sandbox/index.test.ts b/sandbox/index.test.ts index fce6cca0..4e761cdd 100644 --- a/sandbox/index.test.ts +++ b/sandbox/index.test.ts @@ -4,7 +4,7 @@ import { ethers, network } from 'hardhat'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { AbiCoder } from 'ethers'; import { NameService, getNetworkConfig } from '../src/config'; -import { MintingManager, UNSRegistry } from '../types/contracts'; +import { MintingManager, UNSRegistry } from '../types'; import { unwrap } from '../src/utils'; import { BUFFERED_REGISTRATION_COST, REGISTRATION_TIME, TLD, ZERO_ADDRESS } from '../test/helpers/constants'; import { @@ -70,7 +70,7 @@ describe('Sandbox', async () => { }); after(async () => { - await sandbox.stop(); + sandbox.stop(); }); describe('UNS', () => { @@ -174,8 +174,9 @@ describe('Sandbox', async () => { ); let tx = await ethRegistrarController.commit(commitment); + const blockNumber = unwrap(await tx.wait() ?? {}, 'blockNumber'); const block = await ethers.provider.getBlock( - unwrap(tx, 'blockNumber'), + blockNumber, ); expect(await ethRegistrarController.commitments(commitment)).to.equal(block?.timestamp); @@ -220,7 +221,8 @@ describe('Sandbox', async () => { selfCustody, ); const commitTx = await custody.connect(minter).commit(commitment); - const block = await ethers.provider.getBlock(unwrap(commitTx, 'blockNumber')); + const blockNumber = unwrap(await commitTx.wait() ?? {}, 'blockNumber'); + const block = await ethers.provider.getBlock(blockNumber); const timestamp = block?.timestamp; expect(await ethRegistrarController.commitments(commitment)).to.equal(timestamp); @@ -265,11 +267,10 @@ describe('Sandbox (multiple instances)', async () => { const sandbox = await Sandbox.start({ verbose: true, network: { - url: 'http://localhost:7546', + port: 7546, chainId: 1338, - dbPath: './.sandbox/_l2', }, }); - await sandbox.stop(); + sandbox.stop(); }); }); diff --git a/sandbox/index.ts b/sandbox/index.ts index da54ff50..742f3ff4 100644 --- a/sandbox/index.ts +++ b/sandbox/index.ts @@ -1,43 +1,35 @@ -import fs from 'fs'; import path from 'path'; -import tar from 'tar'; +import fs from 'fs'; import HDKey from 'hdkey'; import { mnemonicToSeedSync } from 'bip39'; import secp256k1 from 'secp256k1'; import createKeccakHash from 'keccak'; import debug from 'debug'; -import { EthereumProvider } from 'ganache'; import type { HttpNetworkUserConfig } from 'hardhat/types'; +import { JsonRpcProvider } from 'ethers'; import { unwrap } from '../src/utils'; -import { GanacheService } from './ganache-service'; +import { AnvilServerOptions } from './anvil-server'; +import AnvilService from './anvil-service'; const log = debug('UNS:sandbox'); export type SandboxNetworkOptions = { - url: string; - port?: number; - hostname?: string; + port: number; + hostIpAddress: string; chainId: number; hardfork: string; gasPrice: number; gasLimit: number; - allowUnlimitedContractSize: boolean; - locked: boolean; mnemonic: string; hdPath: string; totalAccounts: number; defaultBalanceEther: number; - dbPath: string; - snapshotPath: string; - keepAliveTimeout: number; - vmErrorsOnRpcResponse: boolean; - logger: { log: (message: string) => void }; + statePath: string; }; export type SandboxOptions = { verbose?: boolean; - clean?: boolean; - extract?: boolean; + rebuild?: boolean; network?: Partial; }; @@ -51,28 +43,31 @@ export type SandboxAccount = { }; const DEFAULT_SERVER_CONFIG: SandboxNetworkOptions = { - url: 'http://localhost:7545', + hostIpAddress: '127.0.0.1', + port: 7545, gasPrice: 20000000000, gasLimit: 6721975, defaultBalanceEther: 1000, totalAccounts: 10, - hardfork: 'london', - allowUnlimitedContractSize: false, - locked: false, + hardfork: 'cancun', hdPath: 'm/44\'/60\'/0\'/0/', - keepAliveTimeout: 5000, mnemonic: 'mimic dune forward party defy island absorb insane deputy obvious brother immense', chainId: 1337, - dbPath: './.sandbox', - snapshotPath: path.join(__dirname, 'db.tgz'), - vmErrorsOnRpcResponse: true, - logger: { log: () => {} }, + statePath: path.join(__dirname, 'state.json'), }; export class Sandbox { + version: string; + public accounts: Record; + public options: SandboxOptions; + + private anvilService: AnvilService; + private provider: JsonRpcProvider; + private snapshotId?: string; + static defaultNetworkOptions (): HttpNetworkUserConfig { return { - url: DEFAULT_SERVER_CONFIG.url, + url: `http://${DEFAULT_SERVER_CONFIG.hostIpAddress}:${DEFAULT_SERVER_CONFIG.port}`, chainId: DEFAULT_SERVER_CONFIG.chainId, accounts: { mnemonic: DEFAULT_SERVER_CONFIG.mnemonic, @@ -90,53 +85,48 @@ export class Sandbox { static async create (options: SandboxOptions): Promise { options = { - clean: true, - extract: true, + rebuild: false, verbose: false, ...options, }; + const networkOptions: SandboxNetworkOptions = { ...DEFAULT_SERVER_CONFIG, ...options.network, }; + const anvilOptions: Partial = { + ...networkOptions, + }; + if (options.verbose) { debug.enable('UNS:sandbox*'); + anvilOptions.silent = false; + } else { + anvilOptions.silent = true; } - const { dbPath, snapshotPath } = networkOptions; - - if (options.clean) { - if (fs.existsSync(dbPath)) { - fs.rmdirSync(dbPath, { recursive: true }); + if (options.rebuild) { + if (fs.existsSync(networkOptions.statePath)) { + fs.rmSync(networkOptions.statePath); } - fs.mkdirSync(dbPath, { recursive: true }); - log(`Cleaned sandbox database. Path: ${dbPath}`); + anvilOptions.dumpStatePath = networkOptions.statePath; + anvilOptions.loadStatePath = ''; + } else { + anvilOptions.dumpStatePath = ''; + anvilOptions.loadStatePath = networkOptions.statePath; } - if (options.extract) { - await tar.extract({ cwd: dbPath, file: snapshotPath }); - log(`Prepared sandbox database. [Source: ${snapshotPath}, TargetDir: ${dbPath}]`); - } - - const service = new GanacheService({ ...networkOptions }); + const service = new AnvilService(anvilOptions); return new Sandbox(service, { ...options, network: networkOptions }); } - version: string; - public accounts: Record; - public options: SandboxOptions; - - private ganacheService: GanacheService; - private provider: EthereumProvider; - private snapshotId?: string; - - constructor (service: GanacheService, options: SandboxOptions = {}) { - this.ganacheService = service; + constructor (service: AnvilService, options: SandboxOptions = {}) { + this.anvilService = service; this.options = options; - this.provider = service.provider; + this.provider = this.anvilService.provider; this.snapshotId = undefined; - this.version = '0.6'; + this.version = '1.0'; const accounts = this.getAccounts(unwrap(this.options, 'network')); @@ -157,7 +147,7 @@ export class Sandbox { } async start (options: SandboxStartOptions = { noSnapshot: false }): Promise { - await this.ganacheService.startServer(); + await this.anvilService.startServer(); log('Started sandbox'); if (options.noSnapshot) return; @@ -166,9 +156,9 @@ export class Sandbox { log('Created snapshot', this.snapshotId); } - async stop (): Promise { + stop (): void { try { - await this.ganacheService.stopServer(); + this.anvilService.stopServer(); log('Stopped sandbox'); } catch (e: any) { // eslint-disable-line @typescript-eslint/no-explicit-any if (e.message.includes('Server is not running')) { @@ -191,7 +181,7 @@ export class Sandbox { } private async snapshot (): Promise { - return await this.provider.send('evm_snapshot'); + return await this.provider.send('evm_snapshot', []); } private async revert (snapshotId: string): Promise { diff --git a/sandbox/rebuild.ts b/sandbox/rebuild.ts index 8fd99f39..53971366 100644 --- a/sandbox/rebuild.ts +++ b/sandbox/rebuild.ts @@ -1,15 +1,12 @@ -import fs from 'fs'; -import tar from 'tar'; import { NameService, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/utils'; -import { Sandbox } from '.'; +import { Sandbox } from './index'; // NOTE: Node module execution is used for rebuilding sandbox package if (require.main === module) { (async () => { try { - const sandbox = await Sandbox.create({ extract: false }); + const sandbox = await Sandbox.create({ rebuild: true, verbose: true }); await sandbox.start({ noSnapshot: true }); const unsDeployer = await Deployer.create(); @@ -20,21 +17,10 @@ if (require.main === module) { const unsConfig = await unsDeployer.execute(['full', 'config_polygon_pos_bridge']); const ensConfig = await ensDeployer.execute(['ens', 'ens_custody', 'fund_ens_custody']); - await sandbox.stop(); + sandbox.stop(); mergeNetworkConfig(unsConfig, NameService.UNS); mergeNetworkConfig(ensConfig, NameService.ENS); - - const { dbPath, snapshotPath } = unwrap(sandbox.options, 'network'); - await tar.create( - { - cwd: dbPath, - gzip: true, - file: snapshotPath, - filter: (p) => p.indexOf('_tmp') === -1, - }, - fs.readdirSync(dbPath), - ); } catch (error) { console.error(error); } diff --git a/sandbox/state.json b/sandbox/state.json new file mode 100644 index 00000000..1ce59f9f --- /dev/null +++ b/sandbox/state.json @@ -0,0 +1 @@ +{"block":{"number":"0x5d","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66506392","gas_limit":"0x6691b7","basefee":"0x1b7bc","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x10225595542b90e","code":"0x","storage":{}},"0x00e39a5004299871ab3b00fed5a39a715f181d02":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x66":"0x107733fed96c4cd390c944a31f5425a7fb98ae5e","0x67":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xd178b720229c39de617846f84cf9c8d32a63a23d","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec"}},"0x0458f653495fb8d9bd0e7df468c2bf76d26c7bd9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046105ba565b610054565b604051901515815260200160405180910390f35b5f601482146100a95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420736861312068617368206c656e6774680000000000000000604482015260640160405180910390fd5b5f6100ec5f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101599050565b6bffffffffffffffffffffffff191690505f61013c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061018a92505050565b6bffffffffffffffffffffffff1916919091149695505050505050565b81515f90610168836014610621565b1115610172575f80fd5b5001602001516bffffffffffffffffffffffff191690565b5f6040518251602084019350604067ffffffffffffffc0600183011601600982820310600181036101bc576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f061020d565b5f8383101561020657508082015192829003926020841015610206575f1960208590036101000a0119165b9392505050565b5f5b82811015610514576102228482896101db565b85526102328460208301896101db565b60208601526040818503106001810361024e5760808286038701535b506040830381146001810361026b57602086018051600887021790525b5060405b60808110156102f357858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161026f565b5060805b61014081101561037c57858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016102f7565b50815f805f5b60508110156104ea576014810480156103b257600181146103d957600281146103fe576003811461042857610449565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610449565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610449565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610449565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8516179350600181019050610382565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff169060400161020f565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b5f8083601f840112610585575f80fd5b50813567ffffffffffffffff81111561059c575f80fd5b6020830191508360208285010111156105b3575f80fd5b9250929050565b5f805f80604085870312156105cd575f80fd5b843567ffffffffffffffff808211156105e4575f80fd5b6105f088838901610575565b90965094506020870135915080821115610608575f80fd5b5061061587828801610575565b95989497509550505050565b8082018082111561064057634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a","storage":{}},"0x06e2822b8856749ed179c77140dbc5f5a27410a4":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004061003b36600461051c565b610054565b604051901515815260200160405180910390f35b5f6060805f61009c60048b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506102e79050565b60ff1690508015610166576100f060058261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061015f6101008260056105c3565b61ffff908116906005906101169085168d6105e5565b61012091906105e5565b8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b915061021d565b6101a960058b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929392505061038b9050565b90506101f460078261ffff168c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061030b9050565b925061021a6102048260076105c3565b61ffff908116906007906101169085168d6105e5565b91505b5f606061026084868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103b192505050565b90925090508180156102d757506102856020825161027e91906105e5565b82906103cb565b60028b8b6040516102979291906105f8565b602060405180830381855afa1580156102b2573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906102d59190610607565b145b9c9b505050505050505050505050565b5f8282815181106102fa576102fa61061e565b016020015160f81c90505b92915050565b825160609061031a8385610632565b1115610324575f80fd5b5f8267ffffffffffffffff81111561033e5761033e610645565b6040519080825280601f01601f191660200182016040528015610368576020820181803683370190505b509050602080820190868601016103808282876103ed565b509095945050505050565b81515f9061039a836002610632565b11156103a4575f80fd5b50016002015161ffff1690565b5f60606103bf838587610442565b91509150935093915050565b81515f906103da836020610632565b11156103e4575f80fd5b50016020015190565b602081106104255781518352610404602084610632565b9250610411602083610632565b915061041e6020826105e5565b90506103ed565b905182516020929092036101000a5f190180199091169116179052565b5f60605f85518551855188888860405160200161046496959493929190610686565b6040516020818303038152906040529050835167ffffffffffffffff81111561048f5761048f610645565b6040519080825280601f01601f1916602001820160405280156104b9576020820181803683370190505b50915083516020830182516020840160055afa925050935093915050565b5f8083601f8401126104e7575f80fd5b50813567ffffffffffffffff8111156104fe575f80fd5b602083019150836020828501011115610515575f80fd5b9250929050565b5f805f805f8060608789031215610531575f80fd5b863567ffffffffffffffff80821115610548575f80fd5b6105548a838b016104d7565b9098509650602089013591508082111561056c575f80fd5b6105788a838b016104d7565b90965094506040890135915080821115610590575f80fd5b5061059d89828a016104d7565b979a9699509497509295939492505050565b634e487b7160e01b5f52601160045260245ffd5b61ffff8181168382160190808211156105de576105de6105af565b5092915050565b81810381811115610305576103056105af565b818382375f9101908152919050565b5f60208284031215610617575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610305576103056105af565b634e487b7160e01b5f52604160045260245ffd5b5f81515f5b81811015610678576020818501810151868301520161065e565b505f93019283525090919050565b8681528560208201528460408201525f6106b56106af6106a96060850188610659565b86610659565b84610659565b9897505050505050505056fea164736f6c6343000818000a","storage":{}},"0x0712e8e819712c3bfdb098ce51c87a4ac0296fd8":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x0930ffb2c192b0c9a9dd2372cf7f2845ef39cbb6":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x65":"0x107733fed96c4cd390c944a31f5425a7fb98ae5e","0x66":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xbe92182cab5b84fd18b34881a0c32771e84f5b8b","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec","0xe1b9c5b9c6f25fc6c03fdb76829a7257b1cdb10ff4bc4f62e0a94358c8121905":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa"}},"0x107733fed96c4cd390c944a31f5425a7fb98ae5e":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x65":"0x556e73746f707061626c6520446f6d61696e7300000000000000000000000026","0x66":"0x5544000000000000000000000000000000000000000000000000000000000004","0x133":"0x68747470733a2f2f6578616d706c652e636f6d2f000000000000000000000028","0x134":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x9c74364589a7bce52d7a232f90c98b979577d9ab711dbe7e9fb985471178bff":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xf29a433ca043c2d5f13825944af9d019209f338df87172c6b8012dce3044881":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xf319a2ef598111826b455194189a27454a0286226eb066e1116f605e0373b37":"0x0","0x1257bbdf5bed452b3eda1d974a9839972d4d54d7fb1cde6a652e653346cc29b8":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x12c033f2252861b1bd15e9b5c71ef1cf26ca53de15eabc3b49e06f596e8755ec":"0x0","0x1348552952ac59b1c2522e84f684e36775420b449eddcdbd28f217183ed58b09":"0x0","0x149026695ebdd2bd6be0a7006aec5d10ddffbe46be181e4468980ea83c004fe9":"0x0","0x14c854a78d51371251661a408306c75d2515b5d509b295a58205e48267082bdc":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x18f06622a1abedc7bb78fcc98b2375188aef6c03b9247beee780b0b095d60285":"0x0","0x201ef5e312d372e2aeac4cf173b46ad2985127c7381f4f9acae5ebbd3a5e3861":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x2215c0abaeffcb5feae8a439b3185f8fba5dd6d97529a56c7609cd41fafdf5f1":"0x1","0x23513200931f98893f46373666c13964c7a821c5b40da7951b921629acf02735":"0x0","0x23f87654b79c6db28828f317e47d0c8deb9eaa2ea4e213fef901836c85036bf3":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x2e4566d865f2e159531492d7643e25e502917762b29082282ab9dfee8fbf54c7":"0x0","0x31fc31c15d389c5908095d314bb8b258352d51e18ac8a2f7fe15f3a0af519145":"0x0","0x3467fdbb447be3074b11c625b56e54d7ab44f3804bef205b07dd436d707d06d5":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x62b11ad5f582a5c5d378fb310125b030042554f1","0x3cd80e7291e5f6dffa9af6eb70d47145a8fdd40acb8d09dfd0cf374e8c239b37":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x3f86c4990e663ffa5011ed38824fca68af7e0592eb22f41aebdec0ce84ee672e":"0x0","0x406aa3bf31381c8a323679af48792dfa2e7aa09dd0eb919e307dc4bf84216ff6":"0x0","0x47ce17acd30cc86e021ac7b23be8138ea767f6da503362aac5888a0679270eed":"0x0","0x4a7983c36f64e6df4d467cf706c128c273d30c24bbb172e251a5740624cc0bd3":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x4c42d98041cda7cb7d56b5d04731bd436366eb9f05c30f43671f1d1e2c0b0fa4":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x55926eed7087c8cbfa1492f6d367f5e4c14c8d8cd59e2918c37184091369efb1":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x5b20f40cb5e9e634a90df9a72b516c11cc52281a4d1b7b67e672e2fe544ff22f":"0x0","0x6dac3e1cfae338e10c9c2f5000f6256d09afa83708761042001cea734f470ac1":"0x0","0x6defc32a546a6fb1b745bd1bb04e27085e94f01d7ef79587aee2c80853c43a53":"0x0","0x760b245be050a725a39b4fc089ad474a5fd40efa17101e112d30195d590779b4":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x7bee59fcac76da32acb23def57eaaf959a4372a4fc180978fbd54f7a4c4b2f3d":"0x0","0x804aee9448e0b539a009ee7c6dd57e686c72e7b182e9622a42922b245a97e61e":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x825f7f8567cfd669c3beab41edff07d4aa51436123deeb0d3623b6a8fdec893c":"0x0","0x8717a3236e6a948df94444f035834fa8f7c5ee663a29f3580f3ef43ab051d6bd":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x8a34e37883baf84417a33bb02eec8d1e43e363f617029800ff166614df3f112f":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x8bd1acdc45b63f1edf5db0b1444f1c4a6f82bf0a5a0a7231c2dd7b76a2b1e35c":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87":"0x0","0x8ed4e9fbdf86edd9f3eb1c8d4fbfc53a2eb863faf4cf5e0d2b307c0b33030091":"0x0","0x8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x90d72780b77edcd0c8daffbac0b21264679e851b734cb090e2b144eb3a28bb98":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x93fc964857984ff804a65eaceac4062669948f2b651ddc6b71373ad142bf45e0":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0x9770fa903e700367e0306ab8fd70a2bb4f049417d341a2f8a2409d8d6a2218d1":"0x0","0xb1016fe231c2ed9dba8c95d2658191823b4b9ffa61a7aea530802c6b2ff27c41":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec","0xbe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe":"0x27935e7e85db3c4e7885eb828b9e889ba69a4e7f","0xbe7c5c707db1c91bd2c84880bb1e177b65886d295d9a62df8edfe38f8066cc81":"0x0","0xc3cd64a46de7309013ddb93a16a3024c2e46fb931e4744edf2610fb119f716f5":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xc563f9d3175978a619bae1a8175d3ea4be91d3890345085c5eb16f83b678a3d9":"0x0","0xc5b5cdb7b939f9d661f58f28c37e10cf71d45dacfea2581c88ae4a17aaf55e6e":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xd386775169d9e0716e9b5b08561984726edaa9febd0ca8e5468ecffa112078c7":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xe3b736cdcc6a09d7e3a05ffb63b11f11c91958d861443c3409d3fd863e8217bd":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xe3e5b75e3dff543bfbfe5b494e4e3243b4d9d0b3d794725cea46c28fe6be50e4":"0x0","0xe7d61626cac95282d296ee7ab5958e3e72e32eb959a7cab1d37c0f9d6d69c18a":"0x1a","0xeca5e1ccaa645ce2be97a867a1f8aeeb63ea833aeb009c0df0553b42b30c683f":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xf08305746cdba1d0eaa65036694838a3db122973267ffc57739d605c320c680a":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xf0d566acc03395f71b37890f455d51d93197adf754ea72aba21427dc66b437df":"0x0","0xf230898ba4fe40c52f958d03013d995f822e25a5d4fae43bbdc6e92623cea0bd":"0x0","0xf245a9962043f44f4af98f9952a3bd29d91eb05418e4bb567b9de8f27e239b13":"0x0","0xf2a19ade13962e8675aecf2fbe51913877912f9e48e899806b6e06e82f9a980f":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xf2fab50b0b53245ddfa1bcfcdf4c73e209d6921dad704d173cf04cbbadc8e346":"0x0","0xfa6f3ee10d719cb3457d10c539ff3d77b8e56852ea62f68b2f9f85ad691ed6b4":"0x39a27956b78d00a4e00ea8833ff0947410a2933f","0xfff3abb219acc6ef4eed6e93a5682023229370196f352cdf3a71a88d881e3487":"0x0"}},"0x11dd97b7ca847dfb6504e61b7b9eb30f55e554a0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631bf7e13e146100465780636ccbae5f1461006f578063a424740014610090575b600080fd5b610059610054366004610ba9565b6100b3565b6040516100669190610c98565b60405180910390f35b61008261007d366004610cab565b6101ce565b604051908152602001610066565b6100a361009e366004610ba9565b610332565b6040519015158152602001610066565b606060005a6001546040805163b3f9e4cb60e01b81529088013560048201529192506000916001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa15801561010a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012e9190610cd9565b90506101c26101406020880188610cf6565b8260408901358561015460608c018c610d13565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c90819084018382808284376000920191909152506103fb92505050565b925050505b9392505050565b60025460015460405163b3f9e4cb60e01b8152600481018490526000926001600160a01b0390811692169063b3f9e4cb90602401602060405180830381865afa92505050801561023b575060408051601f3d908101601f1916820190925261023891810190610cd9565b60015b156102435790505b6001600160a01b0381163b156102c557604051636ccbae5f60e01b81526004810184905281906001600160a01b03821690636ccbae5f90602401602060405180830381865afa9250505080156102b6575060408051601f3d908101601f191682019092526102b391810190610d5a565b60015b156102c357949350505050565b505b600254604051636ccbae5f60e01b8152600481018590526001600160a01b0390911690636ccbae5f90602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c79190610d5a565b6001546040805163b3f9e4cb60e01b815290850135600482015260009182916001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190610cd9565b90506103f26103b586610e0b565b8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104d392505050565b95945050505050565b6060600080876001600160a01b0316866104178b8a898961051f565b6040516104249190610eb5565b60006040518083038160008787f1925050503d8060008114610462576040519150601f19603f3d011682016040523d82523d6000602084013e610467565b606091505b509092509050610478603f87610ed1565b5a1161048657610486610ef3565b6104c682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506105d4565b9998505050505050505050565b60006104e084848461060d565b8015610514575060608401516020908101516001600160e01b031990811660009081529182905260409091205460e01b1615155b949350505050565b50565b6020808301516001600160e01b03191660009081529081905260408120546060919060e01b90506001600160e01b031981166000036105b15760405162461bcd60e51b815260206004820152602360248201527f42617365526f7574696e67466f727761726465723a20524f5554455f554e4b4e60448201526227aba760e91b60648201526084015b60405180910390fd5b835160031901600485019081526105c982828661074c565b979650505050505050565b606083156105e35750816101c7565b8251156105f35782518084602001fd5b8160405162461bcd60e51b81526004016105a89190610c98565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190610d5a565b905060006107268660600151805190602001208688602001516040516020016106c69392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156101c2575085516101c2906001600160a01b03168286610935565b60606001600160e01b0319841663b87abc1160e01b036107cd5760008380602001905181019061077c9190610d5a565b9050848184604051602401610792929190610f09565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915291506101c79050565b6001600160e01b0319841663c597407360e01b03610859576000806000858060200190518101906107fe9190610f67565b925092509250868383838860405160240161081c9493929190610fd4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915293506101c792505050565b6001600160e01b031984166311ed383160e31b036108a85760008060008580602001905181019061088a91906110a6565b925092509250868383838860405160240161081c9493929190611157565b6001600160e01b031984166328d55f9b60e21b036101c7576000806000858060200190518101906108d991906110a6565b92509250925086838383886040516024016108f79493929190611157565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915293505050509392505050565b60008060006109448585610a77565b9092509050600081600481111561095d5761095d61117c565b14801561097b5750856001600160a01b0316826001600160a01b0316145b1561098b576001925050506101c7565b600080876001600160a01b0316631626ba7e60e01b88886040516024016109b3929190610f09565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109f19190610eb5565b600060405180830381855afa9150503d8060008114610a2c576040519150601f19603f3d011682016040523d82523d6000602084013e610a31565b606091505b5091509150818015610a44575080516020145b8015610a6b57508051630b135d3f60e11b90610a699083016020908101908401610d5a565b145b98975050505050505050565b6000808251604103610aad5760208301516040840151606085015160001a610aa187828585610abc565b94509450505050610ab5565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610af35750600090506003610ba0565b8460ff16601b14158015610b0b57508460ff16601c14155b15610b1c5750600090506004610ba0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b70573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b9957600060019250925050610ba0565b9150600090505b94509492505050565b600080600060408486031215610bbe57600080fd5b833567ffffffffffffffff80821115610bd657600080fd5b9085019060808288031215610bea57600080fd5b90935060208501359080821115610c0057600080fd5b818601915086601f830112610c1457600080fd5b813581811115610c2357600080fd5b876020828501011115610c3557600080fd5b6020830194508093505050509250925092565b60005b83811015610c63578181015183820152602001610c4b565b50506000910152565b60008151808452610c84816020860160208601610c48565b601f01601f19169290920160200192915050565b6020815260006101c76020830184610c6c565b600060208284031215610cbd57600080fd5b5035919050565b6001600160a01b038116811461051c57600080fd5b600060208284031215610ceb57600080fd5b81516101c781610cc4565b600060208284031215610d0857600080fd5b81356101c781610cc4565b6000808335601e19843603018112610d2a57600080fd5b83018035915067ffffffffffffffff821115610d4557600080fd5b602001915036819003821315610ab557600080fd5b600060208284031215610d6c57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610dac57610dac610d73565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ddb57610ddb610d73565b604052919050565b600067ffffffffffffffff821115610dfd57610dfd610d73565b50601f01601f191660200190565b600060808236031215610e1d57600080fd5b610e25610d89565b8235610e3081610cc4565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff811115610e6057600080fd5b840136601f820112610e7157600080fd5b8035610e84610e7f82610de3565b610db2565b8181523684838501011115610e9857600080fd5b818484018583013760009181019093015250606082015292915050565b60008251610ec7818460208701610c48565b9190910192915050565b600082610eee57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b8281526040602082015260006105146040830184610c6c565b600082601f830112610f3357600080fd5b8151610f41610e7f82610de3565b818152846020838601011115610f5657600080fd5b610514826020830160208701610c48565b600080600060608486031215610f7c57600080fd5b835167ffffffffffffffff80821115610f9457600080fd5b610fa087838801610f22565b94506020860151915080821115610fb657600080fd5b50610fc386828701610f22565b925050604084015190509250925092565b608081526000610fe76080830187610c6c565b8281036020840152610ff98187610c6c565b905084604084015282810360608401526105c98185610c6c565b600082601f83011261102457600080fd5b8151602067ffffffffffffffff8083111561104157611041610d73565b8260051b611050838201610db2565b938452858101830193838101908886111561106a57600080fd5b84880192505b85831015610a6b578251848111156110885760008081fd5b6110968a87838c0101610f22565b8352509184019190840190611070565b6000806000606084860312156110bb57600080fd5b835167ffffffffffffffff808211156110d357600080fd5b6110df87838801611013565b945060208601519150808211156110f557600080fd5b50610fc386828701611013565b600081518084526020808501808196508360051b8101915082860160005b8581101561114a578284038952611138848351610c6c565b98850198935090840190600101611120565b5091979650505050505050565b60808152600061116a6080830187611102565b8281036020840152610ff98187611102565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000811000a","storage":{"0x1":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x2":"0xf8c26340c1eaea6c7ff1760b25005e1306953572","0x1e74f978992d7d64ddac400bd4aae9eefd60fa0b8456650273f5f50148803323":"0xa3557e6c","0x23c84c23be8f829809d1b1502c647c6c59fb6b2345b163a2ca3e7d4f9855975c":"0x8f69c188","0xa0286316c9d3cb00f4f54a9f1096cefaa1748bb5a5395e7fa1563568ebb3e6c3":"0xb87abc11","0xdc138de224807be243ee38fe9e746cce5d437a256b87be90b80240e0811ad043":"0xc5974073"}},"0x145908bbcfc7b258e4d4d9a586f6e3249ae80216":{"nonce":1,"balance":"0x0","code":"0x3d5c","storage":{}},"0x17cda4e23f7237277952e075b1c48467aabfacc0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c806368f9dab21461002d575b5f80fd5b61004061003b36600461088b565b610052565b60405190815260200160405180910390f35b5f61006f6040518060400160405280606081526020015f81525090565b61008e61007c858861090d565b61008790601061090d565b82906101d1565b506100d085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b5061011287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250859392505061023a9050565b505f610120825f0151610266565b905083156101bc5760408051808201909152606081525f602090910181905282515261014c825f610650565b5061018e88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869392505061023a9050565b505f5b848110156101ba576101a4835f8461067f565b5082516101b090610266565b9150600101610191565b505b6001600160601b031916979650505050505050565b60408051808201909152606081525f60208201526101f0602083610920565b1561021857610200602083610920565b61020b90602061093f565b610215908361090d565b91505b506020808301829052604080518085525f815283019091019052815b92915050565b60408051808201909152606081525f602082015261025f83845f0151518485516106b2565b9392505050565b5f6040518251602084019350604067ffffffffffffffc060018301160160098282031060018103610298576040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f06102e8565b5f8383101561025f5750808201519282900392602084101561025f575f1960208590036101000a0119169392505050565b5f5b828110156105ef576102fd8482896102b7565b855261030d8460208301896102b7565b6020860152604081850310600181036103295760808286038701535b506040830381146001810361034657602086018051600887021790525b5060405b60808110156103ce57858101603f19810151603719820151601f19830151600b198401516002911891909218189081027ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe1663800000009091047c010000000100000001000000010000000100000001000000010000000116179052600c0161034a565b5060805b61014081101561045757858101607f19810151606f19820151603f198301516017198401516004911891909218189081027ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc1663400000009091047c0300000003000000030000000300000003000000030000000300000003161790526018016103d2565b50815f805f5b60508110156105c55760148104801561048d57600181146104b457600281146104d9576003811461050357610524565b600160281b8504600160501b86048118600160781b870416189350635a8279999250610524565b600160281b8504600160781b8604600160501b870418189350636ed9eba19250610524565b600160501b8504600160781b8604818117600160281b8804169116179350638f1bbcdc9250610524565b600160281b8504600160781b8604600160501b87041818935063ca62c1d692505b50601f600160bb1b8504168063ffffffe06001609b1b87041617905080840190508063ffffffff8616019050808301905080600160e01b600484028c015104019050600160a01b8102600160281b860417945050600160501b633fffffff600160521b86041663c00000006604000000000000870416170277ffffffff00ffffffff000000000000ffffffff00ffffffff851617935060018101905061045d565b5050509190910177ffffffff00ffffffff00ffffffff00ffffffff00ffffffff16906040016102ea565b50600160601b63ffffffff821667ffffffff000000006101008404166bffffffff00000000000000006201000085041663ffffffff60601b630100000086041663ffffffff60801b6401000000008704161717171702945050505050919050565b60408051808201909152606081525f602082015282515161025f9084906001600160601b031985166014610798565b60408051808201909152606081525f60208201526106aa84846001600160601b031985166014610798565b949350505050565b60408051808201909152606081525f602082015282518211156106d3575f80fd5b60208501516106e2838661090d565b1115610715576107158561070587602001518786610700919061090d565b610813565b610710906002610952565b610829565b5f808651805187602083010193508088870111156107335787860182525b505050602084015b60208410610773578051825261075260208361090d565b915061075f60208261090d565b905061076c60208561093f565b935061073b565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081525f602082015260208501516107bb858461090d565b11156107cf576107cf85610705868561090d565b5f6001836101000a0390508260200360080284901c93508551838682010185831982511617815250805184870111156108085783860181525b509495945050505050565b5f81831115610823575081610234565b50919050565b815161083583836101d1565b50610840838261023a565b50505050565b5f8083601f840112610856575f80fd5b50813567ffffffffffffffff81111561086d575f80fd5b602083019150836020828501011115610884575f80fd5b9250929050565b5f805f805f6060868803121561089f575f80fd5b853567ffffffffffffffff808211156108b6575f80fd5b6108c289838a01610846565b909750955060208801359150808211156108da575f80fd5b506108e788828901610846565b96999598509660400135949350505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610234576102346108f9565b5f8261093a57634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115610234576102346108f9565b8082028115828204841417610234576102346108f956fea164736f6c6343000818000a","storage":{}},"0x19356cc2300833e690088a5a09a2044a3cc2a1e2":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x229c56b7805ab5935a883207f6a6bd5847e65aee":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106102ae5760003560e01c8063906cecc111610175578063b9998a24116100dc578063d547741f11610095578063f2fde38b1161006f578063f2fde38b14610892578063f5243bc4146108b2578063f940e385146108d2578063ffa1ad74146108f257600080fd5b8063d547741f1461083f578063d7db74c71461085f578063ec5273891461087257600080fd5b8063b9998a241461077d578063cc2a9a5b1461079d578063cc2c3fc4146107bd578063ceeb4f50146107dd578063d1f5692c146107fd578063d53913931461081d57600080fd5b8063a3a3f7f61161012e578063a3a3f7f614610690578063a3f4df7e146106b0578063a849d65c146106fd578063aa271e1a1461071d578063b0aa98c71461073d578063b3ab15fb1461075d57600080fd5b8063906cecc1146105e657806391d1485414610606578063983b2d5614610626578063986502751461064657806399e0dd7c1461065b578063a217fddf1461067b57600080fd5b80635b6fa8db11610219578063715018a6116101d2578063715018a61461054b57806371e2a6571461056057806377a2a5891461058057806381c81d35146105a05780638456cb59146105b35780638da5cb5b146105c857600080fd5b80635b6fa8db146104a35780635c975abb146104c35780635cd7e3b3146104d85780635e22cd86146104f85780635fc1964f14610518578063634486da1461053857600080fd5b80633092afd51161026b5780633092afd5146103a857806336568abe146103c85780633f41b614146103e85780633f4ba83a1461042057806351cff8d914610435578063572b6c051461045557600080fd5b806301ffc9a7146102b35780631edb948e146102e857806320c5429b1461030a578063248a9ca31461032a578063268b15ed146103685780632f2ff15d14610388575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004613dc4565b610923565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b50610308610303366004613e13565b61095a565b005b34801561031657600080fd5b50610308610325366004613e3f565b610b03565b34801561033657600080fd5b5061035a610345366004613e3f565b60009081526097602052604090206001015490565b6040519081526020016102df565b34801561037457600080fd5b50610308610383366004613e99565b610c26565b34801561039457600080fd5b506103086103a3366004613f04565b610cb9565b3480156103b457600080fd5b506103086103c3366004613f34565b610ce3565b3480156103d457600080fd5b506103086103e3366004613f04565b610cf7565b3480156103f457600080fd5b5060c954610408906001600160a01b031681565b6040516001600160a01b0390911681526020016102df565b34801561042c57600080fd5b50610308610d85565b34801561044157600080fd5b50610308610450366004613f34565b610d97565b34801561046157600080fd5b506102d3610470366004613f34565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546001600160a01b0390811691161490565b3480156104af57600080fd5b5060cc54610408906001600160a01b031681565b3480156104cf57600080fd5b506102d3610e37565b3480156104e457600080fd5b506103086104f3366004613fa3565b610e4d565b34801561050457600080fd5b50610308610513366004614062565b6110b1565b34801561052457600080fd5b5061030861053336600461419c565b6112f6565b610308610546366004613f34565b61133e565b34801561055757600080fd5b50610308611401565b34801561056c57600080fd5b5061030861057b36600461419c565b611413565b34801561058c57600080fd5b5060ce54610408906001600160a01b031681565b6103086105ae366004613f34565b61145b565b3480156105bf57600080fd5b506103086114d8565b3480156105d457600080fd5b506033546001600160a01b0316610408565b3480156105f257600080fd5b5061030861060136600461423a565b6114e8565b34801561061257600080fd5b506102d3610621366004613f04565b61156e565b34801561063257600080fd5b50610308610641366004613f34565b611599565b34801561065257600080fd5b506103086115aa565b34801561066757600080fd5b50610308610676366004614295565b6115c4565b34801561068757600080fd5b5061035a600081565b34801561069c57600080fd5b506103086106ab3660046142d6565b6116ab565b3480156106bc57600080fd5b506106f0604051806040016040528060148152602001732aa7299d1026b4b73a34b7339026b0b730b3b2b960611b81525081565b6040516102df919061437c565b34801561070957600080fd5b5060cb54610408906001600160a01b031681565b34801561072957600080fd5b506102d3610738366004613f34565b6116f4565b34801561074957600080fd5b506102d3610758366004613e3f565b61170e565b34801561076957600080fd5b50610308610778366004613f34565b61176c565b34801561078957600080fd5b50610308610798366004613f34565b611796565b3480156107a957600080fd5b506103086107b836600461438f565b6117db565b3480156107c957600080fd5b5060ca54610408906001600160a01b031681565b3480156107e957600080fd5b506103086107f8366004614411565b611cd2565b34801561080957600080fd5b506103086108183660046144c6565b611d76565b34801561082957600080fd5b5061035a600080516020614ef483398151915281565b34801561084b57600080fd5b5061030861085a366004613f04565b611e2d565b61030861086d3660046144fb565b611e52565b34801561087e57600080fd5b5061030861088d366004613e3f565b611fe2565b34801561089e57600080fd5b506103086108ad366004613f34565b612054565b3480156108be57600080fd5b506103086108cd3660046145f0565b612070565b3480156108de57600080fd5b506103086108ed366004614708565b612222565b3480156108fe57600080fd5b506106f060405180604001604052806005815260200164302e352e3160d81b81525081565b60006001600160e01b03198216637965db0b60e01b148061095457506301ffc9a760e01b6001600160e01b03198316145b92915050565b61096561073861239e565b61098a5760405162461bcd60e51b815260040161098190614736565b60405180910390fd5b60c95460405163baef73e960e01b8152600481018390526000916001600160a01b03169063baef73e990602401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f8919061476b565b9050806001600160401b0316600003610a235760405162461bcd60e51b815260040161098190614788565b806001600160401b0316836001600160401b031611610a905760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a204558504952595f4e4f545f455854454e60448201526211115160ea1b6064820152608401610981565b60c954604051631fb9763760e11b81526001600160401b0385166004820152602481018490526001600160a01b0390911690633f72ec6e906044015b600060405180830381600087803b158015610ae657600080fd5b505af1158015610afa573d6000803e3d6000fd5b50505050505050565b610b0e61073861239e565b610b2a5760405162461bcd60e51b815260040161098190614736565b60c95460405163baef73e960e01b8152600481018390526001600160a01b039091169063baef73e990602401602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b97919061476b565b6001600160401b0316600003610bbf5760405162461bcd60e51b815260040161098190614788565b60c954604051637eee288d60e01b8152306004820152602481018390526001600160a01b0390911690637eee288d90604401600060405180830381600087803b158015610c0b57600080fd5b505af1158015610c1f573d6000803e3d6000fd5b5050505050565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610c6993508592508491506123ad565b610c71610e37565b15610c8e5760405162461bcd60e51b8152600401610981906147cb565b6060610afa610c9b61239e565b610cae88610ca98989612584565b6125b0565b8384600060016126c1565b600082815260976020526040902060010154610cd481612c15565b610cde8383612c26565b505050565b610ceb612cad565b610cf481612d26565b50565b610cff61239e565b6001600160a01b0316816001600160a01b031614610d775760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610981565b610d818282612d3e565b5050565b610d8d612cad565b610d95612dc3565b565b610d9f612cad565b6001600160a01b038116610db257600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905260008183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a15050565b600080516020614ed48339815191525460ff1690565b610e5786886147f5565b8051600203610e8c57610e6b61073861239e565b610e875760405162461bcd60e51b8152600401610981906148bf565b610fd1565b6000610e9782612e6b565b60c9549092506001600160a01b0316905063430c2081610eb561239e565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f249190614903565b80610fb3575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa19190614903565b8015610fb35750610fb361073861239e565b610fcf5760405162461bcd60e51b815260040161098190614920565b505b610fdb87896147f5565b6000600282511015610fff5760405162461bcd60e51b81526004016109819061496f565b6110546110336000846001865161101691906149ca565b81518110611026576110266149dd565b6020026020010151612ea6565b83600081518110611046576110466149dd565b6020026020010151836123ad565b61105c610e37565b156110795760405162461bcd60e51b8152600401610981906147cb565b6110a38b6110878b8d6147f5565b6110918a8c6147f5565b61109b898b6147f5565b6000896126c1565b505050505050505050505050565b6110bb87896147f5565b80516002036110f0576110cf61073861239e565b6110eb5760405162461bcd60e51b8152600401610981906148bf565b611235565b60006110fb82612e6b565b60c9549092506001600160a01b0316905063430c208161111961239e565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111889190614903565b80611217575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190614903565b8015611217575061121761073861239e565b6112335760405162461bcd60e51b815260040161098190614920565b505b61123f888a6147f5565b836002825110156112625760405162461bcd60e51b81526004016109819061496f565b6112796110336000846001865161101691906149ca565b611281610e37565b1561129e5760405162461bcd60e51b8152600401610981906147cb565b60028a146112be5760405162461bcd60e51b8152600401610981906149f3565b6112e78c6112cc8c8e6147f5565b6112d68b8d6147f5565b6112e08a8c6147f5565b89896126c1565b50505050505050505050505050565b6112fe612cad565b60005b8151811015610d815761132c82828151811061131f5761131f6149dd565b6020026020010151612d26565b8061133681614a39565b915050611301565b61134961073861239e565b6113655760405162461bcd60e51b815260040161098190614736565b6001600160a01b0381166113bb5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6113c481612f5a565b6113cc6115aa565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610d81573d6000803e3d6000fd5b611409612cad565b610d956000612f72565b61141b612cad565b60005b8151811015610d815761144982828151811061143c5761143c6149dd565b6020026020010151612f5a565b8061145381614a39565b91505061141e565b61146661073861239e565b6114825760405162461bcd60e51b815260040161098190614736565b6001600160a01b0381166113c45760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6114e0612cad565b610d95612fc4565b8282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525061152b93508592508491506123ad565b611533610e37565b156115505760405162461bcd60e51b8152600401610981906147cb565b606061156487610cae88610ca98989612584565b5050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6115a1612cad565b610cf481612f5a565b610d95600080516020614ef48339815191526103e361239e565b6115cc612cad565b60c954604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906115fe9085908590600401614a52565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b505060cb546001600160a01b0316159150610d8190505760cb54604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906116759085908590600401614a52565b600060405180830381600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050505050565b6116b3612cad565b610cde83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085925061302c915050565b6000610954600080516020614ef48339815191528361156e565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd696020820152908101829052600090611762906060015b6040516020818303038152906040528051906020012090565b5460ff1692915050565b611774612cad565b60ce80546001600160a01b0319166001600160a01b0392909216919091179055565b61179e612cad565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e80546001600160a01b0319166001600160a01b03831617905550565b600054610100900460ff16158080156117fb5750600054600160ff909116105b806118155750303b158015611815575060005460ff166001145b6118785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610981565b6000805460ff19166001179055801561189b576000805461ff0019166101001790555b60c980546001600160a01b03199081166001600160a01b038a81169190911790925560ca8054821689841617905560cb8054821688841617905560cc8054821687841617905560ce80549091169185169190911790556118f961314c565b611901613183565b61190a826131bc565b6119126131e3565b6040805161036081018252600661032082018181526563727970746f60d01b610340840152825282518084018452818152651dd85b1b195d60d21b602082810191909152808401919091528351808501855260018152600f60fb1b8183015283850152835180850185526003808252621b999d60ea1b82840152606085019190915284518086018652600a815269313637b1b5b1b430b4b760b11b818401526080850152845180860186526007808252663134ba31b7b4b760c91b8285015260a0860191909152855180870187528281526207070760eb1b8185015260c0860152855180870187528281526264616f60e81b8185015260e086015285518087018752828152621e9a5b60ea1b8185015261010086015285518087018752908152663837b63cb3b7b760c91b8184015261012085015284518086018652600b81526a756e73746f707061626c6560a81b81840152610140850152845180860186528381526535b632bb32b960d11b8184015261016085015284518086018652600280825261686960f01b8285015261018086019190915285518087018752848152656b726573757360d01b818501526101a086015285518087018752600580825264616e696d6560d81b828601526101c087019190915286518088018852818152646d616e676160d81b818601526101e087015286518088018852600981526862696e616e6365757360b81b8186015261020087015286518088018852818152647265616c6d60d81b818601526102208701528651808801885291825261676f60f01b82850152610240860191909152855180870187526008815267185b1d1a5b5a5cdd60c21b818501526102608601528551808701875290815264707564677960d81b81840152610280850152845180860186528381526530bab9ba34b760d11b818401526102a08501528451808601865292835265189a5d19d95d60d21b838301526102c08401929092528351808501855291825262706f6760e81b828201526102e083019190915282518084019093526004835263636c617960e01b9083015261030081019190915260005b6019811015611c5c57611c4a828260198110611c3e57611c3e6149dd565b6020020151600061302c565b80611c5481614a39565b915050611c20565b50611c8360405180604001604052806003815260200162636f6d60e81b815250600161302c565b508015610afa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611d1593508592508491506123ad565b611d1d610e37565b15611d3a5760405162461bcd60e51b8152600401610981906147cb565b611d698a611d4c8b610ca98c8c612584565b611d56888a6147f5565b611d6087896147f5565b600060016126c1565b5050505050505050505050565b611d7e612cad565b60005b81811015610cde5760c9546001600160a01b03166350960239848484818110611dac57611dac6149dd565b9050602002016020810190611dc19190613f34565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611e0257600080fd5b505af1158015611e16573d6000803e3d6000fd5b505050508080611e2590614a39565b915050611d81565b600082815260976020526040902060010154611e4881612c15565b610cde8383612d3e565b611e5c898b6147f5565b6000600282511015611e805760405162461bcd60e51b81526004016109819061496f565b611e976110336000846001865161101691906149ca565b611e9f610e37565b15611ebc5760405162461bcd60e51b8152600401610981906147cb565b60028b14611edc5760405162461bcd60e51b8152600401610981906149f3565b611f228d8d8d898960008a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061322392505050565b84341015611f725760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e674d616e616765723a204e4f545f454e4f5547485f46554e44536044820152606401610981565b611f848d8d8d8d8d8d8d8c60006133e3565b843411156112e757611f9461239e565b6001600160a01b03166108fc611faa87346149ca565b6040518115909202916000818181858888f19350505050158015611fd2573d6000803e3d6000fd5b5050505050505050505050505050565b611fea612cad565b611ff38161349f565b61200f5760405162461bcd60e51b815260040161098190614a81565b600081815260cd6020526040812061202691613d76565b60405181907f0aa1aff0f830e739d86baf0e6624d6763da02f7733575e0e463886cd062dea6a90600090a250565b61205c612cad565b612065816134c5565b610cf460008261353b565b61207a8a8c6147f5565b600060028251101561209e5760405162461bcd60e51b81526004016109819061496f565b6120b56110336000846001865161101691906149ca565b6120bd610e37565b156120da5760405162461bcd60e51b8152600401610981906147cb565b60028c146120fa5760405162461bcd60e51b8152600401610981906149f3565b61213f8e8e8e8a898b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061322392505050565b856001600160a01b03166323b872dd61215661239e565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303816000875af11580156121a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121cd9190614903565b6122115760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b611fd28e8e8e8e8e8e8e8c8e6133e3565b61222a612cad565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190614ac3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af11580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c9190614903565b6123505760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b604080516001600160a01b0384811682526020820184905285168183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a1505050565b60006123a8613545565b905090565b6123b68361349f565b6123d25760405162461bcd60e51b815260040161098190614a81565b600083815260cf602052604090205460ff1615156001600160401b03821615151461244e5760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544c445f455850495241424c455f4d496044820152650a69a82a886960d31b6064820152608401610981565b60006124818360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050600a81600001511115612529576124ac6124a0826000600a61358b565b80516020909101512090565b7fb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8036125295760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544f4b454e5f4c4142454c5f50524f4860448201526512509255115160d21b6064820152608401610981565b612532836135ca565b61257e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a204c4142454c5f494e56414c49440000006044820152606401610981565b50505050565b60608282604051602001612599929190614adc565b604051602081830303815290604052905092915050565b604080516002808252606082810190935260009190816020015b60608152602001906001900390816125ca57905050905082816000815181106125f5576125f56149dd565b602002602001018190525060cd6000858152602001908152602001600020805461261e90614b04565b80601f016020809104026020016040519081016040528092919081815260200182805461264a90614b04565b80156126975780601f1061266c57610100808354040283529160200191612697565b820191906000526020600020905b81548152906001019060200180831161267a57829003601f168201915b5050505050816001815181106126af576126af6149dd565b60209081029190910101529392505050565b60008060006126cf88612e6b565b915091508380156126e1575060028851115b8015612763575060c9546040516331a9108f60e11b8152600481018390526001600160a01b038b8116921690636352211e90602401602060405180830381865afa158015612733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127579190614b3e565b6001600160a01b031614155b156127c35760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e616765723a20524556455253455f5245434f52445f4e60448201526913d517d0531313d5d15160b21b6064820152608401610981565b60c954604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401602060405180830381865afa15801561280c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128309190614903565b8015612921575060c9546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015612880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a49190614b3e565b6001600160a01b03161480612921575060c95460405163d9548e5360e01b8152600481018490526001600160a01b039091169063d9548e5390602401602060405180830381865afa1580156128fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129219190614903565b15612a12576001600160401b038516156129a35760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b15801561298a57600080fd5b505af115801561299e573d6000803e3d6000fd5b505050505b60c954604051630fb8df0360e11b81526001600160a01b0390911690631f71be06906129db908c908c908c908c908b90600401614bb0565b600060405180830381600087803b1580156129f557600080fd5b505af1158015612a09573d6000803e3d6000fd5b50505050612c09565b612a1b8261372e565b612a248861378d565b8015612a31575087516002145b8015612a4457506001600160401b038516155b15612b225760ca5488516001600160a01b039091169063c36c2125908b908b90600090612a7357612a736149dd565b602090810291909101015160cc546040516001600160e01b031960e086901b168152612aad9392916001600160a01b031690600401614c0f565b600060405180830381600087803b158015612ac757600080fd5b505af1158015612adb573d6000803e3d6000fd5b50505050600087511115612b1d5760cc54604051633a0deb9d60e21b81526001600160a01b039091169063e837ae74906129db908a908a908790600401614c44565b612c09565b60c95460405163ba5d40b760e01b81526001600160a01b039091169063ba5d40b790612b5a908c908c908c908c908b90600401614bb0565b600060405180830381600087803b158015612b7457600080fd5b505af1158015612b88573d6000803e3d6000fd5b505050506001600160401b03851615612c095760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b158015612bf057600080fd5b505af1158015612c04573d6000803e3d6000fd5b505050505b50979650505050505050565b610cf481612c2161239e565b6137e7565b612c30828261156e565b610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c6961239e565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612cb561239e565b6001600160a01b0316612cd06033546001600160a01b031690565b6001600160a01b031614610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610981565b610cf4600080516020614ef483398151915282611e2d565b612d48828261156e565b15610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19169055612d7f61239e565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612dcb610e37565b612e0e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881393d517d4105554d15160621b6044820152606401610981565b600080516020614ed4833981519152805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612e4e61239e565b6040516001600160a01b03909116815260200160405180910390a1565b805160009081905b8015612ea057829150612e8c82856110166001856149ca565b925080612e9881614c7a565b915050612e73565b50915091565b60008151600003612ef95760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e674d616e616765723a204c4142454c5f454d50545900000000006044820152606401610981565b8282604051602001612f0b9190614c91565b60405160208183030381529060405280519060200120604051602001612f3b929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b610cf4600080516020614ef48339815191528261353b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612fcc610e37565b15612fe95760405162461bcd60e51b8152600401610981906147cb565b600080516020614ed4833981519152805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e4e61239e565b6000613039600084612ea6565b600081815260cd602052604090209091506130548482614cf3565b50600081815260cf602052604090819020805460ff19168415151790555181907f4fce6f6e172b04eaa80325d8e3b0180a34945000f3e214605039e8420fdf8980906130a190869061437c565b60405180910390a260c954604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381865afa1580156130f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131169190614903565b610cde5760c9546040516307befae360e51b81526001600160a01b039091169063f7df5c6090610acc9084908790600401614db2565b600054610100900460ff166131735760405162461bcd60e51b815260040161098190614dd3565b610d9561317e61239e565b612f72565b600054610100900460ff166131aa5760405162461bcd60e51b815260040161098190614dd3565b610d9560006131b761239e565b61353b565b600054610100900460ff1661179e5760405162461bcd60e51b815260040161098190614dd3565b600054610100900460ff1661320a5760405162461bcd60e51b815260040161098190614dd3565b600080516020614ed4833981519152805460ff19169055565b600061323761323287896147f5565b612e6b565b506040516bffffffffffffffffffffffff1930606090811b821660208401524660348401528b811b82166054840152606883018490526001600160c01b031960c08a901b1660888401526090830188905286901b1660b082015290915060009061331390849061330d9060c401604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9061384b565b905061331e816116f4565b6133765760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e674d616e616765723a205349474e45525f49535f4e4f545f4d49604482015263272a22a960e11b6064820152608401610981565b42866001600160401b0316116133d85760405162461bcd60e51b815260206004820152602160248201527f4d696e74696e674d616e616765723a20455850495245445f5349474e415455526044820152604560f81b6064820152608401610981565b505050505050505050565b600061342a8a6133f38a8c6147f5565b6133fd898b6147f5565b613407888a6147f5565b60008f6001600160a01b031661341b61239e565b6001600160a01b0316146126c1565b9050896001600160a01b031661343e61239e565b6001600160a01b0316827fa545b6fd3355e8d57f8c8147bafe740545bd3ea1f94bef2576a6d532a7c3b605868660405161348b9291909182526001600160a01b0316602082015260400190565b60405180910390a450505050505050505050565b600081815260cd6020526040812080548291906134bb90614b04565b9050119050919050565b6134cd612cad565b6001600160a01b0381166135325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b610cf481612f72565b610d818282612c26565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546000906001600160a01b03163303613586575060331936013560601c90565b503390565b604080518082019091526000808252602082015260405180604001604052808381526020018486602001516135c09190614e1e565b9052949350505050565b600081516000036135dd57506000919050565b60208201805160f81c603081108015906135fb575060398160ff1611155b15801561361d575060618160ff161015801561361b5750607a8160ff1611155b155b1561362c575060009392505050565b8351600181111561369a5761364e836136466001846149ca565b015160f81c90565b915060308260ff1610158015613668575060398260ff1611155b15801561368a575060618260ff16101580156136885750607a8260ff1611155b155b1561369a57506000949350505050565b60015b6136a86001836149ca565b811015613722578381015160f81c9250602d83148015906136de575060308360ff16101580156136dc575060398360ff1611155b155b80156136ff575060618360ff16101580156136fd5750607a8360ff1611155b155b156137105750600095945050505050565b8061371a81614a39565b91505061369d565b50600195945050505050565b6137378161170e565b156137845760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a20544f4b454e5f424c4f434b45440000006044820152606401610981565b610cf48161386f565b6000806137a46000846001865161101691906149ca565b60ca549091506001600160a01b0316158015906137e05750807f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f145b9392505050565b6137f1828261156e565b610d8157613809816001600160a01b031660146138f3565b6138148360206138f3565b604051602001613825929190614e31565b60408051601f198184030181529082905262461bcd60e51b82526109819160040161437c565b600080600061385a8585613a8e565b9150915061386781613ad3565b509392505050565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd6960208201529081018290526001906138ae90606001611749565b805460ff19169115159190911790556040518181527f2ce5d9351b1d590d5a066db0d2dc7602d55f092506a83a7ee8c4d78ee357d75a9060200160405180910390a150565b60606000613902836002614ea6565b61390d906002614e1e565b6001600160401b0381111561392457613924614133565b6040519080825280601f01601f19166020018201604052801561394e576020820181803683370190505b509050600360fc1b81600081518110613969576139696149dd565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613998576139986149dd565b60200101906001600160f81b031916908160001a90535060006139bc846002614ea6565b6139c7906001614e1e565b90505b6001811115613a3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139fb576139fb6149dd565b1a60f81b828281518110613a1157613a116149dd565b60200101906001600160f81b031916908160001a90535060049490941c93613a3881614c7a565b90506139ca565b5083156137e05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610981565b6000808251604103613ac45760208301516040840151606085015160001a613ab887828585613c89565b94509450505050613acc565b506000905060025b9250929050565b6000816004811115613ae757613ae7614ebd565b03613aef5750565b6001816004811115613b0357613b03614ebd565b03613b505760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610981565b6002816004811115613b6457613b64614ebd565b03613bb15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610981565b6003816004811115613bc557613bc5614ebd565b03613c1d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610981565b6004816004811115613c3157613c31614ebd565b03610cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610981565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613cc05750600090506003613d6d565b8460ff16601b14158015613cd857508460ff16601c14155b15613ce95750600090506004613d6d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613d3d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d6657600060019250925050613d6d565b9150600090505b94509492505050565b508054613d8290614b04565b6000825580601f10613d92575050565b601f016020900490600052602060002090810190610cf491905b80821115613dc05760008155600101613dac565b5090565b600060208284031215613dd657600080fd5b81356001600160e01b0319811681146137e057600080fd5b6001600160401b0381168114610cf457600080fd5b8035613e0e81613dee565b919050565b60008060408385031215613e2657600080fd5b8235613e3181613dee565b946020939093013593505050565b600060208284031215613e5157600080fd5b5035919050565b60008083601f840112613e6a57600080fd5b5081356001600160401b03811115613e8157600080fd5b602083019150836020828501011115613acc57600080fd5b600080600060408486031215613eae57600080fd5b8335925060208401356001600160401b03811115613ecb57600080fd5b613ed786828701613e58565b9497909650939450505050565b6001600160a01b0381168114610cf457600080fd5b8035613e0e81613ee4565b60008060408385031215613f1757600080fd5b823591506020830135613f2981613ee4565b809150509250929050565b600060208284031215613f4657600080fd5b81356137e081613ee4565b60008083601f840112613f6357600080fd5b5081356001600160401b03811115613f7a57600080fd5b6020830191508360208260051b8501011115613acc57600080fd5b8015158114610cf457600080fd5b60008060008060008060008060a0898b031215613fbf57600080fd5b8835613fca81613ee4565b975060208901356001600160401b0380821115613fe657600080fd5b613ff28c838d01613f51565b909950975060408b013591508082111561400b57600080fd5b6140178c838d01613f51565b909750955060608b013591508082111561403057600080fd5b5061403d8b828c01613f51565b909450925050608089013561405181613f95565b809150509295985092959890939650565b600080600080600080600080600060c08a8c03121561408057600080fd5b893561408b81613ee4565b985060208a01356001600160401b03808211156140a757600080fd5b6140b38d838e01613f51565b909a50985060408c01359150808211156140cc57600080fd5b6140d88d838e01613f51565b909850965060608c01359150808211156140f157600080fd5b506140fe8c828d01613f51565b90955093505060808a013561411281613dee565b915060a08a013561412281613f95565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561417157614171614133565b604052919050565b60006001600160401b0382111561419257614192614133565b5060051b60200190565b600060208083850312156141af57600080fd5b82356001600160401b038111156141c557600080fd5b8301601f810185136141d657600080fd5b80356141e96141e482614179565b614149565b81815260059190911b8201830190838101908783111561420857600080fd5b928401925b8284101561422f57833561422081613ee4565b8252928401929084019061420d565b979650505050505050565b6000806000806060858703121561425057600080fd5b843561425b81613ee4565b93506020850135925060408501356001600160401b0381111561427d57600080fd5b61428987828801613e58565b95989497509550505050565b600080602083850312156142a857600080fd5b82356001600160401b038111156142be57600080fd5b6142ca85828601613e58565b90969095509350505050565b6000806000604084860312156142eb57600080fd5b83356001600160401b0381111561430157600080fd5b61430d86828701613e58565b909450925050602084013561432181613f95565b809150509250925092565b60005b8381101561434757818101518382015260200161432f565b50506000910152565b6000815180845261436881602086016020860161432c565b601f01601f19169290920160200192915050565b6020815260006137e06020830184614350565b60008060008060008060c087890312156143a857600080fd5b86356143b381613ee4565b955060208701356143c381613ee4565b945060408701356143d381613ee4565b935060608701356143e381613ee4565b925060808701356143f381613ee4565b915060a087013561440381613ee4565b809150509295509295509295565b60008060008060008060008060a0898b03121561442d57600080fd5b883561443881613ee4565b97506020890135965060408901356001600160401b038082111561445b57600080fd5b6144678c838d01613e58565b909850965060608b013591508082111561448057600080fd5b61448c8c838d01613f51565b909650945060808b01359150808211156144a557600080fd5b506144b28b828c01613f51565b999c989b5096995094979396929594505050565b600080602083850312156144d957600080fd5b82356001600160401b038111156144ef57600080fd5b6142ca85828601613f51565b600080600080600080600080600080600060e08c8e03121561451c57600080fd5b6145258c613ef9565b9a506001600160401b038060208e0135111561454057600080fd5b6145508e60208f01358f01613f51565b909b50995060408d013581101561456657600080fd5b6145768e60408f01358f01613f51565b909950975060608d013581101561458c57600080fd5b61459c8e60608f01358f01613f51565b90975095506145ad60808e01613e03565b945060a08d013593508060c08e013511156145c757600080fd5b506145d88d60c08e01358e01613e58565b81935080925050509295989b509295989b9093969950565b6000806000806000806000806000806000806101008d8f03121561461357600080fd5b61461c8d613ef9565b9b506001600160401b0360208e0135111561463657600080fd5b6146468e60208f01358f01613f51565b909b5099506001600160401b0360408e0135111561466357600080fd5b6146738e60408f01358f01613f51565b90995097506001600160401b0360608e0135111561469057600080fd5b6146a08e60608f01358f01613f51565b90975095506146b160808e01613e03565b94506146bf60a08e01613ef9565b935060c08d013592506001600160401b0360e08e013511156146e057600080fd5b6146f08e60e08f01358f01613e58565b81935080925050509295989b509295989b509295989b565b6000806040838503121561471b57600080fd5b823561472681613ee4565b91506020830135613f2981613ee4565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b60006020828403121561477d57600080fd5b81516137e081613dee565b60208082526023908201527f4d696e74696e674d616e616765723a20544f4b454e5f4e4f545f455850495241604082015262424c4560e81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e8814105554d15160821b604082015260600190565b60006148036141e484614179565b80848252602080830192508560051b85013681111561482157600080fd5b855b818110156148b35780356001600160401b03808211156148435760008081fd5b90880190601f36818401126148585760008081fd5b82358281111561486a5761486a614133565b61487b818301601f19168801614149565b9250808352368782860101111561489457600091508182fd5b8087850188850137600090830187015250865250938201938201614823565b50919695505050505050565b60208082526024908201527f4d696e74696e674d616e616765723a2043414c4c45525f49535f4e4f545f4d49604082015263272a22a960e11b606082015260800190565b60006020828403121561491557600080fd5b81516137e081613f95565b6020808252602f908201527f4d696e74696e674d616e616765723a2053454e4445525f49535f4e4f545f415060408201526e282927ab22a22fa7a92fa7aba722a960891b606082015260800190565b60208082526025908201527f4d696e74696e674d616e616765723a204c4142454c535f4c454e4754485f42456040820152642627abaf9960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610954576109546149b4565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f4d696e74696e674d616e616765723a20535542444f4d41494e535f4e4f545f41604082015265131313d5d15160d21b606082015260800190565b600060018201614a4b57614a4b6149b4565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526022908201527f4d696e74696e674d616e616765723a20544c445f4e4f545f5245474953544552604082015261115160f21b606082015260800190565b600060208284031215614ad557600080fd5b5051919050565b6b756e732d646576746573742d60a01b81528183600c83013760009101600c01908152919050565b600181811c90821680614b1857607f821691505b602082108103614b3857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215614b5057600080fd5b81516137e081613ee4565b600081518084526020808501808196508360051b8101915082860160005b85811015614ba3578284038952614b91848351614350565b98850198935090840190600101614b79565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090614bd490830187614b5b565b8281036040840152614be68187614b5b565b90508281036060840152614bfa8186614b5b565b91505082151560808301529695505050505050565b600060018060a01b03808616835260606020840152614c316060840186614350565b9150808416604084015250949350505050565b606081526000614c576060830186614b5b565b8281036020840152614c698186614b5b565b915050826040830152949350505050565b600081614c8957614c896149b4565b506000190190565b60008251614ca381846020870161432c565b9190910192915050565b601f821115610cde57600081815260208120601f850160051c81016020861015614cd45750805b601f850160051c820191505b818110156116a357828155600101614ce0565b81516001600160401b03811115614d0c57614d0c614133565b614d2081614d1a8454614b04565b84614cad565b602080601f831160018114614d555760008415614d3d5750858301515b600019600386901b1c1916600185901b1785556116a3565b600085815260208120601f198616915b82811015614d8457888601518255948401946001909101908401614d65565b5085821015614da25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614dcb6040830184614350565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80820180821115610954576109546149b4565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614e6981601785016020880161432c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614e9a81602884016020880161432c565b01602801949350505050565b8082028115828204841417610954576109546149b4565b634e487b7160e01b600052602160045260246000fdfe5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd6229f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a","storage":{}},"0x24f45688d421f46cca60734bdc648ad192db0f2e":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x33":"0x1","0x97":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x12d":"0x0","0x15f":"0x5cc819c9915eadfcebd76952b8c1bc36cadd7376","0x13cf90498be59d359caa5b6092b365feab4610605d7107d1f05f8e94ac955652":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x54563a9e1cd2dcbd0bca90d3cfa4a647e02c404a","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec"}},"0x27935e7e85db3c4e7885eb828b9e889ba69a4e7f":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106102295760003560e01c8063886a69ba11610123578063cf1d21c0116100ab578063e2c49de11161006f578063e2c49de11461091d578063e3dec8fb14610932578063e43009a6146109c8578063e66f9603146109fb578063ea60c7c414610a2557610240565b8063cf1d21c014610844578063d233a3c714610859578063d547741f1461089c578063d81c8e52146108d5578063dc993a23146108ea57610240565b8063a217fddf116100f2578063a217fddf1461078a578063b4b4f63e1461079f578063bc08452b146107b4578063c4d66de8146107e7578063ca15c8731461081a57610240565b8063886a69ba146106c95780639010d07c146106de5780639173b1391461070e57806391d148541461075157610240565b80633138b6f1116101b1578063568b80b511610175578063568b80b5146105fb578063607f2d4214610610578063630fcbfb1461064e5780636cb136b0146106635780636e86b7701461069657610240565b80633138b6f1146104f55780633408e4701461050a57806336568abe1461051f5780633805550f146105585780634faa8a26146105d557610240565b80630f7e5970116101f85780630f7e59701461042357806320379ee514610438578063248a9ca31461045f5780632d0335ab146104895780632f2ff15d146104bc57610240565b806304967702146102455780630c3894bb146102765780630c53c51c146102b15780630c598220146103ea57610240565b366102405761023e610239610a58565b610a68565b005b600080fd5b34801561025157600080fd5b5061025a610b69565b604080516001600160a01b039092168252519081900360200190f35b34801561028257600080fd5b5061023e6004803603604081101561029957600080fd5b506001600160a01b0381358116916020013516610b78565b610375600480360360a08110156102c757600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156102f257600080fd5b82018360208201111561030457600080fd5b8035906020019184600183028401116401000000008311171561032657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020810135906040013560ff16610cc9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103af578181015183820152602001610397565b50505050905090810190601f1680156103dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103f657600080fd5b5061023e6004803603604081101561040d57600080fd5b50803590602001356001600160a01b0316610fcc565b34801561042f57600080fd5b506103756110b9565b34801561044457600080fd5b5061044d6110d6565b60408051918252519081900360200190f35b34801561046b57600080fd5b5061044d6004803603602081101561048257600080fd5b50356110dc565b34801561049557600080fd5b5061044d600480360360208110156104ac57600080fd5b50356001600160a01b03166110f4565b3480156104c857600080fd5b5061023e600480360360408110156104df57600080fd5b50803590602001356001600160a01b031661110f565b34801561050157600080fd5b5061025a611176565b34801561051657600080fd5b5061044d611185565b34801561052b57600080fd5b5061023e6004803603604081101561054257600080fd5b50803590602001356001600160a01b0316611189565b34801561056457600080fd5b5061023e6004803603602081101561057b57600080fd5b81019060208101813564010000000081111561059657600080fd5b8201836020820111156105a857600080fd5b803590602001918460018302840111640100000000831117156105ca57600080fd5b5090925090506111ea565b61023e600480360360208110156105eb57600080fd5b50356001600160a01b03166116ec565b34801561060757600080fd5b5061044d6116f8565b34801561061c57600080fd5b5061063a6004803603602081101561063357600080fd5b503561171b565b604080519115158252519081900360200190f35b34801561065a57600080fd5b5061023e611730565b34801561066f57600080fd5b5061023e6004803603602081101561068657600080fd5b50356001600160a01b03166117d6565b3480156106a257600080fd5b5061025a600480360360208110156106b957600080fd5b50356001600160a01b031661186e565b3480156106d557600080fd5b5061044d611889565b3480156106ea57600080fd5b5061025a6004803603604081101561070157600080fd5b50803590602001356118aa565b34801561071a57600080fd5b5061023e6004803603606081101561073157600080fd5b506001600160a01b038135811691602081013590911690604001356118d1565b34801561075d57600080fd5b5061063a6004803603604081101561077457600080fd5b50803590602001356001600160a01b0316611a06565b34801561079657600080fd5b5061044d611a24565b3480156107ab57600080fd5b5061023e611a29565b3480156107c057600080fd5b5061023e600480360360208110156107d757600080fd5b50356001600160a01b0316611acf565b3480156107f357600080fd5b5061023e6004803603602081101561080a57600080fd5b50356001600160a01b0316611b67565b34801561082657600080fd5b5061044d6004803603602081101561083d57600080fd5b5035611c57565b34801561085057600080fd5b5061025a611c6e565b34801561086557600080fd5b5061023e6004803603606081101561087c57600080fd5b506001600160a01b03813581169160208101359091169060400135611c86565b3480156108a857600080fd5b5061023e600480360360408110156108bf57600080fd5b50803590602001356001600160a01b0316611de8565b3480156108e157600080fd5b5061044d611e41565b3480156108f657600080fd5b5061023e6004803603602081101561090d57600080fd5b50356001600160a01b0316611e60565b34801561092957600080fd5b5061025a611f3d565b34801561093e57600080fd5b5061023e6004803603606081101561095557600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561098957600080fd5b82018360208201111561099b57600080fd5b803590602001918460018302840111640100000000831117156109bd57600080fd5b509092509050611f4c565b3480156109d457600080fd5b5061044d600480360360208110156109eb57600080fd5b50356001600160a01b0316611fe9565b348015610a0757600080fd5b5061025a60048036036020811015610a1e57600080fd5b5035611ffb565b348015610a3157600080fd5b5061025a60048036036020811015610a4857600080fd5b50356001600160a01b0316612016565b6000610a62612031565b90505b90565b604080513460208083019190915282518083039091018152908201909152610aa58273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8361208e565b7fa1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d7546000908152600260205260408082205490516001600160a01b039091169034908381818185875af1925050503d8060008114610b1f576040519150601f19603f3d011682016040523d82523d6000602084013e610b24565b606091505b5050905080610b645760405162461bcd60e51b815260040180806020018281038252602781526020018061419d6027913960400191505060405180910390fd5b505050565b6009546001600160a01b031681565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b019020610ba981610ba4610a58565b611a06565b600a90610c495760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b820191906000526020600020905b815481529060010190602001808311610c1d57829003601f168201915b50509250505060405180910390fd5b506001600160a01b03808416600081815260036020908152604080832080546001600160a01b0319908116909155948716808452600483528184208054909616909555838352600590915280822082905551909291907f9e651a8866fbea043e911d816ec254b0e3c992c06fff32d605e72362d6023bd9908490a4505050565b6060610cd3613e2a565b50604080516060810182526001600160a01b0388166000818152600c602090815290849020548352820152908101869052610d118782878787612508565b610d4c5760405162461bcd60e51b81526004018080602001828103825260218152602001806141c46021913960400191505060405180910390fd5b6001600160a01b0387166000908152600c6020526040902054610d7690600163ffffffff6125e516565b6001600160a01b0388166000818152600c602090815260408083209490945583519283523383820181905260609484018581528b51958501959095528a517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b958d9592948d94919260808501928601918190849084905b83811015610e05578181015183820152602001610ded565b50505050905090810190601f168015610e325780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160006060306001600160a01b0316888a6040516020018083805190602001908083835b60208310610e835780518252601f199092019160209182019101610e64565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610f025780518252601f199092019160209182019101610ee3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610f64576040519150601f19603f3d011682016040523d82523d6000602084013e610f69565b606091505b509150915081610fc0576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b98975050505050505050565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b019020610ff881610ba4610a58565b600a9061105e5760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b5060008381526002602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051909185917f8643692ae1c12ec91fa18e50b82ed93fa314f580999a236824db6de9ae0d839b9190a3505050565b604051806040016040528060018152602001603160f81b81525081565b600b5490565b6000818152600160205260409020600201545b919050565b6001600160a01b03166000908152600c602052604090205490565b60008281526001602052604090206002015461112d90610ba4610a58565b6111685760405162461bcd60e51b815260040180806020018281038252602f815260200180613f78602f913960400191505060405180910390fd5b611172828261263f565b5050565b6008546001600160a01b031690565b4690565b611191610a58565b6001600160a01b0316816001600160a01b0316146111e05760405162461bcd60e51b815260040180806020018281038252602f815260200180614286602f913960400191505060405180910390fd5b61117282826126ae565b606061123361122e84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271d92505050565b612798565b905060006112548260028151811061124757fe5b602002602001015161291a565b6112796112748460088151811061126757fe5b6020026020010151612a62565b612b2c565b6112898460098151811061124757fe5b6040516020018084815260200183805190602001908083835b602083106112c15780518252601f1990920191602091820191016112a2565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152938201815283519382019390932060008181526006909252929020549194505060ff1615915061134d90505760405162461bcd60e51b81526004018080602001828103825260288152602001806142096028913960400191505060405180910390fd5b6000818152600660208190526040909120805460ff19166001179055825160609161138a9161122e9161138591879190811061126757fe5b61271d565b9050611394613e54565b6113b1826003815181106113a457fe5b6020026020010151612798565b6113c18560098151811061124757fe5b815181106113cb57fe5b6020026020010151905060006113fc6113e383612798565b6000815181106113ef57fe5b6020026020010151612c9f565b6001600160a01b0380821660009081526004602052604090205491925016806114565760405162461bcd60e51b81526004018080602001828103825260228152602001806140af6022913960400191505060405180910390fd5b6001600160a01b03808216600090815260056020908152604080832054835260029091529020548751911690611493908890600890811061124757fe5b63ffffffff1916156114d65760405162461bcd60e51b815260040180806020018281038252602581526020018061408a6025913960400191505060405180910390fd5b61151e6114e98860068151811061126757fe5b6114f98960088151811061126757fe5b6115098a60078151811061126757fe5b6115198b60058151811061124757fe5b612d2f565b61156f576040805162461bcd60e51b815260206004820152601f60248201527f526f6f74436861696e4d616e616765723a20494e56414c49445f50524f4f4600604482015290519081900360640190fd5b6115dd6115828860028151811061124757fe5b6115928960038151811061124757fe5b6115a28a60048151811061124757fe5b60001b6115b58b60058151811061124757fe5b60001b6115c88c60008151811061124757fe5b6115d88d60018151811061126757fe5b612f76565b50806001600160a01b0316638274664f6115f5610a58565b846115ff886130bf565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561167b578181015183820152602001611663565b50505050905090810190601f1680156116a85780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156116c957600080fd5b505af11580156116dd573d6000803e3d6000fd5b50505050505050505050505050565b6116f581610a68565b50565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b01902081565b60066020526000908152604090205460ff1681565b600061173e81610ba4610a58565b600a906117a45760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b506116f56040518060400160405280601081526020016f2937b7ba21b430b4b726b0b730b3b2b960811b81525061312d565b60006117e481610ba4610a58565b600a9061184a5760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b5050600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004602052600090815260409020546001600160a01b031681565b604080516826a0a82faa27a5a2a760b91b8152905190819003600901902081565b60008281526001602052604081206118c8908363ffffffff6131e916565b90505b92915050565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b0190206118fd81610ba4610a58565b600a906119635760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b506001600160a01b03848116600090815260036020526040902054161580156119a457506001600160a01b0383811660009081526004602052604090205416155b6119f5576040805162461bcd60e51b815260206004820181905260248201527f526f6f74436861696e4d616e616765723a20414c52454144595f4d4150504544604482015290519081900360640190fd5b611a008484846131f5565b50505050565b60008281526001602052604081206118c8908363ffffffff61348416565b600081565b6000611a3781610ba4610a58565b600a90611a9d5760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b506116f56040518060400160405280601081526020016f2937b7ba21b430b4b726b0b730b3b2b960811b815250613499565b6000611add81610ba4610a58565b600a90611b435760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b5050600880546001600160a01b0319166001600160a01b0392909216919091179055565b60005460ff1615611bb0576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b611be16040518060400160405280601081526020016f2937b7ba21b430b4b726b0b730b3b2b960811b815250613537565b611c126040518060400160405280601081526020016f2937b7ba21b430b4b726b0b730b3b2b960811b815250613499565b611c1d600082611168565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b019020611c479082611168565b506000805460ff19166001179055565b60008181526001602052604081206118cb90613589565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b604080516a4d41505045525f524f4c4560a81b8152905190819003600b019020611cb281610ba4610a58565b600a90611d185760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b506001600160a01b0380851660009081526003602081815260408084205488861685526004835281852054861680865293909252909220549183169290911615611d8e576001600160a01b038116600090815260036020908152604080832080546001600160a01b031916905560059091528120555b6001600160a01b038281166000908152600460205260409020541615611dd5576001600160a01b038216600090815260046020526040902080546001600160a01b03191690555b611de08686866131f5565b505050505050565b600082815260016020526040902060020154611e0690610ba4610a58565b6111e05760405162461bcd60e51b81526004018080602001828103825260308152602001806140f96030913960400191505060405180910390fd5b604080516611115413d4d25560ca1b8152905190819003600701902081565b6000611e6e81610ba4610a58565b600a90611ed45760405162461bcd60e51b8152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610c3a5780601f10610c0f57610100808354040283529160200191610c3a565b506001600160a01b038216611f1a5760405162461bcd60e51b815260040180806020018281038252602d815260200180613fa7602d913960400191505060405180910390fd5b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031690565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611fa85760405162461bcd60e51b81526004018080602001828103825260248152602001806141e56024913960400191505060405180910390fd5b611a00848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208e92505050565b60056020526000908152604090205481565b6002602052600090815260409020546001600160a01b031681565b6003602052600090815260409020546001600160a01b031681565b6000333014156120895760606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150610a659050565b503390565b6001600160a01b03808316600090815260056020908152604080832054600390925290912054909116158015906120c457508015155b6120ff5760405162461bcd60e51b81526004018080602001828103825260228152602001806140af6022913960400191505060405180910390fd5b6000818152600260205260409020546001600160a01b0316806121535760405162461bcd60e51b81526004018080602001828103825260248152602001806140176024913960400191505060405180910390fd5b6001600160a01b0385166121ae576040805162461bcd60e51b815260206004820152601e60248201527f526f6f74436861696e4d616e616765723a20494e56414c49445f555345520000604482015290519081900360640190fd5b806001600160a01b031663e375b64e6121c5610a58565b8787876040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561225c578181015183820152602001612244565b50505050905090810190601f1680156122895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156122ab57600080fd5b505af11580156122bf573d6000803e3d6000fd5b50505050606085858560405160200180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612338578181015183820152602001612320565b50505050905090810190601f1680156123655780820380516001836020036101000a031916815260200191505b5060408051808303601f19018152828252600780546009546611115413d4d25560ca1b865284519586900390920185206020808701828152878701968752855160608901528551959d506001600160a01b039384169c506316f198319b5092909316985096508a955093608001919085019080838360005b838110156123f55781810151838201526020016123dd565b50505050905090810190601f1680156124225780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561249b578181015183820152602001612483565b50505050905090810190601f1680156124c85780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156124e857600080fd5b505af11580156124fc573d6000803e3d6000fd5b50505050505050505050565b60006001600160a01b03861661254f5760405162461bcd60e51b81526004018080602001828103825260258152602001806141296025913960400191505060405180910390fd5b600161256261255d87613594565b613620565b83868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156125bc573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b6000828201838110156118c8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082815260016020526040902061265d908263ffffffff61366c16565b156111725761266a610a58565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526001602052604090206126cc908263ffffffff61368116565b15611172576126d9610a58565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612725613e54565b600082511161277b576040805162461bcd60e51b815260206004820152601f60248201527f524c505265616465723a20494e56414c49445f42595445535f4c454e47544800604482015290519081900360640190fd5b506040805180820190915281518152602082810190820152919050565b60606127a382613696565b6127f4576040805162461bcd60e51b815260206004820152601860248201527f524c505265616465723a204954454d5f4e4f545f4c4953540000000000000000604482015290519081900360640190fd5b60006127ff836136c2565b905060608167ffffffffffffffff8111801561281a57600080fd5b5060405190808252806020026020018201604052801561285457816020015b612841613e54565b8152602001906001900390816128395790505b5090506000612866856020015161374e565b855190915081146128a85760405162461bcd60e51b81526004018080602001828103825260278152602001806142316027913960400191505060405180910390fd5b60006128b786602001516137e2565b60208701510190506000805b8581101561290e576128d48361374e565b91506040518060400160405280838152602001848152508582815181106128f757fe5b6020908102919091010152918101916001016128c3565b50929695505050505050565b600061292582613696565b15612977576040805162461bcd60e51b815260206004820181905260248201527f524c505265616465723a204445434f44494e475f4c4953545f41535f55494e54604482015290519081900360640190fd5b8151602110156129ce576040805162461bcd60e51b815260206004820152601e60248201527f524c505265616465723a20494e56414c49445f55494e545f4c454e4754480000604482015290519081900360640190fd5b60006129dd836020015161374e565b83519091508114612a1f5760405162461bcd60e51b81526004018080602001828103825260278152602001806142b56027913960400191505060405180910390fd5b6000612a2e84602001516137e2565b84516020808701518301805193945091849003929190831015612a5857826020036101000a820491505b5095945050505050565b60606000612a73836020015161374e565b83519091508114612ab55760405162461bcd60e51b81526004018080602001828103825260288152602001806140d16028913960400191505060405180910390fd5b6000612ac484602001516137e2565b845190915081900360608167ffffffffffffffff81118015612ae557600080fd5b506040519080825280601f01601f191660200182016040528015612b10576020820181803683370190505b5090506000816020019050612a58848860200151018285613845565b604080516020810190915260008152815160609190156118cb57600080612b54600086613890565b60f81c90506001811480612b6b57508060ff166003145b15612bfa57600185516002020367ffffffffffffffff81118015612b8e57600080fd5b506040519080825280601f01601f191660200182016040528015612bb9576020820181803683370190505b5092506000612bc9600187613890565b90508084600081518110612bd957fe5b60200101906001600160f81b031916908160001a9053506001925050612c4b565b600285516002020367ffffffffffffffff81118015612c1857600080fd5b506040519080825280601f01601f191660200182016040528015612c43576020820181803683370190505b509250600091505b60ff82165b8351811015612c9657612c6b8360ff16820360020187613890565b848281518110612c7757fe5b60200101906001600160f81b031916908160001a905350600101612c50565b50505092915050565b6000612caa82613696565b15612ce65760405162461bcd60e51b815260040180806020018281038252602381526020018061417a6023913960400191505060405180910390fd5b8151601514612d265760405162461bcd60e51b81526004018080602001828103825260218152602001806142dc6021913960400191505060405180910390fd5b6118cb8261291a565b6000612d39613e54565b612d428461271d565b90506060612d4f82612798565b905060608085600082612d618b612b2c565b9050805160001415612d7d576000975050505050505050612f6e565b60005b8651811015612f65578151831115612da357600098505050505050505050612f6e565b612dbf878281518110612db257fe5b60200260200101516130bf565b955085805190602001208414612de057600098505050505050505050612f6e565b612def8782815181106113a457fe5b9450845160111415612eac578151831415612e4b578c80519060200120612e1c8660108151811061126757fe5b805190602001201415612e3a57600198505050505050505050612f6e565b600098505050505050505050612f6e565b6000828481518110612e5957fe5b016020015160f81c90506010811115612e7e5760009950505050505050505050612f6e565b612e9d868260ff1681518110612e9057fe5b60200260200101516138ed565b94505060019290920191612f5d565b845160021415612e3a576000612ed2612ecb8760008151811061126757fe5b848661398c565b905082518185011415612f28578d80519060200120612ef78760018151811061126757fe5b805190602001201415612f165760019950505050505050505050612f6e565b60009950505050505050505050612f6e565b80612f3f5760009950505050505050505050612f6e565b8084019350612f5486600181518110612e9057fe5b9450612f5d9050565b600101612d80565b50505050505050505b949350505050565b600854604080516320a9cea560e11b81526004810185905290516000928392839283926001600160a01b0316916341539d4a9160248083019260a0929190829003018186803b158015612fc857600080fd5b505afa158015612fdc573d6000803e3d6000fd5b505050506040513d60a0811015612ff257600080fd5b5080516020820151606090920151909450909250905061306161301b8b8463ffffffff613a6b16565b6040805160208082018f90528183018e9052606082018d905260808083018d90528351808403909101815260a0909201909252805191012090858863ffffffff613aad16565b6130b2576040805162461bcd60e51b815260206004820181905260248201527f526f6f74436861696e4d616e616765723a20494e56414c49445f484541444552604482015290519081900360640190fd5b9998505050505050505050565b606080826000015167ffffffffffffffff811180156130dd57600080fd5b506040519080825280601f01601f191660200182016040528015613108576020820181803683370190505b50905060008160200190506131268460200151828660000151613845565b5092915050565b6040518060800160405280604f815260200161403b604f913980516020918201208251838301206040805180820190915260018152603160f81b930192909252907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc630613198611185565b604080516020808201979097528082019590955260608501939093526001600160a01b03909116608084015260a0808401919091528151808403909101815260c090920190528051910120600b5550565b60006118c88383613c03565b6000818152600260205260409020546001600160a01b03166132485760405162461bcd60e51b815260040180806020018281038252602a815260200180613f07602a913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832080549588166001600160a01b031996871681179091558084526004835281842080549096168517909555838352600590915280822085905551849392917f9e651a8866fbea043e911d816ec254b0e3c992c06fff32d605e72362d6023bd991a4604080516001600160a01b0380861660208084019190915281861683850152606083810186905284518085038201815260808086018088526007546009546826a0a82faa27a5a2a760b91b9092528851978890036089018820888701818152898b019a8b528551968a019690965284519499918816986316f1983198939093169690958a9590949293909201919085019080838360005b8381101561337357818101518382015260200161335b565b50505050905090810190601f1680156133a05780820380516001836020036101000a031916815260200191505b5093505050506040516020818303038152906040526040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613419578181015183820152602001613401565b50505050905090810190601f1680156134465780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b5050505050505050565b60006118c8836001600160a01b038416613c67565b806040516020018082805190602001908083835b602083106134cc5780518252601f1990920191602091820191016134ad565b51815160209384036101000a60001901801990921691161790527f3a20494e53554646494349454e545f5045524d495353494f4e530000000000009190930190815260408051808303600519018152601a909201905280516111729550600a94509201919050613e6e565b60005460ff1615613580576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b611c478161312d565b60006118cb82613c7f565b6000604051806080016040528060438152602001613fd460439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b600061362a6110d6565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60006118c8836001600160a01b038416613c83565b60006118c8836001600160a01b038416613ccd565b6020810151805160009190821a9060c08210156136b8576000925050506110ef565b5060019392505050565b6000806000905060006136d884602001516137e2565b602085015185519181019250015b80821015613745576136f78261374e565b820191508082111561373a5760405162461bcd60e51b815260040180806020018281038252602c81526020018061414e602c913960400191505060405180910390fd5b6001909201916136e6565b50909392505050565b80516000908190811a60808110156137695760019150613126565b60b881101561377e57607e1981019150613126565b60c08110156137ab5760b78103600185019450806020036101000a85510460018201810193505050613126565b60f88110156137c05760be1981019150613126565b60019390930151602084900360f7016101000a900490920160f5190192915050565b8051600090811a60808110156137fc5760009150506110ef565b60b8811080613817575060c08110801590613817575060f881105b156138265760019150506110ef565b60c081101561383a5760b5190190506110ef565b60f5190190506110ef565b8061384f57610b64565b5b6020811061386f578251825260209283019290910190601f1901613850565b915181516020939093036101000a6000190180199091169216919091179052565b600060028306156138c15760108260028504815181106138ac57fe5b016020015160f81c816138bb57fe5b066138e3565b60108260028504815181106138d257fe5b016020015160f81c816138e157fe5b045b60f81b9392505050565b6000806138fd836020015161374e565b8351909150811461393f5760405162461bcd60e51b815260040180806020018281038252602e815260200180614258602e913960400191505060405180910390fd5b825160211461397f5760405162461bcd60e51b8152600401808060200182810382526025815260200180613f536025913960400191505060405180910390fd5b5050602001516001015190565b600080606061399a86612b2c565b90506060815167ffffffffffffffff811180156139b657600080fd5b506040519080825280601f01601f1916602001820160405280156139e1576020820181803683370190505b509050845b82518601811015613a3b5760008782815181106139ff57fe5b602001015160f81c60f81b9050808388840381518110613a1b57fe5b60200101906001600160f81b031916908160001a905350506001016139e6565b50808051906020012082805190602001201415613a5b5781519250613a60565b600092505b509095945050505050565b60006118c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d93565b60006020825181613aba57fe5b0615613b04576040805162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015290519081900360640190fd5b60006020835181613b1157fe5b0490508060020a8510613b63576040805162461bcd60e51b81526020600482015260156024820152744c65616620696e64657820697320746f6f2062696760581b604482015290519081900360640190fd5b60008660205b85518111613bf55785810151925060028806613bb55781836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209150613be7565b828260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012091505b600288049750602001613b69565b509094149695505050505050565b81546000908210613c455760405162461bcd60e51b8152600401808060200182810382526022815260200180613f316022913960400191505060405180910390fd5b826000018281548110613c5457fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6000613c8f8383613c67565b613cc5575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556118cb565b5060006118cb565b60008181526001830160205260408120548015613d895783546000198083019190810190600090879083908110613d0057fe5b9060005260206000200154905080876000018481548110613d1d57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080613d4d57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506118cb565b60009150506118cb565b60008184841115613e225760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613de7578181015183820152602001613dcf565b50505050905090810190601f168015613e145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180606001604052806000815260200160006001600160a01b03168152602001606081525090565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613eaf57805160ff1916838001178555613edc565b82800160010185558215613edc579182015b82811115613edc578251825591602001919060010190613ec1565b50613ee8929150613eec565b5090565b610a6591905b80821115613ee85760008155600101613ef256fe526f6f74436861696e4d616e616765723a20544f4b454e5f545950455f4e4f545f535550504f52544544456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473524c505265616465723a20494e56414c49445f55494e545f5354524943545f4c454e475448416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74526f6f74436861696e4d616e616765723a20494e56414c49445f4348494c445f434841494e5f414444524553534d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529526f6f74436861696e4d616e616765723a20494e56414c49445f544f4b454e5f54595045454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429526f6f74436861696e4d616e616765723a20494e56414c49445f4252414e43485f4d41534b526f6f74436861696e4d616e616765723a20544f4b454e5f4e4f545f4d4150504544524c505265616465723a2042595445535f4445434f4445445f4c454e4754485f4d49534d41544348416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5349474e4552524c505265616465723a204e554d5f4954454d535f4445434f4445445f4c454e4754485f4d49534d41544348524c505265616465723a204445434f44494e475f4c4953545f41535f41444452455353526f6f74436861696e4d616e616765723a2045544845525f5452414e534645525f4641494c45445369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f6f74436861696e4d616e616765723a20494e56414c49445f524f4f545f544f4b454e526f6f74436861696e4d616e616765723a20455849545f414c52454144595f50524f434553534544524c505265616465723a204c4953545f4445434f4445445f4c454e4754485f4d49534d41544348524c505265616465723a2055494e545f5354524943545f4445434f4445445f4c454e4754485f4d49534d41544348416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66524c505265616465723a2055494e545f4445434f4445445f4c454e4754485f4d49534d41544348524c505265616465723a20494e56414c49445f414444524553535f4c454e475448a164736f6c6343000606000a","storage":{"0x0":"0x1","0x7":"0xe0afc4e9e03e4aa67257df7a2eca77454309789d","0x8":"0xbe5deac45dd1ca4ee18dc2d585d84d3d3cb82b0d","0x9":"0x0","0xa":"0x55","0xb":"0x2603903cfd8895fdde3da4d607d44203e86098073e351022fd12745d3436e93a","0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x162b27a30e878e20728deaa5c9814fd57ccf962b998b8733ce65749bc61c552f":"0x58a175bebc8ec21a94ea63aa5a28743945940ee6","0x1a93463c7bbb7215968307c7cd357c2009c10df2a511dd62c1189098e4f3249b":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x415fec6a4fd7706b96d3a0a30121284bc5e2b28b978c20486c9f5e20d44fc781":"0x1","0x4dc1f0160d96279adc262db20edcc15527e32cb28eda582becc5ac0bc453be34":"0x107733fed96c4cd390c944a31f5425a7fb98ae5e","0x5fc73aa2ab567caef8745f0709fae506c01972ffb297bd9225bc262d6e87746f":"0x1","0x6ce1cd05966f090b8daa7b2ee7f80930bbb39d19b693045725fbae5fa44fda90":"0x107733fed96c4cd390c944a31f5425a7fb98ae5e","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8":"0x526f6f74436861696e4d616e616765723a20494e53554646494349454e545f50","0xc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9":"0x45524d495353494f4e5300000000000000000000000000000000000000000000","0xd61ba0007bb57e62613f82f528c06ba46d36349cf5be567b12f878ef04849a7d":"0x1","0xf960df71fab73e593428c10f56f55e7ea46985963177def0458b97f1afec9576":"0xcf4e755f204163e9213ba8b1305036e386579ccc70731c25c62a101197811f48"}},"0x287dee389caaa49edc112888f2bcfd927b472e25":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80634f89059e1461002d575b5f80fd5b61004061003b366004610125565b610054565b604051901515815260200160405180910390f35b5f806100985f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff1690505f811180156100f857506100f36100b5826001610191565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101029050565b60ff16155b9150505b92915050565b5f828281518110610115576101156101b0565b016020015160f81c905092915050565b5f8060208385031215610136575f80fd5b823567ffffffffffffffff8082111561014d575f80fd5b818501915085601f830112610160575f80fd5b81358181111561016e575f80fd5b86602082850101111561017f575f80fd5b60209290920196919550909350505050565b808201808211156100fc57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a","storage":{}},"0x3198fc981626687f4b5bdf0fbeabb0a5e0489c03":{"nonce":1,"balance":"0x8ac7230489e80000","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x33":"0x1","0x97":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x13cf90498be59d359caa5b6092b365feab4610605d7107d1f05f8e94ac955652":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xc2110388dd54228ae0a834119457ede938bf0b57","0x412386de53449251cbf7ce1f4c6a038bf9c0746e62d331b08ef0c3fa7d0ab672":"0x4fbf7b2f171336958be5d15ff762a5cff5363568","0x60793a5062d506d35cc8f1beda67ee5028c16bfcd9c923d5bfc439c04bd929b1":"0x6ac8f19d1e0f81147cdf2a1e53cb1f4e18417204","0x75df8b43665bf2e4996a686913c4c278ca7aed85444740ca40355b1c9a94b504":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec","0xf851d5f4fccb32d2a48561b7acc01b5d4d46b7e138d49f887026f203b08c5004":"0xc965345edac823d56812cd20a10316233916a605"}},"0x39a27956b78d00a4e00ea8833ff0947410a2933f":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x33":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0xc9":"0x107733fed96c4cd390c944a31f5425a7fb98ae5e","0xca":"0x4a3c194eb88966178bfdd81744dddafed611b830","0xcb":"0x4872cc1be60a9db9c880a0a437da7a6af134f08f","0xcc":"0xf8c26340c1eaea6c7ff1760b25005e1306953572","0xce":"0xce4bb7dc1eb9dce75743de6a4b48534fd427ef51","0xc6892776bb3da1e1199a03e0d3131aea089754b59c557b750c478ebc85ccaa":"0x6e66740000000000000000000000000000000000000000000000000000000006","0x6cb37a6d512a1e227e627eddc133023e6d00bfedff31a600abb75aa93e9a4a0":"0x6b7265737573000000000000000000000000000000000000000000000000000c","0x8e966fe8b9b43d48017ba1eb562ced91049de778396aaa438773698b3fa8fb6":"0x0","0x94a32b1c7b189ce7293f7ae444cdcab6800d858454022d15355d5ecc5b32b26":"0x0","0xa4b2d73a9f36ca5eed107f7c3d2ba877fb7537d447256726bcde9bac9e9aaee":"0x0","0xe0e3ab102c26f13da20123aa517b31e99cf65b7b720ba0dd7138012fd23eff2":"0x0","0x1203b5e51c7d5be6da42b83f22878d3583e53123857d27fc3cff3df46fb9126c":"0x0","0x13477730039a04f4290adf0e48e98b233579c040281545e4446ce662ba56a9be":"0x7800000000000000000000000000000000000000000000000000000000000002","0x1e06d49ce7b00846691778f302e94a3ac9c2633d745ebe73d68353c941e68dee":"0x626974636f696e0000000000000000000000000000000000000000000000000e","0x1e99199375610ffe00d28ee5827c616cf6469be3de2a2f738d955eb6b62127e8":"0x1","0x21e80eded1b2e1c5d976c85e89dde60bd4e99a8d66346af0e359ac854bceba44":"0x0","0x254d9ade81439f29723741d6ff407eab1fe03caffb042bd85e53955e41fb9792":"0x616c74696d697374000000000000000000000000000000000000000000000010","0x269db12b2cd2aeb7d5f52eda16edb1d211ccbea12da1ebfa60ed5f8f396c1d04":"0x0","0x2a3f03435eedee01de7e1c4386b04ca8469edd8df00408cd6d2b058bce1cecfa":"0x0","0x323a3cb169499006d6635c58232c8c58e23c20bf9e1d309d6b3bc6fb2c7a093d":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x229c56b7805ab5935a883207f6a6bd5847e65aee","0x37aac864d4715a975bd45cae6be99de9f7968cf995917cc7f8192940fb62acbf":"0x0","0x3f69f26894a7ae0f7a7aa6c2d77935589dabbff6435aee960da15064dea7cd59":"0x64616f0000000000000000000000000000000000000000000000000000000006","0x467a68fda3230ce33f64703ebdbd91caccf235403282ae9fe390675ef39e9c94":"0x0","0x50ae8c017c4c1fddbe9509bd2b916f5dd9da11ddb639f2a4230322f49a41ac87":"0x1","0x5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd622":"0x0","0x576dd8d1a7b74aba0a99a213f50d74aa642a2c80bd5a854b24aac7568afea0f7":"0x626974676574000000000000000000000000000000000000000000000000000c","0x5b54338c052ce22ec334b6c5a19c4b122701c5fd4d3a2a5f5890f57050e0aafa":"0x626c6f636b636861696e00000000000000000000000000000000000000000014","0x5d9de30f0e5e02628e726fd23e310ee9e64489866fa6959825148a25d40e4c83":"0x0","0x5e2d99ab4a1a153039a4b2e068d64802da8735071a2d018ee9d04297945bed00":"0x0","0x670006c4193123492fb25db465ed52e62aff2f076289f4f1a5f167237f5e579d":"0x6d616e676100000000000000000000000000000000000000000000000000000a","0x6deac161c541001c0d79afaf7b809418785fa5ca6533d86bcf312e7213ee08fc":"0x0","0x6eaa0db35203bc0d58aff54ca630dd125b27758aa6204f7a11c0617f7c2fa776":"0x706f670000000000000000000000000000000000000000000000000000000006","0x732abe4661f55132b7f119cab9a9985be6630299dfc92870cc910f147795bc44":"0x0","0x743eb517f46c12bb593097087a972028308ce2e819a76cfb5488751f9d1ca34a":"0x7265616c6d00000000000000000000000000000000000000000000000000000a","0x750dfb39c9afc828c341e1a8e8fdca0b3914baf43303e1ef21fbfe8ec8ee016a":"0x0","0x7cbf647b96a1d1a533ea4bc3a4a8a78f166bd91e6a96afb12f063fef0e9cb960":"0x0","0x7dc972254779cfb51850c0eaccfcb71207822b3c10d4840567bec3dfbf0dff13":"0x636f6d0000000000000000000000000000000000000000000000000000000006","0x7dfa160584f41570c33e8e6c42c5314a7b45ddc162f99fd101ccc10c7b5b3dd3":"0x77616c6c6574000000000000000000000000000000000000000000000000000c","0x868a5f38a2d46181ffad442d7bc5b337b3c349a58e4979f2901786c6123b996c":"0x6b6c65766572000000000000000000000000000000000000000000000000000c","0x87b2c647061aef22ef1aba96c67f440d471dfac27e9873ff4a03793b402d32ee":"0x706f6c79676f6e0000000000000000000000000000000000000000000000000e","0x893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e":"0x7c3c91245769c8b7450ad522792dec4bd4bf797f","0x91e744007b4b3621bec7c01ea851c3f48cf196b9cc6c566a48cec8c5faac6e62":"0x0","0x92c5a28dd4caaa50e0a8370243a5c600f64349e8b03604b403cbe111b50f1f7b":"0x3838380000000000000000000000000000000000000000000000000000000006","0x947936973a3a21b10c8980e1a8939a55c7339d302161884a3de05cf090e812f0":"0x1","0x9535d3ea47c5e1398d3405b4fadc73de6b1b1e6a66f674a8886ab7a6c873a390":"0x63727970746f000000000000000000000000000000000000000000000000000c","0x9956a4e94676c45844be3667f17e077c7cb53aa4e87e5a71d65e56b291232715":"0x676f000000000000000000000000000000000000000000000000000000000004","0x9c6ba1ddff1ffbc14dcdc1f97db867554a42a39e00e892c7e882dbb3dca89ebf":"0x6869000000000000000000000000000000000000000000000000000000000004","0x9f836a0f81651f597cee678b440ba8c853c633e6654809efb83d4b22aff06fb2":"0x616e696d6500000000000000000000000000000000000000000000000000000a","0x9fecf1e12f4b8ec337da992721a0f27526ddbd6be1e77885ab963c09afcf0fc1":"0x0","0xab129a0f8c6cf8d160116a28abc7369c2f8a098fc023f00f07dc3e1d5798e47a":"0x0","0xb04c0eb6f034d9a3179a4e6f953bdf8afc78ba2cdcfbc775076e1c2a0bb67818":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec","0xbe51b53bc2060a7a6419622b5a9adc00b50a57e6aa741882f2f60f95d4580078":"0x636c617900000000000000000000000000000000000000000000000000000008","0xbf350522e335b8ab3da1d099c93cdc09179f1e15ea6aa1acfaa4afb1ef87eabf":"0x756e73746f707061626c65000000000000000000000000000000000000000016","0xcbf7a3d53e0851ac15a415b99c2ba95a2497dd9dd44068ac261bcbdafdfe8472":"0x707564677900000000000000000000000000000000000000000000000000000a","0xcf4411216f3fdf787d1cfe037bbcfa0d5293d83a8082f8e4141266399e2a784b":"0x61757374696e000000000000000000000000000000000000000000000000000c","0xcfdbac664139565f92cce149a345e5f19355d25b3eb8a70c549d5da3283a15b8":"0x7a696c0000000000000000000000000000000000000000000000000000000006","0xcfeb64c30a93ecd7224f854b09be57bb6b3962e739fa8e3ea3a1851502474c07":"0x1","0xe03c9c593ce8661bd39f77653f7ca6c43f093aa7f3b95890f309f67b57f39e74":"0x0","0xe50c62c16d12655dfdbd61c232155e5c3a1cf61977d2d8e7449cb88611b73832":"0x0","0xeeb0b17d77f2c9069ad443f3927c0802d98d5553e52b17c985d45d4a10b79566":"0x62696e616e636575730000000000000000000000000000000000000000000012","0xf562ef0db022f25a957fb6e49aa07004f14a50ed5b23279e9ac25b4632f7bf1c":"0x0","0xf6776268d6c5847a771099280c742d684a4b22bac609ba615de51f7f893ff2bc":"0x0"}},"0x3f1194b9019002863ad0dbbe295294547c0d36a9":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80635b0fc9c31161006e5780635b0fc9c3146101a55780635ef2c7f0146101b8578063a22cb465146101cb578063cf408823146101de578063e985e9c5146101f1578063f79fe5381461023c575f80fd5b80630178b8bf146100b557806302571be3146100fd57806306ab59231461011057806314ab90381461013157806316a25cbd146101465780631896f70a14610192575b5f80fd5b6100e06100c3366004610785565b5f908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e061010b366004610785565b610266565b61012361011e3660046107b7565b610292565b6040519081526020016100f4565b61014461013f366004610800565b61035f565b005b610179610154366004610785565b5f90815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100f4565b6101446101a036600461082a565b61042e565b6101446101b336600461082a565b6104ef565b6101446101c636600461084b565b61058e565b6101446101d936600461089e565b6105af565b6101446101ec3660046108d7565b61061a565b61022c6101ff366004610921565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205460ff1690565b60405190151581526020016100f4565b61022c61024a366004610785565b5f908152602081905260409020546001600160a01b0316151590565b5f818152602081905260408120546001600160a01b031630810361028c57505f92915050565b92915050565b5f8381526020819052604081205484906001600160a01b0316338114806102db57506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6102e3575f80fd5b604080516020808201899052818301889052825180830384018152606090920190925280519101206103158186610635565b6040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b5f8281526020819052604090205482906001600160a01b0316338114806103a857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b6103b0575f80fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a250505f91825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061047757506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b61047f575f80fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a250505f9182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b5f8281526020819052604090205482906001600160a01b03163381148061053857506001600160a01b0381165f90815260016020908152604080832033845290915290205460ff165b610540575f80fd5b61054a8484610635565b6040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b5f61059a868686610292565b90506105a7818484610662565b505050505050565b335f8181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61062484846104ef565b61062f848383610662565b50505050565b5f9182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f838152602081905260409020600101546001600160a01b038381169116146106e6575f838152602081815260409182902060010180546001600160a01b0319166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b5f8381526020819052604090206001015467ffffffffffffffff828116600160a01b9092041614610780575f8381526020818152604091829020600101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b5f60208284031215610795575f80fd5b5035919050565b80356001600160a01b03811681146107b2575f80fd5b919050565b5f805f606084860312156107c9575f80fd5b83359250602084013591506107e06040850161079c565b90509250925092565b803567ffffffffffffffff811681146107b2575f80fd5b5f8060408385031215610811575f80fd5b82359150610821602084016107e9565b90509250929050565b5f806040838503121561083b575f80fd5b823591506108216020840161079c565b5f805f805f60a0868803121561085f575f80fd5b85359450602086013593506108766040870161079c565b92506108846060870161079c565b9150610892608087016107e9565b90509295509295909350565b5f80604083850312156108af575f80fd5b6108b88361079c565b9150602083013580151581146108cc575f80fd5b809150509250929050565b5f805f80608085870312156108ea575f80fd5b843593506108fa6020860161079c565b92506109086040860161079c565b9150610916606086016107e9565b905092959194509250565b5f8060408385031215610932575f80fd5b61093b8361079c565b91506108216020840161079c56fea164736f6c6343000818000a","storage":{"0xdd4f47a3b6f87903b728feed7a23273bd8de58e4fa257d37a74a5881e5d92ff":"0xf670681605efc4efc804f5a9b97ee89520473d56","0x14ce109f1cffdc11aa7355660be720f902291be09fb159b4c578958cd0f533bc":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x14ce109f1cffdc11aa7355660be720f902291be09fb159b4c578958cd0f533bd":"0x0","0x1e2c8528d7e8e90443ad0a4e37b6f2b1daed719a574ce3a0c347063e8d839d50":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x1e2c8528d7e8e90443ad0a4e37b6f2b1daed719a574ce3a0c347063e8d839d51":"0x0","0x2fb4213711fd985fc1fb1ea2bfa660b0b37fd50c6c74ab531d9b54b29dd5177e":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x2fb4213711fd985fc1fb1ea2bfa660b0b37fd50c6c74ab531d9b54b29dd5177f":"0x0","0x859ecef2e168dc10231b000bd53493b42bc9d944cac29d94582c1e1d43592131":"0xc965345edac823d56812cd20a10316233916a605","0x8878c6daefcfc78c7f181d00d719b4a0612dd3e65cafeb72507d15c036a9f690":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0xe4fdf45c2f8d198854f8823809c7a988eeaaa493","0xfb5568c6845cf0d5915af088a5d8ba90a5ff735e102c9a79609ef7d043f1108c":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0xfb5568c6845cf0d5915af088a5d8ba90a5ff735e102c9a79609ef7d043f1108d":"0x0"}},"0x4872cc1be60a9db9c880a0a437da7a6af134f08f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637362d9c8116100665780637362d9c8146101285780637b1039991461014e57806399e0dd7c14610172578063bb5f747b146101e2578063d6cd94731461020857610093565b806310154bad14610098578063291d9549146100c05780633af32abf146100e65780634c5a628c14610120575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b0316610210565b005b6100be600480360360208110156100d657600080fd5b50356001600160a01b0316610260565b61010c600480360360208110156100fc57600080fd5b50356001600160a01b03166102ad565b604080519115158252519081900360200190f35b6100be6102c6565b6100be6004803603602081101561013e57600080fd5b50356001600160a01b03166102d1565b61015661031e565b604080516001600160a01b039092168252519081900360200190f35b6100be6004803603602081101561018857600080fd5b8101906020810181356401000000008111156101a357600080fd5b8201836020820111156101b557600080fd5b803590602001918460018302840111640100000000831117156101d757600080fd5b50909250905061032d565b61010c600480360360208110156101f857600080fd5b50356001600160a01b0316610404565b6100be610416565b61021933610404565b6102545760405162461bcd60e51b81526004018080602001828103825260408152602001806106d26040913960400191505060405180910390fd5b61025d8161041f565b50565b61026933610404565b6102a45760405162461bcd60e51b81526004018080602001828103825260408152602001806106d26040913960400191505060405180910390fd5b61025d81610467565b60006102c060018363ffffffff6104af16565b92915050565b6102cf33610516565b565b6102da33610404565b6103155760405162461bcd60e51b81526004018080602001828103825260408152602001806106d26040913960400191505060405180910390fd5b61025d8161055e565b6002546001600160a01b031690565b610336336102ad565b6103715760405162461bcd60e51b815260040180806020018281038252603a815260200180610712603a913960400191505060405180910390fd5b6002546040516369426cbd60e11b8152602060048201908152602482018490526001600160a01b039092169163d284d97a91859185918190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103e857600080fd5b505af11580156103fc573d6000803e3d6000fd5b505050505050565b60006102c0818363ffffffff6104af16565b6102cf33610467565b61043060018263ffffffff6105a616565b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b61047860018263ffffffff61062716565b6040516001600160a01b038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b60006001600160a01b0382166104f65760405162461bcd60e51b81526004018080602001828103825260228152602001806106b06022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b61052760008263ffffffff61062716565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b61056f60008263ffffffff6105a616565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6105b082826104af565b15610602576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61063182826104af565b61066c5760405162461bcd60e51b815260040180806020018281038252602181526020018061068f6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c6557686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374656420726f6c65a265627a7a72315820debca60946c0819dc5b5c2756c5c1dd8dd8a46f2429fa8a43a4f4362af3030c164736f6c634300050c0032","storage":{"0x2":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x5ac40fcee41fb0272a935f6e51e963102fba5db6f20e897e9361f0347eb2cae6":"0x1","0xdc4aeb95a779c8b92b845e3a94044db8ff2e43acc37da18c4b35a6bbad7c122f":"0x1"}},"0x49da8861c65460639925febe1fb4b5b59b443082":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063f7e83aee1461002d575b5f80fd5b61004061003b3660046101ac565b610054565b604051901515815260200160405180910390f35b5f602082146100a95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207368613235362068617368206c656e677468000000000000604482015260640160405180910390fd5b6100eb5f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506101459050565b600286866040516100fd929190610213565b602060405180830381855afa158015610118573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061013b9190610222565b1495945050505050565b81515f90610154836020610239565b111561015e575f80fd5b50016020015190565b5f8083601f840112610177575f80fd5b50813567ffffffffffffffff81111561018e575f80fd5b6020830191508360208285010111156101a5575f80fd5b9250929050565b5f805f80604085870312156101bf575f80fd5b843567ffffffffffffffff808211156101d6575f80fd5b6101e288838901610167565b909650945060208701359150808211156101fa575f80fd5b5061020787828801610167565b95989497509550505050565b818382375f9101908152919050565b5f60208284031215610232575f80fd5b5051919050565b8082018082111561025857634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a","storage":{}},"0x4a3c194eb88966178bfdd81744dddafed611b830":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806398650275116100665780639865027514610305578063aa271e1a1461030d578063b2da297914610347578063be362e2e146103c5578063c36c2125146104fe5761009e565b80634c0b0ed2146100a35780637b103999146101595780637caf3ad81461017d5780638ad364f814610258578063983b2d56146102df575b600080fd5b610157600480360360408110156100b957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100e357600080fd5b8201836020820111156100f557600080fd5b803590602001918460018302840111600160201b8311171561011657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506105bd945050505050565b005b61016161074c565b604080516001600160a01b039092168252519081900360200190f35b6101576004803603608081101561019357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101bd57600080fd5b8201836020820111156101cf57600080fd5b803590602001918460018302840111600160201b831117156101f057600080fd5b919390926001600160a01b0383351692604081019060200135600160201b81111561021a57600080fd5b82018360208201111561022c57600080fd5b803590602001918460018302840111600160201b8311171561024d57600080fd5b50909250905061075b565b6101576004803603606081101561026e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029857600080fd5b8201836020820111156102aa57600080fd5b803590602001918460018302840111600160201b831117156102cb57600080fd5b9193509150356001600160a01b0316610957565b610157600480360360208110156102f557600080fd5b50356001600160a01b0316610b2b565b610157610b7b565b6103336004803603602081101561032357600080fd5b50356001600160a01b0316610b86565b604080519115158252519081900360200190f35b6101576004803603604081101561035d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111600160201b831117156103ba57600080fd5b509092509050610b9e565b610157600480360360608110156103db57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561040557600080fd5b82018360208201111561041757600080fd5b803590602001918460018302840111600160201b8311171561043857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561048a57600080fd5b82018360208201111561049c57600080fd5b803590602001918460018302840111600160201b831117156104bd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bf1945050505050565b6101576004803603606081101561051457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561053e57600080fd5b82018360208201111561055057600080fd5b803590602001918460018302840111600160201b8311171561057157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610dec9050565b6105c633610b86565b6106015760405162461bcd60e51b81526004018080602001828103825260308152602001806112f56030913960400191505060405180910390fd5b6001546040805163ebf0c71760e01b815290516001600160a01b039092169163b5466669918591849163ebf0c717916004808301926020929190829003018186803b15801561064f57600080fd5b505afa158015610663573d6000803e3d6000fd5b505050506040513d602081101561067957600080fd5b50516040516001600160e01b031960e085901b1681526001600160a01b0383166004820190815260248201839052606060448301908152875160648401528751889360840190602085019080838360005b838110156106e25781810151838201526020016106ca565b50505050905090810190601f16801561070f5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561073057600080fd5b505af1158015610744573d6000803e3d6000fd5b505050505050565b6001546001600160a01b031690565b6107cf8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250610bf192505050565b6001546040805163ebf0c71760e01b815290516001600160a01b0390921691632525d06a91869184916368b62d3291839163ebf0c717916004808301926020929190829003018186803b15801561082557600080fd5b505afa158015610839573d6000803e3d6000fd5b505050506040513d602081101561084f57600080fd5b5051604080516001600160e01b031960e085901b1681526004810183815260248201928352604482018d90528d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b1580156108bd57600080fd5b505afa1580156108d1573d6000803e3d6000fd5b505050506040513d60208110156108e757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b50505050505050505050565b6109a58484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250610bf1915050565b6001546040805163ebf0c71760e01b815290516001600160a01b0390921691632525d06a91849184916368b62d3291839163ebf0c717916004808301926020929190829003018186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b5051604080516001600160e01b031960e085901b1681526004810183815260248201928352604482018b90528b928b92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015610a9357600080fd5b505afa158015610aa7573d6000803e3d6000fd5b505050506040513d6020811015610abd57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b5050505050505050565b610b3433610b86565b610b6f5760405162461bcd60e51b81526004018080602001828103825260308152602001806112f56030913960400191505060405180910390fd5b610b7881611115565b50565b610b843361115d565b565b6000610b98818363ffffffff6111a516565b92915050565b610bec8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250610bf1915050565b505050565b610bfa33610b86565b610c355760405162461bcd60e51b81526004018080602001828103825260308152602001806112f56030913960400191505060405180910390fd5b6001546040805163ebf0c71760e01b815290516001600160a01b0390921691630467e014918691849163ebf0c717916004808301926020929190829003018186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d6020811015610cad57600080fd5b50516040516001600160e01b031960e085901b1681526001600160a01b0383166004820190815260248201839052608060448301908152885160848401528851899389939291606482019160a40190602087019080838360005b83811015610d1f578181015183820152602001610d07565b50505050905090810190601f168015610d4c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610d7f578181015183820152602001610d67565b50505050905090810190601f168015610dac5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015610dcf57600080fd5b505af1158015610de3573d6000803e3d6000fd5b50505050505050565b610df533610b86565b610e305760405162461bcd60e51b81526004018080602001828103825260308152602001806112f56030913960400191505060405180910390fd5b6001546040805163ebf0c71760e01b815290516001600160a01b039092169163b5466669918691849163ebf0c717916004808301926020929190829003018186803b158015610e7e57600080fd5b505afa158015610e92573d6000803e3d6000fd5b505050506040513d6020811015610ea857600080fd5b50516040516001600160e01b031960e085901b1681526001600160a01b0383166004820190815260248201839052606060448301908152885160648401528851899360840190602085019080838360005b83811015610f11578181015183820152602001610ef9565b50505050905090810190601f168015610f3e5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b50506001546040805163ebf0c71760e01b815290516001600160a01b039092169350632525d06a9250849184916368b62d3291839163ebf0c717916004808301926020929190829003018186803b158015610fcd57600080fd5b505afa158015610fe1573d6000803e3d6000fd5b505050506040513d6020811015610ff757600080fd5b5051604080516001600160e01b031960e085901b16815260048101838152602482019283528a5160448301528a518b93919260640190602085019080838360005b83811015611050578181015183820152602001611038565b50505050905090810190601f16801561107d5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561109b57600080fd5b505afa1580156110af573d6000803e3d6000fd5b505050506040513d60208110156110c557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015610dcf57600080fd5b61112660008263ffffffff61120c16565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61116e60008263ffffffff61128d16565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b0382166111ec5760405162461bcd60e51b81526004018080602001828103825260228152602001806113466022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b61121682826111a5565b15611268576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61129782826111a5565b6112d25760405162461bcd60e51b81526004018080602001828103825260218152602001806113256021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373a265627a7a72315820c058d70355f7d37ff6b3b61cd850cc4a41893e30048389698c062148bf3d2ff464736f6c634300050c0032","storage":{"0x1":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x789b49055833748af4eaa9affbcd84118ce8770f7e4385b5a3f428626b1f0aff":"0x1","0xdc4aeb95a779c8b92b845e3a94044db8ff2e43acc37da18c4b35a6bbad7c122f":"0x1"}},"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212207ad53e1008cce369999f6b5f2f77109510b404ff1de9b47b639981fd68e6239264736f6c63430008090033","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa"}},"0x4eb9de1fc0d800e941f326d6699e9e11969557ea":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063100cdd911461002d575b5f80fd5b61004061003b3660046102cd565b610042565b005b5f5b818110156101b8575f7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e28484848181106100805761008061033c565b905060200201356040516020016100a1929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206331a9108f60e11b82526004820181905291507f000000000000000000000000107733fed96c4cd390c944a31f5425a7fb98ae5e6001600160a01b0316906323b872dd908290636352211e90602401602060405180830381865afa158015610124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101489190610350565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015261dead6024820152604481018490526064015f604051808303815f87803b158015610195575f80fd5b505af11580156101a7573d5f803e3d5ffd5b505060019093019250610044915050565b5080156102c9577f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e282826101ed60018261037d565b8181106101fc576101fc61033c565b9050602002013560405160200161021d929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c7f7674e7282552c15f203b9c4a6025aeaf28176ef7f5451b280f9bada3f8bc98e283835f8181106102685761026861033c565b90506020020135604051602001610289929190918252602082015260400190565b60408051601f19818403018152908290528051602090910120907fdf423376f9b0ab363b1b4d6f0b4cb6821921ec30f491555a97236a8a38ce095a905f90a35b5050565b5f80602083850312156102de575f80fd5b823567ffffffffffffffff808211156102f5575f80fd5b818501915085601f830112610308575f80fd5b813581811115610316575f80fd5b8660208260051b850101111561032a575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610360575f80fd5b81516001600160a01b0381168114610376575f80fd5b9392505050565b8181038181111561039c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea164736f6c6343000818000a","storage":{}},"0x4fbf7b2f171336958be5d15ff762a5cff5363568":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061011b575f3560e01c80638d839ffe1161009d578063aeb8ce9b11610062578063aeb8ce9b14610356578063ce1e09c014610375578063d3419bf3146103a8578063f14fcbc8146103db578063f2fde38b146103fa575f80fd5b80638d839ffe146102a25780638da5cb5b146102d55780639791c097146102f1578063a8e5fbc014610310578063acf1a84114610343575f80fd5b806374694a2b116100e357806374694a2b146101c957806380869853146101dc578063839df9451461022757806383e7f6ff146102525780638a95b09f1461028c575f80fd5b806301ffc9a71461011f5780633ccfd60b146101535780635d3590d51461016957806365a69dcf14610188578063715018a6146101b5575b5f80fd5b34801561012a575f80fd5b5061013e610139366004611145565b610419565b60405190151581526020015b60405180910390f35b34801561015e575f80fd5b5061016761044f565b005b348015610174575f80fd5b50610167610183366004611187565b610489565b348015610193575f80fd5b506101a76101a23660046112e4565b610507565b60405190815260200161014a565b3480156101c0575f80fd5b5061016761058b565b6101676101d73660046113db565b61059e565b3480156101e7575f80fd5b5061020f7f000000000000000000000000f670681605efc4efc804f5a9b97ee89520473d5681565b6040516001600160a01b03909116815260200161014a565b348015610232575f80fd5b506101a761024136600461149d565b60016020525f908152604090205481565b34801561025d575f80fd5b5061027161026c3660046114b4565b610894565b6040805182518152602092830151928101929092520161014a565b348015610297575f80fd5b506101a76224ea0081565b3480156102ad575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000000025881565b3480156102e0575f80fd5b505f546001600160a01b031661020f565b3480156102fc575f80fd5b5061013e61030b3660046114f6565b6109c9565b34801561031b575f80fd5b5061020f7f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e1841720481565b610167610351366004611528565b6109dd565b348015610361575f80fd5b5061013e6103703660046114f6565b610b7b565b348015610380575f80fd5b506101a77f000000000000000000000000000000000000000000000000000000000001518081565b3480156103b3575f80fd5b5061020f7f000000000000000000000000ec71e4e674fe0f432693dc2b935c34bd2774c00381565b3480156103e6575f80fd5b506101676103f536600461149d565b610c22565b348015610405575f80fd5b50610167610414366004611570565b610c95565b5f6001600160e01b031982166301ffc9a760e01b148061044957506001600160e01b0319821663612e8c0960e01b145b92915050565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610486573d5f803e3d5ffd5b50565b610491610d0b565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af11580156104dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611589565b50505050565b885160208a01205f90841580159061052657506001600160a01b038716155b15610544576040516334fd817160e21b815260040160405180910390fd5b808a8a8a8a8a8a8a8a6040516020016105659998979695949392919061165e565b604051602081830303815290604052805190602001209150509998505050505050505050565b610593610d0b565b61059c5f610d64565b565b5f6105df8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c9250610894915050565b602081015181519192506105f2916116d5565b3410156106125760405163044044a560e21b815260040160405180910390fd5b6106b38b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050896106ae8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508d8d8d8d8d8d8d8d610507565b610db3565b604051635200a4c160e11b81525f906001600160a01b037f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e18417204169063a40149829061070b908f908f908f908f908e908b906004016116e8565b6020604051808303815f875af1158015610727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074b9190611732565b9050841561077657610776878d8d604051610767929190611749565b60405180910390208888610ece565b83156107be576107be8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b9250339150610f939050565b896001600160a01b03168c8c6040516107d8929190611749565b60405180910390207f69e37f151eb98a09618ddaa80c8cfaf1ce5996867c489f45b555b412271ebf278e8e865f015187602001518760405161081e959493929190611758565b60405180910390a36020820151825161083791906116d5565b341115610886576020820151825133916108fc9161085591906116d5565b61085f9034611788565b6040518115909202915f818181858888f19350505050158015610884573d5f803e3d5ffd5b505b505050505050505050505050565b604080518082019091525f808252602082015282516020840120604051636b727d4360e11b8152600481018290527f000000000000000000000000ec71e4e674fe0f432693dc2b935c34bd2774c0036001600160a01b03908116916350e9a7159187917f000000000000000000000000c965345edac823d56812cd20a10316233916a6059091169063d6e4fa8690602401602060405180830381865afa158015610940573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109649190611732565b866040518463ffffffff1660e01b8152600401610983939291906117e8565b6040805180830381865afa15801561099d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c1919061180c565b949350505050565b5f60036109d583611044565b101592915050565b5f83836040516109ee929190611749565b604080519182900382206020601f8701819004810284018101909252858352925082915f91610a39919088908890819084018382808284375f92019190915250889250610894915050565b8051909150341015610a5e5760405163044044a560e21b815260040160405180910390fd5b60405163c475abff60e01b815260048101839052602481018590525f907f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e184172046001600160a01b03169063c475abff906044016020604051808303815f875af1158015610acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190611732565b8251909150341115610b3457815133906108fc90610b0d9034611788565b6040518115909202915f818181858888f19350505050158015610b32573d5f803e3d5ffd5b505b837f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae88883485604051610b6a9493929190611859565b60405180910390a250505050505050565b805160208201205f90610b8d836109c9565b8015610c1b57506040516312dc929d60e31b8152600481018290527f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b0316906396e494e890602401602060405180830381865afa158015610bf7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1b9190611589565b9392505050565b5f818152600160205260409020544290610c5d907f0000000000000000000000000000000000000000000000000000000000015180906116d5565b10610c8357604051630a059d7160e01b8152600481018290526024015b60405180910390fd5b5f908152600160205260409020429055565b610c9d610d0b565b6001600160a01b038116610d025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7a565b61048681610d64565b5f546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c7a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600160205260409020544290610dee907f0000000000000000000000000000000000000000000000000000000000000258906116d5565b1115610e1057604051635320bcf960e01b815260048101829052602401610c7a565b5f818152600160205260409020544290610e4b907f0000000000000000000000000000000000000000000000000000000000015180906116d5565b11610e6c5760405163cb7690d760e01b815260048101829052602401610c7a565b610e7583610b7b565b610e9457826040516308eee0fd60e31b8152600401610c7a919061187f565b5f818152600160205260408120556224ea00821015610ec957604051639a71997b60e01b815260048101839052602401610c7a565b505050565b604080517f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae6020808301919091528183018690528251808303840181526060830193849052805191012063e32954eb60e01b90925285906001600160a01b0382169063e32954eb90610f4890859088908890606401611891565b5f604051808303815f875af1158015610f63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8a91908101906118b3565b50505050505050565b7f000000000000000000000000f670681605efc4efc804f5a9b97ee89520473d566001600160a01b0316637a806d6b33838587604051602001610fd691906119a7565b6040516020818303038152906040526040518563ffffffff1660e01b815260040161100494939291906119ce565b6020604051808303815f875af1158015611020573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105019190611732565b80515f90819081905b8082101561113c575f85838151811061106857611068611a0b565b01602001516001600160f81b0319169050600160ff1b811015611097576110906001846116d5565b9250611129565b600760fd1b6001600160f81b0319821610156110b8576110906002846116d5565b600f60fc1b6001600160f81b0319821610156110d9576110906003846116d5565b601f60fb1b6001600160f81b0319821610156110fa576110906004846116d5565b603f60fa1b6001600160f81b03198216101561111b576110906005846116d5565b6111266006846116d5565b92505b508261113481611a1f565b93505061104d565b50909392505050565b5f60208284031215611155575f80fd5b81356001600160e01b031981168114610c1b575f80fd5b80356001600160a01b0381168114611182575f80fd5b919050565b5f805f60608486031215611199575f80fd5b6111a28461116c565b92506111b06020850161116c565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111fd576111fd6111c0565b604052919050565b5f67ffffffffffffffff82111561121e5761121e6111c0565b50601f01601f191660200190565b5f82601f83011261123b575f80fd5b813561124e61124982611205565b6111d4565b818152846020838601011115611262575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8083601f84011261128e575f80fd5b50813567ffffffffffffffff8111156112a5575f80fd5b6020830191508360208260051b85010111156112bf575f80fd5b9250929050565b8015158114610486575f80fd5b803561ffff81168114611182575f80fd5b5f805f805f805f805f6101008a8c0312156112fd575f80fd5b893567ffffffffffffffff80821115611314575f80fd5b6113208d838e0161122c565b9a5061132e60208d0161116c565b995060408c0135985060608c0135975061134a60808d0161116c565b965060a08c013591508082111561135f575f80fd5b5061136c8c828d0161127e565b90955093505060c08a0135611380816112c6565b915061138e60e08b016112d3565b90509295985092959850929598565b5f8083601f8401126113ad575f80fd5b50813567ffffffffffffffff8111156113c4575f80fd5b6020830191508360208285010111156112bf575f80fd5b5f805f805f805f805f806101008b8d0312156113f5575f80fd5b8a3567ffffffffffffffff8082111561140c575f80fd5b6114188e838f0161139d565b909c509a508a915061142c60208e0161116c565b995060408d0135985060608d0135975061144860808e0161116c565b965060a08d013591508082111561145d575f80fd5b5061146a8d828e0161127e565b90955093505060c08b013561147e816112c6565b915061148c60e08c016112d3565b90509295989b9194979a5092959850565b5f602082840312156114ad575f80fd5b5035919050565b5f80604083850312156114c5575f80fd5b823567ffffffffffffffff8111156114db575f80fd5b6114e78582860161122c565b95602094909401359450505050565b5f60208284031215611506575f80fd5b813567ffffffffffffffff81111561151c575f80fd5b6109c18482850161122c565b5f805f6040848603121561153a575f80fd5b833567ffffffffffffffff811115611550575f80fd5b61155c8682870161139d565b909790965060209590950135949350505050565b5f60208284031215611580575f80fd5b610c1b8261116c565b5f60208284031215611599575f80fd5b8151610c1b816112c6565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f838385526020808601955060208560051b830101845f5b8781101561165157848303601f19018952813536889003601e19018112611609575f80fd5b8701848101903567ffffffffffffffff811115611624575f80fd5b803603821315611632575f80fd5b61163d8582846115a4565b9a86019a94505050908301906001016115e4565b5090979650505050505050565b8981526001600160a01b03898116602083015260408201899052606082018890528616608082015261010060a082018190525f9061169f83820187896115cc565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610449576104496116c1565b60a081525f6116fb60a08301888a6115a4565b6001600160a01b03968716602084015260408301959095525091909316606082015261ffff90921660809092019190915292915050565b5f60208284031215611742575f80fd5b5051919050565b818382375f9101908152919050565b608081525f61176b6080830187896115a4565b602083019590955250604081019290925260609091015292915050565b81810381811115610449576104496116c1565b5f5b838110156117b557818101518382015260200161179d565b50505f910152565b5f81518084526117d481602086016020860161179b565b601f01601f19169290920160200192915050565b606081525f6117fa60608301866117bd565b60208301949094525060400152919050565b5f6040828403121561181c575f80fd5b6040516040810181811067ffffffffffffffff8211171561183f5761183f6111c0565b604052825181526020928301519281019290925250919050565b606081525f61186c6060830186886115a4565b6020830194909452506040015292915050565b602081525f610c1b60208301846117bd565b838152604060208201525f6118aa6040830184866115cc565b95945050505050565b5f60208083850312156118c4575f80fd5b825167ffffffffffffffff808211156118db575f80fd5b818501915085601f8301126118ee575f80fd5b815181811115611900576119006111c0565b8060051b61190f8582016111d4565b9182528381018501918581019089841115611928575f80fd5b86860192505b8383101561199a57825185811115611944575f80fd5b8601603f81018b13611954575f80fd5b87810151604061196661124983611205565b8281528d82848601011115611979575f80fd5b611988838c830184870161179b565b8552505050918601919086019061192e565b9998505050505050505050565b5f82516119b881846020870161179b565b6305ccae8d60e31b920191825250600401919050565b6001600160a01b0385811682528481166020830152831660408201526080606082018190525f90611a01908301846117bd565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611a3057611a306116c1565b506001019056fea164736f6c6343000818000a","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa"}},"0x5155f5627bdf9795b3dbb8887001ada1eeba93f2":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063de8f50a11461002d575b5f80fd5b61004761003b3660046100a0565b60019695505050505050565b604051901515815260200160405180910390f35b5f8083601f84011261006b575f80fd5b50813567ffffffffffffffff811115610082575f80fd5b602083019150836020828501011115610099575f80fd5b9250929050565b5f805f805f80606087890312156100b5575f80fd5b863567ffffffffffffffff808211156100cc575f80fd5b6100d88a838b0161005b565b909850965060208901359150808211156100f0575f80fd5b6100fc8a838b0161005b565b90965094506040890135915080821115610114575f80fd5b5061012189828a0161005b565b979a969950949750929593949250505056fea164736f6c6343000818000a","storage":{}},"0x54563a9e1cd2dcbd0bca90d3cfa4a647e02c404a":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101db575f3560e01c80638da5cb5b116100fd578063c4d66de811610092578063daea85c511610062578063daea85c51461055e578063e7acab241461057d578063f2fde38b1461059c578063ffa1ad74146105bb575f80fd5b8063c4d66de8146104e1578063d539139314610500578063d547741f14610520578063d9caed121461053f575f80fd5b8063a217fddf116100cd578063a217fddf14610452578063a3f4df7e14610465578063a4247400146104a3578063aa271e1a146104c2575f80fd5b80638da5cb5b146103d957806391d1485414610400578063983b2d561461041f578063986502751461043e575f80fd5b80635c975abb11610173578063715018a611610143578063715018a61461037f57806371e2a6571461039357806381c81d35146103b25780638456cb59146103c5575f80fd5b80635c975abb146103165780635fc1964f1461032e578063634486da1461034d5780636ccbae5f14610360575f80fd5b80633092afd5116101ae5780633092afd51461029c57806336568abe146102bb5780633f4ba83a146102da578063572b6c05146102ee575f80fd5b806301ffc9a7146101df5780631bf7e13e14610213578063248a9ca31461023f5780632f2ff15d1461027b575b5f80fd5b3480156101ea575f80fd5b506101fe6101f9366004611e68565b6105eb565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b5061023261022d366004611e8f565b610621565b60405161020a9190611f71565b34801561024a575f80fd5b5061026d610259366004611f83565b5f90815260fb602052604090206001015490565b60405190815260200161020a565b348015610286575f80fd5b5061029a610295366004611fbe565b6106ea565b005b3480156102a7575f80fd5b5061029a6102b6366004611fec565b610713565b3480156102c6575f80fd5b5061029a6102d5366004611fbe565b610727565b3480156102e5575f80fd5b5061029a6107ba565b3480156102f9575f80fd5b506101fe610308366004611fec565b6001600160a01b0316301490565b348015610321575f80fd5b5061012d5460ff166101fe565b348015610339575f80fd5b5061029a610348366004612073565b6107d4565b61029a61035b366004611fec565b610811565b34801561036b575f80fd5b5061026d61037a366004611f83565b6108d1565b34801561038a575f80fd5b5061029a61092a565b34801561039e575f80fd5b5061029a6103ad366004612073565b61093b565b61029a6103c0366004611fec565b610978565b3480156103d0575f80fd5b5061029a6109f5565b3480156103e4575f80fd5b506097546040516001600160a01b03909116815260200161020a565b34801561040b575f80fd5b506101fe61041a366004611fbe565b610a0d565b34801561042a575f80fd5b5061029a610439366004611fec565b610a37565b348015610449575f80fd5b5061029a610a48565b34801561045d575f80fd5b5061026d5f81565b348015610470575f80fd5b506102326040518060400160405280601381526020017229b2b0b837b93a10283937bc3c90213abcb2b960691b81525081565b3480156104ae575f80fd5b506101fe6104bd366004611e8f565b610a61565b3480156104cd575f80fd5b506101fe6104dc366004611fec565b610ab2565b3480156104ec575f80fd5b5061029a6104fb366004611fec565b610aca565b34801561050b575f80fd5b5061026d5f80516020612e2f83398151915281565b34801561052b575f80fd5b5061029a61053a366004611fbe565b610c21565b34801561054a575f80fd5b5061029a610559366004612113565b610c45565b348015610569575f80fd5b5061029a610578366004611fec565b610cef565b348015610588575f80fd5b506101fe610597366004612151565b610d9c565b3480156105a7575f80fd5b5061029a6105b6366004611fec565b6111dc565b3480156105c6575f80fd5b50610232604051806040016040528060058152602001640302e312e360dc1b81525081565b5f6001600160e01b03198216637965db0b60e01b148061061b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5a9050610632858585610a61565b61064f57604051638baa579f60e01b815260040160405180910390fd5b6106df61065f6020870187611fec565b3060408801358461067360608b018b612203565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f920191909152506111f792505050565b9150505b9392505050565b5f82815260fb6020526040902060010154610704816112d5565b61070e83836112e6565b505050565b61071b61136c565b610724816113e5565b50565b61072f6113fc565b6001600160a01b0316816001600160a01b0316146107ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107b6828261140a565b5050565b6107c261136c565b6107ca61148e565b6107d26114d8565b565b6107dc61136c565b5f5b81518110156107b6576108098282815181106107fc576107fc612245565b60200260200101516113e5565b6001016107de565b61081c6104dc6113fc565b6108385760405162461bcd60e51b81526004016107a390612259565b6001600160a01b03811661088e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b61089781611531565b61089f610a48565b6040516001600160a01b038216903480156108fc02915f818181858888f193505050501580156107b6573d5f803e3d5ffd5b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610923906060016040516020818303038152906040528051906020012090565b5492915050565b61093261136c565b6107d25f611548565b61094361136c565b5f5b81518110156107b65761097082828151811061096357610963612245565b6020026020010151611531565b600101610945565b6109836104dc6113fc565b61099f5760405162461bcd60e51b81526004016107a390612259565b6001600160a01b0381166108975760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d50545900000060448201526064016107a3565b6109fd61136c565b610a05611599565b6107d26115e0565b5f91825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610a3f61136c565b61072481611531565b6107d25f80516020612e2f8339815191526102d56113fc565b5f610aaa610a6e8561228e565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061161f92505050565b949350505050565b5f61061b5f80516020612e2f83398151915283610a0d565b5f54610100900460ff1615808015610ae857505f54600160ff909116105b80610b015750303b158015610b0157505f5460ff166001145b610b645760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a3565b5f805460ff191660011790558015610b85575f805461ff0019166101001790555b61015f80546001600160a01b0319166001600160a01b038416179055610ba961175a565b610bb1611787565b610bb9611787565b610bc1611787565b610bc96117ad565b610bd16117e3565b610bd961181a565b80156107b6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f82815260fb6020526040902060010154610c3b816112d5565b61070e838361140a565b610c4d61136c565b600260335403610c6f5760405162461bcd60e51b81526004016107a39061234a565b600260335560405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610cc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce49190612381565b505060016033555050565b610cf761136c565b600260335403610d195760405162461bcd60e51b81526004016107a39061234a565b600260335561015f5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529082169063095ea7b3906044016020604051808303815f875af1158015610d6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d939190612381565b50506001603355565b5f610da86104dc6113fc565b610dc45760405162461bcd60e51b81526004016107a390612259565b600260335403610de65760405162461bcd60e51b81526004016107a39061234a565b6002603355610df3611599565b6001600160a01b038216610e1a576040516311d000e160e31b815260040160405180910390fd5b30610e2587806123a0565b610e36906040810190602001611fec565b6001600160a01b031614610e5d57604051639d3c586b60e01b815260040160405180910390fd5b61015f54604080516101608101909152611135916001600160a01b0316906379df72bd9080610e8c8b806123a0565b610e9a906020810190611fec565b6001600160a01b03168152602001610eb28b806123a0565b610ec3906040810190602001611fec565b6001600160a01b03168152602001610edb8b806123a0565b610ee99060408101906123bf565b808060200260200160405190810160405280939291908181526020015f905b82821015610f3457610f2560a08302860136819003810190612411565b81526020019060010190610f08565b5050509183525050602001610f498b806123a0565b610f5790606081019061248e565b808060200260200160405190810160405280939291908181526020015f905b82821015610fa257610f9360c083028601368190038101906124d2565b81526020019060010190610f76565b5050509183525050602001610fb78b806123a0565b610fc89060a081019060800161256d565b6004811115610fd957610fd9612586565b8152602001610fe88b806123a0565b60a001358152602001610ffb8b806123a0565b60c00135815260200161100e8b806123a0565b60e0013581526020016110218b806123a0565b610100013581526020016110358b806123a0565b6101200135815261015f546020909101906001600160a01b031663f07ec37361105e8d806123a0565b61106c906020810190611fec565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d2919061259a565b8152506040518263ffffffff1660e01b81526004016110f191906126bf565b602060405180830381865afa15801561110c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611130919061259a565b61184d565b61015f546040516339eb2ac960e21b81526001600160a01b039091169063e7acab249061116e9089908990899089908990600401612aac565b6020604051808303815f875af115801561118a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ae9190612381565b9050806111ce57604051636725093760e01b815260040160405180910390fd5b600160335595945050505050565b6111e461136c565b6111ed81611866565b6107245f826118dc565b6060611202856118e6565b5f80876001600160a01b03168661121b8b8a898961194b565b6040516112289190612c82565b5f604051808303815f8787f1925050503d805f8114611262576040519150601f19603f3d011682016040523d82523d5f602084013e611267565b606091505b509092509050611278603f87612ca7565b5a1161128657611286612cc6565b6112c682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061197b565b925050505b9695505050505050565b610724816112e16113fc565b6119b4565b6112f08282610a0d565b6107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113286113fc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6113746113fc565b6001600160a01b031661138f6097546001600160a01b031690565b6001600160a01b0316146107d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107a3565b6107245f80516020612e2f83398151915282610c21565b5f611405611a18565b905090565b6114148282610a0d565b156107b6575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff1916905561144a6113fc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61012d5460ff166107d25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107a3565b6114e061148e565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115146113fc565b6040516001600160a01b03909116815260200160405180910390a1565b6107245f80516020612e2f833981519152826118dc565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61012d5460ff16156107d25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107a3565b6115e8611599565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115146113fc565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015611663573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611687919061259a565b90505f6117348660600151805190602001208688602001516040516020016116d49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156112cb575085516112cb906001600160a01b03168286611a35565b5f54610100900460ff166117805760405162461bcd60e51b81526004016107a390612cda565b6001603355565b5f54610100900460ff166107d25760405162461bcd60e51b81526004016107a390612cda565b5f54610100900460ff166117d35760405162461bcd60e51b81526004016107a390612cda565b6107d26117de6113fc565b611548565b5f54610100900460ff166118095760405162461bcd60e51b81526004016107a390612cda565b6107d25f6118156113fc565b6118dc565b5f54610100900460ff166118405760405162461bcd60e51b81526004016107a390612cda565b61012d805460ff19169055565b30330361185d5761072481611b70565b610724816118e6565b61186e61136c565b6001600160a01b0381166118d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a3565b61072481611548565b6107b682826112e6565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9060600160405160208183030381529060405280519060200120905061193a8190565b54611946906001612d25565b905550565b606082858560405160200161196293929190612d38565b6040516020818303038152906040529050949350505050565b6060831561198a5750816106e3565b82511561199a5782518084602001fd5b8160405162461bcd60e51b81526004016107a39190611f71565b6119be8282610a0d565b6107b6576119d6816001600160a01b03166014611b9a565b6119e1836020611b9a565b6040516020016119f2929190612d76565b60408051601f198184030181529082905262461bcd60e51b82526107a391600401611f71565b5f303303611a2d575060331936013560601c90565b503390565b90565b5f805f611a428585611d2f565b90925090505f816004811115611a5a57611a5a612586565b148015611a785750856001600160a01b0316826001600160a01b0316145b15611a88576001925050506106e3565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611aaf929190612dea565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611aed9190612c82565b5f60405180830381855afa9150503d805f8114611b25576040519150601f19603f3d011682016040523d82523d5f602084013e611b2a565b606091505b5091509150818015611b3d575080516020145b8015611b6457508051630b135d3f60e11b90611b62908301602090810190840161259a565b145b98975050505050505050565b611b78611d71565b811461072457604051635637b6af60e11b8152600481018290526024016107a3565b60605f611ba8836002612e02565b611bb3906002612d25565b6001600160401b03811115611bca57611bca612007565b6040519080825280601f01601f191660200182016040528015611bf4576020820181803683370190505b509050600360fc1b815f81518110611c0e57611c0e612245565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c3c57611c3c612245565b60200101906001600160f81b03191690815f1a9053505f611c5e846002612e02565b611c69906001612d25565b90505b6001811115611ce0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c9d57611c9d612245565b1a60f81b828281518110611cb357611cb3612245565b60200101906001600160f81b03191690815f1a90535060049490941c93611cd981612e19565b9050611c6c565b5083156106e35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a3565b5f808251604103611d63576020830151604084015160608501515f1a611d5787828585611d83565b94509450505050611d6a565b505f905060025b9250929050565b5f303303611a325750601f1936013590565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611db857505f90506003611e5f565b8460ff16601b14158015611dd057508460ff16601c14155b15611de057505f90506004611e5f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e31573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611e59575f60019250925050611e5f565b91505f90505b94509492505050565b5f60208284031215611e78575f80fd5b81356001600160e01b0319811681146106e3575f80fd5b5f805f60408486031215611ea1575f80fd5b83356001600160401b0380821115611eb7575f80fd5b9085019060808288031215611eca575f80fd5b90935060208501359080821115611edf575f80fd5b818601915086601f830112611ef2575f80fd5b813581811115611f00575f80fd5b876020828501011115611f11575f80fd5b6020830194508093505050509250925092565b5f5b83811015611f3e578181015183820152602001611f26565b50505f910152565b5f8151808452611f5d816020860160208601611f24565b601f01601f19169290920160200192915050565b602081525f6106e36020830184611f46565b5f60208284031215611f93575f80fd5b5035919050565b6001600160a01b0381168114610724575f80fd5b8035611fb981611f9a565b919050565b5f8060408385031215611fcf575f80fd5b823591506020830135611fe181611f9a565b809150509250929050565b5f60208284031215611ffc575f80fd5b81356106e381611f9a565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b038111828210171561203d5761203d612007565b60405290565b604051601f8201601f191681016001600160401b038111828210171561206b5761206b612007565b604052919050565b5f6020808385031215612084575f80fd5b82356001600160401b038082111561209a575f80fd5b818501915085601f8301126120ad575f80fd5b8135818111156120bf576120bf612007565b8060051b91506120d0848301612043565b81815291830184019184810190888411156120e9575f80fd5b938501935b83851015611b64578435925061210383611f9a565b82825293850193908501906120ee565b5f805f60608486031215612125575f80fd5b833561213081611f9a565b9250602084013561214081611f9a565b929592945050506040919091013590565b5f805f805f60808688031215612165575f80fd5b85356001600160401b038082111561217b575f80fd5b9087019060a0828a03121561218e575f80fd5b909550602087013590808211156121a3575f80fd5b818801915088601f8301126121b6575f80fd5b8135818111156121c4575f80fd5b8960208260051b85010111156121d8575f80fd5b602083019650809550505050604086013591506121f760608701611fae565b90509295509295909350565b5f808335601e19843603018112612218575f80fd5b8301803591506001600160401b03821115612231575f80fd5b602001915036819003821315611d6a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b5f6080823603121561229e575f80fd5b6122a661201b565b82356122b181611f9a565b8152602083810135818301526040808501359083015260608401356001600160401b03808211156122e0575f80fd5b9085019036601f8301126122f2575f80fd5b81358181111561230457612304612007565b612316601f8201601f19168501612043565b9150808252368482850101111561232b575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f60208284031215612391575f80fd5b815180151581146106e3575f80fd5b5f823561015e198336030181126123b5575f80fd5b9190910192915050565b5f808335601e198436030181126123d4575f80fd5b8301803591506001600160401b038211156123ed575f80fd5b602001915060a081023603821315611d6a575f80fd5b803560068110611fb9575f80fd5b5f60a08284031215612421575f80fd5b60405160a081018181106001600160401b038211171561244357612443612007565b60405261244f83612403565b8152602083013561245f81611f9a565b806020830152506040830135604082015260608301356060820152608083013560808201528091505092915050565b5f808335601e198436030181126124a3575f80fd5b8301803591506001600160401b038211156124bc575f80fd5b602001915060c081023603821315611d6a575f80fd5b5f60c082840312156124e2575f80fd5b60405160c081018181106001600160401b038211171561250457612504612007565b60405261251083612403565b8152602083013561252081611f9a565b8060208301525060408301356040820152606083013560608201526080830135608082015260a083013561255381611f9a565b60a08201529392505050565b803560058110611fb9575f80fd5b5f6020828403121561257d575f80fd5b6106e38261255f565b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156125aa575f80fd5b5051919050565b600681106125c1576125c1612586565b9052565b5f815180845260208085019450602084015f5b8381101561262e5781516125ed8882516125b1565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016125d8565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561262e5781516126618882516125b1565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c0909601959082019060010161264c565b600581106125c1576125c1612586565b602081526126d96020820183516001600160a01b03169052565b5f60208301516126f460408401826001600160a01b03169052565b5060408301516101608060608501526127116101808501836125c5565b91506060850151601f1985840301608086015261272e8382612639565b925050608085015161274360a08601826126af565b5060a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140818187015280870151838701525050508091505092915050565b5f808335601e198436030181126127ad575f80fd5b83016020810192503590506001600160401b038111156127cb575f80fd5b60a081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e57612804876127ff84612403565b6125b1565b8282013561281181611f9a565b6001600160a01b03168388015260408281013590880152606080830135908801526080808301359088015260a096870196909101906001016127ea565b5f808335601e19843603018112612863575f80fd5b83016020810192503590506001600160401b03811115612881575f80fd5b60c081023603821315611d6a575f80fd5b8183525f60208085019450825f5b8581101561262e576128b5876127ff84612403565b828201356128c281611f9a565b6001600160a01b039081168885015260408381013590890152606080840135908901526080808401359089015260a090838201356128ff81611f9a565b169088015260c09687019691909101906001016128a0565b80356001600160781b0381168114611fb9575f80fd5b5f808335601e19843603018112612942575f80fd5b83016020810192503590506001600160401b03811115612960575f80fd5b803603821315611d6a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b038311156129ad575f80fd5b8260051b80836020870137939093016020019392505050565b8183526020808401935f91600585811b8301820185855b88811015612a9e57858303601f19018a52813536899003609e19018112612a02575f80fd5b88018035845260a08682013560028110612a1a575f80fd5b85880152604082810135908601526060808301359086015260808083013536849003601e19018112612a4a575f80fd5b9092018781019290356001600160401b03811115612a66575f80fd5b80881b3603841315612a76575f80fd5b8282880152612a888388018286612996565b9d89019d965050509286019250506001016129dd565b509098975050505050505050565b608081525f610120873561015e19893603018112612ac8575f80fd5b60a060808501528801612aed828501612ae083611fae565b6001600160a01b03169052565b612af960208201611fae565b610140612b10818701836001600160a01b03169052565b612b1d6040840184612798565b610160888101529250612b35610280880184836127dc565b925050612b45606084018461284e565b87840361011f1901610180890152612b5e848284612892565b93505050612b6e6080840161255f565b612b7c6101a08801826126af565b5060a08301356101c087015260c08301356101e087015260e0830135610200870152610100808401356102208801528484013561024088015281840135610260880152612bcb60208d01612917565b6001600160781b03811660a08901529450612be860408d01612917565b6001600160781b03811660c08901529450612c0660608d018d61292d565b95509350607f199150818784030160e0880152612c2483868661296e565b9450612c3360808d018d61292d565b945092508187860301818801525050612c4d83838361296e565b925050508281036020840152612c648187896129c6565b9150508360408301526112cb60608301846001600160a01b03169052565b5f82516123b5818460208701611f24565b634e487b7160e01b5f52601160045260245ffd5b5f82612cc157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082018082111561061b5761061b612c93565b5f8451612d49818460208901611f24565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612dad816017850160208801611f24565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612dde816028840160208801611f24565b01602801949350505050565b828152604060208201525f610aaa6040830184611f46565b808202811582820484141761061b5761061b612c93565b5f81612e2757612e27612c93565b505f19019056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000818000a","storage":{"0x0":"0xff"}},"0x58a175bebc8ec21a94ea63aa5a28743945940ee6":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101165760003560e01c806391d14854116100a2578063c4d66de811610071578063c4d66de8146103bb578063ca15c873146103e1578063d547741f146103fe578063e375b64e1461042a578063ec87621c146104b957610116565b806391d14854146103635780639559c0bd146103a3578063a217fddf146103ab578063b017a30f146103b357610116565b80634794b430116100e95780634794b4301461024f57806349f5124b14610257578063609c92b81461025f5780638274664f146102675780639010d07c1461032457610116565b8063150b7a021461011b578063248a9ca3146101c65780632f2ff15d146101f557806336568abe14610223575b600080fd5b6101a96004803603608081101561013157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561016b57600080fd5b82018360208201111561017d57600080fd5b803590602001918460018302840111600160201b8311171561019e57600080fd5b5090925090506104c1565b604080516001600160e01b03199092168252519081900360200190f35b6101e3600480360360208110156101dc57600080fd5b50356104d2565b60408051918252519081900360200190f35b6102216004803603604081101561020b57600080fd5b50803590602001356001600160a01b03166104ea565b005b6102216004803603604081101561023957600080fd5b50803590602001356001600160a01b0316610556565b6101e36105b7565b6101e36105db565b6101e36105ff565b6102216004803603606081101561027d57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111600160201b831117156102e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610623945050505050565b6103476004803603604081101561033a57600080fd5b5080359060200135610fa2565b604080516001600160a01b039092168252519081900360200190f35b61038f6004803603604081101561037957600080fd5b50803590602001356001600160a01b0316610fc9565b604080519115158252519081900360200190f35b6101e3610fe7565b6101e3610fec565b6101e3610ff1565b610221600480360360208110156103d157600080fd5b50356001600160a01b0316611015565b6101e3600480360360208110156103f757600080fd5b50356110cf565b6102216004803603604081101561041457600080fd5b50803590602001356001600160a01b03166110e6565b6102216004803603608081101561044057600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561047b57600080fd5b82018360208201111561048d57600080fd5b803590602001918460018302840111600160201b831117156104ae57600080fd5b50909250905061113f565b6101e36114e6565b630a85bd0160e11b95945050505050565b6000818152602081905260409020600201545b919050565b60008281526020819052604090206002015461050d906105086114f8565b610fc9565b6105485760405162461bcd60e51b815260040180806020018281038252602f815260200180611f42602f913960400191505060405180910390fd5b61055282826114fd565b5050565b61055e6114f8565b6001600160a01b0316816001600160a01b0316146105ad5760405162461bcd60e51b815260040180806020018281038252602f8152602001806120bb602f913960400191505060405180910390fd5b610552828261156c565b7ff871896b17e9cb7a64941c62c188a4f5c621b86800e3d15452ece01ce56073df81565b7ff94915c6d1fd521cee85359239227480c7e8776d7caf1fc3bacad5c269b66a1481565b7fd4392723c111fcb98b073fe55873efb447bcd23cd3e49ec9ea2581930cd01ddc81565b60008051602061204b83398151915261063e816105086114f8565b6001906106de5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b50509250505060405180910390fd5b5060606106f26106ed846115db565b611656565b905060606107138260018151811061070657fe5b6020026020010151611656565b90507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60001b6107568260008151811061074957fe5b60200260200101516117d8565b141561095457600061076e8260018151811061074957fe5b905060006001600160a01b031661078b8360028151811061074957fe5b6001600160a01b0316146107d05760405162461bcd60e51b815260040180806020018281038252602981526020018061206b6029913960400191505060405180910390fd5b600086905060006107e78460038151811061074957fe5b9050816001600160a01b0316634f558e79826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b5051156108d35760408051632142170760e11b81523060048201526001600160a01b038581166024830152604482018490529151918416916342842e0e9160648082019260009290919082900301818387803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b5050505061094c565b816001600160a01b03166340c10f1984836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b505050505b505050610f9a565b7ff871896b17e9cb7a64941c62c188a4f5c621b86800e3d15452ece01ce56073df60001b6109888260008151811061074957fe5b1415610c085760006109a08260018151811061074957fe5b905060606109c1846002815181106109b457fe5b6020026020010151611920565b905060608180602001905160208110156109da57600080fd5b8101908080516040519392919084600160201b8211156109f957600080fd5b908301906020820185811115610a0e57600080fd5b82518660208202830111600160201b82111715610a2a57600080fd5b82525081516020918201928201910280838360005b83811015610a57578181015183820152602001610a3f565b5050505091909101604052505082519293508a9150600090505b82811015610bfd576000848281518110610a8757fe5b60200260200101519050826001600160a01b0316634f558e79826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d6020811015610aff57600080fd5b505115610b7b5760408051632142170760e11b81523060048201526001600160a01b038981166024830152604482018490529151918516916342842e0e9160648082019260009290919082900301818387803b158015610b5e57600080fd5b505af1158015610b72573d6000803e3d6000fd5b50505050610bf4565b826001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610bdb57600080fd5b505af1158015610bef573d6000803e3d6000fd5b505050505b50600101610a71565b505050505050610f9a565b7ff94915c6d1fd521cee85359239227480c7e8776d7caf1fc3bacad5c269b66a1460001b610c3c8260008151811061074957fe5b1415610f63576000610c548260018151811061074957fe5b905060006001600160a01b0316610c718360028151811061074957fe5b6001600160a01b031614610cb65760405162461bcd60e51b815260040180806020018281038252602981526020018061206b6029913960400191505060405180910390fd5b60008690506000610ccd8460038151811061074957fe5b9050816001600160a01b0316634f558e79826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d1357600080fd5b505afa158015610d27573d6000803e3d6000fd5b505050506040513d6020811015610d3d57600080fd5b505115610d9c5760408051632142170760e11b81523060048201526001600160a01b038581166024830152604482018490529151918416916342842e0e9160648082019260009290919082900301818387803b1580156108b657600080fd5b6060610dae866002815181106109b457fe5b90506060818060200190516020811015610dc757600080fd5b8101908080516040519392919084600160201b821115610de657600080fd5b908301906020820185811115610dfb57600080fd5b8251600160201b811182820188101715610e1457600080fd5b82525081516020918201929091019080838360005b83811015610e41578181015183820152602001610e29565b50505050905090810190601f168015610e6e5780820380516001836020036101000a031916815260200191505b506040525050509050836001600160a01b03166394d008ef8685846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ef3578181015183820152602001610edb565b50505050905090810190601f168015610f205780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b505050505050505050610f9a565b60405162461bcd60e51b815260040180806020018281038252602a815260200180611f71602a913960400191505060405180910390fd5b505050505050565b6000828152602081905260408120610fc0908363ffffffff6119ea16565b90505b92915050565b6000828152602081905260408120610fc0908363ffffffff6119f616565b601481565b600081565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef81565b60025460ff161561105e576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b61109c6040518060400160405280601781526020017f4d696e7461626c65455243373231507265646963617465000000000000000000815250611a0b565b6110a7600082610548565b6110bf60008051602061204b83398151915282610548565b506002805460ff19166001179055565b6000818152602081905260408120610fc390611aa9565b600082815260208190526040902060020154611104906105086114f8565b6105ad5760405162461bcd60e51b8152600401808060200182810382526030815260200180611fc36030913960400191505060405180910390fd5b60008051602061204b83398151915261115a816105086114f8565b6001906111c05760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156106cf5780601f106106a4576101008083540402835291602001916106cf565b50602082141561129f576000838360208110156111dc57600080fd5b5060408051913580835290519092506001600160a01b038088169289821692918b16917fe13244aa06bdc79480ed5fdc6ebe2bb37202fcdf33ecf45dc449f4201f3dc0879181900360200190a460408051632142170760e11b81526001600160a01b038981166004830152306024830152604482018490529151918716916342842e0e9160648082019260009290919082900301818387803b15801561128157600080fd5b505af1158015611295573d6000803e3d6000fd5b5050505050610f9a565b6060838360208110156112b157600080fd5b810190602081018135600160201b8111156112cb57600080fd5b8201836020820111156112dd57600080fd5b803590602001918460208302840111600160201b831117156112fe57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050509050846001600160a01b0316866001600160a01b0316886001600160a01b03167fdb55e3a0ae817693fd7b07170d81eab0eb2c239f36fcecbc98b6b58ac5667e7a846040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156113ca5781810151838201526020016113b2565b505050509050019250505060405180910390a48051601481111561141f5760405162461bcd60e51b815260040180806020018281038252602c81526020018061201f602c913960400191505060405180910390fd5b60005b818110156114db57866001600160a01b03166342842e0e8a3086858151811061144757fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156114b757600080fd5b505af11580156114cb573d6000803e3d6000fd5b5050600190920191506114229050565b505050505050505050565b60008051602061204b83398151915281565b335b90565b600082815260208190526040902061151b908263ffffffff611ab416565b15610552576115286114f8565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260208190526040902061158a908263ffffffff611ac916565b15610552576115976114f8565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6115e3611e6d565b6000825111611639576040805162461bcd60e51b815260206004820152601f60248201527f524c505265616465723a20494e56414c49445f42595445535f4c454e47544800604482015290519081900360640190fd5b506040805180820190915281518152602082810190820152919050565b606061166182611ade565b6116b2576040805162461bcd60e51b815260206004820152601860248201527f524c505265616465723a204954454d5f4e4f545f4c4953540000000000000000604482015290519081900360640190fd5b60006116bd83611b0a565b905060608167ffffffffffffffff811180156116d857600080fd5b5060405190808252806020026020018201604052801561171257816020015b6116ff611e6d565b8152602001906001900390816116f75790505b50905060006117248560200151611b96565b855190915081146117665760405162461bcd60e51b81526004018080602001828103825260278152602001806120946027913960400191505060405180910390fd5b60006117758660200151611c2f565b60208701510190506000805b858110156117cc5761179283611b96565b91506040518060400160405280838152602001848152508582815181106117b557fe5b602090810291909101015291810191600101611781565b50929695505050505050565b60006117e382611ade565b15611835576040805162461bcd60e51b815260206004820181905260248201527f524c505265616465723a204445434f44494e475f4c4953545f41535f55494e54604482015290519081900360640190fd5b81516021101561188c576040805162461bcd60e51b815260206004820152601e60248201527f524c505265616465723a20494e56414c49445f55494e545f4c454e4754480000604482015290519081900360640190fd5b600061189b8360200151611b96565b835190915081146118dd5760405162461bcd60e51b81526004018080602001828103825260278152602001806120ea6027913960400191505060405180910390fd5b60006118ec8460200151611c2f565b8451602080870151830180519394509184900392919083101561191657826020036101000a820491505b5095945050505050565b606060006119318360200151611b96565b835190915081146119735760405162461bcd60e51b8152600401808060200182810382526028815260200180611f9b6028913960400191505060405180910390fd5b60006119828460200151611c2f565b845190915081900360608167ffffffffffffffff811180156119a357600080fd5b506040519080825280601f01601f1916602001820160405280156119ce576020820181803683370190505b5090506000816020019050611916848860200151018285611c92565b6000610fc08383611cdd565b6000610fc0836001600160a01b038416611d41565b806040516020018082805190602001908083835b60208310611a3e5780518252601f199092019160209182019101611a1f565b51815160209384036101000a60001901801990921691161790527f3a20494e53554646494349454e545f5045524d495353494f4e530000000000009190930190815260408051808303600519018152601a909201905280516105529550600194509201919050611e87565b6000610fc382611d59565b6000610fc0836001600160a01b038416611d5d565b6000610fc0836001600160a01b038416611da7565b6020810151805160009190821a9060c0821015611b00576000925050506104e5565b5060019392505050565b600080600090506000611b208460200151611c2f565b602085015185519181019250015b80821015611b8d57611b3f82611b96565b8201915080821115611b825760405162461bcd60e51b815260040180806020018281038252602c815260200180611ff3602c913960400191505060405180910390fd5b600190920191611b2e565b50909392505050565b80516000908190811a6080811015611bb15760019150611c28565b60b8811015611bc657607e1981019150611c28565b60c0811015611bf35760b78103600185019450806020036101000a85510460018201810193505050611c28565b60f8811015611c085760be1981019150611c28565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b8051600090811a6080811015611c495760009150506104e5565b60b8811080611c64575060c08110801590611c64575060f881105b15611c735760019150506104e5565b60c0811015611c875760b5190190506104e5565b60f5190190506104e5565b80611c9c57611cd8565b5b60208110611cbc578251825260209283019290910190601f1901611c9d565b8251825160208390036101000a60001901801990921691161782525b505050565b81546000908210611d1f5760405162461bcd60e51b8152600401808060200182810382526022815260200180611f206022913960400191505060405180910390fd5b826000018281548110611d2e57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6000611d698383611d41565b611d9f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fc3565b506000610fc3565b60008181526001830160205260408120548015611e635783546000198083019190810190600090879083908110611dda57fe5b9060005260206000200154905080876000018481548110611df757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611e2757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610fc3565b6000915050610fc3565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ec857805160ff1916838001178555611ef5565b82800160010185558215611ef5579182015b82811115611ef5578251825591602001919060010190611eda565b50611f01929150611f05565b5090565b6114fa91905b80821115611f015760008155600101611f0b56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744d696e7461626c654552433732315072656469636174653a20494e56414c49445f5349474e4154555245524c505265616465723a2042595445535f4445434f4445445f4c454e4754485f4d49534d41544348416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65524c505265616465723a204e554d5f4954454d535f4445434f4445445f4c454e4754485f4d49534d415443484d696e7461626c654552433732315072656469636174653a20455843454544535f42415443485f4c494d4954241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b084d696e7461626c654552433732315072656469636174653a20494e56414c49445f5245434549564552524c505265616465723a204c4953545f4445434f4445445f4c454e4754485f4d49534d41544348416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66524c505265616465723a2055494e545f4445434f4445445f4c454e4754485f4d49534d41544348a164736f6c6343000606000a","storage":{"0x1":"0x63","0x2":"0x1","0x73d5d1a274bdea1400ad3ea4d982f594abdfd528cde1486b6c617faa3ec116":"0x1","0x89011777cfe6194dd982545e7eb24725dfe9a1aacae299c76fc48ef5017ae650":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x89011777cfe6194dd982545e7eb24725dfe9a1aacae299c76fc48ef5017ae651":"0x27935e7e85db3c4e7885eb828b9e889ba69a4e7f","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6":"0x4d696e7461626c654552433732315072656469636174653a20494e5355464649","0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7":"0x4349454e545f5045524d495353494f4e53000000000000000000000000000000","0xba75a66b8132bebab85d36fd3638083da57ae3d78fbcd8cc41f73514287dadaf":"0x1","0xe6c7d8231a06d7cb67831aeabcbd43ba24e5e4c6569cf23405f1e558de8580e0":"0x2","0xe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645":"0x2","0xe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee647":"0x0","0xf0df3dcda05b4fbd9c655cde3d5ceb211e019e72ec816e127a59e7195f2cd7f5":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa"}},"0x5cc819c9915eadfcebd76952b8c1bc36cadd7376":{"nonce":2,"balance":"0x0","code":"0x608060405260043610610103575f3560e01c8063a900866b11610092578063f07ec37311610062578063f07ec373146102f7578063f2d12b1214610316578063f47b774014610329578063fb0f3ee114610116578063fd9f1e101461034c575f80fd5b8063a900866b1461028a578063b3a34c4c146102be578063e7acab24146102d1578063ed98a574146102e4575f80fd5b80637423eb3c116100d85780637423eb3c146101f757806379df72bd1461020b57806387201b411461022a578063881477321461024b578063a81744041461026a575f80fd5b801561011657806306fdde031461013e57806346423aa71461015f5780635b34b966146101d5575f80fd5b366101125761011061036b565b005b5f80fd5b610129610124366004615115565b6103f9565b60405190151581526020015b60405180910390f35b348015610149575f80fd5b50610152610408565b604051610135919061518f565b34801561016a575f80fd5b506101b36101793660046151a1565b5f9081526001602052604090205460ff808216926101008304909116916001600160781b03620100008204811692600160881b9092041690565b6040805194151585529215156020850152918301526060820152608001610135565b3480156101e0575f80fd5b506101e9610417565b604051908152602001610135565b348015610202575f80fd5b50610110610420565b348015610216575f80fd5b506101e96102253660046151b8565b6104c1565b61023d61023836600461524c565b6104f8565b6040516101359291906153f0565b348015610256575f80fd5b5061012961026536600461543f565b610571565b61027d61027836600461547d565b61058f565b60405161013591906154e3565b348015610295575f80fd5b506101e96102a43660046154f5565b6001600160a01b03165f9081526002602052604090205490565b6101296102cc36600461550e565b61062a565b6101296102df366004615553565b6106a3565b61023d6102f23660046155d7565b6106e1565b348015610302575f80fd5b506101e96103113660046154f5565b610784565b61027d610324366004615677565b6107a1565b348015610334575f80fd5b5061033d6107ea565b60405161013593929190615719565b348015610357575f80fd5b5061012961036636600461543f565b610801565b7f000000000000000000000000000000000000000000000000000000000000000180156103b357600263929eee145c146103b05763a61be9f05f52346020526024601cfd5b50565b63929eee1454806103e057600263929eee145c146103dc5763a61be9f05f52346020526024601cfd5b5050565b600381146103dc5763a61be9f05f52346020526024601cfd5b5f61040261080c565b92915050565b60606104126109c0565b905090565b5f6104126109d8565b63929eee14546001147f000000000000000000000000000000000000000000000000000000000000000180610453575080155b1561047157604051630f45b98b60e41b815260040160405180910390fd5b61049a7f000000000000000000000000145908bbcfc7b258e4d4d9a586f6e3249ae80216610a45565b6104b7576040516370a4078f60e01b815260040160405180910390fd5b5f63929eee145550565b5f806104cd6004610aa3565b90506104f16104e282610ab35b63ffffffff16565b610140830135610b30565b3590565b9392505050565b60608061055d61051361050b6004610aa3565b610c746104da565b61052a61052260046020610cdc565b610cfa6104da565b61054161053960046040610cdc565b610d526104da565b61055061053960046060610cdc565b89338a15028a0189610daa565b915091509b509b9950505050505050505050565b5f6104f161058a6105826004610aa3565b610de46104da565b610e3c565b606061061f6105a96105a16004610aa3565b610f5d6104da565b604080515f8082526020820190925290610601565b6105ee6040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816105be5790505b5061061961061160046020610cdc565b610fb56104da565b3361100d565b90505b949350505050565b5f6104f161064361063b6004610aa3565b61104b6104da565b604080515f808252602082019092529061069b565b6106886040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816106585790505b5084336110c1565b5f6106d76106bc6106b46004610aa3565b6112406104da565b6106cb61052260046020610cdc565b853386150286016110c1565b9695505050505050565b6060806107736106f46105a16004610aa3565b604080515f808252602082019092529061074c565b6107396040805160a081019091525f808252602082019081526020015f81526020015f8152602001606081525090565b8152602001906001900390816107095790505b5061075c61053960046020610cdc565b61076b61053960046040610cdc565b883389610daa565b915091509850989650505050505050565b6001600160a01b0381165f90815260208190526040812054610402565b60606107dc6107b361050b6004610aa3565b6107c261052260046020610cdc565b6107d161061160046040610cdc565b33861502860161100d565b90505b979650505050505050565b60605f806107f661129c565b925092509250909192565b5f6104f183836112e8565b5f61012435600281901c90600316600182118334158214806108315761083134611423565b506003841160a0810260240135906502030203010160d01b861a905f630101020360d01b881a6108648882898888611434565b9096509150506101c4600583901b01355f87600581111561088757610887615329565b036108bc5760443560243517156108a557636ab37ce75f526004601cfd5b6108af8482611751565b6108b7611809565b61099d565b6040805160208082528183019092525f9160208201818036833701905050905060028a60058111156108f0576108f0615329565b036109135761090e60c4356084353360e435610104355b8787611889565b610988565b60038a600581111561092757610927615329565b036109455761090e60c4356084353360e435610104355b87876118d4565b60048a600581111561095957610959615329565b036109735761090e60243533608435604435606435610907565b6109886024353360843560443560643561093e565b610992848261190a565b61099b816119c4565b505b6109a88689846119e8565b6109b0611a5e565b6001995050505050505050505090565b6060602080526707536561706f727460475260606020f35b5f6109e1611ab1565b600143034060801c335f525f60205260405f208054820192508281555050336001600160a01b03167f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f82604051610a3a91815260200190565b60405180910390a290565b5f816001600160a01b0316600a5a610a5d9190615773565b6040515f8181818686fa925050503d805f8114610a95576040519150601f19603f3d011682016040523d82523d5f602084013e610a9a565b606091505b50909392505050565b5f813563ffffffff168201610402565b5f610ac661016060408051918201905290565b9050610ad58282610140611b28565b610af2610aeb610ae6846040610cdc565b611b31565b6040830152565b5f610b06610b01846060610cdc565b611b84565b9050610b13816060840152565b610b26610b1e825190565b610140840152565b50919050565b0190565b610140820151604080519084015180515f939284927fa66999307ad1bb4fde44d13a5d710bd7718e0c87c1eef68a571629fbf5b93d0292602090910190845b81811015610b9c578251601f1901805186825260c082208652905260209384019390920191600101610b6f565b508060051b6040512094505050505f7f42d81c6929ffdc4eb27a0808e40e82516ad42296c166065de7f812492304ff6e915060405160206060890151015f5b86811015610c08578151601f1901805186825260e082208552905260209283019290910190600101610bdb565b505060408051600587901b9020601f198a0180517ffa445660b7e21515a59617fcd68910b487aa5808b8abda3d78bc85df364b2c2f8252928b01805197815260608c018051938152610140909c019a8b5261018082209390915295909552939097525050925250919050565b5f8063ffffffff8335169050600581901b610c986020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610cca610cc4610cbf8484610cdc565b611240565b82850152565b602001610ca7565b5050505050919050565b5f6104f163ffffffff610cf46104ed8686610b2c8516565b16840190565b5f8063ffffffff8335169050600581901b610d1e6020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610d4a610cc4610d458484610cdc565b611bc7565b602001610d2d565b5f8063ffffffff8335169050600581901b610d766020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610da2610cc4610d9d8484610cdc565b611c09565b602001610d85565b60608036155f80610dbe8c8c85898b611c4c565b91509150610dd18c8b8b8b8b8787612029565b9450945050505097509795505050505050565b5f8063ffffffff8335169050600581901b610e086020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610e34610cc4610e2f8484610cdc565b61215b565b602001610e17565b5f610e45611ab1565b5f805f80855190505f5b81811015610f50575f878281518110610e6a57610e6a615792565b60209081029190910101518051909150600481608001516004811115610e9257610e92615329565b03610e9e575050610f48565b80519450610eab8161219e565b5f8181526001602052604081209850909650610ecd90879089903615156121d7565b50865460ff16610f455780610140015181606001515114610ef057610ef0612265565b610eff85878460200151612272565b865460ff191660011787556040517ff280791efe782edcf06ce15c8f4dff17601db3b88eb3805a0db7d77faf757f0490610f3c9088908490615895565b60405180910390a15b50505b600101610e4f565b5060019695505050505050565b5f8063ffffffff8335169050600581901b610f816020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257610fad610cc4610fa88484610cdc565b61104b565b602001610f90565b5f8063ffffffff8335169050600581901b610fd96020820160408051918201905290565b828152925060208381019085015f5b83811015610cd257611005610cc46110008484610cdc565b61230e565b602001610fe8565b60605f36151590505f806110258888858b5189611c4c565b9150915061103282612341565b61103f8887848885612380565b98975050505050505050565b5f61105e61020060408051918201905290565b60a0810180825290915061107a61107484610aa3565b82612453565b61108660016020840152565b61109260016040840152565b6110af6110a86110a3856020610cdc565b612489565b6060840152565b610b266110ba6124b1565b6080840152565b835160808101515f91906110e860048260048111156110e2576110e2615329565b146124cb565b5f80806110f78a36151561256c565b60408051600180825281830190925293965091945092505f9190816020015b61111e615027565b8152602001906001900390816111165790505090508a815f8151811061114657611146615792565b602002602001018190525061115b818b612764565b6111678684848b6128dd565b6040805160018082528183019092525f91602080830190803683375091925050503615156004878181111561119e5761119e615329565b146111c1576111af8d83885f6129dd565b6111bb86868684612a2f565b506111d3565b6111d0888e6080015183612b33565b95505b6111de888c8c612c03565b85825f815181106111f1576111f1615792565b6020026020010181815250506112088d8388612d26565b61122586895f01518a602001518d8c604001518d60600151612df3565b61122d611a5e565b5060019c9b505050505050505050505050565b5f61125361020060408051918201905290565b905061126760208381019083016040611b28565b60a0810180825261127a61107484610aa3565b61128b6110a86110a3856060610cdc565b610b266110ba6110a3856080610cdc565b60605f805f6112a9612e58565b90505f7f000000000000000000000000bdefcf6429d0ac68236a6beb321cbd2ce66b463c905060605f5281602052806040526303312e3660635260a05ff35b5f6112f1611ab1565b5f8083815b81811015611408573687878381811061131157611311615792565b90506020028101906113239190615977565b90505f61133360208301836154f5565b90505f61134660408401602085016154f5565b90505f61135960a0850160808601615996565b905081331483331417156004821417871796505f61138d61138261137a8790565b610ab36104da565b866101400135610b30565b5f8181526001602052604090819020805461ffff19166101001781559051909a509091506001600160a01b0380851691908616907f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d906113f09085815260200190565b60405180910390a385600101955050505050506112f6565b5050801561141857611418612f35565b506001949350505050565b63a61be9f05f52806020526024601cfd5b5f8061143f5f6124cb565b611447612f42565b426101643511154261014435111715611475576321ccfeb75f5261014435602052610164356040526044601cfd5b610204356102643510156114905763466aa6165f526004601cfd5b7f42d81c6929ffdc4eb27a0808e40e82516ad42296c166065de7f812492304ff6e608081905260a08790526060602460c037604060646101203760e060802061016052610264356102043560051b6102a0016001820181526020810190508881526080602460208301376101608860a0528760c0525f60e0525f6102043593505f5b84811015611566578060400261028401602081610100376040816101203760208101358317925060208401935060e0608020845260a0850194508b85528a6020860152604081606087013750600101611512565b6001850160051b610160206060526102643594505b848110156115b6578060400261028401925060a0840193508a845289602085015260408360608601376020830135919091179060010161157b565b506001600160a01b038111156115d3576339f3e3fd5f526004601cfd5b50505050505f7fa66999307ad1bb4fde44d13a5d710bd7718e0c87c1eef68a571629fbf5b93d029050806080528360a052606060c460c0376020610104610120375060c06080205f9081526020812060e05260843590611647826001600160a01b03165f9081526020819052604090205490565b7ffa445660b7e21515a59617fcd68910b487aa5808b8abda3d78bc85df364b2c2f60808190529091506040608460a03760605161010052896101205260a061014461014037816101e05261018060802094505050506102043560051b61018001828152336020820152608060408201526101206060820152600160808201528360a0820152606060c460c083013760a061026435026101e00160a4356084357f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318385a35f60605260608101820160405250505f61172383612f8d565b905061172f8389612fde565b7101000000000000000000000000000001000182559150509550959350505050565b60c43560843560e4356101043584156117b9575f6040519050632671a55160e11b815260206004820152600160248201528660448201528460648201528360848201523360a48201528260c48201528160e48201526117b38682610104613033565b50611801565b60028660058111156117cd576117cd615329565b036117f457806001146117e3576117e3816130ea565b6117ef848433856130fb565b611801565b61180184843385856131b0565b505050505050565b346064356084356102643560061b5f80805b8381101561185a5761028481013592506102a481013591508683111561184357611843613287565b82870396506118528284613294565b60400161181b565b508585111561186b5761186b613287565b6118758486613294565b848611156118015761180133868803613294565b61189381836132ca565b816118ba57826001146118a9576118a9836130ea565b6118b5878787876130fb565b6118cb565b6118cb828260028a8a8a8a8a6132e8565b50505050505050565b6118dd83613367565b6118e781836132ca565b816118f9576118b587878787876131b0565b6118cb828260038a8a8a8a8a6132e8565b5f805f805f861561192f57505060843592503391505060c4356101043560e435611944565b50339350506084359150506024356064356044355b801561195257611952613379565b50600586901b6101e403356102643560061b5f80805b838110156119a95761028481013592506102a481013591508a156119935761199083876159b4565b95505b6119a1878a8486898f613386565b604001611968565b506119b886898988888e613386565b50505050505050505050565b60408151146119d05750565b5f6119dc826020015190565b90506103dc81836133bb565b611a048260a4355b331415600182116004909210919091161690565b15611a5957805f611a13825190565b9050608081901c63ffffffff8216611a3484826317b1f94282526001905250565b601c840163fb5014fc6060529350611a5060a4358886856133df565b5f6060526118cb565b505050565b7f00000000000000000000000000000000000000000000000000000000000000018015611a8f575f63929eee145d50565b63929eee145480611aa5575f63929eee145d5050565b50600163929eee145550565b7f00000000000000000000000000000000000000000000000000000000000000018015611af05763929eee145c156103b057637fa8a9875f526004601cfd5b63929eee145480611b135763929eee145c156103dc57637fa8a9875f526004601cfd5b600181146103dc57637fa8a9875f526004601cfd5b80838337505050565b5f63ffffffff8235166040519150808252602082018160051b81018060a084026020870183378293505b81841015611b745780845260209093019260a001611b5b565b60405250919392505050565b9052565b5f63ffffffff8235166040519150808252602082018160051b81018060c084026020870183378293505b81841015611b745780845260209093019260c001611bae565b5f611bd960a060408051918201905290565b9050611be782826080611b28565b611c04611bfd611bf8846080610cdc565b613427565b6080830152565b919050565b5f63ffffffff8235166040519150808252602082018160051b8101808360061b6020870183378293505b81841015611b7457808452602090930192604001611c33565b60605f611c5960016124cb565b86515f90600160e61b82351690806001600160401b03811115611c7e57611c7e61574b565b604051908082528060200260200182016040528015611ca7578160200160208202803683370190505b50945060010160051b91505f60205b83811015611ea8575f611ccc8c83613cce6104da565b90505f805f611cdb848e61256c565b6001600160781b0382166020880152919450925090505f829003611d025750505050611ea0565b6001600160781b0381166040808601919091528a8601849052845160a081015160c0820151608083015192909301518051600184119d909d179c600490931099509092915f5b81811015611dea575f838281518110611d6357611d63615792565b602002602001015190508b8151108d179c505f611d858989846080015161345e565b90508160800151826060015103611da25760608201819052611db7565b611db18989846060015161345e565b60608301525b5f611dd08360600151838a8a611dcb361590565b61349a565b606084018190526080909301929092525050600101611d48565b5087516060015180515f5b81811015611e94575f838281518110611e1057611e10615792565b602002602001015190505f611e2a8b8b846080015161345e565b90508160800151826060015103611e475760608201819052611e5c565b611e568b8b846060015161345e565b60608301525b5f611e718360600151838c8c611dcb36151590565b6060840181905260a0840180516080909501949094529092525050600101611df5565b50505050505050505050505b602001611cb6565b50506001600160e61b018103611ec057611ec06134ed565b50611ecb8888612764565b5f8060205b8381101561200e578581015192508215612006575f611ef28c83613cce6104da565b9050885f03611f0d575f878301819052602090910152612006565b60048151608001516004811115611f2657611f26615329565b14611fa957611f3f8188866001600587901c038e6134fa565b611f55575f878301819052602090910152612006565b602080820151604083015183516080810151930151611f8e9388936001600160781b039081169316913314156001909111168e17612a2f565b611fa4575f878301819052602090910152612006565b611fd4565b611fbb815f015182608001518c612b33565b878301819052935083611fd4575f602090910152612006565b886001900398505f815f01519050611fff85825f015183602001518c85604001518660600151612df3565b6001935050505b602001611ed0565b508061201c5761201c613555565b5050509550959350505050565b85518551606091829161203c81836159c7565b6001600160401b038111156120535761205361574b565b60405190808252806020026020018201604052801561208c57816020015b61207961505a565b8152602001906001900390816120715790505b5092505f5b828110156120e4576120bf8c5f8d84815181106120b0576120b0615792565b60200260200101518c8c613562565b8482815181106120d1576120d1615792565b6020908102919091010152600101612091565b505f5b8181101561213d576121168c60018c848151811061210757612107615792565b60200260200101518c5f613562565b848483018151811061212a5761212a615792565b60209081029190910101526001016120e7565b5061214b8b84888a896135b1565b9350505097509795505050505050565b5f61216c6040808051918201905290565b905061218661218261217d84610aa3565b61389a565b8252565b611c046121976110a3846020610cdc565b6020830152565b5f6121b38260600151518361014001516138b9565b81516001600160a01b03165f90815260208190526040902054610402908390610b30565b82545f90610100900460ff16156121fe5781156121f7576121f7856138c9565b505f610622565b83546201000090046001600160781b0316801561225957831561222957612224866138da565b612259565b8454600160881b90046001600160781b0316811061225957821561225057612250866138eb565b5f915050610622565b50600195945050505050565b632165628a5f526004601cfd5b33831480156122815750505050565b5f61228a612e58565b61190160f01b5f9081526002828152602287815260428320908390528651939450929190601f601d840116106102e260621984011016156122f4576122cf86886138fc565b61190160f01b5f908152600286905260228281526042822091905290975090506122f7565b50815b612304888285858a613992565b5050505050505050565b5f61231f6040808051918201905290565b9050612330612182610d9d84610aa3565b611c04612197610d9d846020610cdc565b80518060051b6040019050602082038051602082527f4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e78383a190525050565b8351606090806001600160401b0381111561239d5761239d61574b565b6040519080825280602002602001820160405280156123d657816020015b6123c361505a565b8152602001906001900390816123bb5790505b5091505f5b81811015612439575f8782815181106123f6576123f6615792565b6020026020010151905061241389825f0151836020015185613adb565b84838151811061242557612425615792565b6020908102919091010152506001016123db565b5061244787838787876135b1565b50505b95945050505050565b6124608282610160611b28565b612471610aeb610ae6846040610cdc565b6103dc612482610b01846060610cdc565b6060830152565b6040518135601f0163ffffffe01660200180838337913563ffffffff16815290810160405290565b5f6124c3602060408051918201905290565b5f8152905090565b7f000000000000000000000000000000000000000000000000000000000000000180156125185763929eee145c1561250a57637fa8a9875f526004601cfd5b8160010163929eee145d5050565b63929eee14548061254a5763929eee145c1561253b57637fa8a9875f526004601cfd5b8260010163929eee145d505050565b6001811461255f57637fa8a9875f526004601cfd5b505060020163929eee1455565b5f805f80855f015190506125898160a001518260c0015187613c80565b61259c57505f925082915081905061275d565b602086015160408701516001600160781b0391821694501691505f6004826080015160048111156125cf576125cf615329565b036125fc57600183850218905080156125ea576125ea613ca3565b506001935083925082915061275d9050565b50818311831517801561261157612611613ca3565b608082015160011615848411161561262b5761262b613cb0565b6126348261219e565b5f81815260016020526040812091965061265290879083908a6121d7565b61266557505f935083925061275d915050565b805460ff1661268057612680835f0151878a60600151612272565b8054608881901c8061269457869150612757565b6001600160781b038260101c169150600186036126b8578181039650809550612757565b8086036126d357908601858103868211029096039590612757565b80860296810291909502810186810387821102918290039695919003906001600160781b0386111561275757612717565b5f5b8215610b2657908290069190612706565b61272a6127248784612704565b88612704565b8015019687900496909504946001600160781b0386111561275757634e487b715f5260116020526024601cfd5b50505050505b9250925092565b805182515f5b82811015612853575f84828151811061278557612785615792565b602002602001015190505f815f015190508381106127aa576127aa8260200151613cbd565b5f8782815181106127bd576127bd615792565b6020026020010151905080602001516001600160781b03165f036127e35750505061284b565b80516040808201519085015163bfb3f8ce5f8760200151600181111561280b5761280b615329565b14612827575f61281c856060613cce565b9350636088d7de9150505b8251821061283857805f526004601cfd5b612843838389613cd9565b505050505050505b60010161276a565b505f5b818110156128d6575f85828151811061287157612871615792565b6020026020010151905080602001516001600160781b03165f0361289557506128ce565b8051608081015160608201516128b29085908363a8930e9a613d8c565b6128ca8483604001518363d69293326104da613d8c90565b5050505b600101612856565b5050505050565b60a084015160c08501516040860151515f805b8281101561295a575f8960400151828151811061290f5761290f615792565b602002602001015190505f815f01519050801584179350505f612946826060015183608001518c8c8b8b612941361590565b613df3565b6060830152506080018690526001016128f0565b5060808801516004811082168015612974576129746134ed565b505050506060860151515f5b81811015612304575f8860600151828151811061299f5761299f615792565b602002602001015190505f6129c4826060015183608001518b8b8a8a61294136151590565b60608301525060a0810151608090910152600101612980565b8351608081015160208201513314156001821160049092109190911616156128d6575f80612a12858489608001518988613e2e565b63fb5014fc6060529092509050611a5083602001518684846133df565b5f848152600160205260408120805482908290608881901c80612a5457889150612adc565b6001600160781b038260101c169150808803612a7857908801878111935090612adc565b97880297808802979190910288018781119350906001600160781b038083119089111715612adc57612aaa8883612704565b8015019788900497909104906001600160781b038083119089111715612adc57634e487b715f5260116020526024601cfd5b508215612b15578515612b09576040516310fda3e160e01b8152600481018a905260240160405180910390fd5b5f945050505050610622565b8660881b8160101b1760011782556001945050505050949350505050565b5f83610140015184606001515114612b4d57612b4d612265565b83515f8080612b5c8888613fac565b915091505f8082845f885af16001600160a01b0385165f908152600260205260409020805460018101909155606086901b189550925082612bbb578515612bae57612ba5614056565b612bae8561409d565b505f93506104f192505050565b505050505f805f612bd8876040015188606001516104da6140ae90565b925092509250825f14612bee57612bee8461409d565b60408701919091526060860152509392505050565b6040805160208082528183019092525f916020820181803683375050506040850151519091505f5b81811015612c7b575f86604001518281518110612c4a57612c4a615792565b60200260200101519050846080820152612c7281885f0151896101200151876104da61432790565b50600101612c2b565b50506060840151515f90815b81811015612d09575f87606001518281518110612ca657612ca6615792565b602002602001015190505f6005811115612cc257612cc2615329565b81516005811115612cd557612cd5615329565b03612cf1574793508381606001511115612cf157612cf1613287565b612d00813389886143276104da565b50600101612c87565b5050612d14826119c4565b504780156128d6576128d63382613294565b8251608081015160208201515f92839283928392916004811060019091111633909114151615612d8857612d69612d6361010083015190565b5190565b8861441c565b9093509150612d7a60208201612d5f565b945063fb5014fc9350612dd4565b600481608001516004811115612da057612da0615329565b0361230457805194505f8560601b9050612dc187838b608001518b8561445d565b639397928596509094509250612dd49050565b612dde6060859052565b612dea858785856133df565b5f606052612304565b60608290506060829050856001600160a01b0316876001600160a01b03167f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f318a888686604051612e469493929190615a13565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000005394614612f10575060408051608080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f9081527f32b5c112df393a49218d7552f96b2eeb829dfb4272f4f24eef510a586b85feef6020527f95f740a33d720b7cd93c75d515ac95ca3bbaa2594cce46ea48e00974ea8fcd14855246606090815230845260a08220949095529093529190915290565b507f8bebed3dbe91a82da0dc94c8d370c160ad6db1b32164303e65b8544bae7e2f5590565b63fed398fc5f526004601cfd5b600435602014610224356102401416610244356102606102643560061b01141660186101243510600160a01b60843560a4351760c4356024351717101616806103b0576103b0614528565b5f8181526001602081905260409091209060843590612fb290849084903615156121d7565b50815460ff16610b2657610b268184612fd9602463ffffffff6102443516016124896104da565b612272565b5f612feb8260a4356119f0565b15610402575f805f612ffc86614535565b63fb5014fc6060529194509250905061301c60a43587601c8601856133df565b5f60605260209190910160801b1781529392505050565b604080517f000000000000000000000000bdefcf6429d0ac68236a6beb321cbd2ce66b463c60ff60a01b175f90815260208690527f6ca1fbc523294317ba2167126e2f1bf211f6e6d2140e056b7e95702bf83e833f83526055600b20919092526001600160a01b031690505f805f805260205f85875f875af191505f519050816130c8576130bf614056565b6130c8836145ed565b6001600160e01b03198116632671a55160e11b146118015761180186846145fe565b6369f958275f52806020526024601cfd5b833b61311257635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af1806131a2573d1561318057601f3d0160051c8260051c8160030281831115613169578183036003028280028480020360091c01015b5a60208201101561317c573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b6131c757635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af18061326c573d1561324b57601f3d0160051c8560051c8160030281831115613234578183036003028280028480020360091c01015b5a602082011015613247573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b638ffff9805f526004601cfd5b61329d81613367565b5f805f805f85875af1905080611a59576132b5614056565b63bc806b965f5282602052816040526044601cfd5b5f6132d6836020015190565b9050818114611a5957611a59836119c4565b5f60208851036133225750604080885260208089018a9052632671a55160e11b918901919091526044880152600160648801819052613331565b50606487018051600101908190525b603c60c082028901038781528660208201528560408201528460608201528360808201528260a082015250505050505050505050565b806103b0576391b3e5145f526004601cfd5b636ab37ce75f526004601cfd5b61338f83613367565b61339981836132ca565b816133aa576117ef86868686614613565b611801828260018989895f8a6132e8565b6064810151604082019060c0026044016133d6848383613033565b50506020905250565b5f806001600160e01b03198451165f805260205f85875f8b5af15f51909350149050816134185761340e614056565b846080526024607cfd5b8061180157846080526024607cfd5b5f8063ffffffff83351690506001810160051b61344a8160408051918201905290565b9250613457848483611b28565b5050919050565b5f82840361346d5750806104f1565b82848309156134835763c63cf0895f526004601cfd5b5f61348e8584615aaf565b93909304949350505050565b5f8486146134e357838303428590038082035f6134b7838a615aaf565b6134c1838c615aaf565b6134cb91906159c7565b9050858487830304018115150294505050505061244a565b5092949350505050565b6312d3f5a35f526004601cfd5b8451608081015160208201515f92916004811060019091111633909114151615610f50575f8061353187848b608001518b8a613e2e565b9150915061354b836020015188848463fb5014fc8a614707565b935050505061244a565b63d5da9a1b5f526004601cfd5b61356a61505a565b83515f0361357b5761357b85614774565b5f85600181111561358e5761358e615329565b036135a45761359f86858385614785565b61244a565b61244a86858333876148f5565b84516060905f816001600160401b038111156135cf576135cf61574b565b6040519080825280602002602001820160405280156135f8578160200160208202803683370190505b506040805160208082528183019092529192505f9190602082018180368337505089519192505060010160051b60205b81811015613687575f61363e8b83613cce6104da565b8051606081015191925090801561367c57478111825115161561366857638ffff9805f526004601cfd5b61367c828460200151856040015189614327565b505050602001613628565b50505f5b838110156137f3575f8a82815181106136a6576136a6615792565b6020026020010151905080602001516001600160781b03165f036136ed575f8483815181106136d7576136d7615792565b91151560209283029190910190910152506137eb565b600184838151811061370157613701615792565b911515602092830291909101909101528051604081015180515f5b81811015613786575f83828151811061373757613737615792565b6020026020010151905080606001515f1461377357608081018051908e9052855161012087015161376d9184918c6143276104da565b60808201525b608081015160609091015260010161371c565b505050606081015180515f5b818110156137e5575f8382815181106137ad576137ad615792565b602002602001015190505f81606001519050805f146137d1576137d1888483614a2c565b5060a0810151606090910152600101613792565b50505050505b60010161368b565b506137fd816119c4565b47801561380e5761380e3382613294565b8515613884575f5b848110156138825783818151811061383057613830615792565b60200260200101511561387a5761387a8b828151811061385257613852615792565b60200260200101518a8b848151811061386d5761386d615792565b6020026020010151612d26565b600101613816565b505b61388c611a5e565b509098975050505050505050565b5f6138ad61016060408051918201905290565b9050611c048282612453565b808210156103dc576103dc614a45565b631a5155745f52806020526024601cfd5b63ee9e0e635f52806020526024601cfd5b6310fda3e15f52806020526024601cfd5b5f805f84516001811660410380820360051c9250808752806020018701915050805160e81c6003820191506001811660051b868152825160208218525060015b838110156139685760405f2082821c60051b60209081169182529384018051919094185260010161393c565b50505060405f2091505f61397b82614a52565b5f9081526020939093525050604090209392505050565b5f805f528151602083038051826041035f600182116139f557604087015160608801515f1a83156139d657601b8260ff1c0190506001600160ff1b03821660408a01525b88528a855260205f60808760015afa508385528588526040880152505f515b8a148a1515169450849050613abe57858552604082526044850380516040870351630b135d3f60e11b835289604089035260205f60648b01858f5afa96508615613ab257630b135d3f60e11b5f5114613ab2578b3b15613a5c57634f7fb80d5f526004601cfd5b6001866041031115613a7557638baa579f5f526004601cfd5b64010100000060608901515f1a1a15604187141615613aa557631f003d0a5f5260608801515f1a6020526024601cfd5b63815e1d645f526004601cfd5b8385529152603f198601525b5050508061180157613ace614056565b634f7fb80d5f526004601cfd5b613ae361505a565b8251158451151715613afc576398e9db6e5f526004601cfd5b613b0461505a565b613b118685835f806148f5565b805160608101515f03613b2657509050610622565b613b368787858460800151614785565b82516040828101519082015160208085015190840151855185511891181791181715613b6d5763bced929d5f52846020526024601cfd5b806060015182606001511115613bf4575f865f81518110613b9057613b90615792565b60200260200101519050816060015183606001510389825f015181518110613bba57613bba615792565b60200260200101515f015160600151826020015181518110613bde57613bde615792565b6020026020010151606001818152505050613c75565b5f875f81518110613c0757613c07615792565b60200260200101519050826060015182606001510389825f015181518110613c3157613c31615792565b60200260200101515f015160400151826020015181518110613c5557613c55615792565b602002602001015160600181815250508260600151826060018181525050505b505050949350505050565b428084111590831116818015613c94575080155b156104f1576104f18484614e61565b635a052b325f526004601cfd5b63a11b63ff5f526004601cfd5b63133c37c65f52806020526024601cfd5b5f6104f18284015190565b5f838381518110613cec57613cec615792565b602002602001015190505f815f01519050613d078160031090565b613d1357613d13614e76565b60408201518015613d3657613d318460600151828660800151614e83565b613d49565b60808401515115613d4957613d49614ecd565b6004821460030383816005811115613d6357613d63615329565b90816005811115613d7657613d76615329565b9052505050606090920151604090910152505050565b82515f5b81811015611801575f858281518110613dab57613dab615792565b60209081029190910101518051604082015191925090600382116004881415821515171615613de557855f5288602052836040526044601cfd5b505050806001019050613d90565b5f868803613e0d57613e0686868961345e565b90506107df565b6107dc613e1b87878b61345e565b613e2688888b61345e565b86868661349a565b5f805f613e39614eda565b6301e4d72a815260208082015260408101898152336060830152601c820194509091508751604082015287613e79613e7260a083015190565b60e0840152565b613e8f613e8760c083015190565b610100840152565b613ea5613e9d60e083015190565b610120840152565b610140613eb3816060850152565b5f613ebf604084015190565b90505f613ece82848701614ee4565b928301929050613edf836080870152565b5f613eeb606086015190565b90505f613efa82868901614f4a565b948501949050613f0b8560a0890152565b5f613f188e878a01614faf565b959095019450613f298560c0890152565b8685015f613f378e83614fce565b602497019687019a50613f539050613f4e8c8c0190565b614ffe565b8060408b901b60808b901b17178f610100018181525050613f7d8c82611b8090919063ffffffff16565b60058c8e51613f8c91906159b4565b613f97911b8b6159b4565b99505050505050505050509550959350505050565b5f8083613fb7614eda565b639891976581523360208201908152608060408301819052601c9092019450905f613fe3604085015190565b90505f613ff282848601614ee4565b928301929050614003836040860152565b5f61400f606087015190565b90505f61401e82868801614ee4565b94850194905061402f856060880152565b895f61403d82898901614faf565b9a9d96909a016004019b50949950505050505050505050565b3d1561409b57601f3d0160051c60405160051c8160030281831115614088578183036003028280028480020360091c01015b5a602082011015611a59573d5f803e3d5ffd5b565b63939792855f52806020526024601cfd5b60603d105f8080808080866141205760405f803e5f51935060205192503d60208501113d60208501118082179850505086614120576020845f3e5f51915060208360203e60205190508160071b60208501018160a0026020850101803d10823d101761ffff8486171117985050505f80525b86614152575f8061413584602088018d61415b565b9250975061414783602087018c61423b565b929092179850909550505b5050505061275d565b5f806040519150825160c08602602001830160405285835260208660010160051b8085018360010160051b8701614199858b81811090829003020190565b60010160051b8a861196505b808510156141f957828589015260808a843e6060830151955085608084015260608201518681116141d685856142e2565b17881797505060808a01995060a08301925060a0820191506020850194506141a5565b50505b8183101561422f578083870152608088823e6060810151608082015260808801975060a0810190506020830192506141fc565b50505050935093915050565b604051815180851190808603818710028101602060e08202850181016040528185526001928301600590811b87019390920190911b908185015b8282101561422f57808287015260a088823e60206060890160a083013e606081015160608501516142b26080840151608088015180159114171590565b818311176142c084886142e2565b60a09b909b019a179690961795505060c0938401936020929092019101614275565b5f81516040830151801560038311161561430457506040840151600119909101905b604085015181148551831460208701516020870151141616159250505092915050565b5f8451600581111561433b5761433b615329565b0361437857604084015160208501516001600160a01b0316171561436157614361613379565b61437384608001518560600151613294565b614416565b60018451600581111561438d5761438d615329565b036143be576040840151156143a4576143a4613379565b614373846020015184866080015187606001518686613386565b6002845160058111156143d3576143d3615329565b036143f7576143738460200151848660800151876040015188606001518787611889565b61441684602001518486608001518760400151886060015187876118d4565b50505050565b608082901c63ffffffff604084901c811690808516906144449084906317b1f94290611b8016565b601c830192506144548482614fce565b50509250929050565b5f80614467614eda565b63f4dd92ce815287841860a0820152601c8101925060200160a0808252875f614491604083015190565b90505f6144a082858701614ee4565b9384019390506144b1846020870152565b5f6144bd606085015190565b90505f6144cc82878901614f4a565b9586019590506144dd866040890152565b5f6144ea8d888a01614faf565b9687019690506144fb8760608a0152565b5f6145088d898b01614fce565b905080880197508760040199505050505050505050509550959350505050565b6339f3e3fd5f526004601cfd5b6301e4d72a6102043560051b6080019081525f808260208082015260408101858152336060830152601c919091019061456f608435610aeb565b61458061014460e083016060611b28565b61014061458e816060840152565b61459c60a082016080840152565b61016060a06102643581029290920101906145b8908290840152565b6145c25f82840152565b6020016145d08160c0840152565b5f9181019182526020820196909652939560449095019492505050565b63d13d53d45f52806020526024601cfd5b631cf99b265f5281602052806040526044601cfd5b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166146f85780873b1515166146f857806146e757816146ca573d156146a957601f3d0160051c8360051c8160030281831115614692578183036003028280028480020360091c01015b5a6020820110156146a5573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b5f805f6001600160e01b03198751165f805260205f888a5f8e5af15f5190935014905081614753578361473e575f925050506106d7565b614746614056565b845f52876020526024601cfd5b8061476557845f52876020526024601cfd5b50600198975050505050505050565b63375c24c15f52806020526024601cfd5b5f805f85865160051b87015b808210156148a2576020820191508851825151106147b1576147b16148d6565b81515160051b60208a01015180516020845101515f6040830151602085015115815184101517156147e6575050505050614791565b8260051b60208201015191505060608101935083518901915083511589831060011b17881797508198505f84528a51935086156001811461484f5760608220881860408d01516101208601511860208e015186511817171561484a5761484a6148d6565b614898565b8151855260208201516020860152604082015160408601528a6080860152835160208d015261012084015160408d015260608520975060208d0192508683181561489857865183525b5050505050614791565b5050508160608551015280156148cf57600181036148c7576391b3e5145f526004601cfd5b6148cf6148e3565b5050614416565b637fda72795f526004601cfd5b634e487b715f5260116020526024601cfd5b5f805f86875160051b88015b808210156149f7576020820191508151518a518110614922576149226148d6565b8060051b60208c01015190506020835101515f606083510151602084015115815184101517156149555750505050614901565b8260051b60208201015191505060608101925082518801915082511588831060011b17871796508197505f83528a5192508515600181146149a75760a0822087146149a2576149a26148d6565b6149ee565b815184526020820151602085015260408201516040850152608082015160808501528a60208d01528960408d015260a08220965060208d019250858318156149ee57855183525b50505050614901565b50508551606001839052508015614a255760018103614a1d576391b3e5145f526004601cfd5b614a256148e3565b50506128d6565b63a5f542085f528260205281604052806060526064601cfd5b63466aa6165f526004601cfd5b5f614e58565b5f6009821015614bb1576005821015614b0e576003821015614ac1577f832c58a5b611aadcfa6a082ac9d04bace53d8278387f10040347b7e98eb5b30260018314027fbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde3018610402565b7ff3e8417a785f980bdaf134fa0274a6bf891eeb8195cd94b09d2aa651046e28bc60038314027fa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af118610402565b6007821015614b64577f25d02425402d882d211a7ab774c0ed6eca048c4d03d9af40132475744753b2a360058314027f1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b5518610402565b7fb58d772fb09b426b9dece637f61ca9065f2b994f1464b51e9207f55f7c8f594860078314027f7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc1418610402565b6011821015614d0957600d821015614c6657600b821015614c19577f6f0ec38c21f6f583ab7f3c5413c773ffd5344c34fde1d390958e438bf667448f60098314027fd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da0518610402565b7f32f4e7485d6485f9f6c255929b9905c62ba919758bbe231f231eaeecf33d810c600b8314027fbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f18610402565b600f821015614cbc577f8df51df98847160517f5b1186b4bc3f418d98b8a7f17f1292f392d79d600d79e600d8314027f6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a85259018610402565b7fcc4886e37eedd9aacd6c1c2c9247197a621a71282e87a7cbc673f3736d9aa141600f8314027f1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde818610402565b6015821015614db5576013821015614d68577f2d7a3ed6dab270fdb8e054b2ad525f0ce2a8b89cc76c17f0965434740f673a5560118314027fc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d8587718610402565b7f54b3212a178782f104e0d514b41a9a5c4ca9c980bf6597c3cecbf280917e202a60138314027f5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e6435001718610402565b6017821015614e0b577fbb40bf8cea3a5a716e2b6eb08bbdac8ec159f82f380783db3c56904f15a43d0460158314027f3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d18610402565b7f403be09941a31d05cfc2f896505811353d45d38743288b016630cce39435476a60178314027f1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c18610402565b61040282614a58565b6321ccfeb75f5281602052806040526044601cfd5b6394eb6af65f526004601cfd5b5f835f5260205f2060208301835160051b81015b80821015614ebe57815180841160051b93845260209384185260405f209290910190614e97565b50508314905080614416576144165b6309bde3395f526004601cfd5b5f61041260405190565b5f825180835260208401602084018260051b82015b80831015614f375782518051835260208101516020840152604081015160408401526060810151606084015250602083019250608082019150614ef9565b5050508060071b60200191505092915050565b5f80614f54845190565b8084529050602084810190600583901b860181019085015b82821115614f9c575f614f7e84615008565b9050614f8c818360a0615011565b506020929092019160a001614f6c565b60a0840260200194505050505092915050565b5f63ffffffe0603f614fbf855190565b01169050610402838383615011565b5f80614fd8845190565b8084529050600581901b614ff3602086810190860183615011565b602001949350505050565b6103b06040829052565b5f610402825190565b8082828560045afa80153d151715614416575f80fd5b6040518060a0016040528061503a61509c565b81525f602082018190526040820152606080820181905260809091015290565b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e083018290528252602082018190529181019190915290565b6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b0316815260200160608152602001606081526020015f60048111156150e6576150e6615329565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b5f60208284031215615125575f80fd5b81356001600160401b0381111561513a575f80fd5b820161024081850312156104f1575f80fd5b5f81518084525f5b8181101561517057602081850181015186830182015201615154565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6104f1602083018461514c565b5f602082840312156151b1575f80fd5b5035919050565b5f602082840312156151c8575f80fd5b81356001600160401b038111156151dd575f80fd5b820161016081850312156104f1575f80fd5b5f8083601f8401126151ff575f80fd5b5081356001600160401b03811115615215575f80fd5b6020830191508360208260051b850101111561522f575f80fd5b9250929050565b80356001600160a01b0381168114611c04575f80fd5b5f805f805f805f805f805f60e08c8e031215615266575f80fd5b6001600160401b03808d35111561527b575f80fd5b6152888e8e358f016151ef565b909c509a5060208d013581101561529d575f80fd5b6152ad8e60208f01358f016151ef565b909a50985060408d01358110156152c2575f80fd5b6152d28e60408f01358f016151ef565b909850965060608d01358110156152e7575f80fd5b506152f88d60608e01358e016151ef565b909550935060808c0135925061531060a08d01615236565b915060c08c013590509295989b509295989b9093969950565b634e487b7160e01b5f52602160045260245ffd5b60068110611b8057611b80615329565b61535882825161533d565b6020818101516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5f815180845260208085019450602084015f5b838110156153e55781516153b888825161534d565b808401516001600160a01b031660a08901526040015160c088015260e090960195908201906001016153a3565b509495945050505050565b604080825283519082018190525f906020906060840190828701845b8281101561542a57815115158452928401929084019060010161540c565b50505083810360208501526106d78186615390565b5f8060208385031215615450575f80fd5b82356001600160401b03811115615465575f80fd5b615471858286016151ef565b90969095509350505050565b5f805f8060408587031215615490575f80fd5b84356001600160401b03808211156154a6575f80fd5b6154b2888389016151ef565b909650945060208701359150808211156154ca575f80fd5b506154d7878288016151ef565b95989497509550505050565b602081525f6104f16020830184615390565b5f60208284031215615505575f80fd5b6104f182615236565b5f806040838503121561551f575f80fd5b82356001600160401b03811115615534575f80fd5b830160408186031215615545575f80fd5b946020939093013593505050565b5f805f805f60808688031215615567575f80fd5b85356001600160401b038082111561557d575f80fd5b9087019060a0828a031215615590575f80fd5b909550602087013590808211156155a5575f80fd5b506155b2888289016151ef565b909550935050604086013591506155cb60608701615236565b90509295509295909350565b5f805f805f805f8060a0898b0312156155ee575f80fd5b88356001600160401b0380821115615604575f80fd5b6156108c838d016151ef565b909a50985060208b0135915080821115615628575f80fd5b6156348c838d016151ef565b909850965060408b013591508082111561564c575f80fd5b506156598b828c016151ef565b999c989b509699959896976060870135966080013595509350505050565b5f805f805f805f6080888a03121561568d575f80fd5b87356001600160401b03808211156156a3575f80fd5b6156af8b838c016151ef565b909950975060208a01359150808211156156c7575f80fd5b6156d38b838c016151ef565b909750955060408a01359150808211156156eb575f80fd5b506156f88a828b016151ef565b909450925061570b905060608901615236565b905092959891949750929550565b606081525f61572b606083018661514c565b6020830194909452506001600160a01b0391909116604090910152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261578d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156153e55781516157ce88825161533d565b838101516001600160a01b03168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016157b9565b5f815180845260208085019450602084015f5b838110156153e557815161583788825161533d565b808401516001600160a01b0390811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c09096019590820190600101615822565b60058110611b8057611b80615329565b828152604060208201526158b56040820183516001600160a01b03169052565b5f60208301516158d060608401826001600160a01b03169052565b5060408301516101608060808501526158ed6101a08501836157a6565b91506060850151603f198584030160a086015261590a838261580f565b925050608085015161591f60c0860182615885565b5060a085015160e085015260c0850151610100818187015260e0870151915061012082818801528188015192506101409150828288015280880151848801525080870151610180870152505050809150509392505050565b5f823561015e1983360301811261598c575f80fd5b9190910192915050565b5f602082840312156159a6575f80fd5b8135600581106104f1575f80fd5b818103818111156104025761040261575f565b808201808211156104025761040261575f565b5f815180845260208085019450602084015f5b838110156153e557615a0087835161534d565b60a09690960195908201906001016159ed565b5f6080808301878452602060018060a01b03808916602087015260406080604088015283895180865260a08901915060208b0195505f5b81811015615a8b578651615a5f84825161533d565b808701518616848801528481015185850152606090810151908401529585019591870191600101615a4a565b50508781036060890152615a9f818a6159da565b9c9b505050505050505050505050565b80820281158282048414176104025761040261575f56fea164736f6c6343000818000a","storage":{}},"0x6265cc8d1b28edfd4d76c80bf774c0d446fffbde":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c80633f15457f116100635780633f15457f1461010f5780637adbf973146101225780637dc0d1d0146101355780638bbedf7514610147578063be27b22c1461015a575f80fd5b806301ffc9a7146100945780631ecfc411146100bc578063224199c2146100d157806330349ebe146100e4575b5f80fd5b6100a76100a23660046115b1565b61016d565b60405190151581526020015b60405180910390f35b6100cf6100ca3660046115ef565b6101a3565b005b6100cf6100df3660046117e0565b6102de565b6002546100f7906001600160a01b031681565b6040516001600160a01b0390911681526020016100b3565b6001546100f7906001600160a01b031681565b6100cf6101303660046115ef565b61063c565b5f546100f7906001600160a01b031681565b6100cf610155366004611889565b61076d565b6100cf61016836600461190b565b6107f1565b5f6001600160e01b031982166301ffc9a760e01b148061019d57506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061196b565b9050336001600160a01b03821614610287575f80fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061030f90879087906004016119d3565b5f604051808303815f875af115801561032a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103519190810190611a6b565b92505f805f610360888761088b565b91945092509050336001600160a01b038216146103da5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105bb576001600160a01b03851661044e5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103d1565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b1580156104ac575f80fd5b505af11580156104be573d5f803e3d5ffd5b505050505f83836040516020016104df929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b00906044015f604051808303815f87803b15801561053e575f80fd5b505af1158015610550573d5f803e3d5ffd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c391506044015f604051808303815f87803b15801561059f575f80fd5b505af11580156105b1573d5f803e3d5ffd5b5050505050610632565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b15801561061b575f80fd5b505af115801561062d573d5f803e3d5ffd5b505050505b5050505050505050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a7919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a919061196b565b9050336001600160a01b03821614610720575f80fd5b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102d1565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061079e90859085906004016119d3565b5f604051808303815f875af11580156107b9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107e09190810190611a6b565b90506107ec83826107f1565b505050565b5f805f6107fe858561088b565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303815f875af115801561085f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108839190611add565b505050505050565b5f8080806108998682610a40565b60ff1690506108aa86600183610a63565b92505f6108dc6108bb836001611b08565b6001848a516108ca9190611b1b565b6108d49190611b1b565b899190610a85565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061090d908490600401611b2e565b602060405180830381865afa158015610928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094c9190611b40565b6109a45760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103d1565b6109ae815f610b05565b5f549095506109c7906001600160a01b03168888610de3565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a2f9190611b2e565b60405180910390a350509250925092565b5f828281518110610a5357610a53611b5f565b016020015160f81c905092915050565b82515f90610a718385611b08565b1115610a7b575f80fd5b5091016020012090565b8251606090610a948385611b08565b1115610a9e575f80fd5b5f8267ffffffffffffffff811115610ab857610ab861160a565b6040519080825280601f01601f191660200182016040528015610ae2576020820181803683370190505b50905060208082019086860101610afa82828761100b565b509095945050505050565b5f80610b118484610a40565b60ff169050805f03610b2657505f905061019d565b5f610b4585610b358487611b08565b610b40906001611b08565b610b05565b90505f610b5e610b56866001611b08565b879085610a63565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095505f916001600160a01b03909116906302571be390602401602060405180830381865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061196b565b90506001600160a01b0381161580610c1b57506001600160a01b03811630145b610c7a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103d1565b6001600160a01b0381163014610dd95782610d5e576001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061196b565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec906044015f604051808303815f87803b158015610d42575f80fd5b505af1158015610d54573d5f803e3d5ffd5b5050505050610dd9565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303815f875af1158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190611add565b505b5050505092915050565b5f80610e016040518060400160405280606081526020015f81525090565b610e1985516005610e129190611b08565b8290611060565b50604080518082019091526005815264045f656e7360d81b6020820152610e419082906110c3565b50610e4c81866110c3565b50805160405163021e646f60e21b81525f9182916001600160a01b038a169163087991bc91610e8091601091600401611b73565b606060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611ba7565b93509150506bffffffffffffffffffffffff198216158015610ee057508551155b15610ef3575f8094509450505050611003565b855160208701206bffffffffffffffffffffffff19838116911614610f16575f80fd5b5f610f2187826110ef565b90505b80515160208201511015610ff857610f4b816080015183610f459190611bfc565b4261114a565b610fbd5760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103d1565b5f80610fcd898460a00151611162565b925090508115610fe857965060019550611003945050505050565b5050610ff3816111d1565b610f24565b505f80945094505050505b935093915050565b602081106110435781518352611022602084611b08565b925061102f602083611b08565b915061103c602082611b1b565b905061100b565b905182516020929092036101000a5f190180199091169116179052565b60408051808201909152606081525f602082015261107f602083611c20565b156110a75761108f602083611c20565b61109a906020611b1b565b6110a49083611b08565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526110e883845f0151518485516112b6565b9392505050565b6111376040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261019d816111d1565b5f806111568385611c3f565b60030b12159392505050565b5f805b83518310156111c4575f6111798585610a40565b60ff169050611189600185611b08565b93505f8061119887878561139c565b9250905081156111b0579350600192506111ca915050565b6111ba8387611b08565b9550505050611165565b505f9050805b9250929050565b60c081015160208201819052815151116111e85750565b5f6111fa825f015183602001516113f5565b82602001516112099190611b08565b82519091506112189082611454565b61ffff16604083015261122c600282611b08565b825190915061123b9082611454565b61ffff16606083015261124f600282611b08565b825190915061125e908261147a565b63ffffffff166080830152611274600482611b08565b82519091505f906112859083611454565b61ffff169050611296600283611b08565b60a0840181905291506112a98183611b08565b60c0909301929092525050565b60408051808201909152606081525f602082015282518211156112d7575f80fd5b60208501516112e68386611b08565b11156113195761131985611309876020015187866113049190611b08565b6114a2565b611314906002611c66565b6114b8565b5f808651805187602083010193508088870111156113375787860182525b505050602084015b602084106113775780518252611356602083611b08565b9150611363602082611b08565b9050611370602085611b1b565b935061133f565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f806113a8858561147a565b63ffffffff1663613d3078146113c257505f905080611003565b602c8310156113d557505f905080611003565b6113e9856113e4866004611b08565b6114d5565b91509150935093915050565b5f815b8351811061140857611408611c7d565b5f6114138583610a40565b60ff169050611423816001611b08565b61142d9083611b08565b9150805f0361143c5750611442565b506113f8565b61144c8382611b1b565b949350505050565b81515f90611463836002611b08565b111561146d575f80fd5b50016002015161ffff1690565b81515f90611489836004611b08565b1115611493575f80fd5b50016004015163ffffffff1690565b5f818311156114b257508161019d565b50919050565b81516114c48383611060565b506114cf83826110c3565b50505050565b5f8060288385516114e69190611b1b565b10156114f657505f9050806111ca565b5f835b611504856028611b08565b8110156115a55760049190911b905f61151d8783610a40565b60ff169050603081101580156115335750603a81105b1561154c57611543603082611b1b565b8317925061159c565b6041811015801561155d5750604781105b1561156d57611543603782611b1b565b6061811015801561157e5750606781105b1561158e57611543605782611b1b565b5f80945094505050506111ca565b506001016114f9565b50946001945092505050565b5f602082840312156115c1575f80fd5b81356001600160e01b0319811681146110e8575f80fd5b6001600160a01b03811681146115ec575f80fd5b50565b5f602082840312156115ff575f80fd5b81356110e8816115d8565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156116415761164161160a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116705761167061160a565b604052919050565b5f67ffffffffffffffff8211156116915761169161160a565b50601f01601f191660200190565b5f82601f8301126116ae575f80fd5b81356116c16116bc82611678565b611647565b8181528460208386010111156116d5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112611700575f80fd5b8135602067ffffffffffffffff8083111561171d5761171d61160a565b8260051b61172c838201611647565b9384528581018301938381019088861115611745575f80fd5b84880192505b858310156117d457823584811115611761575f80fd5b88016040818b03601f1901811315611777575f80fd5b61177f61161e565b878301358781111561178f575f80fd5b61179d8d8a8387010161169f565b8252509082013590868211156117b1575f80fd5b6117bf8c898486010161169f565b8189015284525050918401919084019061174b565b98975050505050505050565b5f805f805f60a086880312156117f4575f80fd5b853567ffffffffffffffff8082111561180b575f80fd5b61181789838a0161169f565b9650602088013591508082111561182c575f80fd5b61183889838a016116f1565b9550604088013591508082111561184d575f80fd5b5061185a8882890161169f565b935050606086013561186b816115d8565b9150608086013561187b816115d8565b809150509295509295909350565b5f805f6060848603121561189b575f80fd5b833567ffffffffffffffff808211156118b2575f80fd5b6118be8783880161169f565b945060208601359150808211156118d3575f80fd5b6118df878388016116f1565b935060408601359150808211156118f4575f80fd5b506119018682870161169f565b9150509250925092565b5f806040838503121561191c575f80fd5b823567ffffffffffffffff80821115611933575f80fd5b61193f8683870161169f565b93506020850135915080821115611954575f80fd5b506119618582860161169f565b9150509250929050565b5f6020828403121561197b575f80fd5b81516110e8816115d8565b5f5b838110156119a0578181015183820152602001611988565b50505f910152565b5f81518084526119bf816020860160208601611986565b601f01601f19169290920160200192915050565b5f60408083016040845280865180835260608601915060608160051b870101925060208089015f5b83811015611a4b57888603605f1901855281518051888852611a1f898901826119a8565b9185015188830389870152919050611a3781836119a8565b9750505093820193908201906001016119fb565b505086840381880152505050611a6181866119a8565b9695505050505050565b5f60208284031215611a7b575f80fd5b815167ffffffffffffffff811115611a91575f80fd5b8201601f81018413611aa1575f80fd5b8051611aaf6116bc82611678565b818152856020838501011115611ac3575f80fd5b611ad4826020830160208601611986565b95945050505050565b5f60208284031215611aed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561019d5761019d611af4565b8181038181111561019d5761019d611af4565b602081525f6110e860208301846119a8565b5f60208284031215611b50575f80fd5b815180151581146110e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b61ffff83168152604060208201525f61144c60408301846119a8565b805163ffffffff81168114611ba2575f80fd5b919050565b5f805f60608486031215611bb9575f80fd5b611bc284611b8f565b9250611bd060208501611b8f565b915060408401516bffffffffffffffffffffffff1981168114611bf1575f80fd5b809150509250925092565b63ffffffff818116838216019080821115611c1957611c19611af4565b5092915050565b5f82611c3a57634e487b7160e01b5f52601260045260245ffd5b500690565b600382810b9082900b03637fffffff198112637fffffff8213171561019d5761019d611af4565b808202811582820484141761019d5761019d611af4565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a","storage":{"0x0":"0x9b2565a3545a1312bdcb6e7148a7f7cae8c2706b","0x1":"0x3f1194b9019002863ad0dbbe295294547c0d36a9","0x2":"0x287dee389caaa49edc112888f2bcfd927b472e25"}},"0x62b11ad5f582a5c5d378fb310125b030042554f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80637e37479e116101f4578063ba5d40b71161011a578063e985e9c5116100ad578063f5c1f76e1161007c578063f5c1f76e146108d8578063f7df5c60146108eb578063f8c8765e146108fe578063ffa1ad741461091157600080fd5b8063e985e9c51461087a578063ebf0c717146108b6578063ec129eea146108bd578063f25eb5c1146108d057600080fd5b8063c87b56dd116100e9578063c87b56dd1461082e578063ce92b33e14610841578063cf2c52cb14610854578063d9548e531461086757600080fd5b8063ba5d40b7146107b3578063baef73e9146107c6578063bb5b27e114610808578063bebec6b41461081b57600080fd5b8063a22cb46511610192578063ac9650d811610161578063ac9650d81461074c578063b3f9e4cb1461076c578063b85afd281461077f578063b88d4fde146107a057600080fd5b8063a22cb465146106e7578063a3f4df7e146106fa578063a424740014610726578063ab3b87fe1461073957600080fd5b80639508b1c4116101ce5780639508b1c4146106b15780639559c0bd146106c457806395d89b41146106cc57806399e0dd7c146106d457600080fd5b80637e37479e146106785780637eee288d1461068b57806394d008ef1461069e57600080fd5b806342842e0e116102d95780635096023911610277578063663f7b2a11610246578063663f7b2a14610610578063672b9f81146106235780636ccbae5f1461064457806370a082311461066557600080fd5b806350960239146105bb578063572b6c05146105ce5780636352211e146105ea578063638e5c78146105fd57600080fd5b806347c81699116102b357806347c816991461056f5780634a72584d146105825780634f558e791461059557806350382c1a146105a857600080fd5b806342842e0e1461053657806342966c6814610549578063430c20811461055c57600080fd5b80631bf7e13e1161035157806327f189751161032057806327f18975146104ea578063310bd74b146104fd5780633f72ec6e1461051057806340c10f191461052357600080fd5b80631bf7e13e146104905780631f71be06146104a357806323b872dd146104b6578063276fabb1146104c957600080fd5b8063095ea7b31161038d578063095ea7b31461041c578063150b7a02146104315780631bd8cc1a1461045d5780631be5e7ed1461047d57600080fd5b806301ffc9a7146103b457806306fdde03146103dc578063081812fc146103f1575b600080fd5b6103c76103c2366004613f0b565b610935565b60405190151581526020015b60405180910390f35b6103e4610946565b6040516103d39190613f78565b6104046103ff366004613f8b565b6109d8565b6040516001600160a01b0390911681526020016103d3565b61042f61042a366004613fb9565b6109ff565b005b61044461043f366004614026565b610a18565b6040516001600160e01b031990911681526020016103d3565b61047061046b3660046140dc565b610b72565b6040516103d3919061417f565b6103e461048b366004614192565b610c68565b6103e461049e3660046141c9565b610cb3565b61042f6104b1366004614249565b610dbe565b61042f6104c4366004614305565b610e54565b6104dc6104d7366004614346565b610ea7565b6040519081526020016103d3565b61042f6104f8366004614387565b610eb6565b61042f61050b366004613f8b565b610efe565b61042f61051e3660046143fa565b610f39565b61042f610531366004613fb9565b61103b565b61042f610544366004614305565b611088565b61042f610557366004613f8b565b6110a3565b6103c761056a366004613fb9565b6110e7565b61042f61057d366004614424565b6110f3565b61042f610590366004614485565b611132565b6103c76105a3366004613f8b565b611178565b61042f6105b636600461458c565b611197565b61042f6105c93660046145c0565b6111cd565b6103c76105dc3660046145c0565b6001600160a01b0316301490565b6104046105f8366004613f8b565b61122d565b61042f61060b366004613f8b565b61124a565b61042f61061e366004614678565b611295565b6106366106313660046146c0565b611336565b6040516103d39291906146e2565b6104dc610652366004613f8b565b6000908152610100602052604090205490565b6104dc6106733660046145c0565b61134e565b6104dc6106863660046145c0565b6113d4565b61042f610699366004613fb9565b611405565b61042f6106ac366004614707565b61145c565b61042f6106bf366004614762565b6114ab565b6104dc601481565b6103e4611532565b61042f6106e2366004614805565b611541565b61042f6106f536600461483a565b6115c8565b6103e46040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103c76107343660046141c9565b6115da565b61042f610747366004613fb9565b611625565b61075f61075a366004614346565b61166a565b6040516103d39190614866565b61040461077a366004613f8b565b611746565b61079261078d3660046140dc565b611770565b6040516103d39291906148c8565b61042f6107ae3660046148ed565b611892565b61042f6107c1366004614249565b6118d9565b6107f06107d4366004613f8b565b600090815261013960205260409020546001600160401b031690565b6040516001600160401b0390911681526020016103d3565b6103e4610816366004613f8b565b611962565b6103e46108293660046145c0565b611a04565b6103e461083c366004613f8b565b611ace565b61042f61084f366004614387565b611b34565b61042f610862366004614958565b611b73565b6103c7610875366004613f8b565b611c42565b6103c761088836600461499f565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104dc565b61042f6108cb366004614387565b611c85565b61042f611cc4565b6104706108e6366004614346565b611d4b565b61042f6108f93660046149d8565b611dfe565b61042f61090c366004614a0a565b611e8f565b6103e460405180604001604052806005815260200164302e392e3160d81b81525081565b600061094082612065565b92915050565b60606065805461095590614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614a66565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b5050505050905090565b60006109e3826120b5565b506000908152606960205260409020546001600160a01b031690565b80610a0981612114565b610a13838361217a565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610a4d61229c565b6001600160a01b031603610b0e57610a6361229c565b6001600160a01b03166342966c68856040518263ffffffff1660e01b8152600401610a9091815260200190565b600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b505050821580159150610ad85750610ad882840184614a9a565b15610af657610ae730856122ab565b610af185856123f9565b610b00565b610b0085856122ab565b50630a85bd0160e11b610b69565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610b8c57610b8c6144d7565b604051908082528060200260200182016040528015610bbf57816020015b6060815260200190600190039081610baa5790505b50905060005b83811015610c6057610c30858583818110610be257610be2614ab5565b9050602002810190610bf49190614acb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506124a4915050565b828281518110610c4257610c42614ab5565b60200260200101819052508080610c5890614b27565b915050610bc5565b509392505050565b6060610cab84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506124a4915050565b949350505050565b606060005a9050610cc58585856115da565b610d215760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610b60565b610db3610d3160208701876145c0565b30604088013584610d4560608b018b614acb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506124d992505050565b9150505b9392505050565b610134546001600160a01b0316610dd361229c565b6001600160a01b031614610df95760405162461bcd60e51b8152600401610b6090614b40565b6000610e0d610e08888a614b87565b6125ba565b509050610e1a8982611405565b610e278686868685612612565b8115610e4957610e498982610e44610e3f8b8d614b87565b612680565b612701565b505050505050505050565b80610e66610e6061229c565b82612743565b610e825760405162461bcd60e51b8152600401610b6090614b94565b81610e8c81612114565b610e95836127d4565b610ea0858585612841565b5050505050565b6000610c60610e088385614b87565b80610ec2610e6061229c565b610ede5760405162461bcd60e51b8152600401610b6090614b94565b81610ee881612114565b610ef587878787876129e8565b50505050505050565b80610f0a610e6061229c565b610f265760405162461bcd60e51b8152600401610b6090614b94565b81610f3081612114565b610a13836127d4565b610134546001600160a01b0316610f4e61229c565b6001600160a01b031614610f745760405162461bcd60e51b8152600401610b6090614b40565b610f7d816120b5565b42826001600160401b031611610fd55760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a204558504952595f494e5f5041535400000000000000006044820152606401610b60565b60008181526101396020908152604091829020805467ffffffffffffffff19166001600160401b038616908117909155915191825282917f93feabb03ab84f47fc85bf0c298103fca21d8c8bc376eae0c1e1c56b9d4f7789910160405180910390a25050565b611043612a4b565b6001600160a01b031661105461229c565b6001600160a01b03161461107a5760405162461bcd60e51b8152600401610b6090614bdd565b61108482826122ab565b5050565b610a1383838360405180602001604052806000815250611892565b806110af610e6061229c565b6110cb5760405162461bcd60e51b8152600401610b6090614b94565b816110d581612114565b6110de836127d4565b610a1383612b4c565b6000610db78383612743565b806110ff610e6061229c565b61111b5760405162461bcd60e51b8152600401610b6090614b94565b8161112581612114565b610ef58787878787612bf3565b8061113e610e6061229c565b61115a5760405162461bcd60e51b8152600401610b6090614b94565b8161116481612114565b61117086868686612cd2565b505050505050565b6000818152606760205260408120546001600160a01b03161515610940565b6111ca816040516020016111ab9190614c1f565b6040516020818303038152906040528051906020012060001c82612d72565b50565b610134546001600160a01b03166111e261229c565b6001600160a01b0316146112085760405162461bcd60e51b8152600401610b6090614b40565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b600061123882611c42565b6112455761094082612d97565b919050565b80611256610e6061229c565b6112725760405162461bcd60e51b8152600401610b6090614b94565b61128461127d61229c565b3084612841565b61108461128f61229c565b836123f9565b60006112a0826125ba565b5090506112ab61229c565b6001600160a01b03166112bd8261122d565b6001600160a01b0316146113135760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b61131c81612114565b61108461132761229c565b8261133185612680565b612df7565b6060806113438484612e7e565b909590945092505050565b60006001600160a01b0382166113b85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b60565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b038116600090815261013560205260408120546113f781612e9f565b6113ff578091505b50919050565b610134546001600160a01b031661141a61229c565b6001600160a01b0316146114405760405162461bcd60e51b8152600401610b6090614b40565b611449816127d4565b61108461145582612d97565b8383612841565b611464612a4b565b6001600160a01b031661147561229c565b6001600160a01b03161461149b5760405162461bcd60e51b8152600401610b6090614bdd565b6114a584846122ab565b50505050565b6114b58787612ee9565b6114bd61229c565b6001600160a01b03166114cf8661122d565b6001600160a01b0316146115255760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b610ef58484848489612612565b60606066805461095590614a66565b610134546001600160a01b031661155661229c565b6001600160a01b03161461157c5760405162461bcd60e51b8152600401610b6090614b40565b61013361158a828483614c81565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b82826040516115bc929190614d69565b60405180910390a15050565b6110846115d361229c565b8383612f58565b6000610cab6115e885614d7d565b3085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061302692505050565b80611631610e6061229c565b61164d5760405162461bcd60e51b8152600401610b6090614b94565b8161165781612114565b6114a561166384612d97565b8585612841565b606060006116788385614e07565b905030330361173d5760005b8381101561173b5761170b61169761229c565b61169f61316f565b8787858181106116b1576116b1614ab5565b90506020028101906116c39190614acb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250613183915050565b82828151811061171d5761171d614ab5565b6020026020010181905250808061173390614b27565b915050611684565b505b610cab816131b3565b6000818152606760205260408120546001600160a01b0316611769576000610940565b3092915050565b606080836001600160401b0381111561178b5761178b6144d7565b6040519080825280602002602001820160405280156117be57816020015b60608152602001906001900390816117a95790505b509150836001600160401b038111156117d9576117d96144d7565b60405190808252806020026020018201604052801561180c57816020015b60608152602001906001900390816117f75790505b50905060005b848110156118895761183c86868381811061182f5761182f614ab5565b9050602002013585612e7e565b84838151811061184e5761184e614ab5565b6020026020010184848151811061186757611867614ab5565b602002602001018290528290525050808061188190614b27565b915050611812565b50935093915050565b8161189e610e6061229c565b6118ba5760405162461bcd60e51b8152600401610b6090614b94565b826118c481612114565b6118cd846127d4565b611170868686866132de565b610134546001600160a01b03166118ee61229c565b6001600160a01b0316146119145760405162461bcd60e51b8152600401610b6090614b40565b600080611924610e08898b614b87565b9150915061193181613311565b6119498a83611943610e3f8c8e614b87565b86613371565b6119568787878786612612565b50505050505050505050565b600081815260c96020526040902080546060919061197f90614a66565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90614a66565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b50505050509050919050565b6001600160a01b03811660009081526101356020526040902054606090611a2a81612e9f565b6113ff576000818152610138602052604090208054611a4890614a66565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7490614a66565b8015611ac15780601f10611a9657610100808354040283529160200191611ac1565b820191906000526020600020905b815481529060010190602001808311611aa457829003601f168201915b5050505050915050919050565b6060611ad9826120b5565b6000611ae36133c4565b90506000815111611b035760405180602001604052806000815250610db7565b80611b0d846133d4565b604051602001611b1e929190614e7a565b6040516020818303038152906040529392505050565b80611b40610e6061229c565b611b5c5760405162461bcd60e51b8152600401610b6090614b94565b81611b6681612114565b610ef58787878787612612565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611ba661229c565b6001600160a01b031614611bcc5760405162461bcd60e51b8152600401610b6090614bdd565b6020819003611bef576000611be382840184613f8b565b90506114a584826122ab565b6000611bfd82840184614ea9565b805190915060005b8181101561117057611c3086848381518110611c2357611c23614ab5565b60200260200101516122ab565b80611c3a81614b27565b915050611c05565b600081815261013960205260408120546001600160401b03161580159061094057505060009081526101396020526040902054426001600160401b039091161090565b80611c91610e6061229c565b611cad5760405162461bcd60e51b8152600401610b6090614b94565b81611cb781612114565b610ef587878787876134d4565b6000611cce61229c565b6001600160a01b0381166000908152610135602052604081205491925003611d425760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610b60565b6111ca816134ea565b6060816001600160401b03811115611d6557611d656144d7565b604051908082528060200260200182016040528015611d9857816020015b6060815260200190600190039081611d835790505b50905060005b82811015611df757611dc7848483818110611dbb57611dbb614ab5565b90506020020135611962565b828281518110611dd957611dd9614ab5565b60200260200101819052508080611def90614b27565b915050611d9e565b5092915050565b610134546001600160a01b0316611e1361229c565b6001600160a01b031614611e395760405162461bcd60e51b8152600401610b6090614b40565b61013454611e50906001600160a01b0316846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611e82929190614d69565b60405180910390a2505050565b600054610100900460ff1615808015611eaf5750600054600160ff909116105b80611ec95750303b158015611ec9575060005460ff166001145b611f2c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b60565b6000805460ff191660011790558015611f4f576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611ff79161352f565b611fff61356f565b61200761356f565b61201083613598565b612019826135c8565b8015610ea0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061209657506001600160e01b03198216635b5e139f60e01b145b8061094057506301ffc9a760e01b6001600160e01b0319831614610940565b6000818152606760205260409020546001600160a01b03166111ca5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b3033036121715761212361316f565b81146111ca5760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610b60565b6111ca816135f8565b600061218582612d97565b9050806001600160a01b0316836001600160a01b0316036121f25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b60565b806001600160a01b031661220461229c565b6001600160a01b0316148061222057506122208161088861229c565b6122925760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610b60565b610a138383613626565b60006122a6613694565b905090565b6001600160a01b0382166123015760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b60565b6000818152606760205260409020546001600160a01b0316156123665760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b60565b612372600083836136af565b6001600160a01b038216600090815260686020526040812080546001929061239b908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612403612a4b565b905061240f8183613626565b60008051602061529383398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb9161246c918891309190604401614f4c565b600060405180830381600087803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b5050505050505050565b6060610db7836040516020016124ba9190614c1f565b6040516020818303038152906040528051906020012060001c8361378b565b60606124e4856135f8565b600080876001600160a01b0316866124fe8b8a8989613183565b60405161250b9190614c1f565b60006040518083038160008787f1925050503d8060008114612549576040519150601f19603f3d011682016040523d82523d6000602084013e61254e565b606091505b50909250905061255f603f87614f8e565b5a1161256d5761256d614fa2565b6125ad82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061386d565b9998505050505050505050565b805160009081905b801561260c578291506125f882856125db600185614fb8565b815181106125eb576125eb614ab5565b60200260200101516138a6565b92508061260481614fcb565b9150506125c2565b50915091565b60005b848110156111705761266e86868381811061263257612632614ab5565b90506020028101906126449190614acb565b86868581811061265657612656614ab5565b90506020028101906126689190614acb565b86612bf3565b8061267881614b27565b915050612615565b606060008260008151811061269757612697614ab5565b602002602001015190506000600190505b8351811015611df757818482815181106126c4576126c4614ab5565b60200260200101516040516020016126dd929190614fe2565b604051602081830303815290604052915080806126f990614b27565b9150506126a8565b61dead6001600160a01b0384161480159061273357506001600160a01b03831660009081526101356020526040902054155b15610a1357610a13838383612df7565b60008061274f8361122d565b90506001600160a01b03811615801590610cab5750806001600160a01b0316846001600160a01b031614806127a957506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610cab5750836001600160a01b03166127c2846109d8565b6001600160a01b031614949350505050565b6127dd81613952565b6040516020016127ef91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b031661285482612d97565b6001600160a01b0316146128b85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b60565b6001600160a01b03821661291a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b60565b6129258383836136af565b612930600082613626565b6001600160a01b0383166000908152606860205260408120805460019290612959908490614fb8565b90915550506001600160a01b0382166000908152606860205260408120805460019290612987908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b8481101561117057612a39868683818110612a0857612a08614ab5565b90506020020135858584818110612a2157612a21614ab5565b9050602002810190612a339190614acb565b85612cd2565b80612a4381614b27565b9150506129eb565b600080516020615293833981519152546000906001600160a01b03168015612b485760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad8919061501e565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa158015612b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b449190615037565b9250505b5090565b6000612b5782612d97565b9050612b65816000846136af565b612b70600083613626565b6001600160a01b0381166000908152606860205260408120805460019290612b99908490614fb8565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612c08929190615054565b60408051601f198184030181528282528051602091820120601f8901829004820284018201909252878352909250612c5c9183918990899081908401838280828437600092019190915250612d7292505050565b6111708187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061397a915050565b612cdb84613aaf565b612d275760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610b60565b6114a584612d3486611962565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061397a915050565b612d7b82613aaf565b61108457600082815260c960205260409020610a138282615064565b6000818152606760205260408120546001600160a01b0316806109405760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b6000828152610138602052604090208054612e1190614a66565b9050600003612e3557600082815261013860205260409020612e338282615064565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612e8a84611962565b9150612e96848461378b565b90509250929050565b6000818152610137602052604081205460ff16801561094057506101366000612ec661229c565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b60008051602061529383398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612f2a9086908690600401614d69565b600060405180830381600087803b158015612f4457600080fd5b505af1158015610ef5573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612fb95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b60565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613091919061501e565b9050600061313f8660600151805190602001208688602001516040516020016130df9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561316557508551613165906001600160a01b03168286613ad5565b9695505050505050565b60003033036131805750601f193601355b90565b606082858560405160200161319a93929190615123565b6040516020818303038152906040529050949350505050565b606081516001600160401b038111156131ce576131ce6144d7565b60405190808252806020026020018201604052801561320157816020015b60608152602001906001900390816131ec5790505b50905060005b82518110156113ff57600080306001600160a01b031685848151811061322f5761322f614ab5565b60200260200101516040516132449190614c1f565b600060405180830381855af49150503d806000811461327f576040519150601f19603f3d011682016040523d82523d6000602084013e613284565b606091505b50915091506132ac82826040518060600160405280602781526020016152b36027913961386d565b8484815181106132be576132be614ab5565b6020026020010181905250505080806132d690614b27565b915050613207565b6132e9848484612841565b6132f584848484613c17565b6114a55760405162461bcd60e51b8152600401610b6090615162565b6000818152610137602052604090205460ff16156111ca5760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610b60565b61337b84846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952836040516133ab9190613f78565b60405180910390a280156114a5576114a5848484612701565b6060610133805461095590614a66565b6060816000036133fb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613425578061340f81614b27565b915061341e9050600a83614f8e565b91506133ff565b6000816001600160401b0381111561343f5761343f6144d7565b6040519080825280601f01601f191660200182016040528015613469576020820181803683370190505b5090505b8415610cab5761347e600183614fb8565b915061348b600a866151b4565b613496906030614f39565b60f81b8183815181106134ab576134ab614ab5565b60200101906001600160f81b031916908160001a9053506134cd600a86614f8e565b945061346d565b6134dd816127d4565b610ea08585858585612612565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166135565760405162461bcd60e51b8152600401610b60906151c8565b60656135628382615064565b506066610a138282615064565b600054610100900460ff166135965760405162461bcd60e51b8152600401610b60906151c8565b565b600054610100900460ff166135bf5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d1c565b600054610100900460ff166135ef5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d75565b60008181526101006020526040902054613613906001614f39565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061365b82612d97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60003033036136aa575060331936013560601c90565b503390565b6001600160a01b0382166136c6576136c681613311565b600081815261013960205260409020546001600160401b031615613761576001600160a01b0382161580159061371557506136ff612a4b565b6001600160a01b0316826001600160a01b031614155b6137615760405162461bcd60e51b815260206004820152601960248201527f52656769737472793a20544f4b454e5f455850495241424c45000000000000006044820152606401610b60565b6001600160a01b03831660009081526101356020526040902054819003610a1357610a13836134ea565b606061379682612e9f565b156137b05750604080516020810190915260008152610940565b60ca60006137bd84613952565b8152602001908152602001600020600084815260200190815260200160002080546137e790614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461381390614a66565b80156138605780601f1061383557610100808354040283529160200191613860565b820191906000526020600020905b81548152906001019060200180831161384357829003601f168201915b5050505050905092915050565b6060831561387c575081610db7565b82511561388c5782518084602001fd5b8160405162461bcd60e51b8152600401610b609190613f78565b600081516000036138f15760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610b60565b82826040516020016139039190614c1f565b60405160208183030381529060405280519060200120604051602001613933929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb602052604081205415612b4857600082815260cb6020526040902054610940565b60ca600061398783613952565b8152602001908152602001600020600085815260200190815260200160002080546139b190614a66565b9050600003613a0957826040516139c89190614c1f565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f8685604051613a009190613f78565b60405180910390a35b8160ca6000613a1784613952565b815260200190815260200160002060008681526020019081526020016000209081613a429190615064565b5081604051613a519190614c1f565b604051809103902083604051613a679190614c1f565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613aa19291906146e2565b60405180910390a450505050565b600081815260c9602052604081208054829190613acb90614a66565b9050119050919050565b6000806000613ae48585613dc3565b90925090506000816004811115613afd57613afd615213565b148015613b1b5750856001600160a01b0316826001600160a01b0316145b15613b2b57600192505050610db7565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613b53929190615229565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613b919190614c1f565b600060405180830381855afa9150503d8060008114613bcc576040519150601f19603f3d011682016040523d82523d6000602084013e613bd1565b606091505b5091509150818015613be4575080516020145b8015613c0b57508051630b135d3f60e11b90613c09908301602090810190840161501e565b145b98975050505050505050565b60006001600160a01b0384163b15613d1457836001600160a01b031663150b7a02613c4061229c565b8786866040518563ffffffff1660e01b8152600401613c629493929190615242565b6020604051808303816000875af1925050508015613c9d575060408051601f3d908101601f19168201909252613c9a91810190615275565b60015b613cfa573d808015613ccb576040519150601f19603f3d011682016040523d82523d6000602084013e613cd0565b606091505b508051600003613cf25760405162461bcd60e51b8152600401610b6090615162565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cab565b506001610cab565b600054610100900460ff16613d435760405162461bcd60e51b8152600401610b60906151c8565b806000805160206152938339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff16613d9c5760405162461bcd60e51b8152600401610b60906151c8565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613d54565b6000808251604103613df95760208301516040840151606085015160001a613ded87828585613e08565b94509450505050613e01565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e3f5750600090506003613eec565b8460ff16601b14158015613e5757508460ff16601c14155b15613e685750600090506004613eec565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ebc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ee557600060019250925050613eec565b9150600090505b94509492505050565b6001600160e01b0319811681146111ca57600080fd5b600060208284031215613f1d57600080fd5b8135610db781613ef5565b60005b83811015613f43578181015183820152602001613f2b565b50506000910152565b60008151808452613f64816020860160208601613f28565b601f01601f19169290920160200192915050565b602081526000610db76020830184613f4c565b600060208284031215613f9d57600080fd5b5035919050565b6001600160a01b03811681146111ca57600080fd5b60008060408385031215613fcc57600080fd5b8235613fd781613fa4565b946020939093013593505050565b60008083601f840112613ff757600080fd5b5081356001600160401b0381111561400e57600080fd5b602083019150836020828501011115613e0157600080fd5b60008060008060006080868803121561403e57600080fd5b853561404981613fa4565b9450602086013561405981613fa4565b93506040860135925060608601356001600160401b0381111561407b57600080fd5b61408788828901613fe5565b969995985093965092949392505050565b60008083601f8401126140aa57600080fd5b5081356001600160401b038111156140c157600080fd5b6020830191508360208260051b8501011115613e0157600080fd5b6000806000604084860312156140f157600080fd5b83356001600160401b0381111561410757600080fd5b61411386828701614098565b909790965060209590950135949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561417257601f19868403018952614160838351613f4c565b98840198925090830190600101614144565b5090979650505050505050565b602081526000610db76020830184614127565b6000806000604084860312156141a757600080fd5b83356001600160401b038111156141bd57600080fd5b61411386828701613fe5565b6000806000604084860312156141de57600080fd5b83356001600160401b03808211156141f557600080fd5b908501906080828803121561420957600080fd5b9093506020850135908082111561421f57600080fd5b5061422c86828701613fe5565b9497909650939450505050565b8035801515811461124557600080fd5b60008060008060008060008060a0898b03121561426557600080fd5b883561427081613fa4565b975060208901356001600160401b038082111561428c57600080fd5b6142988c838d01614098565b909950975060408b01359150808211156142b157600080fd5b6142bd8c838d01614098565b909750955060608b01359150808211156142d657600080fd5b506142e38b828c01614098565b90945092506142f6905060808a01614239565b90509295985092959890939650565b60008060006060848603121561431a57600080fd5b833561432581613fa4565b9250602084013561433581613fa4565b929592945050506040919091013590565b6000806020838503121561435957600080fd5b82356001600160401b0381111561436f57600080fd5b61437b85828601614098565b90969095509350505050565b60008060008060006060868803121561439f57600080fd5b85356001600160401b03808211156143b657600080fd5b6143c289838a01614098565b909750955060208801359150808211156143db57600080fd5b506143e888828901614098565b96999598509660400135949350505050565b6000806040838503121561440d57600080fd5b82356001600160401b0381168114613fd757600080fd5b60008060008060006060868803121561443c57600080fd5b85356001600160401b038082111561445357600080fd5b61445f89838a01613fe5565b9097509550602088013591508082111561447857600080fd5b506143e888828901613fe5565b6000806000806060858703121561449b57600080fd5b8435935060208501356001600160401b038111156144b857600080fd5b6144c487828801613fe5565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614515576145156144d7565b604052919050565b600082601f83011261452e57600080fd5b81356001600160401b03811115614547576145476144d7565b61455a601f8201601f19166020016144ed565b81815284602083860101111561456f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561459e57600080fd5b81356001600160401b038111156145b457600080fd5b610cab8482850161451d565b6000602082840312156145d257600080fd5b8135610db781613fa4565b60006001600160401b038211156145f6576145f66144d7565b5060051b60200190565b600061461361460e846145dd565b6144ed565b8381529050602080820190600585901b84018681111561463257600080fd5b845b8181101561466d5780356001600160401b038111156146535760008081fd5b61465f8982890161451d565b855250928201928201614634565b505050509392505050565b60006020828403121561468a57600080fd5b81356001600160401b038111156146a057600080fd5b8201601f810184136146b157600080fd5b610cab84823560208401614600565b600080604083850312156146d357600080fd5b50508035926020909101359150565b6040815260006146f56040830185613f4c565b8281036020840152610db38185613f4c565b6000806000806060858703121561471d57600080fd5b843561472881613fa4565b93506020850135925060408501356001600160401b0381111561474a57600080fd5b61475687828801613fe5565b95989497509550505050565b60008060008060008060006080888a03121561477d57600080fd5b87356001600160401b038082111561479457600080fd5b6147a08b838c01613fe5565b909950975060208a0135965060408a01359150808211156147c057600080fd5b6147cc8b838c01614098565b909650945060608a01359150808211156147e557600080fd5b506147f28a828b01614098565b989b979a50959850939692959293505050565b6000806020838503121561481857600080fd5b82356001600160401b0381111561482e57600080fd5b61437b85828601613fe5565b6000806040838503121561484d57600080fd5b823561485881613fa4565b9150612e9660208401614239565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148bb57603f198886030184526148a9858351613f4c565b9450928501929085019060010161488d565b5092979650505050505050565b6040815260006148db6040830185614127565b8281036020840152610db38185614127565b6000806000806080858703121561490357600080fd5b843561490e81613fa4565b9350602085013561491e81613fa4565b92506040850135915060608501356001600160401b0381111561494057600080fd5b61494c8782880161451d565b91505092959194509250565b60008060006040848603121561496d57600080fd5b833561497881613fa4565b925060208401356001600160401b0381111561499357600080fd5b61422c86828701613fe5565b600080604083850312156149b257600080fd5b82356149bd81613fa4565b915060208301356149cd81613fa4565b809150509250929050565b6000806000604084860312156149ed57600080fd5b8335925060208401356001600160401b0381111561499357600080fd5b60008060008060808587031215614a2057600080fd5b8435614a2b81613fa4565b93506020850135614a3b81613fa4565b92506040850135614a4b81613fa4565b91506060850135614a5b81613fa4565b939692955090935050565b600181811c90821680614a7a57607f821691505b6020821081036113ff57634e487b7160e01b600052602260045260246000fd5b600060208284031215614aac57600080fd5b610db782614239565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614ae257600080fd5b8301803591506001600160401b03821115614afc57600080fd5b602001915036819003821315613e0157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614b3957614b39614b11565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610db7368484614600565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b60008251614c31818460208701613f28565b9190910192915050565b601f821115610a1357600081815260208120601f850160051c81016020861015614c625750805b601f850160051c820191505b8181101561117057828155600101614c6e565b6001600160401b03831115614c9857614c986144d7565b614cac83614ca68354614a66565b83614c3b565b6000601f841160018114614ce05760008515614cc85750838201355b600019600387901b1c1916600186901b178355610ea0565b600083815260209020601f19861690835b82811015614d115786850135825560209485019460019092019101614cf1565b5086821015614d2e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cab602083018486614d40565b600060808236031215614d8f57600080fd5b604051608081016001600160401b038282108183111715614db257614db26144d7565b8160405284359150614dc382613fa4565b81835260208501356020840152604085013560408401526060850135915080821115614dee57600080fd5b50614dfb3682860161451d565b60608301525092915050565b6000614e1561460e846145dd565b80848252602080830192508560051b850136811115614e3357600080fd5b855b81811015614e6e5780356001600160401b03811115614e545760008081fd5b614e6036828a0161451d565b865250938201938201614e35565b50919695505050505050565b60008351614e8c818460208801613f28565b835190830190614ea0818360208801613f28565b01949350505050565b60006020808385031215614ebc57600080fd5b82356001600160401b03811115614ed257600080fd5b8301601f81018513614ee357600080fd5b8035614ef161460e826145dd565b81815260059190911b82018301908381019087831115614f1057600080fd5b928401925b82841015614f2e57833582529284019290840190614f15565b979650505050505050565b8082018082111561094057610940614b11565b6001600160a01b03848116825283166020820152606060408201819052600090610b6990830184613f4c565b634e487b7160e01b600052601260045260246000fd5b600082614f9d57614f9d614f78565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561094057610940614b11565b600081614fda57614fda614b11565b506000190190565b60008351614ff4818460208801613f28565b601760f91b9083019081528351615012816001840160208801613f28565b01600101949350505050565b60006020828403121561503057600080fd5b5051919050565b60006020828403121561504957600080fd5b8151610db781613fa4565b8183823760009101908152919050565b81516001600160401b0381111561507d5761507d6144d7565b6150918161508b8454614a66565b84614c3b565b602080601f8311600181146150c657600084156150ae5750858301515b600019600386901b1c1916600185901b178555611170565b600085815260208120601f198616915b828110156150f5578886015182559484019460019091019084016150d6565b50858210156151135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008451615135818460208901613f28565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826151c3576151c3614f78565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610cab6040830184613f4c565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061316590830184613f4c565b60006020828403121561528757600080fd5b8151610db781613ef556febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a","storage":{}},"0x6ac8f19d1e0f81147cdf2a1e53cb1f4e18417204":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610296575f3560e01c80636352211e11610161578063c93ab3fd116100ca578063e985e9c511610084578063e985e9c5146106c8578063eb8ae530146106db578063ed70554d146106ee578063f242432a1461070d578063f2fde38b14610720578063fd0cd0d914610733575f80fd5b8063c93ab3fd14610647578063cf4088231461065a578063d8c9921a1461066d578063d9a50c1214610680578063da8c229e14610693578063e0dba60f146106b5575f80fd5b8063a22cb4651161011b578063a22cb465146105d5578063a4014982146105e8578063adf4960a146105fb578063b6bcad261461060e578063c475abff14610621578063c658e08614610634575f80fd5b80636352211e146105595780636e5d6ad21461056c578063715018a6146105975780638b4dfa751461059f5780638cf8b41e146105b25780638da5cb5b146105c5575f80fd5b80631f4e1504116102035780633f15457f116101bd5780633f15457f146104b1578063402906fc146104d857806341415eab146105005780634e1273f41461051357806353095467146105335780635d3590d514610546575f80fd5b80631f4e15041461042b57806320c38e2b1461043e57806324c1af44146104515780632b20e397146104645780632eb2c2d61461048b57806333c69ea91461049e575f80fd5b80630e4cd725116102545780630e4cd725146103a05780630e89341c146103b357806314ab9038146103c6578063150b7a02146103d95780631534e177146104055780631896f70a14610418575f80fd5b8062fdd58e1461029a5780630178fe3f146102c057806301ffc9a71461030657806306fdde0314610329578063081812fc14610360578063095ea7b31461038b575b5f80fd5b6102ad6102a8366004614316565b610746565b6040519081526020015b60405180910390f35b6102d36102ce366004614340565b6107f0565b604080516001600160a01b03909416845263ffffffff90921660208401526001600160401b0316908201526060016102b7565b61031961031436600461436c565b61081f565b60405190151581526020016102b7565b6103536040518060400160405280600b81526020016a2730b6b2abb930b83832b960a91b81525081565b6040516102b791906143d4565b61037361036e366004614340565b61085e565b6040516001600160a01b0390911681526020016102b7565b61039e610399366004614316565b6108a0565b005b6103196103ae3660046143e6565b6108e5565b6103536103c1366004614340565b61095e565b61039e6103d436600461442f565b6109cc565b6103ec6103e736600461449d565b610ac0565b6040516001600160e01b031990911681526020016102b7565b61039e61041336600461450a565b610c96565b61039e6104263660046143e6565b610cc0565b600754610373906001600160a01b031681565b61035361044c366004614340565b610d75565b6102ad61045f3660046145f6565b610e0c565b6103737f000000000000000000000000c965345edac823d56812cd20a10316233916a60581565b61039e610499366004614717565b610fe7565b61039e6104ac3660046147bd565b61121a565b6103737f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a981565b6104eb6104e6366004614811565b6113e6565b60405163ffffffff90911681526020016102b7565b61031961050e3660046143e6565b611480565b610526610521366004614832565b6114b8565b6040516102b79190614928565b600554610373906001600160a01b031681565b61039e61055436600461493a565b6115d7565b610373610567366004614340565b611655565b61057f61057a366004614978565b61165f565b6040516001600160401b0390911681526020016102b7565b61039e61178e565b61039e6105ad3660046149aa565b6117a1565b61057f6105c03660046149e9565b6118c0565b5f546001600160a01b0316610373565b61039e6105e3366004614a6b565b611c28565b6102ad6105f6366004614a97565b611cfd565b610319610609366004614b12565b611e38565b61039e61061c36600461450a565b611e5c565b6102ad61062f366004614b33565b61209e565b6102ad610642366004614b53565b6122fd565b61039e610655366004614bc0565b6124bd565b61039e610668366004614c26565b612605565b61039e61067b366004614c5b565b612794565b61031961068e366004614b33565b61285d565b6103196106a136600461450a565b60046020525f908152604090205460ff1681565b61039e6106c3366004614a6b565b612938565b6103196106d6366004614c86565b61299f565b61039e6106e9366004614cb2565b6129cc565b6102ad6106fc366004614340565b60016020525f908152604090205481565b61039e61071b366004614d15565b612d59565b61039e61072e36600461450a565b612e06565b610319610741366004614340565b612e7c565b5f6001600160a01b0383166107b65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5f6107c083611655565b9050836001600160a01b0316816001600160a01b0316036107e55760019150506107ea565b5f9150505b92915050565b5f8181526001602052604090205460a081901c60c082901c610813838383612f4d565b90959094509092509050565b5f6001600160e01b03198216631b05885b60e31b148061084f57506001600160e01b03198216630a85bd0160e11b145b806107ea57506107ea82612f80565b5f8061086983611655565b90506001600160a01b03811661088157505f92915050565b5f838152600360205260409020546001600160a01b03165b9392505050565b5f6108aa826107f0565b50915050603f1960408216016108d65760405163a2a7201360e01b8152600481018390526024016107ad565b6108e08383612fcf565b505050565b5f8080806108f2866107f0565b925092509250846001600160a01b0316836001600160a01b0316148061091d575061091d838661299f565b8061094157506001600160a01b0385166109368761085e565b6001600160a01b0316145b8015610954575061095282826130de565b155b9695505050505050565b6005546040516303a24d0760e21b8152600481018390526060916001600160a01b031690630e89341c906024015f60405180830381865afa1580156109a5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ea9190810190614d78565b816109d78133611480565b6109f857803360405163168ab55d60e31b81526004016107ad929190614dea565b8260105f610a05836107f0565b5091505063ffffffff8282161615610a335760405163a2a7201360e01b8152600481018490526024016107ad565b604051630295720760e31b8152600481018790526001600160401b03861660248201527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a96001600160a01b0316906314ab9038906044015b5f604051808303815f87803b158015610aa2575f80fd5b505af1158015610ab4573d5f803e3d5ffd5b50505050505050505050565b5f336001600160a01b037f000000000000000000000000c965345edac823d56812cd20a10316233916a6051614610b0a5760405163032634a760e31b815260040160405180910390fd5b5f808080610b1a86880188614e01565b83516020850120939750919550935091508890808214610b57576040516331970f3360e21b815260048101829052602481018390526044016107ad565b604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000c965345edac823d56812cd20a10316233916a60516906328ed4f6c90610ba59085903090600401614dea565b5f604051808303815f87803b158015610bbc575f80fd5b505af1158015610bce573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018d90525f92506276a70091506001600160a01b037f000000000000000000000000c965345edac823d56812cd20a10316233916a605169063d6e4fa8690602401602060405180830381865afa158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190614e64565b610c6a9190614e8f565b9050610c7d87878761ffff16848861310d565b50630a85bd0160e11b9c9b505050505050505050505050565b610c9e613215565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b81610ccb8133611480565b610cec57803360405163168ab55d60e31b81526004016107ad929190614dea565b8260085f610cf9836107f0565b5091505063ffffffff8282161615610d275760405163a2a7201360e01b8152600481018490526024016107ad565b604051630c4b7b8560e11b81526001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690631896f70a90610a8b9089908990600401614dea565b60066020525f908152604090208054610d8d90614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610db990614eb6565b8015610e045780601f10610ddb57610100808354040283529160200191610e04565b820191905f5260205f20905b815481529060010190602001808311610de757829003601f168201915b505050505081565b5f87610e188133611480565b610e3957803360405163168ab55d60e31b81526004016107ad929190614dea565b87516020890120610e4a8a8261326e565b9250610e568a8461329a565b610e6083866133d3565b610e6b8a848b613406565b50610e788a8487876134cd565b9350610e8383613510565b610f33576040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690635ef2c7f09060a4015f604051808303815f87803b158015610f0a575f80fd5b505af1158015610f1c573d5f803e3d5ffd5b50505050610f2e8a848b8b89896135c6565b610fda565b6040516305ef2c7f60e41b8152600481018b9052602481018290523060448201526001600160a01b0388811660648301526001600160401b03881660848301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690635ef2c7f09060a4015f604051808303815f87803b158015610fb6575f80fd5b505af1158015610fc8573d5f803e3d5ffd5b50505050610fda8a848b8b89896135fc565b5050979650505050505050565b81518351146110495760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107ad565b6001600160a01b03841661106f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b03851633148061108b575061108b853361299f565b6110f25760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107ad565b5f5b83518110156111ad575f84828151811061111057611110614f33565b602002602001015190505f84838151811061112d5761112d614f33565b602002602001015190505f805f611143856107f0565b9250925092506111548583836136b6565b83600114801561117557508a6001600160a01b0316836001600160a01b0316145b6111915760405162461bcd60e51b81526004016107ad90614f47565b61119d858b848461375d565b50505050508060010190506110f4565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516111fd929190614f91565b60405180910390a461121333868686868661379d565b5050505050565b5f611225858561326e565b905061123181846133d3565b5f808061123d846107f0565b919450925090506001600160a01b03831615806112ea57506040516302571be360e01b81526004810185905230906001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a916906302571be390602401602060405180830381865afa1580156112ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112de9190614fbe565b6001600160a01b031614155b1561130857604051635374b59960e01b815260040160405180910390fd5b5f806113138a6107f0565b90935091508a905061134f576113298633611480565b61134a57853360405163168ab55d60e31b81526004016107ad929190614dea565b61137a565b6113598a33611480565b61137a57893360405163168ab55d60e31b81526004016107ad929190614dea565b6113858689846138f7565b611390878483613932565b9650620100008416158015906113b457508363ffffffff1688851763ffffffff1614155b156113d55760405163a2a7201360e01b8152600481018790526024016107ad565b96831796610ab486868a868b613977565b5f826113f28133611480565b61141357803360405163168ab55d60e31b81526004016107ad929190614dea565b8360025f611420836107f0565b5091505063ffffffff828216161561144e5760405163a2a7201360e01b8152600481018490526024016107ad565b5f808061145a8a6107f0565b9250925092506114738a84848c61ffff16178485613977565b5098975050505050505050565b5f80808061148d866107f0565b925092509250846001600160a01b0316836001600160a01b031614806109415750610941838661299f565b6060815183511461151d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107ad565b5f83516001600160401b0381111561153757611537614525565b604051908082528060200260200182016040528015611560578160200160208202803683370190505b5090505f5b84518110156115cf576115aa85828151811061158357611583614f33565b602002602001015185838151811061159d5761159d614f33565b6020026020010151610746565b8282815181106115bc576115bc614f33565b6020908102919091010152600101611565565b509392505050565b6115df613215565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af115801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f9190614fd9565b50505050565b5f6107ea82613a1e565b5f8061166b858561326e565b905061167681613510565b61169357604051635374b59960e01b815260040160405180910390fd5b5f61169e86336108e5565b9050801580156116b557506116b38233611480565b155b156116d757813360405163168ab55d60e31b81526004016107ad929190614dea565b5f80806116e3856107f0565b925092509250831580156116fa5750620400008216155b1561171b5760405163a2a7201360e01b8152600481018690526024016107ad565b5f6117258a6107f0565b92505050611734888383613932565b97506117428685858b613a33565b6040516001600160401b038916815286907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b1329060200160405180910390a2509598975050505050505050565b611796613215565b61179f5f613a49565b565b6117b85f805160206154fc8339815191528461326e565b6117c28133611480565b6117e357803360405163168ab55d60e31b81526004016107ad929190614dea565b306001600160a01b0384160361181757604051632ca49b0d60e11b81526001600160a01b03841660048201526024016107ad565b6118376118315f805160206154fc8339815191528661326e565b83613a98565b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018690527f000000000000000000000000c965345edac823d56812cd20a10316233916a60516906342842e0e906064015f604051808303815f87803b1580156118a4575f80fd5b505af11580156118b6573d5f803e3d5ffd5b5050505050505050565b5f8086866040516118d2929190614ff4565b6040519081900381206331a9108f60e11b82526004820181905291505f907f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b031690636352211e90602401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190614fbe565b90506001600160a01b0381163314801590611a09575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f000000000000000000000000c965345edac823d56812cd20a10316233916a605169063e985e9c590604401602060405180830381865afa1580156119e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a079190614fd9565b155b15611a4157611a255f805160206154fc8339815191528361326e565b3360405163168ab55d60e31b81526004016107ad929190614dea565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000c965345edac823d56812cd20a10316233916a60516906323b872dd906064015f604051808303815f87803b158015611aae575f80fd5b505af1158015611ac0573d5f803e3d5ffd5b5050604051630a3b53db60e21b81526001600160a01b037f000000000000000000000000c965345edac823d56812cd20a10316233916a6051692506328ed4f6c9150611b129085903090600401614dea565b5f604051808303815f87803b158015611b29575f80fd5b505af1158015611b3b573d5f803e3d5ffd5b5050604051636b727d4360e11b8152600481018590526276a70092507f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b0316915063d6e4fa8690602401602060405180830381865afa158015611ba7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bcb9190614e64565b611bd59190614e8f565b9250611c1d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8816868861310d565b505095945050505050565b6001600160a01b0382163303611c925760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107ad565b335f8181526002602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b335f9081526004602052604081205460ff16611d2b5760405162461bcd60e51b81526004016107ad90615003565b5f8787604051611d3c929190614ff4565b604051908190038120633f2891eb60e21b8252600482018190523060248301526044820187905291507f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b03169063fca247ac906064016020604051808303815f875af1158015611db5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd99190614e64565b9150611e2d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250505061ffff8616611e276276a70087614e8f565b8861310d565b509695505050505050565b5f80611e43846107f0565b50841663ffffffff908116908516149250505092915050565b611e64613215565b6007546001600160a01b031615611f785760075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f000000000000000000000000c965345edac823d56812cd20a10316233916a6059091169063a22cb465906044015f604051808303815f87803b158015611ee0575f80fd5b505af1158015611ef2573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b0391821660048201525f60248201527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a9909116925063a22cb46591506044015f604051808303815f87803b158015611f61575f80fd5b505af1158015611f73573d5f803e3d5ffd5b505050505b600780546001600160a01b0319166001600160a01b0383169081179091551561209b5760075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f000000000000000000000000c965345edac823d56812cd20a10316233916a6059091169063a22cb465906044015f604051808303815f87803b158015612007575f80fd5b505af1158015612019573d5f803e3d5ffd5b505060075460405163a22cb46560e01b81526001600160a01b039182166004820152600160248201527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a9909116925063a22cb46591506044015f604051808303815f87803b158015612089575f80fd5b505af1158015611213573d5f803e3d5ffd5b50565b335f9081526004602052604081205460ff166120cc5760405162461bcd60e51b81526004016107ad90615003565b5f6120e45f805160206154fc8339815191528561326e565b60405163c475abff60e01b815260048101869052602481018590529091505f906001600160a01b037f000000000000000000000000c965345edac823d56812cd20a10316233916a605169063c475abff906044016020604051808303815f875af1158015612154573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121789190614e64565b6040516331a9108f60e11b8152600481018790529091507f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b031690636352211e90602401602060405180830381865afa9250505080156121fc575060408051601f3d908101601f191682019092526121f991810190614fbe565b60015b6122095791506107ea9050565b6001600160a01b038116301415806122b157506040516302571be360e01b81526004810184905230906001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a916906302571be390602401602060405180830381865afa158015612281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a59190614fbe565b6001600160a01b031614155b156122c0575091506107ea9050565b505f6122cf6276a70083614e8f565b5f8481526001602052604090205490915060a081901c6122f185838386613a33565b50919695505050505050565b5f866123098133611480565b61232a57803360405163168ab55d60e31b81526004016107ad929190614dea565b5f878760405161233b929190614ff4565b6040518091039020905061234f898261326e565b925061235b898461329a565b61236583866133d3565b5f6123a68a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061340692505050565b90506123b48a8588886134cd565b94506123bf84613510565b61246b576040516306ab592360e01b8152600481018b9052602481018390523060448201527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a96001600160a01b0316906306ab5923906064016020604051808303815f875af1158015612434573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124589190614e64565b506124668482898989613b83565b6124b0565b6124b08a858b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d92508c91508b90506135fc565b5050509695505050505050565b5f6125005f86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b6007549091506001600160a01b031661252c5760405163093075b560e21b815260040160405180910390fd5b6125368133611480565b61255757803360405163168ab55d60e31b81526004016107ad929190614dea565b5f8080612563846107f0565b919450925090505f6125748561085e565b905061257f85613c81565b60075f9054906101000a90046001600160a01b03166001600160a01b0316639198c2768a8a878787878e8e6040518963ffffffff1660e01b81526004016125cd989796959493929190615073565b5f604051808303815f87803b1580156125e4575f80fd5b505af11580156125f6573d5f803e3d5ffd5b50505050505050505050505050565b836126108133611480565b61263157803360405163168ab55d60e31b81526004016107ad929190614dea565b84601c5f61263e836107f0565b5091505063ffffffff828216161561266c5760405163a2a7201360e01b8152600481018490526024016107ad565b60405163cf40882360e01b8152600481018990523060248201526001600160a01b0387811660448301526001600160401b03871660648301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a9169063cf408823906084015f604051808303815f87803b1580156126e8575f80fd5b505af11580156126fa573d5f803e3d5ffd5b5050506001600160a01b038816905061275f575f612717896107f0565b509150506201ffff196202000082160161274f57604051632ca49b0d60e11b81526001600160a01b03891660048201526024016107ad565b612759895f613a98565b506118b6565b5f61276989611655565b905061278981898b5f1c600160405180602001604052805f815250613d1e565b505050505050505050565b61279e838361326e565b6127a88133611480565b6127c957803360405163168ab55d60e31b81526004016107ad929190614dea565b7f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b5284016128095760405163615a470360e01b815260040160405180910390fd5b6001600160a01b038216158061282757506001600160a01b03821630145b1561285057604051632ca49b0d60e11b81526001600160a01b03831660048201526024016107ad565b61164f611831858561326e565b5f80612869848461326e565b90505f61287582613510565b90505f805160206154fc83398151915285146128945791506107ea9050565b6040516331a9108f60e11b8152600481018590527f000000000000000000000000c965345edac823d56812cd20a10316233916a6056001600160a01b031690636352211e90602401602060405180830381865afa925050508015612915575060408051601f3d908101601f1916820190925261291291810190614fbe565b60015b612923575f925050506107ea565b6001600160a01b0316301492506107ea915050565b612940613215565b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf8791015b60405180910390a25050565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b5f80612a105f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613dfe9050565b915091505f612a578288888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509293925050613bc59050565b90505f612a64828561326e565b5f818152600660205260409020909150612a7f888a8361511e565b507f6c32148f748aba23997146d7fe89e962e3cc30271290fb96f5f4337756c03b528201612ac05760405163615a470360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018290525f907f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a96001600160a01b0316906302571be390602401602060405180830381865afa158015612b25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b499190614fbe565b90506001600160a01b0381163314801590612bef575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a9169063e985e9c590604401602060405180830381865afa158015612bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fd9565b155b15612c1157813360405163168ab55d60e31b81526004016107ad929190614dea565b6001600160a01b03861615612c9c57604051630c4b7b8560e11b81526001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690631896f70a90612c6e9085908a90600401614dea565b5f604051808303815f87803b158015612c85575f80fd5b505af1158015612c97573d5f803e3d5ffd5b505050505b604051635b0fc9c360e01b81526001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690635b0fc9c390612cea9085903090600401614dea565b5f604051808303815f87803b158015612d01575f80fd5b505af1158015612d13573d5f803e3d5ffd5b50505050612789828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052508d93509150819050613b83565b6001600160a01b038416612d7f5760405162461bcd60e51b81526004016107ad90614eee565b6001600160a01b038516331480612d9b5750612d9b853361299f565b612df95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107ad565b6112138585858585613d1e565b612e0e613215565b6001600160a01b038116612e735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ad565b61209b81613a49565b5f8181526006602052604081208054829190612e9790614eb6565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec390614eb6565b8015612f0e5780601f10612ee557610100808354040283529160200191612f0e565b820191905f5260205f20905b815481529060010190602001808311612ef157829003601f168201915b5050505050905080515f03612f2557505f92915050565b5f80612f318382613dfe565b90925090505f612f418483613bc5565b9050610954818461285d565b5f8042836001600160401b03161015612f775761ffff1962010000851601612f73575f94505b5f93505b50929391925050565b5f6001600160e01b03198216636cdb3d1360e11b1480612fb057506001600160e01b031982166303a24d0760e21b145b806107ea57506301ffc9a760e01b6001600160e01b03198316146107ea565b5f612fd982611655565b9050806001600160a01b0316836001600160a01b0316036130465760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107ad565b336001600160a01b03821614806130625750613062813361299f565b6130d45760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107ad565b6108e08383613eb2565b5f620200008381161480156108995750426130fc6276a700846151d7565b6001600160401b0316109392505050565b845160208601205f61312c5f805160206154fc8339815191528361326e565b90505f61315488604051806040016040528060058152602001626cae8d60e31b815250613f1f565b5f83815260066020526040902090915061316e82826151f7565b50613181828289620300008a1789613b83565b6001600160a01b038416156118b657604051630c4b7b8560e11b81526001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690631896f70a906131de9085908890600401614dea565b5f604051808303815f87803b1580156131f5575f80fd5b505af1158015613207573d5f803e3d5ffd5b505050505050505050505050565b5f546001600160a01b0316331461179f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ad565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b5f80806132a6846107f0565b91945092509050426001600160401b0382161080801561336657506001600160a01b038416158061336657506040516302571be360e01b8152600481018690525f906001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a916906302571be390602401602060405180830381865afa158015613337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335b9190614fbe565b6001600160a01b0316145b156133a4575f613375876107f0565b50915050602081161561339e5760405163a2a7201360e01b8152600481018790526024016107ad565b506133cb565b620100008316156133cb5760405163a2a7201360e01b8152600481018690526024016107ad565b505050505050565b63fffdffff81811763ffffffff16146134025760405163a2a7201360e01b8152600481018390526024016107ad565b5050565b60605f6134aa8360065f8881526020019081526020015f20805461342990614eb6565b80601f016020809104026020016040519081016040528092919081815260200182805461345590614eb6565b80156134a05780601f10613477576101008083540402835291602001916134a0565b820191905f5260205f20905b81548152906001019060200180831161348357829003601f168201915b5050505050613f1f565b5f8581526006602052604090209091506134c482826151f7565b50949350505050565b5f806134d8856107f0565b925050505f806134e9885f1c6107f0565b92509250506134f98787846138f7565b613504858483613932565b98975050505050505050565b5f8061351b83611655565b6001600160a01b0316141580156107ea57506040516302571be360e01b81526004810183905230906001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a916906302571be390602401602060405180830381865afa158015613592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b69190614fbe565b6001600160a01b03161492915050565b5f86815260066020526040812080546135e491879161342990614eb6565b90506135f38682868686613b83565b50505050505050565b5f8080613608886107f0565b9250925092505f61362f8860065f8d81526020019081526020015f20805461342990614eb6565b5f8a815260066020526040902080549192509061364b90614eb6565b90505f0361366c575f89815260066020526040902061366a82826151f7565b505b61367b89858886178589613977565b6001600160a01b03871661369857613693895f613a98565b610ab4565b610ab484888b5f1c600160405180602001604052805f815250613d1e565b6201ffff19620200008316016136d6576136d36276a700826151d7565b90505b42816001600160401b0316101561370f576201000082161561370a5760405162461bcd60e51b81526004016107ad90614f47565b613734565b60048216156137345760405163a2a7201360e01b8152600481018490526024016107ad565b604082165f036108e05750505f90815260036020526040902080546001600160a01b0319169055565b60c0816001600160401b0316901b60a08363ffffffff16901b846001600160a01b0316171760015f8681526020019081526020015f208190555050505050565b6001600160a01b0384163b156133cb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906137e190899089908890889088906004016152b2565b6020604051808303815f875af192505050801561381b575060408051601f3d908101601f1916820190925261381891810190615303565b60015b6138c75761382761531e565b806308c379a003613860575061383b615337565b806138465750613862565b8060405162461bcd60e51b81526004016107ad91906143d4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107ad565b6001600160e01b0319811663bc197c8160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b63ffff000082161580159060018316159082906139115750805b156112135760405163a2a7201360e01b8152600481018690526024016107ad565b5f816001600160401b0316846001600160401b03161115613951578193505b826001600160401b0316846001600160401b0316101561396f578293505b509192915050565b61398385858584613a33565b60405163ffffffff8416815285907f39873f00c80f4f94b7bd1594aebcf650f003545b74824d57ddf4939e3ff3a34b9060200160405180910390a2816001600160401b0316816001600160401b03161115611213576040516001600160401b038216815285907ff675815a0817338f93a7da433f6bd5f5542f1029b11b455191ac96c7f6a9b132906020015b60405180910390a25050505050565b5f80613a29836107f0565b5090949350505050565b613a3d8483613f96565b61164f8484848461375d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613aa3826001611e38565b15613ac45760405163a2a7201360e01b8152600481018390526024016107ad565b613acd82613c81565b604051635b0fc9c360e01b81526001600160a01b037f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690635b0fc9c390613b1b9085908590600401614dea565b5f604051808303815f87803b158015613b32575f80fd5b505af1158015613b44573d5f803e3d5ffd5b50506040516001600160a01b03841681528492507fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49150602001612993565b613b8f85848484613fcf565b847f8ce7013e8abebc55c3890a68f5a27c67c3f7efa64e584de5fb22363c606fd34085858585604051613a0f9493929190615407565b5f805f613bd28585613dfe565b909250905081613c435760018551613bea919061544d565b8414613c385760405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d6500000060448201526064016107ad565b505f91506107ea9050565b613c4d8582613bc5565b6040805160208101929092528101839052606001604051602081830303815290604052805190602001209250505092915050565b5f8181526001602052604090205460a081901c60c082901c613ca4838383612f4d565b5f86815260036020526040812080546001600160a01b0319169055909350613cd091508590848461375d565b60408051858152600160208201525f916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b5f805f613d2a866107f0565b925092509250613d3b8683836136b6565b846001148015613d5c5750876001600160a01b0316836001600160a01b0316145b613d785760405162461bcd60e51b81526004016107ad90614f47565b866001600160a01b0316836001600160a01b031603613d9957505050611213565b613da58688848461375d565b60408051878152602081018790526001600160a01b03808a1692908b169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118b6338989898989614041565b5f8083518310613e505760405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e6473000060448201526064016107ad565b5f848481518110613e6357613e63614f33565b016020015160f81c90508015613e8f57613e8885613e82866001615460565b836140fb565b9250613e93565b5f92505b613e9d8185615460565b613ea8906001615460565b9150509250929050565b5f81815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613ee682611655565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060600183511015613f4457604051631406d65b60e11b815260040160405180910390fd5b60ff83511115613f69578260405163e3ba295f60e01b81526004016107ad91906143d4565b82518383604051602001613f7f93929190615473565b604051602081830303815290604052905092915050565b61ffff811615801590613fae57506201000181811614155b156134025760405163a2a7201360e01b8152600481018390526024016107ad565b613fd98483613f96565b5f848152600160205260409020546001600160a01b0381161561403557613fff85613c81565b6040515f815285907fee2ba1195c65bcf218a83d874335c6bf9d9067b4c672f3c3bf16cf40de7586c49060200160405180910390a25b6112138585858561411d565b6001600160a01b0384163b156133cb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061408590899089908890889088906004016154b7565b6020604051808303815f875af19250505080156140bf575060408051601f3d908101601f191682019092526140bc91810190615303565b60015b6140cb5761382761531e565b6001600160e01b0319811663f23a6e6160e01b146135f35760405162461bcd60e51b81526004016107ad906153bf565b82515f906141098385615460565b1115614113575f80fd5b5091016020012090565b835f808061412a846107f0565b9194509250905063ffff000082166001600160401b038087169083161115614150578195505b42826001600160401b03161061416557958617955b6001600160a01b038416156141bc5760405162461bcd60e51b815260206004820152601f60248201527f455243313135353a206d696e74206f66206578697374696e6720746f6b656e0060448201526064016107ad565b6001600160a01b03881661421c5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107ad565b306001600160a01b038916036142915760405162461bcd60e51b815260206004820152603460248201527f455243313135353a206e65774f776e65722063616e6e6f74206265207468652060448201527313985b5955dc985c1c195c8818dbdb9d1c9858dd60621b60648201526084016107ad565b61429d8589898961375d565b60408051868152600160208201526001600160a01b038a16915f9133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612789335f8a88600160405180602001604052805f815250614041565b6001600160a01b038116811461209b575f80fd5b5f8060408385031215614327575f80fd5b823561433281614302565b946020939093013593505050565b5f60208284031215614350575f80fd5b5035919050565b6001600160e01b03198116811461209b575f80fd5b5f6020828403121561437c575f80fd5b813561089981614357565b5f5b838110156143a1578181015183820152602001614389565b50505f910152565b5f81518084526143c0816020860160208601614387565b601f01601f19169290920160200192915050565b602081525f61089960208301846143a9565b5f80604083850312156143f7575f80fd5b82359150602083013561440981614302565b809150509250929050565b80356001600160401b038116811461442a575f80fd5b919050565b5f8060408385031215614440575f80fd5b8235915061445060208401614414565b90509250929050565b5f8083601f840112614469575f80fd5b5081356001600160401b0381111561447f575f80fd5b602083019150836020828501011115614496575f80fd5b9250929050565b5f805f805f608086880312156144b1575f80fd5b85356144bc81614302565b945060208601356144cc81614302565b93506040860135925060608601356001600160401b038111156144ed575f80fd5b6144f988828901614459565b969995985093965092949392505050565b5f6020828403121561451a575f80fd5b813561089981614302565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b038111828210171561455e5761455e614525565b6040525050565b5f6001600160401b0382111561457d5761457d614525565b50601f01601f191660200190565b5f82601f83011261459a575f80fd5b81356145a581614565565b6040516145b28282614539565b8281528560208487010111156145c6575f80fd5b826020860160208301375f92810160200192909252509392505050565b803563ffffffff8116811461442a575f80fd5b5f805f805f805f60e0888a03121561460c575f80fd5b8735965060208801356001600160401b03811115614628575f80fd5b6146348a828b0161458b565b965050604088013561464581614302565b9450606088013561465581614302565b935061466360808901614414565b925061467160a089016145e3565b915061467f60c08901614414565b905092959891949750929550565b5f6001600160401b038211156146a5576146a5614525565b5060051b60200190565b5f82601f8301126146be575f80fd5b813560206146cb8261468d565b6040516146d88282614539565b80915083815260208101915060208460051b8701019350868411156146fb575f80fd5b602086015b84811015611e2d5780358352918301918301614700565b5f805f805f60a0868803121561472b575f80fd5b853561473681614302565b9450602086013561474681614302565b935060408601356001600160401b0380821115614761575f80fd5b61476d89838a016146af565b94506060880135915080821115614782575f80fd5b61478e89838a016146af565b935060808801359150808211156147a3575f80fd5b506147b08882890161458b565b9150509295509295909350565b5f805f80608085870312156147d0575f80fd5b84359350602085013592506147e7604086016145e3565b91506147f560608601614414565b905092959194509250565b803561ffff8116811461442a575f80fd5b5f8060408385031215614822575f80fd5b8235915061445060208401614800565b5f8060408385031215614843575f80fd5b82356001600160401b0380821115614859575f80fd5b818501915085601f83011261486c575f80fd5b813560206148798261468d565b6040516148868282614539565b83815260059390931b85018201928281019150898411156148a5575f80fd5b948201945b838610156148cc5785356148bd81614302565b825294820194908201906148aa565b965050860135925050808211156148e1575f80fd5b50613ea8858286016146af565b5f815180845260208085019450602084015f5b8381101561491d57815187529582019590820190600101614901565b509495945050505050565b602081525f61089960208301846148ee565b5f805f6060848603121561494c575f80fd5b833561495781614302565b9250602084013561496781614302565b929592945050506040919091013590565b5f805f6060848603121561498a575f80fd5b83359250602084013591506149a160408501614414565b90509250925092565b5f805f606084860312156149bc575f80fd5b8335925060208401356149ce81614302565b915060408401356149de81614302565b809150509250925092565b5f805f805f608086880312156149fd575f80fd5b85356001600160401b03811115614a12575f80fd5b614a1e88828901614459565b9096509450506020860135614a3281614302565b9250614a4060408701614800565b91506060860135614a5081614302565b809150509295509295909350565b801515811461209b575f80fd5b5f8060408385031215614a7c575f80fd5b8235614a8781614302565b9150602083013561440981614a5e565b5f805f805f8060a08789031215614aac575f80fd5b86356001600160401b03811115614ac1575f80fd5b614acd89828a01614459565b9097509550506020870135614ae181614302565b9350604087013592506060870135614af881614302565b9150614b0660808801614800565b90509295509295509295565b5f8060408385031215614b23575f80fd5b82359150614450602084016145e3565b5f8060408385031215614b44575f80fd5b50508035926020909101359150565b5f805f805f8060a08789031215614b68575f80fd5b8635955060208701356001600160401b03811115614b84575f80fd5b614b9089828a01614459565b9096509450506040870135614ba481614302565b9250614bb2606088016145e3565b9150614b0660808801614414565b5f805f8060408587031215614bd3575f80fd5b84356001600160401b0380821115614be9575f80fd5b614bf588838901614459565b90965094506020870135915080821115614c0d575f80fd5b50614c1a87828801614459565b95989497509550505050565b5f805f8060808587031215614c39575f80fd5b843593506020850135614c4b81614302565b925060408501356147e781614302565b5f805f60608486031215614c6d575f80fd5b833592506020840135915060408401356149de81614302565b5f8060408385031215614c97575f80fd5b8235614ca281614302565b9150602083013561440981614302565b5f805f8060608587031215614cc5575f80fd5b84356001600160401b03811115614cda575f80fd5b614ce687828801614459565b9095509350506020850135614cfa81614302565b91506040850135614d0a81614302565b939692955090935050565b5f805f805f60a08688031215614d29575f80fd5b8535614d3481614302565b94506020860135614d4481614302565b9350604086013592506060860135915060808601356001600160401b03811115614d6c575f80fd5b6147b08882890161458b565b5f60208284031215614d88575f80fd5b81516001600160401b03811115614d9d575f80fd5b8201601f81018413614dad575f80fd5b8051614db881614565565b604051614dc58282614539565b828152866020848601011115614dd9575f80fd5b610954836020830160208701614387565b9182526001600160a01b0316602082015260400190565b5f805f8060808587031215614e14575f80fd5b84356001600160401b03811115614e29575f80fd5b614e358782880161458b565b9450506020850135614e4681614302565b9250614e5460408601614800565b91506060850135614d0a81614302565b5f60208284031215614e74575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03818116838216019080821115614eaf57614eaf614e7b565b5092915050565b600181811c90821680614eca57607f821691505b602082108103614ee857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081525f614fa360408301856148ee565b8281036020840152614fb581856148ee565b95945050505050565b5f60208284031215614fce575f80fd5b815161089981614302565b5f60208284031215614fe9575f80fd5b815161089981614a5e565b818382375f9101908152919050565b60208082526028908201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604082015267373a3937b63632b960c11b606082015260800190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60c081525f61508660c083018a8c61504b565b6001600160a01b03898116602085015263ffffffff891660408501526001600160401b03881660608501528616608084015282810360a08401526150cb81858761504b565b9b9a5050505050505050505050565b601f8211156108e057805f5260205f20601f840160051c810160208510156150ff5750805b601f840160051c820191505b81811015611213575f815560010161510b565b6001600160401b0383111561513557615135614525565b615149836151438354614eb6565b836150da565b5f601f84116001811461517a575f85156151635750838201355b5f19600387901b1c1916600186901b178355611213565b5f83815260208120601f198716915b828110156151a95786850135825560209485019460019092019101615189565b50868210156151c5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160401b03828116828216039080821115614eaf57614eaf614e7b565b81516001600160401b0381111561521057615210614525565b6152248161521e8454614eb6565b846150da565b602080601f831160018114615257575f84156152405750858301515b5f19600386901b1c1916600185901b1785556133cb565b5f85815260208120601f198616915b8281101561528557888601518255948401946001909101908401615266565b50858210156152a257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a0604082018190525f906152dd908301866148ee565b82810360608401526152ef81866148ee565b9050828103608084015261350481856143a9565b5f60208284031215615313575f80fd5b815161089981614357565b5f60033d11156153345760045f803e505f5160e01c5b90565b5f60443d10156153445790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561537357505050505090565b828501915081518181111561538b5750505050505090565b843d87010160208285010111156153a55750505050505090565b6153b460208286010187614539565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b608081525f61541960808301876143a9565b6001600160a01b039590951660208301525063ffffffff9290921660408301526001600160401b0316606090910152919050565b818103818111156107ea576107ea614e7b565b808201808211156107ea576107ea614e7b565b60ff60f81b8460f81b1681525f8351615493816001850160208801614387565b8351908301906154aa816001840160208801614387565b0160010195945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906154f0908301846143a9565b97965050505050505056fe93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4aea164736f6c6343000818000a","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x5":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x2a68925cf5169f28586095d5b5b9933b3008f4c793a48be4f59b8b2bc62aa60a":"0x1","0x54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8":"0x2","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0xffffffffffffffff000100010000000000000000000000000000000000000000","0xafa26c20e8b3d9a2853d642cfe1021dae26242ffedfac91c97aab212c1a4b93b":"0xffffffffffffffff000100010000000000000000000000000000000000000000","0xef5b11c47ebee44618abc22110e10e3b408ea5e799056d2b38461aa7b97c5a97":"0x1","0xfb9e8e321b8a5ec48f12a7b41f22c6e595d761285c9eb19d8dda7c99edf1b54f":"0x36574680000000000000000000000000000000000000000000000000000000a"}},"0x6e1eb616c7d69491f9a880f815ff5574768cba20":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806314ab90381161005b57806314ab90381461010957806316a25cbd1461011c5780631896f70a146101695780635b0fc9c31461017c57600080fd5b80630178b8bf1461008257806302571be3146100cb57806306ab5923146100f4575b600080fd5b6100ae610090366004610416565b6000908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ae6100d9366004610416565b6000908152602081905260409020546001600160a01b031690565b61010761010236600461044b565b61018f565b005b610107610117366004610480565b61024c565b61015061012a366004610416565b600090815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016100c2565b6101076101773660046104bd565b6102ef565b61010761018a3660046104bd565b610384565b60008381526020819052604090205483906001600160a01b031633146101b457600080fd5b60408051602080820187905281830186905282518083038401815260608301808552815191909201206001600160a01b0386169091529151859187917fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829181900360800190a3600090815260208190526040902080546001600160a01b0319166001600160a01b039390931692909217909155505050565b60008281526020819052604090205482906001600160a01b0316331461027157600080fd5b60405167ffffffffffffffff8316815283907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a250600091825260208290526040909120600101805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b60008281526020819052604090205482906001600160a01b0316331461031457600080fd5b6040516001600160a01b038316815283907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a25060009182526020829052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b60008281526020819052604090205482906001600160a01b031633146103a957600080fd5b6040516001600160a01b038316815283907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a25060009182526020829052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60006020828403121561042857600080fd5b5035919050565b80356001600160a01b038116811461044657600080fd5b919050565b60008060006060848603121561046057600080fd5b83359250602084013591506104776040850161042f565b90509250925092565b6000806040838503121561049357600080fd5b82359150602083013567ffffffffffffffff811681146104b257600080fd5b809150509250929050565b600080604083850312156104d057600080fd5b823591506104e06020840161042f565b9050925092905056fea164736f6c6343000811000a","storage":{"0x859ecef2e168dc10231b000bd53493b42bc9d944cac29d94582c1e1d43592131":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa"}},"0x7bb6cd9be29fab783c0b494a06fed8b2e2596b7a":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636debcb8d1161008c578063b34f33c511610066578063b34f33c514610741578063d0778d6c14610814578063ef2c3088146108f2578063f5090c1e14610980576100ea565b80636debcb8d146105ca5780636fab95b3146106585780637b1039991461071d576100ea565b8063511f1112116100c8578063511f1112146103c557806361603dd91461044857806368b6154f146104bd5780636ccbae5f1461059b576100ea565b806307eca395146100ef578063280d9b051461021457806330135293146102f2575b600080fd5b610212600480360360a081101561010557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460018302840111600160201b8311171561016757600080fd5b919390929091602081019035600160201b81111561018457600080fd5b82018360208201111561019657600080fd5b803590602001918460018302840111600160201b831117156101b757600080fd5b919390929091602081019035600160201b8111156101d457600080fd5b8201836020820111156101e657600080fd5b803590602001918460018302840111600160201b8311171561020757600080fd5b509092509050610aae565b005b610212600480360360a081101561022a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561026457600080fd5b82018360208201111561027657600080fd5b803590602001918460018302840111600160201b8311171561029757600080fd5b919390929091602081019035600160201b8111156102b457600080fd5b8201836020820111156102c657600080fd5b803590602001918460018302840111600160201b831117156102e757600080fd5b509092509050610c92565b6102126004803603608081101561030857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561033757600080fd5b82018360208201111561034957600080fd5b803590602001918460018302840111600160201b8311171561036a57600080fd5b919390929091602081019035600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111600160201b831117156103ba57600080fd5b509092509050610e3d565b610212600480360360608110156103db57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561040a57600080fd5b82018360208201111561041c57600080fd5b803590602001918460018302840111600160201b8311171561043d57600080fd5b509092509050610fcc565b6102126004803603604081101561045e57600080fd5b81359190810190604081016020820135600160201b81111561047f57600080fd5b82018360208201111561049157600080fd5b803590602001918460018302840111600160201b831117156104b257600080fd5b5090925090506110c9565b610212600480360360a08110156104d357600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460018302840111600160201b8311171561054057600080fd5b919390929091602081019035600160201b81111561055d57600080fd5b82018360208201111561056f57600080fd5b803590602001918460018302840111600160201b8311171561059057600080fd5b5090925090506111ae565b6105b8600480360360208110156105b157600080fd5b50356113a8565b60408051918252519081900360200190f35b610212600480360360808110156105e057600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561061a57600080fd5b82018360208201111561062c57600080fd5b803590602001918460018302840111600160201b8311171561064d57600080fd5b5090925090506113ba565b6102126004803603606081101561066e57600080fd5b81359190810190604081016020820135600160201b81111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460018302840111600160201b831117156106c257600080fd5b919390929091602081019035600160201b8111156106df57600080fd5b8201836020820111156106f157600080fd5b803590602001918460018302840111600160201b8311171561071257600080fd5b5090925090506114d4565b610725611675565b604080516001600160a01b039092168252519081900360200190f35b6102126004803603608081101561075757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919390929091602081019035600160201b8111156107d657600080fd5b8201836020820111156107e857600080fd5b803590602001918460018302840111600160201b8311171561080957600080fd5b509092509050611684565b610212600480360360a081101561082a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561086457600080fd5b82018360208201111561087657600080fd5b803590602001918460018302840111600160201b8311171561089757600080fd5b919390929091602081019035600160201b8111156108b457600080fd5b8201836020820111156108c657600080fd5b803590602001918460018302840111600160201b831117156108e757600080fd5b5090925090506117de565b6102126004803603608081101561090857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561094257600080fd5b82018360208201111561095457600080fd5b803590602001918460018302840111600160201b8311171561097557600080fd5b5090925090506119e4565b610212600480360360c081101561099657600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156109d057600080fd5b8201836020820111156109e257600080fd5b803590602001918460018302840111600160201b83111715610a0357600080fd5b919390929091602081019035600160201b811115610a2057600080fd5b820183602082011115610a3257600080fd5b803590602001918460018302840111600160201b83111715610a5357600080fd5b919390929091602081019035600160201b811115610a7057600080fd5b820183602082011115610a8257600080fd5b803590602001918460018302840111600160201b83111715610aa357600080fd5b509092509050611ad3565b610bb163ce9fb82b89898989898960405160240180876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f820116905080830192505050985050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038a811660048301908152602483018b9052608060448401908152608484018a90529190931692630467e014928c928c928c928c928c928c92909190606481019060a401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050505050505050505050565b610d8363b88d4fde888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040516315eab15d60e21b81526001600160a01b03898116600483019081528982166024840152604483018990526080606484019081526084840188905291909316926357aac574928b928b928b928b928b929160a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b5050505050505050505050565b610f09637c69eae28787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038881166004830190815260248301899052608060448401908152608484018890529190931692630467e014928a928a928a928a9290606481019060a401858580828437600081840152601f19601f8201169050808301925050508381038252600081526020016020019650505050505050600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050505050505050565b604080516001600160a01b038616602482015260448082018690528251808303909101815260649091018252602081810180516001600160e01b0316632392c18960e01b17815291519091208251601f85018390048302810183019093528383526110569290918691908690869081908401838280828437600092019190915250611d5492505050565b60015460408051631292e83560e11b81526001600160a01b0387811660048301526024820187905291519190921691632525d06a91604480830192600092919082900301818387803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b5050505050505050565b6040805160248082018690528251808303909101815260449091018252602081810180516001600160e01b0316630852cd8d60e31b17815291519091208251601f85018390048302810183019093528383526111449290918691908690869081908401838280828437600092019190915250611d5492505050565b6001546040805163e67ca8a360e01b81526004810186905290516001600160a01b039092169163e67ca8a39160248082019260009290919082900301818387803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b50505050505050565b61129f639e5be9a5888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926302759c37928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561132757600080fd5b505afa15801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610e1c57600080fd5b60009081526020819052604090205490565b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b0316632142170760e11b17815291519091208251601f850183900483028101830190935283835261144c9290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516315eab15d60e21b81526001600160a01b0388811660048301528781166024830152604482018790526080606483015260006084830181905292519316926357aac5749260c48084019391929182900301818387803b1580156114b557600080fd5b505af11580156114c9573d6000803e3d6000fd5b505050505050505050565b611585635cbe11128686866040516024018084815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09c909c1b9b909b178b5293519099208951918c018490048402820184019099528a81528e975095508a9450899350839250508401838280828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b039093169263e67ca8a39284926368b62d32928b928b928b929190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b1580156114b557600080fd5b6001546001600160a01b031690565b61175063d8d3cc6e8787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b60015460405163b546666960e01b81526001600160a01b03888116600483019081526024830189905260606044840190815260648401889052919093169263b5466669928a928a928a928a9290608401848480828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610fac57600080fd5b6118cf639d743989888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926357aac574928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561195757600080fd5b505afa15801561196b573d6000803e3d6000fd5b505050506040513d602081101561198157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260806064820152600060848201819052915160c4808301939282900301818387803b158015610e1c57600080fd5b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b03166323b872dd60e01b17815291519091208251601f8501839004830281018301909352838352611a769290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516302759c3760e01b81526001600160a01b038881166004830152878116602483015260448201879052915191909216916302759c3791606480830192600092919082900301818387803b1580156114b557600080fd5b611bf063c29b52f98a8a8a8a8a8a8a60405160240180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505099505050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b8152600481018a815260248201928352604482018990526001600160a01b03909316926357aac574928d928d9286926368b62d32928f928f928f92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015611c7857600080fd5b505afa158015611c8c573d6000803e3d6000fd5b505050506040513d6020811015611ca257600080fd5b50516040516001600160e01b031960e086901b1681526001600160a01b0380851660048301908152908416602483015260448201839052608060648301908152608483018b90528b928b92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015611d3157600080fd5b505af1158015611d45573d6000803e3d6000fd5b50505050505050505050505050565b6000828152602081815260408083205481518084018890523060601b81840152605480820183905283518083039091018152607490910190925281519190920120909190611db3908490611da790611ea9565b9063ffffffff611efa16565b90506001600160a01b03811615801590611e4957506001546040805163430c208160e01b81526001600160a01b038481166004830152602482018890529151919092169163430c2081916044808301926020929190829003018186803b158015611e1c57600080fd5b505afa158015611e30573d6000803e3d6000fd5b505050506040513d6020811015611e4657600080fd5b50515b611e8e576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b50505060009081526020819052604090208054600101905550565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114611f0d57506000611fe3565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f535760009350505050611fe3565b8060ff16601b14158015611f6b57508060ff16601c14155b15611f7c5760009350505050611fe3565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015611fd3573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea265627a7a7231582014816bfd0c1519ce8c4cf272eb0526ffdba3abef0df7f17deb0da40bd8abb77f64736f6c634300050c0032","storage":{"0x1":"0xc58206842e4030a3b2cabc78780ae7635173c533"}},"0x7c3c91245769c8b7450ad522792dec4bd4bf797f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c80631bf7e13e146100435780636ccbae5f1461006c578063a424740014610099575b5f80fd5b610056610051366004610749565b6100bc565b604051610063919061082c565b60405180910390f35b61008b61007a36600461083e565b5f9081526001602052604090205490565b604051908152602001610063565b6100ac6100a7366004610749565b6101d6565b6040519015158152602001610063565b60605f5a90506100cd8585856101d6565b6101315760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e61676572466f727761726465723a205349474e415455604482015269149157d253959053125160b21b60648201526084015b60405180910390fd5b6101cb6101416020870187610870565b5f546001600160a01b031660408801358461015f60608b018b610889565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061023292505050565b9150505b9392505050565b5f61022a6101e38561093a565b5f54604080516020601f88018190048102820181019092528681526001600160a01b03909216919087908790819084018382808284375f9201919091525061030e92505050565b949350505050565b606061023d85610453565b5f80876001600160a01b0316866102568b8a898961047e565b60405161026391906109f5565b5f604051808303815f8787f1925050503d805f811461029d576040519150601f19603f3d011682016040523d82523d5f602084013e6102a2565b606091505b5090925090506102b3603f87610a10565b5a116102c1576102c1610a2f565b61030182826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506104ae565b9998505050505050505050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610352573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103769190610a43565b90505f6104238660600151805190602001208688602001516040516020016103c39392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561044957508551610449906001600160a01b031682866104e7565b9695505050505050565b5f8181526001602081905260409091205461046d91610a5a565b5f9182526001602052604090912055565b606082858560405160200161049593929190610a7f565b6040516020818303038152906040529050949350505050565b606083156104bd5750816101cf565b8251156104cd5782518084602001fd5b8160405162461bcd60e51b8152600401610128919061082c565b5f805f6104f48585610622565b90925090505f81600481111561050c5761050c610abd565b14801561052a5750856001600160a01b0316826001600160a01b0316145b1561053a576001925050506101cf565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401610561929190610ad1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161059f91906109f5565b5f60405180830381855afa9150503d805f81146105d7576040519150601f19603f3d011682016040523d82523d5f602084013e6105dc565b606091505b50915091508180156105ef575080516020145b801561061657508051630b135d3f60e11b906106149083016020908101908401610a43565b145b98975050505050505050565b5f808251604103610656576020830151604084015160608501515f1a61064a87828585610664565b9450945050505061065d565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561069957505f90506003610740565b8460ff16601b141580156106b157508460ff16601c14155b156106c157505f90506004610740565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610712573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661073a575f60019250925050610740565b91505f90505b94509492505050565b5f805f6040848603121561075b575f80fd5b833567ffffffffffffffff80821115610772575f80fd5b9085019060808288031215610785575f80fd5b9093506020850135908082111561079a575f80fd5b818601915086601f8301126107ad575f80fd5b8135818111156107bb575f80fd5b8760208285010111156107cc575f80fd5b6020830194508093505050509250925092565b5f5b838110156107f95781810151838201526020016107e1565b50505f910152565b5f81518084526108188160208601602086016107df565b601f01601f19169290920160200192915050565b602081525f6101cf6020830184610801565b5f6020828403121561084e575f80fd5b5035919050565b80356001600160a01b038116811461086b575f80fd5b919050565b5f60208284031215610880575f80fd5b6101cf82610855565b5f808335601e1984360301811261089e575f80fd5b83018035915067ffffffffffffffff8211156108b8575f80fd5b60200191503681900382131561065d575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715610903576109036108cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610932576109326108cc565b604052919050565b5f6080823603121561094a575f80fd5b6109526108e0565b61095b83610855565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff8082111561098b575f80fd5b9085019036601f83011261099d575f80fd5b8135818111156109af576109af6108cc565b6109c1601f8201601f19168501610909565b915080825236848285010111156109d6575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8251610a068184602087016107df565b9190910192915050565b5f82610a2a57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215610a53575f80fd5b5051919050565b80820180821115610a7957634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8451610a908184602089016107df565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f61022a604083018461080156fea164736f6c6343000818000a","storage":{"0x0":"0x39a27956b78d00a4e00ea8833ff0947410a2933f"}},"0x8861cdfa38838531275ce12f9e795c3b9ff29cbe":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x936188f2c3c8e8c95e425b6fe41c2ac9e701585e":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x94f57ed7e9af03a10e8eb23ce1b3c7914a182b0f":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x95f29431aeb52c0d5dbeeec36010b8e2ca69cb3d":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x9b2565a3545a1312bdcb6e7148a7f7cae8c2706b":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806373cc48a61161008857806398d35f201161006357806398d35f2014610215578063bd7ed31a1461021d578063c327deef14610245578063d7b82ebe1461026d575f80fd5b806373cc48a6146101af5780638438dc04146101ef5780638da5cb5b14610202575f80fd5b806313af4035116100c357806313af40351461015657806328e7677d146101695780632c095cbb1461017c578063435cc1621461018f575f80fd5b8063020ed8d3146100e9578063087991bc146100fe5780630b1a249514610143575b5f80fd5b6100fc6100f73660046122ff565b610280565b005b61011161010c36600461238a565b610300565b6040805163ffffffff94851681529390921660208401526001600160601b031916908201526060015b60405180910390f35b6100fc610151366004612510565b61036c565b6100fc6101643660046125c6565b6104da565b6100fc6101773660046122ff565b610512565b6100fc61018a3660046125e1565b61058a565b6101a261019d366004612674565b610656565b60405161013a919061278c565b6101d76101bd36600461279e565b60046020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161013a565b6100fc6101fd3660046122ff565b6106d2565b6001546101d7906001600160a01b031681565b6101a261074a565b6101d761022b36600461279e565b60056020525f90815260409020546001600160a01b031681565b6101d761025336600461279e565b60036020525f90815260409020546001600160a01b031681565b6101a261027b3660046127b7565b6107d5565b6001546001600160a01b03163314610296575f80fd5b60ff82165f8181526003602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b5f805f8060025f8787604051610317929190612817565b604080519182900390912082526020808301939093529081015f90812061ffff8b16825290925290205463ffffffff80821695506401000000008204169350600160401b900460601b91505093509350939050565b83516020808601919091205f90815260028252604080822061ffff891683529092529081205463ffffffff16906103a385846107ea565b90506103b0818784610889565b6103b8612239565b845151156103d7576103ca85856107ea565b90506103d7818885610889565b5f6103e1836108cc565b602081015190915060fe16156103f5575f80fd5b61040081602761092a565b158015610425575061041381600261092a565b1580610425575061042581600661092a565b61042d575f80fd5b61043e89898561012001518461093a565b156104795787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690556104cf565b6104988884610120015183856101200151610493876108cc565b610968565b156100e55787516020808a01919091205f90815260028252604080822061ffff8d1683529092522080546001600160e01b03191690555b505050505050505050565b6001546001600160a01b031633146104f0575f80fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610528575f80fd5b60ff82165f8181526004602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c791016102f4565b610592612239565b61059c83836107ea565b805190915061ffff16602f146105b0575f80fd5b60a081015184516020808701919091205f90815260028252604080822061ffff8a16835290925220546105e9919063ffffffff16610a7c565b6105f1575f80fd5b5f6105fb82610a94565b9050805151602082015110156100e55761061c818361012001518789610aab565b505082516020808501919091205f90815260028252604080822061ffff881683529092522080546001600160e01b03191690555b50505050565b60605f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b85518110156106c7576106bd8682815181106106af576106af612826565b602002602001015183610c4a565b9150600101610691565b5090505b9392505050565b6001546001600160a01b031633146106e8575f80fd5b60ff82165f8181526005602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d91016102f4565b5f80546107569061283a565b80601f01602080910402602001604051908101604052809291908181526020018280546107829061283a565b80156107cd5780601f106107a4576101008083540402835291602001916107cd565b820191905f5260205f20905b8154815290600101906020018083116107b057829003601f168201915b505050505081565b60606107e18383610c4a565b90505b92915050565b6107f2612239565b82516107fd90610dc6565b905061080d8160e0015183610ebf565b610815575f80fd5b5f61082382835f0151610f25565b604083015190915060ff16610838825f610fcc565b14610841575f80fd5b610120820181905260808201516108589042610a7c565b610860575f80fd5b61086e428360a00151610a7c565b610876575f80fd5b61088281838686611026565b5092915050565b6108978360a0015182610a7c565b61089f575f80fd5b825161ffff166032146108b0575f80fd5b6108bf83610120015183611106565b6108c7575f80fd5b505050565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a08201529061090583610a94565b60a081015160c08201519192506106cb91610921908290612880565b83519190611172565b5f6107e18360a001515f846112b4565b5f6109468284866113c1565b1561095d57610955828661092a565b159050610960565b505f5b949350505050565b60208101515f9060fe161561097b575f80fd5b5f610985866113e6565b90505f610991856113e6565b90505f8061099f8a82611401565b6109aa906001612893565b60ff1690505b8951811015610a6b57836109dc896109d784858f516109cf9190612880565b8f9190611424565b6114a4565b03610a3f575f6109f7876109d785868f516109cf9190612880565b90508660800151841015610a23578381118015610a175750866080015181105b95505050505050610a73565b83811180610a1757508660800151811095505050505050610a73565b905080610a4c8a82611401565b610a57906001612893565b610a649060ff16826128ac565b90506109b0565b505f93505050505b95945050505050565b5f80610a8883856128bf565b60030b12159392505050565b610a9c61228e565b6107e48261010001515f61152d565b60a084015184515f90610abe9083611548565b90505f8660a001518760c00151610ad59190612880565b9050818111610ae2575f80fd5b5f610aed868861159f565b9050805f03610b1a57610b0c610b0384866128ac565b895190876112b4565b15610b15575f80fd5b610b5b565b87515f90610b29908686611424565b90505f8213610b36575f80fd5b5f610b41898361159f565b12156104cf575f610b52888361159f565b126104cf575f80fd5b5050505050505050565b60c08101516020820181905281515111610b7c5750565b5f610b8e825f01518360200151611548565b8260200151610b9d91906128ac565b8251909150610bac90826116ec565b61ffff166040830152610bc06002826128ac565b8251909150610bcf90826116ec565b61ffff166060830152610be36002826128ac565b8251909150610bf29082611712565b63ffffffff166080830152610c086004826128ac565b82519091505f90610c1990836116ec565b61ffff169050610c2a6002836128ac565b60a084018190529150610c3d81836128ac565b60c0909301929092525050565b6060610c54612239565b610c5e84846107ea565b61012081015180516020918201205f908152600282526040808220845161ffff16835290925220805491925090600160401b900460601b6001600160601b03191615610cc35760a08201518154610cbb919063ffffffff16610a7c565b610cc3575f80fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301206001600160601b0319168688019081526101208a0180518051908501205f908152600285528981208c5161ffff16825290945292889020965187549451915190961c600160401b0268010000000000000000600160e01b03199186166401000000000267ffffffffffffffff19909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b92610db192916128e6565b60405180910390a15061010001519392505050565b610dce612239565b610dd8825f6116ec565b61ffff168152610de9826002611401565b60ff166020820152610dfc826003611401565b60ff166040820152610e0f826004611712565b63ffffffff9081166060830152610e2b90839060089061171216565b63ffffffff9081166080830152610e47908390600c9061171216565b63ffffffff90811660a0830152610e639083906010906116ec16565b61ffff1660c0820152610e7782601261173a565b60e0820181905251610eb490610e8e9060126128ac565b8260e001515160128551610ea29190612880565b610eac9190612880565b849190611424565b610100820152919050565b5f80610ed5610ece8483611548565b84906116ec565b83516020808601919091208651878301205f90815260028352604080822061ffff90951682529390925291902054600160401b900460601b6001600160601b031990811691161491505092915050565b60605f610f3184610a94565b90505b8051516020820151101561088257606081015161ffff16600114610f56575f80fd5b81515f03610f6e57610f6781611754565b9150610fa7565b60208101518151610f7e91611548565b825114610f89575f80fd5b805160208201518351610f9f9285925f92611775565b610fa7575f80fd5b8261ffff16816040015161ffff1614610fbe575f80fd5b610fc781610b65565b610f34565b5f805b83518310610fdf57610fdf61290a565b5f610fea8585611401565b60ff169050610ffa8160016128ac565b61100490856128ac565b9350805f0361101357506107e1565b61101e6001836128ac565b915050610fcf565b83518360e00151511115611038575f80fd5b61105c5f858560e0015151875161104f9190612880565b60e0870151929190611797565b611064575f80fd5b5f61106f828261152d565b9050602b61ffff16816040015161ffff160361109d576110908484836117cb565b611098575f80fd5b6110ff565b603061ffff16816040015161ffff16036110bc5761109084848361185f565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d985b1a59081c1c9bdbd988199bdd5b9960621b604482015260640160405180910390fd5b5050505050565b5f806111128482611401565b61111d906001612893565b60ff1690505f5b835181101561095d5761113984828785611797565b15611149576001925050506107e4565b6111538482611401565b61115e906001612893565b61116b9060ff16826128ac565b9050611124565b6040805160c0810182525f8082526020820181905291810182905260608082018190526080820183905260a0820152906111ac83856128ac565b90506111c26111bb5f866128ac565b8690611401565b60ff1682526111d56111bb6001866128ac565b60ff1660208301526111f26111eb6002866128ac565b86906116ec565b61ffff1660408301525f61121161120a6004876128ac565b8790611401565b905061121e6005866128ac565b945061122e868660ff8416611424565b606084015261124060ff8216866128ac565b94505f61124d8787611401565b905060208160ff16111561125f575f80fd5b61126a6001876128ac565b955061127a878760ff8416611900565b608085015261128c60ff8216876128ac565b95506112a48661129c8186612880565b899190611424565b60a0850152509195945050505050565b5f60ff600883811c82169183916112cc918616612932565b90505f6112dd600780871690612952565b600160ff919091161b9050855b87518110156113b4575f6112fe8983611401565b90505f61131661130f8460016128ac565b8b90611401565b90508160ff168660ff161015611334575f96505050505050506106cb565b8160ff168660ff1603611393578460ff168160ff161161135c575f96505050505050506106cb565b8361137f61136d60ff8816866128ac565b6113789060026128ac565b8c90611401565b1660ff165f141596505050505050506106cb565b61139e816002612893565b6113ab9060ff16846128ac565b925050506112ea565b505f979650505050505050565b5f806113cd85846114a4565b90505f6113d9856113e6565b9190911495945050505050565b5f6107e460016113f68484611401565b84919060ff1661193d565b5f82828151811061141457611414612826565b016020015160f81c905092915050565b825160609061143383856128ac565b111561143d575f80fd5b5f8267ffffffffffffffff811115611457576114576123d9565b6040519080825280601f01601f191660200182016040528015611481576020820181803683370190505b50905060208082019086860101611499828287611b43565b509095945050505050565b815160ff165f9081526005602052604080822054606085015182860151925163347ced5960e11b81526001600160a01b03909216926368f9dab2926114ee9291879160040161296b565b602060405180830381865afa158015611509573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e191906129a4565b61153561228e565b82815260c081018290526107e481610b65565b5f815b8351811061155b5761155b61290a565b5f6115668583611401565b60ff1690506115768160016128ac565b61158090836128ac565b9150805f0361158f5750611595565b5061154b565b6109608382612880565b5f6115aa8383611b98565b156115b657505f6107e4565b5f805f805f6115c5885f610fcc565b90505f6115d2885f610fcc565b90505b808211156115fe578593506115ea8987611bb3565b9550816115f6816129bb565b9250506115d5565b81811115611627578492506116138886611bb3565b94508061161f816129bb565b9150506115fe565b5f8211801561163f575061163d89878a88611797565b155b15611674578593506116518987611bb3565b95508492506116608886611bb3565b945061166d600183612880565b9150611627565b855f0361168a575f1996505050505050506107e4565b845f036116a057600196505050505050506107e4565b6116df6116ae8560016128ac565b6116b88b87611401565b60ff168a6116c78760016128ac565b6116d18d89611401565b8e949392919060ff16611bd6565b9998505050505050505050565b81515f906116fb8360026128ac565b1115611705575f80fd5b50016002015161ffff1690565b81515f906117218360046128ac565b111561172b575f80fd5b50016004015163ffffffff1690565b60605f6117478484611548565b9050610960848483611424565b602081015181516060916107e49161176c9082611548565b84519190611424565b5f611781848484611cc6565b61178c878785611cc6565b149695505050505050565b5f6117af83838486516117aa9190612880565b611cc6565b6117c186868789516117aa9190612880565b1495945050505050565b5f806117d685610a94565b90505b8051516020820151101561095d57604081015161ffff166030146117fb575f80fd5b5f61180582611ce8565b90505f61181e5f835184611d049092919063ffffffff16565b905061182c81838989611da0565b1561184f5761184561183d84611754565b868385611e9b565b93505050506106cb565b505061185a81610b65565b6117d9565b5f6118778460e0015161187184611754565b90611b98565b61187f575f80fd5b815151602083015110156118f75761189e8460e0015161187184611754565b6118a6575f80fd5b5f6118b083611ce8565b90505f6118c95f835184611d049092919063ffffffff16565b90506118d781838888611da0565b156118e7576001925050506106cb565b50506118f282610b65565b61187f565b505f9392505050565b5f602082111561190e575f80fd5b835161191a83856128ac565b1115611924575f80fd5b506020919092018101519190036101000a5f1901191690565b5f603482111561194b575f80fd5b5f80805b84811015611a29575f8761196383896128ac565b8151811061197357611973612826565b01602001516001600160f81b0319169050600360fc1b81108015906119a65750603d60f91b6001600160f81b0319821611155b6119ae575f80fd5b604051806080016040528060478152602001612b5c604791396119d6603060f884901c612880565b815181106119e6576119e6612826565b0160209081015160f81c93508311156119fd575f80fd5b611a08600187612880565b8203611a145750611a29565b5060059290921b60ff8216179160010161194f565b505f611a368560056129d0565b9050611a436008866129e7565b5f03611a5a578160ff16600584901b179250611b29565b611a656008866129e7565b600203611a935760028260ff16901c60ff16600384901b179250600281611a8c9190612880565b9050611b29565b611a9e6008866129e7565b600403611ac55760048260ff16901c60ff16600184901b179250600481611a8c9190612880565b611ad06008866129e7565b600503611af75760018260ff16901c60ff16600484901b179250600181611a8c9190612880565b611b026008866129e7565b6007036100e55760038260ff16901c60ff16600284901b179250600381611a8c9190612880565b611b3581610100612880565b9290921b9695505050505050565b60208110611b7b5781518352611b5a6020846128ac565b9250611b676020836128ac565b9150611b74602082612880565b9050611b43565b905182516020929092036101000a5f190180199091169116179052565b5f815183511480156107e157506107e1835f845f8751611775565b5f611bbe8383611401565b60ff16611bcc8360016128ac565b6107e191906128ac565b5f8480831015611be35750815b6020878901810190858701015f5b83811015611cab5782518251808214611c7b575f6020871115611c1657505f19611c52565b600184611c24896020612880565b611c2e91906128ac565b611c399060086129d0565b611c44906002612ada565b611c4e9190612880565b1990505b5f611c61838316858416612ae5565b90508015611c78579750611cbc9650505050505050565b50505b611c866020866128ac565b9450611c936020856128ac565b93505050602081611ca491906128ac565b9050611bf1565b50611cb68589612ae5565b93505050505b9695505050505050565b82515f90611cd483856128ac565b1115611cde575f80fd5b5091016020012090565b60a081015160c08201516060916107e49161176c908290612880565b604080516080810182525f8082526020820181905291810191909152606080820152611d3a611d335f856128ac565b85906116ec565b61ffff168152611d55611d4e6002856128ac565b8590611401565b60ff166020820152611d6b611d4e6003856128ac565b60ff166040820152611d94611d816004856128ac565b611d8c600485612880565b869190611424565b60608201529392505050565b5f846020015160ff16600314611db757505f610960565b826020015160ff16856040015160ff1614611dd357505f610960565b5f611ddd85611f96565b90508360c0015161ffff168161ffff1614611dfb575f915050610960565b8551610100165f03611e10575f915050610960565b60408087015160ff165f908152600360209081529082902054855191860151925163de8f50a160e01b81526001600160a01b039091169263de8f50a192611e5c928a9290600401612b04565b602060405180830381865afa158015611e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbc9190612b3c565b5f80611ea683611f96565b90505b84515160208601511015611f8b5760a085015160c08601515f91611edb91611ed2908290612880565b88519190611d04565b90508161ffff16815f015161ffff1614611ef55750611f7d565b846040015160ff16816020015160ff1614611f105750611f7d565b60408051808201909152606081525f6020820152611f3c85518951611f3591906128ac565b8290611ff7565b50611f47818961205a565b50611f52818661205a565b50611f698260400151825f0151846060015161207f565b15611f7a5760019350505050610960565b50505b611f8685610b65565b611ea9565b505f95945050505050565b5f805f5b8351811015611fe8576001811615611fbe57611fb68482611401565b60ff16611fd0565b6008611fca8583611401565b60ff16901b5b611fde9061ffff16836128ac565b9150600101611f9a565b506106cb601082901c826128ac565b60408051808201909152606081525f60208201526120166020836129e7565b1561203e576120266020836129e7565b612031906020612880565b61203b90836128ac565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526107e183845f015151848551612126565b60ff83165f908152600460205260408120546001600160a01b03166120a557505f6106cb565b60ff84165f90815260046020819052604091829020549151637bf41d7760e11b81526001600160a01b039092169163f7e83aee916120e79187918791016128e6565b602060405180830381865afa158015612102573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109609190612b3c565b60408051808201909152606081525f60208201528251821115612147575f80fd5b602085015161215683866128ac565b111561218957612189856121798760200151878661217491906128ac565b61220c565b6121849060026129d0565b612222565b5f808651805187602083010193508088870111156121a75787860182525b505050602084015b602084106121e757805182526121c66020836128ac565b91506121d36020826128ac565b90506121e0602085612880565b93506121af565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f8183111561221c5750816107e4565b50919050565b815161222e8383611ff7565b50610650838261205a565b60408051610140810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b803560ff811681146122e3575f80fd5b919050565b6001600160a01b03811681146122fc575f80fd5b50565b5f8060408385031215612310575f80fd5b612319836122d3565b91506020830135612329816122e8565b809150509250929050565b803561ffff811681146122e3575f80fd5b5f8083601f840112612355575f80fd5b50813567ffffffffffffffff81111561236c575f80fd5b602083019150836020828501011115612383575f80fd5b9250929050565b5f805f6040848603121561239c575f80fd5b6123a584612334565b9250602084013567ffffffffffffffff8111156123c0575f80fd5b6123cc86828701612345565b9497909650939450505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612416576124166123d9565b604052919050565b5f82601f83011261242d575f80fd5b813567ffffffffffffffff811115612447576124476123d9565b61245a601f8201601f19166020016123ed565b81815284602083860101111561246e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6040828403121561249a575f80fd5b6040516040810167ffffffffffffffff82821081831117156124be576124be6123d9565b8160405282935084359150808211156124d5575f80fd5b6124e18683870161241e565b835260208501359150808211156124f6575f80fd5b506125038582860161241e565b6020830152505092915050565b5f805f805f60a08688031215612524575f80fd5b61252d86612334565b9450602086013567ffffffffffffffff80821115612549575f80fd5b61255589838a0161241e565b9550604088013591508082111561256a575f80fd5b61257689838a0161248a565b9450606088013591508082111561258b575f80fd5b61259789838a0161248a565b935060808801359150808211156125ac575f80fd5b506125b98882890161241e565b9150509295509295909350565b5f602082840312156125d6575f80fd5b81356107e1816122e8565b5f805f80608085870312156125f4575f80fd5b6125fd85612334565b9350602085013567ffffffffffffffff80821115612619575f80fd5b6126258883890161241e565b9450604087013591508082111561263a575f80fd5b6126468883890161248a565b9350606087013591508082111561265b575f80fd5b506126688782880161241e565b91505092959194509250565b5f805f60408486031215612686575f80fd5b833567ffffffffffffffff8082111561269d575f80fd5b818601915086601f8301126126b0575f80fd5b81356020828211156126c4576126c46123d9565b8160051b6126d38282016123ed565b928352848101820192828101908b8511156126ec575f80fd5b83870192505b8483101561272657823586811115612708575f80fd5b6127168d86838b010161248a565b83525091830191908301906126f2565b985050508701359250508082111561273c575f80fd5b506123cc86828701612345565b5f81518084525f5b8181101561276d57602081850181015186830182015201612751565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6107e16020830184612749565b5f602082840312156127ae575f80fd5b6107e1826122d3565b5f80604083850312156127c8575f80fd5b823567ffffffffffffffff808211156127df575f80fd5b6127eb8683870161248a565b93506020850135915080821115612800575f80fd5b5061280d8582860161241e565b9150509250929050565b818382375f9101908152919050565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061284e57607f821691505b60208210810361221c57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156107e4576107e461286c565b60ff81811683821601908111156107e4576107e461286c565b808201808211156107e4576107e461286c565b600382810b9082900b03637fffffff198112637fffffff821317156107e4576107e461286c565b604081525f6128f86040830185612749565b8281036020840152610a738185612749565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f61ffff808416806129465761294661291e565b92169190910492915050565b60ff82811682821603908111156107e4576107e461286c565b606081525f61297d6060830186612749565b828103602084015261298f8186612749565b91505061ffff83166040830152949350505050565b5f602082840312156129b4575f80fd5b5051919050565b5f816129c9576129c961286c565b505f190190565b80820281158282048414176107e4576107e461286c565b5f826129f5576129f561291e565b500690565b600181815b80851115612a3457815f1904821115612a1a57612a1a61286c565b80851615612a2757918102915b93841c93908002906129ff565b509250929050565b5f82612a4a575060016107e4565b81612a5657505f6107e4565b8160018114612a6c5760028114612a7657612a92565b60019150506107e4565b60ff841115612a8757612a8761286c565b50506001821b6107e4565b5060208310610133831016604e8410600b8410161715612ab5575081810a6107e4565b612abf83836129fa565b805f1904821115612ad257612ad261286c565b029392505050565b5f6107e18383612a3c565b8181035f8312801583831316838312821617156108825761088261286c565b606081525f612b166060830186612749565b8281036020840152612b288186612749565b90508281036040840152611cbc8185612749565b5f60208284031215612b4c575f80fd5b815180151581146107e1575f80fdfe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa164736f6c6343000818000a","storage":{"0x0":"0xbd","0x1":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b":"0x17cda4e23f7237277952e075b1c48467aabfacc0","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563":"0x2b000100000e1000244a5c080249aac11d7b6f6446702e54a1607371607a","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564":"0x1a41855200fd2ce1cdde32f24e8fb500002b000100000e1000244f660802e06d","0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e565":"0x44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d0000","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x5155f5627bdf9795b3dbb8887001ada1eeba93f2","0x85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe":"0x6e2822b8856749ed179c77140dbc5f5a27410a4","0x91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7":"0x49da8861c65460639925febe1fb4b5b59b443082","0x95c6356c1b7a542b884d2484ef785c9c7224e77e1016c20007bddc15c23b452f":"0x3f9151d3fd1a82dcc5091909589900fd60ee767ee090bba000000000","0xabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05":"0x458f653495fb8d9bd0e7df468c2bf76d26c7bd9"}},"0x9dc64b2558b458a15c7f01c192d874ef460f0a29":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0x9df67c91f1bfcb4d966cf764e9218685e7c59e8a":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106101d1575f3560e01c80638b95dd71116100fe578063c86902331161009e578063e32954eb1161006e578063e32954eb146104f2578063e59d895d14610505578063e985e9c514610518578063f1cb7e0614610553575f80fd5b8063c869023314610435578063ce3decdc1461048c578063d5fa2b001461049f578063d700ff33146104b2575f80fd5b8063a8fa5682116100d9578063a8fa5682146103ac578063a9784b3e146103bf578063ac9650d814610402578063bc1c58d114610422575f80fd5b80638b95dd7114610373578063a22cb46514610386578063a4b91a0114610399575f80fd5b80633603d758116101745780635c98042b116101445780635c98042b14610327578063623195b01461033a578063691f34311461034d5780637737221314610360575f80fd5b80633603d758146102975780633b3b57de146102aa5780634cbf6ba4146102bd57806359d1d43c14610307575f80fd5b8063124a319c116101af578063124a319c146102255780632203ab561461025057806329cd62ea14610271578063304e6ade14610284575f80fd5b806301ffc9a7146101d55780630af179d7146101fd57806310f13a8c14610212575b5f80fd5b6101e86101e3366004612267565b610566565b60405190151581526020015b60405180910390f35b61021061020b3660046122bd565b610576565b005b610210610220366004612304565b610778565b610238610233366004612377565b610842565b6040516001600160a01b0390911681526020016101f4565b61026361025e3660046123a1565b610a87565b6040516101f492919061240e565b61021061027f366004612426565b610bb5565b6102106102923660046122bd565b610c4d565b6102106102a536600461244f565b610cc6565b6102386102b836600461244f565b610d64565b6101e86102cb3660046123a1565b5f82815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b61031a6103153660046122bd565b610d93565b6040516101f49190612466565b61031a61033536600461244f565b610e6f565b610210610348366004612478565b610f2a565b61031a61035b36600461244f565b610fc2565b61021061036e3660046122bd565b610ffa565b6102106103813660046124da565b611073565b6102106103943660046125b9565b611150565b6102106103a73660046125e3565b61122a565b61031a6103ba36600461261e565b6112f6565b6101e86103cd36600461265a565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b6104156104103660046126ce565b611342565b6040516101f4919061270c565b61031a61043036600461244f565b61134f565b61047761044336600461244f565b5f81815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f4565b61021061049a3660046122bd565b611387565b6102106104ad36600461276e565b6114c3565b6104da6104c036600461244f565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101f4565b61041561050036600461279c565b6114e9565b6102106105133660046127d6565b6114fe565b6101e8610526366004612808565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61031a6105613660046123a1565b6115a2565b5f61057082611666565b92915050565b826105808161168a565b610588575f80fd5b5f84815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105eb9183918d908d90819084018382808284375f9201919091525092939250506118b79050565b90505b80515160208201511015610712578661ffff165f03610652578060400151965061061781611912565b94508460405160200161062a9190612834565b60405160208183030381529060405280519060200120925061064b81611933565b9350610704565b5f61065c82611912565b9050816040015161ffff168861ffff16141580610680575061067e868261194f565b155b15610702576106db8c878a8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505060208801518d91506106d2908290612863565b8b51158a61196a565b8160400151975081602001519650809550858051906020012093506106ff82611933565b94505b505b61070d81611bc9565b6105ee565b5083511561076c5761076c8a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c925061076391508290508f612863565b8951158861196a565b50505050505050505050565b846107828161168a565b61078a575f80fd5b5f86815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107c89089908990612876565b908152602001604051809103902091826107e3929190612901565b5084846040516107f4929190612876565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161083294939291906129e2565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b03168015610894579050610570565b5f61089e85610d64565b90506001600160a01b0381166108b8575f92505050610570565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161090f9190612834565b5f60405180830381855afa9150503d805f8114610947576040519150601f19603f3d011682016040523d82523d5f602084013e61094c565b606091505b509150915081158061095f575060208151105b80610989575080601f8151811061097857610978612a13565b01602001516001600160f81b031916155b1561099a575f945050505050610570565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516109f09190612834565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b509092509050811580610a41575060208151105b80610a6b575080601f81518110610a5a57610a5a612a13565b01602001516001600160f81b031916155b15610a7c575f945050505050610570565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610b975780851615801590610ae457505f8181526020839052604081208054610ae090612885565b9050115b15610b8f5780825f8381526020019081526020015f20808054610b0690612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3290612885565b8015610b7d5780601f10610b5457610100808354040283529160200191610b7d565b820191905f5260205f20905b815481529060010190602001808311610b6057829003601f168201915b50505050509050935093505050610bae565b60011b610ab5565b505f60405180602001604052805f81525092509250505b9250929050565b82610bbf8161168a565b610bc7575f80fd5b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c578161168a565b610c5f575f80fd5b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610c93838583612901565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c3f929190612a27565b80610cd08161168a565b610cd8575f80fd5b5f82815260208190526040812080546001600160401b031691610cfa83612a3a565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f80610d7183603c6115a2565b905080515f03610d8357505f92915050565b610d8c81611cae565b9392505050565b5f83815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610dd19085908590612876565b90815260200160405180910390208054610dea90612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1690612885565b8015610e615780601f10610e3857610100808354040283529160200191610e61565b820191905f5260205f20905b815481529060010190602001808311610e4457829003601f168201915b505050505090509392505050565b5f81815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ea790612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed390612885565b8015610f1e5780601f10610ef557610100808354040283529160200191610f1e565b820191905f5260205f20905b815481529060010190602001808311610f0157829003601f168201915b50505050509050919050565b83610f348161168a565b610f3c575f80fd5b83610f48600182612863565b1615610f52575f80fd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610f8e838583612901565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ea790612885565b826110048161168a565b61100c575f80fd5b5f84815260208181526040808320546001600160401b03168352600882528083208784529091529020611040838583612901565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c3f929190612a27565b8261107d8161168a565b611085575f80fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110b792919061240e565b60405180910390a2603c830361110e57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110f284611cae565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b0316835260028252808320878452825280832086845290915290206111498382612a5f565b5050505050565b6001600160a01b03821633036111bf5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112825760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111b6565b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b5f83815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610dea90612885565b6060610d8c5f8484611ccb565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ea790612885565b826113918161168a565b611399575f80fd5b5f84815260208181526040808320546001600160401b031680845260048352818420888552909252822080549192916113d190612885565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90612885565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b505050506001600160401b0384165f9081526004602090815260408083208b8452909152902091925061147e9050858783612901565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f858287876040516114b393929190612b1e565b60405180910390a2505050505050565b816114cd8161168a565b6114d5575f80fd5b6114e483603c61038185611e88565b505050565b60606114f6848484611ccb565b949350505050565b826115088161168a565b611510575f80fd5b5f84815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906115e290612885565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612885565b80156116595780601f1061163057610100808354040283529160200191611659565b820191905f5260205f20905b81548152906001019060200180831161163c57829003601f168201915b5050505050905092915050565b5f6001600160e01b03198216631674750f60e21b1480610570575061057082611eb8565b5f336001600160a01b037f0000000000000000000000004fbf7b2f171336958be5d15ff762a5cff53635681614806116ea5750336001600160a01b037f000000000000000000000000f670681605efc4efc804f5a9b97ee89520473d5616145b156116f757506001919050565b6040516302571be360e01b8152600481018390525f907f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a96001600160a01b0316906302571be390602401602060405180830381865afa15801561175c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117809190612b4d565b90507f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e184172046001600160a01b0316816001600160a01b031603611845576040516331a9108f60e11b8152600481018490527f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e184172046001600160a01b031690636352211e90602401602060405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190612b4d565b90505b6001600160a01b03811633148061187e57506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610d8c57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610d8c565b6118ff6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261057081611bc9565b602081015181516060916105709161192a9082611edc565b84519190611f33565b60a081015160c08201516060916105709161192a908290612863565b5f81518351148015610d8c5750610d8c835f845f8751611fa7565b865160208801205f61197d878787611f33565b90508315611aa1576001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c168452909152902080546119c690612885565b159050611a23576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a0783612b68565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611a62916121f9565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611a94929190612b84565b60405180910390a261076c565b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611ae290612885565b90505f03611b40576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b2483612ba9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611b808282612a5f565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611bb593929190612bbf565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611be05750565b5f611bf2825f01518360200151611edc565b8260200151611c019190612bed565b8251909150611c109082611fc9565b61ffff166040830152611c24600282612bed565b8251909150611c339082611fc9565b61ffff166060830152611c47600282612bed565b8251909150611c569082611fef565b63ffffffff166080830152611c6c600482612bed565b82519091505f90611c7d9083611fc9565b61ffff169050611c8e600283612bed565b60a084018190529150611ca18183612bed565b60c0909301929092525050565b5f8151601414611cbc575f80fd5b5060200151600160601b900490565b6060816001600160401b03811115611ce557611ce56124c6565b604051908082528060200260200182016040528015611d1857816020015b6060815260200190600190039081611d035790505b5090505f5b82811015611e80578415611dd8575f848483818110611d3e57611d3e612a13565b9050602002810190611d509190612c00565b611d5f91602491600491612c42565b611d6891612c69565b9050858114611dd65760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111b6565b505b5f8030868685818110611ded57611ded612a13565b9050602002810190611dff9190612c00565b604051611e0d929190612876565b5f60405180830381855af49150503d805f8114611e45576040519150601f19603f3d011682016040523d82523d5f602084013e611e4a565b606091505b509150915081611e58575f80fd5b80848481518110611e6b57611e6b612a13565b60209081029190910101525050600101611d1d565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b1480610570575061057082612017565b5f815b83518110611eef57611eef612c86565b5f611efa858361203b565b60ff169050611f0a816001612bed565b611f149083612bed565b9150805f03611f235750611f29565b50611edf565b6114f68382612863565b8251606090611f428385612bed565b1115611f4c575f80fd5b5f826001600160401b03811115611f6557611f656124c6565b6040519080825280601f01601f191660200182016040528015611f8f576020820181803683370190505b50905060208082019086860101610a7c82828761205e565b5f611fb38484846120b3565b611fbe8787856120b3565b149695505050505050565b81515f90611fd8836002612bed565b1115611fe2575f80fd5b50016002015161ffff1690565b81515f90611ffe836004612bed565b1115612008575f80fd5b50016004015163ffffffff1690565b5f6001600160e01b0319821663691f343160e01b14806105705750610570826120d5565b5f82828151811061204e5761204e612a13565b016020015160f81c905092915050565b602081106120965781518352612075602084612bed565b9250612082602083612bed565b915061208f602082612863565b905061205e565b905182516020929092036101000a5f190180199091169116179052565b82515f906120c18385612bed565b11156120cb575f80fd5b5091016020012090565b5f6001600160e01b031982166304928c6760e21b14806105705750610570825f6001600160e01b0319821663547d2b4160e11b148061212457506001600160e01b03198216635c98042b60e01b145b806105705750610570825f6001600160e01b0319821663bc1c58d160e01b14806105705750610570825f6001600160e01b03198216631d9dabef60e11b148061217d57506001600160e01b031982166378e5bf0360e11b145b806105705750610570825f6001600160e01b03198216631101d5ab60e11b14806105705750610570825f6001600160e01b0319821663d700ff3360e01b14806105705750610570825f6001600160e01b03198216634fbf043360e01b148061057057506301ffc9a760e01b6001600160e01b0319831614610570565b50805461220590612885565b5f825580601f10612214575050565b601f0160209004905f5260205f20908101906122309190612233565b50565b5b80821115612247575f8155600101612234565b5090565b80356001600160e01b031981168114612262575f80fd5b919050565b5f60208284031215612277575f80fd5b610d8c8261224b565b5f8083601f840112612290575f80fd5b5081356001600160401b038111156122a6575f80fd5b602083019150836020828501011115610bae575f80fd5b5f805f604084860312156122cf575f80fd5b8335925060208401356001600160401b038111156122eb575f80fd5b6122f786828701612280565b9497909650939450505050565b5f805f805f60608688031215612318575f80fd5b8535945060208601356001600160401b0380821115612335575f80fd5b61234189838a01612280565b90965094506040880135915080821115612359575f80fd5b5061236688828901612280565b969995985093965092949392505050565b5f8060408385031215612388575f80fd5b823591506123986020840161224b565b90509250929050565b5f80604083850312156123b2575f80fd5b50508035926020909101359150565b5f5b838110156123db5781810151838201526020016123c3565b50505f910152565b5f81518084526123fa8160208601602086016123c1565b601f01601f19169290920160200192915050565b828152604060208201525f6114f660408301846123e3565b5f805f60608486031215612438575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561245f575f80fd5b5035919050565b602081525f610d8c60208301846123e3565b5f805f806060858703121561248b575f80fd5b843593506020850135925060408501356001600160401b038111156124ae575f80fd5b6124ba87828801612280565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156124ec575f80fd5b833592506020840135915060408401356001600160401b0380821115612510575f80fd5b818601915086601f830112612523575f80fd5b813581811115612535576125356124c6565b604051601f8201601f19908116603f0116810190838211818310171561255d5761255d6124c6565b81604052828152896020848701011115612575575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b6001600160a01b0381168114612230575f80fd5b80358015158114612262575f80fd5b5f80604083850312156125ca575f80fd5b82356125d581612596565b9150612398602084016125aa565b5f805f606084860312156125f5575f80fd5b83359250602084013561260781612596565b9150612615604085016125aa565b90509250925092565b5f805f60608486031215612630575f80fd5b8335925060208401359150604084013561ffff8116811461264f575f80fd5b809150509250925092565b5f805f6060848603121561266c575f80fd5b833561267781612596565b925060208401359150604084013561264f81612596565b5f8083601f84011261269e575f80fd5b5081356001600160401b038111156126b4575f80fd5b6020830191508360208260051b8501011115610bae575f80fd5b5f80602083850312156126df575f80fd5b82356001600160401b038111156126f4575f80fd5b6127008582860161268e565b90969095509350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561276157603f1988860301845261274f8583516123e3565b94509285019290850190600101612733565b5092979650505050505050565b5f806040838503121561277f575f80fd5b82359150602083013561279181612596565b809150509250929050565b5f805f604084860312156127ae575f80fd5b8335925060208401356001600160401b038111156127ca575f80fd5b6122f78682870161268e565b5f805f606084860312156127e8575f80fd5b833592506127f86020850161224b565b9150604084013561264f81612596565b5f8060408385031215612819575f80fd5b823561282481612596565b9150602083013561279181612596565b5f82516128458184602087016123c1565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105705761057061284f565b818382375f9101908152919050565b600181811c9082168061289957607f821691505b6020821081036128b757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156114e457805f5260205f20601f840160051c810160208510156128e25750805b601f840160051c820191505b81811015611149575f81556001016128ee565b6001600160401b03831115612918576129186124c6565b61292c836129268354612885565b836128bd565b5f601f84116001811461295d575f85156129465750838201355b5f19600387901b1c1916600186901b178355611149565b5f83815260208120601f198716915b8281101561298c578685013582556020948501946001909201910161296c565b50868210156129a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6129f56040830186886129ba565b8281036020840152612a088185876129ba565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6114f66020830184866129ba565b5f6001600160401b03808316818103612a5557612a5561284f565b6001019392505050565b81516001600160401b03811115612a7857612a786124c6565b612a8c81612a868454612885565b846128bd565b602080601f831160018114612abf575f8415612aa85750858301515b5f19600386901b1c1916600185901b178555612b16565b5f85815260208120601f198616915b82811015612aed57888601518255948401946001909101908401612ace565b5085821015612b0a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604081525f612b3060408301866123e3565b8281036020840152612b438185876129ba565b9695505050505050565b5f60208284031215612b5d575f80fd5b8151610d8c81612596565b5f61ffff821680612b7b57612b7b61284f565b5f190192915050565b604081525f612b9660408301856123e3565b905061ffff831660208301529392505050565b5f61ffff808316818103612a5557612a5561284f565b606081525f612bd160608301866123e3565b61ffff851660208401528281036040840152612b4381856123e3565b808201808211156105705761057061284f565b5f808335601e19843603018112612c15575f80fd5b8301803591506001600160401b03821115612c2e575f80fd5b602001915036819003821315610bae575f80fd5b5f8085851115612c50575f80fd5b83861115612c5c575f80fd5b5050820193919092039150565b80356020831015610570575f19602084900360031b1b1692915050565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a","storage":{}},"0xa06a63155145b7f2fda96d9658ec7fef3b9dcf76":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f000000000000000000000000bdefcf6429d0ac68236a6beb321cbd2ce66b463c1614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000a","storage":{}},"0xaa33d7188eb4b4a51c37199eaad2f73cf2bf0204":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0xac52f68f31577e44ae0c7e95a42dc9eb574b9383":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631bf7e13e146100465780636ccbae5f1461006f578063a424740014610090575b600080fd5b610059610054366004610cac565b6100b3565b6040516100669190610d9b565b60405180910390f35b61008261007d366004610dae565b610162565b604051908152602001610066565b6100a361009e366004610cac565b6101d6565b6040519015158152602001610066565b606060005a90506101576100ca6020870187610ddc565b6001546001600160a01b03166040880135846100e960608b018b610df9565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061023592505050565b9150505b9392505050565b600154604051636ccbae5f60e01b8152600481018390526000916001600160a01b031690636ccbae5f90602401602060405180830381865afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d09190610e40565b92915050565b600061022d6101e485610ef1565b600154604080516020601f88018190048102820181019092528681526001600160a01b039092169190879087908190840183828082843760009201919091525061030d92505050565b949350505050565b6060600080876001600160a01b0316866102518b8a8989610355565b60405161025e9190610f9b565b60006040518083038160008787f1925050503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b5090925090506102b2603f87610fb7565b5a116102c0576102c0610fd9565b61030082826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061040a565b9998505050505050505050565b600061031a848484610443565b801561022d575060608401516020908101516001600160e01b031990811660009081529182905260409091205460e01b16151561022d565b50565b6020808301516001600160e01b03191660009081529081905260408120546060919060e01b90506001600160e01b031981166000036103e75760405162461bcd60e51b815260206004820152602360248201527f42617365526f7574696e67466f727761726465723a20524f5554455f554e4b4e60448201526227aba760e91b60648201526084015b60405180910390fd5b835160031901600485019081526103ff82828661058c565b979650505050505050565b6060831561041957508161015b565b8251156104295782518084602001fd5b8160405162461bcd60e51b81526004016103de9190610d9b565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae9190610e40565b9050600061055c8660600151805190602001208688602001516040516020016104fc9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561058257508551610582906001600160a01b03168286610a38565b9695505050505050565b60606001600160e01b03198416631de5861160e31b0361061a576000806000858060200190518101906105bf9190610fef565b92509250925086838383886040516024016105dd9493929190611032565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152935061015b92505050565b6001600160e01b03198416636debcb8d60e01b0361064b576000806000858060200190518101906105bf9190610fef565b6001600160e01b0319841663280d9b0560e01b036106dd576000806000808680602001905181019061067d91906110aa565b935093509350935087848484848a60405160240161069f959493929190611118565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152945061015b9350505050565b6001600160e01b031984166361603dd960e01b0361075c5760008380602001905181019061070b9190610e40565b905084818460405160240161072192919061115d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152915061015b9050565b6001600160e01b0319841663b34f33c560e01b036107ab5760008060008580602001905181019061078d9190611176565b92509250925086838383886040516024016105dd94939291906111d0565b6001600160e01b03198416633013529360e01b036107dc5760008060008580602001905181019061078d9190611176565b6001600160e01b031984166307eca39560e01b03610830576000806000808680602001905181019061080e9190611209565b935093509350935087848484848a60405160240161069f95949392919061127e565b6001600160e01b031984166368b6154f60e01b03610862576000806000808680602001905181019061067d91906110aa565b6001600160e01b0319841663341de35b60e21b03610894576000806000808680602001905181019061067d91906110aa565b6001600160e01b03198416637a84860f60e11b0361092d576000806000806000878060200190518101906108c891906112cb565b945094509450945094508885858585858c6040516024016108ee96959493929190611360565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152955061015b945050505050565b6001600160e01b03198416636fab95b360e01b036109b2576000808480602001905181019061095c91906113b9565b915091508582828660405160240161097693929190611400565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152925061015b915050565b6001600160e01b0319841663288f888960e11b0361015b57600080848060200190518101906109e1919061142b565b91509150858282866040516024016109fb93929190611459565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152925050509392505050565b6000806000610a478585610b7a565b90925090506000816004811115610a6057610a60611489565b148015610a7e5750856001600160a01b0316826001600160a01b0316145b15610a8e5760019250505061015b565b600080876001600160a01b0316631626ba7e60e01b8888604051602401610ab692919061115d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610af49190610f9b565b600060405180830381855afa9150503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b5091509150818015610b47575080516020145b8015610b6e57508051630b135d3f60e11b90610b6c9083016020908101908401610e40565b145b98975050505050505050565b6000808251604103610bb05760208301516040840151606085015160001a610ba487828585610bbf565b94509450505050610bb8565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610bf65750600090506003610ca3565b8460ff16601b14158015610c0e57508460ff16601c14155b15610c1f5750600090506004610ca3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610c73573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c9c57600060019250925050610ca3565b9150600090505b94509492505050565b600080600060408486031215610cc157600080fd5b833567ffffffffffffffff80821115610cd957600080fd5b9085019060808288031215610ced57600080fd5b90935060208501359080821115610d0357600080fd5b818601915086601f830112610d1757600080fd5b813581811115610d2657600080fd5b876020828501011115610d3857600080fd5b6020830194508093505050509250925092565b60005b83811015610d66578181015183820152602001610d4e565b50506000910152565b60008151808452610d87816020860160208601610d4b565b601f01601f19169290920160200192915050565b60208152600061015b6020830184610d6f565b600060208284031215610dc057600080fd5b5035919050565b6001600160a01b038116811461035257600080fd5b600060208284031215610dee57600080fd5b813561015b81610dc7565b6000808335601e19843603018112610e1057600080fd5b83018035915067ffffffffffffffff821115610e2b57600080fd5b602001915036819003821315610bb857600080fd5b600060208284031215610e5257600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610e9257610e92610e59565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ec157610ec1610e59565b604052919050565b600067ffffffffffffffff821115610ee357610ee3610e59565b50601f01601f191660200190565b600060808236031215610f0357600080fd5b610f0b610e6f565b8235610f1681610dc7565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff811115610f4657600080fd5b840136601f820112610f5757600080fd5b8035610f6a610f6582610ec9565b610e98565b8181523684838501011115610f7e57600080fd5b818484018583013760009181019093015250606082015292915050565b60008251610fad818460208701610d4b565b9190910192915050565b600082610fd457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b60008060006060848603121561100457600080fd5b835161100f81610dc7565b602085015190935061102081610dc7565b80925050604084015190509250925092565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061058290830184610d6f565b600082601f83011261107657600080fd5b8151611084610f6582610ec9565b81815284602083860101111561109957600080fd5b61022d826020830160208701610d4b565b600080600080608085870312156110c057600080fd5b84516110cb81610dc7565b60208601519094506110dc81610dc7565b60408601516060870151919450925067ffffffffffffffff81111561110057600080fd5b61110c87828801611065565b91505092959194509250565b6001600160a01b038681168252851660208201526040810184905260a06060820181905260009061114b90830185610d6f565b8281036080840152610b6e8185610d6f565b82815260406020820152600061022d6040830184610d6f565b60008060006060848603121561118b57600080fd5b835161119681610dc7565b60208501516040860151919450925067ffffffffffffffff8111156111ba57600080fd5b6111c686828701611065565b9150509250925092565b60018060a01b03851681528360208201526080604082015260006111f76080830185610d6f565b82810360608401526103ff8185610d6f565b6000806000806080858703121561121f57600080fd5b845161122a81610dc7565b60208601516040870151919550935067ffffffffffffffff8082111561124f57600080fd5b61125b88838901611065565b9350606087015191508082111561127157600080fd5b5061110c87828801611065565b60018060a01b038616815284602082015260a0604082015260006112a560a0830186610d6f565b82810360608401526112b78186610d6f565b90508281036080840152610b6e8185610d6f565b600080600080600060a086880312156112e357600080fd5b85516112ee81610dc7565b60208701519095506112ff81610dc7565b60408701516060880151919550935067ffffffffffffffff8082111561132457600080fd5b61133089838a01611065565b9350608088015191508082111561134657600080fd5b5061135388828901611065565b9150509295509295909350565b6001600160a01b038781168252861660208201526040810185905260c06060820181905260009061139390830186610d6f565b82810360808401526113a58186610d6f565b905082810360a08401526103008185610d6f565b600080604083850312156113cc57600080fd5b82519150602083015167ffffffffffffffff8111156113ea57600080fd5b6113f685828601611065565b9150509250929050565b8381526060602082015260006114196060830185610d6f565b82810360408401526105828185610d6f565b6000806040838503121561143e57600080fd5b825161144981610dc7565b6020939093015192949293505050565b60018060a01b03841681528260208201526060604082015260006114806060830184610d6f565b95945050505050565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000811000a","storage":{"0x1":"0x7bb6cd9be29fab783c0b494a06fed8b2e2596b7a","0xd8b896d609e853134f3f02ce62d8049b2fdfe9356134f6d548fb1beda30db79":"0x30135293","0x4f457f36b92dc6b16c281e5877e2d8d39630135c1b7246fa9174035e1efcefbd":"0x6fab95b3","0x6b7ba3fe9941e089de60543da4a1deaef065baa963222951b2f9a138f9960820":"0x6debcb8d","0x70cff8e4ee4af5aa154324d45bcf258212c235bbe79f0707bb6273110ef4e13a":"0xf5090c1e","0x73efb0e44094dbabc6bbeecd3be1d81f272157c2dae2d647e6315f150b0b1dd2":"0xd0778d6c","0x8b1c4edded6644848281eab03ac2c319242d62b2057cffa3dd4540715bbc155e":"0xef2c3088","0xbeb5ea8fc2aeae43b7170220434aa4429fb067f0866ae25514b29f647641ca8c":"0x511f1112","0xca659f6eb372ce950e69d4d474290a6a4285f6a06a6128ca9f45419371a1e997":"0xb34f33c5","0xd12e300b5f35ba5198dd81dab97a512a154a0ad0e2cda788abdc22deba64f2a7":"0x280d9b05","0xd5453e7f4fff276a1d42f717d1db50865c284ae707a15bd6a590a3895656f27c":"0x7eca395","0xea2575ae4056f10294a848ca5ed6d215dffd1b80838142770bc441f7df607d71":"0x61603dd9","0xf8ca3ef1e3d09a0d88e209301f12626c90bec3ea586d4bce2c7a58e7eae8278f":"0x68b6154f"}},"0xb17aae5b3a7815433fc82cfd67ea245767894f03":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061012a5760003560e01c80638d839ffe116100ab578063aeb8ce9b1161006f578063aeb8ce9b146105d7578063ce1e09c014610688578063f14fcbc81461069d578063f2fde38b146106c7578063f49826be146106fa578063f7a16963146107b95761012a565b80638d839ffe1461045d5780638da5cb5b146104725780638f32d59b146104a35780639791c097146104b8578063acf1a841146105695761012a565b80637e324479116100f25780637e324479146102b8578063839df945146102e857806383e7f6ff1461031257806385f6d155146103c55780638a95b09f146104485761012a565b806301ffc9a71461012f5780633ccfd60b146101775780633d86c52f1461018e578063530e784f14610270578063715018a6146102a3575b600080fd5b34801561013b57600080fd5b506101636004803603602081101561015257600080fd5b50356001600160e01b031916610881565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610a12565b005b34801561019a57600080fd5b5061025e600480360360a08110156101b157600080fd5b810190602081018135600160201b8111156101cb57600080fd5b8201836020820111156101dd57600080fd5b803590602001918460018302840111600160201b831117156101fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401359360408101358216935060600135169050610a53565b60408051918252519081900360200190f35b34801561027c57600080fd5b5061018c6004803603602081101561029357600080fd5b50356001600160a01b0316610b42565b3480156102af57600080fd5b5061018c610ba3565b3480156102c457600080fd5b5061018c600480360360408110156102db57600080fd5b5080359060200135610bfe565b3480156102f457600080fd5b5061025e6004803603602081101561030b57600080fd5b5035610c1a565b34801561031e57600080fd5b5061025e6004803603604081101561033557600080fd5b810190602081018135600160201b81111561034f57600080fd5b82018360208201111561036157600080fd5b803590602001918460018302840111600160201b8311171561038257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c2c915050565b61018c600480360360808110156103db57600080fd5b810190602081018135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91935091506001600160a01b038135169060208101359060400135610d9e565b34801561045457600080fd5b5061025e610de9565b34801561046957600080fd5b5061025e610df0565b34801561047e57600080fd5b50610487610df6565b604080516001600160a01b039092168252519081900360200190f35b3480156104af57600080fd5b50610163610e05565b3480156104c457600080fd5b50610163600480360360208110156104db57600080fd5b810190602081018135600160201b8111156104f557600080fd5b82018360208201111561050757600080fd5b803590602001918460018302840111600160201b8311171561052857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e16945050505050565b61018c6004803603604081101561057f57600080fd5b810190602081018135600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b919350915035610e2b565b3480156105e357600080fd5b50610163600480360360208110156105fa57600080fd5b810190602081018135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fcf945050505050565b34801561069457600080fd5b5061025e611069565b3480156106a957600080fd5b5061018c600480360360208110156106c057600080fd5b503561106f565b3480156106d357600080fd5b5061018c600480360360208110156106ea57600080fd5b50356001600160a01b03166110a1565b34801561070657600080fd5b5061025e6004803603606081101561071d57600080fd5b810190602081018135600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505050602001356110bb565b61018c600480360360c08110156107cf57600080fd5b810190602081018135600160201b8111156107e957600080fd5b8201836020820111156107fb57600080fd5b803590602001918460018302840111600160201b8311171561081c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135936040810135935060608101358216925060800135166110d3565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000906001600160e01b0319838116911614806109c05750604080517472656e657728737472696e672c75696e743235362960581b815290519081900360150181209080602861186a8239604080519182900360280182206e636f6d6d697428627974657333322960881b8352905191829003600f01822090925090806026611892823960260190506040518091039020604051808070617661696c61626c6528737472696e672960781b8152506011019050604051809103902060405180807f72656e74507269636528737472696e672c75696e7432353629000000000000008152506019019050604051809103902018181818186001600160e01b031916826001600160e01b031916145b80610a0c5750604051808061182a60409139604080519182900301812091508060426118b8823960420190506040518091039020186001600160e01b031916826001600160e01b031916145b92915050565b610a1a610e05565b610a2357600080fd5b6040513390303180156108fc02916000818181858888f19350505050158015610a50573d6000803e3d6000fd5b50565b845160208601206000906001600160a01b038416158015610a7b57506001600160a01b038316155b15610acb57604080516020808201939093526bffffffffffffffffffffffff19606089901b1681830152605480820188905282518083039091018152607490910190915280519101209050610b39565b6001600160a01b038416610ade57600080fd5b604080516020808201939093526bffffffffffffffffffffffff19606089811b82168385015287811b8216605484015286901b166068820152607c80820188905282518083039091018152609c909101909152805191012090505b95945050505050565b610b4a610e05565b610b5357600080fd5b600280546001600160a01b0319166001600160a01b0383811691909117918290556040519116907ff261845a790fe29bbd6631e2ca4a5bdc83e6eed7c3271d9590d97287e00e912390600090a250565b610bab610e05565b610bb457600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c06610e05565b610c0f57600080fd5b600391909155600455565b60056020526000908152604090205481565b815160208084019190912060025460015460408051636b727d4360e11b81526004810185905290516000956001600160a01b03948516946350e9a715948a9491169263d6e4fa8692602480840193919291829003018186803b158015610c9157600080fd5b505afa158015610ca5573d6000803e3d6000fd5b505050506040513d6020811015610cbb57600080fd5b50516040516001600160e01b031960e085901b168152602481018290526044810188905260606004820190815283516064830152835189928291608490910190602087019080838360005b83811015610d1e578181015183820152602001610d06565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d6020811015610d9457600080fd5b5051949350505050565b610de285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250889350879250869150806110d3565b5050505050565b6224ea0081565b60035481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60006003610e2383611646565b101592915050565b6000610e6e84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610c2c915050565b905080341015610e7d57600080fd5b60008484604051808383808284376040805193909101839003832060015463c475abff60e01b855260048501829052602485018b90529151909750600096506001600160a01b03909116945063c475abff93506044808401936020935082900301818787803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051905034831015610f565760405133903485900380156108fc02916000818181858888f19350505050158015610f54573d6000803e3d6000fd5b505b817f3da24c024582931cfaf8267d8ed24d13a82a8068d5bd337d30ec45cea4e506ae8787868560405180806020018481526020018381526020018281038252868682818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a2505050505050565b80516020820120600090610fe283610e16565b80156110625750600154604080516312dc929d60e31b81526004810184905290516001600160a01b03909216916396e494e891602480820192602092909190829003018186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d602081101561105f57600080fd5b50515b9392505050565b60045481565b6004546000828152600560205260409020544291011061108e57600080fd5b6000908152600560205260409020429055565b6110a9610e05565b6110b257600080fd5b610a508161172e565b60006110cb848484600080610a53565b949350505050565b60006110e28787868686610a53565b905060006110f188878461179c565b885160208a01209091508060006001600160a01b038716156114ac5760015460408051633f2891eb60e21b815260048101859052306024820152604481018c905290516001600160a01b039092169163fca247ac916064808201926020929091908290030181600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b505160015460408051630ddf7fcb60e41b815290519293506000926001600160a01b039092169163ddf7fcb091600480820192602092909190829003018186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d602081101561120957600080fd5b50516040805160208181019390935280820187905281518082038301815260608201808452815191850191909120600154633f15457f60e01b90925292519294506001600160a01b031692633f15457f92606480840193829003018186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b505160408051630c4b7b8560e11b8152600481018490526001600160a01b038b8116602483015291519190921691631896f70a91604480830192600092919082900301818387803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506001600160a01b0387161561139257876001600160a01b031663d5fa2b0082896040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050505b60015460408051630a3b53db60e21b8152600481018690526001600160a01b038e81166024830152915191909216916328ed4f6c91604480830192600092919082900301818387803b1580156113e757600080fd5b505af11580156113fb573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd308d866040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505061154c565b6001600160a01b038616156114c057600080fd5b60015460408051633f2891eb60e21b8152600481018590526001600160a01b038d81166024830152604482018d90529151919092169163fca247ac9160648083019260209291908290030181600087803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b505190505b896001600160a01b0316837fca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f8d87856040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156115c45781810151838201526020016115ac565b50505050905090810190601f1680156115f15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3833411156116395760405133903486900380156108fc02916000818181858888f19350505050158015611637573d6000803e3d6000fd5b505b5050505050505050505050565b8051600090819081905b8082101561172557600085838151811061166657fe5b01602001516001600160f81b0319169050600160ff1b81101561168e57600183019250611719565b600760fd1b6001600160f81b0319821610156116af57600283019250611719565b600f60fc1b6001600160f81b0319821610156116d057600383019250611719565b601f60fb1b6001600160f81b0319821610156116f157600483019250611719565b603f60fa1b6001600160f81b03198216101561171257600583019250611719565b6006830192505b50600190920191611650565b50909392505050565b6001600160a01b03811661174157600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600354600082815260056020526040812054909142910111156117be57600080fd5b600454600083815260056020526040902054429101116117dd57600080fd5b6117e684610fcf565b6117ef57600080fd5b600082815260056020526040812081905561180a8585610c2c565b90506224ea0084101561181c57600080fd5b803410156110cb57600080fdfe6d616b65436f6d6d69746d656e7457697468436f6e66696728737472696e672c616464726573732c627974657333322c616464726573732c6164647265737329726567697374657228737472696e672c616464726573732c75696e743235362c62797465733332296d616b65436f6d6d69746d656e7428737472696e672c616464726573732c6279746573333229726567697374657257697468436f6e66696728737472696e672c616464726573732c75696e743235362c627974657333322c616464726573732c6164647265737329a265627a7a72315820dbcd3913c2076b23152296f549f9d7284be303cc004736992b455428cb03c12664736f6c634300050c0032","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x1":"0xc965345edac823d56812cd20a10316233916a605","0x2":"0xec71e4e674fe0f432693dc2b935c34bd2774c003","0x3":"0x258","0x4":"0x15180"}},"0xbdefcf6429d0ac68236a6beb321cbd2ce66b463c":{"nonce":2,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80636d435421116100885780637b37e561116100635780637b37e561146102435780638b9e028b14610256578063906c87cc1461027657806393790f4414610289575f80fd5b80636d435421146101eb5780636e9bfd9f146101fe578063794593bc14610230575f80fd5b806314afd79e116100c357806314afd79e1461018157806333bc8572146101945780634e3f9580146101b757806351710e45146101d8575f80fd5b8063027cc764146100e95780630a96ad391461011957806313ad9cab1461016c575b5f80fd5b6100fc6100f7366004610c39565b61029c565b6040516001600160a01b0390911681526020015b60405180910390f35b604080517f6ca1fbc523294317ba2167126e2f1bf211f6e6d2140e056b7e95702bf83e833f81527fc60a911f166d494bc3f347aff977ce726d7b78702e3f3e1ae125046768868167602082015201610110565b61017f61017a366004610c61565b610339565b005b6100fc61018f366004610ca9565b610531565b6101a76101a2366004610cc9565b61055c565b6040519015158152602001610110565b6101ca6101c5366004610ca9565b610595565b604051908152602001610110565b61017f6101e6366004610ca9565b6105bd565b61017f6101f9366004610cc9565b6106be565b61021161020c366004610cfa565b6107ae565b604080516001600160a01b039093168352901515602083015201610110565b6100fc61023e366004610d11565b610838565b61017f610251366004610ca9565b610a0a565b610269610264366004610ca9565b610aab565b6040516101109190610d32565b6100fc610284366004610ca9565b610b28565b6101ca610297366004610ca9565b610b53565b5f6102a683610b8e565b6001600160a01b0383165f908152602081905260409020600301548083106102f157604051636ceb340b60e01b81526001600160a01b03851660048201526024015b60405180910390fd5b6001600160a01b0384165f90815260208190526040902060030180548490811061031d5761031d610d7e565b5f918252602090912001546001600160a01b0316949350505050565b61034283610bc6565b60405163c4e8fcb560e01b81526001600160a01b038381166004830152821515602483015284169063c4e8fcb5906044015f604051808303815f87803b15801561038a575f80fd5b505af115801561039c573d5f803e3d5ffd5b505050506001600160a01b038381165f908152602081815260408083209386168352600484019091529020548015158380156103d6575080155b15610425576003830180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b038a169081179091559254928152600486019091526040902055610529565b831580156104305750805b156105295760038301545f198301905f9061044d90600190610d92565b90508181146104d8575f85600301828154811061046c5761046c610d7e565b5f918252602090912001546003870180546001600160a01b03909216925082918590811061049c5761049c610d7e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260048701909152604090208490555b846003018054806104eb576104eb610db7565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0389168252600487019052604081205550505b505050505050565b5f61053b82610b8e565b506001600160a01b039081165f908152602081905260409020600101541690565b5f61056683610b8e565b506001600160a01b039182165f9081526020818152604080832093909416825260049092019091522054151590565b5f61059f82610b8e565b506001600160a01b03165f9081526020819052604090206003015490565b6105c681610b8e565b6001600160a01b038181165f9081526020819052604090206002015416331461060d576040516388c3a11560e01b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b038082165f818152602081905260408082206002810180546001600160a01b031916905560010154905133949190911692917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec91a46001600160a01b03165f90815260208190526040902060010180546001600160a01b03191633179055565b6106c782610bc6565b6001600160a01b0381166106f95760405163a388d26360e01b81526001600160a01b03831660048201526024016102e8565b6001600160a01b038083165f9081526020819052604090206002015481169082160361074b576040516365e0406560e11b81526001600160a01b038084166004830152821660248201526044016102e8565b6040516001600160a01b038216907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da905f90a26001600160a01b039182165f90815260208190526040902060020180546001600160a01b03191691909216179055565b5f8060ff60f81b30847f6ca1fbc523294317ba2167126e2f1bf211f6e6d2140e056b7e95702bf83e833f6040516020016107eb9493929190610dcb565b60408051601f198184030181529190528051602090910120936001600160a01b0385163f7fc60a911f166d494bc3f347aff977ce726d7b78702e3f3e1ae125046768868167149350915050565b5f6001600160a01b0382166108605760405163267eaa8160e21b815260040160405180910390fd5b606083901c3314610884576040516332db94d160e21b815260040160405180910390fd5b6040516108c3906001600160f81b031990309086907f6ca1fbc523294317ba2167126e2f1bf211f6e6d2140e056b7e95702bf83e833f90602001610dcb565b604051602081830303815290604052805190602001205f1c90507fc60a911f166d494bc3f347aff977ce726d7b78702e3f3e1ae125046768868167816001600160a01b03163f0361093257604051633194665960e11b81526001600160a01b03821660048201526024016102e8565b8260405161093f90610c16565b8190604051809103905ff590508015801561095c573d5f803e3d5ffd5b50506001600160a01b038181165f81815260208181526040918290206001810180546001600160a01b03191695881695909517909455868455815192835282018690527f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15910160405180910390a16040516001600160a01b03808516915f918516907fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec908390a45092915050565b610a1381610bc6565b6001600160a01b038181165f9081526020819052604090206002015416610a58576040516335809b0b60e11b81526001600160a01b03821660048201526024016102e8565b6040515f907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a26001600160a01b03165f90815260208190526040902060020180546001600160a01b0319169055565b6060610ab682610b8e565b6001600160a01b0382165f908152602081815260409182902060030180548351818402810184019094528084529091830182828015610b1c57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610afe575b50505050509050919050565b5f610b3282610b8e565b506001600160a01b039081165f908152602081905260409020600201541690565b6001600160a01b0381165f9081526020819052604090205480610b89576040516304ca820960e41b815260040160405180910390fd5b919050565b6001600160a01b0381165f90815260208190526040902054610bc3576040516304ca820960e41b815260040160405180910390fd5b50565b610bcf81610b8e565b6001600160a01b038181165f90815260208190526040902060010154163314610bc35760405163d4ed9a1760e01b81526001600160a01b03821660048201526024016102e8565b610a4180610e0583390190565b80356001600160a01b0381168114610b89575f80fd5b5f8060408385031215610c4a575f80fd5b610c5383610c23565b946020939093013593505050565b5f805f60608486031215610c73575f80fd5b610c7c84610c23565b9250610c8a60208501610c23565b915060408401358015158114610c9e575f80fd5b809150509250925092565b5f60208284031215610cb9575f80fd5b610cc282610c23565b9392505050565b5f8060408385031215610cda575f80fd5b610ce383610c23565b9150610cf160208401610c23565b90509250929050565b5f60208284031215610d0a575f80fd5b5035919050565b5f8060408385031215610d22575f80fd5b82359150610cf160208401610c23565b602080825282518282018190525f9190848201906040850190845b81811015610d725783516001600160a01b031683529284019291840191600101610d4d565b50909695505050505050565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610db157634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603160045260245ffd5b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff19166001840152601583015260358201526055019056fe60a060405234801561000f575f80fd5b5033608052608051610a1561002c5f395f6101d20152610a155ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634ce34aa21461004e578063899e104c1461007e5780638df25d9214610091578063c4e8fcb5146100a4575b5f80fd5b61006161005c366004610834565b6100b9565b6040516001600160e01b0319909116815260200160405180910390f35b61006161008c3660046108b4565b610121565b61006161009f36600461091b565b61018a565b6100b76100b2366004610969565b6101c7565b005b5f335f525f60205260405f20546100dd576349ed56f960e11b5f523360045260245ffd5b815f5b81811015610110576101088585838181106100fd576100fd6109a2565b905060c002016102c4565b6001016100e0565b50632671a55160e11b949350505050565b5f335f525f60205260405f2054610145576349ed56f960e11b5f523360045260245ffd5b835f5b8181101561016d576101658787838181106100fd576100fd6109a2565b600101610148565b506101788484610436565b50632267841360e21b95945050505050565b5f335f525f60205260405f20546101ae576349ed56f960e11b5f523360045260245ffd5b6101b88383610436565b506346f92ec960e11b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610210576040516336abb4df60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526020819052604090205481151560ff909116151503610268576040516349271a0f60e11b81526001600160a01b038316600482015281151560248201526044015b60405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b60016102d360208301836109ca565b60038111156102e4576102e46109b6565b03610329576103266102fc60408301602084016109ef565b61030c60608401604085016109ef565b61031c60808501606086016109ef565b8460a0013561056c565b50565b600261033860208301836109ca565b6003811115610349576103496109b6565b036103b6578060a00135600114610379576040516369f9582760e01b815260a0820135600482015260240161025f565b61032661038c60408301602084016109ef565b61039c60608401604085016109ef565b6103ac60808501606086016109ef565b8460800135610660565b60036103c560208301836109ca565b60038111156103d6576103d66109b6565b0361041d576103266103ee60408301602084016109ef565b6103fe60608401604085016109ef565b61040e60808501606086016109ef565b84608001358560a00135610715565b604051631e4cbc7f60e21b815260040160405180910390fd5b808280631759616b60e11b6020525f5b8381101561055f57823582018035803b61046b57635f15d6725f52806020526024601cfd5b60a08201358060051b60c0018060808501351460a0606086013514168185013583141615905080156104a657633ae8821360e21b5f5260045ffd5b506020860195506080602084016024378060061b60400190508060a00160a4525f8160c401528060c4018160a0850160c4375f808260205f875af1935083610550573d1561053057601f3d0160051c91508060051c826003028184111561051a578184036003028280028580020360091c01015b5a60208201101561052d573d5f803e3d5ffd5b50505b6357e222f160e11b5f528260045260c0606452608451602001608452805ffd5b50505050600181019050610446565b5050505060806040525050565b6040516323b872dd60e01b5f5283600452826024528160445260205f60645f80895af1803d15601f3d1160015f51141617163d151581166106515780873b15151661065157806106405781610623573d1561060257601f3d0160051c8360051c81600302818311156105eb578183036003028280028480020360091c01015b5a6020820110156105fe573d5f803e3d5ffd5b5050505b63f486bc875f528660205285604052846060525f6080528360a05260a4601cfd5b63988919235f52866020528560405284606052836080526084601cfd5b635f15d6725f52866020526024601cfd5b505060405250505f6060525050565b833b61067757635f15d6725f52836020526024601cfd5b6040516323b872dd60e01b5f528360045282602452816044525f8060645f80895af180610707573d156106e557601f3d0160051c8260051c81600302818311156106ce578183036003028280028480020360091c01015b5a6020820110156106e1573d5f803e3d5ffd5b5050505b63f486bc875f5285602052846040528360605282608052600160a05260a4601cfd5b5060405250505f6060525050565b843b61072c57635f15d6725f52846020526024601cfd5b60405160805160a05160c051637921219560e11b5f528760045286602452856044528460645260a06084525f60a4525f8060c45f808d5af1806107d1573d156107b057601f3d0160051c8560051c8160030281831115610799578183036003028280028480020360091c01015b5a6020820110156107ac573d5f803e3d5ffd5b5050505b63f486bc875f52896020528860405287606052866080528560a05260a4601cfd5b5060809290925260a05260c05260405250505f606052505050565b5f8083601f8401126107fc575f80fd5b50813567ffffffffffffffff811115610813575f80fd5b60208301915083602060c08302850101111561082d575f80fd5b9250929050565b5f8060208385031215610845575f80fd5b823567ffffffffffffffff81111561085b575f80fd5b610867858286016107ec565b90969095509350505050565b5f8083601f840112610883575f80fd5b50813567ffffffffffffffff81111561089a575f80fd5b6020830191508360208260051b850101111561082d575f80fd5b5f805f80604085870312156108c7575f80fd5b843567ffffffffffffffff808211156108de575f80fd5b6108ea888389016107ec565b90965094506020870135915080821115610902575f80fd5b5061090f87828801610873565b95989497509550505050565b5f806020838503121561092c575f80fd5b823567ffffffffffffffff811115610942575f80fd5b61086785828601610873565b80356001600160a01b0381168114610964575f80fd5b919050565b5f806040838503121561097a575f80fd5b6109838361094e565b915060208301358015158114610997575f80fd5b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156109da575f80fd5b8135600481106109e8575f80fd5b9392505050565b5f602082840312156109ff575f80fd5b6109e88261094e56fea164736f6c6343000818000aa164736f6c6343000818000a","storage":{}},"0xbe5deac45dd1ca4ee18dc2d585d84d3d3cb82b0d":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806341539d4a146100465780634d5505d314610097578063afa764d7146100b1575b600080fd5b6100636004803603602081101561005c57600080fd5b50356100dc565b6040805195865260208601949094528484019290925260608401526001600160a01b03166080830152519081900360a00190f35b61009f610114565b60408051918252519081900360200190f35b6100da600480360360608110156100c757600080fd5b508035906020810135906040013561011a565b005b60006020819052908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b60015481565b6101226101eb565b506040805160a0810182528481526020808201858152828401858152426060808601918252336080870181815260018054810180825560009081528089528a81208a518155975188830155955160028801559351600387015551600490950180546001600160a01b0319166001600160a01b0390961695909517909455905486518981529485018890528487018a905295519495919491937fba5de06d22af2685c6c7765f60067f7d2b08c2d29f53cdf14d67f6d1c9bfb527929081900390910190a450505050565b6040518060a001604052806000801916815260200160008152602001600081526020016000815260200160006001600160a01b03168152509056fea164736f6c6343000606000a","storage":{"0x1":"0x0"}},"0xbe92182cab5b84fd18b34881a0c32771e84f5b8b":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80638da5cb5b11610125578063bebec6b4116100ad578063e985e9c51161007c578063e985e9c514610540578063f059235914610553578063f2fde38b14610566578063ffa1ad7414610579578063ffad6f551461059d57600080fd5b8063bebec6b4146104e7578063bfc5429b146104fa578063c15ae7cf1461050d578063c87b56dd1461052d57600080fd5b8063a81ce6f9116100f4578063a81ce6f91461046d578063ac9650d814610480578063b3f9e4cb146104a0578063b85afd28146104b3578063b98b3526146104d457600080fd5b80638da5cb5b146103f157806391015f6b146103f9578063933c051d1461041b578063a3f4df7e1461043d57600080fd5b80634bd79ed0116101a857806370a082311161017757806370a082311461038d578063715018a6146103a05780637e37479e146103a857806383caffbe146103bb578063869b8884146103ce57600080fd5b80634bd79ed0146103335780634f558e79146103465780636352211e14610359578063672b9f811461036c57600080fd5b80631bd8cc1a116101ef5780631bd8cc1a146102ac5780631be5e7ed146102cc578063276fabb1146102ec578063430c20811461030d578063485cc9551461032057600080fd5b806301ffc9a7146102215780630328075514610249578063081812fc1461026c57806313af403514610297575b600080fd5b61023461022f366004612c9d565b6105b0565b60405190151581526020015b60405180910390f35b61025c610257366004612d0b565b610638565b6040516102409493929190612dfe565b61027f61027a366004612e3c565b61065b565b6040516001600160a01b039091168152602001610240565b6102aa6102a5366004612e6a565b610760565b005b6102bf6102ba366004612d0b565b6107d1565b6040516102409190612e87565b6102df6102da366004612edb565b6107f0565b6040516102409190612f12565b6102ff6102fa366004612f25565b61091b565b604051908152602001610240565b61023461031b366004612f66565b61098f565b6102aa61032e366004612f92565b610aa2565b6102aa610341366004612fcb565b610bf5565b610234610354366004612e3c565b610e51565b61027f610367366004612e3c565b610e5c565b61037f61037a366004613036565b610e67565b604051610240929190613058565b6102ff61039b366004612e6a565b610f97565b6102aa611095565b6102ff6103b6366004612e6a565b6110a9565b6102bf6103c936600461307d565b611118565b6103e16103dc366004612fcb565b6114f0565b60405161024094939291906131bb565b61027f6116e6565b61040c610407366004612d0b565b611714565b60405161024093929190613208565b61042e610429366004612fcb565b611734565b60405161024093929190613234565b6102df604051806040016040528060118152602001702aa7299d10283937bc3c902932b0b232b960791b81525081565b61027f61047b366004612e3c565b6118bd565b61049361048e366004612f25565b61198b565b6040516102409190613277565b61027f6104ae366004612e3c565b611a7f565b6104c66104c1366004612d0b565b611b05565b6040516102409291906132d9565b6102df6104e23660046132fe565b611ce1565b6102df6104f5366004612e6a565b611cfb565b6102df6105083660046132fe565b611d6f565b61052061051b366004612f25565b611d89565b6040516102409190613371565b6102df61053b366004612e3c565b611e37565b61023461054e366004612f92565b611f09565b6102aa610561366004612fcb565b611f54565b6102aa610574366004612e6a565b612018565b6102df604051806040016040528060058152602001640302e352e360dc1b81525081565b6102aa6105ab366004613384565b612085565b60006001600160e01b031982166362526e6360e01b14806105e157506001600160e01b03198216636fa624af60e11b145b806105fc57506001600160e01b031982166308da864d60e31b145b8061061757506001600160e01b03198216638584880360e01b145b8061063257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806060806106498787876120d8565b93509350935093505b93509350935093565b60006106668261233a565b61067257506000919050565b61067b826123d2565b6106f25760665460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa1580156106c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ed91906133bd565b610632565b60655460405163020604bf60e21b8152600481018490526001600160a01b039091169063081812fc906024015b602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063291906133bd565b600061076a6116e6565b6001600160a01b0316146107c55760405162461bcd60e51b815260206004820152601e60248201527f50726f78795265616465723a204f574e45525f414c52454144595f534554000060448201526064015b60405180910390fd5b6107ce81612419565b50565b60606107e66107e0848661346a565b83612495565b90505b9392505050565b60606107fb826123d2565b1561088057606554604051631be5e7ed60e01b81526001600160a01b0390911690631be5e7ed9061083490879087908790600401613547565b600060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087991908101906135b0565b90506107e9565b600061088b83612617565b90506001600160a01b0381163b1561091357604051631be5e7ed60e01b81526001600160a01b03821690631be5e7ed906108cd90889088908890600401613547565b600060405180830381865afa92505050801561090b57506040513d6000823e601f3d908101601f1916820160405261090891908101906135b0565b60015b156109135791505b509392505050565b60655460405163276fabb160e01b81526000916001600160a01b03169063276fabb19061094e908690869060040161366c565b602060405180830381865afa15801561096b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e99190613680565b600061099a8261233a565b6109a657506000610632565b6109af826123d2565b610a2d5760665460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613699565b6107e9565b60655460405163430c208160e01b81526001600160a01b038581166004830152602482018590529091169063430c208190604401602060405180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e99190613699565b600054610100900460ff1615808015610ac25750600054600160ff909116105b80610adc5750303b158015610adc575060005460ff166001145b610b3f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107bc565b6000805460ff191660011790558015610b62576000805461ff0019166101001790555b606580546001600160a01b038086166001600160a01b0319928316179092556066805492851692909116919091179055610b9a61268a565b610ba261268a565b610baa6126b1565b8015610bf0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610bfd6126e1565b828114610c4c5760405162461bcd60e51b815260206004820152601d60248201527f50726f78795265616465723a204c454e4754485f4e4f545f455155414c00000060448201526064016107bc565b60005b83811015610e4a5760006068868684818110610c6d57610c6d6136bb565b9050602002810190610c7f91906136d1565b604051610c8d929190613717565b908152604051908190036020019020541115610cf1576068858583818110610cb757610cb76136bb565b9050602002810190610cc991906136d1565b604051610cd7929190613717565b90815260200160405180910390206000610cf19190612c18565b60005b838383818110610d0657610d066136bb565b9050602002810190610d189190613727565b9050811015610ddc576068868684818110610d3557610d356136bb565b9050602002810190610d4791906136d1565b604051610d55929190613717565b9081526020016040518091039020848484818110610d7557610d756136bb565b9050602002810190610d879190613727565b83818110610d9757610d976136bb565b9050602002810190610da991906136d1565b82546001810184556000938452602090932090920191610dc991836137f8565b5080610dd4816138cd565b915050610cf4565b507fb2b57b54285120d17f49f2490a39ef791441fd0ad1e6b6818c23262bf91f061c858583818110610e1057610e106136bb565b9050602002810190610e2291906136d1565b604051610e309291906138e6565b60405180910390a180610e42816138cd565b915050610c4f565b5050505050565b60006106328261233a565b600061063282612740565b606080610e73836123d2565b15610ef95760655460405163672b9f8160e01b815260048101869052602481018590526001600160a01b039091169063672b9f8190604401600060405180830381865afa158015610ec8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ef091908101906138fa565b91509150610f90565b6000610f0484612617565b90506001600160a01b0381163b15610f8e5760405163672b9f8160e01b815260048101869052602481018590526001600160a01b0382169063672b9f8190604401600060405180830381865afa925050508015610f8357506040513d6000823e601f3d908101601f19168201604052610f8091908101906138fa565b60015b15610f8e5790935091505b505b9250929050565b6065546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110099190613680565b6066549091506001600160a01b031615610632576066546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190613680565b6107e9908261395d565b61109d6126e1565b6110a76000612419565b565b606554604051633f1ba3cf60e11b81526001600160a01b0383811660048301526000921690637e37479e90602401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190613680565b606060006067868660405161112e929190613717565b9081526020016040518091039020805461114790613770565b80601f016020809104026020016040519081016040528092919081815260200182805461117390613770565b80156111c05780601f10611195576101008083540402835291602001916111c0565b820191906000526020600020905b8154815290600101906020018083116111a357829003601f168201915b5050505050905080516000036111d657506114e8565b6000604051806040016040528060068152602001653a37b5b2b71760d11b81525090506000604051806040016040528060088152602001672e6164647265737360c01b81525090506000604051806040016040528060018152602001601760f91b815250905060008385838c8c868d8d8a60405160200161125f99989796959493929190613970565b6040516020818303038152906040529050600060688260405161128291906139f3565b9081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b8282101561135c5783829060005260206000200180546112cf90613770565b80601f01602080910402602001604051908101604052809291908181526020018280546112fb90613770565b80156113485780601f1061131d57610100808354040283529160200191611348565b820191906000526020600020905b81548152906001019060200180831161132b57829003601f168201915b5050505050815260200190600101906112b0565b50505050905080516003611370919061395d565b6001600160401b03811115611387576113876133da565b6040519080825280602002602001820160405280156113ba57816020015b60608152602001906001900390816113a55790505b50965081876000815181106113d1576113d16136bb565b602002602001018190525060005b815181101561143e578181815181106113fa576113fa6136bb565b602002602001015188826001611410919061395d565b81518110611420576114206136bb565b60200260200101819052508080611436906138cd565b9150506113df565b508486848d8d8860405160200161145a96959493929190613a0f565b6040516020818303038152906040528782516001611478919061395d565b81518110611488576114886136bb565b60200260200101819052508486856040516020016114a893929190613a72565b60405160208183030381529060405287825160026114c6919061395d565b815181106114d6576114d66136bb565b60200260200101819052505050505050505b949350505050565b6060808080846001600160401b0381111561150d5761150d6133da565b604051908082528060200260200182016040528015611536578160200160208202803683370190505b509350846001600160401b03811115611551576115516133da565b60405190808252806020026020018201604052801561157a578160200160208202803683370190505b509250846001600160401b03811115611595576115956133da565b6040519080825280602002602001820160405280156115c857816020015b60608152602001906001900390816115b35790505b509150846001600160401b038111156115e3576115e36133da565b60405190808252806020026020018201604052801561161657816020015b60608152602001906001900390816116015790505b50905060005b858110156116da57611647898989898581811061163b5761163b6136bb565b905060200201356120d8565b888581518110611659576116596136bb565b60200260200101888681518110611672576116726136bb565b6020026020010188878151811061168b5761168b6136bb565b602002602001018888815181106116a4576116a46136bb565b6020908102919091010193909352929091526001600160a01b0392831690915291169052806116d2816138cd565b91505061161c565b50945094509450949050565b7fe1b9c5b9c6f25fc6c03fdb76829a7257b1cdb10ff4bc4f62e0a94358c8121905546001600160a01b031690565b6000806060611724868686612761565b9250925092505b93509350939050565b60608080836001600160401b03811115611750576117506133da565b604051908082528060200260200182016040528015611779578160200160208202803683370190505b509250836001600160401b03811115611794576117946133da565b6040519080825280602002602001820160405280156117bd578160200160208202803683370190505b509150836001600160401b038111156117d8576117d86133da565b60405190808252806020026020018201604052801561180b57816020015b60608152602001906001900390816117f65790505b50905060005b848110156118b25761183c8888888885818110611830576118306136bb565b90506020020135612761565b86848151811061184e5761184e6136bb565b60200260200101868581518110611867576118676136bb565b60200260200101868681518110611880576118806136bb565b60209081029190910101929092526001600160a01b0392831690915291169052806118aa816138cd565b915050611811565b509450945094915050565b606554604051634f558e7960e01b8152600481018390526000916001600160a01b031690634f558e7990602401602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b9190613699565b156119415750506065546001600160a01b031690565b6066546001600160a01b03161580159061196d575060006119618361296c565b6001600160a01b031614155b156119835750506066546001600160a01b031690565b506000919050565b6060816001600160401b038111156119a5576119a56133da565b6040519080825280602002602001820160405280156119d857816020015b60608152602001906001900390816119c35790505b50905060005b82811015611a7857611a48308585848181106119fc576119fc6136bb565b9050602002810190611a0e91906136d1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061299e92505050565b828281518110611a5a57611a5a6136bb565b60200260200101819052508080611a70906138cd565b9150506119de565b5092915050565b6000611a8a8261233a565b611a9657506000919050565b611a9f826123d2565b611ad45760665460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb906024016106ac565b60655460405163b3f9e4cb60e01b8152600481018490526001600160a01b039091169063b3f9e4cb9060240161071f565b606080836001600160401b03811115611b2057611b206133da565b604051908082528060200260200182016040528015611b5357816020015b6060815260200190600190039081611b3e5790505b509150836001600160401b03811115611b6e57611b6e6133da565b604051908082528060200260200182016040528015611ba157816020015b6060815260200190600190039081611b8c5790505b509050611bad836123d2565b15611c345760655460405163170b5fa560e31b81526001600160a01b039091169063b85afd2890611be690889088908890600401613ab5565b600060405180830381865afa158015611c03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c2b9190810190613b72565b91509150611cd9565b6000611c3f84612617565b90506001600160a01b0381163b15158015611c5957508415155b15611cd75760405163170b5fa560e31b81526001600160a01b0382169063b85afd2890611c8e90899089908990600401613ab5565b600060405180830381865afa925050508015611ccc57506040513d6000823e601f3d908101601f19168201604052611cc99190810190613b72565b60015b15611cd75790935091505b505b935093915050565b6060611cf08686868686612a92565b979650505050505050565b606554604051632fafb1ad60e21b81526001600160a01b038381166004830152606092169063bebec6b4906024015b600060405180830381865afa158015611d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063291908101906135b0565b6060611d7e8686868686612a92565b509695505050505050565b6060816001600160401b03811115611da357611da36133da565b604051908082528060200260200182016040528015611dcc578160200160208202803683370190505b50905060005b82811015611a7857611dfb848483818110611def57611def6136bb565b90506020020135612740565b828281518110611e0d57611e0d6136bb565b6001600160a01b039092166020928302919091019091015280611e2f816138cd565b915050611dd2565b6060611e428261233a565b611e5a57505060408051602081019091526000815290565b611e63826123d2565b611ed85760665460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015611eb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ed91908101906135b0565b60655460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401611d2a565b60405162461bcd60e51b815260206004820152601f60248201527f50726f78795265616465723a20554e535550504f525445445f4d4554484f440060448201526000906064016107bc565b611f5c6126e1565b828114611fab5760405162461bcd60e51b815260206004820152601d60248201527f50726f78795265616465723a204c454e4754485f4e4f545f455155414c00000060448201526064016107bc565b60005b83811015610e4a57612006858583818110611fcb57611fcb6136bb565b9050602002810190611fdd91906136d1565b858585818110611fef57611fef6136bb565b905060200281019061200191906136d1565b612b3e565b80612010816138cd565b915050611fae565b6120206126e1565b6001600160a01b0381166107c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bc565b61208d6126e1565b60005b83811015610e4a576120c68585838181106120ad576120ad6136bb565b90506020028101906120bf91906136d1565b8585612b3e565b806120d0816138cd565b915050612090565b600080606080856001600160401b038111156120f6576120f66133da565b60405190808252806020026020018201604052801561212957816020015b60608152602001906001900390816121145790505b509150856001600160401b03811115612144576121446133da565b60405190808252806020026020018201604052801561217757816020015b60608152602001906001900390816121625790505b509050612183856123d2565b156122845760655460405163b3f9e4cb60e01b8152600481018790526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa1580156121d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f591906133bd565b935061220085612bad565b60655460405163170b5fa560e31b81529194506001600160a01b03169063b85afd2890612235908a908a908a90600401613ab5565b600060405180830381865afa158015612252573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261227a9190810190613b72565b9092509050610652565b61228d85612617565b93506122988561296c565b92506001600160a01b0384163b151580156122b4575060008251115b156106525760405163170b5fa560e31b81526001600160a01b0385169063b85afd28906122e9908a908a908a90600401613ab5565b600060405180830381865afa92505050801561232757506040513d6000823e601f3d908101601f191682016040526123249190810190613b72565b60015b1561065257909250905093509350935093565b6000612345826123d2565b6123645760006123548361296c565b6001600160a01b03161415610632565b606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e79906024015b602060405180830381865afa1580156123ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190613699565b6066546000906001600160a01b031615806106325750606554604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401612391565b60006124236116e6565b9050817fe1b9c5b9c6f25fc6c03fdb76829a7257b1cdb10ff4bc4f62e0a94358c812190580546001600160a01b0319166001600160a01b03928316179055604051838216918316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606082516001600160401b038111156124b0576124b06133da565b6040519080825280602002602001820160405280156124e357816020015b60608152602001906001900390816124ce5790505b5090506124ef826123d2565b1561257257606554604051630dec660d60e11b81526001600160a01b0390911690631bd8cc1a906125269086908690600401613bcb565b600060405180830381865afa158015612543573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256b9190810190613bed565b9050610632565b600061257d83612617565b90506001600160a01b0381163b15158015612599575060008451115b15611a7857604051630dec660d60e11b81526001600160a01b03821690631bd8cc1a906125cc9087908790600401613bcb565b600060405180830381865afa92505050801561260a57506040513d6000823e601f3d908101601f191682016040526126079190810190613bed565b60015b15611a7857949350505050565b60665460405163b3f9e4cb60e01b8152600481018390526000916001600160a01b03169063b3f9e4cb906024015b602060405180830381865afa92505050801561267e575060408051601f3d908101601f1916820190925261267b918101906133bd565b60015b61063257506000919050565b600054610100900460ff166110a75760405162461bcd60e51b81526004016107bc90613c21565b600054610100900460ff166126d85760405162461bcd60e51b81526004016107bc90613c21565b6110a733612419565b336126ea6116e6565b6001600160a01b0316146110a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bc565b600061274b826123d2565b612758576106ed8261296c565b61063282612bad565b6000806060846001600160401b0381111561277e5761277e6133da565b6040519080825280602002602001820160405280156127b157816020015b606081526020019060019003908161279c5790505b5090506127bd846123d2565b156128bb5760655460405163b3f9e4cb60e01b8152600481018690526001600160a01b039091169063b3f9e4cb90602401602060405180830381865afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f91906133bd565b925061283a84612bad565b606554604051630dec660d60e11b81529193506001600160a01b031690631bd8cc1a9061286f90899089908990600401613c6c565b600060405180830381865afa15801561288c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128b49190810190613bed565b905061172b565b6128c484612617565b92506128cf8461296c565b91506001600160a01b0383163b151580156128e957508415155b1561172b57604051630dec660d60e11b81526001600160a01b03841690631bd8cc1a9061291e90899089908990600401613c6c565b600060405180830381865afa92505050801561295c57506040513d6000823e601f3d908101601f191682016040526129599190810190613bed565b60015b1561172b57905093509350939050565b6066546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401612645565b60606001600160a01b0383163b612a065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107bc565b600080846001600160a01b031684604051612a2191906139f3565b600060405180830381855af49150503d8060008114612a5c576040519150601f19603f3d011682016040523d82523d6000602084013e612a61565b606091505b5091509150612a898282604051806060016040528060278152602001613c8160279139612bdf565b95945050505050565b6060806000612aa388888888611118565b90506000612ab18286612495565b905060005b8151811015612b31576000828281518110612ad357612ad36136bb565b6020026020010151511115612b1f57828181518110612af457612af46136bb565b60200260200101519350818181518110612b1057612b106136bb565b60200260200101519450612b31565b80612b29816138cd565b915050612ab6565b5050509550959350505050565b818160678686604051612b52929190613717565b90815260200160405180910390209182612b6d9291906137f8565b507f0bf4b04a0f6d7d0800284e1abb0f58f795c0a25b9088634b6ab847be51001dec8484604051612b9f9291906138e6565b60405180910390a150505050565b6065546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401612645565b60608315612bee5750816107e9565b825115612bfe5782518084602001fd5b8160405162461bcd60e51b81526004016107bc9190612f12565b50805460008255906000526020600020908101906107ce91905b80821115612c4f576000612c468282612c53565b50600101612c32565b5090565b508054612c5f90613770565b6000825580601f10612c6f575050565b601f0160209004906000526020600020908101906107ce91905b80821115612c4f5760008155600101612c89565b600060208284031215612caf57600080fd5b81356001600160e01b0319811681146107e957600080fd5b60008083601f840112612cd957600080fd5b5081356001600160401b03811115612cf057600080fd5b6020830191508360208260051b8501011115610f9057600080fd5b600080600060408486031215612d2057600080fd5b83356001600160401b03811115612d3657600080fd5b612d4286828701612cc7565b909790965060209590950135949350505050565b60005b83811015612d71578181015183820152602001612d59565b50506000910152565b60008151808452612d92816020860160208601612d56565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015612df157601f19868403018952612ddf838351612d7a565b98840198925090830190600101612dc3565b5090979650505050505050565b6001600160a01b03858116825284166020820152608060408201819052600090612e2a90830185612da6565b8281036060840152611cf08185612da6565b600060208284031215612e4e57600080fd5b5035919050565b6001600160a01b03811681146107ce57600080fd5b600060208284031215612e7c57600080fd5b81356107e981612e55565b6020815260006107e96020830184612da6565b60008083601f840112612eac57600080fd5b5081356001600160401b03811115612ec357600080fd5b602083019150836020828501011115610f9057600080fd5b600080600060408486031215612ef057600080fd5b83356001600160401b03811115612f0657600080fd5b612d4286828701612e9a565b6020815260006107e96020830184612d7a565b60008060208385031215612f3857600080fd5b82356001600160401b03811115612f4e57600080fd5b612f5a85828601612cc7565b90969095509350505050565b60008060408385031215612f7957600080fd5b8235612f8481612e55565b946020939093013593505050565b60008060408385031215612fa557600080fd5b8235612fb081612e55565b91506020830135612fc081612e55565b809150509250929050565b60008060008060408587031215612fe157600080fd5b84356001600160401b0380821115612ff857600080fd5b61300488838901612cc7565b9096509450602087013591508082111561301d57600080fd5b5061302a87828801612cc7565b95989497509550505050565b6000806040838503121561304957600080fd5b50508035926020909101359150565b60408152600061306b6040830185612d7a565b8281036020840152612a898185612d7a565b6000806000806040858703121561309357600080fd5b84356001600160401b03808211156130aa57600080fd5b6130b688838901612e9a565b909650945060208701359150808211156130cf57600080fd5b5061302a87828801612e9a565b600081518084526020808501945080840160005b838110156131155781516001600160a01b0316875295820195908201906001016130f0565b509495945050505050565b60008282518085526020808601955060058183821b8501018287016000805b868110156131ac57601f1988850381018c5283518051808752908801908887019080891b88018a01865b8281101561319557858a8303018452613183828651612d7a565b948c0194938c01939150600101613169565b509e8a019e9750505093870193505060010161313f565b50919998505050505050505050565b6080815260006131ce60808301876130dc565b82810360208401526131e081876130dc565b905082810360408401526131f48186613120565b90508281036060840152611cf08185613120565b6001600160a01b03848116825283166020820152606060408201819052600090612a8990830184612da6565b60608152600061324760608301866130dc565b828103602084015261325981866130dc565b9050828103604084015261326d8185613120565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156132cc57603f198886030184526132ba858351612d7a565b9450928501929085019060010161329e565b5092979650505050505050565b6040815260006132ec6040830185612da6565b8281036020840152612a898185612da6565b60008060008060006060868803121561331657600080fd5b85356001600160401b038082111561332d57600080fd5b61333989838a01612e9a565b9097509550602088013591508082111561335257600080fd5b5061335f88828901612e9a565b96999598509660400135949350505050565b6020815260006107e960208301846130dc565b6000806000806040858703121561339a57600080fd5b84356001600160401b03808211156133b157600080fd5b6130b688838901612cc7565b6000602082840312156133cf57600080fd5b81516107e981612e55565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613418576134186133da565b604052919050565b60006001600160401b03821115613439576134396133da565b5060051b60200190565b60006001600160401b0382111561345c5761345c6133da565b50601f01601f191660200190565b600061347d61347884613420565b6133f0565b80848252602080830192508560051b85013681111561349b57600080fd5b855b818110156135125780356001600160401b038111156134bc5760008081fd5b870136601f8201126134ce5760008081fd5b80356134dc61347882613443565b81815236868385010111156134f15760008081fd5b8186840187830137600091810186019190915286525093820193820161349d565b50919695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061355b60408301858761351e565b9050826020830152949350505050565b600082601f83011261357c57600080fd5b815161358a61347882613443565b81815284602083860101111561359f57600080fd5b6114e8826020830160208701612d56565b6000602082840312156135c257600080fd5b81516001600160401b038111156135d857600080fd5b6114e88482850161356b565b60008383855260208086019550808560051b8301018460005b87811015612df157848303601f19018952813536889003601e1901811261362357600080fd5b870184810190356001600160401b0381111561363e57600080fd5b80360382131561364d57600080fd5b61365885828461351e565b9a86019a94505050908301906001016135fd565b6020815260006107e66020830184866135e4565b60006020828403121561369257600080fd5b5051919050565b6000602082840312156136ab57600080fd5b815180151581146107e957600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126136e857600080fd5b8301803591506001600160401b0382111561370257600080fd5b602001915036819003821315610f9057600080fd5b8183823760009101908152919050565b6000808335601e1984360301811261373e57600080fd5b8301803591506001600160401b0382111561375857600080fd5b6020019150600581901b3603821315610f9057600080fd5b600181811c9082168061378457607f821691505b6020821081036137a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610bf057600081815260208120601f850160051c810160208610156137d15750805b601f850160051c820191505b818110156137f0578281556001016137dd565b505050505050565b6001600160401b0383111561380f5761380f6133da565b6138238361381d8354613770565b836137aa565b6000601f841160018114613857576000851561383f5750838201355b600019600387901b1c1916600186901b178355610e4a565b600083815260209020601f19861690835b828110156138885786850135825560209485019460019092019101613868565b50868210156138a55760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016138df576138df6138b7565b5060010190565b6020815260006107e660208301848661351e565b6000806040838503121561390d57600080fd5b82516001600160401b038082111561392457600080fd5b6139308683870161356b565b9350602085015191508082111561394657600080fd5b506139538582860161356b565b9150509250929050565b80820180821115610632576106326138b7565b60008a51613982818460208f01612d56565b8a5190830190613996818360208f01612d56565b8a519101906139a9818360208e01612d56565b0187898237600090880190815286516139c6818360208b01612d56565b0184868237600090850190815283516139e3818360208801612d56565b019b9a5050505050505050505050565b60008251613a05818460208701612d56565b9190910192915050565b60008751613a21818460208c01612d56565b875190830190613a35818360208c01612d56565b8751910190613a48818360208b01612d56565b018486823760009085019081528351613a65818360208801612d56565b0198975050505050505050565b60008451613a84818460208901612d56565b845190830190613a98818360208901612d56565b8451910190613aab818360208801612d56565b0195945050505050565b6040808252810183905260006001600160fb1b03841115613ad557600080fd5b8360051b808660608501376020830193909352500160600192915050565b600082601f830112613b0457600080fd5b81516020613b1461347883613420565b82815260059290921b84018101918181019086841115613b3357600080fd5b8286015b84811015611d7e5780516001600160401b03811115613b565760008081fd5b613b648986838b010161356b565b845250918301918301613b37565b60008060408385031215613b8557600080fd5b82516001600160401b0380821115613b9c57600080fd5b613ba886838701613af3565b93506020850151915080821115613bbe57600080fd5b5061395385828601613af3565b604081526000613bde6040830185612da6565b90508260208301529392505050565b600060208284031215613bff57600080fd5b81516001600160401b03811115613c1557600080fd5b6114e884828501613af3565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60408152600061355b6040830185876135e456fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a","storage":{}},"0xc2110388dd54228ae0a834119457ede938bf0b57":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061021e5760003560e01c80638da5cb5b11610123578063acf1a841116100ab578063d547741f1161006f578063d547741f14610682578063f14fcbc8146106a2578063f23a6e61146106c2578063f2fde38b146106e2578063ffa1ad741461070257600080fd5b8063acf1a841146105e0578063bc197c8114610600578063c0c53b8b14610620578063cf01585314610640578063d53913931461066057600080fd5b8063a0e3aef1116100f2578063a0e3aef114610534578063a217fddf14610554578063a3f4df7e14610569578063a4247400146105a0578063aa271e1a146105c057600080fd5b80638da5cb5b146104c157806391d14854146104df578063983b2d56146104ff578063986502751461051f57600080fd5b80635fc1964f116101a65780636ccbae5f116101755780636ccbae5f14610439578063715018a61461045957806371e2a6571461046e57806381c81d351461048e57806383e7f6ff146104a157600080fd5b80635fc1964f146103ae578063634486da146103ce5780636352211e146103e15780636a8be89e1461041957600080fd5b80632f2ff15d116101ed5780632f2ff15d146103035780633092afd51461032557806336568abe14610345578063423f6cef14610365578063572b6c051461038557600080fd5b806301ffc9a71461022a578063150b7a021461025f5780631bf7e13e14610298578063248a9ca3146102c557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061024a6102453660046125f2565b610733565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027f61027a366004612672565b610779565b6040516001600160e01b03199091168152602001610256565b3480156102a457600080fd5b506102b86102b33660046126e4565b6108cb565b60405161025691906127a4565b3480156102d157600080fd5b506102f56102e03660046127b7565b600090815260fb602052604090206001015490565b604051908152602001610256565b34801561030f57600080fd5b5061032361031e3660046127d0565b610997565b005b34801561033157600080fd5b50610323610340366004612800565b6109c1565b34801561035157600080fd5b506103236103603660046127d0565b6109d5565b34801561037157600080fd5b5061032361038036600461281d565b610a68565b34801561039157600080fd5b5061024a6103a0366004612800565b6001600160a01b0316301490565b3480156103ba57600080fd5b506103236103c936600461288f565b610bd9565b6103236103dc366004612800565b610c21565b3480156103ed57600080fd5b506104016103fc3660046127b7565b610ce4565b6040516001600160a01b039091168152602001610256565b34801561042557600080fd5b50610323610434366004612800565b610cef565b34801561044557600080fd5b506102f56104543660046127b7565b610d38565b34801561046557600080fd5b50610323610d7e565b34801561047a57600080fd5b5061032361048936600461288f565b610d92565b61032361049c366004612800565b610dda565b3480156104ad57600080fd5b506102f56104bc366004612934565b610e57565b3480156104cd57600080fd5b506097546001600160a01b0316610401565b3480156104eb57600080fd5b5061024a6104fa3660046127d0565b610efa565b34801561050b57600080fd5b5061032361051a366004612800565b610f25565b34801561052b57600080fd5b50610323610f36565b34801561054057600080fd5b506102f561054f366004612a5c565b610f50565b34801561056057600080fd5b506102f5600081565b34801561057557600080fd5b506102b86040518060400160405280600b81526020016a454e5320437573746f647960a81b81525081565b3480156105ac57600080fd5b5061024a6105bb3660046126e4565b610ffc565b3480156105cc57600080fd5b5061024a6105db366004612800565b61104f565b3480156105ec57600080fd5b506103236105fb366004612934565b611069565b34801561060c57600080fd5b5061027f61061b366004612b35565b611222565b34801561062c57600080fd5b5061032361063b366004612bf3565b6112db565b34801561064c57600080fd5b5061032361065b366004612c3e565b611485565b34801561066c57600080fd5b506102f56000805160206133f583398151915281565b34801561068e57600080fd5b5061032361069d3660046127d0565b611592565b3480156106ae57600080fd5b506103236106bd3660046127b7565b6115b7565b3480156106ce57600080fd5b5061027f6106dd366004612d20565b61162b565b3480156106ee57600080fd5b506103236106fd366004612800565b6116bc565b34801561070e57600080fd5b506102b860405180604001604052806005815260200164302e312e3360d81b81525081565b60006001600160e01b03198216630a85bd0160e11b148061076457506001600160e01b03198216630271189760e51b145b806107735750610773826116d8565b92915050565b7ff851d5f4fccb32d2a48561b7acc01b5d4d46b7e138d49f887026f203b08c5004546000906001600160a01b0316806107b061170d565b6001600160a01b0316036108a957600080806107ce86880188612d9b565b9250925092506107dd8361171c565b6001600160a01b03841663b88d4fde30600080516020613415833981519152546040516001600160a01b03909116908c9061082390879030906000908b90602001612dfc565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016108519493929190612e3c565b600060405180830381600087803b15801561086b57600080fd5b505af115801561087f573d6000803e3d6000fd5b5050505061089561088f8261174e565b846117d3565b50630a85bd0160e11b93506108c292505050565b6040516344e7d94960e01b815260040160405180910390fd5b95945050505050565b606060005a90506108dd858585610ffc565b6108fa57604051638baa579f60e01b815260040160405180910390fd5b61098c61090a6020870187612800565b3060408801358461091e60608b018b612e6f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061185e92505050565b9150505b9392505050565b600082815260fb60205260409020600101546109b28161193f565b6109bc8383611950565b505050565b6109c96119d7565b6109d281611a50565b50565b6109dd61170d565b6001600160a01b0316816001600160a01b031614610a5a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610a648282611a68565b5050565b80610a7161170d565b6001600160a01b0316610a8382611aed565b6001600160a01b031614610ac55780610a9a61170d565b604051637ea58b1160e01b815260048101929092526001600160a01b03166024820152604401610a51565b610ace82611c03565b604080517f0a8885dd093a12d378a27df09bde33e3caca641a3d6970e06805fde8e847cb466020820152908101839052600090610b22906060015b6040516020818303038152906040528051906020012090565b80546001600160a01b0319166001600160a01b0392909216919091179055600060008051602061341583398151915254604051637921219560e11b81523060048201526001600160a01b038681166024830152604482018690526001606483015260a06084830152600060a48301529091169150819063f242432a9060c401600060405180830381600087803b158015610bbb57600080fd5b505af1158015610bcf573d6000803e3d6000fd5b5050505050505050565b610be16119d7565b60005b8151811015610a6457610c0f828281518110610c0257610c02612eb5565b6020026020010151611a50565b80610c1981612ee1565b915050610be4565b610c2c6105db61170d565b610c485760405162461bcd60e51b8152600401610a5190612efa565b6001600160a01b038116610c9e5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610a51565b610ca781611c1c565b610caf610f36565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610a64573d6000803e3d6000fd5b600061077382611aed565b610cf76119d7565b7ff851d5f4fccb32d2a48561b7acc01b5d4d46b7e138d49f887026f203b08c500480546001600160a01b0319166001600160a01b0392909216919091179055565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a838156020820152908101829052600090610d7790606001610b09565b5492915050565b610d866119d7565b610d906000611c34565b565b610d9a6119d7565b60005b8151811015610a6457610dc8828281518110610dbb57610dbb612eb5565b6020026020010151611c1c565b80610dd281612ee1565b915050610d9d565b610de56105db61170d565b610e015760405162461bcd60e51b8152600401610a5190612efa565b6001600160a01b038116610ca75760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610a51565b6000805160206133d5833981519152546040516383e7f6ff60e01b81526000916001600160a01b031690829082906383e7f6ff90610e9d90899089908990600401612f58565b6040805180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd9190612f7c565b60208101518151919250610ef091612fca565b9695505050505050565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610f2d6119d7565b6109d281611c1c565b610d906000805160206133f583398151915261036061170d565b6000805160206133d5833981519152546000906001600160a01b0316806365a69dcf8d85610f7e5730610f80565b8d5b8d8d8d8d8d8d8d6040518a63ffffffff1660e01b8152600401610fab9998979695949392919061306e565b602060405180830381865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec91906130de565b9c9b505050505050505050505050565b600061104761100a856130f7565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8692505050565b949350505050565b60006107736000805160206133f583398151915283610efa565b6110746105db61170d565b6110905760405162461bcd60e51b8152600401610a5190612efa565b6002603354036110e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a51565b60026033556000805160206133d5833981519152546040516383e7f6ff60e01b81526001600160a01b039091169060009082906383e7f6ff9061112d90889088908890600401612f58565b6040805180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612f7c565b6020810151815191925061118091612fca565b4710156111a05760405163050205f960e01b815260040160405180910390fd5b816001600160a01b031663acf1a841826020015183600001516111c39190612fca565b8787876040518563ffffffff1660e01b81526004016111e493929190612f58565b6000604051808303818588803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505060016033555050505050505050565b6000600080516020613415833981519152546001600160a01b031661124561170d565b6001600160a01b03161461126c576040516344e7d94960e01b815260040160405180910390fd5b600061127a83850185612800565b90506112858161171c565b60005b878110156112c4576112b28989838181106112a5576112a5612eb5565b90506020020135836117d3565b806112bc81612ee1565b915050611288565b5063bc197c8160e01b9a9950505050505050505050565b600054610100900460ff16158080156112fb5750600054600160ff909116105b806113155750303b158015611315575060005460ff166001145b6113785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a51565b6000805460ff19166001179055801561139b576000805461ff0019166101001790555b6000805160206133d583398151915280546001600160a01b038087166001600160a01b03199283161790925560008051602061341583398151915280548684169083161790557ff851d5f4fccb32d2a48561b7acc01b5d4d46b7e138d49f887026f203b08c5004805492851692909116919091179055611419611dc5565b611421611df3565b611429611df3565b611431611e1a565b611439611e51565b801561147f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6114906105db61170d565b6114ac5760405162461bcd60e51b8152600401610a5190612efa565b6002603354036114fe5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a51565b600260338190555060006115478c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061174e92505050565b905061155281611c03565b6115708c8c846115625730611564565b8c5b8c8c8c8c8c8c8c611e8a565b8161157f5761157f818b6117d3565b5050600160335550505050505050505050565b600082815260fb60205260409020600101546115ad8161193f565b6109bc8383611a68565b60006000805160206133d583398151915254604051631e29f97960e31b8152600481018490526001600160a01b039091169150819063f14fcbc890602401600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050505050565b6000600080516020613415833981519152546001600160a01b031661164e61170d565b6001600160a01b031614611675576040516344e7d94960e01b815260040160405180910390fd5b6001600160a01b038616156116a957600061169283850185612800565b905061169d8161171c565b6116a786826117d3565b505b5063f23a6e6160e01b9695505050505050565b6116c46119d7565b6116cd81611fd5565b6109d260008261204b565b60006001600160e01b03198216637965db0b60e01b148061077357506301ffc9a760e01b6001600160e01b0319831614610773565b6000611717612055565b905090565b6001600160a01b0381166109d25760405163b20f76e360e01b81526001600160a01b0382166004820152602401610a51565b60007f93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae60001b826040516020016117859190613195565b604051602081830303815290604052805190602001206040516020016117b5929190918252602082015260400190565b60408051601f19818403018152919052805160209091012092915050565b604080517f0a8885dd093a12d378a27df09bde33e3caca641a3d6970e06805fde8e847cb466020820152908101839052819061181190606001610b09565b80546001600160a01b0319166001600160a01b039283161790556040519082169083907f45aa97e368889fb3527c1db60c59c2ae91e82f21778613449e46d4208c1c4b1290600090a35050565b606061186985612073565b600080876001600160a01b0316866118838b8a89896120d9565b6040516118909190613195565b60006040518083038160008787f1925050503d80600081146118ce576040519150601f19603f3d011682016040523d82523d6000602084013e6118d3565b606091505b5090925090506118e4603f876131b1565b5a116118f2576118f26131d3565b61193282826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250612109565b9998505050505050505050565b6109d28161194b61170d565b612142565b61195a8282610efa565b610a6457600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561199361170d565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119df61170d565b6001600160a01b03166119fa6097546001600160a01b031690565b6001600160a01b031614610d905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a51565b6109d26000805160206133f583398151915282611592565b611a728282610efa565b15610a6457600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff19169055611aa961170d565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b604080517f0a8885dd093a12d378a27df09bde33e3caca641a3d6970e06805fde8e847cb466020820152908101829052600090611b2c90606001610b09565b546001600160a01b0316905080611b595760405163124bad6360e31b815260048101839052602401610a51565b30600080516020613415833981519152546040516331a9108f60e11b8152600481018590526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd491906131e9565b6001600160a01b031614611bfe576040516303b673fd60e21b815260048101839052602401610a51565b919050565b303303611c13576109d2816121a6565b6109d281612073565b6109d26000805160206133f58339815191528261204b565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf191906130de565b90506000611d9f866060015180519060200120868860200151604051602001611d3f9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050818660200151148015610ef057508551610ef0906001600160a01b031682866121d0565b600054610100900460ff16611dec5760405162461bcd60e51b8152600401610a5190613206565b6001603355565b600054610100900460ff16610d905760405162461bcd60e51b8152600401610a5190613206565b600054610100900460ff16611e415760405162461bcd60e51b8152600401610a5190613206565b610d90611e4c61170d565b611c34565b600054610100900460ff16611e785760405162461bcd60e51b8152600401610a5190613206565b610d906000611e8561170d565b61204b565b6000805160206133d5833981519152546040516383e7f6ff60e01b81526001600160a01b039091169060009082906383e7f6ff90611ed0908f908f908e90600401612f58565b6040805180830381865afa158015611eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f109190612f7c565b60208101518151919250611f2391612fca565b471015611f435760405163050205f960e01b815260040160405180910390fd5b816001600160a01b03166374694a2b82602001518360000151611f669190612fca565b8e8e8e8e8e8e8e8e8e8e6040518c63ffffffff1660e01b8152600401611f959a99989796959493929190613251565b6000604051808303818588803b158015611fae57600080fd5b505af1158015611fc2573d6000803e3d6000fd5b5050505050505050505050505050505050565b611fdd6119d7565b6001600160a01b0381166120425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a51565b6109d281611c34565b610a648282611950565b600030330361206b575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290526000906060016040516020818303038152906040528051906020012090506120c88190565b546120d4906001612fca565b905550565b60608285856040516020016120f0939291906132c3565b6040516020818303038152906040529050949350505050565b60608315612118575081610990565b8251156121285782518084602001fd5b8160405162461bcd60e51b8152600401610a5191906127a4565b61214c8282610efa565b610a6457612164816001600160a01b03166014612312565b61216f836020612312565b604051602001612180929190613302565b60408051601f198184030181529082905262461bcd60e51b8252610a51916004016127a4565b6121ae6124ad565b81146109d257604051635637b6af60e11b815260048101829052602401610a51565b60008060006121df85856124c0565b909250905060008160048111156121f8576121f8613377565b1480156122165750856001600160a01b0316826001600160a01b0316145b1561222657600192505050610990565b600080876001600160a01b0316631626ba7e60e01b888860405160240161224e92919061338d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161228c9190613195565b600060405180830381855afa9150503d80600081146122c7576040519150601f19603f3d011682016040523d82523d6000602084013e6122cc565b606091505b50915091508180156122df575080516020145b801561230657508051630b135d3f60e11b9061230490830160209081019084016130de565b145b98975050505050505050565b606060006123218360026133a6565b61232c906002612fca565b6001600160401b0381111561234357612343612849565b6040519080825280601f01601f19166020018201604052801561236d576020820181803683370190505b509050600360fc1b8160008151811061238857612388612eb5565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106123b7576123b7612eb5565b60200101906001600160f81b031916908160001a90535060006123db8460026133a6565b6123e6906001612fca565b90505b600181111561245e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061241a5761241a612eb5565b1a60f81b82828151811061243057612430612eb5565b60200101906001600160f81b031916908160001a90535060049490941c93612457816133bd565b90506123e9565b5083156109905760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a51565b60003033036120705750601f1936013590565b60008082516041036124f65760208301516040840151606085015160001a6124ea87828585612505565b945094505050506124fe565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561253c57506000905060036125e9565b8460ff16601b1415801561255457508460ff16601c14155b1561256557506000905060046125e9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156125b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125e2576000600192509250506125e9565b9150600090505b94509492505050565b60006020828403121561260457600080fd5b81356001600160e01b03198116811461099057600080fd5b6001600160a01b03811681146109d257600080fd5b60008083601f84011261264357600080fd5b5081356001600160401b0381111561265a57600080fd5b6020830191508360208285010111156124fe57600080fd5b60008060008060006080868803121561268a57600080fd5b85356126958161261c565b945060208601356126a58161261c565b93506040860135925060608601356001600160401b038111156126c757600080fd5b6126d388828901612631565b969995985093965092949392505050565b6000806000604084860312156126f957600080fd5b83356001600160401b038082111561271057600080fd5b908501906080828803121561272457600080fd5b9093506020850135908082111561273a57600080fd5b5061274786828701612631565b9497909650939450505050565b60005b8381101561276f578181015183820152602001612757565b50506000910152565b60008151808452612790816020860160208601612754565b601f01601f19169290920160200192915050565b6020815260006109906020830184612778565b6000602082840312156127c957600080fd5b5035919050565b600080604083850312156127e357600080fd5b8235915060208301356127f58161261c565b809150509250929050565b60006020828403121561281257600080fd5b81356109908161261c565b6000806040838503121561283057600080fd5b823561283b8161261c565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561288757612887612849565b604052919050565b600060208083850312156128a257600080fd5b82356001600160401b03808211156128b957600080fd5b818501915085601f8301126128cd57600080fd5b8135818111156128df576128df612849565b8060051b91506128f084830161285f565b818152918301840191848101908884111561290a57600080fd5b938501935b8385101561230657843592506129248361261c565b828252938501939085019061290f565b60008060006040848603121561294957600080fd5b83356001600160401b0381111561295f57600080fd5b61296b86828701612631565b909790965060209590950135949350505050565b60006001600160401b0383111561299857612998612849565b6129ab601f8401601f191660200161285f565b90508281528383830111156129bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126129e757600080fd5b6109908383356020850161297f565b60008083601f840112612a0857600080fd5b5081356001600160401b03811115612a1f57600080fd5b6020830191508360208260051b85010111156124fe57600080fd5b80358015158114611bfe57600080fd5b803561ffff81168114611bfe57600080fd5b6000806000806000806000806000806101208b8d031215612a7c57600080fd5b8a356001600160401b0380821115612a9357600080fd5b612a9f8e838f016129d6565b9b5060208d01359150612ab18261261c565b90995060408c0135985060608c0135975060808c013590612ad18261261c565b90965060a08c01359080821115612ae757600080fd5b50612af48d828e016129f6565b9096509450612b07905060c08c01612a3a565b9250612b1560e08c01612a4a565b9150612b246101008c01612a3a565b90509295989b9194979a5092959850565b60008060008060008060008060a0898b031215612b5157600080fd5b8835612b5c8161261c565b97506020890135612b6c8161261c565b965060408901356001600160401b0380821115612b8857600080fd5b612b948c838d016129f6565b909850965060608b0135915080821115612bad57600080fd5b612bb98c838d016129f6565b909650945060808b0135915080821115612bd257600080fd5b50612bdf8b828c01612631565b999c989b5096995094979396929594505050565b600080600060608486031215612c0857600080fd5b8335612c138161261c565b92506020840135612c238161261c565b91506040840135612c338161261c565b809150509250925092565b60008060008060008060008060008060006101208c8e031215612c6057600080fd5b6001600160401b03808d351115612c7657600080fd5b612c838e8e358f01612631565b909c509a50612c9560208e013561261c565b60208d0135995060408d0135985060608d01359750612cb760808e013561261c565b60808d013596508060a08e01351115612ccf57600080fd5b50612ce08d60a08e01358e016129f6565b9095509350612cf160c08d01612a3a565b9250612cff60e08d01612a4a565b9150612d0e6101008d01612a3a565b90509295989b509295989b9093969950565b60008060008060008060a08789031215612d3957600080fd5b8635612d448161261c565b95506020870135612d548161261c565b9450604087013593506060870135925060808701356001600160401b03811115612d7d57600080fd5b612d8989828a01612631565b979a9699509497509295939492505050565b600080600060608486031215612db057600080fd5b8335612dbb8161261c565b92506020840135612dcb8161261c565b915060408401356001600160401b03811115612de657600080fd5b612df2868287016129d6565b9150509250925092565b608081526000612e0f6080830187612778565b6001600160a01b03958616602084015261ffff949094166040830152509216606090920191909152919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610ef090830184612778565b6000808335601e19843603018112612e8657600080fd5b8301803591506001600160401b03821115612ea057600080fd5b6020019150368190038213156124fe57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612ef357612ef3612ecb565b5060010190565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612f6c604083018587612f2f565b9050826020830152949350505050565b600060408284031215612f8e57600080fd5b604051604081018181106001600160401b0382111715612fb057612fb0612849565b604052825181526020928301519281019290925250919050565b8082018082111561077357610773612ecb565b81835260006020808501808196508560051b810191508460005b878110156130615782840389528135601e1988360301811261301857600080fd5b870185810190356001600160401b0381111561303357600080fd5b80360382131561304257600080fd5b61304d868284612f2f565b9a87019a9550505090840190600101612ff7565b5091979650505050505050565b60006101008083526130828184018d612778565b6001600160a01b038c81166020860152604085018c9052606085018b90528916608085015283810360a085015290506130bc818789612fdd565b94151560c0840152505061ffff9190911660e090910152979650505050505050565b6000602082840312156130f057600080fd5b5051919050565b60006080823603121561310957600080fd5b604051608081016001600160401b03828210818311171561312c5761312c612849565b816040528435915061313d8261261c565b8183526020850135602084015260408501356040840152606085013591508082111561316857600080fd5b50830136601f82011261317a57600080fd5b6131893682356020840161297f565b60608301525092915050565b600082516131a7818460208701612754565b9190910192915050565b6000826131ce57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156131fb57600080fd5b81516109908161261c565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006101008083526132668184018d8f612f2f565b6001600160a01b038c81166020860152604085018c9052606085018b90528916608085015283810360a085015290506132a0818789612fdd565b94151560c0840152505061ffff9190911660e09091015298975050505050505050565b600084516132d5818460208901612754565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161333a816017850160208801612754565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161336b816028840160208801612754565b01602801949350505050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260006110476040830184612778565b808202811582820484141761077357610773612ecb565b6000816133cc576133cc612ecb565b50600019019056fe412386de53449251cbf7ce1f4c6a038bf9c0746e62d331b08ef0c3fa7d0ab6729f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a660793a5062d506d35cc8f1beda67ee5028c16bfcd9c923d5bfc439c04bd929b1a164736f6c6343000811000a","storage":{"0x0":"0xff"}},"0xc58206842e4030a3b2cabc78780ae7635173c533":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102325760003560e01c80637c69eae211610130578063b5466669116100b8578063d284d97a1161007c578063d284d97a14610d4e578063d8d3cc6e14610dbc578063e67ca8a314610e3f578063e985e9c514610e5c578063ebf0c71714610e8a57610232565b8063b5466669146109ce578063b88d4fde14610a51578063c29b52f914610b15578063c87b56dd14610c5e578063ce9fb82b14610c7b57610232565b8063a22cb465116100ff578063a22cb4651461090b578063a7fc7a0714610939578063ab3b87fe1461095f578063b3f9e4cb1461098b578063b429afeb146109a857610232565b80637c69eae21461076457806395d89b41146107e75780639d743989146107ef5780639e5be9a51461087d57610232565b806342842e0e116101be5780635cbe1112116101825780635cbe11121461061d5780636352211e1461069257806366ac3b68146106af57806368b62d32146106b757806370a082311461073e57610232565b806342842e0e146104ed57806342966c6814610523578063430c208114610540578063538361a71461056c57806357aac5741461058f57610232565b8063081812fc11610205578063081812fc146103fa578063095ea7b3146104335780632392c1891461045f57806323b872dd1461048b5780632525d06a146104c157610232565b806301ffc9a71461023757806302759c37146102725780630467e014146102aa57806306fdde031461037d575b600080fd5b61025e6004803603602081101561024d57600080fd5b50356001600160e01b031916610e92565b604080519115158252519081900360200190f35b6102a86004803603606081101561028857600080fd5b506001600160a01b03813581169160208101359091169060400135610eb1565b005b6102a8600480360360808110156102c057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156102ef57600080fd5b82018360208201111561030157600080fd5b803590602001918460018302840111600160201b8311171561032257600080fd5b919390929091602081019035600160201b81111561033f57600080fd5b82018360208201111561035157600080fd5b803590602001918460018302840111600160201b8311171561037257600080fd5b509092509050610ed3565b610385610f62565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bf5781810151838201526020016103a7565b50505050905090810190601f1680156103ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104176004803603602081101561041057600080fd5b5035610f84565b604080516001600160a01b039092168252519081900360200190f35b6102a86004803603604081101561044957600080fd5b506001600160a01b038135169060200135610fe6565b6102a86004803603604081101561047557600080fd5b506001600160a01b0381351690602001356110f7565b6102a8600480360360608110156104a157600080fd5b506001600160a01b03813581169160208101359091169060400135611115565b6102a8600480360360408110156104d757600080fd5b506001600160a01b03813516906020013561115a565b6102a86004803603606081101561050357600080fd5b506001600160a01b0381358116916020810135909116906040013561117a565b6102a86004803603602081101561053957600080fd5b5035611195565b61025e6004803603604081101561055657600080fd5b506001600160a01b0381351690602001356111e6565b6102a86004803603604081101561058257600080fd5b50803590602001356111f9565b6102a8600480360360808110156105a557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156105df57600080fd5b8201836020820111156105f157600080fd5b803590602001918460018302840111600160201b8311171561061257600080fd5b50909250905061124f565b6102a86004803603604081101561063357600080fd5b81359190810190604081016020820135600160201b81111561065457600080fd5b82018360208201111561066657600080fd5b803590602001918460018302840111600160201b8311171561068757600080fd5b5090925090506112be565b610417600480360360208110156106a857600080fd5b5035611320565b6102a861137a565b61072c600480360360408110156106cd57600080fd5b81359190810190604081016020820135600160201b8111156106ee57600080fd5b82018360208201111561070057600080fd5b803590602001918460018302840111600160201b8311171561072157600080fd5b509092509050611385565b60408051918252519081900360200190f35b61072c6004803603602081101561075457600080fd5b50356001600160a01b03166113cf565b6102a86004803603606081101561077a57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460018302840111600160201b831117156107dc57600080fd5b509092509050611437565b61038561149a565b6102a86004803603608081101561080557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561083f57600080fd5b82018360208201111561085157600080fd5b803590602001918460018302840111600160201b8311171561087257600080fd5b5090925090506114b6565b6102a86004803603608081101561089357600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156108cd57600080fd5b8201836020820111156108df57600080fd5b803590602001918460018302840111600160201b8311171561090057600080fd5b509092509050611506565b6102a86004803603604081101561092157600080fd5b506001600160a01b0381351690602001351515611564565b6102a86004803603602081101561094f57600080fd5b50356001600160a01b0316611630565b6102a86004803603604081101561097557600080fd5b506001600160a01b03813516906020013561164b565b610417600480360360208110156109a157600080fd5b5035611672565b61025e600480360360208110156109be57600080fd5b50356001600160a01b0316611694565b6102a8600480360360608110156109e457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a1357600080fd5b820183602082011115610a2557600080fd5b803590602001918460018302840111600160201b83111715610a4657600080fd5b5090925090506116a7565b6102a860048036036080811015610a6757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610aa157600080fd5b820183602082011115610ab357600080fd5b803590602001918460018302840111600160201b83111715610ad457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116fa945050505050565b6102a8600480360360a0811015610b2b57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610b6557600080fd5b820183602082011115610b7757600080fd5b803590602001918460018302840111600160201b83111715610b9857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610bea57600080fd5b820183602082011115610bfc57600080fd5b803590602001918460018302840111600160201b83111715610c1d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061174c945050505050565b61038560048036036020811015610c7457600080fd5b5035611797565b6102a860048036036080811015610c9157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610cc057600080fd5b820183602082011115610cd257600080fd5b803590602001918460018302840111600160201b83111715610cf357600080fd5b919390929091602081019035600160201b811115610d1057600080fd5b820183602082011115610d2257600080fd5b803590602001918460018302840111600160201b83111715610d4357600080fd5b509092509050611892565b6102a860048036036020811015610d6457600080fd5b810190602081018135600160201b811115610d7e57600080fd5b820183602082011115610d9057600080fd5b803590602001918460018302840111600160201b83111715610db157600080fd5b50909250905061191b565b6102a860048036036060811015610dd257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610e0157600080fd5b820183602082011115610e1357600080fd5b803590602001918460018302840111600160201b83111715610e3457600080fd5b50909250905061199e565b6102a860048036036020811015610e5557600080fd5b50356119f3565b61025e60048036036040811015610e7257600080fd5b506001600160a01b0381358116916020013516611a05565b61072c611a33565b6001600160e01b03191660009081526020819052604090205460ff1690565b610eba33611694565b610ec357600080fd5b610ece838383611a57565b505050565b610edc33611694565b610ee557600080fd5b610f5a868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250611a9f92505050565b505050505050565b6040805180820190915260078152662e63727970746f60c81b60208201525b90565b6000610f8f82611ac9565b610fca5760405162461bcd60e51b815260040180806020018281038252602c815260200180612848602c913960400191505060405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610ff182611320565b9050806001600160a01b0316836001600160a01b031614156110445760405162461bcd60e51b81526004018080602001828103825260218152602001806128bf6021913960400191505060405180910390fd5b336001600160a01b038216148061106057506110608133611a05565b61109b5760405162461bcd60e51b815260040180806020018281038252603881526020018061279c6038913960400191505060405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b806111023382611ae6565b61110b57600080fd5b610ece8383611b82565b61111f3382611ae6565b610ec35760405162461bcd60e51b81526004018080602001828103825260318152602001806128e06031913960400191505060405180910390fd5b61116333611694565b61116c57600080fd5b6111768282611b82565b5050565b610ece838383604051806020016040528060008152506116fa565b61119f3382611ae6565b6111da5760405162461bcd60e51b81526004018080602001828103825260308152602001806129366030913960400191505060405180910390fd5b6111e381611bf8565b50565b60006111f28383611ae6565b9392505050565b6000828152600860205260409020546001600160a01b0316331461121c57600080fd5b6040518290829033907ff10fc780c78f994a214c79a2ae8d8b7bfe7cc3f0f935a8f05a29525e71d7f12790600090a45050565b61125833611694565b61126157600080fd5b61126c858585611a57565b6112ae85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7992505050565b6112b757600080fd5b5050505050565b826112c93382611ae6565b6112d257600080fd5b61131a6113158585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dac92505050565b611bf8565b50505050565b6000818152600260205260408120546001600160a01b0316806113745760405162461bcd60e51b81526004018080602001828103825260298152602001806127fe6029913960400191505060405180910390fd5b92915050565b61138333611e64565b565b60006113c78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dac92505050565b949350505050565b60006001600160a01b0382166114165760405162461bcd60e51b815260040180806020018281038252602a8152602001806127d4602a913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040902061137490611e75565b826114423382611ae6565b61144b57600080fd5b6112b7858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250611a9f915050565b604080518082019091526002815261155160f21b602082015290565b6112b785858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805160208101909152908152925061174c915050565b826115113382611ae6565b61151a57600080fd5b610f5a868661155f8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dac92505050565b611a57565b6001600160a01b0382163314156115c2576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b61163933611694565b61164257600080fd5b6111e381611e79565b806116563382611ae6565b61165f57600080fd5b610ece61166b83611320565b8484611e8a565b6000818152600860205260408120546001600160a01b03168061137457600080fd5b600061137460018363ffffffff611fce16565b6116b033611694565b6116b957600080fd5b61131a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061203592505050565b611705848484611115565b61171184848484611c79565b61131a5760405162461bcd60e51b815260040180806020018281038252603281526020018061271a6032913960400191505060405180910390fd5b826117573382611ae6565b61176057600080fd5b600061176c8585611dac565b9050611779878783611a57565b61178587878386611c79565b61178e57600080fd5b50505050505050565b60606117a282611ac9565b6117ab57600080fd5b600760066000848152602001908152602001600020604051602001808380546001816001161561010002031660029004801561181e5780601f106117fc57610100808354040283529182019161181e565b820191906000526020600020905b81548152906001019060200180831161180a575b5050828054600181600116156101000203166002900480156118775780601f10611855576101008083540402835291820191611877565b820191906000526020600020905b815481529060010190602001808311611863575b505060408051601f1981840301815291905295945050505050565b8461189d3382611ae6565b6118a657600080fd5b61178e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611a9f92505050565b61192433611694565b61192d57600080fd5b611939600783836125cf565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b828260405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a15050565b826119a93382611ae6565b6119b257600080fd5b6112b7858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061203592505050565b6119fc33611694565b6111da57600080fd5b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b7f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f90565b611a62838383611e8a565b6000818152600860205260409020546001600160a01b031615610ece57600090815260086020526040902080546001600160a01b03191690555050565b611aaa848484612035565b611ac0600085611aba8686611dac565b84611c79565b61131a57600080fd5b6000908152600260205260409020546001600160a01b0316151590565b6000611af182611ac9565b611b2c5760405162461bcd60e51b815260040180806020018281038252602c815260200180612770602c913960400191505060405180910390fd5b6000611b3783611320565b9050806001600160a01b0316846001600160a01b03161480611b725750836001600160a01b0316611b6784610f84565b6001600160a01b0316145b806113c757506113c78185611a05565b611b8b81611ac9565b611b9457600080fd5b6040516001600160a01b0383169082907fb1b34e6d89e1c584527d447f4b29ffad55635a37edeeb564939a6483401b31a590600090a3600090815260086020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b611c018161220f565b6000818152600860205260409020546001600160a01b031615611c3b57600081815260086020526040902080546001600160a01b03191690555b60008181526006602052604090205460026000196101006001841615020190911604156111e35760008181526006602052604081206111e39161264d565b6000611c8d846001600160a01b0316612221565b611c99575060016113c7565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015611d13578181015183820152602001611cfb565b50505050905090810190601f168015611d405780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611d6257600080fd5b505af1158015611d76573d6000803e3d6000fd5b505050506040513d6020811015611d8c57600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6000815160001415611dbd57600080fd5b82826040516020018082805190602001908083835b60208310611df15780518252601f199092019160209182019101611dd2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012060405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c905092915050565b6111e360018263ffffffff61222716565b5490565b6111e360018263ffffffff61228e16565b826001600160a01b0316611e9d82611320565b6001600160a01b031614611ee25760405162461bcd60e51b81526004018080602001828103825260298152602001806128966029913960400191505060405180910390fd5b6001600160a01b038216611f275760405162461bcd60e51b815260040180806020018281038252602481526020018061274c6024913960400191505060405180910390fd5b611f308161230f565b6001600160a01b0383166000908152600460205260409020611f519061234a565b6001600160a01b0382166000908152600460205260409020611f7290612361565b60008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0382166120155760405162461bcd60e51b81526004018080602001828103825260228152602001806128746022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b60006120418383611dac565b905061204d848261236a565b815161205857600080fd5b61206181611ac9565b61206a57600080fd5b606082600660008681526020019081526020016000206040516020018083805190602001908083835b602083106120b25780518252601f199092019160209182019101612093565b6001836020036101000a03801982511681845116808217855250505050505090500180601760f91b815250600101828054600181600116156101000203166002900480156121375780601f10612115576101008083540402835291820191612137565b820191906000526020600020905b815481529060010190602001808311612123575b505060408051601f19818403018152918152600087815260066020908152919020825192965061216d9550935085019150612691565b50817fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952826040518080602001828103825283818151815260200191508051906020019080838360005b838110156121ce5781810151838201526020016121b6565b50505050905090810190601f1680156121fb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050505050565b6111e361221b82611320565b8261249b565b3b151590565b6122318282611fce565b61226c5760405162461bcd60e51b81526004018080602001828103825260218152602001806128276021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6122988282611fce565b156122ea576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000818152600360205260409020546001600160a01b0316156111e357600090815260036020526040902080546001600160a01b0319169055565b805461235d90600163ffffffff61257216565b9055565b80546001019055565b6001600160a01b0382166123c5576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6123ce81611ac9565b15612420576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b600081815260026020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526004909152902061245f90612361565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b03166124ae82611320565b6001600160a01b0316146124f35760405162461bcd60e51b81526004018080602001828103825260258152602001806129116025913960400191505060405180910390fd5b6124fc8161230f565b6001600160a01b038216600090815260046020526040902061251d9061234a565b60008181526002602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000828211156125c9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126105782800160ff1982351617855561263d565b8280016001018555821561263d579182015b8281111561263d578235825591602001919060010190612622565b506126499291506126ff565b5090565b50805460018160011615610100020316600290046000825580601f1061267357506111e3565b601f0160209004906000526020600020908101906111e391906126ff565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126d257805160ff191683800117855561263d565b8280016001018555821561263d579182015b8281111561263d5782518255916020019190600101906126e4565b610f8191905b80821115612649576000815560010161270556fe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732313a206275726e206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a265627a7a72315820fb6a1b26cc352dbb05e6627fd530bbb44114ac3a349f30d1f071136c656d20dc64736f6c634300050c0032","storage":{"0x7":"0x68747470733a2f2f6578616d706c652e636f6d2f000000000000000000000028","0xbdf39e9e65b2355b1b0b06df799c09159f0ab90f06a9bb2153f5de7d9b0ea81":"0x1","0x1a306d3e9bf29128dee78d8d16c9f378a11bbdf917a9caf986fc6e60846e37e7":"0x63727970746f000000000000000000000000000000000000000000000000000c","0x42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd":"0x1","0x605d7a0bb2b20c4004d356eb969ff104dcca62360aa356247072f5e0df6472e3":"0xdead","0x67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5":"0x1","0x70f464f95f9ab7aba03264fd4cac1711d774d3703ce74217180264d4efc2105f":"0x1","0x76a72f26a108e6f3f687141f5f42d21d65857c03cb1b01aa1284f9a9ccd085da":"0x1","0x9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df":"0x1","0x9f23d2403fb64167582d316b1bc5b35a6ed48524341ab24947c71df77304b29e":"0x1","0xf7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed780800":"0x1"}},"0xc965345edac823d56812cd20a10316233916a605":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c806395d89b41116100fe578063c87b56dd1161009e578063e985e9c51161006e578063e985e9c5146103d4578063f2fde38b1461040f578063f6a74ed714610422578063fca247ac14610435575f80fd5b8063c87b56dd14610377578063d6e4fa861461038a578063da8c229e146103a9578063ddf7fcb0146103cb575f80fd5b8063a7fc7a07116100d9578063a7fc7a0714610334578063b88d4fde14610347578063c1a287e21461035a578063c475abff14610364575f80fd5b806395d89b411461030657806396e494e81461030e578063a22cb46514610321575f80fd5b80633f15457f116101695780636352211e116101445780636352211e146102c757806370a08231146102da578063715018a6146102ed5780638da5cb5b146102f5575f80fd5b80633f15457f1461028e57806342842e0e146102a15780634e543b26146102b4575f80fd5b8063095ea7b3116101a4578063095ea7b3146102325780630e297b451461024757806323b872dd1461026857806328ed4f6c1461027b575f80fd5b806301ffc9a7146101ca57806306fdde03146101f2578063081812fc14610207575b5f80fd5b6101dd6101d83660046117dd565b610448565b60405190151581526020015b60405180910390f35b6101fa610499565b6040516101e99190611845565b61021a610215366004611857565b610528565b6040516001600160a01b0390911681526020016101e9565b610245610240366004611882565b61054d565b005b61025a6102553660046118ac565b610666565b6040519081526020016101e9565b6102456102763660046118e1565b61067b565b61024561028936600461190e565b6106ac565b60085461021a906001600160a01b031681565b6102456102af3660046118e1565b6107be565b6102456102c236600461193c565b6107d8565b61021a6102d5366004611857565b610848565b61025a6102e836600461193c565b610869565b6102456108ed565b6006546001600160a01b031661021a565b6101fa610900565b6101dd61031c366004611857565b61090f565b61024561032f366004611957565b610934565b61024561034236600461193c565b610943565b61024561035536600461199b565b610996565b61025a6276a70081565b61025a610372366004611a74565b6109ce565b6101fa610385366004611857565b610b52565b61025a610398366004611857565b5f9081526007602052604090205490565b6101dd6103b736600461193c565b600a6020525f908152604090205460ff1681565b61025a60095481565b6101dd6103e2366004611a94565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b61024561041d36600461193c565b610bc2565b61024561043036600461193c565b610c3b565b61025a6104433660046118ac565b610c8b565b5f6001600160e01b031982166301ffc9a760e01b148061047857506001600160e01b031982166380ac58cd60e01b145b8061049357506001600160e01b03198216630a3b53db60e21b145b92915050565b60605f80546104a790611ac0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d390611ac0565b801561051e5780601f106104f55761010080835404028352916020019161051e565b820191905f5260205f20905b81548152906001019060200180831161050157829003601f168201915b5050505050905090565b5f61053282610c99565b505f908152600460205260409020546001600160a01b031690565b5f61055782610cf7565b9050806001600160a01b0316836001600160a01b0316036105c95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105e557506105e581336103e2565b6106575760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105c0565b6106618383610d56565b505050565b5f6106738484845f610dc3565b949350505050565b6106853382610fc7565b6106a15760405162461bcd60e51b81526004016105c090611af8565b610661838383611040565b6008546009546040516302571be360e01b8152600481019190915230916001600160a01b0316906302571be390602401602060405180830381865afa1580156106f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071b9190611b45565b6001600160a01b03161461072d575f80fd5b6107373383610fc7565b61073f575f80fd5b6008546009546040516306ab592360e01b81526004810191909152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af115801561079a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106619190611b60565b61066183838360405180602001604052805f815250610996565b6107e06111a2565b600854600954604051630c4b7b8560e11b815260048101919091526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b15801561082f575f80fd5b505af1158015610841573d5f803e3d5ffd5b5050505050565b5f818152600760205260408120544210610860575f80fd5b61049382610cf7565b5f6001600160a01b0382166108d25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105c0565b506001600160a01b03165f9081526003602052604090205490565b6108f56111a2565b6108fe5f6111fc565b565b6060600180546104a790611ac0565b5f81815260076020526040812054429061092d906276a70090611b77565b1092915050565b61093f33838361124d565b5050565b61094b6111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b6109a03383610fc7565b6109bc5760405162461bcd60e51b81526004016105c090611af8565b6109c88484848461131a565b50505050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610a1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a419190611b45565b6001600160a01b031614610a53575f80fd5b335f908152600a602052604090205460ff16610a6d575f80fd5b5f838152600760205260409020544290610a8b906276a70090611b77565b1015610a95575f80fd5b610aa26276a70083611b77565b5f848152600760205260409020546276a70090610ac0908590611b77565b610aca9190611b77565b11610ad3575f80fd5b5f8381526007602052604081208054849290610af0908490611b77565b90915550505f838152600760205260409081902054905184917f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd691610b3791815260200190565b60405180910390a250505f9081526007602052604090205490565b6060610b5d82610c99565b5f610b7260408051602081019091525f815290565b90505f815111610b905760405180602001604052805f815250610bbb565b80610b9a8461134d565b604051602001610bab929190611b96565b6040516020818303038152906040525b9392505050565b610bca6111a2565b6001600160a01b038116610c2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c0565b610c38816111fc565b50565b610c436111a2565b6001600160a01b0381165f818152600a6020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b5f6106738484846001610dc3565b5f818152600260205260409020546001600160a01b0316610c385760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f818152600260205260408120546001600160a01b0316806104935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c0565b5f81815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d8a82610cf7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546009546040516302571be360e01b815260048101919091525f9130916001600160a01b03909116906302571be390602401602060405180830381865afa158015610e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e369190611b45565b6001600160a01b031614610e48575f80fd5b335f908152600a602052604090205460ff16610e62575f80fd5b610e6b8561090f565b610e73575f80fd5b610e806276a70042611b77565b6276a700610e8e8542611b77565b610e989190611b77565b11610ea1575f80fd5b610eab8342611b77565b5f868152600760209081526040808320939093556002905220546001600160a01b031615610edc57610edc856113dd565b610ee6848661146f565b8115610f6d576008546009546040516306ab592360e01b81526004810191909152602481018790526001600160a01b038681166044830152909116906306ab5923906064016020604051808303815f875af1158015610f47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6b9190611b60565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9610fa38642611b77565b60405190815260200160405180910390a3610fbe8342611b77565b95945050505050565b5f80610fd283610848565b9050806001600160a01b0316846001600160a01b0316148061100d5750836001600160a01b031661100284610528565b6001600160a01b0316145b8061067357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff16610673565b826001600160a01b031661105382610cf7565b6001600160a01b0316146110795760405162461bcd60e51b81526004016105c090611bc4565b6001600160a01b0382166110db5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105c0565b826001600160a01b03166110ee82610cf7565b6001600160a01b0316146111145760405162461bcd60e51b81526004016105c090611bc4565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b031633146108fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105c0565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b816001600160a01b0316836001600160a01b0316036112ae5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105c0565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611325848484611040565b611331848484846115f7565b6109c85760405162461bcd60e51b81526004016105c090611c09565b60605f611359836116f1565b60010190505f8167ffffffffffffffff81111561137857611378611987565b6040519080825280601f01601f1916602001820160405280156113a2576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113ac57509392505050565b5f6113e782610cf7565b90506113f282610cf7565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166114c55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105c0565b5f818152600260205260409020546001600160a01b0316156115295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b5f818152600260205260409020546001600160a01b03161561158d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c0565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b156116e957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061163a903390899088908890600401611c5b565b6020604051808303815f875af1925050508015611674575060408051601f3d908101601f1916820190925261167191810190611c97565b60015b6116cf573d8080156116a1576040519150601f19603f3d011682016040523d82523d5f602084013e6116a6565b606091505b5080515f036116c75760405162461bcd60e51b81526004016105c090611c09565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610673565b506001610673565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061172f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061175b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061177957662386f26fc10000830492506010015b6305f5e1008310611791576305f5e100830492506008015b61271083106117a557612710830492506004015b606483106117b7576064830492506002015b600a83106104935760010192915050565b6001600160e01b031981168114610c38575f80fd5b5f602082840312156117ed575f80fd5b8135610bbb816117c8565b5f5b838110156118125781810151838201526020016117fa565b50505f910152565b5f81518084526118318160208601602086016117f8565b601f01601f19169290920160200192915050565b602081525f610bbb602083018461181a565b5f60208284031215611867575f80fd5b5035919050565b6001600160a01b0381168114610c38575f80fd5b5f8060408385031215611893575f80fd5b823561189e8161186e565b946020939093013593505050565b5f805f606084860312156118be575f80fd5b8335925060208401356118d08161186e565b929592945050506040919091013590565b5f805f606084860312156118f3575f80fd5b83356118fe8161186e565b925060208401356118d08161186e565b5f806040838503121561191f575f80fd5b8235915060208301356119318161186e565b809150509250929050565b5f6020828403121561194c575f80fd5b8135610bbb8161186e565b5f8060408385031215611968575f80fd5b82356119738161186e565b915060208301358015158114611931575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156119ae575f80fd5b84356119b98161186e565b935060208501356119c98161186e565b925060408501359150606085013567ffffffffffffffff808211156119ec575f80fd5b818701915087601f8301126119ff575f80fd5b813581811115611a1157611a11611987565b604051601f8201601f19908116603f01168101908382118183101715611a3957611a39611987565b816040528281528a6020848701011115611a51575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611a85575f80fd5b50508035926020909101359150565b5f8060408385031215611aa5575f80fd5b8235611ab08161186e565b915060208301356119318161186e565b600181811c90821680611ad457607f821691505b602082108103611af257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f60208284031215611b55575f80fd5b8151610bbb8161186e565b5f60208284031215611b70575f80fd5b5051919050565b8082018082111561049357634e487b7160e01b5f52601160045260245ffd5b5f8351611ba78184602088016117f8565b835190830190611bbb8183602088016117f8565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611c8d9083018461181a565b9695505050505050565b5f60208284031215611ca7575f80fd5b8151610bbb816117c856fea164736f6c6343000818000a","storage":{"0x0":"0x0","0x1":"0x0","0x6":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x8":"0x3f1194b9019002863ad0dbbe295294547c0d36a9","0x9":"0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae","0x9b8bc185dce56a7ea1b27d35e40ac15dcdf9144303dfd4d8880220078bf21a2c":"0x1","0xdb5e6a17df8534b92b0c8de590f14b4fb4b5eb2c62ef1bf7a05555e354797508":"0x1","0xe1a982900207b619cb6c39be8cb5e60da1370171412fb65b5efc25e2dce3c34c":"0x1"}},"0xce4bb7dc1eb9dce75743de6a4b48534fd427ef51":{"nonce":1,"balance":"0x0","code":"0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033","storage":{"0x0":"0x1","0x33":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xe85541865bbb62a05064ce5c9f41cc293a8ea996","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x4e44e79e0cec05d9e62e952b2088c02a3c450aec"}},"0xd178b720229c39de617846f84cf9c8d32a63a23d":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c806371017a541161009e5780639e32d3641161006e5780639e32d3641461025a578063a424740014610281578063dd6b9e2214610294578063e1c4b65a146102a7578063e35a14e5146102ba575f80fd5b806371017a541461020e5780637b103999146102215780638f0dbd25146102345780639810b69514610247575f80fd5b8063485cc955116100d9578063485cc95514610191578063572b6c05146101a457806358884432146101d05780636ccbae5f146101fb575f80fd5b8063150b7a021461010a5780631694116d1461013b5780631bf7e13e146101505780631c351a9d14610170575b5f80fd5b61011d610118366004611434565b6102e2565b6040516001600160e01b031990911681526020015b60405180910390f35b61014e6101493660046114e3565b610372565b005b61016361015e366004611549565b61040d565b6040516101329190611601565b61018361017e366004611613565b6104d6565b604051908152602001610132565b61014e61019f366004611666565b6105c3565b6101c06101b236600461169d565b6001600160a01b0316301490565b6040519015158152602001610132565b6067546101e3906001600160a01b031681565b6040516001600160a01b039091168152602001610132565b6101836102093660046116b8565b6106f8565b6101e361021c3660046116cf565b610751565b6066546101e3906001600160a01b031681565b61014e6102423660046116ef565b610791565b6101e36102553660046116cf565b610806565b6101837fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c061028f366004611549565b61085f565b6101c06102a236600461172d565b6108a8565b61014e6102b5366004611771565b61091d565b6101e36102c83660046116b8565b5f908152606560205260409020546001600160a01b031690565b6066545f906001600160a01b03166102f8610a43565b6001600160a01b031614158061032257505f848152606560205260409020546001600160a01b0316155b156103605783610330610a43565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b828261037e8282610751565b6001600160a01b031661038f610a43565b6001600160a01b0316146103c057604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b5f6103cb8686610806565b90505f5b87811015610402576103fa8989838181106103ec576103ec6117b0565b905060200201358387610a51565b6001016103cf565b505050505050505050565b60605f5a905061041e85858561085f565b61043b57604051638baa579f60e01b815260040160405180910390fd5b6104cb61044b602087018761169d565b3060408801358461045f60608b018b6117c4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f92019190915250610b8492505050565b9150505b9392505050565b6067545f906001600160a01b031663aa271e1a6104f1610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610533573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105579190611807565b1580610572575030610567610a43565b6001600160a01b0316145b156105a45761057f610a43565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610357565b5f6105b0858585610c60565b90506105bb81610e73565b949350505050565b5f54610100900460ff16158080156105e157505f54600160ff909116105b806105fa5750303b1580156105fa57505f5460ff166001145b61065d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610357565b5f805460ff19166001179055801561067e575f805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b031992831617909255606780549285169290911691909117905580156106f3575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f9061074a906060016040516020818303038152906040528051906020012090565b5492915050565b5f80838360405160200161076f929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b828261079d8282610751565b6001600160a01b03166107ae610a43565b6001600160a01b0316146107df57604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b856107e981610e73565b6107fd876107f78889610806565b86610a51565b50505050505050565b5f8060026108148585610e8f565b6040516108219190611826565b602060405180830381855afa15801561083c573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bb9190611841565b5f6105bb61086c856118c6565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f1492505050565b5f805b8281101561091257846001600160a01b03166108f38585848181106108d2576108d26117b0565b905060200201355f908152606560205260409020546001600160a01b031690565b6001600160a01b03161461090a575f9150506104cf565b6001016108ab565b506001949350505050565b6067546001600160a01b031663aa271e1a610936610a43565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099c9190611807565b15806109b75750306109ac610a43565b6001600160a01b0316145b156109c45761057f610a43565b5f5b818110156106f357610a3a8383838181106109e3576109e36117b0565b90506020028101906109f59190611983565b610a039060208101906117c4565b858585818110610a1557610a156117b0565b9050602002810190610a279190611983565b610a3590602081019061169d565b610c60565b506001016109c6565b5f610a4c611059565b905090565b5f838152606560205260409020546001600160a01b03838116911614610ab4575f83815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610357565b5f838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e906064015f604051808303815f87803b158015610b21575f80fd5b505af1158015610b33573d5f803e3d5ffd5b50505050806001600160a01b0316610b49610a43565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610b8f85611076565b5f80876001600160a01b031686610ba88b8a89896110db565b604051610bb59190611826565b5f604051808303815f8787f1925050503d805f8114610bef576040519150601f19603f3d011682016040523d82523d5f602084013e610bf4565b606091505b509092509050610c05603f876119bf565b5a11610c1357610c136119d2565b610c5382826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061110b565b9998505050505050505050565b5f60605f7fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610c989291906119e6565b60405160208183030381529060405280519060200120604051602001610cc8929190918252602082015260400190565b60408051808303601f19018152828252805160209091012060028084526060840190925292505f9190816020015b6060815260200190600190039081610cf657905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250855186945090925015159050610d5657610d566117b0565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610d9057610d906117b0565b6020908102919091018101919091525f8381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610df891309186918991829190600401611a4d565b5f604051808303815f87803b158015610e0f575f80fd5b505af1158015610e21573d5f803e3d5ffd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610e61929190611aab565b60405180910390a35095945050505050565b303303610e8657610e8381611144565b50565b610e8381611076565b60605f82610e9f60016020611ad9565b60ff1660208110610eb257610eb26117b0565b1a9050610ec0600282611af2565b60ff1615610ecf576003610ed2565b60025b84604051602001610efc92919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611841565b90505f611029866060015180519060200120868860200151604051602001610fc99392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561104f5750855161104f906001600160a01b0316828661116e565b9695505050505050565b5f30330361106e575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506110ca8190565b546110d6906001611b13565b905550565b60608285856040516020016110f293929190611b26565b6040516020818303038152906040529050949350505050565b6060831561111a5750816104cf565b82511561112a5782518084602001fd5b8160405162461bcd60e51b81526004016103579190611601565b61114c6112a9565b8114610e8357604051635637b6af60e11b815260048101829052602401610357565b5f805f61117b85856112bb565b90925090505f81600481111561119357611193611b64565b1480156111b15750856001600160a01b0316826001600160a01b0316145b156111c1576001925050506104cf565b5f80876001600160a01b0316631626ba7e60e01b88886040516024016111e8929190611b78565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112269190611826565b5f60405180830381855afa9150503d805f811461125e576040519150601f19603f3d011682016040523d82523d5f602084013e611263565b606091505b5091509150818015611276575080516020145b801561129d57508051630b135d3f60e11b9061129b9083016020908101908401611841565b145b98975050505050505050565b5f3033036110735750601f1936013590565b5f8082516041036112ef576020830151604084015160608501515f1a6112e3878285856112fd565b945094505050506112f6565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561133257505f905060036113d9565b8460ff16601b1415801561134a57508460ff16601c14155b1561135a57505f905060046113d9565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156113ab573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166113d3575f600192509250506113d9565b91505f90505b94509492505050565b6001600160a01b0381168114610e83575f80fd5b5f8083601f840112611406575f80fd5b50813567ffffffffffffffff81111561141d575f80fd5b6020830191508360208285010111156112f6575f80fd5b5f805f805f60808688031215611448575f80fd5b8535611453816113e2565b94506020860135611463816113e2565b935060408601359250606086013567ffffffffffffffff811115611485575f80fd5b611491888289016113f6565b969995985093965092949392505050565b5f8083601f8401126114b2575f80fd5b50813567ffffffffffffffff8111156114c9575f80fd5b6020830191508360208260051b85010111156112f6575f80fd5b5f805f805f608086880312156114f7575f80fd5b853567ffffffffffffffff81111561150d575f80fd5b611519888289016114a2565b9096509450506020860135925060408601359150606086013561153b816113e2565b809150509295509295909350565b5f805f6040848603121561155b575f80fd5b833567ffffffffffffffff80821115611572575f80fd5b9085019060808288031215611585575f80fd5b9093506020850135908082111561159a575f80fd5b506115a7868287016113f6565b9497909650939450505050565b5f5b838110156115ce5781810151838201526020016115b6565b50505f910152565b5f81518084526115ed8160208601602086016115b4565b601f01601f19169290920160200192915050565b602081525f6104cf60208301846115d6565b5f805f60408486031215611625575f80fd5b833567ffffffffffffffff81111561163b575f80fd5b611647868287016113f6565b909450925050602084013561165b816113e2565b809150509250925092565b5f8060408385031215611677575f80fd5b8235611682816113e2565b91506020830135611692816113e2565b809150509250929050565b5f602082840312156116ad575f80fd5b81356104cf816113e2565b5f602082840312156116c8575f80fd5b5035919050565b5f80604083850312156116e0575f80fd5b50508035926020909101359150565b5f805f8060808587031215611702575f80fd5b8435935060208501359250604085013591506060850135611722816113e2565b939692955090935050565b5f805f6040848603121561173f575f80fd5b833561174a816113e2565b9250602084013567ffffffffffffffff811115611765575f80fd5b6115a7868287016114a2565b5f8060208385031215611782575f80fd5b823567ffffffffffffffff811115611798575f80fd5b6117a4858286016114a2565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126117d9575f80fd5b83018035915067ffffffffffffffff8211156117f3575f80fd5b6020019150368190038213156112f6575f80fd5b5f60208284031215611817575f80fd5b815180151581146104cf575f80fd5b5f82516118378184602087016115b4565b9190910192915050565b5f60208284031215611851575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561188f5761188f611858565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118be576118be611858565b604052919050565b5f608082360312156118d6575f80fd5b6118de61186c565b82356118e9816113e2565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff80821115611919575f80fd5b9085019036601f83011261192b575f80fd5b81358181111561193d5761193d611858565b61194f601f8201601f19168501611895565b91508082523684828501011115611964575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8235603e19833603018112611837575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826119cd576119cd611997565b500490565b634e487b7160e01b5f52600160045260245ffd5b818382375f9101908152919050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611a4057601f19868403018952611a2e8383516115d6565b98840198925090830190600101611a12565b5090979650505050505050565b6001600160a01b038616815260a0602082018190525f90611a70908301876119f5565b8281036040840152611a8281876119f5565b90508281036060840152611a9681866119f5565b91505082151560808301529695505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b60ff828116828216039081111561078b5761078b6119ab565b5f60ff831680611b0457611b04611997565b8060ff84160691505092915050565b8082018082111561078b5761078b6119ab565b5f8451611b378184602089016115b4565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f6105bb60408301846115d656fea164736f6c6343000818000a","storage":{"0x0":"0xff"}},"0xda9e1b3e395bfb0a45f03c7f615146b9d896c959":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806340c10f191161006e57806340c10f191461013d57806370a082311461015257806395d89b411461017a578063a457c2d714610182578063a9059cbb14610195578063dd62ed3e146101a8575f80fd5b806306fdde03146100b5578063095ea7b3146100d357806318160ddd146100f657806323b872dd14610108578063313ce5671461011b578063395093511461012a575b5f80fd5b6100bd6101bb565b6040516100ca9190610775565b60405180910390f35b6100e66100e13660046107dc565b61024b565b60405190151581526020016100ca565b6002545b6040519081526020016100ca565b6100e6610116366004610804565b610264565b604051601281526020016100ca565b6100e66101383660046107dc565b610287565b61015061014b3660046107dc565b6102a8565b005b6100fa61016036600461083d565b6001600160a01b03165f9081526020819052604090205490565b6100bd6102b6565b6100e66101903660046107dc565b6102c5565b6100e66101a33660046107dc565b610344565b6100fa6101b636600461085d565b610351565b6060600380546101ca9061088e565b80601f01602080910402602001604051908101604052809291908181526020018280546101f69061088e565b80156102415780601f1061021857610100808354040283529160200191610241565b820191905f5260205f20905b81548152906001019060200180831161022457829003601f168201915b5050505050905090565b5f3361025881858561037b565b60019150505b92915050565b5f3361027185828561049e565b61027c858585610516565b506001949350505050565b5f336102588185856102998383610351565b6102a391906108c6565b61037b565b6102b282826106b8565b5050565b6060600480546101ca9061088e565b5f33816102d28286610351565b9050838110156103375760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61027c828686840361037b565b5f33610258818585610516565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161032e565b6001600160a01b03821661043e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161032e565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6104a98484610351565b90505f19811461051057818110156105035760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161032e565b610510848484840361037b565b50505050565b6001600160a01b03831661057a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161032e565b6001600160a01b0382166105dc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161032e565b6001600160a01b0383165f90815260208190526040902054818110156106535760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161032e565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610510565b6001600160a01b03821661070e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161032e565b8060025f82825461071f91906108c6565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f602080835283518060208501525f5b818110156107a157858101830151858201604001528201610785565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146107d7575f80fd5b919050565b5f80604083850312156107ed575f80fd5b6107f6836107c1565b946020939093013593505050565b5f805f60608486031215610816575f80fd5b61081f846107c1565b925061082d602085016107c1565b9150604084013590509250925092565b5f6020828403121561084d575f80fd5b610856826107c1565b9392505050565b5f806040838503121561086e575f80fd5b610877836107c1565b9150610885602084016107c1565b90509250929050565b600181811c908216806108a257607f821691505b6020821081036108c057634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561025e57634e487b7160e01b5f52601160045260245ffdfea164736f6c6343000818000a","storage":{"0x2":"0xe8d4a51000","0x3":"0x0","0x4":"0x0","0x47668262eb76f3aa61b856a0c078f33a11f46671cf1466c3616ba74a22fcdd92":"0xe8d4a51000","0x9cc83e833a69122bf7773b58c082655d780ae469ab7cdf5d1047a30229e55875":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}},"0xe0afc4e9e03e4aa67257df7a2eca77454309789d":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806316f1983114610030575b600080fd5b6100b06004803603604081101561004657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561007157600080fd5b82018360208201111561008357600080fd5b803590602001918460018302840111640100000000831117156100a557600080fd5b5090925090506100b2565b005b826001600160a01b031660017f103fed9db65eac19c4d870f49ab7520fe03b99f1838e5996caf47e9e43308392848460405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a350505056fea164736f6c6343000606000a","storage":{}},"0xe4fdf45c2f8d198854f8823809c7a988eeaaa493":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80638cb8ecec1161006e5780638cb8ecec1461013e5780638da5cb5b14610151578063cbe9e76414610161578063da8c229e14610183578063e0dba60f146101a5578063f2fde38b146101b8575f80fd5b806301670ba9146100aa57806301ffc9a7146100bf5780633f15457f146100f85780634e543b2614610123578063715018a614610136575b5f80fd5b6100bd6100b8366004610529565b6101cb565b005b6100e36100cd366004610540565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b60025461010b906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100bd610131366004610589565b610217565b6100bd610282565b6100bd61014c3660046105a2565b610295565b5f546001600160a01b031661010b565b6100e361016f366004610529565b60036020525f908152604090205460ff1681565b6100e3610191366004610589565b60016020525f908152604090205460ff1681565b6100bd6101b33660046105cc565b6103a2565b6100bd6101c6366004610589565b610408565b6101d3610481565b60405181907f1764176cfa565853ba1ded547a830a9f9bff95231ef6fd228b3ddd6175777569905f90a25f908152600360205260409020805460ff19166001179055565b61021f610481565b600254604051630c4b7b8560e11b81525f60048201526001600160a01b03838116602483015290911690631896f70a906044015f604051808303815f87803b158015610269575f80fd5b505af115801561027b573d5f803e3d5ffd5b5050505050565b61028a610481565b6102935f6104da565b565b335f9081526001602052604090205460ff166103095760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b60648201526084015b60405180910390fd5b5f8281526003602052604090205460ff1615610323575f80fd5b6002546040516306ab592360e01b81525f6004820152602481018490526001600160a01b038381166044830152909116906306ab5923906064016020604051808303815f875af1158015610379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039d9190610605565b505050565b6103aa610481565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b610410610481565b6001600160a01b0381166104755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610300565b61047e816104da565b50565b5f546001600160a01b031633146102935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610300565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610539575f80fd5b5035919050565b5f60208284031215610550575f80fd5b81356001600160e01b031981168114610567575f80fd5b9392505050565b80356001600160a01b0381168114610584575f80fd5b919050565b5f60208284031215610599575f80fd5b6105678261056e565b5f80604083850312156105b3575f80fd5b823591506105c36020840161056e565b90509250929050565b5f80604083850312156105dd575f80fd5b6105e68361056e565b9150602083013580151581146105fa575f80fd5b809150509250929050565b5f60208284031215610615575f80fd5b505191905056fea164736f6c6343000818000a","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x2":"0x3f1194b9019002863ad0dbbe295294547c0d36a9","0xbdf39e9e65b2355b1b0b06df799c09159f0ab90f06a9bb2153f5de7d9b0ea81":"0x1","0x97b771283c9c769f7b9399fef71d92816f2bd31de10203b676671b01eb920966":"0x1"}},"0xe85541865bbb62a05064ce5c9f41cc293a8ea996":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c8063715018a6146100645780638129fc1c1461006e5780638da5cb5b14610076578063a3f4df7e14610096578063f2fde38b146100cf578063ffa1ad74146100e2575b5f80fd5b61006c610106565b005b61006c610119565b6033546040516001600160a01b0390911681526020015b60405180910390f35b6100c26040518060400160405280600d81526020016c2aa7299d1027b832b930ba37b960991b81525081565b60405161008d91906103bd565b61006c6100dd366004610409565b610229565b6100c2604051806040016040528060058152602001640302e312e360dc1b81525081565b61010e61029f565b6101175f6102f9565b565b5f54610100900460ff161580801561013757505f54600160ff909116105b806101505750303b15801561015057505f5460ff166001145b6101b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156101d9575f805461ff0019166101001790555b6101e161034a565b8015610226575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b61023161029f565b6001600160a01b0381166102965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101af565b610226816102f9565b6033546001600160a01b031633146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101af565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166103b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101af565b610117336102f9565b5f602080835283518060208501525f5b818110156103e9578581018301518582016040015282016103cd565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610419575f80fd5b81356001600160a01b038116811461042f575f80fd5b939250505056fea164736f6c6343000818000a","storage":{}},"0xead34b583404e3cb0c9b97c2d1c486be67be9f30":{"nonce":0,"balance":"0x3635c9adc5dea00000","code":"0x","storage":{}},"0xec71e4e674fe0f432693dc2b935c34bd2774c003":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063a200e15311610063578063a200e15314610146578063a34e35961461016d578063c8a4271f14610180578063cd5d2c74146101bf578063d820ed42146101e6575f80fd5b806301ffc9a7146100945780632c0fd74c146100bc57806350e9a715146100f157806359b6b86c1461011f575b5f80fd5b6100a76100a2366004610600565b61020d565b60405190151581526020015b60405180910390f35b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b3565b6101046100ff366004610627565b610243565b604080518251815260209283015192810192909252016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000181565b6100e37f000000000000000000000000000000000000000000000000000000000000000481565b6100e361017b366004610627565b610404565b6101a77f000000000000000000000000f3810eb7d64d1c11ae12727d957c6202b24492f581565b6040516001600160a01b0390911681526020016100b3565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b6100e37f000000000000000000000000000000000000000000000000000000000000000281565b5f6001600160e01b031982166301ffc9a760e01b148061023d57506001600160e01b031982166350e9a71560e01b145b92915050565b604080518082019091525f80825260208201525f61029586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061045392505050565b90505f600582106102d1576102ca847f00000000000000000000000000000000000000000000000000000000000000016106b3565b9050610394565b81600403610303576102ca847f00000000000000000000000000000000000000000000000000000000000000026106b3565b81600303610335576102ca847f00000000000000000000000000000000000000000000000000000000000000046106b3565b81600203610367576102ca847f00000000000000000000000000000000000000000000000000000000000000006106b3565b610391847f00000000000000000000000000000000000000000000000000000000000000006106b3565b90505b60405180604001604052806103a883610554565b81526020016103f76103f28a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b91506105f89050565b610554565b9052979650505050505050565b5f61044a6103f286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892508791506105f89050565b95945050505050565b80515f90819081905b8082101561054b575f858381518110610477576104776106ca565b01602001516001600160f81b0319169050600160ff1b8110156104a65761049f6001846106de565b9250610538565b600760fd1b6001600160f81b0319821610156104c75761049f6002846106de565b600f60fc1b6001600160f81b0319821610156104e85761049f6003846106de565b601f60fb1b6001600160f81b0319821610156105095761049f6004846106de565b603f60fa1b6001600160f81b03198216101561052a5761049f6005846106de565b6105356006846106de565b92505b5082610543816106f1565b93505061045c565b50909392505050565b5f807f000000000000000000000000f3810eb7d64d1c11ae12727d957c6202b24492f56001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d69190610709565b9050806105e7846305f5e1006106b3565b6105f19190610720565b9392505050565b5f9392505050565b5f60208284031215610610575f80fd5b81356001600160e01b0319811681146105f1575f80fd5b5f805f806060858703121561063a575f80fd5b843567ffffffffffffffff80821115610651575f80fd5b818701915087601f830112610664575f80fd5b813581811115610672575f80fd5b886020828501011115610683575f80fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761023d5761023d61069f565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561023d5761023d61069f565b5f600182016107025761070261069f565b5060010190565b5f60208284031215610719575f80fd5b5051919050565b5f8261073a57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000818000a","storage":{}},"0xf1ad43dc647f27c2366ab4742d68d21282f7d50e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106101d1575f3560e01c80638b95dd71116100fe578063c86902331161009e578063e32954eb1161006e578063e32954eb146104f2578063e59d895d14610505578063e985e9c514610518578063f1cb7e0614610553575f80fd5b8063c869023314610435578063ce3decdc1461048c578063d5fa2b001461049f578063d700ff33146104b2575f80fd5b8063a8fa5682116100d9578063a8fa5682146103ac578063a9784b3e146103bf578063ac9650d814610402578063bc1c58d114610422575f80fd5b80638b95dd7114610373578063a22cb46514610386578063a4b91a0114610399575f80fd5b80633603d758116101745780635c98042b116101445780635c98042b14610327578063623195b01461033a578063691f34311461034d5780637737221314610360575f80fd5b80633603d758146102975780633b3b57de146102aa5780634cbf6ba4146102bd57806359d1d43c14610307575f80fd5b8063124a319c116101af578063124a319c146102255780632203ab561461025057806329cd62ea14610271578063304e6ade14610284575f80fd5b806301ffc9a7146101d55780630af179d7146101fd57806310f13a8c14610212575b5f80fd5b6101e86101e3366004612267565b610566565b60405190151581526020015b60405180910390f35b61021061020b3660046122bd565b610576565b005b610210610220366004612304565b610778565b610238610233366004612377565b610842565b6040516001600160a01b0390911681526020016101f4565b61026361025e3660046123a1565b610a87565b6040516101f492919061240e565b61021061027f366004612426565b610bb5565b6102106102923660046122bd565b610c4d565b6102106102a536600461244f565b610cc6565b6102386102b836600461244f565b610d64565b6101e86102cb3660046123a1565b5f82815260208181526040808320546001600160401b031683526006825280832094835293815283822092825291909152205461ffff16151590565b61031a6103153660046122bd565b610d93565b6040516101f49190612466565b61031a61033536600461244f565b610e6f565b610210610348366004612478565b610f2a565b61031a61035b36600461244f565b610fc2565b61021061036e3660046122bd565b610ffa565b6102106103813660046124da565b611073565b6102106103943660046125b9565b611150565b6102106103a73660046125e3565b61122a565b61031a6103ba36600461261e565b6112f6565b6101e86103cd36600461265a565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b6104156104103660046126ce565b611342565b6040516101f4919061270c565b61031a61043036600461244f565b61134f565b61047761044336600461244f565b5f81815260208181526040808320546001600160401b03168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f4565b61021061049a3660046122bd565b611387565b6102106104ad36600461276e565b6114c3565b6104da6104c036600461244f565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b0390911681526020016101f4565b61041561050036600461279c565b6114e9565b6102106105133660046127d6565b6114fe565b6101e8610526366004612808565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61031a6105613660046123a1565b6115a2565b5f61057082611666565b92915050565b826105808161168a565b610588575f80fd5b5f84815260208181526040808320548151601f87018490048402810184019092528582528392606092839285926001600160401b039091169183916105eb9183918d908d90819084018382808284375f9201919091525092939250506118b79050565b90505b80515160208201511015610712578661ffff165f03610652578060400151965061061781611912565b94508460405160200161062a9190612834565b60405160208183030381529060405280519060200120925061064b81611933565b9350610704565b5f61065c82611912565b9050816040015161ffff168861ffff16141580610680575061067e868261194f565b155b15610702576106db8c878a8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505060208801518d91506106d2908290612863565b8b51158a61196a565b8160400151975081602001519650809550858051906020012093506106ff82611933565b94505b505b61070d81611bc9565b6105ee565b5083511561076c5761076c8a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c925061076391508290508f612863565b8951158861196a565b50505050505050505050565b846107828161168a565b61078a575f80fd5b5f86815260208181526040808320546001600160401b03168352600a8252808320898452909152908190209051849184916107c89089908990612876565b908152602001604051809103902091826107e3929190612901565b5084846040516107f4929190612876565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a18787878760405161083294939291906129e2565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b03168015610894579050610570565b5f61089e85610d64565b90506001600160a01b0381166108b8575f92505050610570565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161090f9190612834565b5f60405180830381855afa9150503d805f8114610947576040519150601f19603f3d011682016040523d82523d5f602084013e61094c565b606091505b509150915081158061095f575060208151105b80610989575080601f8151811061097857610978612a13565b01602001516001600160f81b031916155b1561099a575f945050505050610570565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516109f09190612834565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b509092509050811580610a41575060208151105b80610a6b575080601f81518110610a5a57610a5a612a13565b01602001516001600160f81b031916155b15610a7c575f945050505050610570565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610b975780851615801590610ae457505f8181526020839052604081208054610ae090612885565b9050115b15610b8f5780825f8381526020019081526020015f20808054610b0690612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3290612885565b8015610b7d5780601f10610b5457610100808354040283529160200191610b7d565b820191905f5260205f20905b815481529060010190602001808311610b6057829003601f168201915b50505050509050935093505050610bae565b60011b610ab5565b505f60405180602001604052805f81525092509250505b9250929050565b82610bbf8161168a565b610bc7575f80fd5b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610c578161168a565b610c5f575f80fd5b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610c93838583612901565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610c3f929190612a27565b80610cd08161168a565b610cd8575f80fd5b5f82815260208190526040812080546001600160401b031691610cfa83612a3a565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f80610d7183603c6115a2565b905080515f03610d8357505f92915050565b610d8c81611cae565b9392505050565b5f83815260208181526040808320546001600160401b03168352600a825280832086845290915290819020905160609190610dd19085908590612876565b90815260200160405180910390208054610dea90612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1690612885565b8015610e615780601f10610e3857610100808354040283529160200191610e61565b820191905f5260205f20905b815481529060010190602001808311610e4457829003601f168201915b505050505090509392505050565b5f81815260208181526040808320546001600160401b03168352600482528083208484529091529020805460609190610ea790612885565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed390612885565b8015610f1e5780601f10610ef557610100808354040283529160200191610f1e565b820191905f5260205f20905b815481529060010190602001808311610f0157829003601f168201915b50505050509050919050565b83610f348161168a565b610f3c575f80fd5b83610f48600182612863565b1615610f52575f80fd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610f8e838583612901565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600882528083208484529091529020805460609190610ea790612885565b826110048161168a565b61100c575f80fd5b5f84815260208181526040808320546001600160401b03168352600882528083208784529091529020611040838583612901565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610c3f929190612a27565b8261107d8161168a565b611085575f80fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516110b792919061240e565b60405180910390a2603c830361110e57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110f284611cae565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b0316835260028252808320878452825280832086845290915290206111498382612a5f565b5050505050565b6001600160a01b03821633036111bf5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084015b60405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036112825760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c6660448201526064016111b6565b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b5f83815260208181526040808320546001600160401b03168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610dea90612885565b6060610d8c5f8484611ccb565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610ea790612885565b826113918161168a565b611399575f80fd5b5f84815260208181526040808320546001600160401b031680845260048352818420888552909252822080549192916113d190612885565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90612885565b80156114485780601f1061141f57610100808354040283529160200191611448565b820191905f5260205f20905b81548152906001019060200180831161142b57829003601f168201915b505050506001600160401b0384165f9081526004602090815260408083208b8452909152902091925061147e9050858783612901565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f858287876040516114b393929190612b1e565b60405180910390a2505050505050565b816114cd8161168a565b6114d5575f80fd5b6114e483603c61038185611e88565b505050565b60606114f6848484611ccb565b949350505050565b826115088161168a565b611510575f80fd5b5f84815260208181526040808320546001600160401b031683526007825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906115e290612885565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612885565b80156116595780601f1061163057610100808354040283529160200191611659565b820191905f5260205f20905b81548152906001019060200180831161163c57829003601f168201915b5050505050905092915050565b5f6001600160e01b03198216631674750f60e21b1480610570575061057082611eb8565b5f336001600160a01b037f0000000000000000000000004fbf7b2f171336958be5d15ff762a5cff53635681614806116ea5750336001600160a01b037f000000000000000000000000f670681605efc4efc804f5a9b97ee89520473d5616145b156116f757506001919050565b6040516302571be360e01b8152600481018390525f907f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a96001600160a01b0316906302571be390602401602060405180830381865afa15801561175c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117809190612b4d565b90507f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e184172046001600160a01b0316816001600160a01b031603611845576040516331a9108f60e11b8152600481018490527f0000000000000000000000006ac8f19d1e0f81147cdf2a1e53cb1f4e184172046001600160a01b031690636352211e90602401602060405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190612b4d565b90505b6001600160a01b03811633148061187e57506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610d8c57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610d8c565b6118ff6040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261057081611bc9565b602081015181516060916105709161192a9082611edc565b84519190611f33565b60a081015160c08201516060916105709161192a908290612863565b5f81518351148015610d8c5750610d8c835f845f8751611fa7565b865160208801205f61197d878787611f33565b90508315611aa1576001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c168452909152902080546119c690612885565b159050611a23576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611a0783612b68565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611a62916121f9565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611a94929190612b84565b60405180910390a261076c565b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611ae290612885565b90505f03611b40576001600160401b0383165f9081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b2483612ba9565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b0383165f9081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611b808282612a5f565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611bb593929190612bbf565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611be05750565b5f611bf2825f01518360200151611edc565b8260200151611c019190612bed565b8251909150611c109082611fc9565b61ffff166040830152611c24600282612bed565b8251909150611c339082611fc9565b61ffff166060830152611c47600282612bed565b8251909150611c569082611fef565b63ffffffff166080830152611c6c600482612bed565b82519091505f90611c7d9083611fc9565b61ffff169050611c8e600283612bed565b60a084018190529150611ca18183612bed565b60c0909301929092525050565b5f8151601414611cbc575f80fd5b5060200151600160601b900490565b6060816001600160401b03811115611ce557611ce56124c6565b604051908082528060200260200182016040528015611d1857816020015b6060815260200190600190039081611d035790505b5090505f5b82811015611e80578415611dd8575f848483818110611d3e57611d3e612a13565b9050602002810190611d509190612c00565b611d5f91602491600491612c42565b611d6891612c69565b9050858114611dd65760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016111b6565b505b5f8030868685818110611ded57611ded612a13565b9050602002810190611dff9190612c00565b604051611e0d929190612876565b5f60405180830381855af49150503d805f8114611e45576040519150601f19603f3d011682016040523d82523d5f602084013e611e4a565b606091505b509150915081611e58575f80fd5b80848481518110611e6b57611e6b612a13565b60209081029190910101525050600101611d1d565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b1480610570575061057082612017565b5f815b83518110611eef57611eef612c86565b5f611efa858361203b565b60ff169050611f0a816001612bed565b611f149083612bed565b9150805f03611f235750611f29565b50611edf565b6114f68382612863565b8251606090611f428385612bed565b1115611f4c575f80fd5b5f826001600160401b03811115611f6557611f656124c6565b6040519080825280601f01601f191660200182016040528015611f8f576020820181803683370190505b50905060208082019086860101610a7c82828761205e565b5f611fb38484846120b3565b611fbe8787856120b3565b149695505050505050565b81515f90611fd8836002612bed565b1115611fe2575f80fd5b50016002015161ffff1690565b81515f90611ffe836004612bed565b1115612008575f80fd5b50016004015163ffffffff1690565b5f6001600160e01b0319821663691f343160e01b14806105705750610570826120d5565b5f82828151811061204e5761204e612a13565b016020015160f81c905092915050565b602081106120965781518352612075602084612bed565b9250612082602083612bed565b915061208f602082612863565b905061205e565b905182516020929092036101000a5f190180199091169116179052565b82515f906120c18385612bed565b11156120cb575f80fd5b5091016020012090565b5f6001600160e01b031982166304928c6760e21b14806105705750610570825f6001600160e01b0319821663547d2b4160e11b148061212457506001600160e01b03198216635c98042b60e01b145b806105705750610570825f6001600160e01b0319821663bc1c58d160e01b14806105705750610570825f6001600160e01b03198216631d9dabef60e11b148061217d57506001600160e01b031982166378e5bf0360e11b145b806105705750610570825f6001600160e01b03198216631101d5ab60e11b14806105705750610570825f6001600160e01b0319821663d700ff3360e01b14806105705750610570825f6001600160e01b03198216634fbf043360e01b148061057057506301ffc9a760e01b6001600160e01b0319831614610570565b50805461220590612885565b5f825580601f10612214575050565b601f0160209004905f5260205f20908101906122309190612233565b50565b5b80821115612247575f8155600101612234565b5090565b80356001600160e01b031981168114612262575f80fd5b919050565b5f60208284031215612277575f80fd5b610d8c8261224b565b5f8083601f840112612290575f80fd5b5081356001600160401b038111156122a6575f80fd5b602083019150836020828501011115610bae575f80fd5b5f805f604084860312156122cf575f80fd5b8335925060208401356001600160401b038111156122eb575f80fd5b6122f786828701612280565b9497909650939450505050565b5f805f805f60608688031215612318575f80fd5b8535945060208601356001600160401b0380821115612335575f80fd5b61234189838a01612280565b90965094506040880135915080821115612359575f80fd5b5061236688828901612280565b969995985093965092949392505050565b5f8060408385031215612388575f80fd5b823591506123986020840161224b565b90509250929050565b5f80604083850312156123b2575f80fd5b50508035926020909101359150565b5f5b838110156123db5781810151838201526020016123c3565b50505f910152565b5f81518084526123fa8160208601602086016123c1565b601f01601f19169290920160200192915050565b828152604060208201525f6114f660408301846123e3565b5f805f60608486031215612438575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561245f575f80fd5b5035919050565b602081525f610d8c60208301846123e3565b5f805f806060858703121561248b575f80fd5b843593506020850135925060408501356001600160401b038111156124ae575f80fd5b6124ba87828801612280565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156124ec575f80fd5b833592506020840135915060408401356001600160401b0380821115612510575f80fd5b818601915086601f830112612523575f80fd5b813581811115612535576125356124c6565b604051601f8201601f19908116603f0116810190838211818310171561255d5761255d6124c6565b81604052828152896020848701011115612575575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b6001600160a01b0381168114612230575f80fd5b80358015158114612262575f80fd5b5f80604083850312156125ca575f80fd5b82356125d581612596565b9150612398602084016125aa565b5f805f606084860312156125f5575f80fd5b83359250602084013561260781612596565b9150612615604085016125aa565b90509250925092565b5f805f60608486031215612630575f80fd5b8335925060208401359150604084013561ffff8116811461264f575f80fd5b809150509250925092565b5f805f6060848603121561266c575f80fd5b833561267781612596565b925060208401359150604084013561264f81612596565b5f8083601f84011261269e575f80fd5b5081356001600160401b038111156126b4575f80fd5b6020830191508360208260051b8501011115610bae575f80fd5b5f80602083850312156126df575f80fd5b82356001600160401b038111156126f4575f80fd5b6127008582860161268e565b90969095509350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561276157603f1988860301845261274f8583516123e3565b94509285019290850190600101612733565b5092979650505050505050565b5f806040838503121561277f575f80fd5b82359150602083013561279181612596565b809150509250929050565b5f805f604084860312156127ae575f80fd5b8335925060208401356001600160401b038111156127ca575f80fd5b6122f78682870161268e565b5f805f606084860312156127e8575f80fd5b833592506127f86020850161224b565b9150604084013561264f81612596565b5f8060408385031215612819575f80fd5b823561282481612596565b9150602083013561279181612596565b5f82516128458184602087016123c1565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105705761057061284f565b818382375f9101908152919050565b600181811c9082168061289957607f821691505b6020821081036128b757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156114e457805f5260205f20601f840160051c810160208510156128e25750805b601f840160051c820191505b81811015611149575f81556001016128ee565b6001600160401b03831115612918576129186124c6565b61292c836129268354612885565b836128bd565b5f601f84116001811461295d575f85156129465750838201355b5f19600387901b1c1916600186901b178355611149565b5f83815260208120601f198716915b8281101561298c578685013582556020948501946001909201910161296c565b50868210156129a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6129f56040830186886129ba565b8281036020840152612a088185876129ba565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6114f66020830184866129ba565b5f6001600160401b03808316818103612a5557612a5561284f565b6001019392505050565b81516001600160401b03811115612a7857612a786124c6565b612a8c81612a868454612885565b846128bd565b602080601f831160018114612abf575f8415612aa85750858301515b5f19600386901b1c1916600185901b178555612b16565b5f85815260208120601f198616915b82811015612aed57888601518255948401946001909101908401612ace565b5085821015612b0a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604081525f612b3060408301866123e3565b8281036020840152612b438185876129ba565b9695505050505050565b5f60208284031215612b5d575f80fd5b8151610d8c81612596565b5f61ffff821680612b7b57612b7b61284f565b5f190192915050565b604081525f612b9660408301856123e3565b905061ffff831660208301529392505050565b5f61ffff808316818103612a5557612a5561284f565b606081525f612bd160608301866123e3565b61ffff851660208401528281036040840152612b4381856123e3565b808201808211156105705761057061284f565b5f808335601e19843603018112612c15575f80fd5b8301803591506001600160401b03821115612c2e575f80fd5b602001915036819003821315610bae575f80fd5b5f8085851115612c50575f80fd5b83861115612c5c575f80fd5b5050820193919092039150565b80356020831015610570575f19602084900360031b1b1692915050565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a","storage":{}},"0xf3810eb7d64d1c11ae12727d957c6202b24492f5":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600e575f80fd5b50600436106030575f3560e01c806350d25bcd146034578063e5c19b2d146048575b5f80fd5b5f5460405190815260200160405180910390f35b605760533660046059565b5f55565b005b5f602082840312156068575f80fd5b503591905056fea164736f6c6343000818000a","storage":{"0x0":"0x5f5e100"}},"0xf670681605efc4efc804f5a9b97ee89520473d56":{"nonce":1,"balance":"0x0","code":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80638da5cb5b11610088578063c66485b211610063578063c66485b2146101da578063da8c229e146101ed578063e0dba60f1461021f578063f2fde38b14610232575f80fd5b80638da5cb5b146101a4578063bffbe61c146101b4578063c47f0027146101c7575f80fd5b806365669631116100c35780636566963114610161578063715018a6146101745780637a806d6b1461017e578063828eab0e14610191575f80fd5b80630f5a5466146100e95780631e83409a1461010f5780633f15457f14610122575b5f80fd5b6100fc6100f7366004610958565b610245565b6040519081526020015b60405180910390f35b6100fc61011d36600461098f565b610258565b6101497f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a981565b6040516001600160a01b039091168152602001610106565b6100fc61016f3660046109aa565b610279565b61017c610526565b005b6100fc61018c366004610a8f565b610539565b600254610149906001600160a01b031681565b5f546001600160a01b0316610149565b6100fc6101c236600461098f565b6105ae565b6100fc6101d5366004610b00565b610608565b61017c6101e836600461098f565b610624565b61020f6101fb36600461098f565b60016020525f908152604090205460ff1681565b6040519015158152602001610106565b61017c61022d366004610b47565b6106e4565b61017c61024036600461098f565b61074a565b5f610251338484610279565b9392505050565b6002545f9061027390339084906001600160a01b0316610279565b92915050565b5f836001600160a01b0381163314806102a05750335f9081526001602052604090205460ff165b80610334575060405163e985e9c560e01b81526001600160a01b0382811660048301523360248301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a9169063e985e9c590604401602060405180830381865afa158015610310573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103349190610b73565b806103435750610343816107c3565b6103e05760405162461bcd60e51b815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b5f6103ea8661083a565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2602080830191909152818301849052825180830384018152606090920192839052815191012091925081906001600160a01b038916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e92905f90a36040516305ef2c7f60e41b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152602481018390526001600160a01b03878116604483015286811660648301525f60848301527f0000000000000000000000003f1194b9019002863ad0dbbe295294547c0d36a91690635ef2c7f09060a4015f604051808303815f87803b158015610505575f80fd5b505af1158015610517573d5f803e3d5ffd5b50929998505050505050505050565b61052e61089c565b6105375f6108f5565b565b5f80610546868686610279565b604051637737221360e01b81529091506001600160a01b038516906377372213906105779084908790600401610b8e565b5f604051808303815f87803b15801561058e575f80fd5b505af11580156105a0573d5f803e3d5ffd5b509298975050505050505050565b5f7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26105d98361083a565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b6002545f9061027390339081906001600160a01b031685610539565b61062c61089c565b6001600160a01b03811661069b5760405162461bcd60e51b815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201526f07373206d757374206e6f7420626520360841b60648201526084016103d7565b600280546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf905f90a250565b6106ec61089c565b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b61075261089c565b6001600160a01b0381166107b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d7565b6107c0816108f5565b50565b5f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561081e575060408051601f3d908101601f1916820190925261081b91810190610be2565b60015b61082957505f919050565b6001600160a01b0316331492915050565b5f60285b8015610891575f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a81536010909204915f19016f181899199a1a9b1b9c1cb0b131b232b360811b600f84161a815360108304925061083e565b505060285f20919050565b5f546001600160a01b031633146105375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107c0575f80fd5b5f8060408385031215610969575f80fd5b823561097481610944565b9150602083013561098481610944565b809150509250929050565b5f6020828403121561099f575f80fd5b813561025181610944565b5f805f606084860312156109bc575f80fd5b83356109c781610944565b925060208401356109d781610944565b915060408401356109e781610944565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610a15575f80fd5b813567ffffffffffffffff80821115610a3057610a306109f2565b604051601f8301601f19908116603f01168101908282118183101715610a5857610a586109f2565b81604052838152866020858801011115610a70575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f8060808587031215610aa2575f80fd5b8435610aad81610944565b93506020850135610abd81610944565b92506040850135610acd81610944565b9150606085013567ffffffffffffffff811115610ae8575f80fd5b610af487828801610a06565b91505092959194509250565b5f60208284031215610b10575f80fd5b813567ffffffffffffffff811115610b26575f80fd5b610b3284828501610a06565b949350505050565b80151581146107c0575f80fd5b5f8060408385031215610b58575f80fd5b8235610b6381610944565b9150602083013561098481610b3a565b5f60208284031215610b83575f80fd5b815161025181610b3a565b8281525f60206040602084015283518060408501525f5b81811015610bc157858101830151858201606001528201610ba5565b505f606082860101526060601f19601f830116850101925050509392505050565b5f60208284031215610bf2575f80fd5b81516102518161094456fea164736f6c6343000818000a","storage":{"0x0":"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa","0x2":"0x9df67c91f1bfcb4d966cf764e9218685e7c59e8a","0x1f5b7623941da966ad7183d9cbb6db584f6d4add26919ac31a2d3f19a164e7e1":"0x1","0xbe5de2149ce76ca5934fa63455cd675fd52e2d30f3328985d298a627ca0f05e9":"0x1"}},"0xf8c26340c1eaea6c7ff1760b25005e1306953572":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638c87a4ea116100a2578063b87abc1111610071578063b87abc1114610244578063c597407314610257578063ce92b33e1461026a578063e837ae741461027d578063ec129eea146102905761010b565b80638c87a4ea146101ea5780638f69c188146101fd578063a3557e6c14610210578063b85afd28146102235761010b565b806347c81699116100de57806347c8169914610181578063672b9f81146101945780636ccbae5f146101b55780637b103999146101d55761010b565b80631bd8cc1a146101105780631be5e7ed146101395780632c3d376d14610159578063310bd74b1461016c575b600080fd5b61012361011e3660046117b4565b6102a3565b6040516101309190611eee565b60405180910390f35b61014c610147366004611aec565b6104f2565b6040516101309190611fd6565b61014c610167366004611b21565b610673565b61017f61017a366004611b21565b610714565b005b61017f61018f3660046119b5565b6107c0565b6101a76101a2366004611b94565b6108ef565b604051610130929190611fe7565b6101c86101c3366004611b21565b6109c3565b604051610130919061204c565b6101dd6109d5565b6040516101309190611ea9565b6101236101f836600461191d565b6109e5565b61017f61020b366004611878565b610a74565b61017f61021e366004611878565b610af0565b610236610231366004611951565b610b1b565b604051610130929190611eff565b61017f610252366004611b3f565b610ca9565b61017f610265366004611a39565b610d43565b61017f610278366004611808565b610df9565b61017f61028b366004611808565b610e97565b61017f61029e366004611808565b610f4e565b60015460405163b3f9e4cb60e01b815260609183916001600160a01b039091169063b3f9e4cb906102d890849060040161204c565b60206040518083038186803b1580156102f057600080fd5b505afa158015610304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610328919081019061178e565b6001600160a01b0316306001600160a01b0316146103615760405162461bcd60e51b81526004016103589061201c565b60405180910390fd5b604080518581526020808702820101909152849060609082801561039957816020015b60608152602001906001900390816103845790505b506000868152600360205260408120549192505b838110156104e557600087815260026020908152604080832085845290915290208989838181106103da57fe5b602002820190508035601e19368490030181126103f657600080fd5b909101602081019150356001600160401b0381111561041457600080fd5b3681900382131561042457600080fd5b604051610432929190611e70565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f810185900485028301850190935282825290929091908301828280156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b50505050508382815181106104d257fe5b60209081029190910101526001016103ad565b5090979650505050505050565b60015460405163b3f9e4cb60e01b815260609183916001600160a01b039091169063b3f9e4cb9061052790849060040161204c565b60206040518083038186803b15801561053f57600080fd5b505afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610577919081019061178e565b6001600160a01b0316306001600160a01b0316146105a75760405162461bcd60e51b81526004016103589061201c565b6000838152600260209081526040808320600383528184205484529091529081902090516105d6908690611e7d565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f810185900485028301850190935282825290929091908301828280156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b505050505091505092915050565b60008181526004602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156107085780601f106106dd57610100808354040283529160200191610708565b820191906000526020600020905b8154815290600101906020018083116106eb57829003601f168201915b50505050509050919050565b60015460405163430c208160e01b815282916001600160a01b03169063430c2081906107469033908590600401611ec5565b60206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107969190810190611997565b6107b25760405162461bcd60e51b81526004016103589061202c565b6107bc4283610fec565b5050565b60015460405163430c208160e01b815282916001600160a01b03169063430c2081906107f29033908590600401611ec5565b60206040518083038186803b15801561080a57600080fd5b505afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108429190810190611997565b61085e5760405162461bcd60e51b81526004016103589061202c565b6108e7600360008481526020019081526020016000205487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061108e915050565b505050505050565b60015460405163b3f9e4cb60e01b8152606091829184916001600160a01b03169063b3f9e4cb9061092490849060040161204c565b60206040518083038186803b15801561093c57600080fd5b505afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610974919081019061178e565b6001600160a01b0316306001600160a01b0316146109a45760405162461bcd60e51b81526004016103589061201c565b6109ad85610673565b92506109b983856104f2565b9150509250929050565b60009081526020819052604090205490565b6001546001600160a01b03165b90565b6060600082519050606081604051908082528060200260200182016040528015610a2357816020015b6060815260200190600190039081610a0e5790505b50905060005b82811015610a6c57610a4d858281518110610a4057fe5b6020026020010151610673565b828281518110610a5957fe5b6020908102919091010152600101610a29565b509392505050565b610acf63ce92b33e60e01b858585604051602401610a9493929190611f24565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092178252519020838361129f565b600082815260036020526040902054610aea908585856113c3565b50505050565b610b1063ec129eea60e01b858585604051602401610a9493929190611f24565b610aea84848461140a565b60015460405163b3f9e4cb60e01b8152606091829184916001600160a01b03169063b3f9e4cb90610b5090849060040161204c565b60206040518083038186803b158015610b6857600080fd5b505afa158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ba0919081019061178e565b6001600160a01b0316306001600160a01b031614610bd05760405162461bcd60e51b81526004016103589061201c565b8451604080518281526020808402820101909152818015610c0557816020015b6060815260200190600190039081610bf05790505b50935080604051908082528060200260200182016040528015610c3c57816020015b6060815260200190600190039081610c275790505b50925060005b81811015610c9f57610c67878281518110610c5957fe5b6020026020010151876108ef565b8651879084908110610c7557fe5b60200260200101868481518110610c8857fe5b602090810291909101019190915252600101610c42565b5050509250929050565b610d3463310bd74b60e01b84604051602401610cc5919061204c565b60408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417845291519092208251601f8601839004830281018301909352848352918691869086908190840183828082843760009201919091525061129f92505050565b610d3e4284610fec565b505050565b610d676347c8169960e01b8888888888604051602401610cc5959493929190611f96565b610df0600360008581526020019081526020016000205488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525089925061108e915050565b50505050505050565b60015460405163430c208160e01b815282916001600160a01b03169063430c208190610e2b9033908590600401611ec5565b60206040518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e7b9190810190611997565b610acf5760405162461bcd60e51b81526004016103589061202c565b6005546040516355138f0d60e11b81526001600160a01b039091169063aa271e1a90610ec7903390600401611eb7565b60206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f179190810190611997565b610f335760405162461bcd60e51b81526004016103589061203c565b600081815260036020526040902054610d3e908484846113c3565b60015460405163430c208160e01b815282916001600160a01b03169063430c208190610f809033908590600401611ec5565b60206040518083038186803b158015610f9857600080fd5b505afa158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd09190810190611997565b610b105760405162461bcd60e51b81526004016103589061202c565b600081815260036020526040808220849055600154905163538361a760e01b81526001600160a01b039091169163538361a79161102d91859160040161205a565b600060405180830381600087803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b50506040518392507f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9150600090a25050565b825160208085019190912060008381526002835260408082208883529093528281209251919290916110c1908790611e7d565b908152604051602091819003919091018120546001805463538361a760e01b84526002918316156101000260001901909216041592506001600160a01b03169063538361a7906111179086908690600401612075565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b50505060008481526002602090815260408083208a8452909152908190209051869250611173908890611e7d565b90815260200160405180910390209080519060200190611194929190611521565b50600082815260046020526040902054600260001961010060018416150201909116046111dc57600082815260046020908152604090912086516111da92880190611521565b505b801561123157846040516111f09190611e7d565b6040518091039020837f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f86876040516112289190611fd6565b60405180910390a35b8360405161123f9190611e7d565b6040518091039020856040516112559190611e7d565b6040518091039020847f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d92888860405161128f929190611fe7565b60405180910390a4505050505050565b6000828152602081815260408083205490519092916112f59185916112e9916112ce918a913091899101611e39565b60405160208183030381529060405280519060200120611414565b9063ffffffff61144416565b90506001600160a01b0381161580159061138c575060015460405163430c208160e01b81526001600160a01b039091169063430c20819061133c9084908890600401611ee0565b60206040518083038186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061138c9190810190611997565b6113a85760405162461bcd60e51b81526004016103589061200c565b50505060009081526020819052604090208054600101905550565b825160005b818110156108e757611402868683815181106113e057fe5b60200260200101518684815181106113f457fe5b60200260200101518661108e565b6001016113c8565b610f334282610fec565b6000816040516020016114279190611e89565b604051602081830303815290604052805190602001209050919050565b600081516041146114575750600061151b565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561149d576000935050505061151b565b8060ff16601b141580156114b557508060ff16601c14155b156114c6576000935050505061151b565b600186828585604051600081526020016040526040516114e99493929190611f58565b6020604051602081039080840390855afa15801561150b573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061156257805160ff191683800117855561158f565b8280016001018555821561158f579182015b8281111561158f578251825591602001919060010190611574565b5061159b92915061159f565b5090565b6109e291905b8082111561159b57600081556001016115a5565b805161151b816121a4565b60008083601f8401126115d657600080fd5b5081356001600160401b038111156115ed57600080fd5b60208301915083602082028301111561160557600080fd5b9250929050565b600082601f83011261161d57600080fd5b813561163061162b826120a9565b612083565b81815260209384019390925082018360005b8381101561166e57813586016116588882611734565b8452506020928301929190910190600101611642565b5050505092915050565b600082601f83011261168957600080fd5b813561169761162b826120a9565b915081818352602084019350602081019050838560208402820111156116bc57600080fd5b60005b8381101561166e57816116d28882611783565b84525060209283019291909101906001016116bf565b805161151b816121bb565b60008083601f84011261170557600080fd5b5081356001600160401b0381111561171c57600080fd5b60208301915083600182028301111561160557600080fd5b600082601f83011261174557600080fd5b813561175361162b826120c9565b9150808252602083016020830185838301111561176f57600080fd5b61177a83828461214b565b50505092915050565b803561151b816121c4565b6000602082840312156117a057600080fd5b60006117ac84846115b9565b949350505050565b6000806000604084860312156117c957600080fd5b83356001600160401b038111156117df57600080fd5b6117eb868287016115c4565b935093505060206117fe86828701611783565b9150509250925092565b60008060006060848603121561181d57600080fd5b83356001600160401b0381111561183357600080fd5b61183f8682870161160c565b93505060208401356001600160401b0381111561185b57600080fd5b6118678682870161160c565b92505060406117fe86828701611783565b6000806000806080858703121561188e57600080fd5b84356001600160401b038111156118a457600080fd5b6118b08782880161160c565b94505060208501356001600160401b038111156118cc57600080fd5b6118d88782880161160c565b93505060406118e987828801611783565b92505060608501356001600160401b0381111561190557600080fd5b61191187828801611734565b91505092959194509250565b60006020828403121561192f57600080fd5b81356001600160401b0381111561194557600080fd5b6117ac84828501611678565b6000806040838503121561196457600080fd5b82356001600160401b0381111561197a57600080fd5b61198685828601611678565b92505060206109b985828601611783565b6000602082840312156119a957600080fd5b60006117ac84846116e8565b6000806000806000606086880312156119cd57600080fd5b85356001600160401b038111156119e357600080fd5b6119ef888289016116f3565b955095505060208601356001600160401b03811115611a0d57600080fd5b611a19888289016116f3565b93509350506040611a2c88828901611783565b9150509295509295909350565b60008060008060008060006080888a031215611a5457600080fd5b87356001600160401b03811115611a6a57600080fd5b611a768a828b016116f3565b975097505060208801356001600160401b03811115611a9457600080fd5b611aa08a828b016116f3565b95509550506040611ab38a828b01611783565b93505060608801356001600160401b03811115611acf57600080fd5b611adb8a828b016116f3565b925092505092959891949750929550565b60008060408385031215611aff57600080fd5b82356001600160401b03811115611b1557600080fd5b61198685828601611734565b600060208284031215611b3357600080fd5b60006117ac8484611783565b600080600060408486031215611b5457600080fd5b6000611b608686611783565b93505060208401356001600160401b03811115611b7c57600080fd5b611b88868287016116f3565b92509250509250925092565b60008060408385031215611ba757600080fd5b60006119868585611783565b6000611bbf8383611ccb565b9392505050565b611bcf8161212a565b82525050565b611bcf81612108565b611bcf611bea82612108565b612183565b6000611bfa826120f6565b611c0481856120fa565b935083602082028501611c16856120f0565b8060005b85811015611c505784840389528151611c338582611bb3565b9450611c3e836120f0565b60209a909a0199925050600101611c1a565b5091979650505050505050565b611bcf816109e2565b611bcf611c72826109e2565b6109e2565b611bcf81612135565b6000611c8c83856120fa565b9350611c9983858461214b565b611ca283612194565b9093019392505050565b6000611cb88385612103565b9350611cc583858461214b565b50500190565b6000611cd6826120f6565b611ce081856120fa565b9350611cf0818560208601612157565b611ca281612194565b6000611d04826120f6565b611d0e8185612103565b9350611d1e818560208601612157565b9290920192915050565b6000611d35601c83612103565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c0192915050565b6000611d6e6011836120fa565b70494e56414c49445f5349474e415455524560781b815260200192915050565b6000611d9b601d836120fa565b7f5245534f4c5645525f44455441434845445f46524f4d5f444f4d41494e000000815260200192915050565b6000611dd4601f836120fa565b7f53454e4445525f49535f4e4f545f415050524f5645445f4f525f4f574e455200815260200192915050565b6000611e0d6014836120fa565b7329a2a72222a92fa4a9afa727aa2fa6a4a72a22a960611b815260200192915050565b611bcf81612124565b6000611e458286611c66565b602082019150611e558285611bde565b601482019150611e658284611c66565b506020019392505050565b60006117ac828486611cac565b6000611bbf8284611cf9565b6000611e9482611d28565b9150611ea08284611c66565b50602001919050565b6020810161151b8284611bd5565b6020810161151b8284611bc6565b60408101611ed38285611bc6565b611bbf6020830184611c5d565b60408101611ed38285611bd5565b60208082528101611bbf8184611bef565b60408082528101611f108185611bef565b905081810360208301526117ac8184611bef565b60608082528101611f358186611bef565b90508181036020830152611f498185611bef565b90506117ac6040830184611c5d565b60808101611f668287611c5d565b611f736020830186611e30565b611f806040830185611c5d565b611f8d6060830184611c5d565b95945050505050565b60608082528101611fa8818789611c80565b90508181036020830152611fbd818587611c80565b9050611fcc6040830184611c5d565b9695505050505050565b60208082528101611bbf8184611ccb565b60408082528101611ff88185611ccb565b905081810360208301526117ac8184611ccb565b6020808252810161151b81611d61565b6020808252810161151b81611d8e565b6020808252810161151b81611dc7565b6020808252810161151b81611e00565b6020810161151b8284611c5d565b604081016120688285611c5d565b611bbf6020830184611c77565b60408101611ed38285611c5d565b6040518181016001600160401b03811182821017156120a157600080fd5b604052919050565b60006001600160401b038211156120bf57600080fd5b5060209081020190565b60006001600160401b038211156120df57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b600061151b82612118565b151590565b6001600160a01b031690565b60ff1690565b600061151b82612140565b600061151b826109e2565b600061151b82612108565b82818337506000910152565b60005b8381101561217257818101518382015260200161215a565b83811115610aea5750506000910152565b600061151b82600061151b8261219e565b601f01601f191690565b60601b90565b6121ad81612108565b81146121b857600080fd5b50565b6121ad81612113565b6121ad816109e256fea365627a7a723158207a1d8dfd286d14fcafd1812a4c44813691ac746a5a23fa711ac5551c9509654d6c6578706572696d656e74616cf564736f6c634300050c0040","storage":{"0x1":"0xc58206842e4030a3b2cabc78780ae7635173c533","0x5":"0x4a3c194eb88966178bfdd81744dddafed611b830"}},"0xfe84ab89b7fc902ff3cfd756403a8f085b1639aa":{"nonce":93,"balance":"0x35a9d07e076f2c5c63","code":"0x","storage":{}}}} \ No newline at end of file diff --git a/scripts/deploy_SeaportProxyBuyer.ts b/scripts/deploy_SeaportProxyBuyer.ts new file mode 100644 index 00000000..3e16f2e1 --- /dev/null +++ b/scripts/deploy_SeaportProxyBuyer.ts @@ -0,0 +1,32 @@ +import { network } from 'hardhat'; +import { NameService, getNetworkConfig, mergeNetworkConfig } from '../src/config'; +import { Deployer } from '../src/deployer'; +import { unwrap } from '../src/utils'; + +async function main () { + console.log('Network:', network.name); + + const chainId: number = unwrap(network.config, 'chainId'); + if (![137].includes(chainId)) { + throw new Error(`Unsupported network ${chainId}`); + } + + const config = getNetworkConfig(chainId, NameService.UNS); + + if (!config) { + throw new Error(`Config not found for network ${chainId}`); + } + + const deployer = await Deployer.create(); + const deployConfig = await deployer.execute(['seaport_proxy_buyer'], config); + mergeNetworkConfig(deployConfig, NameService.UNS); + + console.log('Deployed!'); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/src/tasks.ts b/src/tasks.ts index 3c97d7b4..452cfefe 100644 --- a/src/tasks.ts +++ b/src/tasks.ts @@ -1,9 +1,17 @@ import { network, upgrades, ethers, defender } from 'hardhat'; -import { Contract, keccak256, namehash, parseEther } from 'ethers'; +import { Contract, keccak256, namehash, parseEther, parseUnits } from 'ethers'; import { merge } from 'lodash'; import { getContractAddress } from '@openzeppelin/hardhat-upgrades/dist/utils'; import { ZERO_ADDRESS, ZERO_WORD } from '../test/helpers/constants'; -import { ENSCustody, MintingManager, ProxyReader, UNSOperator, UNSRegistry, ZilliqaRecover } from '../types'; +import { + ENSCustody, + MintingManager, + ProxyReader, + UNSOperator, + UNSRegistry, + ZilliqaRecover, + SeaportProxyBuyer, +} from '../types'; import { Deployer } from './deployer'; import { ArtifactName, DependenciesMap, EnsContractName, UnsContractName, NsNetworkConfig } from './types'; import verify from './verify'; @@ -1061,6 +1069,100 @@ const fundENSCustodyTask: Task = { }, }; +const deploySeaportTask: Task = { + tags: ['seaport', 'full'], + priority: 10, + run: async (ctx: Deployer) => { + const { owner } = ctx.accounts; + + if (!isSandbox) { + throw new Error('This task is only available for sandbox'); + } + + const conduitController = await ethers.deployContract(ArtifactName.ConduitController, [], owner); + const seaport = await ethers.deployContract(ArtifactName.Seaport, [await conduitController.getAddress()], owner); + await seaport.waitForDeployment(); + await ctx.saveContractConfig(UnsContractName.Seaport, seaport); + }, + ensureDependencies: () => ({}), +}; + +const deployUsdcMockTask: Task = { + tags: ['erc20_mock', 'full'], + priority: 10, + run: async (ctx: Deployer) => { + const { owner } = ctx.accounts; + + if (!isSandbox) { + throw new Error('This task is only available for sandbox'); + } + + const usdcMock = await ethers.deployContract(ArtifactName.ERC20Mock, [], owner); + await usdcMock.waitForDeployment(); + await ctx.saveContractConfig(UnsContractName.ERC20Mock, usdcMock); + }, + ensureDependencies: () => ({}), +}; + +const deploySeaportProxyBuyerTask: Task = { + tags: ['seaport_proxy_buyer', 'full'], + priority: 25, + run: async (ctx: Deployer, dependencies: DependenciesMap) => { + const { owner } = ctx.accounts; + const [Seaport] = unwrapDependencies(dependencies, [UnsContractName.Seaport]); + const seaportProxyBuyer = await deployProxy( + await ethers.getContractFactory(ArtifactName.SeaportProxyBuyer, owner), + [Seaport.address], + ); + await seaportProxyBuyer.waitForDeployment(); + const proxyAdmin = await upgrades.admin.getInstance(); + const seaportProxyBuyerImpl = await proxyAdmin.getProxyImplementation.staticCall( + await seaportProxyBuyer.getAddress(), + ); + await ctx.saveContractConfig( + UnsContractName.SeaportProxyBuyer, + seaportProxyBuyer, + seaportProxyBuyerImpl, + seaportProxyBuyer, + ); + }, + ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { + config = merge(ctx.getDeployConfig(), config); + + return ensureDeployed(config, UnsContractName.Seaport); + }, +}; + +const fundSeaportProxyBuyerTask: Task = { + tags: ['fund_seaport_proxy_buyer', 'full'], + priority: 30, + run: async (ctx: Deployer, dependencies: DependenciesMap) => { + const { owner } = ctx.accounts; + + if (!isSandbox) { + throw new Error('This task is only available for sandbox'); + } + + const [SeaportProxyBuyer, ERC20Mock] = unwrapDependencies(dependencies, [ + UnsContractName.SeaportProxyBuyer, + UnsContractName.ERC20Mock, + ]); + const erc20MockContract = await ethers.getContractAt(UnsContractName.ERC20Mock, ERC20Mock.address, owner); + await erc20MockContract.mint(SeaportProxyBuyer.address, parseUnits('1000000', 6)); // 1M USDC + const seaportProxyBuyerContract = await ethers.getContractAt( + UnsContractName.SeaportProxyBuyer, + SeaportProxyBuyer.address, + owner, + ); + await seaportProxyBuyerContract.approve(ERC20Mock.address); + }, + ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { + config = merge(ctx.getDeployConfig(), config); + + return ensureDeployed(config, UnsContractName.SeaportProxyBuyer, UnsContractName.ERC20Mock); + }, +}; + export const tasks: Task[] = [ deployCNSTask, deployCNSForwardersTask, @@ -1085,4 +1187,8 @@ export const tasks: Task[] = [ proposeENSCustodyTask, fundENSCustodyTask, deployZilliqaRecoverTask, + deploySeaportTask, + deploySeaportProxyBuyerTask, + deployUsdcMockTask, + fundSeaportProxyBuyerTask, ]; diff --git a/src/types.ts b/src/types.ts index 774c7e38..2696129d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -21,6 +21,10 @@ export enum ArtifactName { RootChainManager = 'RootChainManager', DotCoinBurner = 'DotCoinBurner', ZilliqaRecover = 'ZilliqaRecover', + Seaport = 'Seaport', + SeaportProxyBuyer = 'SeaportProxyBuyer', + ConduitController = 'ConduitController', + ERC20Mock = 'ERC20Mock', // ENS ENSRegistry = 'ENSRegistry', @@ -64,6 +68,9 @@ export enum UnsContractName { RootChainManager = 'RootChainManager', DotCoinBurner = 'DotCoinBurner', ZilliqaRecover = 'ZilliqaRecover', + Seaport = 'Seaport', + SeaportProxyBuyer = 'SeaportProxyBuyer', + ERC20Mock = 'ERC20Mock', } export enum EnsContractName { diff --git a/test/helpers/metatx.ts b/test/helpers/metatx.ts index 3427effe..e06b54c6 100644 --- a/test/helpers/metatx.ts +++ b/test/helpers/metatx.ts @@ -1,5 +1,5 @@ import { Contract, BigNumberish, Signer, Interface, solidityPackedKeccak256, keccak256, getBytes } from 'ethers'; -import type { BaseRoutingForwarderMock, MintingManagerForwarder, UNSRegistry } from '../../types'; +import type { BaseRoutingForwarderMock, MintingManagerForwarder, SeaportProxyBuyer, UNSRegistry } from '../../types'; export async function sign ( data: string, @@ -33,7 +33,7 @@ type ISignerWithAddress = Signer & {address: string}; export function buildExecuteFunc ( iface: Interface, toAddress: string, - forwarder: Contract | MintingManagerForwarder | UNSRegistry | BaseRoutingForwarderMock, + forwarder: Contract | MintingManagerForwarder | UNSRegistry | BaseRoutingForwarderMock | SeaportProxyBuyer, ): ExecuteFunc { return async ( selector: string, diff --git a/test/marketplace/SeaportProxyBuyer.test.ts b/test/marketplace/SeaportProxyBuyer.test.ts new file mode 100644 index 00000000..75872e83 --- /dev/null +++ b/test/marketplace/SeaportProxyBuyer.test.ts @@ -0,0 +1,427 @@ +import { ethers } from 'hardhat'; +import { expect } from 'chai'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { Seaport as seaportjs } from '@opensea/seaport-js'; +import { getAdvancedOrderNumeratorDenominator } from '@opensea/seaport-js/lib/utils/fulfill'; +import { ItemType } from '@opensea/seaport-js/lib/constants'; +import { mintRandomDomain } from '../helpers/registry'; +import { UNSRegistry } from '../../types/contracts'; +import { UNSRegistry__factory } from '../../types/factories/contracts'; +import { ERC20Mock__factory } from '../../types/factories/contracts/mocks'; +import { SeaportProxyBuyer__factory } from '../../types/factories/contracts/marketplace'; +import { Seaport__factory as SeaportContract__factory } from '../../types/factories/seaport-core/src'; +import { ConduitController__factory } from '../../types/factories/seaport-core/src/conduit'; +import { SeaportProxyBuyer } from '../../types/contracts/marketplace'; +import { Seaport as SeaportContract } from '../../types/seaport-core/src'; +import { ConduitController } from '../../types/seaport-core/src/conduit'; +import { ERC20Mock } from '../../types/contracts/mocks/ERC20Mock'; +import { TLD, ZERO_ADDRESS } from '../helpers/constants'; +import { deployProxy } from '../../src/helpers'; +import { OrderStruct } from '../../types/seaport-core/src/Seaport'; +import { ExecuteFunc, buildExecuteFunc } from '../helpers/metatx'; + +describe('SeaportProxyBuyer', async () => { + let unsRegistry: UNSRegistry, + seaportProxyBuyer: SeaportProxyBuyer, + seaportContract: SeaportContract, + conduitController: ConduitController, + usdcMock: ERC20Mock, + seaportProxyBuyerFactory: SeaportProxyBuyer__factory; + + let signers: SignerWithAddress[], + coinbase: SignerWithAddress, + seller: SignerWithAddress, + buyer: SignerWithAddress, + reader: SignerWithAddress, + feesRecipient: SignerWithAddress; + + let tokenIdToSell: bigint; + let seaportSdk: seaportjs; + + let proxyBuyerAddress: string; + + before(async () => { + signers = await ethers.getSigners(); + [coinbase, seller, buyer, reader, feesRecipient] = signers; + + unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); + await unsRegistry.initialize(coinbase.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.mintTLD(TLD.CRYPTO, 'crypto'); + await unsRegistry.setTokenURIPrefix('/'); + await unsRegistry.addProxyReader(reader.address); + + conduitController = await new ConduitController__factory(coinbase).deploy(); + seaportContract = await new SeaportContract__factory(coinbase).deploy(await conduitController.getAddress()); + usdcMock = await new ERC20Mock__factory(coinbase).deploy(); + + seaportProxyBuyerFactory = new SeaportProxyBuyer__factory(coinbase); + seaportProxyBuyer = (await deployProxy(seaportProxyBuyerFactory, [ + await seaportContract.getAddress(), + await usdcMock.getAddress(), + ], { initializer: false })) as SeaportProxyBuyer; + await seaportProxyBuyer.initialize( + await seaportContract.getAddress(), + ); + await seaportProxyBuyer.connect(coinbase).approve(await usdcMock.getAddress()); + proxyBuyerAddress = await seaportProxyBuyer.getAddress(); + await seaportProxyBuyer.addMinter(coinbase.address); + seaportSdk = new seaportjs(seller, { + overrides: { + contractAddress: await seaportContract.getAddress(), + }, + }); + }); + + beforeEach(async () => { + await usdcMock.mint(await seaportProxyBuyer.getAddress(), ethers.parseUnits('250000', 6)); + await unsRegistry.connect(seller).setApprovalForAll(await seaportContract.getAddress(), true); + tokenIdToSell = await mintRandomDomain({ unsRegistry, owner: seller.address, tld: 'crypto' }); + }); + + const createOrder = async (priceToSell: bigint, recipientFeesBasisPoints: bigint, zone?: string) => { + const order = await seaportSdk.createOrder({ + zone: zone, + restrictedByZone: true, + offer: [ + { + token: await unsRegistry.getAddress(), + itemType: ItemType.ERC721, + identifier: tokenIdToSell.toString(), + }, + ], + consideration: [ + { + token: await usdcMock.getAddress(), + amount: priceToSell.toString(), + }, + ], + fees: [ + { + recipient: feesRecipient.address, + basisPoints: Number(recipientFeesBasisPoints), + }, + ], + }, seller.address); + const seaportOrderData = await order.executeAllActions(); + const fulfillOrderData: OrderStruct = { + ...seaportOrderData, + parameters: { + ...seaportOrderData.parameters, + consideration: seaportOrderData.parameters.consideration, + totalOriginalConsiderationItems: seaportOrderData.parameters.consideration.length, + }, + }; + const { numerator, denominator } = getAdvancedOrderNumeratorDenominator(seaportOrderData); + + const hash = ethers.toBigInt(seaportSdk.getOrderHash(seaportOrderData.parameters)); + return { fulfillOrderData, numerator, denominator, hash }; + }; + + describe('Regular tranactions', async () => { + it('should execute Seaport order via Proxy', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); // 0.5% + const feesAmount = priceToSell * recipientFeesBasisPoints / BigInt(10000); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + const initialProxyBalance = await usdcMock.balanceOf(proxyBuyerAddress); + const initialSellerBalance = await usdcMock.balanceOf(seller.address); + const initialFeesRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + await (await seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + )).wait(); + + const sellerBalance = await usdcMock.balanceOf(seller.address); + const proxyBalance = await usdcMock.balanceOf(proxyBuyerAddress); + const domainOwner = await unsRegistry.ownerOf(tokenIdToSell); + const feesRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + + expect(sellerBalance).to.be.eq(initialSellerBalance + priceToSell - feesAmount); + expect(feesRecipientBalance).to.be.eq(initialFeesRecipientBalance + feesAmount); + expect(proxyBalance).to.be.eq(initialProxyBalance - priceToSell); + expect(domainOwner).to.be.eq(buyer.address); + }); + + it('should not execute Seaport order from non-minter', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + await expect(seaportProxyBuyer.connect(buyer).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + )).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + }); + + it('should withdraw USDC from Proxy', async () => { + const amountToWithdraw = BigInt(ethers.parseUnits('100', 6)); + const initialProxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + const initialRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + await seaportProxyBuyer.connect(coinbase) + .withdraw(await usdcMock.getAddress(), feesRecipient.address, amountToWithdraw); + + const recipientBalance = await usdcMock.balanceOf(feesRecipient.address); + const proxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + expect(recipientBalance).to.be.eq(initialRecipientBalance + amountToWithdraw); + expect(proxyBalance).to.be.eq(initialProxyBalance - amountToWithdraw); + }); + + it('should not withdraw USDC from Proxy by non-owner', async () => { + const amountToWithdraw = BigInt(ethers.parseUnits('100', 6)); + await expect( + seaportProxyBuyer.connect(buyer) + .withdraw(await usdcMock.getAddress(), feesRecipient.address, amountToWithdraw), + ).to.be.revertedWith('Ownable: caller is not the owner'); + }); + + it('should not execute Seaport order with zero recipient address', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + await expect(seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, ZERO_ADDRESS, + )).to.be.revertedWithCustomError(seaportProxyBuyer, 'RecipientIsZeroAddress'); + }); + + it('should not execute Seaport order if contract is paused', async () => { + await seaportProxyBuyer.connect(coinbase).pause(); + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + await expect(seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + )).to.be.revertedWith('Pausable: paused'); + await seaportProxyBuyer.connect(coinbase).unpause(); + }); + + it('should unpause contract', async () => { + await seaportProxyBuyer.connect(coinbase).pause(); + await seaportProxyBuyer.connect(coinbase).unpause(); + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + await seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + ); + }); + + it('should not pause if paused', async () => { + await seaportProxyBuyer.connect(coinbase).pause(); + await expect(seaportProxyBuyer.connect(coinbase).pause()).to.be.revertedWith('Pausable: paused'); + await seaportProxyBuyer.connect(coinbase).unpause(); + }); + + it('should not unpause if not paused', async () => { + await expect(seaportProxyBuyer.connect(coinbase).unpause()).to.be.revertedWith('Pausable: not paused'); + }); + + it('should not pause by non-owner', async () => { + await expect(seaportProxyBuyer.connect(buyer).pause()).to.be.revertedWith('Ownable: caller is not the owner'); + }); + + it('should not unpause by non-owner', async () => { + await seaportProxyBuyer.connect(coinbase).pause(); + await expect(seaportProxyBuyer.connect(buyer).unpause()).to.be.revertedWith('Ownable: caller is not the owner'); + await seaportProxyBuyer.connect(coinbase).unpause(); + }); + + it('should not process order if zone is not set', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints); + + await expect(seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + )).to.be.revertedWithCustomError(seaportProxyBuyer, 'InvalidZone'); + }); + + it('should not process order if zone is invalid', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator } = + await createOrder(priceToSell, recipientFeesBasisPoints, ZERO_ADDRESS); + + await expect(seaportProxyBuyer.connect(coinbase).fulfillAdvancedOrder( + { ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address, + )).to.be.revertedWithCustomError(seaportProxyBuyer, 'InvalidZone'); + }); + + it('should approve ERC20 spending to Seaport contract', async () => { + const erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); + const initialAllowaneAmount = + await erc20Mock.allowance(proxyBuyerAddress, await seaportContract.getAddress()); + expect(initialAllowaneAmount).to.be.eq(0); + await seaportProxyBuyer.connect(coinbase).approve(await erc20Mock.getAddress()); + const allowanceAmount = + await erc20Mock.allowance(proxyBuyerAddress, await seaportContract.getAddress()); + expect(allowanceAmount).to.be.eq(ethers.MaxUint256); + }); + + it('should not approve ERC20 spending to Seaport contract by non-owner', async () => { + const erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); + await expect(seaportProxyBuyer.connect(buyer).approve(await erc20Mock.getAddress())) + .to.be.revertedWith('Ownable: caller is not the owner'); + }); + }); + + describe('Meta transactions', async () => { + let buildExecuteParams: ExecuteFunc; + + before(async () => { + buildExecuteParams = buildExecuteFunc( + seaportProxyBuyer.interface, + await seaportProxyBuyer.getAddress(), + seaportProxyBuyer, + ); + }); + + it('should execute Seaport order via Proxy', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const feesAmount = priceToSell * recipientFeesBasisPoints / BigInt(10000); + const { fulfillOrderData, numerator, denominator, hash } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + const initialProxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + const initialSellerBalance = await usdcMock.balanceOf(seller.address); + const initialFeesRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + const { req, signature } = await buildExecuteParams( + 'fulfillAdvancedOrder', + [{ ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address], + coinbase, + hash, + ); + await (await seaportProxyBuyer.connect(seller).execute(req, signature)).wait(); + + const sellerBalance = await usdcMock.balanceOf(seller.address); + const proxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + const domainOwner = await unsRegistry.ownerOf(tokenIdToSell); + const feesRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + + expect(sellerBalance).to.be.eq(initialSellerBalance + priceToSell - feesAmount); + expect(feesRecipientBalance).to.be.eq(initialFeesRecipientBalance + feesAmount); + expect(proxyBalance).to.be.eq(initialProxyBalance - priceToSell); + expect(domainOwner).to.be.eq(buyer.address); + }); + + it('should not execute Seaport order from non-minter', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator, hash } = + await createOrder(priceToSell, recipientFeesBasisPoints, proxyBuyerAddress); + + const { req, signature } = await buildExecuteParams( + 'fulfillAdvancedOrder', + [{ ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address], + buyer, + hash, + ); + await expect( + seaportProxyBuyer.connect(coinbase).execute(req, signature), + ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + }); + + it('should withdraw USDC from Proxy', async () => { + const amountToWithdraw = BigInt(ethers.parseUnits('100', 6)); + const initialProxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + const initialRecipientBalance = await usdcMock.balanceOf(feesRecipient.address); + const { req, signature } = await buildExecuteParams( + 'withdraw', + [await usdcMock.getAddress(), feesRecipient.address, amountToWithdraw], + coinbase, + 0, + ); + await seaportProxyBuyer.connect(coinbase).execute(req, signature); + + const recipientBalance = await usdcMock.balanceOf(feesRecipient.address); + const proxyBalance = await usdcMock.balanceOf(await seaportProxyBuyer.getAddress()); + expect(recipientBalance).to.be.eq(initialRecipientBalance + amountToWithdraw); + expect(proxyBalance).to.be.eq(initialProxyBalance - amountToWithdraw); + }); + + it('should not withdraw USDC from Proxy by non-owner', async () => { + const amountToWithdraw = BigInt(ethers.parseUnits('100', 6)); + const { req, signature } = await buildExecuteParams( + 'withdraw', + [await usdcMock.getAddress(), feesRecipient.address, amountToWithdraw], + buyer, + 0, + ); + await expect( + seaportProxyBuyer.connect(coinbase).execute(req, signature), + ).to.be.revertedWith('Ownable: caller is not the owner'); + }); + + it('should not process order if zone is not set', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator, hash } = + await createOrder(priceToSell, recipientFeesBasisPoints); + + const { req, signature } = await buildExecuteParams( + 'fulfillAdvancedOrder', + [{ ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address], + coinbase, + hash, + ); + await expect( + seaportProxyBuyer.connect(coinbase).execute(req, signature), + ).to.be.revertedWithCustomError(seaportProxyBuyer, 'InvalidZone'); + }); + + it('should not process order if zone is invalid', async () => { + const priceToSell = BigInt(ethers.parseUnits('100', 6)); + const recipientFeesBasisPoints = BigInt(50); + const { fulfillOrderData, numerator, denominator, hash } = + await createOrder(priceToSell, recipientFeesBasisPoints, ZERO_ADDRESS); + + const { req, signature } = await buildExecuteParams( + 'fulfillAdvancedOrder', + [{ ...fulfillOrderData, numerator, denominator, extraData: '0x' }, [], ethers.ZeroHash, buyer.address], + coinbase, + hash, + ); + await expect( + seaportProxyBuyer.connect(coinbase).execute(req, signature), + ).to.be.revertedWithCustomError(seaportProxyBuyer, 'InvalidZone'); + }); + + it('should not approve ERC20 spending to Seaport contract by non-owner', async () => { + const erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); + const { req, signature } = await buildExecuteParams( + 'approve', + [await erc20Mock.getAddress()], + buyer, + 0, + ); + await expect( + seaportProxyBuyer.connect(coinbase).execute(req, signature), + ).to.be.revertedWith('Ownable: caller is not the owner'); + }); + + it('should approve ERC20 spending to Seaport contract', async () => { + const erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); + const initialAllowaneAmount = + await erc20Mock.allowance(proxyBuyerAddress, await seaportContract.getAddress()); + expect(initialAllowaneAmount).to.be.eq(0); + const { req, signature } = await buildExecuteParams( + 'approve', + [await erc20Mock.getAddress()], + coinbase, + 0, + ); + await seaportProxyBuyer.connect(coinbase).execute(req, signature); + const allowanceAmount = + await erc20Mock.allowance(proxyBuyerAddress, await seaportContract.getAddress()); + expect(allowanceAmount).to.be.eq(ethers.MaxUint256); + }); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 81306307..2e9267cc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,6 +29,9 @@ "./sandbox/**/*.ts", "./src/*.ts", "./scripts/**/*.ts", - "./test/**/*.ts" - ] + "./test/**/*.ts", + ], + "exclude": [ + "./sandbox/foundry/bin/*", + ], } diff --git a/uns-config.json b/uns-config.json index 3d0b9068..487b6b90 100644 --- a/uns-config.json +++ b/uns-config.json @@ -1,5 +1,5 @@ { - "version": "0.9.2", + "version": "0.9.3", "networks": { "1": { "contracts": { @@ -118,6 +118,20 @@ "address": "0x0000000000000000000000000000000000000000", "legacyAddresses": [], "deploymentBlock": "0x0" + }, + "Seaport": { + "address": "0x0000000000000068F116a894984e2DB1123eB395", + "deploymentBlock": "0x0" + }, + "ERC20Mock": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0" + }, + "SeaportProxyBuyer": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0", + "implementation": "0x0000000000000000000000000000000000000000", + "forwarder": "0x0000000000000000000000000000000000000000" } } }, @@ -232,6 +246,20 @@ "deploymentBlock": "0x032b35a6", "implementation": "0x50752EcBedBb07543C4191E2492e2e888a7D04bD", "forwarder": "0x07B58C81f160257BCb3a2d549ea02D36E3e70461" + }, + "Seaport": { + "address": "0x0000000000000068F116a894984e2DB1123eB395", + "deploymentBlock": "0x0" + }, + "ERC20Mock": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0" + }, + "SeaportProxyBuyer": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0", + "implementation": "0x0000000000000000000000000000000000000000", + "forwarder": "0x0000000000000000000000000000000000000000" } } }, @@ -304,10 +332,10 @@ "forwarder": "0x11dD97b7Ca847DfB6504e61B7B9Eb30F55E554a0" }, "ProxyReader": { - "address": "0x5CC819C9915eADfcEBd76952B8C1BC36CADd7376", - "implementation": "0xBDeFCF6429D0AC68236A6BEb321cBD2Ce66B463C", + "address": "0x0930ffb2c192B0C9A9dd2372Cf7f2845ef39CBb6", + "implementation": "0xbE92182CAB5b84Fd18b34881A0c32771e84f5b8B", "legacyAddresses": [], - "deploymentBlock": "0x1f" + "deploymentBlock": "0x22" }, "TwitterValidationOperator": { "address": "0x0000000000000000000000000000000000000000", @@ -331,16 +359,30 @@ "deploymentBlock": "0x0f" }, "DotCoinBurner": { - "address": "0xEE9A59532B50514d4Cb2440b19E9539b6380CEcf", + "address": "0x4Eb9dE1Fc0d800e941F326d6699E9E11969557ea", "legacyAddresses": [], - "deploymentBlock": "0x2a" + "deploymentBlock": "0x31" }, "ZilliqaRecover": { - "address": "0x70fDaD6FB674d2EbAa36719839aCf496843994A2", - "deploymentBlock": "0x25", - "implementation": "0x56b793E4aD031Dd3EFeF272dc133D212d5fBddc3", + "address": "0x00e39A5004299871aB3b00FeD5A39a715F181d02", + "deploymentBlock": "0x2c", + "implementation": "0xD178b720229c39De617846F84cf9c8D32a63a23D", "legacyAddresses": [], - "forwarder": "0x70fDaD6FB674d2EbAa36719839aCf496843994A2" + "forwarder": "0x00e39A5004299871aB3b00FeD5A39a715F181d02" + }, + "Seaport": { + "address": "0x5CC819C9915eADfcEBd76952B8C1BC36CADd7376", + "deploymentBlock": "0x1f" + }, + "ERC20Mock": { + "address": "0xDa9E1b3e395bFb0A45F03C7F615146B9d896c959", + "deploymentBlock": "0x20" + }, + "SeaportProxyBuyer": { + "address": "0x24F45688D421f46cca60734BdC648ad192dB0f2E", + "deploymentBlock": "0x28", + "implementation": "0x54563a9e1cD2dCBD0BCA90D3CFA4A647e02C404a", + "forwarder": "0x24F45688D421f46cca60734BdC648ad192dB0f2E" } } }, @@ -450,6 +492,20 @@ "deploymentBlock": "0x540d6a", "implementation": "0xBf101Ad6226024D1d26180136311d77387353c71", "forwarder": "0x002380ccAFf852dEF50a176873d50f8019e36FBc" + }, + "Seaport": { + "address": "0x0000000000000068F116a894984e2DB1123eB395", + "deploymentBlock": "0x0" + }, + "ERC20Mock": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0" + }, + "SeaportProxyBuyer": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0", + "implementation": "0x0000000000000000000000000000000000000000", + "forwarder": "0x0000000000000000000000000000000000000000" } } }, @@ -564,6 +620,20 @@ "address": "0x0000000000000000000000000000000000000000", "legacyAddresses": [], "deploymentBlock": "0x0" + }, + "Seaport": { + "address": "0x0000000000000068F116a894984e2DB1123eB395", + "deploymentBlock": "0x0" + }, + "ERC20Mock": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0" + }, + "SeaportProxyBuyer": { + "address": "0x0000000000000000000000000000000000000000", + "deploymentBlock": "0x0", + "implementation": "0x0000000000000000000000000000000000000000", + "forwarder": "0x0000000000000000000000000000000000000000" } } } diff --git a/yarn.lock b/yarn.lock index a77746d3..a69505ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1214,6 +1214,16 @@ __metadata: languageName: node linkType: hard +"@opensea/seaport-js@npm:^4.0.0": + version: 4.0.0 + resolution: "@opensea/seaport-js@npm:4.0.0" + dependencies: + ethers: ^6.9.0 + merkletreejs: ^0.3.11 + checksum: dcc921db35818da0111c7884e7aeb26a3b2e1909ad9395fd467ae429dbdca319e4673115d91c378fc7b6bf422c80fb0f56477813c7c45c3f0d66e7dfbc0ad02b + languageName: node + linkType: hard + "@openzeppelin/contracts-2.3@npm:@openzeppelin/contracts@2.3.0": version: 2.3.0 resolution: "@openzeppelin/contracts@npm:2.3.0" @@ -1569,32 +1579,6 @@ __metadata: languageName: node linkType: hard -"@trufflesuite/bigint-buffer@npm:1.1.10": - version: 1.1.10 - resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" - dependencies: - node-gyp: latest - node-gyp-build: 4.4.0 - checksum: e1dc5e4fbf348a55e660c0055267021eb04cbbdb7f6b0ee983ad32cd4aae1200be448a2ca3963c7d19c7c936d42f66c1ff8b5e4e2332cb1a9e3f870ff818dce4 - languageName: node - linkType: hard - -"@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0": - version: 20.30.0-unofficial.0 - resolution: "@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0" - dependencies: - bufferutil: 4.0.7 - utf-8-validate: 6.0.3 - ws: 8.13.0 - dependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 67e67140877f89b31c504a057d26853d5780b09c733d92c32480d2f0dfe4e98fb822860f3efeb06f379daecee70d67185f88a7b6f3406d18526e501b36c40fd3 - languageName: node - linkType: hard - "@tsconfig/node10@npm:^1.0.7": version: 1.0.9 resolution: "@tsconfig/node10@npm:1.0.9" @@ -1832,7 +1816,7 @@ __metadata: languageName: node linkType: hard -"@types/lru-cache@npm:5.1.1, @types/lru-cache@npm:^5.1.0": +"@types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" checksum: e1d6c0085f61b16ec5b3073ec76ad1be4844ea036561c3f145fc19f71f084b58a6eb600b14128aa95809d057d28f1d147c910186ae51219f58366ffd2ff2e118 @@ -1932,13 +1916,6 @@ __metadata: languageName: node linkType: hard -"@types/seedrandom@npm:3.0.1": - version: 3.0.1 - resolution: "@types/seedrandom@npm:3.0.1" - checksum: d9755452f224a4f5072a1d8738da6c9de3039fc59a2a449b1f658e51087be7b48ada49bcabc8b0f16633c095f55598c32fcd072c448858422a2f6a0566569e4c - languageName: node - linkType: hard - "@types/semver@npm:^7.3.12": version: 7.3.13 resolution: "@types/semver@npm:7.3.13" @@ -2176,35 +2153,6 @@ __metadata: languageName: node linkType: hard -"abstract-level@npm:1.0.3": - version: 1.0.3 - resolution: "abstract-level@npm:1.0.3" - dependencies: - buffer: ^6.0.3 - catering: ^2.1.0 - is-buffer: ^2.0.5 - level-supports: ^4.0.0 - level-transcoder: ^1.0.1 - module-error: ^1.0.1 - queue-microtask: ^1.2.3 - checksum: 70d61a3924526ebc257b138992052f9ff571a6cee5a7660836e37a1cc7081273c3acf465dd2f5e1897b38dc743a6fd9dba14a5d8a2a9d39e5787cd3da99f301d - languageName: node - linkType: hard - -"abstract-leveldown@npm:7.2.0, abstract-leveldown@npm:^7.2.0": - version: 7.2.0 - resolution: "abstract-leveldown@npm:7.2.0" - dependencies: - buffer: ^6.0.3 - catering: ^2.0.0 - is-buffer: ^2.0.5 - level-concat-iterator: ^3.0.0 - level-supports: ^2.0.1 - queue-microtask: ^1.2.3 - checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 - languageName: node - linkType: hard - "abstract-leveldown@npm:^6.2.1": version: 6.3.0 resolution: "abstract-leveldown@npm:6.3.0" @@ -2721,15 +2669,6 @@ __metadata: languageName: node linkType: hard -"async-eventemitter@npm:0.2.4": - version: 0.2.4 - resolution: "async-eventemitter@npm:0.2.4" - dependencies: - async: ^2.4.0 - checksum: b9e77e0f58ebd7188c50c23d613d1263e0ab501f5e677e02b57cc97d7032beaf60aafa189887e7105569c791e212df4af00b608be1e9a4c425911d577124911e - languageName: node - linkType: hard - "async-limiter@npm:~1.0.0": version: 1.0.1 resolution: "async-limiter@npm:1.0.1" @@ -2753,7 +2692,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.0.1, async@npm:^2.4.0": +"async@npm:^2.0.1": version: 2.6.3 resolution: "async@npm:2.6.3" dependencies: @@ -2891,6 +2830,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^9.0.1": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -3128,6 +3074,13 @@ __metadata: languageName: node linkType: hard +"buffer-reverse@npm:^1.0.1": + version: 1.0.1 + resolution: "buffer-reverse@npm:1.0.1" + checksum: e350872a89b17af0a7e1bd7a73239a535164f3f010b0800add44f2e52bd0511548dc5b96c20309effba969868c385023d2d02a0add6155f6a76da7b3073b77bd + languageName: node + linkType: hard + "buffer-to-arraybuffer@npm:^0.0.5": version: 0.0.5 resolution: "buffer-to-arraybuffer@npm:0.0.5" @@ -3173,7 +3126,7 @@ __metadata: languageName: node linkType: hard -"bufferutil@npm:4.0.5, bufferutil@npm:^4.0.1": +"bufferutil@npm:^4.0.1": version: 4.0.5 resolution: "bufferutil@npm:4.0.5" dependencies: @@ -3183,16 +3136,6 @@ __metadata: languageName: node linkType: hard -"bufferutil@npm:4.0.7": - version: 4.0.7 - resolution: "bufferutil@npm:4.0.7" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: f75aa87e3d1b99b87a95f60a855e63f70af07b57fb8443e75a2ddfef2e47788d130fdd46e3a78fd7e0c10176082b26dfbed970c5b8632e1cc299cafa0e93ce45 - languageName: node - linkType: hard - "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -3324,13 +3267,6 @@ __metadata: languageName: node linkType: hard -"catering@npm:^2.0.0, catering@npm:^2.1.0": - version: 2.1.1 - resolution: "catering@npm:2.1.1" - checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 - languageName: node - linkType: hard - "cbor@npm:^8.1.0": version: 8.1.0 resolution: "cbor@npm:8.1.0" @@ -3969,6 +3905,13 @@ __metadata: languageName: node linkType: hard +"crypto-js@npm:^4.2.0": + version: 4.2.0 + resolution: "crypto-js@npm:4.2.0" + checksum: f051666dbc077c8324777f44fbd3aaea2986f198fe85092535130d17026c7c2ccf2d23ee5b29b36f7a4a07312db2fae23c9094b644cc35f7858b1b4fcaf27774 + languageName: node + linkType: hard + "csv-parse@npm:^5.4.0": version: 5.4.0 resolution: "csv-parse@npm:5.4.0" @@ -4395,13 +4338,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:0.10.0": - version: 0.10.0 - resolution: "emittery@npm:0.10.0" - checksum: 2616a802df51e3f412b9b33f1b43161f7bc96037142cada6ecdbf35ddef1368e30d4f8e47fddc10b0753ccf91d3483b20ebca535b4b1e47526440e13150e2bc7 - languageName: node - linkType: hard - "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -5339,9 +5275,9 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^6.1.0": - version: 6.12.0 - resolution: "ethers@npm:6.12.0" +"ethers@npm:^6.11.1, ethers@npm:^6.9.0": + version: 6.12.1 + resolution: "ethers@npm:6.12.1" dependencies: "@adraffy/ens-normalize": 1.10.1 "@noble/curves": 1.2.0 @@ -5350,7 +5286,7 @@ __metadata: aes-js: 4.0.0-beta.5 tslib: 2.4.0 ws: 8.5.0 - checksum: a9fa6937f57be00f217cac045752113f0be6ecbef77b90d653202f4127930023e86d20f06631cc4114bdbcf28fcb7dcb5244a88e2e430df1dfcb623e93c23366 + checksum: ddf398c91f584b9e643740ec17a9c82b4a1c4ea3fb6efd00f1a043b89d1ec6f9427aa80894f75850ee805722e91b8d054bce18579a2c621226302c096774df90 languageName: node linkType: hard @@ -5962,36 +5898,6 @@ __metadata: languageName: node linkType: hard -"ganache@npm:^7.9.1": - version: 7.9.1 - resolution: "ganache@npm:7.9.1" - dependencies: - "@trufflesuite/bigint-buffer": 1.1.10 - "@trufflesuite/uws-js-unofficial": 20.30.0-unofficial.0 - "@types/bn.js": ^5.1.0 - "@types/lru-cache": 5.1.1 - "@types/seedrandom": 3.0.1 - abstract-level: 1.0.3 - abstract-leveldown: 7.2.0 - async-eventemitter: 0.2.4 - bufferutil: 4.0.5 - emittery: 0.10.0 - keccak: 3.0.2 - leveldown: 6.1.0 - secp256k1: 4.0.3 - utf-8-validate: 5.0.7 - dependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - bin: - ganache: dist/node/cli.js - ganache-cli: dist/node/cli.js - checksum: 5807ef87ce7f82122790075001f6621af69e4a6b0a6a52be40b7cfae97a331b2dca7cfa0f6ebe0f3162cf5e88e393cd4dcb3aefeea7e3131285d9689e52e03ab - languageName: node - linkType: hard - "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -7084,7 +6990,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.5, is-buffer@npm:~2.0.3": +"is-buffer@npm:~2.0.3": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 @@ -7656,7 +7562,7 @@ __metadata: languageName: node linkType: hard -"keccak@npm:3.0.2, keccak@npm:^3.0.0, keccak@npm:^3.0.2": +"keccak@npm:^3.0.0, keccak@npm:^3.0.2": version: 3.0.2 resolution: "keccak@npm:3.0.2" dependencies: @@ -7712,15 +7618,6 @@ __metadata: languageName: node linkType: hard -"level-concat-iterator@npm:^3.0.0": - version: 3.1.0 - resolution: "level-concat-iterator@npm:3.1.0" - dependencies: - catering: ^2.1.0 - checksum: a15bc4c5fbbb30c1efa7fad06b72feaac84d90990b356b461593c198a833336f31f6daff8f40c3908fabd14cfd8856d1c5ecae9e1cb0575037b65fa607e760e9 - languageName: node - linkType: hard - "level-concat-iterator@npm:~2.0.0": version: 2.0.1 resolution: "level-concat-iterator@npm:2.0.1" @@ -7798,20 +7695,6 @@ __metadata: languageName: node linkType: hard -"level-supports@npm:^2.0.1": - version: 2.1.0 - resolution: "level-supports@npm:2.1.0" - checksum: f7b16aea7ddd13326ee4fbc2c1099bcaf8a74dc95346af9ebedea4e02518c6f7a438e829b79b7890d67489b59f615a9428369a0a065021797aa7cb6b6bd84d75 - languageName: node - linkType: hard - -"level-supports@npm:^4.0.0": - version: 4.0.1 - resolution: "level-supports@npm:4.0.1" - checksum: d4552b42bb8cdeada07b0f6356c7a90fefe76279147331f291aceae26e3e56d5f927b09ce921647c0230bfe03ddfbdcef332be921e5c2194421ae2bfa3cf6368 - languageName: node - linkType: hard - "level-supports@npm:~1.0.0": version: 1.0.1 resolution: "level-supports@npm:1.0.1" @@ -7821,16 +7704,6 @@ __metadata: languageName: node linkType: hard -"level-transcoder@npm:^1.0.1": - version: 1.0.1 - resolution: "level-transcoder@npm:1.0.1" - dependencies: - buffer: ^6.0.3 - module-error: ^1.0.1 - checksum: 304f08d802faf3491a533b6d87ad8be3cabfd27f2713bbe9d4c633bf50fcb9460eab5a6776bf015e101ead7ba1c1853e05e7f341112f17a9d0cb37ee5a421a25 - languageName: node - linkType: hard - "level-ws@npm:0.0.0": version: 0.0.0 resolution: "level-ws@npm:0.0.0" @@ -7852,18 +7725,6 @@ __metadata: languageName: node linkType: hard -"leveldown@npm:6.1.0": - version: 6.1.0 - resolution: "leveldown@npm:6.1.0" - dependencies: - abstract-leveldown: ^7.2.0 - napi-macros: ~2.0.0 - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: e984b61e9fbe057cfd5c81ac0afe5d7e35d695ff130a95991e0ecb66390e4c4ff6aa3980a65b6c53edaba80527a47790bb26e3cfbd52a054957b3546d9941fe4 - languageName: node - linkType: hard - "levelup@npm:^1.2.1": version: 1.3.9 resolution: "levelup@npm:1.3.9" @@ -8227,6 +8088,19 @@ __metadata: languageName: node linkType: hard +"merkletreejs@npm:^0.3.11": + version: 0.3.11 + resolution: "merkletreejs@npm:0.3.11" + dependencies: + bignumber.js: ^9.0.1 + buffer-reverse: ^1.0.1 + crypto-js: ^4.2.0 + treeify: ^1.1.0 + web3-utils: ^1.3.4 + checksum: 93edb8ec66aa6c9f59aa0902e675590e3791692893bb3e8c1018f758367ded1bf7d6b1057ccde3729b283ca946a316838a631a922960b76889b3be528c43ef4e + languageName: node + linkType: hard + "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -8607,13 +8481,6 @@ __metadata: languageName: node linkType: hard -"module-error@npm:^1.0.1": - version: 1.0.2 - resolution: "module-error@npm:1.0.2" - checksum: 5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -8722,13 +8589,6 @@ __metadata: languageName: node linkType: hard -"napi-macros@npm:~2.0.0": - version: 2.0.0 - resolution: "napi-macros@npm:2.0.0" - checksum: 30384819386977c1f82034757014163fa60ab3c5a538094f778d38788bebb52534966279956f796a92ea771c7f8ae072b975df65de910d051ffbdc927f62320c - languageName: node - linkType: hard - "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -8813,17 +8673,6 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:4.4.0": - version: 4.4.0 - resolution: "node-gyp-build@npm:4.4.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 972a059f960253d254e0b23ce10f54c8982236fc0edcab85166d0b7f87443b2ce98391c877cfb2f6eeafcf03c538c5f4dd3e0bfff03828eb48634f58f4c64343 - languageName: node - linkType: hard - "node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": version: 4.5.0 resolution: "node-gyp-build@npm:4.5.0" @@ -9613,7 +9462,7 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": +"queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 @@ -10172,7 +10021,30 @@ __metadata: languageName: node linkType: hard -"secp256k1@npm:4.0.3, secp256k1@npm:^4.0.0, secp256k1@npm:^4.0.1": +"seaport-core@npm:1.6.4": + version: 1.6.4 + resolution: "seaport-core@npm:1.6.4" + dependencies: + seaport-types: 1.6.2 + checksum: cb505249c6b771532cc175cdac7db0b05014c56d1274cf12396c5c0734483e230b18caed52156536b9d2d17da094e60826a4b75f499dba5f4579399531e45039 + languageName: node + linkType: hard + +"seaport-types@npm:1.6.2": + version: 1.6.2 + resolution: "seaport-types@npm:1.6.2" + checksum: 9fb3546a9a6af324cd509380aa68abc255a1199a401c066c143136b5c09d1df0ae49bd1844828414e7482d7b8fd13abd7f144fa22b44be8309fe8ead9fc98715 + languageName: node + linkType: hard + +"seaport-types@npm:1.6.3": + version: 1.6.3 + resolution: "seaport-types@npm:1.6.3" + checksum: 456407167efca1c01b977da4738689816e85e6a6e7bf8e6c10d1991df04a2801fa4cc389260cc675992451cc9a28f37dc5ed2b1ab794a9842142b9ee72cbf059 + languageName: node + linkType: hard + +"secp256k1@npm:^4.0.0, secp256k1@npm:^4.0.1": version: 4.0.3 resolution: "secp256k1@npm:4.0.3" dependencies: @@ -11167,6 +11039,13 @@ __metadata: languageName: node linkType: hard +"treeify@npm:^1.1.0": + version: 1.1.0 + resolution: "treeify@npm:1.1.0" + checksum: aa00dded220c1dd052573bd6fc2c52862f09870851a284f0d3650d72bf913ba9b4f6b824f4f1ab81899bae29375f4266b07fe47cbf82343a1efa13cc09ce87af + languageName: node + linkType: hard + "ts-command-line-args@npm:^2.2.0": version: 2.3.1 resolution: "ts-command-line-args@npm:2.3.1" @@ -11632,6 +11511,7 @@ __metadata: "@nomicfoundation/hardhat-ethers": ^3.0.0 "@nomicfoundation/hardhat-verify": ^1.1.0 "@nomiclabs/hardhat-solhint": ^3.0.1 + "@opensea/seaport-js": ^4.0.0 "@openzeppelin/contracts-upgradeable": ^4.7.3 "@openzeppelin/hardhat-upgrades": ^2.0.0 "@openzeppelin/upgrades-core": ^1.32.5 @@ -11665,8 +11545,7 @@ __metadata: ethereumjs-common: ^1.5.2 ethereumjs-tx: ^1.3.7 ethereumjs-util: ^7.1.0 - ethers: ^6.1.0 - ganache: ^7.9.1 + ethers: ^6.11.1 hardhat: ~2.20.0 hardhat-abi-exporter: ^2.2.1 hardhat-contract-sizer: ~2.6.0 @@ -11679,6 +11558,8 @@ __metadata: mocha: ^10.0.0 prettier: ^2.3.0 prettier-plugin-solidity: ^1.3.1 + seaport-core: 1.6.4 + seaport-types: 1.6.3 solhint: ^3.3.7 solidity-coverage: ^0.8.4 tar: ^6.1.9 @@ -11723,7 +11604,7 @@ __metadata: languageName: node linkType: hard -"utf-8-validate@npm:5.0.7, utf-8-validate@npm:^5.0.2": +"utf-8-validate@npm:^5.0.2": version: 5.0.7 resolution: "utf-8-validate@npm:5.0.7" dependencies: @@ -11733,16 +11614,6 @@ __metadata: languageName: node linkType: hard -"utf-8-validate@npm:6.0.3": - version: 6.0.3 - resolution: "utf-8-validate@npm:6.0.3" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 5e21383c81ff7469c1912119ca69d07202d944c73ddd8a54b84dddcc546b939054e5101c78c294e494d206fe93bd43428adc635a0660816b3ec9c8ec89286ac4 - languageName: node - linkType: hard - "utf8@npm:3.0.0": version: 3.0.0 resolution: "utf8@npm:3.0.0" @@ -12114,6 +11985,22 @@ __metadata: languageName: node linkType: hard +"web3-utils@npm:^1.3.4": + version: 1.10.4 + resolution: "web3-utils@npm:1.10.4" + dependencies: + "@ethereumjs/util": ^8.1.0 + bn.js: ^5.2.1 + ethereum-bloom-filters: ^1.0.6 + ethereum-cryptography: ^2.1.2 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: ^2.1.0 + utf8: 3.0.0 + checksum: a1535817a4653f1b5cc868aa19305158122379078a41e13642e1ba64803f6f8e5dd2fb8c45c033612b8f52dde42d8008afce85296c0608276fe1513dece66a49 + languageName: node + linkType: hard + "web3-utils@npm:^1.3.6": version: 1.10.2 resolution: "web3-utils@npm:1.10.2"