diff --git a/abis/0.8.27/AgentFactory.json b/abis/0.8.27/AgentFactory.json new file mode 100644 index 0000000..59d5b7f --- /dev/null +++ b/abis/0.8.27/AgentFactory.json @@ -0,0 +1,539 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AgentFactory", + "sourceName": "contracts/AgentFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_agentRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "AgentInstanceRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentInstancesSlotsFilled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "AgentNotInService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "componentId", + "type": "uint256" + } + ], + "name": "ComponentNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "HashExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectAgentBondingValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "IncorrectRegistrationDepositValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "provided", + "type": "address" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OnlyOwnServiceMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "OperatorHasNoInstances", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerOnly", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "ServiceMustBeInactive", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "multisig", + "type": "address" + } + ], + "name": "UnauthorizedMultisig", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "WrongAgentId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numValues1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "numValues2", + "type": "uint256" + } + ], + "name": "WrongArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "state", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "serviceId", + "type": "uint256" + } + ], + "name": "WrongServiceState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThreshold", + "type": "uint256" + } + ], + "name": "WrongThreshold", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroValue", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "mech", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "CreateMech", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "Pause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "Unpause", + "type": "event" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "agentRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "agentOwner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "agentHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "address", + "name": "mechMarketplace", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "mech", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "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": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a060405234801561000f575f5ffd5b5060405161401138038061401183398101604081905261002e91610050565b6001600160a01b03166080525f80546001600160a01b0319163317905561007d565b5f60208284031215610060575f5ffd5b81516001600160a01b0381168114610076575f5ffd5b9392505050565b608051613f6f6100a25f395f8181608e0152818161041b01526104ce0152613f6f5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638da5cb5b116100585780638da5cb5b146101205780639683fe3e1461013f578063a6f9dae11461017c578063ffa1ad741461018f575f5ffd5b80630d1cfcae146100895780633f4ba83a146100da5780635c975abb146100e45780638456cb5914610118575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e26101d8565b005b5f546101089074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016100d1565b6100e261029f565b5f546100b09073ffffffffffffffffffffffffffffffffffffffff1681565b61015261014d3660046106ff565b610378565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016100d1565b6100e261018a366004610742565b6105a0565b6101cb6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d19190610762565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461024e575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16815560405133917faeb196d352664784d1900b0e7414a8face7d29f4dae8c4b0cf68ed477423bbf491a2565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610310575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610245565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017815560405133917f5ee71a369c8672edded508e624ffc9257fa1ae6886ef32905c18e60196bca39991a2565b5f8054819074010000000000000000000000000000000000000000900460ff16156103cf576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa3def92300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063a3def923906044016020604051808303815f875af1158015610461573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048591906107b5565b6040805173ffffffffffffffffffffffffffffffffffffffff891660208201529081018290529092505f90606001604051602081830303815290604052805190602001209050807f00000000000000000000000000000000000000000000000000000000000000008487876040516104fc906106ca565b73ffffffffffffffffffffffffffffffffffffffff94851681526020810193909352604083019190915290911660608201526080018190604051809103905ff590508015801561054e573d5f5f3e3d5ffd5b50915084838373ffffffffffffffffffffffffffffffffffffffff167f67a2e45041c70013518c5b9b849a6944a6c17ff44d66be1c707020460ecbd1db60405160405180910390a45094509492505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610611575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610245565b73ffffffffffffffffffffffffffffffffffffffff811661065e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b61376d806107cd83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106fa575f5ffd5b919050565b5f5f5f5f60808587031215610712575f5ffd5b61071b856106d7565b93506020850135925060408501359150610737606086016106d7565b905092959194509250565b5f60208284031215610752575f5ffd5b61075b826106d7565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f602082840312156107c5575f5ffd5b505191905056fe60c06040525f5f556001600655348015610017575f5ffd5b5060405161376d38038061376d83398101604081905261003691610469565b604080516001600160a01b038616602082015280820185905281518082038301815260609091019091528490849061006d8161016b565b5050506001600160a01b0384166100975760405163d92e233d60e01b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018490525f906001600160a01b03861690636352211e90602401602060405180830381865afa1580156100dc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061010091906104ad565b90506001600160a01b03811661013157604051630ede975960e01b8152600481018590526024015b60405180910390fd5b600580546001600160a01b0319166001600160a01b03841617905560018390554660a05261015d6101cd565b608052506105959350505050565b610173610295565b51156101c15760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610128565b6101ca816102fd565b50565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d093525604051806040016040528060058152602001640312e312e360dc1b81525060405160200161023e91906104cd565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60606102f86102f3604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6103c1565b905090565b5f61030782610416565b90505f8151602083015ff0905061036d604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6001600160a01b0316816001600160a01b0316146103bc5760405162461bcd60e51b815260206004820152600c60248201526b15dc9a5d194819985a5b195960a21b6044820152606401610128565b505050565b6060813b600181116103e257505060408051602081019091525f8152919050565b806103ec81610516565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b606081516001610426919061052b565b82604051602001610438929190610544565b6040516020818303038152906040529050919050565b80516001600160a01b0381168114610464575f5ffd5b919050565b5f5f5f5f6080858703121561047c575f5ffd5b6104858561044e565b60208601516040870151919550935091506104a26060860161044e565b905092959194509250565b5f602082840312156104bd575f5ffd5b6104c68261044e565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f8161052457610524610502565b505f190190565b8082018082111561053e5761053e610502565b92915050565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b60058201525f600e820181905282518060208501600f85015e5f9201600f019182525092915050565b60805160a0516131a96105c45f395f81816105ab015261172a01525f81816108cd015261175f01526131a95ff3fe6080604052600436106102ac575f3560e01c8063a035b1fe11610165578063d843b7f4116100c6578063f5dcb7bb1161007c578063f698da2511610062578063f698da25146108bc578063fc0c546a146108ef578063ffa1ad7414610903575f5ffd5b8063f5dcb7bb1461086a578063f6171e441461089d575f5ffd5b8063e7d915cf116100ac578063e7d915cf146107f2578063ed24911d14610811578063f23a6e6114610825575f5ffd5b8063d843b7f414610785578063d8a4676f146107c6575f5ffd5b8063b94207d31161011b578063bdf8631711610101578063bdf8631714610719578063c7dec3fc1461072e578063cbd6407a1461075a575f5ffd5b8063b94207d3146106bf578063bc197c81146106d2575f5ffd5b8063a669aaf91161014b578063a669aaf914610671578063affed0e014610686578063b0d691fe14610699575f5ffd5b8063a035b1fe1461063d578063a4f9edbf14610652575f5ffd5b806358ce09091161020f57806391b7f5ed116101c55780639a8a0592116101ab5780639a8a05921461059a5780639c5e9590146105cd5780639ec4a5bf1461061e575f5ffd5b806391b7f5ed14610550578063982c0db31461056f575f5ffd5b806379412518116101f557806379412518146104bb5780637af73473146104ce5780638fb847ef1461050f575f5ffd5b806358ce0909146104605780636d70f7ae1461048c575f5ffd5b806317d70f7c116102645780633a871cdd1161024a5780633a871cdd1461040d5780634954bbf11461042c5780634ada3e611461044b575f5ffd5b806317d70f7c146103ce5780631bbbeeb8146103e2575f5ffd5b8063150b7a0211610294578063150b7a021461031b578063157305fe146103905780631626ba7e146103af575f5ffd5b806223de29146102b7578062427c54146102dd575f5ffd5b366102b357005b5f5ffd5b3480156102c2575f5ffd5b506102db6102d1366004612748565b5050505050505050565b005b3480156102e8575f5ffd5b506103086102f73660046127f7565b60086020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610326575f5ffd5b5061035f610335366004612812565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610312565b34801561039b575f5ffd5b506102db6103aa366004612956565b61094b565b3480156103ba575f5ffd5b5061035f6103c9366004612956565b610ac5565b3480156103d9575f5ffd5b50610308610c68565b3480156103ed575f5ffd5b506103086103fc3660046127f7565b60076020525f908152604090205481565b348015610418575f5ffd5b5061030861042736600461299a565b610c8c565b348015610437575f5ffd5b506102db6104463660046129e9565b610cc8565b348015610456575f5ffd5b5061030860035481565b34801561046b575f5ffd5b5061047f61047a366004612a46565b610eb7565b6040516103129190612a66565b348015610497575f5ffd5b506104ab6104a63660046127f7565b61100e565b6040519015158152602001610312565b6102db6104c9366004612aa8565b6110e0565b3480156104d9575f5ffd5b506103086104e83660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b34801561051a575f5ffd5b506103086105293660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526008602052604090205490565b34801561055b575f5ffd5b506102db61056a366004612afe565b611163565b34801561057a575f5ffd5b506103086105893660046127f7565b60096020525f908152604090205481565b3480156105a5575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d8575f5ffd5b506005546105f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610312565b348015610629575f5ffd5b50610308610638366004612aa8565b611251565b348015610648575f5ffd5b5061030860015481565b34801561065d575f5ffd5b506102db61066c366004612b15565b611305565b34801561067c575f5ffd5b5061030860045481565b348015610691575f5ffd5b505f54610308565b3480156106a4575f5ffd5b50730576a174d229e3cfa37253523e645a78a0c91b576105f9565b6103086106cd366004612b15565b611381565b3480156106dd575f5ffd5b5061035f6106ec366004612b90565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b348015610724575f5ffd5b5061030860025481565b348015610739575f5ffd5b5061074d610748366004612c33565b61143c565b6040516103129190612cf1565b348015610765575f5ffd5b506103086107743660046127f7565b600c6020525f908152604090205481565b348015610790575f5ffd5b506105f961079f366004612afe565b600b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d1575f5ffd5b506107e56107e0366004612afe565b611526565b6040516103129190612d30565b3480156107fd575f5ffd5b506102db61080c366004612afe565b6115fb565b34801561081c575f5ffd5b50610308611727565b348015610830575f5ffd5b5061035f61083f366004612d6f565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b348015610875575f5ffd5b506103087f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156108a8575f5ffd5b506103086108b7366004612a46565b611781565b3480156108c7575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156108fa575f5ffd5b506105f96117a3565b34801561090e575f5ffd5b5061074d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6109543361100e565b80610972575033730576a174d229e3cfa37253523e645a78a0c91b57145b610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084015b60405180910390fd5b60016006541115610a40576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff1615610ab1576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b610abb82826117c0565b5050600160065550565b5f5f5f5f610ae585602081015160408201516060909201515f1a92909190565b9094509250905060ff81165f03610bfb5782858301602001610b068261100e565b158015610b29575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610b5c57507fffffffff000000000000000000000000000000000000000000000000000000009450610c629350505050565b6040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690631626ba7e90610bb0908b908590600401612de6565b602060405180830381865afa158015610bcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bef9190612dfe565b95505050505050610c62565b610c0a6104a6878386866119d5565b15610c3b57507f1626ba7e000000000000000000000000000000000000000000000000000000009250610c62915050565b507fffffffff00000000000000000000000000000000000000000000000000000000925050505b92915050565b5f5f610c726119f1565b806020019051810190610c859190612e3d565b9392505050565b5f610c95611ac0565b610c9f8484611b3f565b9050610cae6040850185612e69565b90505f03610cbf57610cbf84611c13565b610c8582611c91565b610cd13361100e565b80610cef575033730576a174d229e3cfa37253523e645a78a0c91b57145b610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60016006541115610db8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff16610e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e1785856117c0565b805190915015610eab576005546040517f56d0819e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906356d0819e90610e7d908890859088908890600401612eca565b5f604051808303815f87803b158015610e94575f5ffd5b505af1158015610ea6573d5f5f3e3d5ffd5b505050505b50506001600655505050565b6002546060905f849003610ec9578093505b80610ed48486612f38565b1115610f2157610ee48385612f38565b6040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016109fa565b8315611007578367ffffffffffffffff811115610f4057610f40612880565b604051908082528060200260200182016040528015610f69578160200160208202803683370190505b505f808052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e4549193505b84811015610fbc575f828152600a60205260409020600101549150600101610f99565b505f5b858110156110045781848281518110610fda57610fda612f4b565b6020908102919091018101919091525f838152600a90915260409020600101549150600101610fbf565b50505b5092915050565b5f5f5f6110196119f1565b80602001905181019061102c9190612e3d565b915091508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161108291815260200190565b602060405180830381865afa15801561109d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190612f78565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611153576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b61115e838383611d05565b505050565b61116c3361100e565b8061118a575033730576a174d229e3cfa37253523e645a78a0c91b57145b611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60018190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a150565b5f61125a611727565b84848460405160200161126f93929190612f93565b604051602081830303815290604052805190602001206040516020016112c79291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b61130d6119f1565b5115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064016109fa565b61137e81611ead565b50565b6005545f9073ffffffffffffffffffffffffffffffffffffffff16156113ef576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b335f818152600c602052604090205461140a91908490611251565b335f908152600c6020526040812080549293509061142783612fd1565b9190505550611437338383611d05565b919050565b60606114473361100e565b80611465575033730576a174d229e3cfa37253523e645a78a0c91b57145b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b5f61150b878787878715611505578761201d565b5a61201d565b925090508061151c57815160208301fd5b5095945050505050565b5f818152600b602052604081205473ffffffffffffffffffffffffffffffffffffffff1615611437575f828152600a60205260408082208151808301928390529160029082845b81548152602001906001019080831161156d5750505050509050805f6002811061159957611599612f4b565b60200201511580156115ad57506020810151155b80156115e257505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548314155b156115f057600291506115f5565b600191505b50919050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461166e576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b5f818152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16806116c9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d38183612120565b8073ffffffffffffffffffffffffffffffffffffffff167fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd08360405161171b91815260200190565b60405180910390a25050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461175c57611757612273565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600a602052815f5260405f20816002811061179a575f80fd5b01549150829050565b5f5f6117ad6119f1565b806020019051810190610c629190612f78565b5f828152600b60205260408082205460055491517ff2e433bf0000000000000000000000000000000000000000000000000000000081526004810186905260609373ffffffffffffffffffffffffffffffffffffffff928316939092169063f2e433bf906024016080604051808303815f875af1158015611843573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118679190613008565b602081015190915073ffffffffffffffffffffffffffffffffffffffff1615611891575050610c62565b73ffffffffffffffffffffffffffffffffffffffff82166119275760055473ffffffffffffffffffffffffffffffffffffffff16156118d257806040015191505b73ffffffffffffffffffffffffffffffffffffffff8216611922576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018690526024016109fa565b611931565b6119318286612120565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040812080548695509161196483612fd1565b909155505060048054905f61197883612fd1565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f0cd979445339c62199996f208428d987b1cea24d18e62b79ec24d94b636e8b7086856040516119c5929190612de6565b60405180910390a2505092915050565b5f5f5f6119e487878787612371565b9150915061151c81612459565b6060611757611abb6040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b61260b565b33730576a174d229e3cfa37253523e645a78a0c91b5714611b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064016109fa565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81207f1626ba7e00000000000000000000000000000000000000000000000000000000611bd982611ba0610140880188612e69565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610ac592505050565b7fffffffff000000000000000000000000000000000000000000000000000000001614611c0a576001915050610c62565b505f9392505050565b5f805460208301359180611c2683612fd1565b919050551461137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016109fa565b801561137e576040515f9033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d805f8114611cf9576040519150601f19603f3d011682016040523d82523d5f602084013e611cfe565b606091505b5050505050565b611d10348284612660565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600760205260408120805491611d4083612fd1565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f908152600960205260408120805491611d7583612fd1565b90915550505f818152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055600a9091528082207f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e480546001830181905590859055808452918320849055600280547f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e394929392909190611e3c83612fd1565b909155505060038054905f611e5083612fd1565b91905055508573ffffffffffffffffffffffffffffffffffffffff167f4bda649efe6b98b0f9c1d5e859c29e20910f45c66dabfe6fad4a4881f7faf9cc8587604051611e9d929190612de6565b60405180910390a2505050505050565b5f611eb7826126aa565b90505f8151602083015ff09050611f896040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5772697465206661696c6564000000000000000000000000000000000000000060448201526064016109fa565b5f6060600184600181111561203457612034612d03565b036120a8578673ffffffffffffffffffffffffffffffffffffffff16838660405161205f91906130ac565b5f604051808303818686f4925050503d805f8114612098576040519150601f19603f3d011682016040523d82523d5f602084013e61209d565b606091505b509092509050612116565b8673ffffffffffffffffffffffffffffffffffffffff168387876040516120cf91906130ac565b5f60405180830381858888f193505050503d805f811461210a576040519150601f19603f3d011682016040523d82523d5f602084013e61210f565b606091505b5090925090505b9550959350505050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600960205260408120805491612150836130b7565b909155505060028054905f612164836130b7565b90915550505f818152600a60205260408082208151808301928390529160029082845b8154815260200190600101908083116121875750505050509050805f600281106121b3576121b3612f4b565b60200201511580156121c757506020810151155b80156121fc57505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548214155b15612236576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018390526024016109fa565b6020818101805183515f908152600a9093526040808420600190810192909255935191518352838320919091559281529081208181559091015550565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d0935256040518060400160405280600581526020017f312e312e300000000000000000000000000000000000000000000000000000008152506040516020016122fc9190612cf1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a657505f90506003612450565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123f7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661244a575f60019250925050612450565b91505f90505b94509492505050565b5f81600481111561246c5761246c612d03565b036124745750565b600181600481111561248857612488612d03565b036124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109fa565b600281600481111561250357612503612d03565b0361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109fa565b600381600481111561257e5761257e612d03565b0361137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016109fa565b6060813b6001811161262c57505060408051602081019091525f8152919050565b80612636816130b7565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b60015483101561115e576001546040517fb48978280000000000000000000000000000000000000000000000000000000081526109fa918591600401918252602082015260400190565b6060815160016126ba9190612f38565b826040516020016126cc9291906130eb565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461137e575f5ffd5b5f5f83601f840112612713575f5ffd5b50813567ffffffffffffffff81111561272a575f5ffd5b602083019150836020828501011115612741575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561275f575f5ffd5b883561276a816126e2565b9750602089013561277a816126e2565b9650604089013561278a816126e2565b955060608901359450608089013567ffffffffffffffff8111156127ac575f5ffd5b6127b88b828c01612703565b90955093505060a089013567ffffffffffffffff8111156127d7575f5ffd5b6127e38b828c01612703565b999c989b5096995094979396929594505050565b5f60208284031215612807575f5ffd5b8135610c85816126e2565b5f5f5f5f5f60808688031215612826575f5ffd5b8535612831816126e2565b94506020860135612841816126e2565b935060408601359250606086013567ffffffffffffffff811115612863575f5ffd5b61286f88828901612703565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126128bc575f5ffd5b813567ffffffffffffffff8111156128d6576128d6612880565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561292357612923612880565b60405281815283820160200185101561293a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612967575f5ffd5b82359150602083013567ffffffffffffffff811115612984575f5ffd5b612990858286016128ad565b9150509250929050565b5f5f5f606084860312156129ac575f5ffd5b833567ffffffffffffffff8111156129c2575f5ffd5b840161016081870312156129d4575f5ffd5b95602085013595506040909401359392505050565b5f5f5f5f608085870312156129fc575f5ffd5b84359350602085013567ffffffffffffffff811115612a19575f5ffd5b612a25878288016128ad565b9350506040850135612a36816126e2565b9396929550929360600135925050565b5f5f60408385031215612a57575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612a9d578351835260209384019390920191600101612a7f565b509095945050505050565b5f5f5f60608486031215612aba575f5ffd5b8335612ac5816126e2565b9250602084013567ffffffffffffffff811115612ae0575f5ffd5b612aec868287016128ad565b93969395505050506040919091013590565b5f60208284031215612b0e575f5ffd5b5035919050565b5f60208284031215612b25575f5ffd5b813567ffffffffffffffff811115612b3b575f5ffd5b612b47848285016128ad565b949350505050565b5f5f83601f840112612b5f575f5ffd5b50813567ffffffffffffffff811115612b76575f5ffd5b6020830191508360208260051b8501011115612741575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612ba7575f5ffd5b8835612bb2816126e2565b97506020890135612bc2816126e2565b9650604089013567ffffffffffffffff811115612bdd575f5ffd5b612be98b828c01612b4f565b909750955050606089013567ffffffffffffffff811115612c08575f5ffd5b612c148b828c01612b4f565b909550935050608089013567ffffffffffffffff8111156127d7575f5ffd5b5f5f5f5f5f60a08688031215612c47575f5ffd5b8535612c52816126e2565b945060208601359350604086013567ffffffffffffffff811115612c74575f5ffd5b612c80888289016128ad565b935050606086013560028110612c94575f5ffd5b949793965091946080013592915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610c856020830184612ca5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612d69577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f5f5f5f5f5f60a08789031215612d84575f5ffd5b8635612d8f816126e2565b95506020870135612d9f816126e2565b94506040870135935060608701359250608087013567ffffffffffffffff811115612dc8575f5ffd5b612dd489828a01612703565b979a9699509497509295939492505050565b828152604060208201525f612b476040830184612ca5565b5f60208284031215612e0e575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c85575f5ffd5b5f5f60408385031215612e4e575f5ffd5b8251612e59816126e2565b6020939093015192949293505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e9c575f5ffd5b83018035915067ffffffffffffffff821115612eb6575f5ffd5b602001915036819003821315612741575f5ffd5b848152608060208201525f612ee26080830186612ca5565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c6257610c62612f0b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612f88575f5ffd5b8151610c85816126e2565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f612fc16060830185612ca5565b9050826040830152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300157613001612f0b565b5060010190565b5f6080828403128015613019575f5ffd5b506040516080810167ffffffffffffffff8111828210171561303d5761303d612880565b604052825161304b816126e2565b8152602083015161305b816126e2565b6020820152604083015161306e816126e2565b6040820152606083015163ffffffff81168114613089575f5ffd5b60608201529392505050565b5f81518060208401855e5f93019283525090919050565b5f610c858284613095565b5f816130c5576130c5612f0b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f630000000000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008360e01b1660018201527f80600e6000396000f3000000000000000000000000000000000000000000000060058201525f600e8201525f612b47600f83018461309556fea2646970667358221220959b491a03df420a39d9217bff79fea47ed3d14b1b9e42dcdf18b41c9b14edca64736f6c634300081b0033a2646970667358221220e22adbd43bc3fea7d153c26066457f821c1d3642b50b27a868be63d09b94812164736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638da5cb5b116100585780638da5cb5b146101205780639683fe3e1461013f578063a6f9dae11461017c578063ffa1ad741461018f575f5ffd5b80630d1cfcae146100895780633f4ba83a146100da5780635c975abb146100e45780638456cb5914610118575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e26101d8565b005b5f546101089074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016100d1565b6100e261029f565b5f546100b09073ffffffffffffffffffffffffffffffffffffffff1681565b61015261014d3660046106ff565b610378565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016100d1565b6100e261018a366004610742565b6105a0565b6101cb6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d19190610762565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461024e575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16815560405133917faeb196d352664784d1900b0e7414a8face7d29f4dae8c4b0cf68ed477423bbf491a2565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610310575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610245565b5f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017815560405133917f5ee71a369c8672edded508e624ffc9257fa1ae6886ef32905c18e60196bca39991a2565b5f8054819074010000000000000000000000000000000000000000900460ff16156103cf576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa3def92300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063a3def923906044016020604051808303815f875af1158015610461573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048591906107b5565b6040805173ffffffffffffffffffffffffffffffffffffffff891660208201529081018290529092505f90606001604051602081830303815290604052805190602001209050807f00000000000000000000000000000000000000000000000000000000000000008487876040516104fc906106ca565b73ffffffffffffffffffffffffffffffffffffffff94851681526020810193909352604083019190915290911660608201526080018190604051809103905ff590508015801561054e573d5f5f3e3d5ffd5b50915084838373ffffffffffffffffffffffffffffffffffffffff167f67a2e45041c70013518c5b9b849a6944a6c17ff44d66be1c707020460ecbd1db60405160405180910390a45094509492505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610611575f546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610245565b73ffffffffffffffffffffffffffffffffffffffff811661065e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b91a250565b61376d806107cd83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106fa575f5ffd5b919050565b5f5f5f5f60808587031215610712575f5ffd5b61071b856106d7565b93506020850135925060408501359150610737606086016106d7565b905092959194509250565b5f60208284031215610752575f5ffd5b61075b826106d7565b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f602082840312156107c5575f5ffd5b505191905056fe60c06040525f5f556001600655348015610017575f5ffd5b5060405161376d38038061376d83398101604081905261003691610469565b604080516001600160a01b038616602082015280820185905281518082038301815260609091019091528490849061006d8161016b565b5050506001600160a01b0384166100975760405163d92e233d60e01b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018490525f906001600160a01b03861690636352211e90602401602060405180830381865afa1580156100dc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061010091906104ad565b90506001600160a01b03811661013157604051630ede975960e01b8152600481018590526024015b60405180910390fd5b600580546001600160a01b0319166001600160a01b03841617905560018390554660a05261015d6101cd565b608052506105959350505050565b610173610295565b51156101c15760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610128565b6101ca816102fd565b50565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d093525604051806040016040528060058152602001640312e312e360dc1b81525060405160200161023e91906104cd565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60606102f86102f3604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6103c1565b905090565b5f61030782610416565b90505f8151602083015ff0905061036d604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6001600160a01b0316816001600160a01b0316146103bc5760405162461bcd60e51b815260206004820152600c60248201526b15dc9a5d194819985a5b195960a21b6044820152606401610128565b505050565b6060813b600181116103e257505060408051602081019091525f8152919050565b806103ec81610516565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b606081516001610426919061052b565b82604051602001610438929190610544565b6040516020818303038152906040529050919050565b80516001600160a01b0381168114610464575f5ffd5b919050565b5f5f5f5f6080858703121561047c575f5ffd5b6104858561044e565b60208601516040870151919550935091506104a26060860161044e565b905092959194509250565b5f602082840312156104bd575f5ffd5b6104c68261044e565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f8161052457610524610502565b505f190190565b8082018082111561053e5761053e610502565b92915050565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b60058201525f600e820181905282518060208501600f85015e5f9201600f019182525092915050565b60805160a0516131a96105c45f395f81816105ab015261172a01525f81816108cd015261175f01526131a95ff3fe6080604052600436106102ac575f3560e01c8063a035b1fe11610165578063d843b7f4116100c6578063f5dcb7bb1161007c578063f698da2511610062578063f698da25146108bc578063fc0c546a146108ef578063ffa1ad7414610903575f5ffd5b8063f5dcb7bb1461086a578063f6171e441461089d575f5ffd5b8063e7d915cf116100ac578063e7d915cf146107f2578063ed24911d14610811578063f23a6e6114610825575f5ffd5b8063d843b7f414610785578063d8a4676f146107c6575f5ffd5b8063b94207d31161011b578063bdf8631711610101578063bdf8631714610719578063c7dec3fc1461072e578063cbd6407a1461075a575f5ffd5b8063b94207d3146106bf578063bc197c81146106d2575f5ffd5b8063a669aaf91161014b578063a669aaf914610671578063affed0e014610686578063b0d691fe14610699575f5ffd5b8063a035b1fe1461063d578063a4f9edbf14610652575f5ffd5b806358ce09091161020f57806391b7f5ed116101c55780639a8a0592116101ab5780639a8a05921461059a5780639c5e9590146105cd5780639ec4a5bf1461061e575f5ffd5b806391b7f5ed14610550578063982c0db31461056f575f5ffd5b806379412518116101f557806379412518146104bb5780637af73473146104ce5780638fb847ef1461050f575f5ffd5b806358ce0909146104605780636d70f7ae1461048c575f5ffd5b806317d70f7c116102645780633a871cdd1161024a5780633a871cdd1461040d5780634954bbf11461042c5780634ada3e611461044b575f5ffd5b806317d70f7c146103ce5780631bbbeeb8146103e2575f5ffd5b8063150b7a0211610294578063150b7a021461031b578063157305fe146103905780631626ba7e146103af575f5ffd5b806223de29146102b7578062427c54146102dd575f5ffd5b366102b357005b5f5ffd5b3480156102c2575f5ffd5b506102db6102d1366004612748565b5050505050505050565b005b3480156102e8575f5ffd5b506103086102f73660046127f7565b60086020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610326575f5ffd5b5061035f610335366004612812565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610312565b34801561039b575f5ffd5b506102db6103aa366004612956565b61094b565b3480156103ba575f5ffd5b5061035f6103c9366004612956565b610ac5565b3480156103d9575f5ffd5b50610308610c68565b3480156103ed575f5ffd5b506103086103fc3660046127f7565b60076020525f908152604090205481565b348015610418575f5ffd5b5061030861042736600461299a565b610c8c565b348015610437575f5ffd5b506102db6104463660046129e9565b610cc8565b348015610456575f5ffd5b5061030860035481565b34801561046b575f5ffd5b5061047f61047a366004612a46565b610eb7565b6040516103129190612a66565b348015610497575f5ffd5b506104ab6104a63660046127f7565b61100e565b6040519015158152602001610312565b6102db6104c9366004612aa8565b6110e0565b3480156104d9575f5ffd5b506103086104e83660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b34801561051a575f5ffd5b506103086105293660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526008602052604090205490565b34801561055b575f5ffd5b506102db61056a366004612afe565b611163565b34801561057a575f5ffd5b506103086105893660046127f7565b60096020525f908152604090205481565b3480156105a5575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d8575f5ffd5b506005546105f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610312565b348015610629575f5ffd5b50610308610638366004612aa8565b611251565b348015610648575f5ffd5b5061030860015481565b34801561065d575f5ffd5b506102db61066c366004612b15565b611305565b34801561067c575f5ffd5b5061030860045481565b348015610691575f5ffd5b505f54610308565b3480156106a4575f5ffd5b50730576a174d229e3cfa37253523e645a78a0c91b576105f9565b6103086106cd366004612b15565b611381565b3480156106dd575f5ffd5b5061035f6106ec366004612b90565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b348015610724575f5ffd5b5061030860025481565b348015610739575f5ffd5b5061074d610748366004612c33565b61143c565b6040516103129190612cf1565b348015610765575f5ffd5b506103086107743660046127f7565b600c6020525f908152604090205481565b348015610790575f5ffd5b506105f961079f366004612afe565b600b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d1575f5ffd5b506107e56107e0366004612afe565b611526565b6040516103129190612d30565b3480156107fd575f5ffd5b506102db61080c366004612afe565b6115fb565b34801561081c575f5ffd5b50610308611727565b348015610830575f5ffd5b5061035f61083f366004612d6f565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b348015610875575f5ffd5b506103087f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156108a8575f5ffd5b506103086108b7366004612a46565b611781565b3480156108c7575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156108fa575f5ffd5b506105f96117a3565b34801561090e575f5ffd5b5061074d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6109543361100e565b80610972575033730576a174d229e3cfa37253523e645a78a0c91b57145b610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084015b60405180910390fd5b60016006541115610a40576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff1615610ab1576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b610abb82826117c0565b5050600160065550565b5f5f5f5f610ae585602081015160408201516060909201515f1a92909190565b9094509250905060ff81165f03610bfb5782858301602001610b068261100e565b158015610b29575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610b5c57507fffffffff000000000000000000000000000000000000000000000000000000009450610c629350505050565b6040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690631626ba7e90610bb0908b908590600401612de6565b602060405180830381865afa158015610bcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bef9190612dfe565b95505050505050610c62565b610c0a6104a6878386866119d5565b15610c3b57507f1626ba7e000000000000000000000000000000000000000000000000000000009250610c62915050565b507fffffffff00000000000000000000000000000000000000000000000000000000925050505b92915050565b5f5f610c726119f1565b806020019051810190610c859190612e3d565b9392505050565b5f610c95611ac0565b610c9f8484611b3f565b9050610cae6040850185612e69565b90505f03610cbf57610cbf84611c13565b610c8582611c91565b610cd13361100e565b80610cef575033730576a174d229e3cfa37253523e645a78a0c91b57145b610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60016006541115610db8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff16610e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e1785856117c0565b805190915015610eab576005546040517f56d0819e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906356d0819e90610e7d908890859088908890600401612eca565b5f604051808303815f87803b158015610e94575f5ffd5b505af1158015610ea6573d5f5f3e3d5ffd5b505050505b50506001600655505050565b6002546060905f849003610ec9578093505b80610ed48486612f38565b1115610f2157610ee48385612f38565b6040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016109fa565b8315611007578367ffffffffffffffff811115610f4057610f40612880565b604051908082528060200260200182016040528015610f69578160200160208202803683370190505b505f808052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e4549193505b84811015610fbc575f828152600a60205260409020600101549150600101610f99565b505f5b858110156110045781848281518110610fda57610fda612f4b565b6020908102919091018101919091525f838152600a90915260409020600101549150600101610fbf565b50505b5092915050565b5f5f5f6110196119f1565b80602001905181019061102c9190612e3d565b915091508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161108291815260200190565b602060405180830381865afa15801561109d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190612f78565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611153576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b61115e838383611d05565b505050565b61116c3361100e565b8061118a575033730576a174d229e3cfa37253523e645a78a0c91b57145b611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60018190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a150565b5f61125a611727565b84848460405160200161126f93929190612f93565b604051602081830303815290604052805190602001206040516020016112c79291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b61130d6119f1565b5115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064016109fa565b61137e81611ead565b50565b6005545f9073ffffffffffffffffffffffffffffffffffffffff16156113ef576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b335f818152600c602052604090205461140a91908490611251565b335f908152600c6020526040812080549293509061142783612fd1565b9190505550611437338383611d05565b919050565b60606114473361100e565b80611465575033730576a174d229e3cfa37253523e645a78a0c91b57145b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b5f61150b878787878715611505578761201d565b5a61201d565b925090508061151c57815160208301fd5b5095945050505050565b5f818152600b602052604081205473ffffffffffffffffffffffffffffffffffffffff1615611437575f828152600a60205260408082208151808301928390529160029082845b81548152602001906001019080831161156d5750505050509050805f6002811061159957611599612f4b565b60200201511580156115ad57506020810151155b80156115e257505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548314155b156115f057600291506115f5565b600191505b50919050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461166e576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b5f818152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16806116c9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d38183612120565b8073ffffffffffffffffffffffffffffffffffffffff167fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd08360405161171b91815260200190565b60405180910390a25050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461175c57611757612273565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600a602052815f5260405f20816002811061179a575f80fd5b01549150829050565b5f5f6117ad6119f1565b806020019051810190610c629190612f78565b5f828152600b60205260408082205460055491517ff2e433bf0000000000000000000000000000000000000000000000000000000081526004810186905260609373ffffffffffffffffffffffffffffffffffffffff928316939092169063f2e433bf906024016080604051808303815f875af1158015611843573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118679190613008565b602081015190915073ffffffffffffffffffffffffffffffffffffffff1615611891575050610c62565b73ffffffffffffffffffffffffffffffffffffffff82166119275760055473ffffffffffffffffffffffffffffffffffffffff16156118d257806040015191505b73ffffffffffffffffffffffffffffffffffffffff8216611922576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018690526024016109fa565b611931565b6119318286612120565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040812080548695509161196483612fd1565b909155505060048054905f61197883612fd1565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f0cd979445339c62199996f208428d987b1cea24d18e62b79ec24d94b636e8b7086856040516119c5929190612de6565b60405180910390a2505092915050565b5f5f5f6119e487878787612371565b9150915061151c81612459565b6060611757611abb6040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b61260b565b33730576a174d229e3cfa37253523e645a78a0c91b5714611b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064016109fa565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81207f1626ba7e00000000000000000000000000000000000000000000000000000000611bd982611ba0610140880188612e69565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610ac592505050565b7fffffffff000000000000000000000000000000000000000000000000000000001614611c0a576001915050610c62565b505f9392505050565b5f805460208301359180611c2683612fd1565b919050551461137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016109fa565b801561137e576040515f9033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d805f8114611cf9576040519150601f19603f3d011682016040523d82523d5f602084013e611cfe565b606091505b5050505050565b611d10348284612660565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600760205260408120805491611d4083612fd1565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f908152600960205260408120805491611d7583612fd1565b90915550505f818152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055600a9091528082207f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e480546001830181905590859055808452918320849055600280547f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e394929392909190611e3c83612fd1565b909155505060038054905f611e5083612fd1565b91905055508573ffffffffffffffffffffffffffffffffffffffff167f4bda649efe6b98b0f9c1d5e859c29e20910f45c66dabfe6fad4a4881f7faf9cc8587604051611e9d929190612de6565b60405180910390a2505050505050565b5f611eb7826126aa565b90505f8151602083015ff09050611f896040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5772697465206661696c6564000000000000000000000000000000000000000060448201526064016109fa565b5f6060600184600181111561203457612034612d03565b036120a8578673ffffffffffffffffffffffffffffffffffffffff16838660405161205f91906130ac565b5f604051808303818686f4925050503d805f8114612098576040519150601f19603f3d011682016040523d82523d5f602084013e61209d565b606091505b509092509050612116565b8673ffffffffffffffffffffffffffffffffffffffff168387876040516120cf91906130ac565b5f60405180830381858888f193505050503d805f811461210a576040519150601f19603f3d011682016040523d82523d5f602084013e61210f565b606091505b5090925090505b9550959350505050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600960205260408120805491612150836130b7565b909155505060028054905f612164836130b7565b90915550505f818152600a60205260408082208151808301928390529160029082845b8154815260200190600101908083116121875750505050509050805f600281106121b3576121b3612f4b565b60200201511580156121c757506020810151155b80156121fc57505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548214155b15612236576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018390526024016109fa565b6020818101805183515f908152600a9093526040808420600190810192909255935191518352838320919091559281529081208181559091015550565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d0935256040518060400160405280600581526020017f312e312e300000000000000000000000000000000000000000000000000000008152506040516020016122fc9190612cf1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a657505f90506003612450565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123f7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661244a575f60019250925050612450565b91505f90505b94509492505050565b5f81600481111561246c5761246c612d03565b036124745750565b600181600481111561248857612488612d03565b036124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109fa565b600281600481111561250357612503612d03565b0361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109fa565b600381600481111561257e5761257e612d03565b0361137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016109fa565b6060813b6001811161262c57505060408051602081019091525f8152919050565b80612636816130b7565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b60015483101561115e576001546040517fb48978280000000000000000000000000000000000000000000000000000000081526109fa918591600401918252602082015260400190565b6060815160016126ba9190612f38565b826040516020016126cc9291906130eb565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461137e575f5ffd5b5f5f83601f840112612713575f5ffd5b50813567ffffffffffffffff81111561272a575f5ffd5b602083019150836020828501011115612741575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561275f575f5ffd5b883561276a816126e2565b9750602089013561277a816126e2565b9650604089013561278a816126e2565b955060608901359450608089013567ffffffffffffffff8111156127ac575f5ffd5b6127b88b828c01612703565b90955093505060a089013567ffffffffffffffff8111156127d7575f5ffd5b6127e38b828c01612703565b999c989b5096995094979396929594505050565b5f60208284031215612807575f5ffd5b8135610c85816126e2565b5f5f5f5f5f60808688031215612826575f5ffd5b8535612831816126e2565b94506020860135612841816126e2565b935060408601359250606086013567ffffffffffffffff811115612863575f5ffd5b61286f88828901612703565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126128bc575f5ffd5b813567ffffffffffffffff8111156128d6576128d6612880565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561292357612923612880565b60405281815283820160200185101561293a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612967575f5ffd5b82359150602083013567ffffffffffffffff811115612984575f5ffd5b612990858286016128ad565b9150509250929050565b5f5f5f606084860312156129ac575f5ffd5b833567ffffffffffffffff8111156129c2575f5ffd5b840161016081870312156129d4575f5ffd5b95602085013595506040909401359392505050565b5f5f5f5f608085870312156129fc575f5ffd5b84359350602085013567ffffffffffffffff811115612a19575f5ffd5b612a25878288016128ad565b9350506040850135612a36816126e2565b9396929550929360600135925050565b5f5f60408385031215612a57575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612a9d578351835260209384019390920191600101612a7f565b509095945050505050565b5f5f5f60608486031215612aba575f5ffd5b8335612ac5816126e2565b9250602084013567ffffffffffffffff811115612ae0575f5ffd5b612aec868287016128ad565b93969395505050506040919091013590565b5f60208284031215612b0e575f5ffd5b5035919050565b5f60208284031215612b25575f5ffd5b813567ffffffffffffffff811115612b3b575f5ffd5b612b47848285016128ad565b949350505050565b5f5f83601f840112612b5f575f5ffd5b50813567ffffffffffffffff811115612b76575f5ffd5b6020830191508360208260051b8501011115612741575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612ba7575f5ffd5b8835612bb2816126e2565b97506020890135612bc2816126e2565b9650604089013567ffffffffffffffff811115612bdd575f5ffd5b612be98b828c01612b4f565b909750955050606089013567ffffffffffffffff811115612c08575f5ffd5b612c148b828c01612b4f565b909550935050608089013567ffffffffffffffff8111156127d7575f5ffd5b5f5f5f5f5f60a08688031215612c47575f5ffd5b8535612c52816126e2565b945060208601359350604086013567ffffffffffffffff811115612c74575f5ffd5b612c80888289016128ad565b935050606086013560028110612c94575f5ffd5b949793965091946080013592915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610c856020830184612ca5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612d69577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f5f5f5f5f5f60a08789031215612d84575f5ffd5b8635612d8f816126e2565b95506020870135612d9f816126e2565b94506040870135935060608701359250608087013567ffffffffffffffff811115612dc8575f5ffd5b612dd489828a01612703565b979a9699509497509295939492505050565b828152604060208201525f612b476040830184612ca5565b5f60208284031215612e0e575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c85575f5ffd5b5f5f60408385031215612e4e575f5ffd5b8251612e59816126e2565b6020939093015192949293505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e9c575f5ffd5b83018035915067ffffffffffffffff821115612eb6575f5ffd5b602001915036819003821315612741575f5ffd5b848152608060208201525f612ee26080830186612ca5565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c6257610c62612f0b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612f88575f5ffd5b8151610c85816126e2565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f612fc16060830185612ca5565b9050826040830152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300157613001612f0b565b5060010190565b5f6080828403128015613019575f5ffd5b506040516080810167ffffffffffffffff8111828210171561303d5761303d612880565b604052825161304b816126e2565b8152602083015161305b816126e2565b6020820152604083015161306e816126e2565b6040820152606083015163ffffffff81168114613089575f5ffd5b60608201529392505050565b5f81518060208401855e5f93019283525090919050565b5f610c858284613095565b5f816130c5576130c5612f0b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f630000000000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008360e01b1660018201527f80600e6000396000f3000000000000000000000000000000000000000000000060058201525f600e8201525f612b47600f83018461309556fea2646970667358221220959b491a03df420a39d9217bff79fea47ed3d14b1b9e42dcdf18b41c9b14edca64736f6c634300081b0033a2646970667358221220e22adbd43bc3fea7d153c26066457f821c1d3642b50b27a868be63d09b94812164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/0.8.27/AgentMech.json b/abis/0.8.27/AgentMech.json new file mode 100644 index 0000000..202636c --- /dev/null +++ b/abis/0.8.27/AgentMech.json @@ -0,0 +1,1083 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AgentMech", + "sourceName": "contracts/AgentMech.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_mechMarketplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "agentId", + "type": "uint256" + } + ], + "name": "AgentNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "mechMarketplace", + "type": "address" + } + ], + "name": "MarketplaceExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "MarketplaceOnly", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "NotEnoughPaid", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "Overflow", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuard", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "RequestIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "Deliver", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "mechMarketplace", + "type": "address" + } + ], + "name": "MechMarketplaceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "PriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "Request", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "RevokeRequest", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR_TYPE_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "deliver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "mechStakingInstance", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mechServiceId", + "type": "uint256" + } + ], + "name": "deliverToMarketplace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "entryPoint", + "outputs": [ + { + "internalType": "contract IEntryPoint", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "txGas", + "type": "uint256" + } + ], + "name": "exec", + "outputs": [ + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getDeliveriesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "getRequestId", + "outputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "getRequestStatus", + "outputs": [ + { + "internalType": "enum AgentMech.RequestStatus", + "name": "status", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getRequestsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getUndeliveredRequestIds", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapDeliveryCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapNonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapRequestAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapRequestCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapRequestIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mapUndeliveredRequestsCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mechMarketplace", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numTotalDeliveries", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numTotalRequests", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numUndeliveredRequests", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "request", + "outputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "requestFromMarketplace", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "revokeRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "setPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initParams", + "type": "bytes" + } + ], + "name": "setUp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC721", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tokenId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokensReceived", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "callGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "verificationGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60c06040525f5f556001600655348015610017575f5ffd5b5060405161376d38038061376d83398101604081905261003691610469565b604080516001600160a01b038616602082015280820185905281518082038301815260609091019091528490849061006d8161016b565b5050506001600160a01b0384166100975760405163d92e233d60e01b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018490525f906001600160a01b03861690636352211e90602401602060405180830381865afa1580156100dc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061010091906104ad565b90506001600160a01b03811661013157604051630ede975960e01b8152600481018590526024015b60405180910390fd5b600580546001600160a01b0319166001600160a01b03841617905560018390554660a05261015d6101cd565b608052506105959350505050565b610173610295565b51156101c15760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610128565b6101ca816102fd565b50565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d093525604051806040016040528060058152602001640312e312e360dc1b81525060405160200161023e91906104cd565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60606102f86102f3604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6103c1565b905090565b5f61030782610416565b90505f8151602083015ff0905061036d604051606b60f91b6020820152602560fa1b60218201526001600160601b03193060601b166022820152600160f81b60368201525f90603701604051602081830303815290604052805190602001205f1c905090565b6001600160a01b0316816001600160a01b0316146103bc5760405162461bcd60e51b815260206004820152600c60248201526b15dc9a5d194819985a5b195960a21b6044820152606401610128565b505050565b6060813b600181116103e257505060408051602081019091525f8152919050565b806103ec81610516565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b606081516001610426919061052b565b82604051602001610438929190610544565b6040516020818303038152906040529050919050565b80516001600160a01b0381168114610464575f5ffd5b919050565b5f5f5f5f6080858703121561047c575f5ffd5b6104858561044e565b60208601516040870151919550935091506104a26060860161044e565b905092959194509250565b5f602082840312156104bd575f5ffd5b6104c68261044e565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f8161052457610524610502565b505f190190565b8082018082111561053e5761053e610502565b92915050565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b60058201525f600e820181905282518060208501600f85015e5f9201600f019182525092915050565b60805160a0516131a96105c45f395f81816105ab015261172a01525f81816108cd015261175f01526131a95ff3fe6080604052600436106102ac575f3560e01c8063a035b1fe11610165578063d843b7f4116100c6578063f5dcb7bb1161007c578063f698da2511610062578063f698da25146108bc578063fc0c546a146108ef578063ffa1ad7414610903575f5ffd5b8063f5dcb7bb1461086a578063f6171e441461089d575f5ffd5b8063e7d915cf116100ac578063e7d915cf146107f2578063ed24911d14610811578063f23a6e6114610825575f5ffd5b8063d843b7f414610785578063d8a4676f146107c6575f5ffd5b8063b94207d31161011b578063bdf8631711610101578063bdf8631714610719578063c7dec3fc1461072e578063cbd6407a1461075a575f5ffd5b8063b94207d3146106bf578063bc197c81146106d2575f5ffd5b8063a669aaf91161014b578063a669aaf914610671578063affed0e014610686578063b0d691fe14610699575f5ffd5b8063a035b1fe1461063d578063a4f9edbf14610652575f5ffd5b806358ce09091161020f57806391b7f5ed116101c55780639a8a0592116101ab5780639a8a05921461059a5780639c5e9590146105cd5780639ec4a5bf1461061e575f5ffd5b806391b7f5ed14610550578063982c0db31461056f575f5ffd5b806379412518116101f557806379412518146104bb5780637af73473146104ce5780638fb847ef1461050f575f5ffd5b806358ce0909146104605780636d70f7ae1461048c575f5ffd5b806317d70f7c116102645780633a871cdd1161024a5780633a871cdd1461040d5780634954bbf11461042c5780634ada3e611461044b575f5ffd5b806317d70f7c146103ce5780631bbbeeb8146103e2575f5ffd5b8063150b7a0211610294578063150b7a021461031b578063157305fe146103905780631626ba7e146103af575f5ffd5b806223de29146102b7578062427c54146102dd575f5ffd5b366102b357005b5f5ffd5b3480156102c2575f5ffd5b506102db6102d1366004612748565b5050505050505050565b005b3480156102e8575f5ffd5b506103086102f73660046127f7565b60086020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610326575f5ffd5b5061035f610335366004612812565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610312565b34801561039b575f5ffd5b506102db6103aa366004612956565b61094b565b3480156103ba575f5ffd5b5061035f6103c9366004612956565b610ac5565b3480156103d9575f5ffd5b50610308610c68565b3480156103ed575f5ffd5b506103086103fc3660046127f7565b60076020525f908152604090205481565b348015610418575f5ffd5b5061030861042736600461299a565b610c8c565b348015610437575f5ffd5b506102db6104463660046129e9565b610cc8565b348015610456575f5ffd5b5061030860035481565b34801561046b575f5ffd5b5061047f61047a366004612a46565b610eb7565b6040516103129190612a66565b348015610497575f5ffd5b506104ab6104a63660046127f7565b61100e565b6040519015158152602001610312565b6102db6104c9366004612aa8565b6110e0565b3480156104d9575f5ffd5b506103086104e83660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b34801561051a575f5ffd5b506103086105293660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526008602052604090205490565b34801561055b575f5ffd5b506102db61056a366004612afe565b611163565b34801561057a575f5ffd5b506103086105893660046127f7565b60096020525f908152604090205481565b3480156105a5575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d8575f5ffd5b506005546105f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610312565b348015610629575f5ffd5b50610308610638366004612aa8565b611251565b348015610648575f5ffd5b5061030860015481565b34801561065d575f5ffd5b506102db61066c366004612b15565b611305565b34801561067c575f5ffd5b5061030860045481565b348015610691575f5ffd5b505f54610308565b3480156106a4575f5ffd5b50730576a174d229e3cfa37253523e645a78a0c91b576105f9565b6103086106cd366004612b15565b611381565b3480156106dd575f5ffd5b5061035f6106ec366004612b90565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b348015610724575f5ffd5b5061030860025481565b348015610739575f5ffd5b5061074d610748366004612c33565b61143c565b6040516103129190612cf1565b348015610765575f5ffd5b506103086107743660046127f7565b600c6020525f908152604090205481565b348015610790575f5ffd5b506105f961079f366004612afe565b600b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d1575f5ffd5b506107e56107e0366004612afe565b611526565b6040516103129190612d30565b3480156107fd575f5ffd5b506102db61080c366004612afe565b6115fb565b34801561081c575f5ffd5b50610308611727565b348015610830575f5ffd5b5061035f61083f366004612d6f565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b348015610875575f5ffd5b506103087f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156108a8575f5ffd5b506103086108b7366004612a46565b611781565b3480156108c7575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156108fa575f5ffd5b506105f96117a3565b34801561090e575f5ffd5b5061074d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6109543361100e565b80610972575033730576a174d229e3cfa37253523e645a78a0c91b57145b610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084015b60405180910390fd5b60016006541115610a40576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff1615610ab1576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b610abb82826117c0565b5050600160065550565b5f5f5f5f610ae585602081015160408201516060909201515f1a92909190565b9094509250905060ff81165f03610bfb5782858301602001610b068261100e565b158015610b29575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610b5c57507fffffffff000000000000000000000000000000000000000000000000000000009450610c629350505050565b6040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690631626ba7e90610bb0908b908590600401612de6565b602060405180830381865afa158015610bcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bef9190612dfe565b95505050505050610c62565b610c0a6104a6878386866119d5565b15610c3b57507f1626ba7e000000000000000000000000000000000000000000000000000000009250610c62915050565b507fffffffff00000000000000000000000000000000000000000000000000000000925050505b92915050565b5f5f610c726119f1565b806020019051810190610c859190612e3d565b9392505050565b5f610c95611ac0565b610c9f8484611b3f565b9050610cae6040850185612e69565b90505f03610cbf57610cbf84611c13565b610c8582611c91565b610cd13361100e565b80610cef575033730576a174d229e3cfa37253523e645a78a0c91b57145b610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60016006541115610db8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff16610e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e1785856117c0565b805190915015610eab576005546040517f56d0819e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906356d0819e90610e7d908890859088908890600401612eca565b5f604051808303815f87803b158015610e94575f5ffd5b505af1158015610ea6573d5f5f3e3d5ffd5b505050505b50506001600655505050565b6002546060905f849003610ec9578093505b80610ed48486612f38565b1115610f2157610ee48385612f38565b6040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016109fa565b8315611007578367ffffffffffffffff811115610f4057610f40612880565b604051908082528060200260200182016040528015610f69578160200160208202803683370190505b505f808052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e4549193505b84811015610fbc575f828152600a60205260409020600101549150600101610f99565b505f5b858110156110045781848281518110610fda57610fda612f4b565b6020908102919091018101919091525f838152600a90915260409020600101549150600101610fbf565b50505b5092915050565b5f5f5f6110196119f1565b80602001905181019061102c9190612e3d565b915091508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161108291815260200190565b602060405180830381865afa15801561109d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190612f78565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611153576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b61115e838383611d05565b505050565b61116c3361100e565b8061118a575033730576a174d229e3cfa37253523e645a78a0c91b57145b611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60018190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a150565b5f61125a611727565b84848460405160200161126f93929190612f93565b604051602081830303815290604052805190602001206040516020016112c79291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b61130d6119f1565b5115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064016109fa565b61137e81611ead565b50565b6005545f9073ffffffffffffffffffffffffffffffffffffffff16156113ef576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b335f818152600c602052604090205461140a91908490611251565b335f908152600c6020526040812080549293509061142783612fd1565b9190505550611437338383611d05565b919050565b60606114473361100e565b80611465575033730576a174d229e3cfa37253523e645a78a0c91b57145b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b5f61150b878787878715611505578761201d565b5a61201d565b925090508061151c57815160208301fd5b5095945050505050565b5f818152600b602052604081205473ffffffffffffffffffffffffffffffffffffffff1615611437575f828152600a60205260408082208151808301928390529160029082845b81548152602001906001019080831161156d5750505050509050805f6002811061159957611599612f4b565b60200201511580156115ad57506020810151155b80156115e257505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548314155b156115f057600291506115f5565b600191505b50919050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461166e576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b5f818152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16806116c9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d38183612120565b8073ffffffffffffffffffffffffffffffffffffffff167fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd08360405161171b91815260200190565b60405180910390a25050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461175c57611757612273565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600a602052815f5260405f20816002811061179a575f80fd5b01549150829050565b5f5f6117ad6119f1565b806020019051810190610c629190612f78565b5f828152600b60205260408082205460055491517ff2e433bf0000000000000000000000000000000000000000000000000000000081526004810186905260609373ffffffffffffffffffffffffffffffffffffffff928316939092169063f2e433bf906024016080604051808303815f875af1158015611843573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118679190613008565b602081015190915073ffffffffffffffffffffffffffffffffffffffff1615611891575050610c62565b73ffffffffffffffffffffffffffffffffffffffff82166119275760055473ffffffffffffffffffffffffffffffffffffffff16156118d257806040015191505b73ffffffffffffffffffffffffffffffffffffffff8216611922576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018690526024016109fa565b611931565b6119318286612120565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040812080548695509161196483612fd1565b909155505060048054905f61197883612fd1565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f0cd979445339c62199996f208428d987b1cea24d18e62b79ec24d94b636e8b7086856040516119c5929190612de6565b60405180910390a2505092915050565b5f5f5f6119e487878787612371565b9150915061151c81612459565b6060611757611abb6040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b61260b565b33730576a174d229e3cfa37253523e645a78a0c91b5714611b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064016109fa565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81207f1626ba7e00000000000000000000000000000000000000000000000000000000611bd982611ba0610140880188612e69565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610ac592505050565b7fffffffff000000000000000000000000000000000000000000000000000000001614611c0a576001915050610c62565b505f9392505050565b5f805460208301359180611c2683612fd1565b919050551461137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016109fa565b801561137e576040515f9033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d805f8114611cf9576040519150601f19603f3d011682016040523d82523d5f602084013e611cfe565b606091505b5050505050565b611d10348284612660565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600760205260408120805491611d4083612fd1565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f908152600960205260408120805491611d7583612fd1565b90915550505f818152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055600a9091528082207f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e480546001830181905590859055808452918320849055600280547f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e394929392909190611e3c83612fd1565b909155505060038054905f611e5083612fd1565b91905055508573ffffffffffffffffffffffffffffffffffffffff167f4bda649efe6b98b0f9c1d5e859c29e20910f45c66dabfe6fad4a4881f7faf9cc8587604051611e9d929190612de6565b60405180910390a2505050505050565b5f611eb7826126aa565b90505f8151602083015ff09050611f896040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5772697465206661696c6564000000000000000000000000000000000000000060448201526064016109fa565b5f6060600184600181111561203457612034612d03565b036120a8578673ffffffffffffffffffffffffffffffffffffffff16838660405161205f91906130ac565b5f604051808303818686f4925050503d805f8114612098576040519150601f19603f3d011682016040523d82523d5f602084013e61209d565b606091505b509092509050612116565b8673ffffffffffffffffffffffffffffffffffffffff168387876040516120cf91906130ac565b5f60405180830381858888f193505050503d805f811461210a576040519150601f19603f3d011682016040523d82523d5f602084013e61210f565b606091505b5090925090505b9550959350505050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600960205260408120805491612150836130b7565b909155505060028054905f612164836130b7565b90915550505f818152600a60205260408082208151808301928390529160029082845b8154815260200190600101908083116121875750505050509050805f600281106121b3576121b3612f4b565b60200201511580156121c757506020810151155b80156121fc57505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548214155b15612236576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018390526024016109fa565b6020818101805183515f908152600a9093526040808420600190810192909255935191518352838320919091559281529081208181559091015550565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d0935256040518060400160405280600581526020017f312e312e300000000000000000000000000000000000000000000000000000008152506040516020016122fc9190612cf1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a657505f90506003612450565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123f7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661244a575f60019250925050612450565b91505f90505b94509492505050565b5f81600481111561246c5761246c612d03565b036124745750565b600181600481111561248857612488612d03565b036124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109fa565b600281600481111561250357612503612d03565b0361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109fa565b600381600481111561257e5761257e612d03565b0361137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016109fa565b6060813b6001811161262c57505060408051602081019091525f8152919050565b80612636816130b7565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b60015483101561115e576001546040517fb48978280000000000000000000000000000000000000000000000000000000081526109fa918591600401918252602082015260400190565b6060815160016126ba9190612f38565b826040516020016126cc9291906130eb565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461137e575f5ffd5b5f5f83601f840112612713575f5ffd5b50813567ffffffffffffffff81111561272a575f5ffd5b602083019150836020828501011115612741575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561275f575f5ffd5b883561276a816126e2565b9750602089013561277a816126e2565b9650604089013561278a816126e2565b955060608901359450608089013567ffffffffffffffff8111156127ac575f5ffd5b6127b88b828c01612703565b90955093505060a089013567ffffffffffffffff8111156127d7575f5ffd5b6127e38b828c01612703565b999c989b5096995094979396929594505050565b5f60208284031215612807575f5ffd5b8135610c85816126e2565b5f5f5f5f5f60808688031215612826575f5ffd5b8535612831816126e2565b94506020860135612841816126e2565b935060408601359250606086013567ffffffffffffffff811115612863575f5ffd5b61286f88828901612703565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126128bc575f5ffd5b813567ffffffffffffffff8111156128d6576128d6612880565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561292357612923612880565b60405281815283820160200185101561293a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612967575f5ffd5b82359150602083013567ffffffffffffffff811115612984575f5ffd5b612990858286016128ad565b9150509250929050565b5f5f5f606084860312156129ac575f5ffd5b833567ffffffffffffffff8111156129c2575f5ffd5b840161016081870312156129d4575f5ffd5b95602085013595506040909401359392505050565b5f5f5f5f608085870312156129fc575f5ffd5b84359350602085013567ffffffffffffffff811115612a19575f5ffd5b612a25878288016128ad565b9350506040850135612a36816126e2565b9396929550929360600135925050565b5f5f60408385031215612a57575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612a9d578351835260209384019390920191600101612a7f565b509095945050505050565b5f5f5f60608486031215612aba575f5ffd5b8335612ac5816126e2565b9250602084013567ffffffffffffffff811115612ae0575f5ffd5b612aec868287016128ad565b93969395505050506040919091013590565b5f60208284031215612b0e575f5ffd5b5035919050565b5f60208284031215612b25575f5ffd5b813567ffffffffffffffff811115612b3b575f5ffd5b612b47848285016128ad565b949350505050565b5f5f83601f840112612b5f575f5ffd5b50813567ffffffffffffffff811115612b76575f5ffd5b6020830191508360208260051b8501011115612741575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612ba7575f5ffd5b8835612bb2816126e2565b97506020890135612bc2816126e2565b9650604089013567ffffffffffffffff811115612bdd575f5ffd5b612be98b828c01612b4f565b909750955050606089013567ffffffffffffffff811115612c08575f5ffd5b612c148b828c01612b4f565b909550935050608089013567ffffffffffffffff8111156127d7575f5ffd5b5f5f5f5f5f60a08688031215612c47575f5ffd5b8535612c52816126e2565b945060208601359350604086013567ffffffffffffffff811115612c74575f5ffd5b612c80888289016128ad565b935050606086013560028110612c94575f5ffd5b949793965091946080013592915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610c856020830184612ca5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612d69577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f5f5f5f5f5f60a08789031215612d84575f5ffd5b8635612d8f816126e2565b95506020870135612d9f816126e2565b94506040870135935060608701359250608087013567ffffffffffffffff811115612dc8575f5ffd5b612dd489828a01612703565b979a9699509497509295939492505050565b828152604060208201525f612b476040830184612ca5565b5f60208284031215612e0e575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c85575f5ffd5b5f5f60408385031215612e4e575f5ffd5b8251612e59816126e2565b6020939093015192949293505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e9c575f5ffd5b83018035915067ffffffffffffffff821115612eb6575f5ffd5b602001915036819003821315612741575f5ffd5b848152608060208201525f612ee26080830186612ca5565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c6257610c62612f0b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612f88575f5ffd5b8151610c85816126e2565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f612fc16060830185612ca5565b9050826040830152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300157613001612f0b565b5060010190565b5f6080828403128015613019575f5ffd5b506040516080810167ffffffffffffffff8111828210171561303d5761303d612880565b604052825161304b816126e2565b8152602083015161305b816126e2565b6020820152604083015161306e816126e2565b6040820152606083015163ffffffff81168114613089575f5ffd5b60608201529392505050565b5f81518060208401855e5f93019283525090919050565b5f610c858284613095565b5f816130c5576130c5612f0b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f630000000000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008360e01b1660018201527f80600e6000396000f3000000000000000000000000000000000000000000000060058201525f600e8201525f612b47600f83018461309556fea2646970667358221220959b491a03df420a39d9217bff79fea47ed3d14b1b9e42dcdf18b41c9b14edca64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102ac575f3560e01c8063a035b1fe11610165578063d843b7f4116100c6578063f5dcb7bb1161007c578063f698da2511610062578063f698da25146108bc578063fc0c546a146108ef578063ffa1ad7414610903575f5ffd5b8063f5dcb7bb1461086a578063f6171e441461089d575f5ffd5b8063e7d915cf116100ac578063e7d915cf146107f2578063ed24911d14610811578063f23a6e6114610825575f5ffd5b8063d843b7f414610785578063d8a4676f146107c6575f5ffd5b8063b94207d31161011b578063bdf8631711610101578063bdf8631714610719578063c7dec3fc1461072e578063cbd6407a1461075a575f5ffd5b8063b94207d3146106bf578063bc197c81146106d2575f5ffd5b8063a669aaf91161014b578063a669aaf914610671578063affed0e014610686578063b0d691fe14610699575f5ffd5b8063a035b1fe1461063d578063a4f9edbf14610652575f5ffd5b806358ce09091161020f57806391b7f5ed116101c55780639a8a0592116101ab5780639a8a05921461059a5780639c5e9590146105cd5780639ec4a5bf1461061e575f5ffd5b806391b7f5ed14610550578063982c0db31461056f575f5ffd5b806379412518116101f557806379412518146104bb5780637af73473146104ce5780638fb847ef1461050f575f5ffd5b806358ce0909146104605780636d70f7ae1461048c575f5ffd5b806317d70f7c116102645780633a871cdd1161024a5780633a871cdd1461040d5780634954bbf11461042c5780634ada3e611461044b575f5ffd5b806317d70f7c146103ce5780631bbbeeb8146103e2575f5ffd5b8063150b7a0211610294578063150b7a021461031b578063157305fe146103905780631626ba7e146103af575f5ffd5b806223de29146102b7578062427c54146102dd575f5ffd5b366102b357005b5f5ffd5b3480156102c2575f5ffd5b506102db6102d1366004612748565b5050505050505050565b005b3480156102e8575f5ffd5b506103086102f73660046127f7565b60086020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610326575f5ffd5b5061035f610335366004612812565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610312565b34801561039b575f5ffd5b506102db6103aa366004612956565b61094b565b3480156103ba575f5ffd5b5061035f6103c9366004612956565b610ac5565b3480156103d9575f5ffd5b50610308610c68565b3480156103ed575f5ffd5b506103086103fc3660046127f7565b60076020525f908152604090205481565b348015610418575f5ffd5b5061030861042736600461299a565b610c8c565b348015610437575f5ffd5b506102db6104463660046129e9565b610cc8565b348015610456575f5ffd5b5061030860035481565b34801561046b575f5ffd5b5061047f61047a366004612a46565b610eb7565b6040516103129190612a66565b348015610497575f5ffd5b506104ab6104a63660046127f7565b61100e565b6040519015158152602001610312565b6102db6104c9366004612aa8565b6110e0565b3480156104d9575f5ffd5b506103086104e83660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b34801561051a575f5ffd5b506103086105293660046127f7565b73ffffffffffffffffffffffffffffffffffffffff165f9081526008602052604090205490565b34801561055b575f5ffd5b506102db61056a366004612afe565b611163565b34801561057a575f5ffd5b506103086105893660046127f7565b60096020525f908152604090205481565b3480156105a5575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d8575f5ffd5b506005546105f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610312565b348015610629575f5ffd5b50610308610638366004612aa8565b611251565b348015610648575f5ffd5b5061030860015481565b34801561065d575f5ffd5b506102db61066c366004612b15565b611305565b34801561067c575f5ffd5b5061030860045481565b348015610691575f5ffd5b505f54610308565b3480156106a4575f5ffd5b50730576a174d229e3cfa37253523e645a78a0c91b576105f9565b6103086106cd366004612b15565b611381565b3480156106dd575f5ffd5b5061035f6106ec366004612b90565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b348015610724575f5ffd5b5061030860025481565b348015610739575f5ffd5b5061074d610748366004612c33565b61143c565b6040516103129190612cf1565b348015610765575f5ffd5b506103086107743660046127f7565b600c6020525f908152604090205481565b348015610790575f5ffd5b506105f961079f366004612afe565b600b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107d1575f5ffd5b506107e56107e0366004612afe565b611526565b6040516103129190612d30565b3480156107fd575f5ffd5b506102db61080c366004612afe565b6115fb565b34801561081c575f5ffd5b50610308611727565b348015610830575f5ffd5b5061035f61083f366004612d6f565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b348015610875575f5ffd5b506103087f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156108a8575f5ffd5b506103086108b7366004612a46565b611781565b3480156108c7575f5ffd5b506103087f000000000000000000000000000000000000000000000000000000000000000081565b3480156108fa575f5ffd5b506105f96117a3565b34801561090e575f5ffd5b5061074d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6109543361100e565b80610972575033730576a174d229e3cfa37253523e645a78a0c91b57145b610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084015b60405180910390fd5b60016006541115610a40576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff1615610ab1576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b610abb82826117c0565b5050600160065550565b5f5f5f5f610ae585602081015160408201516060909201515f1a92909190565b9094509250905060ff81165f03610bfb5782858301602001610b068261100e565b158015610b29575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610b5c57507fffffffff000000000000000000000000000000000000000000000000000000009450610c629350505050565b6040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690631626ba7e90610bb0908b908590600401612de6565b602060405180830381865afa158015610bcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bef9190612dfe565b95505050505050610c62565b610c0a6104a6878386866119d5565b15610c3b57507f1626ba7e000000000000000000000000000000000000000000000000000000009250610c62915050565b507fffffffff00000000000000000000000000000000000000000000000000000000925050505b92915050565b5f5f610c726119f1565b806020019051810190610c859190612e3d565b9392505050565b5f610c95611ac0565b610c9f8484611b3f565b9050610cae6040850185612e69565b90505f03610cbf57610cbf84611c13565b610c8582611c91565b610cd13361100e565b80610cef575033730576a174d229e3cfa37253523e645a78a0c91b57145b610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60016006541115610db8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260065560055473ffffffffffffffffffffffffffffffffffffffff16610e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e1785856117c0565b805190915015610eab576005546040517f56d0819e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906356d0819e90610e7d908890859088908890600401612eca565b5f604051808303815f87803b158015610e94575f5ffd5b505af1158015610ea6573d5f5f3e3d5ffd5b505050505b50506001600655505050565b6002546060905f849003610ec9578093505b80610ed48486612f38565b1115610f2157610ee48385612f38565b6040517f7ae596850000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016109fa565b8315611007578367ffffffffffffffff811115610f4057610f40612880565b604051908082528060200260200182016040528015610f69578160200160208202803683370190505b505f808052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e4549193505b84811015610fbc575f828152600a60205260409020600101549150600101610f99565b505f5b858110156110045781848281518110610fda57610fda612f4b565b6020908102919091018101919091525f838152600a90915260409020600101549150600101610fbf565b50505b5092915050565b5f5f5f6110196119f1565b80602001905181019061102c9190612e3d565b915091508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161108291815260200190565b602060405180830381865afa15801561109d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c19190612f78565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314611153576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b61115e838383611d05565b505050565b61116c3361100e565b8061118a575033730576a174d229e3cfa37253523e645a78a0c91b57145b611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b60018190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a150565b5f61125a611727565b84848460405160200161126f93929190612f93565b604051602081830303815290604052805190602001206040516020016112c79291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b61130d6119f1565b5115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064016109fa565b61137e81611ead565b50565b6005545f9073ffffffffffffffffffffffffffffffffffffffff16156113ef576005546040517f4b6c692700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109fa565b335f818152600c602052604090205461140a91908490611251565b335f908152600c6020526040812080549293509061142783612fd1565b9190505550611437338383611d05565b919050565b60606114473361100e565b80611465575033730576a174d229e3cfa37253523e645a78a0c91b57145b6114f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4f6e6c792063616c6c61626c6520627920746865206d656368206f706572617460448201527f6f72206f722074686520656e74727920706f696e7420636f6e7472616374000060648201526084016109fa565b5f61150b878787878715611505578761201d565b5a61201d565b925090508061151c57815160208301fd5b5095945050505050565b5f818152600b602052604081205473ffffffffffffffffffffffffffffffffffffffff1615611437575f828152600a60205260408082208151808301928390529160029082845b81548152602001906001019080831161156d5750505050509050805f6002811061159957611599612f4b565b60200201511580156115ad57506020810151155b80156115e257505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548314155b156115f057600291506115f5565b600191505b50919050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461166e576005546040517fe56895c000000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016109fa565b5f818152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16806116c9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d38183612120565b8073ffffffffffffffffffffffffffffffffffffffff167fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd08360405161171b91815260200190565b60405180910390a25050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461175c57611757612273565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b600a602052815f5260405f20816002811061179a575f80fd5b01549150829050565b5f5f6117ad6119f1565b806020019051810190610c629190612f78565b5f828152600b60205260408082205460055491517ff2e433bf0000000000000000000000000000000000000000000000000000000081526004810186905260609373ffffffffffffffffffffffffffffffffffffffff928316939092169063f2e433bf906024016080604051808303815f875af1158015611843573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118679190613008565b602081015190915073ffffffffffffffffffffffffffffffffffffffff1615611891575050610c62565b73ffffffffffffffffffffffffffffffffffffffff82166119275760055473ffffffffffffffffffffffffffffffffffffffff16156118d257806040015191505b73ffffffffffffffffffffffffffffffffffffffff8216611922576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018690526024016109fa565b611931565b6119318286612120565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040812080548695509161196483612fd1565b909155505060048054905f61197883612fd1565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f0cd979445339c62199996f208428d987b1cea24d18e62b79ec24d94b636e8b7086856040516119c5929190612de6565b60405180910390a2505092915050565b5f5f5f6119e487878787612371565b9150915061151c81612459565b6060611757611abb6040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b61260b565b33730576a174d229e3cfa37253523e645a78a0c91b5714611b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064016109fa565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81207f1626ba7e00000000000000000000000000000000000000000000000000000000611bd982611ba0610140880188612e69565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610ac592505050565b7fffffffff000000000000000000000000000000000000000000000000000000001614611c0a576001915050610c62565b505f9392505050565b5f805460208301359180611c2683612fd1565b919050551461137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016109fa565b801561137e576040515f9033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d805f8114611cf9576040519150601f19603f3d011682016040523d82523d5f602084013e611cfe565b606091505b5050505050565b611d10348284612660565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600760205260408120805491611d4083612fd1565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f908152600960205260408120805491611d7583612fd1565b90915550505f818152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055600a9091528082207f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e480546001830181905590859055808452918320849055600280547f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e394929392909190611e3c83612fd1565b909155505060038054905f611e5083612fd1565b91905055508573ffffffffffffffffffffffffffffffffffffffff167f4bda649efe6b98b0f9c1d5e859c29e20910f45c66dabfe6fad4a4881f7faf9cc8587604051611e9d929190612de6565b60405180910390a2505050505050565b5f611eb7826126aa565b90505f8151602083015ff09050611f896040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f010000000000000000000000000000000000000000000000000000000000000060368201525f90603701604051602081830303815290604052805190602001205f1c905090565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5772697465206661696c6564000000000000000000000000000000000000000060448201526064016109fa565b5f6060600184600181111561203457612034612d03565b036120a8578673ffffffffffffffffffffffffffffffffffffffff16838660405161205f91906130ac565b5f604051808303818686f4925050503d805f8114612098576040519150601f19603f3d011682016040523d82523d5f602084013e61209d565b606091505b509092509050612116565b8673ffffffffffffffffffffffffffffffffffffffff168387876040516120cf91906130ac565b5f60405180830381858888f193505050503d805f811461210a576040519150601f19603f3d011682016040523d82523d5f602084013e61210f565b606091505b5090925090505b9550959350505050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600960205260408120805491612150836130b7565b909155505060028054905f612164836130b7565b90915550505f818152600a60205260408082208151808301928390529160029082845b8154815260200190600101908083116121875750505050509050805f600281106121b3576121b3612f4b565b60200201511580156121c757506020810151155b80156121fc57505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3548214155b15612236576040517ffe239804000000000000000000000000000000000000000000000000000000008152600481018390526024016109fa565b6020818101805183515f908152600a9093526040808420600190810192909255935191518352838320919091559281529081208181559091015550565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f493aeac1d921aa02a044029e7fe4be43b1a4e80b40706fa5819e8fbb0d0935256040518060400160405280600581526020017f312e312e300000000000000000000000000000000000000000000000000000008152506040516020016122fc9190612cf1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a657505f90506003612450565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123f7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661244a575f60019250925050612450565b91505f90505b94509492505050565b5f81600481111561246c5761246c612d03565b036124745750565b600181600481111561248857612488612d03565b036124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109fa565b600281600481111561250357612503612d03565b0361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109fa565b600381600481111561257e5761257e612d03565b0361137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016109fa565b6060813b6001811161262c57505060408051602081019091525f8152919050565b80612636816130b7565b9150506040519150601f19601f602083010116820160405280825280600160208401853c50919050565b60015483101561115e576001546040517fb48978280000000000000000000000000000000000000000000000000000000081526109fa918591600401918252602082015260400190565b6060815160016126ba9190612f38565b826040516020016126cc9291906130eb565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461137e575f5ffd5b5f5f83601f840112612713575f5ffd5b50813567ffffffffffffffff81111561272a575f5ffd5b602083019150836020828501011115612741575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561275f575f5ffd5b883561276a816126e2565b9750602089013561277a816126e2565b9650604089013561278a816126e2565b955060608901359450608089013567ffffffffffffffff8111156127ac575f5ffd5b6127b88b828c01612703565b90955093505060a089013567ffffffffffffffff8111156127d7575f5ffd5b6127e38b828c01612703565b999c989b5096995094979396929594505050565b5f60208284031215612807575f5ffd5b8135610c85816126e2565b5f5f5f5f5f60808688031215612826575f5ffd5b8535612831816126e2565b94506020860135612841816126e2565b935060408601359250606086013567ffffffffffffffff811115612863575f5ffd5b61286f88828901612703565b969995985093965092949392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126128bc575f5ffd5b813567ffffffffffffffff8111156128d6576128d6612880565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561292357612923612880565b60405281815283820160200185101561293a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612967575f5ffd5b82359150602083013567ffffffffffffffff811115612984575f5ffd5b612990858286016128ad565b9150509250929050565b5f5f5f606084860312156129ac575f5ffd5b833567ffffffffffffffff8111156129c2575f5ffd5b840161016081870312156129d4575f5ffd5b95602085013595506040909401359392505050565b5f5f5f5f608085870312156129fc575f5ffd5b84359350602085013567ffffffffffffffff811115612a19575f5ffd5b612a25878288016128ad565b9350506040850135612a36816126e2565b9396929550929360600135925050565b5f5f60408385031215612a57575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612a9d578351835260209384019390920191600101612a7f565b509095945050505050565b5f5f5f60608486031215612aba575f5ffd5b8335612ac5816126e2565b9250602084013567ffffffffffffffff811115612ae0575f5ffd5b612aec868287016128ad565b93969395505050506040919091013590565b5f60208284031215612b0e575f5ffd5b5035919050565b5f60208284031215612b25575f5ffd5b813567ffffffffffffffff811115612b3b575f5ffd5b612b47848285016128ad565b949350505050565b5f5f83601f840112612b5f575f5ffd5b50813567ffffffffffffffff811115612b76575f5ffd5b6020830191508360208260051b8501011115612741575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612ba7575f5ffd5b8835612bb2816126e2565b97506020890135612bc2816126e2565b9650604089013567ffffffffffffffff811115612bdd575f5ffd5b612be98b828c01612b4f565b909750955050606089013567ffffffffffffffff811115612c08575f5ffd5b612c148b828c01612b4f565b909550935050608089013567ffffffffffffffff8111156127d7575f5ffd5b5f5f5f5f5f60a08688031215612c47575f5ffd5b8535612c52816126e2565b945060208601359350604086013567ffffffffffffffff811115612c74575f5ffd5b612c80888289016128ad565b935050606086013560028110612c94575f5ffd5b949793965091946080013592915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610c856020830184612ca5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160038310612d69577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f5f5f5f5f5f60a08789031215612d84575f5ffd5b8635612d8f816126e2565b95506020870135612d9f816126e2565b94506040870135935060608701359250608087013567ffffffffffffffff811115612dc8575f5ffd5b612dd489828a01612703565b979a9699509497509295939492505050565b828152604060208201525f612b476040830184612ca5565b5f60208284031215612e0e575f5ffd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c85575f5ffd5b5f5f60408385031215612e4e575f5ffd5b8251612e59816126e2565b6020939093015192949293505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e9c575f5ffd5b83018035915067ffffffffffffffff821115612eb6575f5ffd5b602001915036819003821315612741575f5ffd5b848152608060208201525f612ee26080830186612ca5565b73ffffffffffffffffffffffffffffffffffffffff949094166040830152506060015292915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c6257610c62612f0b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612f88575f5ffd5b8151610c85816126e2565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f612fc16060830185612ca5565b9050826040830152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361300157613001612f0b565b5060010190565b5f6080828403128015613019575f5ffd5b506040516080810167ffffffffffffffff8111828210171561303d5761303d612880565b604052825161304b816126e2565b8152602083015161305b816126e2565b6020820152604083015161306e816126e2565b6040820152606083015163ffffffff81168114613089575f5ffd5b60608201529392505050565b5f81518060208401855e5f93019283525090919050565b5f610c858284613095565b5f816130c5576130c5612f0b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f630000000000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008360e01b1660018201527f80600e6000396000f3000000000000000000000000000000000000000000000060058201525f600e8201525f612b47600f83018461309556fea2646970667358221220959b491a03df420a39d9217bff79fea47ed3d14b1b9e42dcdf18b41c9b14edca64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/contracts/AgentFactory.sol b/contracts/AgentFactory.sol index 9d337c9..3c3b6b5 100644 --- a/contracts/AgentFactory.sol +++ b/contracts/AgentFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.25; +pragma solidity ^0.8.27; import {AgentMech} from "./AgentMech.sol"; import {GenericManager} from "../lib/autonolas-registries/contracts/GenericManager.sol"; diff --git a/contracts/AgentMech.sol b/contracts/AgentMech.sol index e7a994a..a62632b 100644 --- a/contracts/AgentMech.sol +++ b/contracts/AgentMech.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.25; +pragma solidity ^0.8.27; import {ERC721Mech} from "../lib/gnosis-mech/contracts/ERC721Mech.sol"; @@ -9,8 +9,8 @@ struct MechDelivery { address priorityMech; // Delivery mech address address deliveryMech; - // Account address sending the request - address account; + // Requester address + address requester; // Response timeout window uint32 responseTimeout; } @@ -258,10 +258,19 @@ contract AgentMech is ERC721Mech { function _deliver(uint256 requestId, bytes memory data) internal returns (bytes memory requestData) { // Get an account to deliver request to address account = mapRequestAddresses[requestId]; + + // Get the mech delivery info from the mech marketplace + MechDelivery memory mechDelivery = IMechMarketplace(mechMarketplace).getMechDeliveryInfo(requestId); + + // Instantly return if the request has been delivered + if (mechDelivery.deliveryMech != address(0)) { + return requestData; + } + // The account is zero if the delivery mech is different from a priority mech, or if request does not exist if (account == address(0)) { if (mechMarketplace != address(0)) { - account = IMechMarketplace(mechMarketplace).getMechDeliveryInfo(requestId).account; + account = mechDelivery.requester; } // Check if request exists in the mech marketplace or locally in the mech @@ -383,8 +392,11 @@ contract AgentMech is ERC721Mech { // Request delivery bytes memory requestData = _deliver(requestId, data); - // Mech marketplace delivery finalization - IMechMarketplace(mechMarketplace).deliverMarketplace(requestId, requestData, mechStakingInstance, mechServiceId); + // Mech marketplace delivery finalization if the request was not delivered already + if (requestData.length > 0) { + IMechMarketplace(mechMarketplace).deliverMarketplace(requestId, requestData, mechStakingInstance, + mechServiceId); + } _locked = 1; } diff --git a/hardhat.config.js b/hardhat.config.js index cc39f83..174e3d6 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -233,7 +233,7 @@ module.exports = { solidity: { compilers: [ { - version: "0.8.25", + version: "0.8.27", settings: { optimizer: { enabled: true, diff --git a/package.json b/package.json index 430c916..21b5b13 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "chai": "^4.3.10", "eslint": "^8.52.0", "ethers": "^5.7.2", - "hardhat": "^2.22.9", + "hardhat": "^2.22.13", "hardhat-contract-sizer": "^2.10.0", "hardhat-deploy": "^0.11.43", "hardhat-deploy-ethers": "^0.3.0-beta.13", diff --git a/test/AgentMech.js b/test/AgentMech.js index c05e56c..e36e87b 100644 --- a/test/AgentMech.js +++ b/test/AgentMech.js @@ -221,6 +221,9 @@ describe("AgentMech", function () { status = await mechMarketplace.getRequestStatus(requestId); expect(status).to.equal(3); + // Try to deliver the same request again + await agentMech.deliverToMarketplace(requestId, data, serviceStakingMech.address, serviceId); + // Check mech karma let mechKarma = await karma.mapMechKarma(agentMech.address); expect(mechKarma).to.equal(1); diff --git a/yarn.lock b/yarn.lock index 2a399e9..20f3568 100644 --- a/yarn.lock +++ b/yarn.lock @@ -647,53 +647,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.5.2.tgz#72f7a826c9f0f2c91308edca562de3b9484ac079" - integrity sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A== - -"@nomicfoundation/edr-darwin-x64@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.5.2.tgz#6d0fedb219d664631c6feddc596ab8c3bbc36fa8" - integrity sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg== - -"@nomicfoundation/edr-linux-arm64-gnu@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.5.2.tgz#60e4d52d963141bc2bb4a02639dc590a7fbdda2f" - integrity sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA== - -"@nomicfoundation/edr-linux-arm64-musl@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.5.2.tgz#6676a09eab57c435a16ffc144658c896acca9baa" - integrity sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg== - -"@nomicfoundation/edr-linux-x64-gnu@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.5.2.tgz#f558d9697ce961410e7a7468f9ab8c8a601b9df6" - integrity sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A== - -"@nomicfoundation/edr-linux-x64-musl@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.5.2.tgz#c9c9cbb2997499f75c1d022be724b0551d44569f" - integrity sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA== - -"@nomicfoundation/edr-win32-x64-msvc@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.5.2.tgz#f16db88bf4fe09a996af0a25096e09deecb72bfa" - integrity sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w== - -"@nomicfoundation/edr@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.5.2.tgz#e8c7b3d3dd4a312432ab3930dec60f76dc5c4926" - integrity sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw== - dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.5.2" - "@nomicfoundation/edr-darwin-x64" "0.5.2" - "@nomicfoundation/edr-linux-arm64-gnu" "0.5.2" - "@nomicfoundation/edr-linux-arm64-musl" "0.5.2" - "@nomicfoundation/edr-linux-x64-gnu" "0.5.2" - "@nomicfoundation/edr-linux-x64-musl" "0.5.2" - "@nomicfoundation/edr-win32-x64-msvc" "0.5.2" +"@nomicfoundation/edr-darwin-arm64@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.3.tgz#7f94f80f25bbf8f15421aca0626b1e243c5b6fba" + integrity sha512-hqtI7tYDqKG5PDmZ//Z65EH5cgH8VL/SAAu50rpHP7WAVfJWkOCcYbecywwF6nhHdonJbRTDGAeG1/+VOy6zew== + +"@nomicfoundation/edr-darwin-x64@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.3.tgz#57cbbe09c70480e7eb79273ba5a497327d72347b" + integrity sha512-4fGi79/lyOlRUORhCYsYb3sWqRHuHT7qqzyZfZuNOn8llaxmT1k36xNmvpyg37R8SzjnhT/DzoukSJrs23Ip9Q== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.3.tgz#122f5ec8b00297e9ed0111405c8779a3c3ba26f3" + integrity sha512-yFFTvGFMhfAvQ1Z2itUh1jpoUA+mVROyVELcaxjIq8fyg602lQmbS+NXkhQ+oaeDgJ+06mSENrHBg4fcfRf9cw== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.3.tgz#2b0371371540373b10521ead4ffa70a2d9e6ac8e" + integrity sha512-pOKmd0Fa3a6BHg5qbjbl/jMRELVi9oazbfiuU7Bvgn/dpTK+ID3jwT0SXiuC2zxjmPByWgXL6G9XRf5BPAM2rQ== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.3.tgz#63849575eddbcd7a5da581d401fba6f5f9347644" + integrity sha512-3AUferhkLIXtLV63w5GjpHttzdxZ36i656XMy+pkBZbbiqnzIVeKWg6DJv1A94fQY16gB4gqj9CLq4CWvbNN6w== + +"@nomicfoundation/edr-linux-x64-musl@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.3.tgz#3b5e6462f47b40cde81bafc6da003c58b2eb9839" + integrity sha512-fr6bD872WIBXe9YnTDi0CzYepMcYRgSnkVqn0yK4wRnIvKrloWhxXNVY45GVIl51aNZguBnvoA4WEt6HIazs3A== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.3.tgz#45be7ba94b950e78e862cb3af0c320e070e0e452" + integrity sha512-sn34MvN1ajw2Oq1+Drpxej78Z0HfIzI4p4WlolupAV9dOZKzp2JAIQeLVfZpjIFbF3zuyxLPP4dUBrQoFPEqhA== + +"@nomicfoundation/edr@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.3.tgz#47f1b217ce5eb09aef419d76a8488bb77cd88b94" + integrity sha512-hThe5ORR75WFYTXKL0K2AyLDxkTMrG+VQ1yL9BhQYsuh3OIH+3yNDxMz2LjfvrpOrMmJ4kk5NKdFewpqDojjXQ== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.3" + "@nomicfoundation/edr-darwin-x64" "0.6.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.3" + "@nomicfoundation/edr-linux-x64-musl" "0.6.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.3" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -1572,7 +1572,7 @@ check-error@^1.0.2, check-error@^1.0.3: dependencies: get-func-name "^2.0.2" -chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -1587,6 +1587,13 @@ chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2722,14 +2729,14 @@ hardhat-tracer@^2.6.0: debug "^4.3.4" ethers "^5.6.1" -hardhat@^2.22.9: - version "2.22.9" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.9.tgz#d8f2720561dc60f5cc0ee80c82f9b1907fd61c88" - integrity sha512-sWiuI/yRdFUPfndIvL+2H18Vs2Gav0XacCFYY5msT5dHOWkhLxESJySIk9j83mXL31aXL8+UMA9OgViFLexklg== +hardhat@^2.22.13: + version "2.22.13" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.13.tgz#1d2c7c4b640d060ae0f5b04757322118a003955a" + integrity sha512-psVJX4FSXDpSXwsU8OcKTJN04pQEj9cFBMX5OPko+OFwbIoiOpvRmafa954/UaA1934npTj8sV3gaTSdx9bPbA== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.5.2" + "@nomicfoundation/edr" "^0.6.3" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -2742,7 +2749,7 @@ hardhat@^2.22.9: ansi-escapes "^4.3.0" boxen "^5.1.2" chalk "^2.4.2" - chokidar "^3.4.0" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" @@ -2755,6 +2762,7 @@ hardhat@^2.22.9: glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + json-stream-stringify "^3.1.4" keccak "^3.0.2" lodash "^4.17.11" mnemonist "^0.38.0" @@ -3103,6 +3111,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3828,6 +3841,11 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"