[ { "inputs": [ { "internalType": "address", "name": "chosenOptionFactory", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "name": "IncorrectMaturity", "type": "error" }, { "inputs": [], "name": "NoReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "minuend", "type": "uint256" }, { "internalType": "uint256", "name": "subtrahend", "type": "uint256" } ], "name": "NotEnoughReceived", "type": "error" }, { "inputs": [], "name": "NotInteracted", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "type": "error" }, { "inputs": [], "name": "ZeroInput", "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": 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": [ { "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": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "address", "name": "long0To", "type": "address" }, { "internalType": "address", "name": "long1To", "type": "address" }, { "internalType": "address", "name": "shortTo", "type": "address" }, { "internalType": "uint256", "name": "long0Amount", "type": "uint256" }, { "internalType": "uint256", "name": "long1Amount", "type": "uint256" }, { "internalType": "uint256", "name": "shortAmount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct TimeswapV2TokenBurnParam", "name": "param", "type": "tuple" } ], "name": "burn", "outputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "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": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "address", "name": "long0To", "type": "address" }, { "internalType": "address", "name": "long1To", "type": "address" }, { "internalType": "address", "name": "shortTo", "type": "address" }, { "internalType": "uint256", "name": "long0Amount", "type": "uint256" }, { "internalType": "uint256", "name": "long1Amount", "type": "uint256" }, { "internalType": "uint256", "name": "shortAmount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "internalType": "struct TimeswapV2TokenMintParam", "name": "param", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "optionFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "enum TimeswapV2OptionPosition", "name": "position", "type": "uint8" } ], "internalType": "struct TimeswapV2TokenPosition", "name": "timeswapV2TokenPosition", "type": "tuple" } ], "name": "positionOf", "outputs": [ { "internalType": "uint256", "name": "amount", "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": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint256", "name": "strike", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "enum TimeswapV2OptionPosition", "name": "position", "type": "uint8" } ], "internalType": "struct TimeswapV2TokenPosition", "name": "timeswapV2TokenPosition", "type": "tuple" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferTokenPositionFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60a06040523480156200001157600080fd5b506040516200398e3803806200398e833981016040819052620000349162000162565b6040805180820190915260118152702a34b6b2b9bbb0b8102b19102a37b5b2b760791b602082015262000067816200008d565b506001600160601b0319606083901b1660805262000085816200008d565b50506200029f565b8051620000a2906002906020840190620000a6565b5050565b828054620000b49062000262565b90600052602060002090601f016020900481019282620000d8576000855562000123565b82601f10620000f357805160ff191683800117855562000123565b8280016001018555821562000123579182015b828111156200012357825182559160200191906001019062000106565b506200013192915062000135565b5090565b5b8082111562000131576000815560010162000136565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200017657600080fd5b82516001600160a01b03811681146200018e57600080fd5b602084810151919350906001600160401b0380821115620001ae57600080fd5b818601915086601f830112620001c357600080fd5b815181811115620001d857620001d86200014c565b604051601f8201601f19908116603f011681019083821181831017156200020357620002036200014c565b8160405282815289868487010111156200021c57600080fd5b600093505b8284101562000240578484018601518185018701529285019262000221565b82841115620002525760008684830101525b8096505050505050509250929050565b600181811c908216806200027757607f821691505b602082108114156200029957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c6136c2620002cc6000396000818161022c015281816106b5015261115001526136c26000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c80634fd991ea116100a2578063b3461c8711610071578063b3461c8714610227578063bb19c64814610266578063bd85b03914610279578063e985e9c514610299578063f242432a146102d557600080fd5b80634fd991ea146101db5780635c9b7282146101ee578063a22cb46514610201578063a38d7a171461021457600080fd5b80632f745c59116100de5780632f745c591461018d578063390a5ba5146101a05780634e1273f4146101a85780634f6ccce7146101c857600080fd5b8062fdd58e1461010f57806301ffc9a7146101355780630e89341c146101585780632eb2c2d614610178575b600080fd5b61012261011d366004612919565b6102e8565b6040519081526020015b60405180910390f35b61014861014336600461295b565b61037e565b604051901515815260200161012c565b61016b610166366004612978565b6103d0565b60405161012c91906129e9565b61018b610186366004612b7e565b610464565b005b61012261019b366004612919565b6104b0565b600654610122565b6101bb6101b6366004612c2b565b6104ed565b60405161012c9190612d32565b6101226101d6366004612978565b610616565b61016b6101e9366004612d58565b61063d565b61018b6101fc366004612d9e565b6110d1565b61018b61020f366004612def565b61111c565b61016b610222366004612d58565b61112b565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161012c565b610122610274366004612e2d565b6116c0565b610122610287366004612978565b60009081526005602052604090205490565b6101486102a7366004612e63565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61018b6102e3366004612e91565b6116f6565b60006001600160a01b0383166103585760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103af57506001600160e01b031982166303a24d0760e21b145b806103ca57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546103df90612ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461040b90612ef9565b80156104585780601f1061042d57610100808354040283529160200191610458565b820191906000526020600020905b81548152906001019060200180831161043b57829003601f168201915b50505050509050919050565b6001600160a01b038516331480610480575061048085336102a7565b61049c5760405162461bcd60e51b815260040161034f90612f2e565b6104a9858585858561173b565b5050505050565b6001600160a01b03821660009081526003602052604081208054839081106104da576104da612f7d565b9060005260206000200154905092915050565b606081518351146105525760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161034f565b600083516001600160401b0381111561056d5761056d6129fc565b604051908082528060200260200182016040528015610596578160200160208202803683370190505b50905060005b845181101561060e576105e18582815181106105ba576105ba612f7d565b60200260200101518583815181106105d4576105d4612f7d565b60200260200101516102e8565b8282815181106105f3576105f3612f7d565b602090810291909101015261060781612fa9565b905061059c565b509392505050565b60006006828154811061062b5761062b612f7d565b90600052602060002001549050919050565b606061065061064b83613097565b611934565b61067f61066060208401846130a3565b61067060408501602086016130a3565b846040013585606001356119d0565b6106ae61068f60208401846130a3565b61069f60408501602086016130a3565b84604001358560600135611a44565b60006106f67f00000000000000000000000000000000000000000000000000000000000000006106e160208601866130a3565b6106f160408701602088016130a3565b611abc565b9050600060e084013515610921578360e00135826001600160a01b031663af2f91ea866040013587606001353060006040518563ffffffff1660e01b815260040161074494939291906130f8565b60206040518083038186803b15801561075c57600080fd5b505afa158015610770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610794919061312b565b61079e9190613144565b6040805160a08101909152909150600090806107bd60208801886130a3565b6001600160a01b031681526020018660200160208101906107de91906130a3565b6001600160a01b03168152602001866040013581526020018660600135815260200160006002811115610813576108136130c0565b90529050600061082282611ae1565b6000818152600a6020526040902054909150806108ef57600b6000815461084890612fa9565b9182905550600081815260096020908152604091829020865181546001600160a01b039182166001600160a01b0319918216178355928801516001808401805492909316919094161790559186015160028084019190915560608701516003840155608087015160048401805495965088959193909260ff199092169184908111156108d6576108d66130c0565b021790555050506000828152600a602052604090208190555b61091d61090260a0890160808a016130a3565b828960e0013560405180602001604052806000815250611b11565b5050505b600061010085013515610b4d57846101000135836001600160a01b031663af2f91ea876040013588606001353060016040518563ffffffff1660e01b815260040161096f94939291906130f8565b60206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf919061312b565b6109c99190613144565b6040805160a08101909152909150600090806109e860208901896130a3565b6001600160a01b03168152602001876020016020810190610a0991906130a3565b6001600160a01b03168152602001876040013581526020018760600135815260200160016002811115610a3e57610a3e6130c0565b905290506000610a4d82611ae1565b6000818152600a602052604090205490915080610b1a57600b60008154610a7390612fa9565b9182905550600081815260096020908152604091829020865181546001600160a01b039182166001600160a01b0319918216178355928801516001808401805492909316919094161790559186015160028084019190915560608701516003840155608087015160048401805495965088959193909260ff19909216918490811115610b0157610b016130c0565b021790555050506000828152600a602052604090208190555b610b49610b2d60c08a0160a08b016130a3565b828a610100013560405180602001604052806000815250611b11565b5050505b600061012086013515610d7857856101200135846001600160a01b031663af2f91ea886040013589606001353060026040518563ffffffff1660e01b8152600401610b9b94939291906130f8565b60206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb919061312b565b610bf59190613144565b6040805160a0810190915290915060009080610c1460208a018a6130a3565b6001600160a01b03168152602001886020016020810190610c3591906130a3565b6001600160a01b031681526020018860400135815260200188606001358152602001600280811115610c6957610c696130c0565b905290506000610c7882611ae1565b6000818152600a602052604090205490915080610d4557600b60008154610c9e90612fa9565b9182905550600081815260096020908152604091829020865181546001600160a01b039182166001600160a01b0319918216178355928801516001808401805492909316919094161790559186015160028084019190915560608701516003840155608087015160048401805495965088959193909260ff19909216918490811115610d2c57610d2c6130c0565b021790555050506000828152600a602052604090208190555b610d74610d5860e08b0160c08c016130a3565b828b610120013560405180602001604052806000815250611b11565b5050505b604080516101008101909152339063e13c022c9080610d9a60208b018b6130a3565b6001600160a01b03168152602001896020016020810190610dbb91906130a3565b6001600160a01b0316815260200189604001358152602001896060013581526020018960e0013581526020018961010001358152602001896101200135815260200189806101400190610e0e919061315c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e084901b168152610e659190600401613211565b600060405180830381600087803b158015610e7f57600080fd5b505af1158015610e93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ebb9190810190613224565b945060e086013515610f5b57610f5b846001600160a01b031663af2f91ea886040013589606001353060006040518563ffffffff1660e01b8152600401610f0594939291906130f8565b60206040518083038186803b158015610f1d57600080fd5b505afa158015610f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f55919061312b565b84611c43565b61010086013515610ffa57610ffa846001600160a01b031663af2f91ea886040013589606001353060016040518563ffffffff1660e01b8152600401610fa494939291906130f8565b60206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff4919061312b565b83611c43565b6101208601351561109957611099846001600160a01b031663af2f91ea886040013589606001353060026040518563ffffffff1660e01b815260040161104394939291906130f8565b60206040518083038186803b15801561105b57600080fd5b505afa15801561106f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611093919061312b565b82611c43565b6110c86110a960208801886130a3565b6110b96040890160208a016130a3565b88604001358960600135611c6e565b50505050919050565b6111168484600a60006110f16110ec368990038901896132a5565b611ae1565b81526020019081526020016000205484604051806020016040528060008152506116f6565b50505050565b611127338383611cc3565b5050565b606061113961064b83613097565b61114961068f60208401846130a3565b600061117c7f00000000000000000000000000000000000000000000000000000000000000006106e160208601866130a3565b905060e08301351561120b576001600160a01b03811663b2ceca77604085013560608601356111b160a08801608089016130a3565b60008860e001356040518663ffffffff1660e01b81526004016111d8959493929190613330565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050505b6101008301351561129a576001600160a01b03811663b2ceca776040850135606086013561123f60c0880160a089016130a3565b60018861010001356040518663ffffffff1660e01b8152600401611267959493929190613330565b600060405180830381600087803b15801561128157600080fd5b505af1158015611295573d6000803e3d6000fd5b505050505b61012083013515611329576001600160a01b03811663b2ceca77604085013560608601356112ce60e0880160c089016130a3565b60028861012001356040518663ffffffff1660e01b81526004016112f6959493929190613330565b600060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050505b61133761014084018461315c565b15905061148457604080516101008101909152339063fb05b8fe908061136060208801886130a3565b6001600160a01b0316815260200186602001602081019061138191906130a3565b6001600160a01b0316815260200186604001358152602001866060013581526020018660e00135815260200186610100013581526020018661012001358152602001868061014001906113d4919061315c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e084901b16815261142b9190600401613211565b600060405180830381600087803b15801561144557600080fd5b505af1158015611459573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114819190810190613224565b91505b60e083013515611530576040805160a08101909152600090806114aa60208701876130a3565b6001600160a01b031681526020018560200160208101906114cb91906130a3565b6001600160a01b03168152602001856040013581526020018560600135815260200160006002811115611500576115006130c0565b9052905061152e33600a600061151585611ae1565b8152602001908152602001600020548660e00135611da4565b505b610100830135156115de576040805160a081019091526000908061155760208701876130a3565b6001600160a01b0316815260200185602001602081019061157891906130a3565b6001600160a01b031681526020018560400135815260200185606001358152602001600160028111156115ad576115ad6130c0565b905290506115dc33600a60006115c285611ae1565b815260200190815260200160002054866101000135611da4565b505b6101208301351561168b576040805160a081019091526000908061160560208701876130a3565b6001600160a01b0316815260200185602001602081019061162691906130a3565b6001600160a01b03168152602001856040013581526020018560600135815260200160028081111561165a5761165a6130c0565b9052905061168933600a600061166f85611ae1565b815260200190815260200160002054866101200135611da4565b505b6116ba61169b60208501856130a3565b6116ab60408601602087016130a3565b85604001358660600135611c6e565b50919050565b60006116ef83600a836116db6110ec368890038801886132a5565b8152602001908152602001600020546102e8565b9392505050565b6001600160a01b038516331480611712575061171285336102a7565b61172e5760405162461bcd60e51b815260040161034f90612f2e565b6104a98585858585611f3e565b815183511461179d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161034f565b6001600160a01b0384166117c35760405162461bcd60e51b815260040161034f9061336a565b336117d2818787878787612084565b60005b84518110156118b85760008582815181106117f2576117f2612f7d565b60200260200101519050600085838151811061181057611810612f7d565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118605760405162461bcd60e51b815260040161034f906133af565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061189d908490613144565b92505081905550505050806118b190612fa9565b90506117d5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119089291906133f9565b60405180910390a461191e8187878787876120f7565b61192c81878787878761216a565b505050505050565b60808101516001600160a01b03161580611959575060a08101516001600160a01b0316155b8061196f575060c08101516001600160a01b0316155b1561197c5761197c6122d5565b60608101516001600160601b03101561199c5761199c81606001516122ee565b60e08101511580156119b15750610100810151155b80156119c05750610120810151155b156119cd576119cd61230a565b50565b6000848484846040516020016119e9949392919061341e565b60408051601f198184030181529181528151602092830120600081815260089093529120549091506001600160601b03166104a957600081815260086020526040902080546001600160601b03191660011790555050505050565b600084848484604051602001611a5d949392919061341e565b60408051601f19818403018152918152815160209283012060008181526008909352912054909150611a97906001600160601b0316612323565b600090815260086020526040902080546001600160601b031916600217905550505050565b6000611ac9848484612375565b90506001600160a01b0381166116ef576116ef6122d5565b600081604051602001611af49190613447565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038416611b715760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161034f565b336000611b7d85612402565b90506000611b8a85612402565b9050611b9b83600089858589612084565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290611bcb908490613144565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c2b836000898585896120f7565b611c3a8360008989898961244d565b50505050505050565b8082101561112757604051631c22ff0160e21b8152600481018390526024810182905260440161034f565b600084848484604051602001611c87949392919061341e565b60408051601f19818403018152918152815160209283012060009081526008909252902080546001600160601b03191660011790555050505050565b816001600160a01b0316836001600160a01b03161415611d375760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161034f565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316611e065760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161034f565b336000611e1284612402565b90506000611e1f84612402565b9050611e3f83876000858560405180602001604052806000815250612084565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015611ebc5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161034f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c3a848860008686604051806020016040528060008152506120f7565b6001600160a01b038416611f645760405162461bcd60e51b815260040161034f9061336a565b336000611f7085612402565b90506000611f7d85612402565b9050611f8d838989858589612084565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015611fce5760405162461bcd60e51b815260040161034f906133af565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061200b908490613144565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461206b848a8a86868a6120f7565b612079848a8a8a8a8a61244d565b505050505050505050565b60005b8351811015611c3a578281815181106120a2576120a2612f7d565b60200260200101516000146120ef576120ef86868684815181106120c8576120c8612f7d565b60200260200101518685815181106120e2576120e2612f7d565b6020026020010151612517565b600101612087565b60005b8351811015611c3a5782818151811061211557612115612f7d565b602002602001015160001461216257612162868686848151811061213b5761213b612f7d565b602002602001015186858151811061215557612155612f7d565b6020026020010151612640565b6001016120fa565b6001600160a01b0384163b1561192c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906121ae9089908990889088908890600401613495565b602060405180830381600087803b1580156121c857600080fd5b505af19250505080156121f8575060408051601f3d908101601f191682019092526121f5918101906134f3565b60015b6122a557612204613510565b806308c379a0141561223e575061221961352c565b806122245750612240565b8060405162461bcd60e51b815260040161034f91906129e9565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161034f565b6001600160e01b0319811663bc197c8160e01b14611c3a5760405162461bcd60e51b815260040161034f906135b5565b60405163d92e233d60e01b815260040160405180910390fd5b6040516335f135d360e01b81526004810182905260240161034f565b60405163af458c0760e01b815260040160405180910390fd5b6001600160601b03811661234a5760405163e2228b1560e01b815260040160405180910390fd5b6001600160601b038116600214156119cd5760405163865a6de560e01b815260040160405180910390fd5b60405163d81e842360e01b81526001600160a01b03838116600483015282811660248301526000919085169063d81e84239060440160206040518083038186803b1580156123c257600080fd5b505afa1580156123d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fa91906135fd565b949350505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061243c5761243c612f7d565b602090810291909101015292915050565b6001600160a01b0384163b1561192c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612491908990899088908890889060040161361a565b602060405180830381600087803b1580156124ab57600080fd5b505af19250505080156124db575060408051601f3d908101601f191682019092526124d8918101906134f3565b60015b6124e757612204613510565b6001600160e01b0319811663f23a6e6160e01b14611c3a5760405162461bcd60e51b815260040161034f906135b5565b6001600160a01b0384166125b05760008281526005602052604090205415801561253f575060015b1561258c5761258c82600680546000838152600760205260408120829055600182018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0155565b600082815260056020526040812080548392906125aa908490613144565b90915550505b6001600160a01b038316158015906125da5750836001600160a01b0316836001600160a01b031614155b15611116576125e983836102e8565b1580156125f4575060015b15611116576001600160a01b0383166000908152600360208181526040808420805460048452828620888752845291852082905592825260018101835591835290912001829055611116565b6001600160a01b038316612699576000828152600560205260408120805483929061266c90849061365f565b909155505060008281526005602052604090205415801561268b575060015b1561269957612699826126ec565b6001600160a01b038416158015906126c35750826001600160a01b0316846001600160a01b031614155b15611116576126d284836102e8565b1580156126dd575060015b156111165761111684836127a8565b6006546000906126fe9060019061365f565b60008381526007602052604090205490915080821461276d5760006006838154811061272c5761272c612f7d565b90600052602060002001549050806006838154811061274d5761274d612f7d565b600091825260208083209091019290925591825260079052604090208190555b600083815260076020526040812055600680548061278d5761278d613676565b60019003818190600052602060002001600090559055505050565b6001600160a01b0382166000908152600360205260408120546127cd9060019061365f565b6001600160a01b038416600090815260046020908152604080832086845290915290205490915080821461289b576001600160a01b038416600090815260036020526040812080548490811061282557612825612f7d565b906000526020600020015490508060036000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061286957612869612f7d565b60009182526020808320909101929092556001600160a01b038716815260048252604080822093825292909152208190555b6001600160a01b0384166000818152600460209081526040808320878452825280832083905592825260039052208054806128d8576128d8613676565b6001900381819060005260206000200160009055905550505050565b6001600160a01b03811681146119cd57600080fd5b8035612914816128f4565b919050565b6000806040838503121561292c57600080fd5b8235612937816128f4565b946020939093013593505050565b6001600160e01b0319811681146119cd57600080fd5b60006020828403121561296d57600080fd5b81356116ef81612945565b60006020828403121561298a57600080fd5b5035919050565b60005b838110156129ac578181015183820152602001612994565b838111156111165750506000910152565b600081518084526129d5816020860160208601612991565b601f01601f19169290920160200192915050565b6020815260006116ef60208301846129bd565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715612a3757612a376129fc565b6040525050565b60405161016081016001600160401b0381118282101715612a6157612a616129fc565b60405290565b60006001600160401b03821115612a8057612a806129fc565b5060051b60200190565b600082601f830112612a9b57600080fd5b81356020612aa882612a67565b604051612ab58282612a12565b83815260059390931b8501820192828101915086841115612ad557600080fd5b8286015b84811015612af05780358352918301918301612ad9565b509695505050505050565b60006001600160401b03821115612b1457612b146129fc565b50601f01601f191660200190565b600082601f830112612b3357600080fd5b8135612b3e81612afb565b604051612b4b8282612a12565b828152856020848701011115612b6057600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080600060a08688031215612b9657600080fd5b8535612ba1816128f4565b94506020860135612bb1816128f4565b935060408601356001600160401b0380821115612bcd57600080fd5b612bd989838a01612a8a565b94506060880135915080821115612bef57600080fd5b612bfb89838a01612a8a565b93506080880135915080821115612c1157600080fd5b50612c1e88828901612b22565b9150509295509295909350565b60008060408385031215612c3e57600080fd5b82356001600160401b0380821115612c5557600080fd5b818501915085601f830112612c6957600080fd5b81356020612c7682612a67565b604051612c838282612a12565b83815260059390931b8501820192828101915089841115612ca357600080fd5b948201945b83861015612cca578535612cbb816128f4565b82529482019490820190612ca8565b96505086013592505080821115612ce057600080fd5b50612ced85828601612a8a565b9150509250929050565b600081518084526020808501945080840160005b83811015612d2757815187529582019590820190600101612d0b565b509495945050505050565b6020815260006116ef6020830184612cf7565b600061016082840312156116ba57600080fd5b600060208284031215612d6a57600080fd5b81356001600160401b03811115612d8057600080fd5b6123fa84828501612d45565b600060a082840312156116ba57600080fd5b6000806000806101008587031215612db557600080fd5b8435612dc0816128f4565b93506020850135612dd0816128f4565b9250612ddf8660408701612d8c565b9396929550929360e00135925050565b60008060408385031215612e0257600080fd5b8235612e0d816128f4565b915060208301358015158114612e2257600080fd5b809150509250929050565b60008060c08385031215612e4057600080fd5b8235612e4b816128f4565b9150612e5a8460208501612d8c565b90509250929050565b60008060408385031215612e7657600080fd5b8235612e81816128f4565b91506020830135612e22816128f4565b600080600080600060a08688031215612ea957600080fd5b8535612eb4816128f4565b94506020860135612ec4816128f4565b9350604086013592506060860135915060808601356001600160401b03811115612eed57600080fd5b612c1e88828901612b22565b600181811c90821680612f0d57607f821691505b602082108114156116ba57634e487b7160e01b600052602260045260246000fd5b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612fbd57612fbd612f93565b5060010190565b60006101608284031215612fd757600080fd5b612fdf612a3e565b9050612fea82612909565b8152612ff860208301612909565b6020820152604082013560408201526060820135606082015261301d60808301612909565b608082015261302e60a08301612909565b60a082015261303f60c08301612909565b60c082015260e0828101359082015261010080830135908201526101208083013590820152610140808301356001600160401b0381111561307f57600080fd5b61308b85828601612b22565b82840152505092915050565b60006103ca3683612fc4565b6000602082840312156130b557600080fd5b81356116ef816128f4565b634e487b7160e01b600052602160045260246000fd5b600381106130f457634e487b7160e01b600052602160045260246000fd5b9052565b848152602081018490526001600160a01b03831660408201526080810161312260608301846130d6565b95945050505050565b60006020828403121561313d57600080fd5b5051919050565b6000821982111561315757613157612f93565b500190565b6000808335601e1984360301811261317357600080fd5b8301803591506001600160401b0382111561318d57600080fd5b6020019150368190038213156131a257600080fd5b9250929050565b600061010060018060a01b038084511685528060208501511660208601525060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e08301518160e0860152613122828601826129bd565b6020815260006116ef60208301846131a9565b60006020828403121561323657600080fd5b81516001600160401b0381111561324c57600080fd5b8201601f8101841361325d57600080fd5b805161326881612afb565b6040516132758282612a12565b82815286602084860101111561328a57600080fd5b61329b836020830160208701612991565b9695505050505050565b600060a082840312156132b757600080fd5b60405160a081018181106001600160401b03821117156132d9576132d96129fc565b60405282356132e7816128f4565b815260208301356132f7816128f4565b80602083015250604083013560408201526060830135606082015260808301356003811061332457600080fd5b60808201529392505050565b858152602081018590526001600160a01b038416604082015260a0810161335a60608301856130d6565b8260808301529695505050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061340c6040830185612cf7565b82810360208401526131228185612cf7565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b81516001600160a01b03908116825260208084015190911690820152604080830151908201526060808301519082015260808083015160a083019161348e908401826130d6565b5092915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906134c190830186612cf7565b82810360608401526134d38186612cf7565b905082810360808401526134e781856129bd565b98975050505050505050565b60006020828403121561350557600080fd5b81516116ef81612945565b600060033d11156135295760046000803e5060005160e01c5b90565b600060443d101561353a5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561356957505050505090565b82850191508151818111156135815750505050505090565b843d870101602082850101111561359b5750505050505090565b6135aa60208286010187612a12565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60006020828403121561360f57600080fd5b81516116ef816128f4565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613654908301846129bd565b979650505050505050565b60008282101561367157613671612f93565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200a14177cb905ab33e4c72e058f49c5ecceb8c773a20fbbe2c7303b522a5b1ff964736f6c63430008080033000000000000000000000000f8f5e4b7825d484fbdfdc36fc915e79f30b02f9e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000