[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_startTime", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyExists", "type": "error" }, { "inputs": [], "name": "InvalidOwner", "type": "error" }, { "inputs": [], "name": "InvalidRecipient", "type": "error" }, { "inputs": [], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "NotFound", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnsafeRecipient", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "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": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ERC20Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ERC721Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "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": "id", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "activePhase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amountOrId", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "artist", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "availableIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseTokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "phase", "type": "uint256" }, { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "canMintAmountInPhase", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "phase", "type": "uint256" }, { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "grantPhaseAccess", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "phase", "type": "uint256" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasPhaseAccess", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintPerTx", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintHasStarted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "ownerMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phaseDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "phaseMintsRemaining", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phases", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "revokeOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "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": "id", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "secondsUntilStart", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "_artist", "type": "address" } ], "name": "setArtist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_baseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "mintActive_", "type": "bool" } ], "name": "setMintActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_paused", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_royaltyAmount", "type": "uint256" } ], "name": "setRoyaltyAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startTime", "type": "uint256" } ], "name": "setStartTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "state", "type": "bool" } ], "name": "setWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "startTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "id", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalNativeSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60e06040523480156200001157600080fd5b5060405162006592380380620065928339818101604052810190620000379190620008c3565b6040518060400160405280600881526020017f4b494e47534849540000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4b494e475348495400000000000000000000000000000000000000000000000081525060126108ae8580600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000111576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508460019081620001be919062000b7a565b508360029081620001d0919062000b7a565b508260ff1660808160ff16815250508160c08181525050608051600a620001f8919062000df1565b8262000205919062000e42565b60a081815250505050505050683c3a38e5ab72fc0000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555067016345785d8a0000601181905550610457600e819055506101f4600f819055506000601660016101000a81548160ff0219169083151502179055506001601081905550806017819055506000601660006101000a81548160ff0219169083151502179055506040518060800160405280604381526020016200654f60439139600d908162000346919062000b7a565b5073728b158cefede30973123c8034bbdbf29d2e23df601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102586015819055506003601481905550620003e2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003ea60201b60201c565b505062001057565b620003fa6200049660201b60201c565b8162000407919062000e42565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000457919062000e8d565b9250508190555060005b8181101562000491576200047b83620004ae60201b60201c565b8080620004889062000ec8565b91505062000461565b505050565b6000608051600a620004a9919062000df1565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000515576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600c80549050036200058b5760036000815480929190600101919050555060c051600354111562000580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005779062000f9c565b60405180910390fd5b6003549050620005ee565b600c6001600c80549050620005a1919062000fbe565b81548110620005b557620005b462000ff9565b5b90600052602060002001549050600c805480620005d757620005d662001028565b5b600190038181906000526020600020016000905590555b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000688576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200069a8282620006fa60201b60201c565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905062000803919062000fbe565b600a6000838152602001908152602001600020819055505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008508262000823565b9050919050565b620008628162000843565b81146200086e57600080fd5b50565b600081519050620008828162000857565b92915050565b6000819050919050565b6200089d8162000888565b8114620008a957600080fd5b50565b600081519050620008bd8162000892565b92915050565b60008060408385031215620008dd57620008dc6200081e565b5b6000620008ed8582860162000871565b92505060206200090085828601620008ac565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098c57607f821691505b602082108103620009a257620009a162000944565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a0c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009cd565b62000a188683620009cd565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a5b62000a5562000a4f8462000888565b62000a30565b62000888565b9050919050565b6000819050919050565b62000a778362000a3a565b62000a8f62000a868262000a62565b848454620009da565b825550505050565b600090565b62000aa662000a97565b62000ab381848462000a6c565b505050565b5b8181101562000adb5762000acf60008262000a9c565b60018101905062000ab9565b5050565b601f82111562000b2a5762000af481620009a8565b62000aff84620009bd565b8101602085101562000b0f578190505b62000b2762000b1e85620009bd565b83018262000ab8565b50505b505050565b600082821c905092915050565b600062000b4f6000198460080262000b2f565b1980831691505092915050565b600062000b6a838362000b3c565b9150826002028217905092915050565b62000b85826200090a565b67ffffffffffffffff81111562000ba15762000ba062000915565b5b62000bad825462000973565b62000bba82828562000adf565b600060209050601f83116001811462000bf2576000841562000bdd578287015190505b62000be9858262000b5c565b86555062000c59565b601f19841662000c0286620009a8565b60005b8281101562000c2c5784890151825560018201915060208501945060208101905062000c05565b8683101562000c4c578489015162000c48601f89168262000b3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cef5780860481111562000cc75762000cc662000c61565b5b600185161562000cd75780820291505b808102905062000ce78562000c90565b945062000ca7565b94509492505050565b60008262000d0a576001905062000ddd565b8162000d1a576000905062000ddd565b816001811462000d33576002811462000d3e5762000d74565b600191505062000ddd565b60ff84111562000d535762000d5262000c61565b5b8360020a91508482111562000d6d5762000d6c62000c61565b5b5062000ddd565b5060208310610133831016604e8410600b841016171562000dae5782820a90508381111562000da85762000da762000c61565b5b62000ddd565b62000dbd848484600162000c9d565b9250905081840481111562000dd75762000dd662000c61565b5b81810290505b9392505050565b600060ff82169050919050565b600062000dfe8262000888565b915062000e0b8362000de4565b925062000e3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cf8565b905092915050565b600062000e4f8262000888565b915062000e5c8362000888565b925082820262000e6c8162000888565b9150828204841483151762000e865762000e8562000c61565b5b5092915050565b600062000e9a8262000888565b915062000ea78362000888565b925082820190508082111562000ec25762000ec162000c61565b5b92915050565b600062000ed58262000888565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000f0a5762000f0962000c61565b5b600182019050919050565b600082825260208201905092915050565b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b600062000f8460238362000f15565b915062000f918262000f26565b604082019050919050565b6000602082019050818103600083015262000fb78162000f75565b9050919050565b600062000fcb8262000888565b915062000fd88362000888565b925082820390508181111562000ff35762000ff262000c61565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60805160a05160c0516154b36200109c60003960008181611c0401526136c201526000818161132f015261325a01526000818161167d015261331f01526154b36000f3fe6080604052600436106102ff5760003560e01c806378e9792511610190578063ac5553ce116100dc578063d547cfb711610095578063e985e9c51161006f578063e985e9c514610bd8578063ee1cc94414610c15578063f2fde38b14610c3e578063ff6728ad14610c67576102ff565b8063d547cfb714610b45578063dd62ed3e14610b70578063de7fcb1d14610bad576102ff565b8063ac5553ce14610a23578063b76b8ced14610a4e578063b88d4fde14610a79578063c87b56dd14610aa2578063d4c9753314610adf578063d528d11814610b08576102ff565b8063a035b1fe11610149578063a22cb46511610123578063a22cb46514610957578063a4fd255914610980578063a9059cbb146109a9578063a96fd9d5146109e6576102ff565b8063a035b1fe146108e5578063a0712d6814610910578063a21b5fe91461092c576102ff565b806378e97925146107d15780637c6e551d146107fc57806381456f48146108275780638da5cb5b1461085257806395d89b411461087d5780639b19251a146108a8576102ff565b80632b9689581161024f5780634f02c4201161020857806355f804b3116101e257806355f804b3146107035780635c975abb1461072c5780636352211e1461075757806370a0823114610794576102ff565b80634f02c420146106865780634f07de09146106b157806353d6fd59146106da576102ff565b80632b9689581461059e578063313ce567146105b55780633e0a322d146105e057806342842e0e1461060957806343bc161214610632578063484b973c1461065d576102ff565b80630e1b26c6116102bc5780632154dc39116102965780632154dc39146104cd57806323b872dd146104f857806325fd90f3146105355780632a55205a14610560576102ff565b80630e1b26c61461044e57806316c38b3c1461047957806318160ddd146104a2576102ff565b806301ffc9a714610304578063051cbd241461034157806306fdde031461036c578063081812fc14610397578063095ea7b3146103d45780630ca793c314610411575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613d6a565b610ca4565b6040516103389190613db2565b60405180910390f35b34801561034d57600080fd5b50610356610dd5565b6040516103639190613de6565b60405180910390f35b34801561037857600080fd5b50610381610e00565b60405161038e9190613e91565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613edf565b610e8e565b6040516103cb9190613f4d565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613f94565b610ec1565b6040516104089190613db2565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613fd4565b6111ba565b6040516104459190613db2565b60405180910390f35b34801561045a57600080fd5b50610463611219565b6040516104709190613de6565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190614053565b61128b565b005b3480156104ae57600080fd5b506104b761132d565b6040516104c49190613de6565b60405180910390f35b3480156104d957600080fd5b506104e2611351565b6040516104ef9190613de6565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190614080565b611357565b60405161052c9190613db2565b60405180910390f35b34801561054157600080fd5b5061054a6114e8565b6040516105579190613db2565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906140d3565b61150c565b604051610595929190614113565b60405180910390f35b3480156105aa57600080fd5b506105b3611558565b005b3480156105c157600080fd5b506105ca61167b565b6040516105d79190614158565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190613edf565b61169f565b005b34801561061557600080fd5b50610630600480360381019061062b9190614080565b61172e565b005b34801561063e57600080fd5b50610647611862565b6040516106549190613f4d565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613f94565b611888565b005b34801561069257600080fd5b5061069b61191b565b6040516106a89190613de6565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613edf565b611921565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190614173565b6119b0565b005b34801561070f57600080fd5b5061072a600480360381019061072591906142e8565b611a90565b005b34801561073857600080fd5b50610741611b28565b60405161074e9190613db2565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613edf565b611b3b565b60405161078b9190613f4d565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190614331565b611bde565b6040516107c89190613de6565b60405180910390f35b3480156107dd57600080fd5b506107e6611bf6565b6040516107f39190613de6565b60405180910390f35b34801561080857600080fd5b50610811611bfc565b60405161081e9190613de6565b60405180910390f35b34801561083357600080fd5b5061083c611c02565b6040516108499190613de6565b60405180910390f35b34801561085e57600080fd5b50610867611c26565b6040516108749190613f4d565b60405180910390f35b34801561088957600080fd5b50610892611c4a565b60405161089f9190613e91565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190614331565b611cd8565b6040516108dc9190613db2565b60405180910390f35b3480156108f157600080fd5b506108fa611cf8565b6040516109079190613de6565b60405180910390f35b61092a60048036038101906109259190613edf565b611cfe565b005b34801561093857600080fd5b50610941611fd3565b60405161094e9190613db2565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614173565b611fe0565b005b34801561098c57600080fd5b506109a760048036038101906109a29190614426565b6120dd565b005b3480156109b557600080fd5b506109d060048036038101906109cb9190613f94565b612208565b6040516109dd9190613db2565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a089190614495565b61221d565b604051610a1a9190613db2565b60405180910390f35b348015610a2f57600080fd5b50610a3861227a565b604051610a459190613de6565b60405180910390f35b348015610a5a57600080fd5b50610a63612280565b604051610a709190613de6565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614530565b612286565b005b348015610aae57600080fd5b50610ac96004803603810190610ac49190613edf565b6123c0565b604051610ad69190613e91565b60405180910390f35b348015610aeb57600080fd5b50610b066004803603810190610b019190614331565b6123f4565b005b348015610b1457600080fd5b50610b2f6004803603810190610b2a9190613edf565b6124bd565b604051610b3c9190613de6565b60405180910390f35b348015610b5157600080fd5b50610b5a6124e1565b604051610b679190613e91565b60405180910390f35b348015610b7c57600080fd5b50610b976004803603810190610b9291906145b8565b61256f565b604051610ba49190613de6565b60405180910390f35b348015610bb957600080fd5b50610bc2612594565b604051610bcf9190613de6565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa91906145b8565b61259a565b604051610c0c9190613db2565b60405180910390f35b348015610c2157600080fd5b50610c3c6004803603810190610c379190614053565b6125c9565b005b348015610c4a57600080fd5b50610c656004803603810190610c609190614331565b61266b565b005b348015610c7357600080fd5b50610c8e6004803603810190610c899190614495565b6127f3565b604051610c9b9190613de6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d6f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dbe5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dce5750610dcd82612818565b5b9050919050565b6000610ddf611fd3565b610df85742601754610df19190614627565b9050610dfd565b600090505b90565b60018054610e0d9061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e399061468a565b8015610e865780601f10610e5b57610100808354040283529160200191610e86565b820191906000526020600020905b815481529060010190602001808311610e6957829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003548211158015610ed55750600082115b156110c95760006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610fd55750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561100c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516110bb9190613de6565b60405180910390a3506111b0565b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111a79190613de6565b60405180910390a35b6001905092915050565b6000816013600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590509392505050565b6000611223611fd3565b6112305760009050611288565b6000601754426112409190614627565b9050600060016015548361125491906146ea565b61125e919061471b565b9050601454811115611282576001601454611279919061471b565b92505050611288565b80925050505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611310576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561141c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114139061479b565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114d057828161144f9190614627565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114db858585612882565b5060019150509392505050565b6000601660019054906101000a900460ff168061150757506017544210155b905090565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710600f548561154391906147bb565b61154d91906146ea565b915091509250929050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611724576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060178190555050565b61173a33848484612bb5565b60008273ffffffffffffffffffffffffffffffffffffffff163b14158015611826575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016117c193929190614834565b6020604051808303816000875af11580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614893565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561185d576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119178282612fbf565b5050565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f8190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b15576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d9081611b249190614a6c565b5050565b601660009054906101000a900460ff1681565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd9576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60046020528060005260406000206000915090505481565b60175481565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054611c579061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c839061468a565b8015611cd05780601f10611ca557610100808354040283529160200191611cd0565b820191906000526020600020905b815481529060010190602001808311611cb357829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b611d066114e8565b611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90614b8a565b60405180910390fd5b601660009054906101000a900460ff1615611d5f57600080fd5b601054811115611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614bf6565b60405180910390fd5b600e5481600354611db5919061471b565b1115611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded90614c62565b60405180910390fd5b60115481611e0491906147bb565b341015611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90614cce565b60405180910390fd5b6000600190505b6014548111611f545780611e5f611219565b03611f4157611e6f8133846111ba565b611e7882613053565b604051602001611e889190614d76565b60405160208183030381529060405290611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf9190613e91565b60405180910390fd5b50816013600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f399190614627565b925050819055505b8080611f4c90614dab565b915050611e4d565b506000341115611fc65760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611fc4573d6000803e3d6000fd5b505b611fd03382612fbf565b50565b6000601754421015905090565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120d19190613db2565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612162576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015612202578160136000868152602001908152602001600020600085848151811061219757612196614df3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e8919061471b565b9250508190555080806121fa90614dab565b915050612165565b50505050565b6000612215338484612882565b905092915050565b6000806013600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905092915050565b60155481565b60145481565b61229233868686612bb5565b60008473ffffffffffffffffffffffffffffffffffffffff163b14158015612382575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b815260040161231d959493929190614e4f565b6020604051808303816000875af115801561233c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123609190614893565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156123b9576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6060600d6123cd83613053565b6040516020016123de929190614f20565b6040516020818303038152906040529050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612479576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c81815481106124cd57600080fd5b906000526020600020016000915090505481565b600d80546124ee9061468a565b80601f016020809104026020016040519081016040528092919081815260200182805461251a9061468a565b80156125675780601f1061253c57610100808354040283529160200191612567565b820191906000526020600020905b81548152906001019060200180831161254a57829003601f168201915b505050505081565b6005602052816000526040600020602052806000526040600020600091509150505481565b60105481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461264e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126f0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612756576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6013602052816000526040600020602052806000526040600020600091509150505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060035482116128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614fdc565b60405180910390fd5b6128d3848484613121565b60006128dd61331b565b90506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b69190614627565b9250508190555084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612a138761334f565b612aa657600083600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a6491906146ea565b8484612a7091906146ea565b612a7a9190614627565b905060005b81811015612aa357612a90896133b5565b8080612a9b90614dab565b915050612a7f565b50505b612aaf8661334f565b612b425760008382612ac191906146ea565b84600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0c91906146ea565b612b169190614627565b905060005b81811015612b3f57612b2c8861363a565b8080612b3790614dab565b915050612b1b565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051612b9f9190613de6565b60405180910390a3600193505050509392505050565b6008600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4d90615048565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc906150b4565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d855750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612dee57506006600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490615120565b60405180910390fd5b612e3561331b565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e839190614627565b92505081905550612e9261331b565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612ee8838261388d565b612ef28282613a79565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487612fa461331b565b604051612fb19190613de6565b60405180910390a350505050565b612fc761331b565b81612fd291906147bb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613020919061471b565b9250508190555060005b8181101561304e5761303b8361363a565b808061304690614dab565b91505061302a565b505050565b60606000600161306284613b9b565b01905060008167ffffffffffffffff811115613081576130806141bd565b5b6040519080825280601f01601f1916602001820160405280156130b35781602001600182028036833780820191505090505b509050600082602001820190505b600115613116578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161310a576131096146bb565b5b049450600085036130c1575b819350505050919050565b61312c838383613cee565b601454613137611219565b116132255760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806131e1575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b613220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613217906151b2565b60405180910390fd5b613316565b60b460155460145461323791906147bb565b601754613244919061471b565b61324e919061471b565b421015613315576103e87f0000000000000000000000000000000000000000000000000000000000000000600561328591906147bb565b61328f91906146ea565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133079061521e565b60405180910390fd5b613316565b5b505050565b60007f0000000000000000000000000000000000000000000000000000000000000000600a61334a9190615371565b905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133ae57506133ad82613cf3565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361341b576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506134ab9190614627565b815481106134bc576134bb614df3565b5b90600052602060002001549050600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613518576135176153bc565b5b60019003818190600052602060002001600090559055600a6000828152602001908152602001600020600090556008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600c81908060018154018082558091505060019003906000526020600020016000909190919091505580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036136a0576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600c805490500361372f576003600081548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000000006003541115613725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371c9061545d565b60405180910390fd5b600354905061378a565b600c6001600c805490506137439190614627565b8154811061375457613753614df3565b5b90600052602060002001549050600c805480613773576137726153bc565b5b600190038181906000526020600020016000905590555b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613823576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61382d8282613a79565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061391d9190614627565b8154811061392e5761392d614df3565b5b9060005260206000200154905080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a600085815260200190815260200160002054815481106139a05761399f614df3565b5b9060005260206000200181905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806139fd576139fc6153bc565b5b60019003818190600052602060002001600090559055600a600083815260200190815260200160002054600a6000838152602001908152602001600020819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613b809190614627565b600a6000838152602001908152602001600020819055505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613bf9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613bef57613bee6146bb565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613c36576d04ee2d6d415b85acef81000000008381613c2c57613c2b6146bb565b5b0492506020810190505b662386f26fc100008310613c6557662386f26fc100008381613c5b57613c5a6146bb565b5b0492506010810190505b6305f5e1008310613c8e576305f5e1008381613c8457613c836146bb565b5b0492506008810190505b6127108310613cb3576127108381613ca957613ca86146bb565b5b0492506004810190505b60648310613cd65760648381613ccc57613ccb6146bb565b5b0492506002810190505b600a8310613ce5576001810190505b80915050919050565b505050565b6000813b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613d4781613d12565b8114613d5257600080fd5b50565b600081359050613d6481613d3e565b92915050565b600060208284031215613d8057613d7f613d08565b5b6000613d8e84828501613d55565b91505092915050565b60008115159050919050565b613dac81613d97565b82525050565b6000602082019050613dc76000830184613da3565b92915050565b6000819050919050565b613de081613dcd565b82525050565b6000602082019050613dfb6000830184613dd7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e3b578082015181840152602081019050613e20565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e6382613e01565b613e6d8185613e0c565b9350613e7d818560208601613e1d565b613e8681613e47565b840191505092915050565b60006020820190508181036000830152613eab8184613e58565b905092915050565b613ebc81613dcd565b8114613ec757600080fd5b50565b600081359050613ed981613eb3565b92915050565b600060208284031215613ef557613ef4613d08565b5b6000613f0384828501613eca565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f3782613f0c565b9050919050565b613f4781613f2c565b82525050565b6000602082019050613f626000830184613f3e565b92915050565b613f7181613f2c565b8114613f7c57600080fd5b50565b600081359050613f8e81613f68565b92915050565b60008060408385031215613fab57613faa613d08565b5b6000613fb985828601613f7f565b9250506020613fca85828601613eca565b9150509250929050565b600080600060608486031215613fed57613fec613d08565b5b6000613ffb86828701613eca565b935050602061400c86828701613f7f565b925050604061401d86828701613eca565b9150509250925092565b61403081613d97565b811461403b57600080fd5b50565b60008135905061404d81614027565b92915050565b60006020828403121561406957614068613d08565b5b60006140778482850161403e565b91505092915050565b60008060006060848603121561409957614098613d08565b5b60006140a786828701613f7f565b93505060206140b886828701613f7f565b92505060406140c986828701613eca565b9150509250925092565b600080604083850312156140ea576140e9613d08565b5b60006140f885828601613eca565b925050602061410985828601613eca565b9150509250929050565b60006040820190506141286000830185613f3e565b6141356020830184613dd7565b9392505050565b600060ff82169050919050565b6141528161413c565b82525050565b600060208201905061416d6000830184614149565b92915050565b6000806040838503121561418a57614189613d08565b5b600061419885828601613f7f565b92505060206141a98582860161403e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141f582613e47565b810181811067ffffffffffffffff82111715614214576142136141bd565b5b80604052505050565b6000614227613cfe565b905061423382826141ec565b919050565b600067ffffffffffffffff821115614253576142526141bd565b5b61425c82613e47565b9050602081019050919050565b82818337600083830152505050565b600061428b61428684614238565b61421d565b9050828152602081018484840111156142a7576142a66141b8565b5b6142b2848285614269565b509392505050565b600082601f8301126142cf576142ce6141b3565b5b81356142df848260208601614278565b91505092915050565b6000602082840312156142fe576142fd613d08565b5b600082013567ffffffffffffffff81111561431c5761431b613d0d565b5b614328848285016142ba565b91505092915050565b60006020828403121561434757614346613d08565b5b600061435584828501613f7f565b91505092915050565b600067ffffffffffffffff821115614379576143786141bd565b5b602082029050602081019050919050565b600080fd5b60006143a261439d8461435e565b61421d565b905080838252602082019050602084028301858111156143c5576143c461438a565b5b835b818110156143ee57806143da8882613f7f565b8452602084019350506020810190506143c7565b5050509392505050565b600082601f83011261440d5761440c6141b3565b5b813561441d84826020860161438f565b91505092915050565b60008060006060848603121561443f5761443e613d08565b5b600061444d86828701613eca565b935050602084013567ffffffffffffffff81111561446e5761446d613d0d565b5b61447a868287016143f8565b925050604061448b86828701613eca565b9150509250925092565b600080604083850312156144ac576144ab613d08565b5b60006144ba85828601613eca565b92505060206144cb85828601613f7f565b9150509250929050565b600080fd5b60008083601f8401126144f0576144ef6141b3565b5b8235905067ffffffffffffffff81111561450d5761450c6144d5565b5b6020830191508360018202830111156145295761452861438a565b5b9250929050565b60008060008060006080868803121561454c5761454b613d08565b5b600061455a88828901613f7f565b955050602061456b88828901613f7f565b945050604061457c88828901613eca565b935050606086013567ffffffffffffffff81111561459d5761459c613d0d565b5b6145a9888289016144da565b92509250509295509295909350565b600080604083850312156145cf576145ce613d08565b5b60006145dd85828601613f7f565b92505060206145ee85828601613f7f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061463282613dcd565b915061463d83613dcd565b9250828203905081811115614655576146546145f8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806146a257607f821691505b6020821081036146b5576146b461465b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146f582613dcd565b915061470083613dcd565b9250826147105761470f6146bb565b5b828204905092915050565b600061472682613dcd565b915061473183613dcd565b9250828201905080821115614749576147486145f8565b5b92915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e0000000000000000000000600082015250565b6000614785601583613e0c565b91506147908261474f565b602082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b60006147c682613dcd565b91506147d183613dcd565b92508282026147df81613dcd565b915082820484148315176147f6576147f56145f8565b5b5092915050565b600082825260208201905092915050565b50565b600061481e6000836147fd565b91506148298261480e565b600082019050919050565b60006080820190506148496000830186613f3e565b6148566020830185613f3e565b6148636040830184613dd7565b818103606083015261487481614811565b9050949350505050565b60008151905061488d81613d3e565b92915050565b6000602082840312156148a9576148a8613d08565b5b60006148b78482850161487e565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826148e5565b61492c86836148e5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061496961496461495f84613dcd565b614944565b613dcd565b9050919050565b6000819050919050565b6149838361494e565b61499761498f82614970565b8484546148f2565b825550505050565b600090565b6149ac61499f565b6149b781848461497a565b505050565b5b818110156149db576149d06000826149a4565b6001810190506149bd565b5050565b601f821115614a20576149f1816148c0565b6149fa846148d5565b81016020851015614a09578190505b614a1d614a15856148d5565b8301826149bc565b50505b505050565b600082821c905092915050565b6000614a4360001984600802614a25565b1980831691505092915050565b6000614a5c8383614a32565b9150826002028217905092915050565b614a7582613e01565b67ffffffffffffffff811115614a8e57614a8d6141bd565b5b614a98825461468a565b614aa38282856149df565b600060209050601f831160018114614ad65760008415614ac4578287015190505b614ace8582614a50565b865550614b36565b601f198416614ae4866148c0565b60005b82811015614b0c57848901518255600182019150602085019450602081019050614ae7565b86831015614b295784890151614b25601f891682614a32565b8355505b6001600288020188555050505b505050505050565b7f4d696e74696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b74601683613e0c565b9150614b7f82614b3e565b602082019050919050565b60006020820190508181036000830152614ba381614b67565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e0000600082015250565b6000614be0601e83613e0c565b9150614beb82614baa565b602082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b7f46696e6973686564206d696e74696e672e000000000000000000000000000000600082015250565b6000614c4c601183613e0c565b9150614c5782614c16565b602082019050919050565b60006020820190508181036000830152614c7b81614c3f565b9050919050565b7f4e6f7420656e6f75676820415641582073656e742e0000000000000000000000600082015250565b6000614cb8601583613e0c565b9150614cc382614c82565b602082019050919050565b60006020820190508181036000830152614ce781614cab565b9050919050565b7f43757272656e746c7920696e2070686173652000000000000000000000000000815250565b600081905092915050565b6000614d2a82613e01565b614d348185614d14565b9350614d44818560208601613e1d565b80840191505092915050565b7f2e00000000000000000000000000000000000000000000000000000000000000815250565b6000614d8182614cee565b601382019150614d918284614d1f565b9150614d9c82614d50565b60018201915081905092915050565b6000614db682613dcd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614de857614de76145f8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e2e83856147fd565b9350614e3b838584614269565b614e4483613e47565b840190509392505050565b6000608082019050614e646000830188613f3e565b614e716020830187613f3e565b614e7e6040830186613dd7565b8181036060830152614e91818486614e22565b90509695505050505050565b60008154614eaa8161468a565b614eb48186614d14565b94506001821660008114614ecf5760018114614ee457614f17565b60ff1983168652811515820286019350614f17565b614eed856148c0565b60005b83811015614f0f57815481890152600182019150602081019050614ef0565b838801955050505b50505092915050565b6000614f2c8285614e9d565b9150614f388284614d1f565b91508190509392505050565b7f43616e206f6e6c792073656e6420616d6f756e7473206c61726765722074686160008201527f6e206d696e7465642e2055736520736166655472616e7366657246726f6d206660208201527f6f72204e4654732e000000000000000000000000000000000000000000000000604082015250565b6000614fc6604883613e0c565b9150614fd182614f44565b606082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e0000000000600082015250565b6000615032601b83613e0c565b915061503d82614ffc565b602082019050919050565b6000602082019050818103600083015261506181615025565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e00000000600082015250565b600061509e601c83613e0c565b91506150a982615068565b602082019050919050565b600060208201905081810360008301526150cd81615091565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e00000000000000600082015250565b600061510a601983613e0c565b9150615115826150d4565b602082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f43616e6e6f74207472616e7366657220756e74696c206d696e7420656e74657260008201527f73207075626c69632e0000000000000000000000000000000000000000000000602082015250565b600061519c602983613e0c565b91506151a782615140565b604082019050919050565b600060208201905081810360008301526151cb8161518f565b9050919050565b7f4e6f206d6f7265207468616e20302e352520617420746869732073746167652e600082015250565b6000615208602083613e0c565b9150615213826151d2565b602082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561529557808604811115615271576152706145f8565b5b60018516156152805780820291505b808102905061528e8561523e565b9450615255565b94509492505050565b6000826152ae576001905061536a565b816152bc576000905061536a565b81600181146152d257600281146152dc5761530b565b600191505061536a565b60ff8411156152ee576152ed6145f8565b5b8360020a915084821115615305576153046145f8565b5b5061536a565b5060208310610133831016604e8410600b84101617156153405782820a90508381111561533b5761533a6145f8565b5b61536a565b61534d848484600161524b565b92509050818404811115615364576153636145f8565b5b81810290505b9392505050565b600061537c82613dcd565b91506153878361413c565b92506153b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461529e565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b6000615447602383613e0c565b9150615452826153eb565b604082019050919050565b600060208201905081810360008301526154768161543a565b905091905056fea26469706673582212208bca7f6528c2930fccff297df074eebc1c34384233f9b387b49d072e4523dc3164736f6c63430008110033697066733a2f2f62616679626569657377616d7836626a363773783333326433737366326a6177696e36346a6c66723636777a677169696a617175736b74766d73752f00000000000000000000000066d5e886e53f43e05efc331f068db7ddb6b5fc5a0000000000000000000000000000000000000000000000000000000065cfe8f0