0 txs
0 calls
constructor
constructor(address _protocolAdmin, address _shekelStakingContract, address _lockerFactory, address deployer, uint256 initialCreationFee, uint256 initialStakingRequirement, uint256 initialPersonalFundCreationFee, uint256 initialPersonalFundStakingRequirement)
functions
getCreationFee
viewfunction getCreationFee() view returns (uint256)
getDeployer
viewfunction getDeployer() view returns (address)
getGlobalParams
viewfunction getGlobalParams() view returns (tuple)
getPersonalFundCreationFee
viewfunction getPersonalFundCreationFee() view returns (uint256)
getPersonalFundStakingRequirement
viewfunction getPersonalFundStakingRequirement() view returns (uint256)
getStakingRequirement
viewfunction getStakingRequirement() view returns (uint256)
isFundContract
viewfunction isFundContract(address contractAddress) view returns (bool)
owner
viewfunction owner() view returns (address)
createFund
nonpayablefunction createFund(tuple params) returns (address)
createPersonalizedFunds
nonpayablefunction createPersonalizedFunds(bool isTokenFund, address aiWallet, address frTokenAddress) returns (address)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateCreationFee
nonpayablefunction updateCreationFee(uint256 newFee)
updateDeployer
nonpayablefunction updateDeployer(address newDeployer)
updateGlobalParams
nonpayablefunction updateGlobalParams(tuple newParams)
updateLockerFactory
nonpayablefunction updateLockerFactory(address newLockerFactory)
updatePersonalFundCreationFee
nonpayablefunction updatePersonalFundCreationFee(uint256 newFee)
updatePersonalFundStakingRequirement
nonpayablefunction updatePersonalFundStakingRequirement(uint256 newRequirement)
updateProtocolAdmin
nonpayablefunction updateProtocolAdmin(address newProtocolAdmin)
updateShekelStakingContract
nonpayablefunction updateShekelStakingContract(address newShekelStakingContract)
updateStakingRequirement
nonpayablefunction updateStakingRequirement(uint256 newRequirement)
withdrawFees
nonpayablefunction withdrawFees()
events
CreationFeeUpdated
event CreationFeeUpdated(uint256 oldFee, uint256 newFee)
DeployerUpdated
event DeployerUpdated(address oldDeployer, address newDeployer)
FundCreated
event FundCreated(address indexed fundAddress, string name, string symbol)
GlobalParamsUpdated
event GlobalParamsUpdated((address protocolAdmin, address shekelStakingContract, address lockerFactory) newParams)
LockerFactoryUpdated
event LockerFactoryUpdated(address newLockerFactory)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PersonalFundCreated
event PersonalFundCreated(address indexed fundAddress, address indexed owner, bool isTokenFund)
PersonalFundCreationFeeUpdated
event PersonalFundCreationFeeUpdated(uint256 oldFee, uint256 newFee)
PersonalFundStakingRequirementUpdated
event PersonalFundStakingRequirementUpdated(uint256 oldRequirement, uint256 newRequirement)
ProtocolAdminUpdated
event ProtocolAdminUpdated(address newProtocolAdmin)
ShekelStakingContractUpdated
event ShekelStakingContractUpdated(address newShekelStakingContract)
StakingRequirementUpdated
event StakingRequirementUpdated(uint256 oldRequirement, uint256 newRequirement)
errors
DeploymentFailed
error DeploymentFailed()
FeeTransferFailed
error FeeTransferFailed()
FundAlreadyExists
error FundAlreadyExists()
InsufficientFee
error InsufficientFee()
InsufficientStake
error InsufficientStake()
InvalidAddress
error InvalidAddress()
InvalidDeadline
error InvalidDeadline()
InvalidFundExpiry
error InvalidFundExpiry()
InvalidFundraisingGoal
error InvalidFundraisingGoal()
InvalidStakeRequirement
error InvalidStakeRequirement()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TokenAddressRequired
error TokenAddressRequired()
Unauthorized
error Unauthorized()
creation bytecode
0x608060405234801561001057600080fd5b5060405161607c38038061607c83398101604081905261002f916101ec565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610180565b50600180556001600160a01b03881661008a5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0387166100b15760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166100d85760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0385166100ff5760405163e6c4247b60e01b815260040160405180910390fd5b604080516060810182526001600160a01b03998a16808252988a1660208201819052978a169101819052600280546001600160a01b0319908116909917905560038054891690971790965560048054881690961790955560098054949097169390951692909217909455600593909355600692909255600755600855610267565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101e757600080fd5b919050565b600080600080600080600080610100898b03121561020957600080fd5b610212896101d0565b975061022060208a016101d0565b965061022e60408a016101d0565b955061023c60608a016101d0565b60808a015160a08b015160c08c015160e0909c01519a9d999c50979a91999098919650945092505050565b615e06806102766000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806371852710116100b8578063a4139f731161007c578063a4139f73146102fc578063b30e5c0f1461030f578063c1d3be8b14610322578063db07b68e14610335578063ea264f771461033d578063f2fde38b1461035057600080fd5b8063718527101461029857806372630531146102ab5780637ef8fd6a146102d05780638da5cb5b146102e3578063a20d8373146102f457600080fd5b80634d413e7d1161010a5780634d413e7d146101ca57806354eb31b2146101dd57806365a7f0c0146101f05780636b3222e6146101f85780636fa237951461027d578063715018a61461029057600080fd5b8063022fc40e146101475780630ceb1f671461015c5780633797389b1461019d578063476343ee146101af5780634b25fb80146101b7575b600080fd5b61015a610155366004611206565b610363565b005b61018861016a366004611206565b6001600160a01b03166000908152600a602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6007545b604051908152602001610194565b61015a6103e7565b61015a6101c5366004611206565b610553565b61015a6101d8366004611206565b6105d0565b61015a6101eb366004611223565b610661565b6006546101a1565b61024b604080516060810182526000808252602082018190529181019190915250604080516060810182526002546001600160a01b03908116825260035481166020830152600454169181019190915290565b6040805182516001600160a01b0390811682526020808501518216908301529282015190921690820152606001610194565b61015a61028b366004611223565b6106a7565b61015a6106ed565b61015a6102a6366004611223565b610701565b6009546001600160a01b03165b6040516001600160a01b039091168152602001610194565b6102b86102de36600461124a565b610747565b6000546001600160a01b03166102b8565b6008546101a1565b6102b861030a366004611295565b610a68565b61015a61031d3660046112d1565b610f4d565b61015a610330366004611206565b61103c565b6005546101a1565b61015a61034b366004611223565b6110b9565b61015a61035e366004611206565b6110ff565b61036b61113d565b6001600160a01b0381166103925760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff557bdcdfe8b1184f10c6fe9ac7189955b6b8089703e203dfa50743216ade04a906020015b60405180910390a150565b6103ef61113d565b6040516370a0823160e01b8152306004820152600090735f6a682a58854c7fbe228712aeeffccde0008ac0906370a0823190602401602060405180830381865afa158015610441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046591906112ec565b9050600081116104b25760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064015b60405180910390fd5b735f6a682a58854c7fbe228712aeeffccde0008ac063a9059cbb6104de6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561052b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054f9190611305565b5050565b61055b61113d565b6001600160a01b0381166105825760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f85fd02827b52938b46618cf0daa3e7bb12d3d0685da78cbd4b7ca66edb6ce928906020016103dc565b6105d861113d565b6001600160a01b0381166105ff5760405163e6c4247b60e01b815260040160405180910390fd5b600980546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4590909f6ea280ffff8f32337577f35ec6cbec73ab17ad9723c587bf0af57d6691015b60405180910390a15050565b61066961113d565b600680549082905560408051828152602081018490527f0c3453b502a059562b2bb38e06ab018bf9990d0ae002b05c34a5ba2d0cd539e79101610655565b6106af61113d565b600580549082905560408051828152602081018490527f5de302eeb1c80d4fb0c0953b692353f09ddf431411b8eb2034d5e857695619129101610655565b6106f561113d565b6106ff600061116a565b565b61070961113d565b600880549082905560408051828152602081018490527ffc92e0edf16d7033d8d2906b76f3d270faa613855852c9e547318fd65cbe500d9101610655565b60006107516111ba565b6001600160a01b0383166107785760405163e6c4247b60e01b815260040160405180910390fd5b83801561078c57506001600160a01b038216155b156107aa5760405163075fe2b560e31b815260040160405180910390fd5b6003546040516326d352ab60e11b81523360048201526000916001600160a01b031690634da6a55690602401602060405180830381865afa1580156107f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081791906112ec565b905060085481101561083c576040516378de4a6960e11b815260040160405180910390fd5b6007546040516323b872dd60e01b81523360048201523060248201526044810191909152600090735f6a682a58854c7fbe228712aeeffccde0008ac0906323b872dd906064016020604051808303816000875af11580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190611305565b9050806108e557604051634033e4e360e01b815260040160405180910390fd5b6000866108f35760006108f5565b845b60095460025460405160016263d4b160e11b031981523360048201526001600160a01b0391821660248201528a151560448201528982166064820152818416608482015292935060009291169063ff38569e9060a4016020604051808303816000875af115801561096a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098e9190611322565b90506001600160a01b0381166109b757604051633011642560e01b815260040160405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff16156109f15760405163065ddb1960e21b815260040160405180910390fd5b6001600160a01b0381166000818152600a602052604090819020805460ff19166001179055513391907f3e610b94d8de02093025e922cd925a9bea9541f9a26f8ab80cf72a906ae65d2590610a4b908c1515815260200190565b60405180910390a39350505050610a6160018055565b9392505050565b6000610a726111ba565b8135600003610a9457604051632d47cb8f60e11b815260040160405180910390fd5b42826060013511610ab857604051631da7447960e21b815260040160405180910390fd5b8160600135826080013511610ae057604051639ae7e6a760e01b815260040160405180910390fd5b816101200135600003610b065760405163c195a09760e01b815260040160405180910390fd5b6000610b1860c0840160a08501611206565b6001600160a01b031603610b3f5760405163e6c4247b60e01b815260040160405180910390fd5b610b516101208301610100840161133f565b8015610b7757506000610b6c61016084016101408501611206565b6001600160a01b0316145b15610b955760405163075fe2b560e31b815260040160405180910390fd5b6003546040516326d352ab60e11b81523360048201526000916001600160a01b031690634da6a55690602401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0291906112ec565b9050600654811015610c27576040516378de4a6960e11b815260040160405180910390fd5b6005546040516323b872dd60e01b81523360048201523060248201526044810191909152600090735f6a682a58854c7fbe228712aeeffccde0008ac0906323b872dd906064016020604051808303816000875af1158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb09190611305565b905080610cd057604051634033e4e360e01b815260040160405180910390fd5b6000610ce46101208601610100870161133f565b610cef576000610d01565b610d0161016086016101408701611206565b90506000604051806101c0016040528087600001358152602001878060200190610d2b919061135c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610d72604089018961135c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060608089013560208301526080890135604083015201610dcf60c0890160a08a01611206565b6001600160a01b03908116825260c0890135602083015260025416604082015260e08801356060820152608001610e0e61012089016101008a0161133f565b1515815261012088013560208201526003546001600160a01b0390811660408084019190915260045482166060840152908516608090920191909152519091506000908290610e5c906111e4565b610e6691906113f0565b604051809103906000f080158015610e82573d6000803e3d6000fd5b506001600160a01b0381166000908152600a602052604090205490915060ff1615610ec05760405163065ddb1960e21b815260040160405180910390fd5b6001600160a01b0381166000818152600a60209081526040909120805460ff191660011790557faac40c8ecf116edb56b3915e304904e16086b229e0cc4d0db093edc816513c1d90610f14908a018a61135c565b610f2160408c018c61135c565b604051610f319493929190611536565b60405180910390a2945050505050610f4860018055565b919050565b610f5561113d565b6000610f646020830183611206565b6001600160a01b031603610f8b5760405163e6c4247b60e01b815260040160405180910390fd5b6000610f9d6040830160208401611206565b6001600160a01b031603610fc45760405163e6c4247b60e01b815260040160405180910390fd5b6000610fd66060830160408401611206565b6001600160a01b031603610ffd5760405163e6c4247b60e01b815260040160405180910390fd5b80600261100a8282611588565b9050507f30fcc190c1b71b1612363fa89ee8647ecd87ef8bcbc09a40374662e2d2dbba39816040516103dc91906115da565b61104461113d565b6001600160a01b03811661106b5760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f1af81a401acf01a36af32532151690df1252f468decdeb32a9252e7e15d0a30f906020016103dc565b6110c161113d565b600780549082905560408051828152602081018490527f89aa4e952160c521708c0f3e6f9264bb26645ef6c8914952ad0ff5531de78a189101610655565b61110761113d565b6001600160a01b03811661113157604051631e4fbdf760e01b8152600060048201526024016104a9565b61113a8161116a565b50565b6000546001600160a01b031633146106ff5760405163118cdaa760e01b81523360048201526024016104a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600154036111dd57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b61479a8061163783390190565b6001600160a01b038116811461113a57600080fd5b60006020828403121561121857600080fd5b8135610a61816111f1565b60006020828403121561123557600080fd5b5035919050565b801515811461113a57600080fd5b60008060006060848603121561125f57600080fd5b833561126a8161123c565b9250602084013561127a816111f1565b9150604084013561128a816111f1565b809150509250925092565b6000602082840312156112a757600080fd5b813567ffffffffffffffff8111156112be57600080fd5b82016101608185031215610a6157600080fd5b600060608284031280156112e457600080fd5b509092915050565b6000602082840312156112fe57600080fd5b5051919050565b60006020828403121561131757600080fd5b8151610a618161123c565b60006020828403121561133457600080fd5b8151610a61816111f1565b60006020828403121561135157600080fd5b8135610a618161123c565b6000808335601e1984360301811261137357600080fd5b83018035915067ffffffffffffffff82111561138e57600080fd5b6020019150368190038213156113a357600080fd5b9250929050565b6000815180845260005b818110156113d0576020818501810151868301820152016113b4565b506000602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152600060208301516101c060408401526114186101e08401826113aa565b90506040840151601f1984830301606085015261143582826113aa565b91505060608401516080840152608084015160a084015260a084015161146660c08501826001600160a01b03169052565b5060c084015160e084015260e084015161148c6101008501826001600160a01b03169052565b506101008401516101208401526101208401516114ae61014085018215159052565b506101408401516101608401526101608401516114d76101808501826001600160a01b03169052565b506101808401516001600160a01b0381166101a0850152506101a08401516001600160a01b0381166101c0850152509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061154a60408301868861150d565b828103602084015261155d81858761150d565b979650505050505050565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135611593816111f1565b61159d8183611568565b5060208201356115ac816111f1565b6115b98160018401611568565b5060408201356115c8816111f1565b6115d58160028401611568565b505050565b6060810182356115e9816111f1565b6001600160a01b031682526020830135611602816111f1565b6001600160a01b03166020830152604083013561161e816111f1565b6001600160a01b03166040929092019190915291905056fe6101a060405262127500608052683635c9adc5dea0000060a05261271060c0526a52b7d2dcc80cd2e400000060e0526b033b2e3c9fd0803ce8000000610100526002805460ff60a01b1916604b60a01b17905534801561005e57600080fd5b5060405161479a38038061479a83398101604081905261007d91610609565b60a08101516001600160a01b0381166100b057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100b981610499565b506001805580516000036100e057604051632d47cb8f60e11b815260040160405180910390fd5b4281606001511161010457604051631da7447960e21b815260040160405180910390fd5b806060015181608001511161012c576040516302a0464f60e51b815260040160405180910390fd5b8061014001516000036101525760405163c195a09760e01b815260040160405180910390fd5b6101608101516001600160a01b031661017e5760405163e6c4247b60e01b815260040160405180910390fd5b6101808101516001600160a01b03166101aa5760405163e6c4247b60e01b815260040160405180910390fd5b80610120015180156101c857506101a08101516001600160a01b0316155b156101e65760405163e6c4247b60e01b815260040160405180910390fd5b610160808201516001600160a01b03908116610120526101808301518116610140526101a0830151169052602081015160119061022390826107d9565b50604081015160129061023690826107d9565b5080516005556060810151600755608081015160085560c0810151600a5560e0810151600380546001600160a01b0319166001600160a01b03909216919091179055610100810151600b55610120810151600d805460ff60a01b1916600160a01b92151583021790819055610140830151600c55336101805260ff91900416156102de5761016051600280546001600160a01b0319166001600160a01b039092169190911790555b60035460085460405163fddaec4960e01b8152735f6a682a58854c7fbe228712aeeffccde0008ac060048201526001600160a01b03909216602483015260448201527302f4192d064343a670e153e50f2c7a107101d6579063fddaec49906064016020604051808303816000875af115801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190610897565b600f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f4d034e7999b73c980126bf84dde16d9a4c8432586a8e50e56c93bb965f4b974b9060200160405180910390a160e081015160c082015160a0830151604051631b36797d60e31b81526001600160a01b03938416600482015260248101929092529190911660448201527302f4192d064343a670e153e50f2c7a107101d6579063d9b3cbe8906064016020604051808303816000875af115801561044f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104739190610897565b601080546001600160a01b0319166001600160a01b0392909216919091179055506108b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040516101c081016001600160401b0381118282101715610522576105226104e9565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610550576105506104e9565b604052919050565b600082601f83011261056957600080fd5b81516001600160401b03811115610582576105826104e9565b610595601f8201601f1916602001610528565b8181528460208386010111156105aa57600080fd5b60005b828110156105c9576020818601810151838301820152016105ad565b506000918101602001919091529392505050565b80516001600160a01b03811681146105f457600080fd5b919050565b805180151581146105f457600080fd5b60006020828403121561061b57600080fd5b81516001600160401b0381111561063157600080fd5b82016101c0818503121561064457600080fd5b61064c6104ff565b8151815260208201516001600160401b0381111561066957600080fd5b61067586828501610558565b60208301525060408201516001600160401b0381111561069457600080fd5b6106a086828501610558565b60408301525060608281015190820152608080830151908201526106c660a083016105dd565b60a082015260c082810151908201526106e160e083016105dd565b60e082015261010082810151908201526106fe61012083016105f9565b610120820152610140828101519082015261071c61016083016105dd565b61016082015261072f61018083016105dd565b6101808201526107426101a083016105dd565b6101a0820152949350505050565b600181811c9082168061076457607f821691505b60208210810361078457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156107d457806000526020600020601f840160051c810160208510156107b15750805b601f840160051c820191505b818110156107d157600081556001016107bd565b50505b505050565b81516001600160401b038111156107f2576107f26104e9565b610806816108008454610750565b8461078a565b6020601f82116001811461083a57600083156108225750848201515b600019600385901b1c1916600184901b1784556107d1565b600084815260208120601f198516915b8281101561086a578785015182556020948501946001909201910161084a565b50848210156108885786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156108a957600080fd5b6108b2826105dd565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051613e39610961600039600081816106f90152611392015260008181610419015281816110a90152818161116c0152818161211501526128ba01526000612cdd015260006112fb01526000818161172e01526127500152600081816126d10152612b8d015260008181612a330152612b5101526000612907015260006128e10152613e396000f3fe6080604052600436106102605760003560e01c806374c515ae11610144578063c1cbbca7116100b6578063d1e56e541161007a578063d1e56e5414610759578063d96290491461076e578063ed3655eb1461078c578063f0c5d549146107aa578063f2fde38b146107bf578063f4758686146107df57600080fd5b8063c1cbbca7146106bf578063c2b7d79f146106d2578063c45a0155146106e7578063c6e5546c1461071b578063d07f84821461073b57600080fd5b80638da5cb5b116101085780638da5cb5b14610622578063947fe8121461064057806395d89b41146106605780639f55029314610675578063bb2e37e51461068a578063c0b822d51461069f57600080fd5b806374c515ae1461058e57806375d8d68d146105ad5780638153f8f8146105c257806383694cf0146105e257806384d4875e1461060257600080fd5b80633f2ff8bd116101dd578063590e1ae3116101a1578063590e1ae3146104f257806364e9a9b61461050757806366a103681461051c5780636feae2b51461053a578063715018a61461055957806372e041a01461056e57600080fd5b80633f2ff8bd1461043d578063421aef3714610464578063541d45e71461049257806356e1b2cf146104a757806357fbcda5146104bc57600080fd5b80632109db59116102245780632109db59146103955780632b517d21146103b55780632ea44681146103ca5780633a008606146103ea5780633c2f07401461040a57600080fd5b806306fdde03146102aa578063150b7a02146102d55780631aadcf461461031a5780631af1a5021461034c5780631b8df5861461036c57600080fd5b366102a557600654610100900460ff1615801561027e575060075442105b80156102945750600d54600160a01b900460ff16155b156102a3576102a360006107f7565b005b600080fd5b3480156102b657600080fd5b506102bf610bb1565b6040516102cc91906132be565b60405180910390f35b3480156102e157600080fd5b506103016102f03660046132e6565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102cc565b34801561032657600080fd5b50600f546001600160a01b03165b6040516001600160a01b0390911681526020016102cc565b34801561035857600080fd5b506102a3610367366004613387565b610c3f565b34801561037857600080fd5b50600654610100900460ff165b60405190151581526020016102cc565b3480156103a157600080fd5b506102a36103b0366004613387565b610d08565b3480156103c157600080fd5b506102a3610ddd565b3480156103d657600080fd5b506102a36103e5366004613387565b610e89565b3480156103f657600080fd5b506102a3610405366004613387565b610f50565b34801561041657600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610334565b34801561044957600080fd5b507302f4192d064343a670e153e50f2c7a107101d657610334565b34801561047057600080fd5b5061048461047f3660046133a0565b611229565b6040519081526020016102cc565b34801561049e57600080fd5b50600854610484565b3480156104b357600080fd5b506102a3611390565b3480156104c857600080fd5b506104846104d73660046133a0565b6001600160a01b031660009081526016602052604090205490565b3480156104fe57600080fd5b506102a36115a5565b34801561051357600080fd5b50600754610484565b34801561052857600080fd5b50600d546001600160a01b0316610334565b34801561054657600080fd5b50600d54600160a01b900460ff16610385565b34801561056557600080fd5b506102a36116b2565b34801561057a57600080fd5b506102a36105893660046133cc565b6116c4565b34801561059a57600080fd5b50601054600160a01b900460ff16610385565b3480156105b957600080fd5b506102a36117b7565b3480156105ce57600080fd5b506102a36105dd366004613387565b611840565b3480156105ee57600080fd5b506102a36105fd366004613387565b6118a7565b34801561060e57600080fd5b506102a361061d366004613387565b6119f1565b34801561062e57600080fd5b506000546001600160a01b0316610334565b34801561064c57600080fd5b506102a361065b366004613459565b611a3a565b34801561066c57600080fd5b506102bf611be0565b34801561068157600080fd5b50600454610484565b34801561069657600080fd5b506102a3611bed565b3480156106ab57600080fd5b506102a36106ba366004613387565b612098565b6102a36106cd366004613387565b6107f7565b3480156106de57600080fd5b50600554610484565b3480156106f357600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b34801561072757600080fd5b506102a36107363660046134ff565b612225565b34801561074757600080fd5b506009546001600160a01b0316610334565b34801561076557600080fd5b50600c54610484565b34801561077a57600080fd5b506010546001600160a01b0316610334565b34801561079857600080fd5b50600e546001600160a01b0316610334565b3480156107b657600080fd5b50600b54610484565b3480156107cb57600080fd5b506102a36107da3660046133a0565b6123ad565b3480156107eb57600080fd5b5060065460ff16610385565b6107ff6123e8565b600654610100900460ff161561082857604051631df969b760e01b815260040160405180910390fd5b600754421061084a5760405163e478792360e01b815260040160405180910390fd5b600d54600090600160a01b900460ff16156108be57341561087d576040516248c6b960e61b815260040160405180910390fd5b8160000361089e5760405163363f1b5160e11b815260040160405180910390fd5b5060025481906108b9906001600160a01b0316333084612412565b610901565b346000036108df5760405163652122d960e01b815260040160405180910390fd5b81156108fe5760405163652122d960e01b815260040160405180910390fd5b50345b600a54156109d457601054604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa158015610951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109759190613521565b61099257604051630b094f2760e31b815260040160405180910390fd5b600a54336000908152601660205260409020546109b0908390613559565b11156109cf5760405163a6bd512160e01b815260040160405180910390fd5b610a20565b60006109df33611229565b3360009081526016602052604090205490915081906109ff908490613559565b1115610a1e5760405163613abeb360e11b815260040160405180910390fd5b505b600554600454829190610a34908390613559565b1115610abd57600454600554610a4a919061356c565b600d54909150600160a01b900460ff1615610a8557610a8033610a6d838561356c565b6002546001600160a01b0316919061247f565b610abd565b336108fc610a93838561356c565b6040518115909202916000818181858888f19350505050158015610abb573d6000803e3d6000fd5b505b336000908152601660205260408120549003610b1657601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b031916331790555b3360009081526016602052604081208054839290610b35908490613559565b925050819055508060046000828254610b4e9190613559565b909155505060405181815233907f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b9060200160405180910390a260055460045403610ba3576006805461ff0019166101001790555b5050610bae60018055565b50565b60118054610bbe9061357f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea9061357f565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b505050505081565b610c476124b5565b6008548111610c6957604051639ae7e6a760e01b815260040160405180910390fd5b6008819055600d54604051630d78d28160e11b8152600481018390526001600160a01b0390911690631af1a50290602401600060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050507f4e5dd36969507fae1e69607cd3b2492dafc0c3ae1bf1c50f921a5642847fa30981604051610cfd91815260200190565b60405180910390a150565b6000546001600160a01b03163314801590610d2e57506003546001600160a01b03163314155b15610d4c5760405163ea8e4eb560e01b815260040160405180910390fd5b600654610100900460ff1615610d7557604051631df969b760e01b815260040160405180910390fd5b6007548111610d975760405163d71c2da560e01b815260040160405180910390fd5b600780549082905560408051828152602081018490527fcf8355056cd2d0cfbb80a34af77420d1e6eceacc85186e561d75a1a210179a9191015b60405180910390a15050565b610de56123e8565b610ded6124b5565b600f546001600160a01b0316610e165760405163a86ab33d60e01b815260040160405180910390fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e6657600080fd5b505af1158015610e7a573d6000803e3d6000fd5b50505050610e8760018055565b565b610e916124b5565b60065460ff1615610eb557604051631c6cb8d360e21b815260040160405180910390fd5b80600003610ed657604051632d47cb8f60e11b815260040160405180910390fd5b600454811015610ef95760405163447f926160e01b815260040160405180910390fd5b60058054908290556004546006805461ff0019169184146101000291909117905560408051828152602081018490527f961c8b414cced5fba2600265359474975f844fcadb7ee9d50f7f9d19ff1711ea9101610dd1565b610f586123e8565b600854421015610f7b5760405163f6bc0a2960e01b815260040160405180910390fd5b80600003610f9c57604051636c8dbc8560e01b815260040160405180910390fd5b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110179190613521565b50600954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611062573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108691906135b9565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111491906135b9565b905060008261112383866135d2565b61112d91906135ff565b90508060000361115057604051637222ae5760e11b815260040160405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156111bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e19190613521565b50604080518581526020810183905233917f14a63150777b38b4fc5ed9116132ab2a2bc8357bbbc698378fd605b9eaa65907910160405180910390a2505050610bae60018055565b600a54600090156112d957601054604051633af32abf60e01b81526001600160a01b03848116600483015290911690633af32abf90602401602060405180830381865afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190613521565b6112ad5760006112d3565b6001600160a01b038216600090815260166020526040902054600a546112d3919061356c565b92915050565b6040516326d352ab60e11b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690634da6a55690602401602060405180830381865afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136891906135b9565b90506000600c548261137a91906135ff565b905061138881600b546124e2565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190613631565b6001600160a01b0316336001600160a01b0316146114435760405163ea8e4eb560e01b815260040160405180910390fd5b60065460ff16156114675760405163475a253560e01b815260040160405180910390fd5b600d54600160a01b900460ff161561150b576002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e691906135b9565b90508015610bae57600354600254610bae916001600160a01b0391821691168361247f565b6003546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611558576040519150601f19603f3d011682016040523d82523d6000602084013e61155d565b606091505b5050905080610bae5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b6115ad6123e8565b600654610100900460ff16156115d657604051630b4d698160e01b815260040160405180910390fd5b60075442116115f857604051630b4d698160e01b815260040160405180910390fd5b336000908152601660205260408120549003611627576040516307e3a5c760e01b815260040160405180910390fd5b3360009081526016602052604081208054919055600d54600160a01b900460ff161561166957600254611664906001600160a01b0316338361247f565b611673565b61167333826124f5565b60405181815233907fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d9060200160405180910390a250610e8760018055565b6116ba6124b5565b610e876000612593565b6116cc6124b5565b600654610100900460ff166116f4576040516378c754c960e01b815260040160405180910390fd5b60065460ff16156117185760405163475a253560e01b815260040160405180910390fd5b6000611723826125e3565b60045490915061175b7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006135d2565b61176591906135ff565b6015556117718161282a565b61177c8185856129e9565b604051600181527fe64f408051437053caebc2ec8b10a45148f5acee3a6922908871b997f80d335d906020015b60405180910390a150505050565b6117bf6123e8565b6117c76124b5565b600f546001600160a01b03166117f05760405163a86ab33d60e01b815260040160405180910390fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663c4c77bda6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e6657600080fd5b6118486124b5565b806000036118695760405163c195a09760e01b815260040160405180910390fd5b600c80549082905560408051828152602081018490527f290cd4e7df75ba05266ada6bd18ad0cf12aa3ff31e30c6af92166d26c27e267e9101610dd1565b6118af6123e8565b6118b76124b5565b600f546001600160a01b03166118e05760405163a86ab33d60e01b815260040160405180910390fd5b611900735f6a682a58854c7fbe228712aeeffccde0008ac0333084612412565b600f5460405163095ea7b360e01b81526001600160a01b03909116600482015260248101829052735f6a682a58854c7fbe228712aeeffccde0008ac09063095ea7b3906044016020604051808303816000875af1158015611965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119899190613521565b50600f5460405163083694cf60e41b8152600481018390526001600160a01b03909116906383694cf090602401600060405180830381600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b50505050610bae60018055565b6000546001600160a01b03163314801590611a1757506003546001600160a01b03163314155b15611a355760405163ea8e4eb560e01b815260040160405180910390fd5b600b55565b611a426124b5565b60065460ff16611a6557604051633e79acbd60e11b815260040160405180910390fd5b8483141580611a745750828114155b15611a9257604051636ed7379360e11b815260040160405180910390fd5b60005b85811015611bd7576000878783818110611ab157611ab161364e565b9050602002016020810190611ac691906133a0565b6001600160a01b031603611aed5760405163e6c4247b60e01b815260040160405180910390fd5b6000878783818110611b0157611b0161364e565b9050602002016020810190611b1691906133a0565b6001600160a01b0316848484818110611b3157611b3161364e565b90506020020135878785818110611b4a57611b4a61364e565b9050602002810190611b5c9190613664565b604051611b6a9291906136ab565b60006040518083038185875af1925050503d8060008114611ba7576040519150601f19603f3d011682016040523d82523d6000602084013e611bac565b606091505b5050905080611bce57604051632b3f6d1160e21b815260040160405180910390fd5b50600101611a95565b50505050505050565b60128054610bbe9061357f565b611bf56123e8565b611bfd6124b5565b600854421015611c20576040516360c1868d60e01b815260040160405180910390fd5b601054600160a01b900460ff1615611c4b576040516356968a7d60e11b815260040160405180910390fd5b600d54604051632614965760e21b81527303a520b32c04bf3beef7beb72e919cf822ed34f160048201526000916001600160a01b031690639852595c90602401602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc91906135b9565b9050600d60009054906101000a90046001600160a01b03166001600160a01b03166386d1a69f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d1e57600080fd5b505af1158015611d32573d6000803e3d6000fd5b505060405163133f757160e31b815260048101849052600092507303a520b32c04bf3beef7beb72e919cf822ed34f191506399fbab889060240161018060405180830381865afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae91906136f0565b50506040805160a0810182528d81526001600160801b038086166020830190815260008385018181526060850182815242608087019081529651630624e65f60e11b815295516004870152925190931660248501529151604484015251606483015291516084820152939b5099508998507303a520b32c04bf3beef7beb72e919cf822ed34f19750630c49ccbe96505060a49091019350611e4e92505050565b60408051808303816000875af1158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9091906137d2565b6040805160808101825287815230602082019081526001600160801b0382840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b031660248401529051811660448301529151909116606482015291935091507303a520b32c04bf3beef7beb72e919cf822ed34f19063fc6f78659060840160408051808303816000875af1158015611f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5691906137d2565b50506040516370a0823160e01b8152306004820152600090735f6a682a58854c7fbe228712aeeffccde0008ac0906370a0823190602401602060405180830381865afa158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce91906135b9565b604051630852cd8d60e31b815260048101829052909150735f6a682a58854c7fbe228712aeeffccde0008ac0906342966c6890602401600060405180830381600087803b15801561201e57600080fd5b505af1158015612032573d6000803e3d6000fd5b50506010805460ff60a01b1916600160a01b179055505060408051868152602081018590529081018390527fdf0c1a545ab645f93aa68abd4aa321caaf9091cc92b18e72bd3d385cbaba62719060600160405180910390a15050505050610e8760018055565b6120a06123e8565b6120a86124b5565b60065460ff166120cb57604051633e79acbd60e11b815260040160405180910390fd5b806000036120ec5760405163652122d960e01b815260040160405180910390fd5b600e5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015612160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121849190613521565b50600e54604051633243c79160e01b8152600481018390526001600160a01b0390911690633243c79190602401600060405180830381600087803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b505050507f918fcd597d13a672fda40edda9e86974522c0ddc44dc9668870a37d8e9456a0e8160405161221491815260200190565b60405180910390a1610bae60018055565b61222d6123e8565b60065460ff1661225057604051633e79acbd60e11b815260040160405180910390fd5b6015546000036122735760405163438fb48f60e11b815260040160405180910390fd5b6013548210612295576040516392c4425960e01b815260040160405180910390fd5b6013548111156122a457506013545b8082106122c4576040516392f1b43560e01b815260040160405180910390fd5b6009546001600160a01b0316825b8281101561239e576000601382815481106122ef576122ef61364e565b60009182526020808320909101546001600160a01b0316808352601490915260409091205490915060ff16612395576015546001600160a01b0382166000908152601660205260408120549091670de0b6b3a76400009161235091906135d2565b61235a91906135ff565b90506123706001600160a01b038516838361247f565b506001600160a01b0381166000908152601460205260409020805460ff191660011790555b506001016122d2565b50506123a960018055565b5050565b6123b56124b5565b6001600160a01b0381166123df57604051631e4fbdf760e01b81526000600482015260240161159c565b610bae81612593565b60026001540361240b57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526124799186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612ed7565b50505050565b6040516001600160a01b038381166024830152604482018390526124b091859182169063a9059cbb90606401612447565b505050565b6000546001600160a01b03163314610e875760405163118cdaa760e01b815233600482015260240161159c565b60008282188284100282185b9392505050565b8047101561251f5760405163cf47918160e01b81524760048201526024810182905260440161159c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461256c576040519150601f19603f3d011682016040523d82523d6000602084013e612571565b606091505b50509050806124b05760405163d6bda27560e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405163bef8de1f60e01b815260009081907302f4192d064343a670e153e50f2c7a107101d6579063bef8de1f90612625906011906012908890600401613899565b6020604051808303816000875af1158015612644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126689190613631565b600980546001600160a01b0319166001600160a01b038316908117909155909150735f6a682a58854c7fbe228712aeeffccde0008ac0116126bc57604051631b97c67d60e21b815260040160405180910390fd5b6040516340c10f1960e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015281906001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561272557600080fd5b505af1158015612739573d6000803e3d6000fd5b50506040516340c10f1960e01b81523060048201527f000000000000000000000000000000000000000000000000000000000000000060248201526001600160a01b03841692506340c10f199150604401600060405180830381600087803b1580156127a457600080fd5b505af11580156127b8573d6000803e3d6000fd5b50506006805460ff191660011790555050604080516338a80c5360e11b815290516001600160a01b0383169163715018a691600480830192600092919082900301818387803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b50939695505050505050565b60007302f4192d064343a670e153e50f2c7a107101d6576001600160a01b031663aded63bb6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a49190613631565b604080516001600160a01b0385811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201527f000000000000000000000000000000000000000000000000000000000000000060648201527f00000000000000000000000000000000000000000000000000000000000000006084808301919091528251808303909101815260a490910182526020810180516001600160e01b031663eb990c5960e01b179052905191925090600090839083906129709061326b565b61297b9291906138cf565b604051809103906000f080158015612997573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0383169081179091556040519081529091507faf264c47e57edc70c48b9909cc631216bca721afc6cc9b5a3c1489731b1523b4906020016117a9565b60006129f78360020b612f48565b60405163a167129560e01b81526001600160a01b0386166004820152735f6a682a58854c7fbe228712aeeffccde0008ac0602482015262ffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201529091506000907333128a8fc17869897dce68ed026d694621f6fdfd9063a1671295906064016020604051808303816000875af1158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190613631565b60405163f637731d60e01b81526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505060408051610160810182526001600160a01b038916808252735f6a682a58854c7fbe228712aeeffccde0008ac060208301527f000000000000000000000000000000000000000000000000000000000000000062ffffff1682840152600289810b606084015288900b60808301527f000000000000000000000000000000000000000000000000000000000000000060a08301819052600060c0840181905260e084018190526101008401523061012084015242610140840152925163095ea7b360e01b81527303a520b32c04bf3beef7beb72e919cf822ed34f160048201526024810193909352909350915063095ea7b3906044016020604051808303816000875af1158015612c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c569190613521565b50604051634418b22b60e11b81526000907303a520b32c04bf3beef7beb72e919cf822ed34f190638831645690612c919085906004016138f3565b6080604051808303816000875af1158015612cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd491906139b7565b505050905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166376b5c47d7303a520b32c04bf3beef7beb72e919cf822ed34f1612d316000546001600160a01b031690565b6008546002546040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015267ffffffffffffffff1660448301526064820186905260ff600160a01b9091041660848201523060a482015260c4016020604051808303816000875af1158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd69190613631565b604051632142170760e11b81523060048201526001600160a01b0382166024820152604481018490529091507303a520b32c04bf3beef7beb72e919cf822ed34f1906342842e0e90606401600060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b50506040516367a4d1c360e01b8152600481018590526001600160a01b03841692506367a4d1c39150602401600060405180830381600087803b158015612e9557600080fd5b505af1158015612ea9573d6000803e3d6000fd5b5050600d80546001600160a01b0319166001600160a01b039490941693909317909255505050505050505050565b600080602060008451602086016000885af180612efa576040513d6000823e3d81fd5b50506000513d91508115612f12578060011415612f1f565b6001600160a01b0384163b155b1561247957604051635274afe760e01b81526001600160a01b038516600482015260240161159c565b60008060008360020b12612f5f578260020b612f67565b8260020b6000035b9050620d89e8811115612f8d576040516315e4079d60e11b815260040160405180910390fd5b600081600116600003612fa457600160801b612fb6565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612fea576ffff97272373d413259a46990580e213a0260801c5b6004821615613009576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613028576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613047576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613066576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613085576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156130a4576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156130c4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156130e4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613104576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613124576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613144576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613164576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613184576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156131a4576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156131c5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156131e5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613204576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613221576b048a170391f7dc42444e8fa20260801c5b60008460020b131561324257806000198161323e5761323e6135e9565b0490505b640100000000810615613256576001613259565b60005b60ff16602082901c0192505050919050565b610410806139f483390190565b6000815180845260005b8181101561329e57602081850181015186830182015201613282565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006124ee6020830184613278565b6001600160a01b0381168114610bae57600080fd5b6000806000806000608086880312156132fe57600080fd5b8535613309816132d1565b94506020860135613319816132d1565b935060408601359250606086013567ffffffffffffffff81111561333c57600080fd5b8601601f8101881361334d57600080fd5b803567ffffffffffffffff81111561336457600080fd5b88602082840101111561337657600080fd5b959894975092955050506020019190565b60006020828403121561339957600080fd5b5035919050565b6000602082840312156133b257600080fd5b81356124ee816132d1565b8060020b8114610bae57600080fd5b6000806000606084860312156133e157600080fd5b83356133ec816133bd565b925060208401356133fc816133bd565b929592945050506040919091013590565b60008083601f84011261341f57600080fd5b50813567ffffffffffffffff81111561343757600080fd5b6020830191508360208260051b850101111561345257600080fd5b9250929050565b6000806000806000806060878903121561347257600080fd5b863567ffffffffffffffff81111561348957600080fd5b61349589828a0161340d565b909750955050602087013567ffffffffffffffff8111156134b557600080fd5b6134c189828a0161340d565b909550935050604087013567ffffffffffffffff8111156134e157600080fd5b6134ed89828a0161340d565b979a9699509497509295939492505050565b6000806040838503121561351257600080fd5b50508035926020909101359150565b60006020828403121561353357600080fd5b815180151581146124ee57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d3576112d3613543565b818103818111156112d3576112d3613543565b600181811c9082168061359357607f821691505b6020821081036135b357634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156135cb57600080fd5b5051919050565b80820281158282048414176112d3576112d3613543565b634e487b7160e01b600052601260045260246000fd5b60008261361c57634e487b7160e01b600052601260045260246000fd5b500490565b805161362c816132d1565b919050565b60006020828403121561364357600080fd5b81516124ee816132d1565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261367b57600080fd5b83018035915067ffffffffffffffff82111561369657600080fd5b60200191503681900382131561345257600080fd5b8183823760009101908152919050565b805162ffffff8116811461362c57600080fd5b805161362c816133bd565b80516001600160801b038116811461362c57600080fd5b6000806000806000806000806000806000806101808d8f03121561371357600080fd5b8c516bffffffffffffffffffffffff8116811461372f57600080fd5b9b5061373d60208e01613621565b9a5061374b60408e01613621565b995061375960608e01613621565b985061376760808e016136bb565b975061377560a08e016136ce565b965061378360c08e016136ce565b955061379160e08e016136d9565b6101008e01516101208f0151919650945092506137b16101408e016136d9565b91506137c06101608e016136d9565b90509295989b509295989b509295989b565b600080604083850312156137e557600080fd5b505080516020909101519092909150565b8054600090600181811c9082168061380f57607f821691505b60208210810361382f57634e487b7160e01b600052602260045260246000fd5b8186526020860181801561384a57600181146138605761388e565b60ff198516825283151560051b8201955061388e565b60008781526020902060005b858110156138885781548482015260019091019060200161386c565b83019650505b505050505092915050565b6060815260006138ac60608301866137f6565b82810360208401526138be81866137f6565b915050826040830152949350505050565b6001600160a01b038316815260406020820181905260009061138890830184613278565b81516001600160a01b031681526101608101602083015161391f60208401826001600160a01b03169052565b506040830151613936604084018262ffffff169052565b50606083015161394b606084018260020b9052565b506080830151613960608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516139a76101208401826001600160a01b03169052565b5061014092830151919092015290565b600080600080608085870312156139cd57600080fd5b845193506139dd602086016136d9565b604086015160609096015194979096509250505056fe608060405260405161041038038061041083398101604081905261002291610268565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b919061033c565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b038111156102ae57600080fd5b8301601f810185136102bf57600080fd5b80516001600160401b038111156102d8576102d861022e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103065761030661022e565b60405281815282820160200187101561031e57600080fd5b61032f826020830160208601610244565b8093505050509250929050565b6000825161034e818460208701610244565b9190910192915050565b60aa806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220895836049ed480c681c888260368f90f4f79205ca8ba845060b12e032777b92864736f6c634300081c0033a264697066735822122095af662052ba03c0e782dfdeececb10b276c52d06f49180f00bb356c1babe4fc64736f6c634300081c0033a264697066735822122025565a854c616879d855e9a56b0d589dbe39e585f36ed847c965ec10160434bd64736f6c634300081c003300000000000000000000000058230e0c6918a018a28bf97185eff02c2edeb860000000000000000000000000ad5b6c09a4edabb2c1be1ff4ab98ea59c4071fff000000000000000000000000255fb6c2854a48f6ddedf508d57450b143e2c60100000000000000000000000002f4192d064343a670e153e50f2c7a107101d6570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000