[ { "inputs": [ { "internalType": "string", "name": "_contractName", "type": "string" }, { "internalType": "address", "name": "_bukPOSContract", "type": "address" }, { "internalType": "address", "name": "_bukProtocolContract", "type": "address" }, { "internalType": "address", "name": "_bukTreasuryContract", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldBukProtocolContract", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newBukProtocolContract", "type": "address" } ], "name": "SetBukProtocol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldTreasuryContract", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newTreasuryContract", "type": "address" } ], "name": "SetBukTreasury", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "marketplaceContract", "type": "address" } ], "name": "SetMarketplace", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldNFTPOSContractAddr", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newNFTPOSContractAddr", "type": "address" } ], "name": "SetNFTPOSContractRole", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "oldUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newUri", "type": "string" } ], "name": "SetURI", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BUK_PROTOCOL_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEE_DENOMINATOR", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MARKETPLACE_CONTRACT_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": "bukProtocolContract", "outputs": [ { "internalType": "contract IBukProtocol", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_mintPOS", "type": "bool" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "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": "_id", "type": "uint256" }, { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nftPOSContract", "outputs": [ { "internalType": "contract IBukPOSNFTs", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" }, { "internalType": "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": "_amount", "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": "address", "name": "_nftPOSContract", "type": "address" } ], "name": "setBukPOSNFTRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_bukProtocolContract", "type": "address" } ], "name": "setBukProtocol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_bukTreasuryContract", "type": "address" } ], "name": "setBukTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_marketplaceContract", "type": "address" } ], "name": "setMarketplaceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "string", "name": "_newuri", "type": "string" } ], "name": "setURI", "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uriByTokenId", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003dda38038062003dda83398101604081905262000034916200039f565b6040805160208101909152600081526200004e81620000e7565b506004805460ff1916905560056200006785826200053b565b506200007381620000f9565b6200007e836200015b565b6200008982620001b6565b620000966000336200024c565b620000c27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336200024c565b620000dd60008051602062003dba833981519152836200024c565b5050505062000607565b6003620000f582826200053b565b5050565b600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f7cbd0b9375028f2cbacbc47d59546d01aa18f154b95801abffd32c61b067451c91015b60405180910390a15050565b600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa5ca3286f3282d74e060fa9a56f224eff4f561a8517bc108db6735650b66868191016200014f565b600780546001600160a01b038381166001600160a01b031983161790925516620001f060008051602062003dba833981519152836200024c565b6200020b60008051602062003dba83398151915282620002ec565b604080516001600160a01b038084168252841660208201527fa8a9f135090908268f397c44ff511df8081a148eb8ebcaa625992a103f4b5a2b91016200014f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000f5576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002a83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615620000f5576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200039a57600080fd5b919050565b60008060008060808587031215620003b657600080fd5b84516001600160401b0380821115620003ce57600080fd5b818701915087601f830112620003e357600080fd5b815181811115620003f857620003f86200036c565b604051601f8201601f19908116603f011681019083821181831017156200042357620004236200036c565b81604052828152602093508a848487010111156200044057600080fd5b600091505b8282101562000464578482018401518183018501529083019062000445565b60008484830101528098505050506200047f81880162000382565b94505050620004916040860162000382565b9150620004a16060860162000382565b905092959194509250565b600181811c90821680620004c157607f821691505b602082108103620004e257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053657600081815260208120601f850160051c81016020861015620005115750805b601f850160051c820191505b8181101562000532578281556001016200051d565b5050505b505050565b81516001600160401b038111156200055757620005576200036c565b6200056f81620005688454620004ac565b84620004e8565b602080601f831160018114620005a757600084156200058e5750858301515b600019600386901b1c1916600185901b17855562000532565b600085815260208120601f198616915b82811015620005d857888601518255948401946001909101908401620005b7565b5085821015620005f75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6137a380620006176000396000f3fe608060405234801561001057600080fd5b506004361061020a5760003560e01c80634e1273f41161012a578063a217fddf116100bd578063d547741f1161008c578063e985e9c511610071578063e985e9c514610504578063f242432a14610540578063fa8e05b71461055357600080fd5b8063d547741f146104d5578063d73792a9146104e857600080fd5b8063a217fddf14610494578063a22cb4651461049c578063a9494a47146104af578063cb603275146104c257600080fd5b8063862440e2116100f9578063862440e2146104105780638b3545341461042357806391d1485414610436578063a05ce05e1461046d57600080fd5b80634e1273f4146103b65780635c975abb146103d657806375b238fc146103e15780638456cb591461040857600080fd5b80632a247f3e116101a257806331126dd11161017157806331126dd11461037557806336568abe146103885780633f4ba83a1461039b5780634cefc38a146103a357600080fd5b80632a247f3e146102f45780632a55205a1461031b5780632eb2c2d61461034d5780632f2ff15d1461036257600080fd5b8063167af39b116101de578063167af39b14610280578063248a9ca31461029357806327481874146102b657806327c9443b146102c957600080fd5b8062fdd58e1461020f57806301ffc9a71461023557806306fdde03146102585780630e89341c1461026d575b600080fd5b61022261021d3660046128e2565b610566565b6040519081526020015b60405180910390f35b61024861024336600461293c565b610614565b604051901515815260200161022c565b61026061061f565b60405161022c91906129a9565b61026061027b3660046129bc565b6106ad565b61026061028e3660046129bc565b61074f565b6102226102a13660046129bc565b60009081526020819052604090206001015490565b6102226102c4366004612a17565b610768565b6006546102dc906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b6102227f0d718b8af83cb9b4167cc490bac82a506e58f2696ce3ccf6e4e1deac9240d19f81565b61032e610329366004612aad565b610823565b604080516001600160a01b03909316835260208301919091520161022c565b61036061035b366004612c8e565b610941565b005b610360610370366004612d3c565b610b9e565b610360610383366004612d7a565b610bc8565b610360610396366004612d3c565b610d3c565b610360610dc8565b6103606103b1366004612dc4565b610dfd565b6103c96103c4366004612de1565b610e92565b60405161022c9190612ee9565b60045460ff16610248565b6102227fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610360610fd0565b61036061041e366004612efc565b611002565b610360610431366004612dc4565b6110a0565b610248610444366004612d3c565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6102227fc90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c9781565b610222600081565b6103606104aa366004612f4d565b6110d3565b6007546102dc906001600160a01b031681565b6103606104d0366004612dc4565b6110de565b6103606104e3366004612d3c565b611111565b6104f161271081565b60405161ffff909116815260200161022c565b610248610512366004612f7b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b61036061054e366004612fa9565b611136565b610360610561366004612dc4565b6112d3565b60006001600160a01b0383166105e95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060008181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b600061060e82611306565b6005805461062c90613012565b80601f016020809104026020016040519081016040528092919081815260200182805461065890613012565b80156106a55780601f1061067a576101008083540402835291602001916106a5565b820191906000526020600020905b81548152906001019060200180831161068857829003601f168201915b505050505081565b60008181526009602052604090208054606091906106ca90613012565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690613012565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b50505050509050919050565b6009602052600090815260409020805461062c90613012565b60007fc90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c97610794816113a8565b6107d6888a8989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b292505050565b6108168985858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114db92505050565b5096979650505050505050565b6007546040517fb76c632b00000000000000000000000000000000000000000000000000000000815260048101849052600091829182916001600160a01b03169063b76c632b90602401600060405180830381865afa15801561088a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b29190810190613075565b90506000805b82518110156109275761271061ffff168382815181106108da576108da61315c565b6020026020010151602001516bffffffffffffffffffffffff16876108ff91906131ba565b61090991906131d1565b610913908361320c565b91508061091f8161321f565b9150506108b8565b506008546001600160a01b031693509150505b9250929050565b7f0d718b8af83cb9b4167cc490bac82a506e58f2696ce3ccf6e4e1deac9240d19f61096b816113a8565b6109736115d0565b61097d8633610512565b6109c95760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120746f6b656e206f776e6572206f7220617070726f76656400000060448201526064016105e0565b835160005b81811015610b875760075486516000916001600160a01b031690638db3ed6090899085908110610a0057610a0061315c565b60200260200101516040518263ffffffff1660e01b8152600401610a2691815260200190565b6101e060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190613271565b60075488519192506001600160a01b031690638db3ed6090899085908110610a9257610a9261315c565b60200260200101516040518263ffffffff1660e01b8152600401610ab891815260200190565b6101e060405180830381865afa158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa9190613271565b6101a00151610b0b90610e106131ba565b8160e00151610b1a919061333f565b42108015610b2a5750806101c001515b610b765760405162461bcd60e51b815260206004820152601860248201527f5472616465206c696d69742074696d652063726f73736564000000000000000060448201526064016105e0565b50610b808161321f565b90506109ce565b50610b958787878787611625565b50505050505050565b600082815260208190526040902060010154610bb9816113a8565b610bc383836118c6565b505050565b7fc90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c97610bf2816113a8565b8115610d135760008481526009602052604081208054610c1190613012565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3d90613012565b8015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b50506006546040517fa4b645eb0000000000000000000000000000000000000000000000000000000081529495506001600160a01b03169363a4b645eb9350610cdf92508a9150899089908790600401613352565b600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b50505050505b6000848152600960205260408120610d2a9161287f565b610d35858585611982565b5050505050565b6001600160a01b0381163314610dba5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105e0565b610dc48282611b34565b5050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610df2816113a8565b610dfa611bd1565b50565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e27816113a8565b610e517f0d718b8af83cb9b4167cc490bac82a506e58f2696ce3ccf6e4e1deac9240d19f836118c6565b6040516001600160a01b03831681527f53336f5d8afda39d26b6aaed03c7c6213b755d94c56df6bce88e1dc1ac52fb4f906020015b60405180910390a15050565b60608151835114610f0b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016105e0565b6000835167ffffffffffffffff811115610f2757610f27612acf565b604051908082528060200260200182016040528015610f50578160200160208202803683370190505b50905060005b8451811015610fc857610f9b858281518110610f7457610f7461315c565b6020026020010151858381518110610f8e57610f8e61315c565b6020026020010151610566565b828281518110610fad57610fad61315c565b6020908102919091010152610fc18161321f565b9050610f56565b509392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ffa816113a8565b610dfa611c41565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561102c816113a8565b6000838152600960205260409020805461104590613012565b90506000036110965760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e20646f6573206e6f74206578697374206f6e2042756b4e4654730060448201526064016105e0565b610bc383836114db565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756110ca816113a8565b610dc482611c9c565b610dc4338383611d0e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611108816113a8565b610dc482611e20565b60008281526020819052604090206001015461112c816113a8565b610bc38383611b34565b7f0d718b8af83cb9b4167cc490bac82a506e58f2696ce3ccf6e4e1deac9240d19f611160816113a8565b6111686115d0565b6007546040517f8db3ed60000000000000000000000000000000000000000000000000000000008152600481018690526000916001600160a01b031690638db3ed60906024016101e060405180830381865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f09190613271565b9050806101a00151610e1061120591906131ba565b8160e00151611214919061333f565b421080156112245750806101c001515b6112705760405162461bcd60e51b815260206004820152601860248201527f5472616465206c696d69742074696d652063726f73736564000000000000000060448201526064016105e0565b61127a8733610512565b6112c65760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120746f6b656e206f776e6572206f7220617070726f76656400000060448201526064016105e0565b610b958787878787611eeb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756112fd816113a8565b610dc4826120c5565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061139957507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061060e575061060e82612137565b610dfa81336121ce565b6001600160a01b03841661142e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105e0565b33600061143a85612241565b9050600061144785612241565b905060008681526001602090815260408083206001600160a01b038b1684529091528120805487929061147b90849061320c565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610b958360008989898961228c565b600082815260096020526040812080546114f490613012565b80601f016020809104026020016040519081016040528092919081815260200182805461152090613012565b801561156d5780601f106115425761010080835404028352916020019161156d565b820191906000526020600020905b81548152906001019060200180831161155057829003601f168201915b505050600086815260096020526040902092935061158f9150849050826133e2565b507f2e75a029baf09d21877e17361f63251a4db28920eaa994f9dfd7c2d47eb9b0a38382846040516115c3939291906134de565b60405180910390a1505050565b60045460ff16156116235760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105e0565b565b815183511461169c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016105e0565b6001600160a01b0384166117185760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105e0565b3360005b84518110156118585760008582815181106117395761173961315c565b6020026020010151905060008583815181106117575761175761315c565b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156117fe5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016105e0565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061183d90849061320c565b92505081905550505050806118519061321f565b905061171c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118a8929190613513565b60405180910390a46118be818787878787612490565b505050505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610dc4576000828152602081815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561193e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0383166119fe5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105e0565b336000611a0a84612241565b90506000611a1784612241565b6040805160208082018352600091829052888252600181528282206001600160a01b038b1683529052205490915084811015611aba5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016105e0565b60008681526001602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610b95565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610dc4576000828152602081815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b611bd96125eb565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b611c496115d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c243390565b600880546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f7cbd0b9375028f2cbacbc47d59546d01aa18f154b95801abffd32c61b067451c9101610e86565b816001600160a01b0316836001600160a01b031603611d955760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016105e0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600780546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083161790925516611e817fc90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c97836118c6565b611eab7fc90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c9782611b34565b604080516001600160a01b038084168252841660208201527fa8a9f135090908268f397c44ff511df8081a148eb8ebcaa625992a103f4b5a2b9101610e86565b6001600160a01b038416611f675760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105e0565b336000611f7385612241565b90506000611f8085612241565b905060008681526001602090815260408083206001600160a01b038c1684529091529020548581101561201b5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016105e0565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061205a90849061320c565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46120ba848a8a8a8a8a61228c565b505050505050505050565b600680546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527fa5ca3286f3282d74e060fa9a56f224eff4f561a8517bc108db6735650b6686819101610e86565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461060e565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610dc4576121ff8161263d565b61220a83602061264f565b60405160200161221b929190613541565b60408051601f198184030181529082905262461bcd60e51b82526105e0916004016129a9565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061227b5761227b61315c565b602090810291909101015292915050565b6001600160a01b0384163b156118be576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906122e990899089908890889088906004016135c2565b6020604051808303816000875af1925050508015612324575060408051601f3d908101601f1916820190925261232191810190613605565b60015b6123d957612330613622565b806308c379a003612369575061234461363e565b8061234f575061236b565b8060405162461bcd60e51b81526004016105e091906129a9565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016105e0565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610b955760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016105e0565b6001600160a01b0384163b156118be576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906124ed90899089908890889088906004016136e6565b6020604051808303816000875af1925050508015612528575060408051601f3d908101601f1916820190925261252591810190613605565b60015b61253457612330613622565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610b955760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016105e0565b60045460ff166116235760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105e0565b606061060e6001600160a01b03831660145b6060600061265e8360026131ba565b61266990600261320c565b67ffffffffffffffff81111561268157612681612acf565b6040519080825280601f01601f1916602001820160405280156126ab576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106126e2576126e261315c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106127455761274561315c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006127818460026131ba565b61278c90600161320c565b90505b6001811115612829577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106127cd576127cd61315c565b1a60f81b8282815181106127e3576127e361315c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361282281613738565b905061278f565b5083156128785760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105e0565b9392505050565b50805461288b90613012565b6000825580601f1061289b575050565b601f016020900490600052602060002090810190610dfa91905b808211156128c957600081556001016128b5565b5090565b6001600160a01b0381168114610dfa57600080fd5b600080604083850312156128f557600080fd5b8235612900816128cd565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610dfa57600080fd5b60006020828403121561294e57600080fd5b81356128788161290e565b60005b8381101561297457818101518382015260200161295c565b50506000910152565b60008151808452612995816020860160208601612959565b601f01601f19169290920160200192915050565b602081526000612878602083018461297d565b6000602082840312156129ce57600080fd5b5035919050565b60008083601f8401126129e757600080fd5b50813567ffffffffffffffff8111156129ff57600080fd5b60208301915083602082850101111561093a57600080fd5b600080600080600080600060a0888a031215612a3257600080fd5b873596506020880135612a44816128cd565b955060408801359450606088013567ffffffffffffffff80821115612a6857600080fd5b612a748b838c016129d5565b909650945060808a0135915080821115612a8d57600080fd5b50612a9a8a828b016129d5565b989b979a50959850939692959293505050565b60008060408385031215612ac057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810181811067ffffffffffffffff82111715612b1e57612b1e612acf565b60405250565b601f19601f830116810181811067ffffffffffffffff82111715612b4a57612b4a612acf565b6040525050565b6040516101e0810167ffffffffffffffff81118282101715612b7557612b75612acf565b60405290565b600067ffffffffffffffff821115612b9557612b95612acf565b5060051b60200190565b600082601f830112612bb057600080fd5b81356020612bbd82612b7b565b604051612bca8282612b24565b83815260059390931b8501820192828101915086841115612bea57600080fd5b8286015b84811015612c055780358352918301918301612bee565b509695505050505050565b600067ffffffffffffffff831115612c2a57612c2a612acf565b604051612c416020601f19601f8701160182612b24565b809150838152848484011115612c5657600080fd5b83836020830137600060208583010152509392505050565b600082601f830112612c7f57600080fd5b61287883833560208501612c10565b600080600080600060a08688031215612ca657600080fd5b8535612cb1816128cd565b94506020860135612cc1816128cd565b9350604086013567ffffffffffffffff80821115612cde57600080fd5b612cea89838a01612b9f565b94506060880135915080821115612d0057600080fd5b612d0c89838a01612b9f565b93506080880135915080821115612d2257600080fd5b50612d2f88828901612c6e565b9150509295509295909350565b60008060408385031215612d4f57600080fd5b823591506020830135612d61816128cd565b809150509250929050565b8015158114610dfa57600080fd5b60008060008060808587031215612d9057600080fd5b8435612d9b816128cd565b935060208501359250604085013591506060850135612db981612d6c565b939692955090935050565b600060208284031215612dd657600080fd5b8135612878816128cd565b60008060408385031215612df457600080fd5b823567ffffffffffffffff80821115612e0c57600080fd5b818501915085601f830112612e2057600080fd5b81356020612e2d82612b7b565b604051612e3a8282612b24565b83815260059390931b8501820192828101915089841115612e5a57600080fd5b948201945b83861015612e81578535612e72816128cd565b82529482019490820190612e5f565b96505086013592505080821115612e9757600080fd5b50612ea485828601612b9f565b9150509250929050565b600081518084526020808501945080840160005b83811015612ede57815187529582019590820190600101612ec2565b509495945050505050565b6020815260006128786020830184612eae565b60008060408385031215612f0f57600080fd5b82359150602083013567ffffffffffffffff811115612f2d57600080fd5b8301601f81018513612f3e57600080fd5b612ea485823560208401612c10565b60008060408385031215612f6057600080fd5b8235612f6b816128cd565b91506020830135612d6181612d6c565b60008060408385031215612f8e57600080fd5b8235612f99816128cd565b91506020830135612d61816128cd565b600080600080600060a08688031215612fc157600080fd5b8535612fcc816128cd565b94506020860135612fdc816128cd565b93506040860135925060608601359150608086013567ffffffffffffffff81111561300657600080fd5b612d2f88828901612c6e565b600181811c9082168061302657607f821691505b60208210810361305f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8051613070816128cd565b919050565b6000602080838503121561308857600080fd5b825167ffffffffffffffff81111561309f57600080fd5b8301601f810185136130b057600080fd5b80516130bb81612b7b565b604080516130c98382612b24565b83815260069390931b84018501928581019250888411156130e957600080fd5b938501935b838510156131505781858a0312156131065760008081fd5b815161311181612afe565b855161311c816128cd565b8152858701516bffffffffffffffffffffffff8116811461313d5760008081fd5b81880152835293810193918501916130ee565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761060e5761060e61318b565b600082613207577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561060e5761060e61318b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132505761325061318b565b5060010190565b80516006811061307057600080fd5b805161307081612d6c565b60006101e0828403121561328457600080fd5b61328c612b51565b8251815260208301516020820152604083015160408201526132b060608401613257565b60608201526080830151608082015260a083015160a08201526132d560c08401613065565b60c082015260e08381015190820152610100808401519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c0613334818501613266565b908201529392505050565b8181038181111561060e5761060e61318b565b6001600160a01b038516815283602082015282604082015260a06060820152600061338060a083018461297d565b8281036080840152600081526020810191505095945050505050565b601f821115610bc357600081815260208120601f850160051c810160208610156133c35750805b601f850160051c820191505b818110156118be578281556001016133cf565b815167ffffffffffffffff8111156133fc576133fc612acf565b6134108161340a8454613012565b8461339c565b602080601f831160018114613463576000841561342d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556118be565b600085815260208120601f198616915b8281101561349257888601518255948401946001909101908401613473565b50858210156134ce57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8381526060602082015260006134f7606083018561297d565b8281036040840152613509818561297d565b9695505050505050565b6040815260006135266040830185612eae565b82810360208401526135388185612eae565b95945050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613579816017850160208801612959565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516135b6816028840160208801612959565b01602801949350505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526135fa60a083018461297d565b979650505050505050565b60006020828403121561361757600080fd5b81516128788161290e565b600060033d111561363b5760046000803e5060005160e01c5b90565b600060443d101561364c5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561369a57505050505090565b82850191508151818111156136b25750505050505090565b843d87010160208285010111156136cc5750505050505090565b6136db60208286010187612b24565b509095945050505050565b60006001600160a01b03808816835280871660208401525060a0604083015261371260a0830186612eae565b82810360608401526137248186612eae565b90508281036080840152613150818561297d565b6000816137475761374761318b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122038c545bf43eca354dcd8f3afa5fd7fe2f6317e194434ad3c249786b6645c9ba864736f6c63430008130033c90056e279113999fe5438fedaf4c98ded59812067ad79dd0c968b1a84dc7c9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000008b4111a475bfd3e79f0c9f10966492960cff11f4000000000000000000000000317e6b9ca01540bb25bd75a5d1da13596c27d1190000000000000000000000004136f35a47d769305d96930f5b7a0cc189e72b9e000000000000000000000000000000000000000000000000000000000000001242756b20486f74656c20626f6f6b696e67730000000000000000000000000000