[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "batchId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "mineralType", "type": "string" }, { "indexed": false, "internalType": "address", "name": "miner", "type": "address" } ], "name": "BatchMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "requester", "type": "address" } ], "name": "PurchaseOrderCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "PurchaseOrderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "fulfiller", "type": "address" }, { "indexed": false, "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "name": "PurchaseOrderFulfilled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "PurchaseOrderReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "name": "PurchaseOrderStatusUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "batches", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "fulfillPurchaseOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllPurchaseOrders", "outputs": [ { "components": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "supplier", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "internalType": "struct PurchaseOrderERC1155.PurchaseOrderStruct[]", "name": "orders", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "batchId", "type": "uint256" } ], "name": "getBatchDetails", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "getOwnedBatches", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "internalType": "struct MineralNFT.MineralBatch[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "getPurchaseOrder", "outputs": [ { "components": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "supplier", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "enum PurchaseOrderERC1155.OrderStatus", "name": "status", "type": "uint8" } ], "internalType": "struct PurchaseOrderERC1155.PurchaseOrderStruct", "name": "order", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "mineralType", "type": "string" } ], "name": "mintMineralBatch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "orderCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ownedBatches", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "receivePurchaseOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
6080604052600060065534801561001557600080fd5b50604051806060016040528060298152602001612aea6029913961003881610056565b50610044600033610066565b50610050600033610066565b50610273565b600261006282826101b5565b5050565b60008281526003602090815260408083206001600160a01b038516845290915281205460ff1661010c5760008381526003602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610110565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061014057607f821691505b60208210810361016057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101b057806000526020600020601f840160051c8101602085101561018d5750805b601f840160051c820191505b818110156101ad5760008155600101610199565b50505b505050565b81516001600160401b038111156101ce576101ce610116565b6101e2816101dc845461012c565b84610166565b6020601f82116001811461021657600083156101fe5750848201515b600019600385901b1c1916600184901b1784556101ad565b600084815260208120601f198516915b828110156102465787850151825560209485019460019092019101610226565b50848210156102645786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b612868806102826000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806396c7d08a116100f9578063c320f3a811610097578063df3e1d9711610071578063df3e1d97146103c4578063e985e9c5146103e4578063ec87621c146103f7578063f242432a1461041e57600080fd5b8063c320f3a81461037e578063c6619fb414610391578063d547741f146103b157600080fd5b8063a217fddf116100d3578063a217fddf14610347578063a22cb4651461034f578063b32c4d8d14610362578063b789bf521461037557600080fd5b806396c7d08a146102fd5780639d47dcc0146103105780639f464a9e1461033257600080fd5b80632f2ff15d116101665780636394f6e6116101405780636394f6e6146102a757806368233eef146102ce57806374e8f943146102d757806391d14854146102ea57600080fd5b80632f2ff15d1461026157806336568abe146102745780634e1273f41461028757600080fd5b8062fdd58e146101ad57806301ffc9a7146101d35780630cd90116146101f65780630e89341c14610209578063248a9ca3146102295780632eb2c2d61461024c575b600080fd5b6101c06101bb366004611d2f565b610431565b6040519081526020015b60405180910390f35b6101e66101e1366004611d6f565b610459565b60405190151581526020016101ca565b6101c0610204366004611d2f565b610499565b61021c610217366004611d93565b6104ca565b6040516101ca9190611df2565b6101c0610237366004611d93565b60009081526003602052604090206001015490565b61025f61025a366004611f56565b61055e565b005b61025f61026f366004612009565b6105ca565b61025f610282366004612009565b6105f5565b61029a610295366004612035565b61062d565b6040516101ca9190612138565b6101c07fa952726ef2588ad078edf35b066f7c7406e207cb0003bbaba8cb53eba9553e7281565b6101c060065481565b61025f6102e536600461214b565b6106f9565b6101e66102f8366004612009565b61091b565b61025f61030b3660046121d0565b610946565b61032361031e366004611d93565b610b57565b6040516101ca93929190612240565b61033a610c3e565b6040516101ca9190612323565b6101c0600081565b61025f61035d366004612388565b610e3e565b610323610370366004611d93565b610e4d565b6101c060045481565b6101c061038c3660046123c4565b610ef8565b6103a461039f366004612414565b61105a565b6040516101ca919061242f565b61025f6103bf366004612009565b611241565b6103d76103d2366004611d93565b611266565b6040516101ca91906124a9565b6101e66103f23660046124bc565b61141c565b6101c07f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b61025f61042c3660046124e6565b61144a565b6000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061048a57506001600160e01b0319821663da8def7360e01b145b806104535750610453826114a9565b600860205281600052604060002081815481106104b557600080fd5b90600052602060002001600091509150505481565b6060600280546104d99061253e565b80601f01602080910402602001604051908101604052809291908181526020018280546105059061253e565b80156105525780601f1061052757610100808354040283529160200191610552565b820191906000526020600020905b81548152906001019060200180831161053557829003601f168201915b50505050509050919050565b336001600160a01b038616811480159061057f575061057d868261141c565b155b156105b55760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b6105c286868686866114ce565b505050505050565b6000828152600360205260409020600101546105e581611535565b6105ef8383611542565b50505050565b6001600160a01b038116331461061e5760405163334bd91960e11b815260040160405180910390fd5b61062882826115d6565b505050565b6060815183511461065e5781518351604051635b05999160e01b8152600481019290925260248201526044016105ac565b600083516001600160401b0381111561067957610679611e05565b6040519080825280602002602001820160405280156106a2578160200160208202803683370190505b50905060005b84518110156106f1576020808202860101516106cc90602080840287010151610431565b8282815181106106de576106de612578565b60209081029190910101526001016106a8565b509392505050565b80518251146107565760405162461bcd60e51b8152602060048201526024808201527f546f6b656e49647320616e6420616d6f756e7473206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016105ac565b600082511161079d5760405162461bcd60e51b8152602060048201526013602482015272139bc81d1bdad95b9cc81cdc1958da599a5959606a1b60448201526064016105ac565b6040518060e00160405280868152602001856001600160a01b03168152602001846001600160a01b03168152602001306001600160a01b03168152602001838152602001828152602001600060068111156107fa576107fa612268565b905260008681526005602090815260409182902083518155838201516001820180546001600160a01b03199081166001600160a01b03938416179091559385015160028301805486169183169190911790556060850151600383018054909516911617909255608083015180516108779260048501920190611cc1565b5060a08201518051610893916005840191602090910190611cc1565b5060c08201518160060160006101000a81548160ff021916908360068111156108be576108be612268565b02179055505060048054915060006108d5836125a4565b9190505550847fdf89c92912f99e981e0b476f15e9aad16d7100dd4e606a7d210829afe74f7a5a838360405161090c9291906125bd565b60405180910390a25050505050565b60009182526003602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008381526005602052604081209060068083015460ff169081111561096e5761096e612268565b146109b25760405162461bcd60e51b81526020600482015260146024820152734f72646572206973206e6f742070656e64696e6760601b60448201526064016105ac565b60038101546001600160a01b03163014610a0e5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420737570706c696572206f662074686973206f7264657200000000000060448201526064016105ac565b8151835114610a1c57600080fd5b60005b83518160ff161015610b075760028201548451309163f242432a9133916001600160a01b031690889060ff8716908110610a5b57610a5b612578565b6020026020010151878660ff1681518110610a7857610a78612578565b60200260200101518a604051602001610a9391815260200190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610ac29594939291906125e2565b600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b505050508080610aff90612627565b915050610a1f565b506006818101805460ff191682179055604051339186917f63a386a3d8108964f7abd4ea66a9ea84c1394d055283b0b92ffd62bb6c662ff791610b4991612646565b60405180910390a350505050565b60008060606000600760008681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282018054610ba09061253e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcc9061253e565b8015610c195780601f10610bee57610100808354040283529160200191610c19565b820191906000526020600020905b815481529060010190602001808311610bfc57829003601f168201915b5050509190925250508151602083015160409093015190989297509550909350505050565b60606004546001600160401b03811115610c5a57610c5a611e05565b604051908082528060200260200182016040528015610cc757816020015b610cb46040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a08201529060c082015290565b815260200190600190039081610c785790505b50905060015b6004548111610e3a57600081815260056020908152604091829020825160e0810184528154815260018201546001600160a01b0390811682850152600283015481168286015260038301541660608201526004820180548551818602810186019096528086529194929360808601939290830182828015610d6d57602002820191906000526020600020905b815481526020019060010190808311610d59575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610dc557602002820191906000526020600020905b815481526020019060010190808311610db1575b505050918352505060068281015460209092019160ff1690811115610dec57610dec612268565b6006811115610dfd57610dfd612268565b90525082610e0c600184612654565b81518110610e1c57610e1c612578565b60200260200101819052508080610e32906125a4565b915050610ccd565b5090565b610e49338383611643565b5050565b60076020526000908152604090208054600182015460028301805492939192610e759061253e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea19061253e565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b5050505050905083565b60007fa952726ef2588ad078edf35b066f7c7406e207cb0003bbaba8cb53eba9553e72610f2481611535565b60008411610f745760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016105ac565b600160066000828254610f879190612667565b90915550506006546040805160608101825282815260208082018881528284018881526000868152600790935293909120825181559051600182015591519091906002820190610fd790826126c1565b5050336000818152600860209081526040808320805460018101825590845282842001869055805191820190529081526110159250839088906116d9565b7fbaee7f2f9e78dea3de3c8cc018b5012495dcfe47be749668924375c3bdd5df598186863360405161104a949392919061277f565b60405180910390a1949350505050565b6001600160a01b03811660009081526008602090815260408083208054825181850281018501909352808352606094938301828280156110b957602002820191906000526020600020905b8154815260200190600101908083116110a5575b50505050509050600081516001600160401b038111156110db576110db611e05565b60405190808252806020026020018201604052801561113057816020015b61111d60405180606001604052806000815260200160008152602001606081525090565b8152602001906001900390816110f95790505b50905060005b82518110156106f1576007600084838151811061115557611155612578565b60200260200101518152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201805461119a9061253e565b80601f01602080910402602001604051908101604052809291908181526020018280546111c69061253e565b80156112135780601f106111e857610100808354040283529160200191611213565b820191906000526020600020905b8154815290600101906020018083116111f657829003601f168201915b50505050508152505082828151811061122e5761122e612578565b6020908102919091010152600101611136565b60008281526003602052604090206001015461125c81611535565b6105ef83836115d6565b6112a26040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a08201529060c082015290565b600082815260056020908152604091829020825160e0810184528154815260018201546001600160a01b039081168285015260028301548116828601526003830154166060820152600482018054855181860281018601909652808652919492936080860193929083018282801561133957602002820191906000526020600020905b815481526020019060010190808311611325575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561139157602002820191906000526020600020905b81548152602001906001019080831161137d575b505050918352505060068281015460209092019160ff16908111156113b8576113b8612268565b60068111156113c9576113c9612268565b90525080519091506000036114175760405162461bcd60e51b815260206004820152601460248201527313dc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016105ac565b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b038616811480159061146b5750611469868261141c565b155b1561149c5760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044016105ac565b6105c28686868686611736565b60006001600160e01b03198216637965db0b60e01b14806104535750610453826117c4565b6001600160a01b0384166114f857604051632bfa23e760e11b8152600060048201526024016105ac565b6001600160a01b03851661152157604051626a0d4560e21b8152600060048201526024016105ac565b61152e8585858585611814565b5050505050565b61153f8133611867565b50565b600061154e838361091b565b6115ce5760008381526003602090815260408083206001600160a01b03861684529091529020805460ff191660011790556115863390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610453565b506000610453565b60006115e2838361091b565b156115ce5760008381526003602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610453565b6001600160a01b03821661166c5760405162ced3e160e81b8152600060048201526024016105ac565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661170357604051632bfa23e760e11b8152600060048201526024016105ac565b604080516001808252602082018690528183019081526060820185905260808201909252906105c2600087848487611814565b6001600160a01b03841661176057604051632bfa23e760e11b8152600060048201526024016105ac565b6001600160a01b03851661178957604051626a0d4560e21b8152600060048201526024016105ac565b604080516001808252602082018690528183019081526060820185905260808201909252906117bb8787848487611814565b50505050505050565b60006001600160e01b03198216636cdb3d1360e11b14806117f557506001600160e01b031982166303a24d0760e21b145b8061045357506301ffc9a760e01b6001600160e01b0319831614610453565b611820858585856118a0565b6001600160a01b0384161561152e57825133906001036118595760208481015190840151611852838989858589611ab4565b50506105c2565b6105c2818787878787611bd8565b611871828261091b565b610e495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016105ac565b80518251146118cf5781518151604051635b05999160e01b8152600481019290925260248201526044016105ac565b3360005b83518110156119d5576020818102858101820151908501909101516001600160a01b03881615611986576000828152602081815260408083206001600160a01b038c1684529091529020548181101561195f576040516303dee4c560e01b81526001600160a01b038a1660048201526024810182905260448101839052606481018490526084016105ac565b6000838152602081815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b038716156119cb576000828152602081815260408083206001600160a01b038b168452909152812080548392906119c5908490612667565b90915550505b50506001016118d3565b508251600103611a565760208301516000906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611a47929190918252602082015260400190565b60405180910390a4505061152e565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611aa59291906125bd565b60405180910390a45050505050565b6001600160a01b0384163b156105c25760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611af890899089908890889088906004016125e2565b6020604051808303816000875af1925050508015611b33575060408051601f3d908101601f19168201909252611b30918101906127b7565b60015b611b9c573d808015611b61576040519150601f19603f3d011682016040523d82523d6000602084013e611b66565b606091505b508051600003611b9457604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b146117bb57604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b6001600160a01b0384163b156105c25760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611c1c90899089908890889088906004016127d4565b6020604051808303816000875af1925050508015611c57575060408051601f3d908101601f19168201909252611c54918101906127b7565b60015b611c85573d808015611b61576040519150601f19603f3d011682016040523d82523d6000602084013e611b66565b6001600160e01b0319811663bc197c8160e01b146117bb57604051632bfa23e760e11b81526001600160a01b03861660048201526024016105ac565b828054828255906000526020600020908101928215611cfc579160200282015b82811115611cfc578251825591602001919060010190611ce1565b50610e3a9291505b80821115610e3a5760008155600101611d04565b80356001600160a01b038116811461141757600080fd5b60008060408385031215611d4257600080fd5b611d4b83611d18565b946020939093013593505050565b6001600160e01b03198116811461153f57600080fd5b600060208284031215611d8157600080fd5b8135611d8c81611d59565b9392505050565b600060208284031215611da557600080fd5b5035919050565b6000815180845260005b81811015611dd257602081850181015186830182015201611db6565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611d8c6020830184611dac565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611e4357611e43611e05565b604052919050565b60006001600160401b03821115611e6457611e64611e05565b5060051b60200190565b600082601f830112611e7f57600080fd5b8135611e92611e8d82611e4b565b611e1b565b8082825260208201915060208360051b860101925085831115611eb457600080fd5b602085015b83811015611ed1578035835260209283019201611eb9565b5095945050505050565b6000806001600160401b03841115611ef557611ef5611e05565b50601f8301601f1916602001611f0a81611e1b565b915050828152838383011115611f1f57600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f4757600080fd5b611d8c83833560208501611edb565b600080600080600060a08688031215611f6e57600080fd5b611f7786611d18565b9450611f8560208701611d18565b935060408601356001600160401b03811115611fa057600080fd5b611fac88828901611e6e565b93505060608601356001600160401b03811115611fc857600080fd5b611fd488828901611e6e565b92505060808601356001600160401b03811115611ff057600080fd5b611ffc88828901611f36565b9150509295509295909350565b6000806040838503121561201c57600080fd5b8235915061202c60208401611d18565b90509250929050565b6000806040838503121561204857600080fd5b82356001600160401b0381111561205e57600080fd5b8301601f8101851361206f57600080fd5b803561207d611e8d82611e4b565b8082825260208201915060208360051b85010192508783111561209f57600080fd5b6020840193505b828410156120c8576120b784611d18565b8252602093840193909101906120a6565b945050505060208301356001600160401b038111156120e657600080fd5b6120f285828601611e6e565b9150509250929050565b600081518084526020840193506020830160005b8281101561212e578151865260209586019590910190600101612110565b5093949350505050565b602081526000611d8c60208301846120fc565b600080600080600060a0868803121561216357600080fd5b8535945061217360208701611d18565b935061218160408701611d18565b925060608601356001600160401b0381111561219c57600080fd5b6121a888828901611e6e565b92505060808601356001600160401b038111156121c457600080fd5b611ffc88828901611e6e565b6000806000606084860312156121e557600080fd5b8335925060208401356001600160401b0381111561220257600080fd5b61220e86828701611e6e565b92505060408401356001600160401b0381111561222a57600080fd5b61223686828701611e6e565b9150509250925092565b83815282602082015260606040820152600061225f6060830184611dac565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6007811061229c57634e487b7160e01b600052602160045260246000fd5b9052565b8051825260018060a01b03602082015116602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301526000608082015160e060808501526122f560e08501826120fc565b905060a083015184820360a086015261230e82826120fc565b91505060c08301516106f160c086018261227e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561237c57603f198786030184526123678583516122a0565b9450602093840193919091019060010161234b565b50929695505050505050565b6000806040838503121561239b57600080fd5b6123a483611d18565b9150602083013580151581146123b957600080fd5b809150509250929050565b600080604083850312156123d757600080fd5b8235915060208301356001600160401b038111156123f457600080fd5b8301601f8101851361240557600080fd5b6120f285823560208401611edb565b60006020828403121561242657600080fd5b611d8c82611d18565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561237c57603f198786030184528151805186526020810151602087015260408101519050606060408701526124936060870182611dac565b9550506020938401939190910190600101612457565b602081526000611d8c60208301846122a0565b600080604083850312156124cf57600080fd5b6124d883611d18565b915061202c60208401611d18565b600080600080600060a086880312156124fe57600080fd5b61250786611d18565b945061251560208701611d18565b9350604086013592506060860135915060808601356001600160401b03811115611ff057600080fd5b600181811c9082168061255257607f821691505b60208210810361257257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016125b6576125b661258e565b5060010190565b6040815260006125d060408301856120fc565b828103602084015261225f81856120fc565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061261c90830184611dac565b979650505050505050565b600060ff821660ff810361263d5761263d61258e565b60010192915050565b60208101610453828461227e565b818103818111156104535761045361258e565b808201808211156104535761045361258e565b601f82111561062857806000526020600020601f840160051c810160208510156126a15750805b601f840160051c820191505b8181101561152e57600081556001016126ad565b81516001600160401b038111156126da576126da611e05565b6126ee816126e8845461253e565b8461267a565b6020601f821160018114612722576000831561270a5750848201515b600019600385901b1c1916600184901b17845561152e565b600084815260208120601f198516915b828110156127525787850151825560209485019460019092019101612732565b50848210156127705786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b84815283602082015260806040820152600061279e6080830185611dac565b905060018060a01b038316606083015295945050505050565b6000602082840312156127c957600080fd5b8151611d8c81611d59565b6001600160a01b0386811682528516602082015260a060408201819052600090612800908301866120fc565b828103606084015261281281866120fc565b905082810360808401526128268185611dac565b9897505050505050505056fea264697066735822122083cf2c32925cf37f04e6fe415caea61444f0508531ecbcaeeff7d7effd14011d64736f6c634300081a003368747470733a2f2f6170692e6578616d706c652e636f6d2f6d696e6572616c2f7b69647d2e6a736f6e