0x608060405234801561000f575f80fd5b506119708061001d5f395ff3fe6080604052600436106100e4575f3560e01c80638bcb6216116100875780639864dcdd116100575780639864dcdd1461028c578063c579d490146102a0578063d3c2e7ed146102bf578063f24ccbfe146102d3575f80fd5b80638bcb6216146101d15780638cedca71146101e55780638df50f741461020c5780639093410d1461022d575f80fd5b80632fa13cb8116100c25780632fa13cb814610156578063389f87ff1461016957806341c0e1b51461017e5780637b10399914610192575f80fd5b80630f2eee42146100e85780631c451ceb14610113578063247492f814610142575b5f80fd5b3480156100f3575f80fd5b506100fc608081565b60405160ff90911681526020015b60405180910390f35b34801561011e575f80fd5b5061013261012d366004611345565b6102fa565b604051901515815260200161010a565b34801561014d575f80fd5b506100fc610395565b348015610161575f80fd5b506100fc5f81565b61017c61017736600461143b565b61039e565b005b348015610189575f80fd5b5061017c61043a565b34801561019d575f80fd5b506101b973287778f121f134c66212fb16c9b53ec991d32f5b81565b6040516001600160a01b03909116815260200161010a565b3480156101dc575f80fd5b506100fc600181565b3480156101f0575f80fd5b506101b973ccf3d848e08b94478ed8f46ffead3008faf581fd81565b61021f61021a3660046114fc565b6104fb565b60405190815260200161010a565b348015610238575f80fd5b5061024c61024736600461143b565b61064d565b6040805182516001600160a01b0390811682526020808501518216908301528383015116918101919091526060918201519181019190915260800161010a565b348015610297575f80fd5b506100fc607f81565b3480156102ab575f80fd5b5061017c6102ba366004611601565b610682565b3480156102ca575f80fd5b506100fc60ff81565b3480156102de575f80fd5b506101b973ce7a977cac4a481bc84ac06b2da0df614e621cf381565b6040517f297103880000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f9073a26e15c895efc0616177b7c1e7270a4c7d51c99790632971038890602401602060405180830381865afa15801561036b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061038f919061163f565b92915050565b5f60015b905090565b5f6103a88261064d565b90505f6103b4826107b6565b6040517ff4b24b5500000000000000000000000000000000000000000000000000000000815290925073ce7a977cac4a481bc84ac06b2da0df614e621cf3915063f4b24b55906104089084906004016116ab565b5f604051808303815f87803b15801561041f575f80fd5b505af1158015610431573d5f803e3d5ffd5b50505050505050565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610494573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b891906116f1565b6001600160a01b0316146104f8576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b5f806105068661064d565b9050610530815f0151855f815181106105215761052161170c565b60200260200101518786610b0a565b6001600160a01b031681526020810151845161055a9190869060019081106105215761052161170c565b6001600160a01b03166020820152604081015184516105879190869060029081106105215761052161170c565b6001600160a01b03166040820152606081015184516105c39190869060039081106105b4576105b461170c565b60200260200101518786610bb0565b60608201525f806105d3836107b6565b6040517f4c6971756974795632436c6f736500000000000000000000000000000000000081529193509150600e0160405180910390207f2b6d22f419271bcc89bbac8deec947c664365d6e24d06fef0ca7c325c704dce3826040516106389190611720565b60405180910390a2509150505b949350505050565b604080516080810182525f808252602080830182905292820181905260608201528251909161038f9184018101908401611732565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070091906116f1565b6001600160a01b031614610740576040517f19494c8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0361079d576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610797573d5f803e3d5ffd5b50505050565b6107b16001600160a01b0384168383610bf6565b505050565b5f60605f835f01516001600160a01b03166331b8c9466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081d91906116f1565b90505f845f01516001600160a01b03166377553ad46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906116f1565b90505f855f01516001600160a01b0316633d83908a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e991906116f1565b90505f816001600160a01b031663aad3f40488606001516040518263ffffffff1660e01b815260040161091e91815260200190565b61014060405180830381865afa15801561093a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095e91906117ae565b602088015181519192506109889173b01dd87b29d187f3e3a4bf6cdaebfb97f3d9ab989190610c9f565b5060608701516040517f5aa6d46100000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03841690635aa6d461906024015f604051808303815f87803b1580156109e7575f80fd5b505af11580156109f9573d5f803e3d5ffd5b5050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316846001600160a01b031603610a6057610a5a876040015166853a0d2313c0008360200151610a499190611847565b6001600160a01b0387169190610d2b565b50610aad565b6040870151610a8c9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29066853a0d2313c000610d2b565b5060408701516020820151610aab916001600160a01b03871691610d2b565b505b602080820151604080518a516001600160a01b0390811682860152938b0151841681830152908a015190921660608084019190915289015160808301529060a0016040516020818303038152906040529550955050505050915091565b5f60ff841615610ba757610b1d84610e5c565b15610b515781610b2c85610e7a565b60ff1681518110610b3f57610b3f61170c565b602002602001015160601c9450610ba7565b8360ff1660fe03610b63575030610645565b8360ff1660ff03610b7d57610b76610ec5565b9050610645565b82610b8785610fc9565b60ff1681518110610b9a57610b9a61170c565b60200260200101515f1c94505b50929392505050565b5f60ff841615610ba757610bc384610e5c565b15610b7d5781610bd285610e7a565b60ff1681518110610be557610be561170c565b60200260200101515f1c9450610ba7565b6040516001600160a01b0383166024820152604481018290526107b19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611013565b5f5f198203610cb557610cb284846110f9565b91505b6001600160a01b03831615801590610cd657506001600160a01b0383163014155b8015610cff57506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015610d0a57508115155b15610d2457610d246001600160a01b0385168430856111c3565b5092915050565b5f5f198203610d4157610d3e84306110f9565b91505b6001600160a01b03831615801590610d6257506001600160a01b0383163014155b8015610d6d57508115155b15610d24576001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610daf57610daa6001600160a01b0385168484610bf6565b610d24565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114610df8576040519150601f19603f3d011682016040523d82523d5f602084013e610dfd565b606091505b5050905080610e535760405162461bcd60e51b815260206004820152600d60248201527f4574682073656e64206661696c0000000000000000000000000000000000000060448201526064015b60405180910390fd5b50909392505050565b5f600160ff83161080159061038f5750607f60ff8316111592915050565b5f610e8482610e5c565b610eba576040517fdcc95a3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038f60018361185a565b5f610ecf306102fa565b15610f3457306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f10573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039991906116f1565b5f306001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610f70573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f979190810190611873565b90508051600114610fa85730610fc3565b805f81518110610fba57610fba61170c565b60200260200101515b91505090565b5f608060ff83161015611008576040517f866f6e8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038f60808361185a565b5f611067826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112149092919063ffffffff16565b905080515f1480611087575080806020019051810190611087919061163f565b6107b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e4a565b5f7fffffffffffffffffffffffff11111111111111111111111111111111111111126001600160a01b0384160161113b57506001600160a01b0381163161038f565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015611198573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc9190611908565b9392505050565b6040516001600160a01b03808516602483015283166044820152606481018290526107979085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610c3b565b606061064584845f856060611228856112f6565b61125e576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80866001600160a01b03168587604051611279919061191f565b5f6040518083038185875af1925050503d805f81146112b3576040519150601f19603f3d011682016040523d82523d5f602084013e6112b8565b606091505b509150915081156112cc5791506106459050565b8051156112dc5780518082602001fd5b8360405162461bcd60e51b8152600401610e4a9190611720565b5f813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610645575050151592915050565b6001600160a01b0381168114611342575f80fd5b50565b5f60208284031215611355575f80fd5b81356111bc8161132e565b634e487b7160e01b5f52604160045260245ffd5b604051610140810167ffffffffffffffff8111828210171561139857611398611360565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113c7576113c7611360565b604052919050565b5f82601f8301126113de575f80fd5b813567ffffffffffffffff8111156113f8576113f8611360565b61140b601f8201601f191660200161139e565b81815284602083860101111561141f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561144b575f80fd5b813567ffffffffffffffff811115611461575f80fd5b610645848285016113cf565b5f67ffffffffffffffff82111561148657611486611360565b5060051b60200190565b5f82601f83011261149f575f80fd5b813560206114b46114af8361146d565b61139e565b8083825260208201915060208460051b8701019350868411156114d5575f80fd5b602086015b848110156114f157803583529183019183016114da565b509695505050505050565b5f805f806080858703121561150f575f80fd5b843567ffffffffffffffff80821115611526575f80fd5b611532888389016113cf565b9550602091508187013581811115611548575f80fd5b61155489828a01611490565b955050604087013581811115611568575f80fd5b8701601f81018913611578575f80fd5b80356115866114af8261146d565b81815260059190911b8201840190848101908b8311156115a4575f80fd5b928501925b828410156115d057833560ff811681146115c1575f80fd5b825292850192908501906115a9565b965050505060608701359150808211156115e8575f80fd5b506115f587828801611490565b91505092959194509250565b5f805f60608486031215611613575f80fd5b833561161e8161132e565b9250602084013561162e8161132e565b929592945050506040919091013590565b5f6020828403121561164f575f80fd5b815180151581146111bc575f80fd5b5f5b83811015611678578181015183820152602001611660565b50505f910152565b5f815180845261169781602086016020860161165e565b601f01601f19169290920160200192915050565b60408152600e60408201527f4c6971756974795632436c6f73650000000000000000000000000000000000006060820152608060208201525f6111bc6080830184611680565b5f60208284031215611701575f80fd5b81516111bc8161132e565b634e487b7160e01b5f52603260045260245ffd5b602081525f6111bc6020830184611680565b5f60808284031215611742575f80fd5b6040516080810181811067ffffffffffffffff8211171561176557611765611360565b60405282516117738161132e565b815260208301516117838161132e565b602082015260408301516117968161132e565b60408201526060928301519281019290925250919050565b5f61014082840312156117bf575f80fd5b6117c7611374565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152508091505092915050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038f5761038f611833565b60ff828116828216039081111561038f5761038f611833565b5f6020808385031215611884575f80fd5b825167ffffffffffffffff81111561189a575f80fd5b8301601f810185136118aa575f80fd5b80516118b86114af8261146d565b81815260059190911b820183019083810190878311156118d6575f80fd5b928401925b828410156118fd5783516118ee8161132e565b825292840192908401906118db565b979650505050505050565b5f60208284031215611918575f80fd5b5051919050565b5f825161193081846020870161165e565b919091019291505056fea26469706673582212205d60137a0fa86790df6d557d3766207f692020144e81d3927c9c4ab00593ede664736f6c63430008180033