FeeSharingSystem
Deploy on AlchemyContract Information
Explore the source code, ABI, and bytecode for the FeeSharingSystem smart contract.
More Info
[{"inputs":[{"internalType":"address","name":"_x2y2Token","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_tokenDistributor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numberBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"NewRewardPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_UPDATE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculatePendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateSharePriceInX2Y2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateSharesValueInX2Y2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardAdjustment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"rewardDurationInBlocks","type":"uint256"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"userRewardPerTokenPaid","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"x2y2Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
[{"inputs":[{"internalType":"address","name":"_x2y2Token","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_tokenDistributor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numberBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"NewRewardPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestedAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_UPDATE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculatePendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateSharePriceInX2Y2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateSharesValueInX2Y2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardAdjustment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"rewardDurationInBlocks","type":"uint256"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"userRewardPerTokenPaid","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimRewardToken","type":"bool"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"x2y2Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
60e06040523480156200001157600080fd5b506040516200243a3803806200243a83398101604081905262000034916200010f565b600160009081556001600160a01b0380841660a052848116608052821660c05262000060903362000069565b50505062000159565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620000ee5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b80516001600160a01b03811681146200010a57600080fd5b919050565b6000806000606084860312156200012557600080fd5b6200013084620000f2565b92506200014060208501620000f2565b91506200015060408501620000f2565b90509250925092565b60805160a05160c05161220962000231600039600081816101ed015281816104e401528181610588015281816106f301528181610787015281816108cd0152818161090701528181610b3001528181610def01528181610e830152818161102a015281816110640152818161114a015281816111ee01528181611346015281816113da01526114c501526000818161042901528181610c2f01528181610ff501526115640152600081816104020152818161080c01528181610f08015281816115a0015281816117c5015261185f01526122096000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c80634641257d116100e4578063a9f8d18111610092578063a9f8d181146103ae578063cb4aec61146103b6578063ccd34cd5146103bf578063d547741f146103ce578063df136d65146103e1578063e098bd4b146103ea578063ebde5ee6146103fd578063f7c618c11461042457600080fd5b80634641257d146103355780635b0680f61461033d57806391d148541461036457806397e50818146103775780639a4083211461038a578063a217fddf1461039d578063a218141b146103a557600080fd5b80632f2ff15d1161014c5780632f2ff15d146102a75780632f4f21e2146102ba578063353efdcf146102cd57806336568abe146102f457806338d07436146103075780633a98ef391461031a57806340d2abae14610323578063442da82f1461032c57600080fd5b806301ffc9a71461019f578063097aad10146101c757806318a6bc32146101e85780631959a0021461021c5780631c1c6fe514610266578063248a9ca31461027b57806326170c3c1461029f575b600080fd5b6101b26101ad366004611dc3565b61044b565b60405190151581526020015b60405180910390f35b6101da6101d5366004611e09565b610482565b6040519081526020016101be565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be9190611e24565b61024b61022a366004611e09565b60086020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101be565b610279610274366004611e49565b61048d565b005b6101da610289366004611e66565b6000908152600160208190526040909120015490565b6101da6104df565b6102796102b5366004611e7f565b610648565b6101b26102c8366004611eab565b610674565b6101da7f2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd238481565b610279610302366004611e7f565b6109c1565b610279610315366004611ed5565b610a3f565b6101da60075481565b6101da60035481565b6101da60055481565b610279610b03565b6101da7fd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b9681565b6101b2610372366004611e7f565b610c9b565b610279610385366004611f05565b610cc6565b610279610398366004611ed5565b610d9d565b6101da600081565b6101da60045481565b6101da61110f565b6101da60025481565b6101da670de0b6b3a764000081565b6102796103dc366004611e7f565b61111e565b6101da60065481565b6101da6103f8366004611e09565b611145565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216637965db0b60e01b148061047c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061047c826112ce565b600260005414156104b95760405162461bcd60e51b81526004016104b090611f27565b60405180910390fd5b60026000908155338152600860205260409020546104d79082611344565b506001600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631959a002306040518263ffffffff1660e01b815260040161052e9190611e24565b6040805180830381865afa15801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190611f5e565b506040516297aad160e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063097aad10906105bd903090600401611e24565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe9190611f82565b6106089082611fb1565b905060075460001461063857600754610629670de0b6b3a764000083611fc9565b6106339190611fe8565b610642565b670de0b6b3a76400005b91505090565b600082815260016020819052604090912001546106658133611609565b61066f838361166d565b505050565b6000600260005414156106995760405162461bcd60e51b81526004016104b090611f27565b60026000557f2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd23846106c98133611609565b670de0b6b3a76400008310156106f15760405162461bcd60e51b81526004016104b09061200a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561074c57600080fd5b505af1158015610760573d6000803e3d6000fd5b5050505061076d846116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a002906107bc903090600401611e24565b6040805180830381865afa1580156107d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc9190611f5e565b5090506108346001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308761172d565b600060075460001461087d57816007548661084f9190611fc9565b6108599190611fe8565b9050806108785760405162461bcd60e51b81526004016104b09061204b565b610880565b50835b6001600160a01b038616600090815260086020526040812080548392906108a8908490611fb1565b9250508190555080600760008282546108c19190611fb1565b909155506108f19050857f000000000000000000000000000000000000000000000000000000000000000061179e565b60405163b6b55f2560e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b505060408051888152600060208201526001600160a01b038a1693507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1592500160405180910390a260019350505050600160005592915050565b6001600160a01b0381163314610a315760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104b0565b610a3b82826118cc565b5050565b60026000541415610a625760405162461bcd60e51b81526004016104b090611f27565b60026000558115801590610a855750336000908152600860205260409020548211155b610af05760405162461bcd60e51b815260206004820152603660248201527f57697468647261773a2053686172657320657175616c20746f2030206f72206c6044820152756172676572207468616e20757365722073686172657360501b60648201526084016104b0565b610afa8282611344565b50506001600055565b60026000541415610b265760405162461bcd60e51b81526004016104b090611f27565b60026000819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b8957600080fd5b505af1158015610b9d573d6000803e3d6000fd5b50505050610baa336116d8565b3360009081526008602052604090206002015480610c165760405162461bcd60e51b8152602060048201526024808201527f486172766573743a2050656e64696e672072657761726473206d7573742062656044820152630203e20360e41b60648201526084016104b0565b33600081815260086020526040812060020155610c5e907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b60405181815233907fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba9060200160405180910390a2506001600055565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7fd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96610cf18133611609565b6005544310610d0c57610d048284611fe8565b600255610d40565b8160025443600554610d1e9190612072565b610d289190611fc9565b610d329085611fb1565b610d3c9190611fe8565b6002555b436004819055610d51908390611fb1565b60055560025460408051848152602081019290925281018490527f55b4fa63fe43865f67b4f2c4a4df1cf9e6c1f85767211b44b45cf4649b2c2b519060600160405180910390a1505050565b60026000541415610dc05760405162461bcd60e51b81526004016104b090611f27565b6002600055670de0b6b3a7640000821015610ded5760405162461bcd60e51b81526004016104b09061200a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4857600080fd5b505af1158015610e5c573d6000803e3d6000fd5b50505050610e69336116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a00290610eb8903090600401611e24565b6040805180830381865afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190611f5e565b509050610f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661172d565b6000600754600014610f79578160075485610f4b9190611fc9565b610f559190611fe8565b905080610f745760405162461bcd60e51b81526004016104b09061204b565b610f7c565b50825b3360009081526008602052604081208054839290610f9b908490611fb1565b925050819055508060076000828254610fb49190611fb1565b9091555060009050831561102457503360009081526008602052604090206002015480156110245733600081815260086020526040812060020155611024907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b61104e857f000000000000000000000000000000000000000000000000000000000000000061179e565b60405163b6b55f2560e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b1580156110b057600080fd5b505af11580156110c4573d6000803e3d6000fd5b505060408051888152602081018590523393507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1592500160405180910390a250506001600055505050565b6000611119611963565b905090565b6000828152600160208190526040909120015461113b8133611609565b61066f83836118cc565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631959a002306040518263ffffffff1660e01b81526004016111949190611e24565b6040805180830381865afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190611f5e565b506040516297aad160e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063097aad1090611223903090600401611e24565b602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112649190611f82565b61126e9082611fb1565b6001600160a01b038416600090815260086020526040902054909150156112c4576007546001600160a01b0384166000908152600860205260409020546112b59083611fc9565b6112bf9190611fe8565b6112c7565b60005b9392505050565b6001600160a01b03811660009081526008602052604081206002810154600190910154670de0b6b3a76400009061130361197a565b61130d9190612072565b6001600160a01b0385166000908152600860205260409020546113309190611fc9565b61133a9190611fe8565b61047c9190611fb1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561139f57600080fd5b505af11580156113b3573d6000803e3d6000fd5b505050506113c0336116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a0029061140f903090600401611e24565b6040805180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190611f5e565b509050600060075484836114639190611fc9565b61146d9190611fe8565b33600090815260086020526040812080549293508692909190611491908490612072565b9250508190555083600760008282546114aa9190612072565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506000831561159357503360009081526008602052604090206002015480156115935733600081815260086020526040812060020155611593907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b6115c76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611933565b604080518381526020810183905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a25050505050565b6116138282610c9b565b610a3b5761162b816001600160a01b031660146119dd565b6116368360206119dd565b6040516020016116479291906120b5565b60408051601f198184030181529082905262461bcd60e51b82526104b091600401612124565b6116778282610c9b565b610a3b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60045443146116f8576116e961197a565b6006556116f4611963565b6004555b611701816112ce565b6001600160a01b0390911660009081526008602052604090206002810191909155600654600190910155565b6040516001600160a01b03808516602483015283166044820152606481018290526117989085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b79565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118329190611f82565b1015610a3b5760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190612157565b6118d68282610c9b565b15610a3b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516001600160a01b03831660248201526044810182905261066f90849063a9059cbb60e01b90606401611761565b60006005544310611975575060055490565b504390565b60006007546000141561198e575060065490565b600754670de0b6b3a76400006002546119a79190611fc9565b6004546119b2611963565b6119bc9190612072565b6119c69190611fc9565b6119d09190611fe8565b6006546111199190611fb1565b606060006119ec836002611fc9565b6119f7906002611fb1565b67ffffffffffffffff811115611a0f57611a0f612174565b6040519080825280601f01601f191660200182016040528015611a39576020820181803683370190505b509050600360fc1b81600081518110611a5457611a5461218a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a8357611a8361218a565b60200101906001600160f81b031916908160001a9053506000611aa7846002611fc9565b611ab2906001611fb1565b90505b6001811115611b2a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ae657611ae661218a565b1a60f81b828281518110611afc57611afc61218a565b60200101906001600160f81b031916908160001a90535060049490941c93611b23816121a0565b9050611ab5565b5083156112c75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104b0565b6000611bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c4b9092919063ffffffff16565b80519091501561066f5780806020019051810190611bec9190612157565b61066f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b0565b6060611c5a8484600085611c62565b949350505050565b606082471015611cc35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104b0565b843b611d115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b0565b600080866001600160a01b03168587604051611d2d91906121b7565b60006040518083038185875af1925050503d8060008114611d6a576040519150601f19603f3d011682016040523d82523d6000602084013e611d6f565b606091505b5091509150611d7f828286611d8a565b979650505050505050565b60608315611d995750816112c7565b825115611da95782518084602001fd5b8160405162461bcd60e51b81526004016104b09190612124565b600060208284031215611dd557600080fd5b81356001600160e01b0319811681146112c757600080fd5b80356001600160a01b0381168114611e0457600080fd5b919050565b600060208284031215611e1b57600080fd5b6112c782611ded565b6001600160a01b0391909116815260200190565b8015158114611e4657600080fd5b50565b600060208284031215611e5b57600080fd5b81356112c781611e38565b600060208284031215611e7857600080fd5b5035919050565b60008060408385031215611e9257600080fd5b82359150611ea260208401611ded565b90509250929050565b60008060408385031215611ebe57600080fd5b611ec783611ded565b946020939093013593505050565b60008060408385031215611ee857600080fd5b823591506020830135611efa81611e38565b809150509250929050565b60008060408385031215611f1857600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008060408385031215611f7157600080fd5b505080516020909101519092909150565b600060208284031215611f9457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611fc457611fc4611f9b565b500190565b6000816000190483118215151615611fe357611fe3611f9b565b500290565b60008261200557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526021908201527f4465706f7369743a20416d6f756e74206d757374206265203e3d2031205832596040820152601960f91b606082015260800190565b6020808252600d908201526c11195c1bdcda5d0e8811985a5b609a1b604082015260600190565b60008282101561208457612084611f9b565b500390565b60005b838110156120a457818101518382015260200161208c565b838111156117985750506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516120e7816017850160208801612089565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612118816028840160208801612089565b01602801949350505050565b6020815260008251806020840152612143816040850160208701612089565b601f01601f19169190910160400192915050565b60006020828403121561216957600080fd5b81516112c781611e38565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816121af576121af611f9b565b506000190190565b600082516121c9818460208701612089565b919091019291505056fea2646970667358221220d2868886c428cc429818127a9a43a60dd6f8c0c39093dfe63a21359a8263681f64736f6c634300080b00330000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
60e06040523480156200001157600080fd5b506040516200243a3803806200243a83398101604081905262000034916200010f565b600160009081556001600160a01b0380841660a052848116608052821660c05262000060903362000069565b50505062000159565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620000ee5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b80516001600160a01b03811681146200010a57600080fd5b919050565b6000806000606084860312156200012557600080fd5b6200013084620000f2565b92506200014060208501620000f2565b91506200015060408501620000f2565b90509250925092565b60805160a05160c05161220962000231600039600081816101ed015281816104e401528181610588015281816106f301528181610787015281816108cd0152818161090701528181610b3001528181610def01528181610e830152818161102a015281816110640152818161114a015281816111ee01528181611346015281816113da01526114c501526000818161042901528181610c2f01528181610ff501526115640152600081816104020152818161080c01528181610f08015281816115a0015281816117c5015261185f01526122096000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c80634641257d116100e4578063a9f8d18111610092578063a9f8d181146103ae578063cb4aec61146103b6578063ccd34cd5146103bf578063d547741f146103ce578063df136d65146103e1578063e098bd4b146103ea578063ebde5ee6146103fd578063f7c618c11461042457600080fd5b80634641257d146103355780635b0680f61461033d57806391d148541461036457806397e50818146103775780639a4083211461038a578063a217fddf1461039d578063a218141b146103a557600080fd5b80632f2ff15d1161014c5780632f2ff15d146102a75780632f4f21e2146102ba578063353efdcf146102cd57806336568abe146102f457806338d07436146103075780633a98ef391461031a57806340d2abae14610323578063442da82f1461032c57600080fd5b806301ffc9a71461019f578063097aad10146101c757806318a6bc32146101e85780631959a0021461021c5780631c1c6fe514610266578063248a9ca31461027b57806326170c3c1461029f575b600080fd5b6101b26101ad366004611dc3565b61044b565b60405190151581526020015b60405180910390f35b6101da6101d5366004611e09565b610482565b6040519081526020016101be565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be9190611e24565b61024b61022a366004611e09565b60086020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101be565b610279610274366004611e49565b61048d565b005b6101da610289366004611e66565b6000908152600160208190526040909120015490565b6101da6104df565b6102796102b5366004611e7f565b610648565b6101b26102c8366004611eab565b610674565b6101da7f2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd238481565b610279610302366004611e7f565b6109c1565b610279610315366004611ed5565b610a3f565b6101da60075481565b6101da60035481565b6101da60055481565b610279610b03565b6101da7fd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b9681565b6101b2610372366004611e7f565b610c9b565b610279610385366004611f05565b610cc6565b610279610398366004611ed5565b610d9d565b6101da600081565b6101da60045481565b6101da61110f565b6101da60025481565b6101da670de0b6b3a764000081565b6102796103dc366004611e7f565b61111e565b6101da60065481565b6101da6103f8366004611e09565b611145565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216637965db0b60e01b148061047c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061047c826112ce565b600260005414156104b95760405162461bcd60e51b81526004016104b090611f27565b60405180910390fd5b60026000908155338152600860205260409020546104d79082611344565b506001600055565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631959a002306040518263ffffffff1660e01b815260040161052e9190611e24565b6040805180830381865afa15801561054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056e9190611f5e565b506040516297aad160e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063097aad10906105bd903090600401611e24565b602060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fe9190611f82565b6106089082611fb1565b905060075460001461063857600754610629670de0b6b3a764000083611fc9565b6106339190611fe8565b610642565b670de0b6b3a76400005b91505090565b600082815260016020819052604090912001546106658133611609565b61066f838361166d565b505050565b6000600260005414156106995760405162461bcd60e51b81526004016104b090611f27565b60026000557f2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd23846106c98133611609565b670de0b6b3a76400008310156106f15760405162461bcd60e51b81526004016104b09061200a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561074c57600080fd5b505af1158015610760573d6000803e3d6000fd5b5050505061076d846116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a002906107bc903090600401611e24565b6040805180830381865afa1580156107d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc9190611f5e565b5090506108346001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308761172d565b600060075460001461087d57816007548661084f9190611fc9565b6108599190611fe8565b9050806108785760405162461bcd60e51b81526004016104b09061204b565b610880565b50835b6001600160a01b038616600090815260086020526040812080548392906108a8908490611fb1565b9250508190555080600760008282546108c19190611fb1565b909155506108f19050857f000000000000000000000000000000000000000000000000000000000000000061179e565b60405163b6b55f2560e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b505060408051888152600060208201526001600160a01b038a1693507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1592500160405180910390a260019350505050600160005592915050565b6001600160a01b0381163314610a315760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104b0565b610a3b82826118cc565b5050565b60026000541415610a625760405162461bcd60e51b81526004016104b090611f27565b60026000558115801590610a855750336000908152600860205260409020548211155b610af05760405162461bcd60e51b815260206004820152603660248201527f57697468647261773a2053686172657320657175616c20746f2030206f72206c6044820152756172676572207468616e20757365722073686172657360501b60648201526084016104b0565b610afa8282611344565b50506001600055565b60026000541415610b265760405162461bcd60e51b81526004016104b090611f27565b60026000819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b8957600080fd5b505af1158015610b9d573d6000803e3d6000fd5b50505050610baa336116d8565b3360009081526008602052604090206002015480610c165760405162461bcd60e51b8152602060048201526024808201527f486172766573743a2050656e64696e672072657761726473206d7573742062656044820152630203e20360e41b60648201526084016104b0565b33600081815260086020526040812060020155610c5e907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b60405181815233907fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba9060200160405180910390a2506001600055565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7fd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96610cf18133611609565b6005544310610d0c57610d048284611fe8565b600255610d40565b8160025443600554610d1e9190612072565b610d289190611fc9565b610d329085611fb1565b610d3c9190611fe8565b6002555b436004819055610d51908390611fb1565b60055560025460408051848152602081019290925281018490527f55b4fa63fe43865f67b4f2c4a4df1cf9e6c1f85767211b44b45cf4649b2c2b519060600160405180910390a1505050565b60026000541415610dc05760405162461bcd60e51b81526004016104b090611f27565b6002600055670de0b6b3a7640000821015610ded5760405162461bcd60e51b81526004016104b09061200a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4857600080fd5b505af1158015610e5c573d6000803e3d6000fd5b50505050610e69336116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a00290610eb8903090600401611e24565b6040805180830381865afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190611f5e565b509050610f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661172d565b6000600754600014610f79578160075485610f4b9190611fc9565b610f559190611fe8565b905080610f745760405162461bcd60e51b81526004016104b09061204b565b610f7c565b50825b3360009081526008602052604081208054839290610f9b908490611fb1565b925050819055508060076000828254610fb49190611fb1565b9091555060009050831561102457503360009081526008602052604090206002015480156110245733600081815260086020526040812060020155611024907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b61104e857f000000000000000000000000000000000000000000000000000000000000000061179e565b60405163b6b55f2560e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b1580156110b057600080fd5b505af11580156110c4573d6000803e3d6000fd5b505060408051888152602081018590523393507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1592500160405180910390a250506001600055505050565b6000611119611963565b905090565b6000828152600160208190526040909120015461113b8133611609565b61066f83836118cc565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631959a002306040518263ffffffff1660e01b81526004016111949190611e24565b6040805180830381865afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190611f5e565b506040516297aad160e41b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063097aad1090611223903090600401611e24565b602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112649190611f82565b61126e9082611fb1565b6001600160a01b038416600090815260086020526040902054909150156112c4576007546001600160a01b0384166000908152600860205260409020546112b59083611fc9565b6112bf9190611fe8565b6112c7565b60005b9392505050565b6001600160a01b03811660009081526008602052604081206002810154600190910154670de0b6b3a76400009061130361197a565b61130d9190612072565b6001600160a01b0385166000908152600860205260409020546113309190611fc9565b61133a9190611fe8565b61047c9190611fb1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a4e051b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561139f57600080fd5b505af11580156113b3573d6000803e3d6000fd5b505050506113c0336116d8565b604051630cacd00160e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631959a0029061140f903090600401611e24565b6040805180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190611f5e565b509050600060075484836114639190611fc9565b61146d9190611fe8565b33600090815260086020526040812080549293508692909190611491908490612072565b9250508190555083600760008282546114aa9190612072565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506000831561159357503360009081526008602052604090206002015480156115935733600081815260086020526040812060020155611593907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083611933565b6115c76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611933565b604080518381526020810183905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a25050505050565b6116138282610c9b565b610a3b5761162b816001600160a01b031660146119dd565b6116368360206119dd565b6040516020016116479291906120b5565b60408051601f198184030181529082905262461bcd60e51b82526104b091600401612124565b6116778282610c9b565b610a3b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60045443146116f8576116e961197a565b6006556116f4611963565b6004555b611701816112ce565b6001600160a01b0390911660009081526008602052604090206002810191909155600654600190910155565b6040516001600160a01b03808516602483015283166044820152606481018290526117989085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b79565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118329190611f82565b1015610a3b5760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190612157565b6118d68282610c9b565b15610a3b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516001600160a01b03831660248201526044810182905261066f90849063a9059cbb60e01b90606401611761565b60006005544310611975575060055490565b504390565b60006007546000141561198e575060065490565b600754670de0b6b3a76400006002546119a79190611fc9565b6004546119b2611963565b6119bc9190612072565b6119c69190611fc9565b6119d09190611fe8565b6006546111199190611fb1565b606060006119ec836002611fc9565b6119f7906002611fb1565b67ffffffffffffffff811115611a0f57611a0f612174565b6040519080825280601f01601f191660200182016040528015611a39576020820181803683370190505b509050600360fc1b81600081518110611a5457611a5461218a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a8357611a8361218a565b60200101906001600160f81b031916908160001a9053506000611aa7846002611fc9565b611ab2906001611fb1565b90505b6001811115611b2a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ae657611ae661218a565b1a60f81b828281518110611afc57611afc61218a565b60200101906001600160f81b031916908160001a90535060049490941c93611b23816121a0565b9050611ab5565b5083156112c75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104b0565b6000611bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c4b9092919063ffffffff16565b80519091501561066f5780806020019051810190611bec9190612157565b61066f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b0565b6060611c5a8484600085611c62565b949350505050565b606082471015611cc35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104b0565b843b611d115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b0565b600080866001600160a01b03168587604051611d2d91906121b7565b60006040518083038185875af1925050503d8060008114611d6a576040519150601f19603f3d011682016040523d82523d6000602084013e611d6f565b606091505b5091509150611d7f828286611d8a565b979650505050505050565b60608315611d995750816112c7565b825115611da95782518084602001fd5b8160405162461bcd60e51b81526004016104b09190612124565b600060208284031215611dd557600080fd5b81356001600160e01b0319811681146112c757600080fd5b80356001600160a01b0381168114611e0457600080fd5b919050565b600060208284031215611e1b57600080fd5b6112c782611ded565b6001600160a01b0391909116815260200190565b8015158114611e4657600080fd5b50565b600060208284031215611e5b57600080fd5b81356112c781611e38565b600060208284031215611e7857600080fd5b5035919050565b60008060408385031215611e9257600080fd5b82359150611ea260208401611ded565b90509250929050565b60008060408385031215611ebe57600080fd5b611ec783611ded565b946020939093013593505050565b60008060408385031215611ee857600080fd5b823591506020830135611efa81611e38565b809150509250929050565b60008060408385031215611f1857600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008060408385031215611f7157600080fd5b505080516020909101519092909150565b600060208284031215611f9457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611fc457611fc4611f9b565b500190565b6000816000190483118215151615611fe357611fe3611f9b565b500290565b60008261200557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526021908201527f4465706f7369743a20416d6f756e74206d757374206265203e3d2031205832596040820152601960f91b606082015260800190565b6020808252600d908201526c11195c1bdcda5d0e8811985a5b609a1b604082015260600190565b60008282101561208457612084611f9b565b500390565b60005b838110156120a457818101518382015260200161208c565b838111156117985750506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516120e7816017850160208801612089565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612118816028840160208801612089565b01602801949350505050565b6020815260008251806020840152612143816040850160208701612089565b601f01601f19169190910160400192915050565b60006020828403121561216957600080fd5b81516112c781611e38565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816121af576121af611f9b565b506000190190565b600082516121c9818460208701612089565b919091019291505056fea2646970667358221220d2868886c428cc429818127a9a43a60dd6f8c0c39093dfe63a21359a8263681f64736f6c634300080b00330000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1