0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c80630b8f7951146100bf5780631f110479146100e85780632c129b56146100fd578063715018a61461013f5780638da5cb5b146101475780639735b0e31461014f578063a766a39214610162578063a8c640aa1461019b578063ac6ff1de146101d8578063b307ecd0146101eb578063c4d66de8146101fe578063d0e9dd6414610211578063d941357f14610224578063f2fde38b1461024c575b600080fd5b6065546100d2906001600160a01b031681565b6040516100df9190611beb565b60405180910390f35b6100fb6100f6366004611a6a565b61025f565b005b61012c61010b3660046119a8565b606660209081526000928352604080842090915290825290205461ffff1681565b60405161ffff90911681526020016100df565b6100fb610861565b6100d261089c565b6100fb61015d3660046119a8565b6108ab565b610175610170366004611ae9565b610a8b565b604080518251151581526020928301516001600160a01b031692810192909252016100df565b61012c6101a93660046119a8565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205461ffff1690565b6100fb6101e6366004611970565b610bdc565b6100fb6101f9366004611a2a565b610cb4565b6100fb61020c366004611970565b61105d565b6100fb61021f366004611a6a565b6110f6565b6102376102323660046119e0565b611601565b60405163ffffffff90911681526020016100df565b6100fb61025a366004611970565b6116c1565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e5919061198c565b6001600160a01b0316336001600160a01b03161461031e5760405162461bcd60e51b815260040161031590611cd2565b60405180910390fd5b846001600160a01b03166316317c216040518163ffffffff1660e01b815260040160206040518083038186803b15801561035757600080fd5b505afa15801561036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038f9190611bd3565b8314801561039c57508281145b6103b85760405162461bcd60e51b815260040161031590611c18565b6000856001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b919061198c565b6001600160a01b0316632eb9ae696040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561046557600080fd5b505af1158015610479573d6000803e3d6000fd5b5050505060005b84811015610664576000876001600160a01b0316632353eba18888858181106104b957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906104ce9190611970565b6040518263ffffffff1660e01b81526004016104ea9190611beb565b604080518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190611b1f565b9150506001600160a01b0381166105a15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204e6f2073706563696669656420746f6b656e20696e20706f7260448201526574666f6c696f60d01b6064820152608401610315565b8484838181106105c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906105d69190611bb1565b6001600160a01b038981166000908152606660209081526040808320938616835292905220805461ffff191661ffff9290921691909117905584848381811061062f57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106449190611bb1565b61064e9084611d25565b925050808061065c90611dc9565b915050610480565b5061ffff8116612710146106b75760405162461bcd60e51b815260206004820152601a6024820152794552524f523a20496e76616c696420776569676874732073756d60301b6044820152606401610315565b60005b84811015610858576000876001600160a01b0316632353eba18888858181106106f357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906107089190611970565b6040518263ffffffff1660e01b81526004016107249190611beb565b604080518083038186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190611b1f565b915050876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156107af57600080fd5b505afa1580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e7919061198c565b6001600160a01b0316638331e0c4826040518263ffffffff1660e01b81526004016108129190611beb565b600060405180830381600087803b15801561082c57600080fd5b505af1158015610840573d6000803e3d6000fd5b5050505050808061085090611dc9565b9150506106ba565b50505050505050565b3361086a61089c565b6001600160a01b0316146108905760405162461bcd60e51b815260040161031590611c9d565b61089a6000611761565b565b6033546001600160a01b031690565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610931919061198c565b6001600160a01b0316336001600160a01b0316146109615760405162461bcd60e51b815260040161031590611cd2565b604051632353eba160e01b81526000906001600160a01b03831690632353eba190610990908690600401611beb565b604080518083038186803b1580156109a757600080fd5b505afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190611b1f565b9150506001600160a01b038116610a315760405162461bcd60e51b81526020600482015260166024820152754552524f523a20496e76616c6964207265736572766560501b6044820152606401610315565b6040516304021b7f60e51b81526001600160a01b038316906380436fe090610a5d908690600401611beb565b600060405180830381600087803b158015610a7757600080fd5b505af1158015610858573d6000803e3d6000fd5b6040805180820190915260008082526020820152606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b25919061198c565b6001600160a01b0316336001600160a01b031614610b555760405162461bcd60e51b815260040161031590611cd2565b60405163af81c5b960e01b81526001600160a01b0383169063af81c5b990610b839087908790600401611bff565b6040805180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190611b4a565b949350505050565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c62919061198c565b6001600160a01b0316336001600160a01b031614610c925760405162461bcd60e51b815260040161031590611cd2565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0257600080fd5b505afa158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a919061198c565b6001600160a01b0316336001600160a01b031614610d6a5760405162461bcd60e51b815260040161031590611cd2565b604051632353eba160e01b81526000906001600160a01b03851690632353eba190610d99908690600401611beb565b604080518083038186803b158015610db057600080fd5b505afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190611b1f565b915050836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2457600080fd5b505afa158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c919061198c565b6001600160a01b0316635e1720e0826040518263ffffffff1660e01b8152600401610e879190611beb565b600060405180830381600087803b158015610ea157600080fd5b505af1158015610eb5573d6000803e3d6000fd5b50505050836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2a919061198c565b6001600160a01b031663ba4ee1e782846040518363ffffffff1660e01b8152600401610f57929190611bff565b600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b50505050836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc257600080fd5b505afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa919061198c565b6001600160a01b0316638331e0c4826040518263ffffffff1660e01b81526004016110259190611beb565b600060405180830381600087803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b5050505050505050565b600054610100900460ff1680611076575060005460ff16155b6110925760405162461bcd60e51b815260040161031590611c4f565b600054610100900460ff161580156110bd576000805460ff1961ff0019909116610100171660011790555b6110c56117b3565b606580546001600160a01b0319166001600160a01b03841617905580156110f2576000805461ff00191690555b5050565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117c919061198c565b6001600160a01b0316336001600160a01b0316146111ac5760405162461bcd60e51b815260040161031590611cd2565b8083146111cb5760405162461bcd60e51b815260040161031590611c18565b846001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561120457600080fd5b505afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c919061198c565b6001600160a01b0316632eb9ae696040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b5050505060005b83811015611457576000866001600160a01b0316632353eba18787858181106112ca57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906112df9190611970565b6040518263ffffffff1660e01b81526004016112fb9190611beb565b604080518083038186803b15801561131257600080fd5b505afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611b1f565b915050866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561138657600080fd5b505afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be919061198c565b6001600160a01b031663ba4ee1e7828686868181106113ed57634e487b7160e01b600052603260045260246000fd5b905060200201356040518363ffffffff1660e01b8152600401611411929190611bff565b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b5050505050808061144f90611dc9565b915050611291565b5060005b838110156115f9576000866001600160a01b0316632353eba187878581811061149457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114a99190611970565b6040518263ffffffff1660e01b81526004016114c59190611beb565b604080518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115149190611b1f565b915050866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561155057600080fd5b505afa158015611564573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611588919061198c565b6001600160a01b0316638331e0c4826040518263ffffffff1660e01b81526004016115b39190611beb565b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505050505080806115f190611dc9565b91505061145b565b505050505050565b6001600160a01b03808416600090815260666020908152604080832093851683529290529081205461ffff16612710141561163f57506127106116ba565b6001600160a01b038085166000908152606660209081526040808320938616835292905220546116759061ffff16612710611da6565b6001600160a01b0380861660009081526066602090815260408083209388168352929052205461ffff918216916116b0916127109116611d7a565b610bd49190611d4b565b9392505050565b336116ca61089c565b6001600160a01b0316146116f05760405162461bcd60e51b815260040161031590611c9d565b6001600160a01b0381166117555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610315565b61175e81611761565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16806117cc575060005460ff16155b6117e85760405162461bcd60e51b815260040161031590611c4f565b600054610100900460ff16158015611813576000805460ff1961ff0019909116610100171660011790555b61181b611837565b6118236118aa565b801561175e576000805461ff001916905550565b600054610100900460ff1680611850575060005460ff16155b61186c5760405162461bcd60e51b815260040161031590611c4f565b600054610100900460ff16158015611823576000805460ff1961ff001990911661010017166001179055801561175e576000805461ff001916905550565b600054610100900460ff16806118c3575060005460ff16155b6118df5760405162461bcd60e51b815260040161031590611c4f565b600054610100900460ff1615801561190a576000805460ff1961ff0019909116610100171660011790555b61182333611761565b60008083601f840112611924578182fd5b5081356001600160401b0381111561193a578182fd5b602083019150836020808302850101111561195457600080fd5b9250929050565b8051801515811461196b57600080fd5b919050565b600060208284031215611981578081fd5b81356116ba81611dfa565b60006020828403121561199d578081fd5b81516116ba81611dfa565b600080604083850312156119ba578081fd5b82356119c581611dfa565b915060208301356119d581611dfa565b809150509250929050565b6000806000606084860312156119f4578081fd5b83356119ff81611dfa565b92506020840135611a0f81611dfa565b91506040840135611a1f81611dfa565b809150509250925092565b600080600060608486031215611a3e578283fd5b8335611a4981611dfa565b92506020840135611a5981611dfa565b929592945050506040919091013590565b600080600080600060608688031215611a81578081fd5b8535611a8c81611dfa565b945060208601356001600160401b0380821115611aa7578283fd5b611ab389838a01611913565b90965094506040880135915080821115611acb578283fd5b50611ad888828901611913565b969995985093965092949392505050565b600080600060608486031215611afd578283fd5b8335611b0881611dfa565b9250602084013591506040840135611a1f81611dfa565b60008060408385031215611b31578182fd5b611b3a8361195b565b915060208301516119d581611dfa565b600060408284031215611b5b578081fd5b604080519081016001600160401b0381118282101715611b8957634e487b7160e01b83526041600452602483fd5b604052611b958361195b565b81526020830151611ba581611dfa565b60208201529392505050565b600060208284031215611bc2578081fd5b813561ffff811681146116ba578182fd5b600060208284031215611be4578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252601f908201527f4552524f523a20496e76616c696420706172616d657465727320636f756e7400604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4552524f523a204f6e6c7920676f7665726e6f722063616e2063616c6c20746860408201527234b99036b0b730b3b2b910333ab731ba34b7b760691b606082015260800190565b600061ffff808316818516808303821115611d4257611d42611de4565b01949350505050565b600063ffffffff80841680611d6e57634e487b7160e01b83526012600452602483fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611d9d57611d9d611de4565b02949350505050565b600061ffff83811690831681811015611dc157611dc1611de4565b039392505050565b6000600019821415611ddd57611ddd611de4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461175e57600080fdfea2646970667358221220204e9509cf20141757130f2628b5f824a4e71169c27a590492c181761b2f50d764736f6c63430008020033