[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ARRAY_LENGTH_MISMATCH", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "msgHash", "type": "bytes32" }, { "internalType": "address", "name": "recoveredSigner", "type": "address" } ], "name": "BAD_SIGNATURE", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentId", "type": "uint256" }, { "internalType": "uint256", "name": "targetId", "type": "uint256" } ], "name": "BAD_SNAPSHOT_ID", "type": "error" }, { "inputs": [], "name": "MINT_COUNTER_MISMATCH", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_DATASET_NFT", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_DATASET_OWNER", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_DISTRIBUTION_MANAGER", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "NOT_PENDING_FRAGMENT", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_VERIFIER_MANAGER", "type": "error" }, { "inputs": [], "name": "TARGET_NOT_EMPTY", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TOKEN_ID_NOT_EXISTS", "type": "error" }, { "inputs": [], "name": "ZERO_ADDRESS", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "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": "id", "type": "uint256" } ], "name": "FragmentAccepted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "tag", "type": "bytes32" } ], "name": "FragmentPending", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "FragmentRejected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "FragmentRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTrustedForwarder", "type": "address" } ], "name": "TrustedForwarderSourceChanged", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "accept", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "snapshotId", "type": "uint256" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "accountTagCountAt", "outputs": [ { "internalType": "bytes32[]", "name": "tags_", "type": "bytes32[]" }, { "internalType": "uint256[]", "name": "counts", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "snapshotId", "type": "uint256" }, { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32[]", "name": "tags_", "type": "bytes32[]" } ], "name": "accountTagPercentageAt", "outputs": [ { "internalType": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentSnapshotId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataset", "outputs": [ { "internalType": "contract IDatasetNFT", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "datasetId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dataset_", "type": "address" }, { "internalType": "uint256", "name": "datasetId_", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastFragmentPendingId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "pendingFragmentOwners", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "tag", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "propose", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "owners", "type": "address[]" }, { "internalType": "bytes32[]", "name": "tags_", "type": "bytes32[]" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "proposeMany", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "reject", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "remove", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "removeMany", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "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": [], "name": "snapshot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "snapshotId", "type": "uint256" } ], "name": "tagCountAt", "outputs": [ { "internalType": "bytes32[]", "name": "tags_", "type": "bytes32[]" }, { "internalType": "uint256[]", "name": "counts", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tags", "outputs": [ { "internalType": "bytes32", "name": "tag", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613d4c80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063b8adaa11116100a2578063d623a31c11610071578063d623a31c14610450578063dd7f8c5014610463578063e8a3d48514610476578063e985e9c51461047e57600080fd5b8063b8adaa111461040e578063c87b56dd14610421578063cd6dc68714610434578063d02d70191461044757600080fd5b80639711715a116100de5780639711715a146103bf578063a22cb465146103c7578063b2744517146103da578063b88d4fde146103fb57600080fd5b806370a08231146103735780638c2bb3881461038657806395d89b41146103af578063970875ce146103b757600080fd5b8063238eb2771161018757806342842e0e1161015657806342842e0e146103275780634cc822151461033a578063572b6c051461034d5780636352211e1461036057600080fd5b8063238eb277146102d957806323b872dd146102e157806331ce2f0f146102f457806340d048821461030757600080fd5b8063081812fc116101c3578063081812fc14610272578063095ea7b31461028557806319b05f491461029857806320822abc146102ab57600080fd5b806301ffc9a7146101f55780630259243f1461021d57806302b728ab1461023257806306fdde031461025d575b600080fd5b61020861020336600461320a565b6104ba565b60405190151581526020015b60405180910390f35b61023061022b36600461326b565b6104e5565b005b60ca54610245906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b61026561065d565b60405161021491906132fc565b61024561028036600461330f565b6106ef565b61023061029336600461333d565b610716565b6102306102a636600461330f565b61083d565b6102cb6102b936600461330f565b60ce6020526000908152604090205481565b604051908152602001610214565b60cc546102cb565b6102306102ef366004613369565b6109a8565b6102306103023660046133eb565b6109e0565b61031a610315366004613484565b610dc5565b604051610214919061351a565b610230610335366004613369565b610f5c565b61023061034836600461330f565b610f77565b61020861035b36600461352d565b6110b0565b61024561036e36600461330f565b61111f565b6102cb61038136600461352d565b61117f565b61024561039436600461330f565b60cd602052600090815260409020546001600160a01b031681565b610265611205565b6102cb611214565b6102cb611223565b6102306103d5366004613558565b6112f6565b6103ed6103e836600461330f565b61130c565b604051610214929190613591565b610230610409366004613655565b611429565b61023061041c36600461330f565b611468565b61026561042f36600461330f565b6115cb565b61023061044236600461333d565b611671565b6102cb60cb5481565b61023061045e366004613703565b6117f7565b6103ed610471366004613752565b611a93565b610265611bb9565b61020861048c366004613777565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006001600160e01b0319821663140da55760e01b14806104df57506104df82611bc3565b92915050565b60006104ef611c13565b60ca5460cb546040516331a9108f60e11b81529293506001600160a01b0380851693921691636352211e9161052a9160040190815260200190565b602060405180830381865afa158015610547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056b91906137a5565b6001600160a01b0316146105a1576040516250b83f60e81b81526001600160a01b03821660048201526024015b60405180910390fd5b8160005b818110156106565760008585838181106105c1576105c16137c2565b60209081029290920135600081815260cd909352604090922080546001600160a01b03191690555090506105f481611c1d565b156106025761060281611c3a565b600081815260ce602052604080822091909155517f5f0d16355d4f3f5674914465f7c85e96a08799a10439770bb2333c073855e58a906106459083815260200190565b60405180910390a1506001016105a5565b5050505050565b60606065805461066c906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906137d8565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b60006106fa82611cdd565b506000908152606960205260409020546001600160a01b031690565b60006107218261111f565b9050806001600160a01b0316836001600160a01b03160361078e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610598565b806001600160a01b03166107a0611c13565b6001600160a01b031614806107bc57506107bc8161048c611c13565b61082e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610598565b6108388383611d30565b505050565b6000610847611c13565b60ca5460cb5460405163907418f360e01b81529293506001600160a01b038085169392169163907418f3916108829160040190815260200190565b602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c391906137a5565b6001600160a01b0316146108f55760405163f3892fe360e01b81526001600160a01b0382166004820152602401610598565b600082815260cd60205260409020546001600160a01b031661091683611c1d565b8061092857506001600160a01b038116155b156109495760405163309ffa0d60e21b815260048101849052602401610598565b600083815260cd6020526040902080546001600160a01b031916905561096f8184611d9e565b6040518381527fb9261222a108a8e3a717e26cfe3413a4abcf40e14a2c3fa27256e4607231b5f4906020015b60405180910390a1505050565b6109b96109b3611c13565b82611db8565b6109d55760405162461bcd60e51b815260040161059890613812565b610838838383611e37565b60ca546001600160a01b03163314610a0d5760405163955efd1f60e01b8152336004820152602401610598565b828514610a2d57604051634456f5e960e11b815260040160405180910390fd5b6000610ab960cc546001610a419190613875565b60cc54610a4f908790613875565b89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b918291850190849080828437600092019190915250611fa892505050565b90506000610afd8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff692505050565b60ca54604051637df73e2760e01b81526001600160a01b038084166004830152929350911690637df73e2790602401602060405180830381865afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6d9190613888565b610b9c57604051636a510e7f60e11b8152600481018390526001600160a01b0382166024820152604401610598565b60cc546000908890825b82811015610d815760008c8c83818110610bc257610bc26137c2565b9050602002016020810190610bd7919061352d565b90506001600160a01b038116610bf4575060019384019301610ba6565b600060cc60008154610c05906138a5565b9182905550905060008c8c85818110610c2057610c206137c2565b600085815260cd6020908152604080832080546001600160a01b0319166001600160a01b038b1617905560ce82529182902092810294909401359182905580518681529384018290529093507fd1e63f1a8894fe63fbff9796644f9d1ebd8c539d69a99598f0d619d14e57f5c09201905060405180910390a160ca5460cb5460405163907418f360e01b81526001600160a01b039092169163907418f391610cce9160040190815260200190565b602060405180830381865afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f91906137a5565b604051635258352160e01b815260048101849052602481018390526001600160a01b039190911690635258352190604401600060405180830381600087803b158015610d5a57600080fd5b505af1158015610d6e573d6000803e3d6000fd5b505060019095019450610ba69350505050565b5060cc5483610d908a84613875565b610d9a91906138be565b14610db85760405163063289c760e51b815260040160405180910390fd5b5050505050505050505050565b60cf546060908510610df85760cf5460405163fb632e6160e01b8152610598918791600401918252602082015260400190565b816000610e05868861201a565b9050600060cf8281548110610e1c57610e1c6137c2565b90600052602060002090600402016000019050600060cf8381548110610e4457610e446137c2565b600091825260208083206001600160a01b038c1684526003600490930201919091019052604090209050836001600160401b03811115610e8657610e866135e8565b604051908082528060200260200182016040528015610eaf578160200160208202803683370190505b50945060005b84811015610f4f576000888883818110610ed157610ed16137c2565b9050602002013590506000610eef82866120f590919063ffffffff16565b9150508015610f45576000610f0485846120f5565b9150829050610f1b82670de0b6b3a76400006138d1565b610f2591906138e8565b898581518110610f3757610f376137c2565b602002602001018181525050505b5050600101610eb5565b5050505050949350505050565b61083883838360405180602001604052806000815250611429565b6000610f81611c13565b60ca5460cb546040516331a9108f60e11b81529293506001600160a01b0380851693921691636352211e91610fbc9160040190815260200190565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906137a5565b6001600160a01b03161461102e576040516250b83f60e81b81526001600160a01b0382166004820152602401610598565b600082815260cd6020526040902080546001600160a01b031916905561105382611c1d565b156110615761106182611c3a565b600082815260ce602052604080822091909155517f5f0d16355d4f3f5674914465f7c85e96a08799a10439770bb2333c073855e58a906110a49084815260200190565b60405180910390a15050565b60975460405163572b6c0560e01b81526001600160a01b038381166004830152600092169063572b6c0590602401602060405180830381865afa1580156110fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190613888565b6000818152606760205260408120546001600160a01b0316806104df5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610598565b60006001600160a01b0382166111e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610598565b506001600160a01b031660009081526068602052604090205490565b60606066805461066c906137d8565b600061121e612113565b905090565b60008061122e611c13565b60ca5460cb5460405163f9c3648960e01b81529293506001600160a01b038085169392169163f9c36489916112699160040190815260200190565b602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa91906137a5565b6001600160a01b0316146112dc57604051634124032d60e01b81526001600160a01b0382166004820152602401610598565b60cf805460010181556000526112f0612113565b91505090565b611308611301611c13565b8383612125565b5050565b60cf54606090819083106113415760cf5460405163fb632e6160e01b8152610598918591600401918252602082015260400190565b600060cf8481548110611356576113566137c2565b90600052602060002090600402016000019050611372816121f3565b9250600061137f82612200565b9050806001600160401b03811115611399576113996135e8565b6040519080825280602002602001820160405280156113c2578160200160208202803683370190505b50925060005b81811015611421576113fc8582815181106113e5576113e56137c2565b60200260200101518461220b90919063ffffffff16565b84828151811061140e5761140e6137c2565b60209081029190910101526001016113c8565b505050915091565b61143a611434611c13565b83611db8565b6114565760405162461bcd60e51b815260040161059890613812565b61146284848484612217565b50505050565b6000611472611c13565b60ca5460cb5460405163907418f360e01b81529293506001600160a01b038085169392169163907418f3916114ad9160040190815260200190565b602060405180830381865afa1580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee91906137a5565b6001600160a01b0316146115205760405163f3892fe360e01b81526001600160a01b0382166004820152602401610598565b600082815260cd60205260409020546001600160a01b031661154183611c1d565b8061155357506001600160a01b038116155b156115745760405163309ffa0d60e21b815260048101849052602401610598565b600083815260cd6020908152604080832080546001600160a01b031916905560ce82528083209290925590518481527fef9b95d27c793c5a581fbb6297db035d81cdf5123e907077e8058055c6beccbc910161099b565b60606115d682611c1d565b6115f657604051632c6d2f1f60e01b815260048101839052602401610598565b600061160061224a565b90506000815111611620576040518060200160405280600081525061166a565b80604051602001611631919061390a565b604051602081830303815290604052611649846122de565b60405160200161165a92919061392f565b6040516020818303038152906040525b9392505050565b600054610100900460ff16158080156116915750600054600160ff909116105b806116ab5750303b1580156116ab575060005460ff166001145b61170e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610598565b6000805460ff191660011790558015611731576000805461ff0019166101001790555b61177e6040518060400160405280600f81526020016e139d5adb185a48119c9859db595b9d608a1b815250604051806040016040528060048152602001632720a4a360e11b815250612370565b611787836123a1565b60ca80546001600160a01b0319166001600160a01b03851617905560cb82905560cf8054600082905260020190558015610838576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161099b565b60ca546001600160a01b031633146118245760405163955efd1f60e01b8152336004820152602401610598565b6001600160a01b03841661184b5760405163538ba4f960e01b815260040160405180910390fd5b600060cc6000815461185c906138a5565b9182905550905060006118708287876123d1565b905060006118b48286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff692505050565b60ca54604051637df73e2760e01b81526001600160a01b038084166004830152929350911690637df73e2790602401602060405180830381865afa158015611900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119249190613888565b61195357604051636a510e7f60e11b8152600481018390526001600160a01b0382166024820152604401610598565b600083815260cd6020908152604080832080546001600160a01b0319166001600160a01b038c1617905560ce82529182902088905581518581529081018890527fd1e63f1a8894fe63fbff9796644f9d1ebd8c539d69a99598f0d619d14e57f5c0910160405180910390a160ca5460cb5460405163907418f360e01b81526001600160a01b039092169163907418f3916119f39160040190815260200190565b602060405180830381865afa158015611a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3491906137a5565b604051635258352160e01b815260048101859052602481018890526001600160a01b039190911690635258352190604401600060405180830381600087803b158015611a7f57600080fd5b505af1158015610db8573d6000803e3d6000fd5b60cf5460609081908410611ac85760cf5460405163fb632e6160e01b8152610598918691600401918252602082015260400190565b600060cf611ad6858761201a565b81548110611ae657611ae66137c2565b600091825260208083206001600160a01b03881684526003600490930201919091019052604081209150611b1982612200565b9050611b24826121f3565b9350806001600160401b03811115611b3e57611b3e6135e8565b604051908082528060200260200182016040528015611b67578160200160208202803683370190505b50925060005b81811015611baf57611b8a8582815181106113e5576113e56137c2565b848281518110611b9c57611b9c6137c2565b6020908102919091010152600101611b6d565b5050509250929050565b606061121e61224a565b60006001600160e01b031982166380ac58cd60e01b1480611bf457506001600160e01b03198216635b5e139f60e01b145b806104df57506301ffc9a760e01b6001600160e01b03198316146104df565b600061121e61242e565b6000908152606760205260409020546001600160a01b0316151590565b6000611c458261111f565b9050611c5581600084600161245d565b611c5e8261111f565b600083815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526068845282852080546000190190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611ce681611c1d565b611d2d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610598565b50565b600081815260696020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d658261111f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113088282604051806020016040528060008152506124b7565b600080611dc48361111f565b9050806001600160a01b0316846001600160a01b03161480611e0b57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80611e2f5750836001600160a01b0316611e24846106ef565b6001600160a01b0316145b949350505050565b826001600160a01b0316611e4a8261111f565b6001600160a01b031614611e705760405162461bcd60e51b81526004016105989061395e565b6001600160a01b038216611ed25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610598565b611edf838383600161245d565b826001600160a01b0316611ef28261111f565b6001600160a01b031614611f185760405162461bcd60e51b81526004016105989061395e565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60ca5460cb54604051600092611fed92611fd99246926001600160a01b031691908a9089908b908a906020016139a3565b6040516020818303038152906040526124ea565b95945050505050565b60008060006120058585612525565b9150915061201281612567565b509392505050565b6001600160a01b038216600090815260d0602052604081208161203d82856126b1565b8254909150810361208457801561207357816001820381548110612063576120636137c2565b906000526020600020015461207b565b61207b612113565b925050506104df565b6000828281548110612098576120986137c2565b906000526020600020015490508481036120b7578493505050506104df565b816000036120cb57600093505050506104df565b8260018303815481106120e0576120e06137c2565b906000526020600020015493505050506104df565b60008080806121048686612749565b909450925050505b9250929050565b60cf5460009061121e906001906138be565b816001600160a01b0316836001600160a01b0316036121865760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610598565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060600061166a83612783565b60006104df8261278e565b600061166a8383612799565b612222848484611e37565b61222e84848484612809565b6114625760405162461bcd60e51b815260040161059890613a3e565b604080518082019091526009815268667261676d656e747360b81b6020820152606090600061227761290e565b9050600081511161229757604051806020016040528060008152506122d7565b806040516020016122a8919061390a565b60408051601f19818403018152908290526122c791849060200161392f565b6040516020818303038152906040525b9250505090565b606060006122eb83612984565b60010190506000816001600160401b0381111561230a5761230a6135e8565b6040519080825280601f01601f191660200182016040528015612334576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461233e57509392505050565b600054610100900460ff166123975760405162461bcd60e51b815260040161059890613a90565b6113088282612a5c565b600054610100900460ff166123c85760405162461bcd60e51b815260040161059890613a90565b611d2d81612a9c565b60ca5460cb54604080514660208201526bffffffffffffffffffffffff19606094851b8116928201929092526054810192909252607482018690529184901b909116609482015260a88101829052600090611e2f9060c801611fd9565b6000612439336110b0565b8015612446575060143610155b15612458575060131936013560601c90565b503390565b6001600160a01b0384161561247e576124798483836000612acc565b61248a565b61248a82826001612c0b565b6001600160a01b038316156124ab576124a68383836001612acc565b611462565b61146282826000612c0b565b6124c18383612d05565b6124ce6000848484612809565b6108385760405162461bcd60e51b815260040161059890613a3e565b60006124f682516122de565b82604051602001612508929190613adb565b604051602081830303815290604052805190602001209050919050565b600080825160410361255b5760208301516040840151606085015160001a61254f87828585612e80565b9450945050505061210c565b5060009050600261210c565b600081600481111561257b5761257b613b36565b036125835750565b600181600481111561259757612597613b36565b036125e45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610598565b60028160048111156125f8576125f8613b36565b036126455760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610598565b600381600481111561265957612659613b36565b03611d2d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610598565b815460009081036126c4575060006104df565b82546000905b8082101561270e5760006126de8383612f44565b9050846126eb8783612f5f565b5411156126fa57809150612708565b612705816001613875565b92505b506126ca565b60008211801561273157508361272e866127296001866138be565b612f5f565b54145b156127415761207b6001836138be565b5090506104df565b60008181526002830160205260408120548190806127785761276b8585612f70565b92506000915061210c9050565b60019250905061210c565b60606104df82612f7c565b60006104df82612f89565b6000818152600283016020526040812054801515806127bd57506127bd8484612f70565b61166a5760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610598565b60006001600160a01b0384163b1561290657836001600160a01b031663150b7a02612832611c13565b8786866040518563ffffffff1660e01b81526004016128549493929190613b4c565b6020604051808303816000875af192505050801561288f575060408051601f3d908101601f1916820190925261288c91810190613b7f565b60015b6128ec573d8080156128bd576040519150601f19603f3d011682016040523d82523d6000602084013e6128c2565b606091505b5080516000036128e45760405162461bcd60e51b815260040161059890613a3e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e2f565b506001611e2f565b60ca5460cb5460405163c87b56dd60e01b815260048101919091526060916001600160a01b03169063c87b56dd90602401600060405180830381865afa15801561295c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261121e9190810190613b9c565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106129c35772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106129ef576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612a0d57662386f26fc10000830492506010015b6305f5e1008310612a25576305f5e100830492506008015b6127108310612a3957612710830492506004015b60648310612a4b576064830492506002015b600a83106104df5760010192915050565b600054610100900460ff16612a835760405162461bcd60e51b815260040161059890613a90565b6065612a8f8382613c57565b5060666108388282613c57565b600054610100900460ff16612ac35760405162461bcd60e51b815260040161059890613a90565b611d2d81612f93565b6000612ad6612113565b9050600060cf8281548110612aed57612aed6137c2565b600091825260208083206001600160a01b038a1684526003600490930201919091018152604080832060d0909252822090925090612b2a82612fe7565b905083811015612b8e57612b7860cf8281548110612b4a57612b4a6137c2565b600091825260208083206001600160a01b038d16845260036004909302019190910190526040902084613024565b8154600181018355600083815260209020018490555b60005b86811015612c00576000612ba5828a613875565b600081815260ce6020526040812054919250612bc187836120f5565b915050612bf0828a612bdd57612bd86001846138be565b612be8565b612be8836001613875565b89919061308b565b505060019092019150612b919050565b505050505050505050565b6000612c15612113565b9050600060cf8281548110612c2c57612c2c6137c2565b6000918252602080832030845260d090915260408320600490920201925090612c5482612fe7565b905083811015612ca157612c8b60cf8281548110612c7457612c746137c2565b906000526020600020906004020160000184613024565b8154600181018355600083815260209020018490555b60005b86811015612cfb576000612cb8828a613875565b600081815260ce6020526040812054919250612cd487836120f5565b915050612ceb828a612bdd57612bd86001846138be565b505060019092019150612ca49050565b5050505050505050565b6001600160a01b038216612d5b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610598565b612d6481611c1d565b15612db15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610598565b612dbf60008383600161245d565b612dc881611c1d565b15612e155760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610598565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612eb75750600090506003612f3b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612f0b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612f3457600060019250925050612f3b565b9150600090505b94509492505050565b6000612f5360028484186138e8565b61166a90848416613875565b600082815260208120820180611e2f565b600061166a8383613098565b6060600061166a836130b0565b60006104df825490565b609780546001600160a01b0319166001600160a01b0383169081179091556040519081527f38dd1fb2d26f08c618b847328db3c9278e3c4c8922fec738f7d8b0a3abc8a5a79060200160405180910390a150565b80546000908103612ffa57506000919050565b815482906000198101908110613012576130126137c2565b90600052602060002001549050919050565b61302d81612200565b1561304b576040516302e79ff360e21b815260040160405180910390fd5b600061305683612200565b905060005b8181101561146257600080613070868461310c565b909250905061308085838361308b565b50505060010161305b565b6000611e2f84848461311b565b6000818152600183016020526040812054151561166a565b60608160000180548060200260200160405190810160405280929190818152602001828054801561310057602002820191906000526020600020905b8154815260200190600101908083116130ec575b50505050509050919050565b60008080806121048686613138565b60008281526002840160205260408120829055611e2f8484613163565b60008080613146858561316f565b600081815260029690960160205260409095205494959350505050565b600061166a838361317b565b600061166a83836131ca565b60008181526001830160205260408120546131c2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104df565b5060006104df565b60008260000182815481106131e1576131e16137c2565b9060005260206000200154905092915050565b6001600160e01b031981168114611d2d57600080fd5b60006020828403121561321c57600080fd5b813561166a816131f4565b60008083601f84011261323957600080fd5b5081356001600160401b0381111561325057600080fd5b6020830191508360208260051b850101111561210c57600080fd5b6000806020838503121561327e57600080fd5b82356001600160401b0381111561329457600080fd5b6132a085828601613227565b90969095509350505050565b60005b838110156132c75781810151838201526020016132af565b50506000910152565b600081518084526132e88160208601602086016132ac565b601f01601f19169290920160200192915050565b60208152600061166a60208301846132d0565b60006020828403121561332157600080fd5b5035919050565b6001600160a01b0381168114611d2d57600080fd5b6000806040838503121561335057600080fd5b823561335b81613328565b946020939093013593505050565b60008060006060848603121561337e57600080fd5b833561338981613328565b9250602084013561339981613328565b929592945050506040919091013590565b60008083601f8401126133bc57600080fd5b5081356001600160401b038111156133d357600080fd5b60208301915083602082850101111561210c57600080fd5b6000806000806000806060878903121561340457600080fd5b86356001600160401b038082111561341b57600080fd5b6134278a838b01613227565b9098509650602089013591508082111561344057600080fd5b61344c8a838b01613227565b9096509450604089013591508082111561346557600080fd5b5061347289828a016133aa565b979a9699509497509295939492505050565b6000806000806060858703121561349a57600080fd5b8435935060208501356134ac81613328565b925060408501356001600160401b038111156134c757600080fd5b6134d387828801613227565b95989497509550505050565b600081518084526020808501945080840160005b8381101561350f578151875295820195908201906001016134f3565b509495945050505050565b60208152600061166a60208301846134df565b60006020828403121561353f57600080fd5b813561166a81613328565b8015158114611d2d57600080fd5b6000806040838503121561356b57600080fd5b823561357681613328565b915060208301356135868161354a565b809150509250929050565b604080825283519082018190526000906020906060840190828701845b828110156135ca578151845292840192908401906001016135ae565b505050838103828501526135de81866134df565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613626576136266135e8565b604052919050565b60006001600160401b03821115613647576136476135e8565b50601f01601f191660200190565b6000806000806080858703121561366b57600080fd5b843561367681613328565b9350602085013561368681613328565b92506040850135915060608501356001600160401b038111156136a857600080fd5b8501601f810187136136b957600080fd5b80356136cc6136c78261362e565b6135fe565b8181528860208385010111156136e157600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806000806060858703121561371957600080fd5b843561372481613328565b93506020850135925060408501356001600160401b0381111561374657600080fd5b6134d3878288016133aa565b6000806040838503121561376557600080fd5b82359150602083013561358681613328565b6000806040838503121561378a57600080fd5b823561379581613328565b9150602083013561358681613328565b6000602082840312156137b757600080fd5b815161166a81613328565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806137ec57607f821691505b60208210810361380c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156104df576104df61385f565b60006020828403121561389a57600080fd5b815161166a8161354a565b6000600182016138b7576138b761385f565b5060010190565b818103818111156104df576104df61385f565b80820281158282048414176104df576104df61385f565b60008261390557634e487b7160e01b600052601260045260246000fd5b500490565b6000825161391c8184602087016132ac565b602f60f81b920191825250600101919050565b600083516139418184602088016132ac565b8351908301906139558183602088016132ac565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b878152600060206bffffffffffffffffffffffff198960601b168184015287603484015286605484015260748301865182880160005b828110156139fe5781516001600160a01b0316845292840192908401906001016139d9565b50505085815284519082019085830160005b82811015613a2c57815184529284019290840190600101613a10565b50919c9b505050505050505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351613b1381601a8501602088016132ac565b835190830190613b2a81601a8401602088016132ac565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906135de908301846132d0565b600060208284031215613b9157600080fd5b815161166a816131f4565b600060208284031215613bae57600080fd5b81516001600160401b03811115613bc457600080fd5b8201601f81018413613bd557600080fd5b8051613be36136c78261362e565b818152856020838501011115613bf857600080fd5b611fed8260208301602086016132ac565b601f82111561083857600081815260208120601f850160051c81016020861015613c305750805b601f850160051c820191505b81811015613c4f57828155600101613c3c565b505050505050565b81516001600160401b03811115613c7057613c706135e8565b613c8481613c7e84546137d8565b84613c09565b602080601f831160018114613cb95760008415613ca15750858301515b600019600386901b1c1916600185901b178555613c4f565b600085815260208120601f198616915b82811015613ce857888601518255948401946001909101908401613cc9565b5085821015613d065787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220667cbf00d2ab2ac803f6798c0bea6e38b04271e084161b569059bc444b3398f764736f6c63430008120033