60806040523480156200001157600080fd5b5060405162001acf38038062001acf8339810160408190526200003491620001b0565b604080518082018252600e81526d4379626f6e69782044726f6e657360901b602080830191825283518085019094526005845264434244373560d81b90840152815191929162000087916002916200010a565b5080516200009d9060039060208401906200010a565b50506000805550620000af33620000b8565b600a5562000207565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011890620001ca565b90600052602060002090601f0160209004810192826200013c576000855562000187565b82601f106200015757805160ff191683800117855562000187565b8280016001018555821562000187579182015b82811115620001875782518255916020019190600101906200016a565b506200019592915062000199565b5090565b5b808211156200019557600081556001016200019a565b600060208284031215620001c357600080fd5b5051919050565b600181811c90821680620001df57607f821691505b602082108114156200020157634e487b7160e01b600052602260045260246000fd5b50919050565b6118b880620002176000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde14610269578063bc63f02e1461027c578063c87b56dd1461028f578063e985e9c5146102a2578063f2fde38b146102de57600080fd5b806370a0823114610222578063715018a6146102355780638da5cb5b1461023d57806395d89b411461024e578063a22cb4651461025657600080fd5b806318160ddd116100f457806318160ddd146101c057806323b872dd146101d657806342842e0e146101e957806355f804b3146101fc5780636352211e1461020f57600080fd5b806206eda61461013057806301ffc9a71461014557806306fdde031461016d578063081812fc14610182578063095ea7b3146101ad575b600080fd5b61014361013e366004611341565b6102f1565b005b610158610153366004611404565b610419565b60405190151581526020015b60405180910390f35b61017561046b565b6040516101649190611479565b61019561019036600461148c565b6104fd565b6040516001600160a01b039091168152602001610164565b6101436101bb3660046114a5565b610541565b600154600054035b604051908152602001610164565b6101436101e43660046114cf565b6105cf565b6101436101f73660046114cf565b6105da565b61014361020a366004611563565b6105f5565b61019561021d36600461148c565b610632565b6101c86102303660046115ac565b610644565b610143610693565b6008546001600160a01b0316610195565b6101756106c9565b6101436102643660046115c7565b6106d8565b610143610277366004611603565b61076e565b61014361028a36600461167f565b6107bf565b61017561029d36600461148c565b6108ea565b6101586102b03660046116ab565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6101436102ec3660046115ac565b6109b6565b6008546001600160a01b031633146103245760405162461bcd60e51b815260040161031b906116d5565b60405180910390fd5b600081511180156103385750600a54815111155b6103755760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b7bab73a1760911b604482015260640161031b565b600a5481516001546000540361038b9190611720565b11156103d35760405162461bcd60e51b815260206004820152601760248201527622bc31b2b2b234b7339039bab838363c9031b7bab73a1760491b604482015260640161031b565b60005b81518110156104155761040360018383815181106103f6576103f6611738565b60200260200101516107bf565b8061040d8161174e565b9150506103d6565b5050565b60006001600160e01b031982166380ac58cd60e01b148061044a57506001600160e01b03198216635b5e139f60e01b145b8061046557506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461047a90611769565b80601f01602080910402602001604051908101604052809291908181526020018280546104a690611769565b80156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b5050505050905090565b600061050882610a51565b610525576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061054c82610632565b9050806001600160a01b0316836001600160a01b031614156105815760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906105a1575061059f81336102b0565b155b156105bf576040516367d9dca160e11b815260040160405180910390fd5b6105ca838383610a7c565b505050565b6105ca838383610ad8565b6105ca8383836040518060200160405280600081525061076e565b6008546001600160a01b0316331461061f5760405162461bcd60e51b815260040161031b906116d5565b8051610415906009906020840190611245565b600061063d82610cee565b5192915050565b60006001600160a01b03821661066d576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146106bd5760405162461bcd60e51b815260040161031b906116d5565b6106c76000610e0a565b565b60606003805461047a90611769565b6001600160a01b0382163314156107025760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610779848484610ad8565b6001600160a01b0383163b1515801561079b575061079984848484610e5c565b155b156107b9576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b031633146107e95760405162461bcd60e51b815260040161031b906116d5565b6000821180156107fb5750600a548211155b6108385760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b7bab73a1760911b604482015260640161031b565b600a54826108496001546000540390565b6108539190611720565b111561089b5760405162461bcd60e51b815260206004820152601760248201527622bc31b2b2b234b7339039bab838363c9031b7bab73a1760491b604482015260640161031b565b6108a58183610f45565b604080518381526001600160a01b03831660208201527f3031b4e39802153eb391daba4ee473af14716aecae6f711094e1cfa5b2133d7a910160405180910390a15050565b60606108f582610a51565b6109595760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161031b565b6000610963610f5f565b905080516000141561098457604051806020016040528060008152506109af565b8061098e84610f6e565b60405160200161099f9291906117a4565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146109e05760405162461bcd60e51b815260040161031b906116d5565b6001600160a01b038116610a455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031b565b610a4e81610e0a565b50565b6000805482108015610465575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610ae382610cee565b80519091506000906001600160a01b0316336001600160a01b03161480610b1157508151610b1190336102b0565b80610b2c575033610b21846104fd565b6001600160a01b0316145b905080610b4c57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614610b815760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416610ba857604051633a954ecd60e21b815260040160405180910390fd5b610bb86000848460000151610a7c565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116610ca457600054811015610ca4578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b604080516060810182526000808252602082018190529181019190915281600054811015610df157600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610def5780516001600160a01b031615610d85579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215610dea579392505050565b610d85565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610e919033908990889088906004016117d3565b6020604051808303816000875af1925050508015610ecc575060408051601f3d908101601f19168201909252610ec991810190611810565b60015b610f27573d808015610efa576040519150601f19603f3d011682016040523d82523d6000602084013e610eff565b606091505b508051610f1f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b61041582826040518060200160405280600081525061106c565b60606009805461047a90611769565b606081610f925750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fbc5780610fa68161174e565b9150610fb59050600a83611843565b9150610f96565b60008167ffffffffffffffff811115610fd757610fd76112de565b6040519080825280601f01601f191660200182016040528015611001576020820181803683370190505b5090505b8415610f3d57611016600183611857565b9150611023600a8661186e565b61102e906030611720565b60f81b81838151811061104357611043611738565b60200101906001600160f81b031916908160001a905350611065600a86611843565b9450611005565b6105ca83838360016000546001600160a01b03851661109d57604051622e076360e81b815260040160405180910390fd5b836110bb5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561116d57506001600160a01b0387163b15155b156111f6575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46111be6000888480600101955088610e5c565b6111db576040516368d2bf6b60e11b815260040160405180910390fd5b808214156111735782600054146111f157600080fd5b61123c565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156111f7575b50600055610ce7565b82805461125190611769565b90600052602060002090601f01602090048101928261127357600085556112b9565b82601f1061128c57805160ff19168380011785556112b9565b828001600101855582156112b9579182015b828111156112b957825182559160200191906001019061129e565b506112c59291506112c9565b5090565b5b808211156112c557600081556001016112ca565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561131d5761131d6112de565b604052919050565b80356001600160a01b038116811461133c57600080fd5b919050565b6000602080838503121561135457600080fd5b823567ffffffffffffffff8082111561136c57600080fd5b818501915085601f83011261138057600080fd5b813581811115611392576113926112de565b8060051b91506113a38483016112f4565b81815291830184019184810190888411156113bd57600080fd5b938501935b838510156113e2576113d385611325565b825293850193908501906113c2565b98975050505050505050565b6001600160e01b031981168114610a4e57600080fd5b60006020828403121561141657600080fd5b81356109af816113ee565b60005b8381101561143c578181015183820152602001611424565b838111156107b95750506000910152565b60008151808452611465816020860160208601611421565b601f01601f19169290920160200192915050565b6020815260006109af602083018461144d565b60006020828403121561149e57600080fd5b5035919050565b600080604083850312156114b857600080fd5b6114c183611325565b946020939093013593505050565b6000806000606084860312156114e457600080fd5b6114ed84611325565b92506114fb60208501611325565b9150604084013590509250925092565b600067ffffffffffffffff831115611525576115256112de565b611538601f8401601f19166020016112f4565b905082815283838301111561154c57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561157557600080fd5b813567ffffffffffffffff81111561158c57600080fd5b8201601f8101841361159d57600080fd5b610f3d8482356020840161150b565b6000602082840312156115be57600080fd5b6109af82611325565b600080604083850312156115da57600080fd5b6115e383611325565b9150602083013580151581146115f857600080fd5b809150509250929050565b6000806000806080858703121561161957600080fd5b61162285611325565b935061163060208601611325565b925060408501359150606085013567ffffffffffffffff81111561165357600080fd5b8501601f8101871361166457600080fd5b6116738782356020840161150b565b91505092959194509250565b6000806040838503121561169257600080fd5b823591506116a260208401611325565b90509250929050565b600080604083850312156116be57600080fd5b6116c783611325565b91506116a260208401611325565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117335761173361170a565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156117625761176261170a565b5060010190565b600181811c9082168061177d57607f821691505b6020821081141561179e57634e487b7160e01b600052602260045260246000fd5b50919050565b600083516117b6818460208801611421565b8351908301906117ca818360208801611421565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118069083018461144d565b9695505050505050565b60006020828403121561182257600080fd5b81516109af816113ee565b634e487b7160e01b600052601260045260246000fd5b6000826118525761185261182d565b500490565b6000828210156118695761186961170a565b500390565b60008261187d5761187d61182d565b50069056fea26469706673582212209d9cd6c2543e981598a0c61af3554a5adb6c255d6c510b9cc89f533f2040552964736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004b