414 txs
16.9k calls
constructor
constructor(address owner, address _harvester, address layerZeroEndpoint, address _positionManager, address _weth, uint256 _virtualReserves, uint256 _initialSupply, uint256 _maxSupply, uint80 _protocolFee, uint80 _creatorFee, uint80 _creationFee)
functions
bondingCurve
viewfunction bondingCurve() view returns (address)
gucoins
viewfunction gucoins(address) view returns (bool)
gucoinsParams
viewfunction gucoinsParams(bytes32) view returns (address)
harvester
viewfunction harvester() view returns (address)
LAYERZERO_ENDPOINT
viewfunction LAYERZERO_ENDPOINT() view returns (address)
liquidityManager
viewfunction liquidityManager() view returns (address)
MAX_FEE
viewfunction MAX_FEE() view returns (uint256)
maxSupply
viewfunction maxSupply() view returns (uint256)
owner
viewfunction owner() view returns (address)
POSITION_MANAGER
viewfunction POSITION_MANAGER() view returns (address)
PROTOCOL_PAUSED
viewfunction PROTOCOL_PAUSED() view returns (bool)
WETH
viewfunction WETH() view returns (address)
deploy
payablefunction deploy(string name, string symbol, string description, string image) payable returns (address)
renounceOwnership
nonpayablefunction renounceOwnership()
setBondingCurve
nonpayablefunction setBondingCurve(address _bondingCurve)
setHarvester
nonpayablefunction setHarvester(address _harvester)
setLiquidityManager
nonpayablefunction setLiquidityManager(address _liquidityManager)
setProtocolPaused
nonpayablefunction setProtocolPaused(bool _state)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateFees
nonpayablefunction updateFees(uint80 _protocolFee, uint80 _creatorFee, uint80 _creationFee)
updateInitialParams
nonpayablefunction updateInitialParams(uint256 _virtualReserves, uint256 _initialSupply, uint256 _maxSupply)
withdraw
nonpayablefunction withdraw(uint256 amount)
events
FeesUpdated
event FeesUpdated(uint80 protocolFee, uint80 creatorFee, uint80 creationFee)
GuBondingCurveUpdated
event GuBondingCurveUpdated(address bondingCurve)
GuCoinDeployed
event GuCoinDeployed(address indexed creator, address indexed token, address factory, address lp, string name, string symbol, string description, string image, uint256 initialSupply, uint256 maxSupply, uint256 initialETHReserves, uint256 initialPrice, uint256 initialMarketCap, uint256 targetETH)
GuLiquidityManagerUpdated
event GuLiquidityManagerUpdated(address liquidityManager)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
UpdatedHarvester
event UpdatedHarvester(address oldHarvester, address newHarvester)
UpdatedInitialParams
event UpdatedInitialParams(uint256 virtualReserves, uint256 initialSupply, uint256 maxSupply)
errors
BondingCurveNotSet
error BondingCurveNotSet()
FailedToSendETH
error FailedToSendETH()
InsufficientCreationFee
error InsufficientCreationFee()
InvalidFees
error InvalidFees()
InvalidInitialParams
error InvalidInitialParams()
InvalidParams
error InvalidParams()
InvalidZeroAddress
error InvalidZeroAddress()
LiquidityManagerNotSet
error LiquidityManagerNotSet()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ProtocolPaused
error ProtocolPaused()
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620064193803806200641983398101604081905262000034916200033a565b8a6001600160a01b0381166200006457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006f81620000bf565b506001600160a01b03808a1660805288811660a052871660c052620000968686866200010f565b620000a38383836200019b565b620000ae8a6200027c565b505050505050505050505062000402565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8115806200011b575082155b80620001275750808210155b156200014557604051625ee01760e91b815260040160405180910390fd5b60068390556008829055600781905560408051848152602081018490529081018290527f2e7a5782e16ecec7758de897c2b63f1c36446d4a2f9495f258b33f7029aa66d3906060015b60405180910390a1505050565b6101f4836001600160501b03161180620001bf57506101f4826001600160501b0316115b15620001de57604051632d8768f960e01b815260040160405180910390fd5b600980546001600160501b03838116600160a01b908102600160a01b600160f01b03198784166a01000000000000000000009081026001600160a01b03199096168a861617959095179081168217958690556040805192851691851691909117825293850483166020820152930416908201527f799023178b8b9002752b0ca9a1f147e2f04bb6d617f5363ecc297ddabbdb666e906060016200018e565b6001600160a01b038116620002a45760405163f6b2911f60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f71cae61980b6821adcf07fefce6282528bb04dd92867e49a61deda83fe65c082910160405180910390a15050565b80516001600160a01b03811681146200031d57600080fd5b919050565b80516001600160501b03811681146200031d57600080fd5b60008060008060008060008060008060006101608c8e0312156200035d57600080fd5b620003688c62000305565b9a506200037860208d0162000305565b99506200038860408d0162000305565b98506200039860608d0162000305565b9750620003a860808d0162000305565b965060a08c0151955060c08c0151945060e08c01519350620003ce6101008d0162000322565b9250620003df6101208d0162000322565b9150620003f06101408d0162000322565b90509295989b509295989b9093969950565b60805160a05160c051615fd262000447600039600081816103b701526106b501526000818161015c015261068901526000818161031f01526106390152615fd26000f3fe6080604052600436106200011c5760003560e01c806315de1daa14620001215780631bea83fe1462000148578063239ed53c14620001965780632e1a7d4d14620001ad5780633382743814620001d25780633c1624d414620001f457806343ff1fb814620002195780634bdaeac1146200023e5780636a57c27c14620002605780636e803b73146200029a578063715018a614620002bf57806379d67a3314620002d75780637d2e3edf146200030b5780638275d47114620003415780638da5cb5b1462000366578063accc58d6146200037e578063ad5c464814620003a3578063bc063e1a14620003d9578063d5abeb011462000400578063e27305361462000418578063eff1d50e146200044c578063f2fde38b146200046e575b600080fd5b3480156200012e57600080fd5b50620001466200014036600462000e61565b62000493565b005b3480156200015557600080fd5b506200017e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516200018d919062000e95565b60405180910390f35b6200017e620001a736600462000f53565b620004ab565b348015620001ba57600080fd5b5062000146620001cc3660046200100c565b62000963565b348015620001df57600080fd5b506005546200017e906001600160a01b031681565b3480156200020157600080fd5b50620001466200021336600462000e61565b620009f1565b3480156200022657600080fd5b50620001466200023836600462000e61565b62000a7b565b3480156200024b57600080fd5b506003546200017e906001600160a01b031681565b3480156200026d57600080fd5b506200017e6200027f3660046200100c565b6002602052600090815260409020546001600160a01b031681565b348015620002a757600080fd5b5062000146620002b936600462001026565b62000afa565b348015620002cc57600080fd5b506200014662000b16565b348015620002e457600080fd5b50600954620002fa90600160f01b900460ff1681565b60405190151581526020016200018d565b3480156200031857600080fd5b506200017e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156200034e57600080fd5b50620001466200036036600462001053565b62000b2e565b3480156200037357600080fd5b506200017e62000b56565b3480156200038b57600080fd5b50620001466200039d36600462001094565b62000b65565b348015620003b057600080fd5b506200017e7f000000000000000000000000000000000000000000000000000000000000000081565b348015620003e657600080fd5b50620003f16101f481565b6040519081526020016200018d565b3480156200040d57600080fd5b50620003f160075481565b3480156200042557600080fd5b50620002fa6200043736600462000e61565b60016020526000908152604090205460ff1681565b3480156200045957600080fd5b506004546200017e906001600160a01b031681565b3480156200047b57600080fd5b50620001466200048d36600462000e61565b62000b7c565b6200049d62000bc7565b620004a88162000bfe565b50565b600954600090600160f01b900460ff1615620004da57604051634427925560e01b815260040160405180910390fd5b6004546001600160a01b03166200050457604051633eccb50f60e01b815260040160405180910390fd5b6005546001600160a01b03166200052e5760405163dd5f8f5960e01b815260040160405180910390fd5b600954600160a01b90046001600160501b031634146200056157604051630535b74760e41b815260040160405180910390fd5b6000858585856040516020016200057c949392919062001104565b60408051601f198184030181529181528151602092830120600081815260029093529120549091506001600160a01b031615620005cc57604051635435b28960e11b815260040160405180910390fd5b6040516001600160601b03193360601b16602082015242603482015260009060540160405160208183030381529060405280519060200120604051806101e00160405280898152602001888152602001868152602001878152602001336001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016200067062000b56565b6001600160a01b039081168252600454811660208301527f000000000000000000000000000000000000000000000000000000000000000081166040808401919091527f00000000000000000000000000000000000000000000000000000000000000009091166060830152600654608083015260085460a083015260075460c08301526009546001600160501b0380821660e0850152600160501b909104166101009092019190915251620007269062000e3d565b62000732919062001191565b8190604051809103906000f590508015801562000753573d6000803e3d6000fd5b50600083815260026020908152604080832080546001600160a01b0319166001600160a01b03868116918217909255808552600193849052828520805460ff1916909417909355600480549251632d8dfc9f60e01b815290810193909352670de0b6b3a7640000602484015293945091929190911690632d8dfc9f90604401602060405180830381865afa158015620007f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008169190620012f2565b9050816001600160a01b0316336001600160a01b03167f7ead23594a662b5c513ddff6a2ae844679bbfbbbd7eb7b5d197be21e7364fb8830856001600160a01b031663313c06a06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b391906200130c565b8c8c8c8c6008546007546006548c6008548e620008d191906200132c565b8f6001600160a01b031663ae2c1a6e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009369190620012f2565b604051620009509c9b9a9998979695949392919062001358565b60405180910390a3509695505050505050565b6200096d62000bc7565b60006200097962000b56565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114620009c5576040519150601f19603f3d011682016040523d82523d6000602084013e620009ca565b606091505b5050905080620009ed576040516338822c1360e11b815260040160405180910390fd5b5050565b620009fb62000bc7565b6001600160a01b03811662000a235760405163f6b2911f60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383161790556040517f2931a56864fe75a400dcaa33d1613623719dde9785c2ade0f7a9a4ff3a2f3cd99062000a7090839062000e95565b60405180910390a150565b62000a8562000bc7565b6001600160a01b03811662000aad5760405163f6b2911f60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383161790556040517f143ef95078307f0d5a661f7d19180b316da1f84d92b764cc5261531ec2c76e819062000a7090839062000e95565b62000b0462000bc7565b62000b1183838362000c87565b505050565b62000b2062000bc7565b62000b2c600062000d13565b565b62000b3862000bc7565b60098054911515600160f01b0260ff60f01b19909216919091179055565b6000546001600160a01b031690565b62000b6f62000bc7565b62000b1183838362000d63565b62000b8662000bc7565b6001600160a01b03811662000bbc576000604051631e4fbdf760e01b815260040162000bb3919062000e95565b60405180910390fd5b620004a88162000d13565b3362000bd262000b56565b6001600160a01b03161462000b2c573360405163118cdaa760e01b815260040162000bb3919062000e95565b6001600160a01b03811662000c265760405163f6b2911f60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f71cae61980b6821adcf07fefce6282528bb04dd92867e49a61deda83fe65c082910160405180910390a15050565b81158062000c93575082155b8062000c9f5750808210155b1562000cbd57604051625ee01760e91b815260040160405180910390fd5b60068390556008829055600781905560408051848152602081018490529081018290527f2e7a5782e16ecec7758de897c2b63f1c36446d4a2f9495f258b33f7029aa66d3906060015b60405180910390a1505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6101f4836001600160501b0316118062000d8757506101f4826001600160501b0316115b1562000da657604051632d8768f960e01b815260040160405180910390fd5b600980546001600160501b03838116600160a01b908102600160a01b600160f01b0319878416600160501b9081026001600160a01b03199096168a861617959095179081168217958690556040805192851691851691909117825293850483166020820152930416908201527f799023178b8b9002752b0ca9a1f147e2f04bb6d617f5363ecc297ddabbdb666e9060600162000d06565b614b9a806200140383390190565b6001600160a01b0381168114620004a857600080fd5b60006020828403121562000e7457600080fd5b813562000e818162000e4b565b9392505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000ed157600080fd5b81356001600160401b038082111562000eee5762000eee62000ea9565b604051601f8301601f19908116603f0116810190828211818310171562000f195762000f1962000ea9565b8160405283815286602085880101111562000f3357600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121562000f6a57600080fd5b84356001600160401b038082111562000f8257600080fd5b62000f908883890162000ebf565b9550602087013591508082111562000fa757600080fd5b62000fb58883890162000ebf565b9450604087013591508082111562000fcc57600080fd5b62000fda8883890162000ebf565b9350606087013591508082111562000ff157600080fd5b50620010008782880162000ebf565b91505092959194509250565b6000602082840312156200101f57600080fd5b5035919050565b6000806000606084860312156200103c57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156200106657600080fd5b8135801515811462000e8157600080fd5b80356001600160501b03811681146200108f57600080fd5b919050565b600080600060608486031215620010aa57600080fd5b620010b58462001077565b9250620010c56020850162001077565b9150620010d56040850162001077565b90509250925092565b60005b83811015620010fb578181015183820152602001620010e1565b50506000910152565b6000855162001118818460208a01620010de565b8551908301906200112e818360208a01620010de565b855191019062001143818360208901620010de565b845191019062001158818360208801620010de565b019695505050505050565b600081518084526200117d816020860160208601620010de565b601f01601f19169290920160200192915050565b60208152600082516101e0806020850152620011b261020085018362001163565b91506020850151601f1980868503016040870152620011d2848362001163565b93506040870151915080868503016060870152620011f1848362001163565b935060608701519150808685030160808701525062001211838262001163565b92505060808501516200122860a086018262000e88565b5060a08501516200123d60c086018262000e88565b5060c08501516200125260e086018262000e88565b5060e0850151610100620012698187018362000e88565b86015190506101206200127f8682018362000e88565b8601519050610140620012958682018362000e88565b86015161016086810191909152860151610180808701919091528601516101a08087019190915286015190506101c0620012d9818701836001600160501b03169052565b909501516001600160501b031693019290925250919050565b6000602082840312156200130557600080fd5b5051919050565b6000602082840312156200131f57600080fd5b815162000e818162000e4b565b80820281158282048414176200135257634e487b7160e01b600052601160045260246000fd5b92915050565b6001600160a01b038d811682528c16602082015261018060408201819052600090620013879083018d62001163565b82810360608401526200139b818d62001163565b90508281036080840152620013b1818c62001163565b905082810360a0840152620013c7818b62001163565b60c0840199909952505060e081019590955261010085019390935261012084019190915261014083015261016090910152969550505050505056fe6102606040523480156200001257600080fd5b5060405162004b9a38038062004b9a833981016040819052620000359162000695565b8051602082015160a083015160c084015183836012848481818181806001600160a01b03811662000087576000604051631e4fbdf760e01b81526004016200007e919062000848565b60405180910390fd5b620000928162000397565b506001600160a01b038083166080528116620000c157604051632d618d8160e21b815260040160405180910390fd5b6080516001600160a01b031663ca5eb5e1826040518263ffffffff1660e01b8152600401620000f1919062000848565b600060405180830381600087803b1580156200010c57600080fd5b505af115801562000121573d6000803e3d6000fd5b505050505050505062000139620003e760201b60201c565b60ff168360ff16101562000160576040516301e9714b60e41b815260040160405180910390fd5b6200016d60068462000872565b6200017a90600a62000991565b60a0525060089150620001909050838262000a38565b5060096200019f828262000a38565b50503360c05250505060e08301516001600160a01b03908116610220526080840151166102005250506040810151600b90620001dc908262000a38565b506060810151600c90620001f1908262000a38565b506101008101516001600160a01b0390811660e05261012080830151821690526101408083015190526101608083015190526101808083015190526101a08201516001600160501b039081166101c0908152830151166101e05260c051604080516306704e8760e31b815290519190921691633382743891600480830192602092919082900301816000875af115801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b6919062000b04565b6001600160a01b03166101005261014051600a8054600090620002db90849062000b22565b9091555050610160810151620002f3903090620003ec565b610100516101405161016051610180516040516334c426c960e01b81526004810193909352602483019190915260448201526001600160a01b03909116906334c426c99060640160408051808303816000875af115801562000359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037f919062000b38565b6001600160a01b0316610240526101a0525062000b67565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b6001600160a01b0382166200041957600060405163ec442f0560e01b81526004016200007e919062000848565b62000427600083836200042b565b5050565b6001600160a01b0383166200045a5780600760008282546200044e919062000b22565b90915550620004ce9050565b6001600160a01b03831660009081526005602052604090205481811015620004af5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016200007e565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216620004ec576007805482900390556200050b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055191815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b03811182821017156200059a576200059a6200055e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620005cb57620005cb6200055e565b604052919050565b600082601f830112620005e557600080fd5b81516001600160401b038111156200060157620006016200055e565b602062000617601f8301601f19168201620005a0565b82815285828487010111156200062c57600080fd5b60005b838110156200064c5785810183015182820184015282016200062f565b506000928101909101919091529392505050565b80516001600160a01b03811681146200067857600080fd5b919050565b80516001600160501b03811681146200067857600080fd5b600060208284031215620006a857600080fd5b81516001600160401b0380821115620006c057600080fd5b908301906101e08286031215620006d657600080fd5b620006e062000574565b825182811115620006f057600080fd5b620006fe87828601620005d3565b8252506020830151828111156200071457600080fd5b6200072287828601620005d3565b6020830152506040830151828111156200073b57600080fd5b6200074987828601620005d3565b6040830152506060830151828111156200076257600080fd5b6200077087828601620005d3565b606083015250620007846080840162000660565b60808201526200079760a0840162000660565b60a0820152620007aa60c0840162000660565b60c0820152620007bd60e0840162000660565b60e08201526101009150620007d482840162000660565b828201526101209150620007ea82840162000660565b918101919091526101408281015190820152610160808301519082015261018080830151908201526101a090620008238284016200067d565b828201526101c09150620008398284016200067d565b91810191909152949350505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200088e576200088e6200085c565b92915050565b600181815b80851115620008d5578160001904821115620008b957620008b96200085c565b80851615620008c757918102915b93841c939080029062000899565b509250929050565b600082620008ee575060016200088e565b81620008fd575060006200088e565b8160018114620009165760028114620009215762000941565b60019150506200088e565b60ff8411156200093557620009356200085c565b50506001821b6200088e565b5060208310610133831016604e8410600b841016171562000966575081810a6200088e565b62000972838362000894565b80600019048211156200098957620009896200085c565b029392505050565b6000620009a260ff841683620008dd565b9392505050565b600181811c90821680620009be57607f821691505b602082108103620009df57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a3357600081815260208120601f850160051c8101602086101562000a0e5750805b601f850160051c820191505b8181101562000a2f5782815560010162000a1a565b5050505b505050565b81516001600160401b0381111562000a545762000a546200055e565b62000a6c8162000a658454620009a9565b84620009e5565b602080601f83116001811462000aa4576000841562000a8b5750858301515b600019600386901b1c1916600185901b17855562000a2f565b600085815260208120601f198616915b8281101562000ad55788860151825594840194600190910190840162000ab4565b508582101562000af45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b1757600080fd5b620009a28262000660565b808201808211156200088e576200088e6200085c565b6000806040838503121562000b4c57600080fd5b8251915062000b5e6020840162000660565b90509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051613ea762000cf360003960006105e8015260008181610b58015281816112c0015281816113c70152611d9c0152600081816102f50152611ed00152600081816104e301528181611ef401526120aa0152600081816103910152611fd9015260006109db01526000818161067201528181610e080152610e7e0152600081816105b401526112470152600081816106a60152611b020152600081816109a701528181611e3d01528181611ea101528181611f94015281816120740152818161214c015261221b01526000818161063e015281816121df0152818161224801526122d30152600061051701526000818161058001526110290152600081816108fb01528181612886015281816128fb0152612ba20152600081816107c401528181610d24015281816119e701528181611cc6015281816124c1015281816126d401528181612c8a0152612d430152613ea76000f3fe6080604052600436106102de5760003560e01c806302d05d3f146102e357806306fdde031461032d578063095ea7b31461034f5780630b4501fd1461037f5780630d35b415146103cb578063111ecdad146103fa57806313137d651461041a578063134d4f251461042f578063156a0d0f14610457578063156e29f61461047e57806317442b701461049157806318160ddd146104b25780631a7dfa9f146104d15780631bea83fe146105055780631f5e13341461053957806323b872dd1461054e5780632dd310001461056e5780632ff2e9dc146105a2578063313c06a0146105d6578063313ce5671461060a578063328ad4671461062c57806332cb6b0c146106605780633314a042146106945780633400288b146106c85780633b6f743b146106e85780633c130d901461071557806342966c681461072a5780634bdaeac11461074a57806352ae28791461075f5780635535d461146107725780635a0dfe4d146107925780635e280f11146107b25780636fc1b31e146107e657806370a0823114610806578063715018a6146108265780637284e4161461083b5780637a54163a146108505780637d25a05e14610870578063857749b0146108ab5780638da5cb5b146108bf57806395d89b41146108d4578063963efcaa146108e95780639b164e331461091d5780639f68b96414610937578063a035b1fe1461094b578063a10954fe14610960578063a9059cbb14610975578063ad5c464814610995578063ae2c1a6e146109c9578063b731ea0a146109fd578063b92d0eff1461075f578063b98bd07014610a1d578063bb0b6a5314610a3d578063bc70b35414610a6a578063bd815db014610a8a578063c7c7f5b314610a9d578063ca5eb5e114610abe578063d045a0dc14610ade578063d424388514610af1578063dd62ed3e14610b11578063edaf2d2e14610b31578063eff1d50e14610b46578063f2fde38b14610b7a578063fc0c546a1461075f578063ff7bd03d14610b9a575b600080fd5b3480156102ef57600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516103249190612f54565b60405180910390f35b34801561033957600080fd5b50610342610bba565b6040516103249190612fb8565b34801561035b57600080fd5b5061036f61036a366004612fe0565b610c4c565b6040519015158152602001610324565b34801561038b57600080fd5b506103b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160501b039091168152602001610324565b3480156103d757600080fd5b506103eb6103e6366004613024565b610c66565b60405161032493929190613067565b34801561040657600080fd5b50600454610317906001600160a01b031681565b61042d61042836600461314e565b610d22565b005b34801561043b57600080fd5b50610444600281565b60405161ffff9091168152602001610324565b34801561046357600080fd5b506040805162b9270b60e21b81526001602082015201610324565b61042d61048c3660046131ed565b610dda565b34801561049d57600080fd5b50604080516001808252602082015201610324565b3480156104be57600080fd5b506007545b604051908152602001610324565b3480156104dd57600080fd5b506103b37f000000000000000000000000000000000000000000000000000000000000000081565b34801561051157600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b34801561054557600080fd5b50610444600181565b34801561055a57600080fd5b5061036f610569366004613222565b610ef2565b34801561057a57600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ae57600080fd5b506104c37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e257600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5060125b60405160ff9091168152602001610324565b34801561063857600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b34801561066c57600080fd5b506104c37f000000000000000000000000000000000000000000000000000000000000000081565b3480156106a057600080fd5b506104c37f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d457600080fd5b5061042d6106e336600461327c565b610f2d565b3480156106f457600080fd5b506107086107033660046132a6565b610f8b565b60405161032491906132f7565b34801561072157600080fd5b50610342610fe6565b34801561073657600080fd5b5061042d610745366004613305565b610ff5565b34801561075657600080fd5b50610317611025565b34801561076b57600080fd5b5030610317565b34801561077e57600080fd5b5061034261078d366004613330565b6110ae565b34801561079e57600080fd5b5061036f6107ad36600461327c565b611153565b3480156107be57600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b3480156107f257600080fd5b5061042d610801366004613363565b61116f565b34801561081257600080fd5b506104c3610821366004613363565b6111cd565b34801561083257600080fd5b5061042d6111e8565b34801561084757600080fd5b506103426111fc565b34801561085c57600080fd5b5061042d61086b3660046131ed565b611209565b34801561087c57600080fd5b5061089361088b36600461327c565b600092915050565b6040516001600160401b039091168152602001610324565b3480156108b757600080fd5b50600661061a565b3480156108cb57600080fd5b5061031761138f565b3480156108e057600080fd5b5061034261139e565b3480156108f557600080fd5b506104c37f000000000000000000000000000000000000000000000000000000000000000081565b34801561092957600080fd5b50600d5461036f9060ff1681565b34801561094357600080fd5b50600061036f565b34801561095757600080fd5b506104c36113ad565b34801561096c57600080fd5b50600a546104c3565b34801561098157600080fd5b5061036f610990366004612fe0565b611447565b3480156109a157600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b3480156109d557600080fd5b506104c37f000000000000000000000000000000000000000000000000000000000000000081565b348015610a0957600080fd5b50600254610317906001600160a01b031681565b348015610a2957600080fd5b5061042d610a383660046133c4565b611477565b348015610a4957600080fd5b506104c3610a58366004613405565b60016020526000908152604090205481565b348015610a7657600080fd5b50610342610a85366004613420565b6115e2565b61042d610a983660046133c4565b61175d565b610ab0610aab366004613480565b6118da565b6040516103249291906134ed565b348015610aca57600080fd5b5061042d610ad9366004613363565b6119c8565b61042d610aec36600461314e565b611a51565b348015610afd57600080fd5b5061042d610b0c366004613363565b611a80565b348015610b1d57600080fd5b506104c3610b2c366004613529565b611ad3565b348015610b3d57600080fd5b506104c3611afe565b348015610b5257600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b348015610b8657600080fd5b5061042d610b95366004613363565b611b2e565b348015610ba657600080fd5b5061036f610bb5366004613557565b611b69565b606060088054610bc990613573565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf590613573565b8015610c425780601f10610c1757610100808354040283529160200191610c42565b820191906000526020600020905b815481529060010190602001808311610c2557829003601f168201915b5050505050905090565b600033610c5a818585611b9f565b60019150505b92915050565b60408051808201909152600080825260208201526060610c84612f16565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610cdf565b604080518082019091526000815260606020820152815260200190600190039081610cb75790505b509350600080610d04604089013560608a0135610cff60208c018c613405565b611bb1565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610d7657336040516391ac5e4f60e01b8152600401610d6d9190612f54565b60405180910390fd5b60208701803590610d9090610d8b908a613405565b611bf5565b14610dc257610da26020880188613405565b876020013560405163309afaf360e21b8152600401610d6d9291906135bd565b610dd187878787878787611c31565b50505050505050565b610de2611d91565b600d5460ff1615610e065760405163d2e9156f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082610e3160075490565b610e3b91906135e9565b1115610e5a57604051636e04825360e01b815260040160405180910390fd5b80600a6000828254610e6c91906135e9565b90915550610e7c90508383611dda565b7f0000000000000000000000000000000000000000000000000000000000000000610ea660075490565b10610eb457610eb483611e14565b7f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858383604051610ee59291906135fc565b60405180910390a1505050565b600d5460009060ff16610f185760405163049d487360e31b815260040160405180910390fd5b610f2384848461233d565b90505b9392505050565b610f35612361565b63ffffffff821660009081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b90610f7f90849084906135bd565b60405180910390a15050565b610f93612f16565b6000610faf60408501356060860135610cff6020880188613405565b915050600080610fbf8684612393565b9092509050610fdc610fd46020880188613405565b8383886124b7565b9695505050505050565b6060600b8054610bc990613573565b600d5460ff166110185760405163049d487360e31b815260040160405180910390fd5b611022338261258c565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634bdaeac16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190613615565b905090565b6003602090815260009283526040808420909152908252902080546110d290613573565b80601f01602080910402602001604051908101604052809291908181526020018280546110fe90613573565b801561114b5780601f106111205761010080835404028352916020019161114b565b820191906000526020600020905b81548152906001019060200180831161112e57829003601f168201915b505050505081565b63ffffffff919091166000908152600160205260409020541490565b611177612361565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906111c2908390612f54565b60405180910390a150565b6001600160a01b031660009081526005602052604090205490565b6111f0612361565b6111fa60006125c2565b565b600c80546110d290613573565b611211611d91565b600d5460ff161561123557604051636db88bd960e11b815260040160405180910390fd5b61123d611afe565b81118061127c57507f00000000000000000000000000000000000000000000000000000000000000008261127060075490565b61127a9190613632565b105b1561129a57604051636e04825360e01b815260040160405180910390fd5b80600a60008282546112ac9190613632565b909155506112bc9050838361258c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260405160006040518083038185875af1925050503d8060008114611329576040519150601f19603f3d011682016040523d82523d6000602084013e61132e565b606091505b5050905080611350576040516338822c1360e11b815260040160405180910390fd5b7fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca584846040516113819291906135fc565b60405180910390a150505050565b6000546001600160a01b031690565b606060098054610bc990613573565b604051632d8dfc9f60e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d8dfc9f90611406903090670de0b6b3a7640000906004016135fc565b602060405180830381865afa158015611423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190613645565b600d5460009060ff1661146d5760405163049d487360e31b815260040160405180910390fd5b610f268383612612565b61147f612361565b60005b818110156115b0576114c483838381811061149f5761149f61365e565b90506020028101906114b19190613674565b6114bf906040810190613694565b612620565b8282828181106114d6576114d661365e565b90506020028101906114e89190613674565b6114f6906040810190613694565b6003600086868681811061150c5761150c61365e565b905060200281019061151e9190613674565b61152c906020810190613405565b63ffffffff1663ffffffff168152602001908152602001600020600086868681811061155a5761155a61365e565b905060200281019061156c9190613674565b61157d9060408101906020016136da565b61ffff16815260208101919091526040016000209161159d919083613743565b50806115a881613802565b915050611482565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6748282604051610f7f929190613844565b63ffffffff8416600090815260036020908152604080832061ffff8716845290915281208054606092919061161690613573565b80601f016020809104026020016040519081016040528092919081815260200182805461164290613573565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905080516000036116df5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509294506117559350505050565b60008390036116ef579050611755565b60028310611738576117018484612620565b8061170f8460028188613928565b60405160200161172193929190613952565b604051602081830303815290604052915050611755565b8383604051639a6d49cd60e01b8152600401610d6d92919061397a565b949350505050565b60005b81811015611859573683838381811061177b5761177b61365e565b905060200281019061178d919061398e565b90506117a961179f6020830183613405565b6020830135611153565b6117b35750611847565b3063d045a0dc60c08301358360a08101356117d2610100830183613694565b6117e3610100890160e08a01613363565b6117f16101208a018a613694565b6040518963ffffffff1660e01b815260040161181397969594939291906139ba565b6000604051808303818588803b15801561182c57600080fd5b505af1158015611840573d6000803e3d6000fd5b5050505050505b8061185181613802565b915050611760565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118c09190810190613a68565b604051638351eea760e01b8152600401610d6d9190612fb8565b6118e2612f30565b6118ea612f16565b60008061190c6040880135606089013561190760208b018b613405565b612662565b9150915060008061191d8984612393565b909250905061194961193260208b018b613405565b8383611943368d90038d018d613b09565b8b6126a1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611997908d018d613405565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6119d0612361565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190611a1c908490600401612f54565b600060405180830381600087803b158015611a3657600080fd5b505af1158015611a4a573d6000803e3d6000fd5b5050505050565b333014611a715760405163029a949d60e31b815260040160405180910390fd5b610dd187878787878787610dc2565b611a88612361565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760906111c2908390612f54565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b60007f0000000000000000000000000000000000000000000000000000000000000000600a546110a99190613632565b611b36612361565b6001600160a01b038116611b60576000604051631e4fbdf760e01b8152600401610d6d9190612f54565b611022816125c2565b6000602082018035906001908390611b819086613405565b63ffffffff1681526020810191909152604001600020541492915050565b611bac83838360016127ac565b505050565b600080611bbd85612882565b915081905083811015611bed576040516371c4efed60e01b81526004810182905260248101859052604401610d6d565b935093915050565b63ffffffff811660009081526001602052604081205480610c605760405163f6ff4fb760e01b815263ffffffff84166004820152602401610d6d565b6000611c43611c4087876128b9565b90565b90506000611c6f82611c5d611c588a8a6128d1565b6128f4565b611c6a60208d018d613405565b612929565b90506028861115611d36576000611cac611c8f60608c0160408d01613b3b565b611c9c60208d018d613405565b84611ca78c8c61295b565b6129a6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb5901290611d029086908d906000908790600401613b58565b600060405180830381600087803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c611d6f60208d018d613405565b84604051611d7e9291906135bd565b60405180910390a3505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111fa576040516348f5c3ed60e01b815260040160405180910390fd5b6001600160a01b038216611e0457600060405163ec442f0560e01b8152600401610d6d9190612f54565b611e10600083836129d8565b5050565b600d805460ff1916600117905560408051630d0e30db60e41b8152905147916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d0e30db0918491600480830192600092919082900301818588803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb7f00000000000000000000000000000000000000000000000000000000000000006127107f00000000000000000000000000000000000000000000000000000000000000006001600160501b031685611f279190613b89565b611f319190613ba0565b6040518363ffffffff1660e01b8152600401611f4e9291906135fc565b6020604051808303816000875af1158015611f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f919190613bc2565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611fc961138f565b612710611fff6001600160501b037f00000000000000000000000000000000000000000000000000000000000000001686613b89565b6120099190613ba0565b6040518363ffffffff1660e01b81526004016120269291906135fc565b6020604051808303816000875af1158015612045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120699190613bc2565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb83614e206120d06001600160501b037f00000000000000000000000000000000000000000000000000000000000000001686613b89565b6120da9190613ba0565b6040518363ffffffff1660e01b81526004016120f79291906135fc565b6020604051808303816000875af1158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613bc2565b506000612146306111cd565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016121969190612f54565b602060405180830381865afa1580156121b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d79190613645565b9050612204307f000000000000000000000000000000000000000000000000000000000000000084611b9f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390612272907f00000000000000000000000000000000000000000000000000000000000000009085906004016135fc565b6020604051808303816000875af1158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b59190613bc2565b506040516378daf66f60e11b815260048101839052602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f1b5ecde90604401600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b5050505050505050565b60003361234b858285612aef565b612356858585612b3c565b506001949350505050565b3361236a61138f565b6001600160a01b0316146111fa573360405163118cdaa760e01b8152600401610d6d9190612f54565b60608060006123f085602001356123a986612b9b565b6123b660a0890189613694565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bc792505050565b9093509050600081612403576001612406565b60025b90506124266124186020880188613405565b82610a8560808a018a613694565b6004549093506001600160a01b0316156124ae576004805460405163043a78eb60e01b81526001600160a01b039091169163043a78eb9161246b918891889101613bdf565b602060405180830381865afa158015612488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ac9190613bc2565b505b50509250929050565b6124bf612f16565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161250e89611bf5565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401612543929190613c04565b6040805180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190613cad565b95945050505050565b6001600160a01b0382166125b6576000604051634b637e8f60e11b8152600401610d6d9190612f54565b611e10826000836129d8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600033610c5a818585612b3c565b600061262f6002828486613928565b61263891613cc9565b60f01c905060038114611bac578282604051639a6d49cd60e01b8152600401610d6d92919061397a565b600d54600090819060ff1661268a5760405163049d487360e31b815260040160405180910390fd5b612695858585612c41565b91509150935093915050565b6126a9612f30565b60006126b88460000151612c5e565b6020850151909150156126d2576126d28460200151612c86565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016127228c611bf5565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b815260040161275e929190613c04565b60806040518083038185885af115801561277c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127a19190613cf9565b979650505050505050565b6001600160a01b0384166127d657600060405163e602df0560e01b8152600401610d6d9190612f54565b6001600160a01b038316612800576000604051634a1406b160e11b8152600401610d6d9190612f54565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561287c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161287391815260200190565b60405180910390a35b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006128af8184613ba0565b610c609190613b89565b60006128c86020828486613928565b610f2691613d60565b60006128e1602860208486613928565b6128ea91613d7e565b60c01c9392505050565b6000610c607f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416613b89565b600d5460009060ff1661294f5760405163049d487360e31b815260040160405180910390fd5b610f2384846000612d68565b606061296a8260288186613928565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b6060848484846040516020016129bf9493929190613dac565b6040516020818303038152906040529050949350505050565b6001600160a01b038316612a035780600760008282546129f891906135e9565b90915550612a629050565b6001600160a01b03831660009081526005602052604090205481811015612a435783818360405163391434e360e21b8152600401610d6d93929190613dfe565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216612a7e57600780548290039055612a9d565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ae291815260200190565b60405180910390a3505050565b6000612afb8484611ad3565b9050600019811461287c5781811015612b2d57828183604051637dc7a0d960e11b8152600401610d6d93929190613dfe565b61287c848484840360006127ac565b6001600160a01b038316612b66576000604051634b637e8f60e11b8152600401610d6d9190612f54565b6001600160a01b038216612b9057600060405163ec442f0560e01b8152600401610d6d9190612f54565b611bac8383836129d8565b6000610c607f000000000000000000000000000000000000000000000000000000000000000083613ba0565b8051606090151580612c10578484604051602001612bfc92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052612c37565b84843385604051602001612c279493929190613e1f565b6040516020818303038152906040525b9150935093915050565b600080612c4f858585611bb1565b9092509050611bed338361258c565b6000813414612c82576040516304fb820960e51b8152346004820152602401610d6d565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0a9190613615565b90506001600160a01b038116612d33576040516329b99a9560e11b815260040160405180910390fd5b611e106001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085612d7c565b6000612d748484611dda565b509092915050565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b17905261287c91869190600090612de290841683612e27565b90508051600014158015612e07575080806020019051810190612e059190613bc2565b155b15611bac5782604051635274afe760e01b8152600401610d6d9190612f54565b6060610f268383600084600080856001600160a01b03168486604051612e4d9190613e5f565b60006040518083038185875af1925050503d8060008114612e8a576040519150601f19603f3d011682016040523d82523d6000602084013e612e8f565b606091505b5091509150610fdc868383606082612eaf57612eaa82612eed565b610f26565b8151158015612ec657506001600160a01b0384163b155b15612ee65783604051639996b31560e01b8152600401610d6d9190612f54565b5080610f26565b805115612efd5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806040016040528060008152602001600081525090565b6040805160608101825260008082526020820152908101612f4f612f16565b905290565b6001600160a01b0391909116815260200190565b60005b83811015612f83578181015183820152602001612f6b565b50506000910152565b60008151808452612fa4816020860160208601612f68565b601f01601f19169290920160200192915050565b602081526000610f266020830184612f8c565b6001600160a01b038116811461102257600080fd5b60008060408385031215612ff357600080fd5b8235612ffe81612fcb565b946020939093013593505050565b600060e0828403121561301e57600080fd5b50919050565b60006020828403121561303657600080fd5b81356001600160401b0381111561304c57600080fd5b6117558482850161300c565b80518252602090810151910152565b600060a082016130778387613058565b604060a08185015281865180845260c08601915060c08160051b8701019350602080890160005b838110156130dd5788870360bf190185528151805188528301518388018790526130ca87890182612f8c565b975050938201939082019060010161309e565b505050505050809150506117556060830184613058565b60006060828403121561301e57600080fd5b60008083601f84011261311857600080fd5b5081356001600160401b0381111561312f57600080fd5b60208301915083602082850101111561314757600080fd5b9250929050565b600080600080600080600060e0888a03121561316957600080fd5b61317389896130f4565b96506060880135955060808801356001600160401b038082111561319657600080fd5b6131a28b838c01613106565b909750955060a08a013591506131b782612fcb565b90935060c089013590808211156131cd57600080fd5b506131da8a828b01613106565b989b979a50959850939692959293505050565b60008060006060848603121561320257600080fd5b833561320d81612fcb565b95602085013595506040909401359392505050565b60008060006060848603121561323757600080fd5b833561324281612fcb565b9250602084013561325281612fcb565b929592945050506040919091013590565b803563ffffffff8116811461327757600080fd5b919050565b6000806040838503121561328f57600080fd5b612ffe83613263565b801515811461102257600080fd5b600080604083850312156132b957600080fd5b82356001600160401b038111156132cf57600080fd5b6132db8582860161300c565b92505060208301356132ec81613298565b809150509250929050565b60408101610c608284613058565b60006020828403121561331757600080fd5b5035919050565b803561ffff8116811461327757600080fd5b6000806040838503121561334357600080fd5b61334c83613263565b915061335a6020840161331e565b90509250929050565b60006020828403121561337557600080fd5b8135610f2681612fcb565b60008083601f84011261339257600080fd5b5081356001600160401b038111156133a957600080fd5b6020830191508360208260051b850101111561314757600080fd5b600080602083850312156133d757600080fd5b82356001600160401b038111156133ed57600080fd5b6133f985828601613380565b90969095509350505050565b60006020828403121561341757600080fd5b610f2682613263565b6000806000806060858703121561343657600080fd5b61343f85613263565b935061344d6020860161331e565b925060408501356001600160401b0381111561346857600080fd5b61347487828801613106565b95989497509550505050565b6000806000838503608081121561349657600080fd5b84356001600160401b038111156134ac57600080fd5b6134b88782880161300c565b9450506040601f19820112156134cd57600080fd5b5060208401915060608401356134e281612fcb565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c083019161351b90840182613058565b50610f266080830184613058565b6000806040838503121561353c57600080fd5b823561354781612fcb565b915060208301356132ec81612fcb565b60006060828403121561356957600080fd5b610f2683836130f4565b600181811c9082168061358757607f821691505b60208210810361301e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b63ffffffff929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6057610c606135d3565b6001600160a01b03929092168252602082015260400190565b60006020828403121561362757600080fd5b8151610f2681612fcb565b81810381811115610c6057610c606135d3565b60006020828403121561365757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261368a57600080fd5b9190910192915050565b6000808335601e198436030181126136ab57600080fd5b8301803591506001600160401b038211156136c557600080fd5b60200191503681900382131561314757600080fd5b6000602082840312156136ec57600080fd5b610f268261331e565b601f821115611bac57600081815260208120601f850160051c8101602086101561371c5750805b601f850160051c820191505b8181101561373b57828155600101613728565b505050505050565b6001600160401b0383111561375a5761375a6135a7565b61376e836137688354613573565b836136f5565b6000601f8411600181146137a2576000851561378a5750838201355b600019600387901b1c1916600186901b178355611a4a565b600083815260209020601f19861690835b828110156137d357868501358255602094850194600190920191016137b3565b50868210156137f05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060018201613814576138146135d3565b5060010190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040808401600586901b8501820187855b8881101561391a57878303603f190184528135368b9003605e1901811261388957600080fd5b8a01606063ffffffff61389b83613263565b16855261ffff6138ac89840161331e565b168886015286820135601e198336030181126138c757600080fd5b9091018781019190356001600160401b038111156138e457600080fd5b8036038313156138f357600080fd5b8188870152613905828701828561381b565b96890196955050509186019150600101613863565b509098975050505050505050565b6000808585111561393857600080fd5b8386111561394557600080fd5b5050820193919092039150565b60008451613964818460208901612f68565b8201838582376000930192835250909392505050565b602081526000610f2360208301848661381b565b6000823561013e1983360301811261368a57600080fd5b6001600160401b038116811461102257600080fd5b63ffffffff6139c889613263565b16815260208801356020820152600060408901356139e5816139a5565b6001600160401b031660408301526060820188905260e060808301819052613a10908301878961381b565b6001600160a01b03861660a084015282810360c0840152613a3281858761381b565b9a9950505050505050505050565b604080519081016001600160401b0381118282101715613a6257613a626135a7565b60405290565b600060208284031215613a7a57600080fd5b81516001600160401b0380821115613a9157600080fd5b818401915084601f830112613aa557600080fd5b815181811115613ab757613ab76135a7565b604051601f8201601f19908116603f01168101908382118183101715613adf57613adf6135a7565b81604052828152876020848701011115613af857600080fd5b6127a1836020830160208801612f68565b600060408284031215613b1b57600080fd5b613b23613a40565b82358152602083013560208201528091505092915050565b600060208284031215613b4d57600080fd5b8135610f26816139a5565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610fdc6080830184612f8c565b8082028115828204841417610c6057610c606135d3565b600082613bbd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613bd457600080fd5b8151610f2681613298565b604081526000613bf26040830185612f8c565b82810360208401526125838185612f8c565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152613c3a60e0840182612f8c565b90506060850151603f198483030160a0850152613c578282612f8c565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215613c8f57600080fd5b613c97613a40565b9050815181526020820151602082015292915050565b600060408284031215613cbf57600080fd5b610f268383613c7d565b6001600160f01b03198135818116916002851015613cf15780818660020360031b1b83161692505b505092915050565b600060808284031215613d0b57600080fd5b604051606081016001600160401b0381118282101715613d2d57613d2d6135a7565b604052825181526020830151613d42816139a5565b6020820152613d548460408501613c7d565b60408201529392505050565b80356020831015610c6057600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015613cf15760089490940360031b84901b1690921692915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c81018390528151600090613dee81602c850160208701612f68565b91909101602c0195945050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b84815260018060c01b03198460c01b16602082015282602882015260008251613e4f816048850160208701612f68565b9190910160480195945050505050565b6000825161368a818460208701612f6856fea264697066735822122048f0059a9be7bd622788384ae1eb5ce3f7aa051c831b2831e7a2f7290efadb2b64736f6c63430008140033a2646970667358221220708f675c09ae8928fe6213dc785cc80dab2b2eb7db5e5c6775f969a922c5191a64736f6c634300081400330000000000000000000000009a629ca77493501c33137b9c4634c81e44754c52000000000000000000000000e81941c13678a6396e438490601a40a34bf90dd20000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000000c7f3082833e796a5b3e4bd59f6642ff44dcd1500000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab100000000000000000000000000000000000000000000000068155a43676e000000000000000000000000000000000000000000000035c4490f820855e100000000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000000000000000000000000960000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000001550f7dca70000