[ { "inputs": [ { "internalType": "address[]", "name": "moeBase", "type": "address[]" }, { "internalType": "uint256", "name": "deadlineIn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "Init", "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": 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": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MOE_SEAL_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MOE_SEAL_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SHARE_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SHARE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "amountOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "interval", "type": "uint256" } ], "name": "blockHashOf", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentInterval", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "fees", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "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": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getShare", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "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": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "hashOf", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "oldAmount", "type": "uint256" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "oldAmount", "type": "uint256" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrateFrom", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "migrated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "oldAmount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "newUnits", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "base", "type": "address" } ], "name": "oldIndexOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newAmount", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "oldUnits", "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": "prefix", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "blockHash", "type": "bytes32" } ], "name": "recent", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "uint256", "name": "index", "type": "uint256" } ], "name": "seal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sealAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "seals", "outputs": [ { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "array", "type": "uint256[]" } ], "name": "setShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "shareOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "shareTargetOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "shares", "outputs": [ { "internalType": "uint256", "name": "stamp", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "area", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "nonceHash", "type": "bytes32" } ], "name": "unique", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "nonceHash", "type": "bytes32" } ], "name": "zerosOf", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003c4d38038062003c4d833981016040819052620000349162000654565b6040518060400160405280600481526020016327a224a760e11b81525082828181604051806040016040528060068152602001652c2837bbb2b960d11b815250858160039081620000869190620007bc565b506004620000958282620007bc565b50620000a79150600090503362000307565b620000b381426200089e565b60095581516001600160401b03811115620000d257620000d262000621565b604051908082528060200260200182016040528015620000fc578160200160208202803683370190505b5080516200011391600791602090910190620004fe565b5081516001600160401b0381111562000130576200013062000621565b6040519080825280602002602001820160405280156200015a578160200160208202803683370190505b5080516200017191600a9160209091019062000568565b5060005b82518110156200023c57828181518110620001945762000194620008b4565b602002602001015160078281548110620001b257620001b2620008b4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060086000858481518110620001fa57620001fa620008b4565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806200023390620008ca565b91505062000175565b505050620002807faa06a9d3e3ec1501dfa4c06793f24ccddc527fa3089263f11fd78652bb9bafdb60008051602062003c0d8339815191526200034a60201b60201c565b6200029b60008051602062003c0d8339815191523362000307565b620002d67f3efceb6119340bd5a1c0a6530e52c792633ea9aaf37bc59a87c63d7af29fbbc960008051602062003c2d8339815191526200034a565b620002f160008051602062003c2d8339815191523362000307565b620002fc3362000395565b5050505050620008e6565b6200031e8282620003e760201b620015d11760201c565b600082815260066020908152604090912062000345918390620016576200048c821b17901c565b505050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620004885760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004473390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620004a3836001600160a01b038416620004ac565b90505b92915050565b6000818152600183016020526040812054620004f557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004a6565b506000620004a6565b82805482825590600052602060002090810192821562000556579160200282015b828111156200055657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200051f565b50620005649291506200060a565b5090565b82805482825590600052602060002090601f01602090048101928215620005565791602002820160005b83821115620005d157835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000592565b8015620006005782816101000a81549060ff0219169055600101602081600001049283019260010302620005d1565b5050620005649291505b5b808211156200056457600081556001016200060b565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200064f57600080fd5b919050565b600080604083850312156200066857600080fd5b82516001600160401b03808211156200068057600080fd5b818501915085601f8301126200069557600080fd5b8151602082821115620006ac57620006ac62000621565b8160051b604051601f19603f83011681018181108682111715620006d457620006d462000621565b604052928352818301935084810182019289841115620006f357600080fd5b948201945b838610156200071c576200070c8662000637565b85529482019493820193620006f8565b97909101519698969750505050505050565b600181811c908216806200074357607f821691505b6020821081036200076457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034557600081815260208120601f850160051c81016020861015620007935750805b601f850160051c820191505b81811015620007b4578281556001016200079f565b505050505050565b81516001600160401b03811115620007d857620007d862000621565b620007f081620007e984546200072e565b846200076a565b602080601f8311600181146200082857600084156200080f5750858301515b600019600386901b1c1916600185901b178555620007b4565b600085815260208120601f198616915b82811015620008595788860151825594840194600190910190840162000838565b5085821015620008785787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004a657620004a662000888565b634e487b7160e01b600052603260045260246000fd5b600060018201620008df57620008df62000888565b5060010190565b61331780620008f66000396000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c806375298734116101b8578063a57636b811610104578063dd62ed3e116100a2578063e8eb22841161007c578063e8eb22841461076f578063f2fde38b14610782578063f544c35e14610795578063fad1919a146107be57600080fd5b8063dd62ed3e14610741578063e0fc957914610754578063e1c7392a1461076757600080fd5b8063bb140470116100de578063bb140470146106e1578063c89dcfce14610708578063ca15c8731461071b578063d547741f1461072e57600080fd5b8063a57636b814610697578063a9059cbb146106aa578063a98d03b2146106bd57600080fd5b80638da5cb5b1161017157806395d89b411161014b57806395d89b411461066c5780639af1d35a14610674578063a217fddf1461067c578063a457c2d71461068457600080fd5b80638da5cb5b146106215780639010d07c1461064657806391d148541461065957600080fd5b806375298734146105b957806375dadb32146105ce5780637766912d146105d557806379cc6790146105e85780637d91043f146105fb57806386fe212d1461060e57600080fd5b806326d71d881161029257806339444ffe1161023057806357a858fc1161020a57806357a858fc146105475780636c9efc911461057557806370a0823114610588578063715018a6146105b157600080fd5b806339444ffe1461050e578063395093511461052157806342966c681461053457600080fd5b8063313ce5671161026c578063313ce567146104cb578063320974b2146104e0578063363487bc146104f357806336568abe146104fb57600080fd5b806326d71d88146104895780632c678c64146104b05780632f2ff15d146104b857600080fd5b80630c7fa13e116102ff57806321a60635116102d957806321a606351461042d57806323b872dd14610440578063248a9ca31461045357806326ca291b1461047657600080fd5b80630c7fa13e146103f457806318160ddd146103fe578063195e2ae41461040657600080fd5b806301ffc9a71461034757806306fdde031461036f578063080e13011461038457806308560eca146103a5578063095ea7b3146103ba5780630a99e88a146103cd575b600080fd5b61035a610355366004612c10565b6107de565b60405190151581526020015b60405180910390f35b6103776107ef565b6040516103669190612c5e565b610397610392366004612d42565b610881565b604051908152602001610366565b6103ad610895565b6040516103669190612d89565b61035a6103c8366004612deb565b61090c565b6103977faa06a9d3e3ec1501dfa4c06793f24ccddc527fa3089263f11fd78652bb9bafdb81565b6103fc610924565b005b600254610397565b6103977f3efceb6119340bd5a1c0a6530e52c792633ea9aaf37bc59a87c63d7af29fbbc981565b61035a61043b366004612e15565b610959565b61035a61044e366004612e2e565b61097c565b610397610461366004612e15565b60009081526005602052604090206001015490565b610397610484366004612e15565b6109a0565b6103977f6ff92aee9c9f4e39dc206872db9efdc37eacf3ea4e04ae77b7e68d993e2081fb81565b600b54610397565b6103fc6104c6366004612e6a565b6109fe565b60125b60405160ff9091168152602001610366565b6103976104ee366004612e15565b610a28565b610397610a3b565b6103fc610509366004612e6a565b610a58565b61039761051c366004612e96565b610adb565b61035a61052f366004612deb565b610cc0565b6103fc610542366004612e15565b610ce2565b61055a610555366004612e15565b610cec565b60408051938452602084019290925290820152606001610366565b610397610583366004612e96565b610d1f565b610397610596366004612eb8565b6001600160a01b031660009081526020819052604090205490565b6103fc610ec3565b6105c1610ed7565b6040516103669190612ed3565b6003610397565b6103976105e3366004612f0b565b610fa0565b6103fc6105f6366004612deb565b610fdc565b6104ce610609366004612e15565b610ff1565b6103fc61061c366004612e15565b611018565b600e546001600160a01b03165b6040516001600160a01b039091168152602001610366565b61062e610654366004612e96565b61104b565b61035a610667366004612e6a565b611063565b61037761108e565b6105c161109d565b610397600081565b61035a610692366004612deb565b6110b7565b6103fc6106a5366004612f62565b611132565b61035a6106b8366004612deb565b6111d9565b61035a6106cb366004612e15565b6000908152600f602052604090205460ff161590565b6103977f7df1fa30796d39d0e882422146943ee011c6f6b410f211570cc3a712e3e51e6a81565b6103fc610716366004612f97565b6111e7565b610397610729366004612e15565b61135f565b6103fc61073c366004612e6a565b611376565b61039761074f366004612fca565b61139b565b610397610762366004612f97565b6113c6565b6103fc611420565b61039761077d366004612e15565b61152c565b6103fc610790366004612eb8565b61155b565b6103976107a3366004612eb8565b6001600160a01b031660009081526008602052604090205490565b6103976107cc366004612e15565b60009081526011602052604090205490565b60006107e98261166c565b92915050565b6060600380546107fe90612ff4565b80601f016020809104026020016040519081016040528092919081815260200182805461082a90612ff4565b80156108775780601f1061084c57610100808354040283529160200191610877565b820191906000526020600020905b81548152906001019060200180831161085a57829003601f168201915b5050505050905090565b600061088e338484610fa0565b9392505050565b6060600a80548060200260200160405190810160405280929190818152602001828054801561087757602002820191906000526020600020906000905b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116108d25790505050505050905090565b60003361091a818585611677565b5060019392505050565b7faa06a9d3e3ec1501dfa4c06793f24ccddc527fa3089263f11fd78652bb9bafdb61094e8161179b565b6109566117a5565b50565b6000610963610a3b565b6000928352601060205260409092205491909111919050565b60003361098a8582856117cd565b610995858585611841565b506001949350505050565b60125460009081036109b5576107e982610a28565b4260006109c56104ee600161152c565b905060006109d5601284846119e5565b90506109e1600161152c565b6109eb8683613044565b6109f59190613071565b95945050505050565b600082815260056020526040902060010154610a198161179b565b610a238383611a38565b505050565b60006107e982610a36610ed7565b611a5a565b6000610a49610e1042613085565b610a539042613099565b905090565b6001600160a01b0381163314610acd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610ad78282611a75565b5050565b600060078281548110610af057610af06130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906130c2565b60ff16601210610c1a5760078281548110610b7f57610b7f6130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf191906130c2565b60125b610bfe91906130e5565b610c0990600a6131e2565b610c139084613071565b90506107e9565b601260078381548110610c2f57610c2f6130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca191906130c2565b610cab91906130e5565b610cb690600a6131e2565b610c139084613044565b60003361091a818585610cd3838361139b565b610cdd91906131f1565b611677565b6109563382611a97565b60128181548110610cfc57600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b600060078281548110610d3457610d346130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da691906130c2565b60ff16601210610e3c5760078281548110610dc357610dc36130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3591906130c2565b6012610ca1565b601260078381548110610e5157610e516130ac565b600091825260209182902001546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf491906130c2565b610ecb611bc9565b610ed56000611c23565b565b60135460609015610f3757601380548060200260200160405190810160405280929190818152602001828054801561087757602002820191906000526020600020905b815481526020019060010190808311610f1a575050505050905090565b60408051600480825260a0820190925260009160208201608080368337019050509050600181600381518110610f6f57610f6f6130ac565b602002602001018181525050600281600281518110610f9057610f906130ac565b6020908102919091010152919050565b600080610fc8858585600081518110610fbb57610fbb6130ac565b6020026020010151611c75565b9050610fd48582611e27565b949350505050565b610fe78233836117cd565b610ad78282611a97565b6000811561101057600261100483611ee6565b6107e9911c603f613099565b506040919050565b7faa06a9d3e3ec1501dfa4c06793f24ccddc527fa3089263f11fd78652bb9bafdb6110428161179b565b610ad782611f7a565b600082815260066020526040812061088e9083611fbb565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546107fe90612ff4565b6060610a5366360bed98e0c2e1662386f26fc10000611fc7565b600033816110c5828661139b565b9050838110156111255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ac4565b6109958286868403611677565b7f3efceb6119340bd5a1c0a6530e52c792633ea9aaf37bc59a87c63d7af29fbbc961115c8161179b565b61116582612084565b600061117a611174600161152c565b84611a5a565b9050600061118b6104ee600161152c565b90506111978282612190565b60006111a360126122c5565b519050426111b1818361236f565b6111bd601282856123e7565b85516111d0906013906020890190612bb0565b50505050505050565b60003361091a818585611841565b60005a90506111f583610959565b6112365760405162461bcd60e51b81526020600482015260126024820152710caf0e0d2e4cac840c4d8dec6d65ad0c2e6d60731b6044820152606401610ac4565b60006112438585856113c6565b6000818152600f602052604090205490915060ff161561129c5760405162461bcd60e51b81526020600482015260146024820152730c8eae0d8d2c6c2e8ca40dcdedcc6ca5ad0c2e6d60631b6044820152606401610ac4565b60006112a782610ff1565b60ff169050600081116112ef5760405162461bcd60e51b815260206004820152601060248201526f0cadae0e8f240dcdedcc6ca5ad0c2e6d60831b6044820152606401610ac4565b60006112fa8261152c565b6000848152600f60205260409020805460ff19166001179055905061133861132a600e546001600160a01b031690565b611333836109a0565b611e27565b6113428782611e27565b5050506113595a6113539083613099565b3a61242c565b50505050565b60008181526006602052604081206107e99061248e565b6000828152600560205260409020600101546113918161179b565b610a238383611a75565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6040516bffffffffffffffffffffffff1930851860601b16602082015263ffffffff198316603482015260508101829052600090819060700160408051808303601f19018152919052805160209091012095945050505050565b600061142a610a3b565b90506000811161143c5761143c613204565b60008181526011602052604081205490036114da57600061145e600143613099565b4090508061146e5761146e613204565b428061147c5761147c613204565b6000828152601060209081526040808320849055858352601182529182902084905581518481529081018390527f2c6c5a9e4f0ddd70b42bd7fcac74128409018755c234dc0d2d29c66eb6335c9a91015b60405180910390a1505050565b6000818152601160209081526040808320548084526010835292819020548151848152928301819052917f2c6c5a9e4f0ddd70b42bd7fcac74128409018755c234dc0d2d29c66eb6335c9a91016114cd565b600061153a6012600a6131e2565b600161154784601061321a565b6115519190613099565b6107e99190613044565b611563611bc9565b6001600160a01b0381166115c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac4565b61095681611c23565b6115db8282611063565b610ad75760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556116133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061088e836001600160a01b038416612498565b60006107e9826124e7565b6001600160a01b0383166116d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac4565b6001600160a01b03821661173a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6109568133612527565b60005b600a54811015610956576117bb81611f7a565b806117c581613226565b9150506117a8565b60006117d9848461139b565b9050600019811461135957818110156118345760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ac4565b6113598484848403611677565b6001600160a01b0383166118a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac4565b6001600160a01b0382166119075760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac4565b6001600160a01b0383166000908152602081905260409020548181101561197f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ac4565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611359565b6000806119f3858585612580565b90506000611a0086612599565b8051909150851115611a2b578051611a189086613099565b611a229083613071565b9250505061088e565b6020015195945050505050565b611a4282826115d1565b6000828152600660205260409020610a239082611657565b604080516020810190915281815260009061088e90846125f9565b611a7f828261269a565b6000828152600660205260409020610a239082612701565b6001600160a01b038216611af75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ac4565b6001600160a01b03821660009081526020819052604090205481811015611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ac4565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600e546001600160a01b03163314610ed55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac4565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000600a8281548110611c8a57611c8a6130ac565b90600052602060002090602091828204019190069054906101000a900460ff1615611cea5760405162461bcd60e51b815260206004820152601060248201526f1b5a59dc985d1a5bdb881cd9585b195960821b6044820152606401610ac4565b6009544290811115611d305760405162461bcd60e51b815260206004820152600f60248201526e191958591b1a5b99481c185cdcd959608a1b6044820152606401610ac4565b60078381548110611d4357611d436130ac565b60009182526020909120015460405163079cc67960e41b81526001600160a01b03878116600483015260248201879052909116906379cc679090604401600060405180830381600087803b158015611d9a57600080fd5b505af1158015611dae573d6000803e3d6000fd5b5050505060008411611df85760405162461bcd60e51b81526020600482015260136024820152721b9bdb8b5c1bdcda5d1a5d9948185b5bdd5b9d606a1b6044820152606401610ac4565b6000611e048585610d1f565b905080600b6000828254611e1891906131f1565b90915550909695505050505050565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ac4565b8060026000828254611e8f91906131f1565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080608083901c15611efb57608092831c92015b604083901c15611f0d57604092831c92015b602083901c15611f1f57602092831c92015b601083901c15611f3157601092831c92015b600883901c15611f4357600892831c92015b600483901c15611f5557600492831c92015b600283901c15611f6757600292831c92015b600183901c156107e95760010192915050565b6001600a8281548110611f8f57611f8f6130ac565b90600052602060002090602091828204019190066101000a81548160ff02191690831515021790555050565b600061088e8383612716565b60408051600380825260808201909252606091600091906020820184803683375050600d5482519293509182915083906002908110612008576120086130ac565b6020908102919091010152600c54825181908490600190811061202d5761202d6130ac565b602090810291909101015260006120448284613044565b9050856120518289613044565b61205b9190613071565b8460008151811061206e5761206e6130ac565b6020908102919091010152509195945050505050565b80516004146120cc5760405162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840c2e4e4c2f25cd8cadccee8d60631b6044820152606401610ac4565b6000816002815181106120e1576120e16130ac565b60200260200101511161212e5760405162461bcd60e51b81526020600482015260156024820152740696e76616c69642061727261795b325d203d3d203605c1b6044820152606401610ac4565b600081600381518110612143576121436130ac565b6020026020010151116109565760405162461bcd60e51b81526020600482015260156024820152740696e76616c69642061727261795b335d203d3d203605c1b6044820152606401610ac4565b808210156121f2576121a3826002613044565b8111156121f25760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206368616e67653a20746f6f20736d616c6c000000000000006044820152606401610ac4565b80821180156122015750600081115b1561225c57612211816002613044565b82111561225c5760405162461bcd60e51b8152602060048201526019602482015278696e76616c6964206368616e67653a20746f6f206c6172676560381b6044820152606401610ac4565b8082118015612269575080155b15610ad75761227a6012600a6131e2565b821115610ad75760405162461bcd60e51b8152602060048201526019602482015278696e76616c6964206368616e67653a20746f6f206c6172676560381b6044820152606401610ac4565b6122e960405180606001604052806000815260200160008152602001600081525090565b8154612312576040518060600160405280600081526020016000815260200160008152506107e9565b8154829061232290600190613099565b81548110612332576123326130ac565b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505092915050565b8015610ad757600c612386606463bc191380613071565b6123909190613071565b61239a8284613099565b11610ad75760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206368616e67653a20746f6f206672657175656e74000000006044820152606401610ac4565b826123f3848484612740565b81546001818101845560009384526020938490208351600390930201918255928201519281019290925560400151600290910155505050565b600c54801561245657600461244282600f613044565b61244c90856131f1565b901c600c5561245c565b600c8390555b600d54801561248657600461247282600f613044565b61247c90856131f1565b901c600d55611359565b5050600d5550565b60006107e9825490565b60008181526001830160205260408120546124df575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e9565b5060006107e9565b60006001600160e01b031982166336372b0760e01b148061251857506001600160e01b0319821663a219a02560e01b145b806107e957506107e98261287a565b6125318282611063565b610ad75761253e81612885565b612549836020612897565b60405160200161255a92919061323f565b60408051601f198184030181529082905262461bcd60e51b8252610ac491600401612c5e565b600061258d848484612740565b60400151949350505050565b6125bd60405180606001604052806000815260200160008152602001600081525090565b81546125e6576040518060600160405280600081526020016000815260200160008152506107e9565b81600081548110612332576123326130ac565b60008061264b8460000151600381518110612616576126166130ac565b6020026020010151846126299190613044565b85518051600290811061263e5761263e6130ac565b6020026020010151612a33565b9050610fd48460000151600181518110612667576126676130ac565b60200260200101518261267a91906131f1565b8551805160009061268d5761268d6130ac565b6020026020010151612a4e565b6126a48282611063565b15610ad75760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061088e836001600160a01b038416612a68565b600082600001828154811061272d5761272d6130ac565b9060005260206000200154905092915050565b61276460405180606001604052806000815260200160008152602001600081525090565b835415612859578354600090859061277e90600190613099565b8154811061278e5761278e6130ac565b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015184101561280b5760405162461bcd60e51b815260206004820152600d60248201526c0696e76616c6964207374616d7609c1b6044820152606401610ac4565b805160009061281a9086613099565b6128249085613044565b9050604051806060016040528086815260200185815260200182846040015161284d91906131f1565b8152509250505061088e565b50604080516060810182529283526020830191909152600090820152919050565b60006107e982612b5b565b60606107e96001600160a01b03831660145b606060006128a6836002613044565b6128b19060026131f1565b67ffffffffffffffff8111156128c9576128c9612c91565b6040519080825280601f01601f1916602001820160405280156128f3576020820181803683370190505b509050600360fc1b8160008151811061290e5761290e6130ac565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061293d5761293d6130ac565b60200101906001600160f81b031916908160001a9053506000612961846002613044565b61296c9060016131f1565b90505b60018111156129e4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129a0576129a06130ac565b1a60f81b8282815181106129b6576129b66130ac565b60200101906001600160f81b031916908160001a90535060049490941c936129dd816132b4565b905061296f565b50831561088e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ac4565b6000808211612a445760001961088e565b61088e8284613071565b6000818311612a5e57600061088e565b61088e8284613099565b60008181526001830160205260408120548015612b51576000612a8c600183613099565b8554909150600090612aa090600190613099565b9050818114612b05576000866000018281548110612ac057612ac06130ac565b9060005260206000200154905080876000018481548110612ae357612ae36130ac565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b1657612b166132cb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e9565b60009150506107e9565b60006001600160e01b03198216635a05180f60e01b14806107e957506107e98260006001600160e01b03198216637965db0b60e01b14806107e957506301ffc9a760e01b6001600160e01b03198316146107e9565b828054828255906000526020600020908101928215612beb579160200282015b82811115612beb578251825591602001919060010190612bd0565b50612bf7929150612bfb565b5090565b5b80821115612bf75760008155600101612bfc565b600060208284031215612c2257600080fd5b81356001600160e01b03198116811461088e57600080fd5b60005b83811015612c55578181015183820152602001612c3d565b50506000910152565b6020815260008251806020840152612c7d816040850160208701612c3a565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612cb857600080fd5b8135602067ffffffffffffffff80831115612cd557612cd5612c91565b8260051b604051601f19603f83011681018181108482111715612cfa57612cfa612c91565b604052938452858101830193838101925087851115612d1857600080fd5b83870191505b84821015612d3757813583529183019190830190612d1e565b979650505050505050565b60008060408385031215612d5557600080fd5b82359150602083013567ffffffffffffffff811115612d7357600080fd5b612d7f85828601612ca7565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612dc3578351151583529284019291840191600101612da5565b50909695505050505050565b80356001600160a01b0381168114612de657600080fd5b919050565b60008060408385031215612dfe57600080fd5b612e0783612dcf565b946020939093013593505050565b600060208284031215612e2757600080fd5b5035919050565b600080600060608486031215612e4357600080fd5b612e4c84612dcf565b9250612e5a60208501612dcf565b9150604084013590509250925092565b60008060408385031215612e7d57600080fd5b82359150612e8d60208401612dcf565b90509250929050565b60008060408385031215612ea957600080fd5b50508035926020909101359150565b600060208284031215612eca57600080fd5b61088e82612dcf565b6020808252825182820181905260009190848201906040850190845b81811015612dc357835183529284019291840191600101612eef565b600080600060608486031215612f2057600080fd5b612f2984612dcf565b925060208401359150604084013567ffffffffffffffff811115612f4c57600080fd5b612f5886828701612ca7565b9150509250925092565b600060208284031215612f7457600080fd5b813567ffffffffffffffff811115612f8b57600080fd5b610fd484828501612ca7565b600080600060608486031215612fac57600080fd5b612fb584612dcf565b95602085013595506040909401359392505050565b60008060408385031215612fdd57600080fd5b612fe683612dcf565b9150612e8d60208401612dcf565b600181811c9082168061300857607f821691505b60208210810361302857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107e9576107e961302e565b634e487b7160e01b600052601260045260246000fd5b6000826130805761308061305b565b500490565b6000826130945761309461305b565b500690565b818103818111156107e9576107e961302e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130d457600080fd5b815160ff8116811461088e57600080fd5b60ff82811682821603908111156107e9576107e961302e565b600181815b8085111561313957816000190482111561311f5761311f61302e565b8085161561312c57918102915b93841c9390800290613103565b509250929050565b600082613150575060016107e9565b8161315d575060006107e9565b8160018114613173576002811461317d57613199565b60019150506107e9565b60ff84111561318e5761318e61302e565b50506001821b6107e9565b5060208310610133831016604e8410600b84101617156131bc575081810a6107e9565b6131c683836130fe565b80600019048211156131da576131da61302e565b029392505050565b600061088e60ff841683613141565b808201808211156107e9576107e961302e565b634e487b7160e01b600052600160045260246000fd5b600061088e8383613141565b6000600182016132385761323861302e565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613277816017850160208801612c3a565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516132a8816028840160208801612c3a565b01602801949350505050565b6000816132c3576132c361302e565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cbd3564c54dcf3d81548f223c37054035987ffc0e06798ae6c8c055d51ac418a64736f6c634300081100337df1fa30796d39d0e882422146943ee011c6f6b410f211570cc3a712e3e51e6a6ff92aee9c9f4e39dc206872db9efdc37eacf3ea4e04ae77b7e68d993e2081fb00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000007861f80000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000e71a2c51b8e0c35ee1f45adddb27fda1862ad880000000000000000000000000621ffc228f23eb391bf7689bd05405e08665a11f000000000000000000000000a18cd7e596aaa98a697d0511ed87dd19ac981afb000000000000000000000000635199dcd56f1ab8a7f1641dc03a39a59485ad23000000000000000000000000c326a3efdc529cc3dfedefb01bcd2f5aa9d771470000000000000000000000007577131aca38c2b2ce2a3f7c447ccc2d6decc977000000000000000000000000823b8a1b9c92312388f65758f53b13d8b75df5a0000000000000000000000000b7442a0d56f26851236d63ffb314802115814e3f000000000000000000000000c6e1bdc859d7d85136efc0bbd502c09e6c1d531a000000000000000000000000052be95b940151dece41558590342ab18f85c1bb