0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c80630b8f7951146100bf5780631f110479146100e85780632c129b56146100fd578063715018a61461013f5780638da5cb5b146101475780639735b0e31461014f578063a766a39214610162578063a8c640aa1461019b578063ac6ff1de146101d8578063b307ecd0146101eb578063c4d66de8146101fe578063d0e9dd6414610211578063d941357f14610224578063f2fde38b1461024c575b600080fd5b6065546100d2906001600160a01b031681565b6040516100df91906117ea565b60405180910390f35b6100fb6100f6366004611669565b61025f565b005b61012c61010b3660046115a7565b606660209081526000928352604080842090915290825290205461ffff1681565b60405161ffff90911681526020016100df565b6100fb610861565b6100d261089c565b6100fb61015d3660046115a7565b6108ab565b6101756101703660046116e8565b610a8b565b604080518251151581526020928301516001600160a01b031692810192909252016100df565b61012c6101a93660046115a7565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205461ffff1690565b6100fb6101e636600461156f565b610bdc565b6100fb6101f9366004611629565b610cb4565b6100fb61020c36600461156f565b610ec1565b6100fb61021f366004611669565b610f5a565b6102376102323660046115df565b611200565b60405163ffffffff90911681526020016100df565b6100fb61025a36600461156f565b6112c0565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e5919061158b565b6001600160a01b0316336001600160a01b03161461031e5760405162461bcd60e51b8152600401610315906118d1565b60405180910390fd5b846001600160a01b03166316317c216040518163ffffffff1660e01b815260040160206040518083038186803b15801561035757600080fd5b505afa15801561036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038f91906117d2565b8314801561039c57508281145b6103b85760405162461bcd60e51b815260040161031590611817565b6000856001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b919061158b565b6001600160a01b0316632eb9ae696040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561046557600080fd5b505af1158015610479573d6000803e3d6000fd5b5050505060005b84811015610664576000876001600160a01b0316632353eba18888858181106104b957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906104ce919061156f565b6040518263ffffffff1660e01b81526004016104ea91906117ea565b604080518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610539919061171e565b9150506001600160a01b0381166105a15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204e6f2073706563696669656420746f6b656e20696e20706f7260448201526574666f6c696f60d01b6064820152608401610315565b8484838181106105c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906105d691906117b0565b6001600160a01b038981166000908152606660209081526040808320938616835292905220805461ffff191661ffff9290921691909117905584848381811061062f57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061064491906117b0565b61064e9084611924565b925050808061065c906119c8565b915050610480565b5061ffff8116612710146106b75760405162461bcd60e51b815260206004820152601a6024820152794552524f523a20496e76616c696420776569676874732073756d60301b6044820152606401610315565b60005b84811015610858576000876001600160a01b0316632353eba18888858181106106f357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610708919061156f565b6040518263ffffffff1660e01b815260040161072491906117ea565b604080518083038186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610773919061171e565b915050876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156107af57600080fd5b505afa1580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e7919061158b565b6001600160a01b0316638331e0c4826040518263ffffffff1660e01b815260040161081291906117ea565b600060405180830381600087803b15801561082c57600080fd5b505af1158015610840573d6000803e3d6000fd5b50505050508080610850906119c8565b9150506106ba565b50505050505050565b3361086a61089c565b6001600160a01b0316146108905760405162461bcd60e51b81526004016103159061189c565b61089a6000611360565b565b6033546001600160a01b031690565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610931919061158b565b6001600160a01b0316336001600160a01b0316146109615760405162461bcd60e51b8152600401610315906118d1565b604051632353eba160e01b81526000906001600160a01b03831690632353eba1906109909086906004016117ea565b604080518083038186803b1580156109a757600080fd5b505afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061171e565b9150506001600160a01b038116610a315760405162461bcd60e51b81526020600482015260166024820152754552524f523a20496e76616c6964207265736572766560501b6044820152606401610315565b6040516304021b7f60e51b81526001600160a01b038316906380436fe090610a5d9086906004016117ea565b600060405180830381600087803b158015610a7757600080fd5b505af1158015610858573d6000803e3d6000fd5b6040805180820190915260008082526020820152606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b25919061158b565b6001600160a01b0316336001600160a01b031614610b555760405162461bcd60e51b8152600401610315906118d1565b60405163af81c5b960e01b81526001600160a01b0383169063af81c5b990610b8390879087906004016117fe565b6040805180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190611749565b949350505050565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c62919061158b565b6001600160a01b0316336001600160a01b031614610c925760405162461bcd60e51b8152600401610315906118d1565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0257600080fd5b505afa158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a919061158b565b6001600160a01b0316336001600160a01b031614610d6a5760405162461bcd60e51b8152600401610315906118d1565b604051632353eba160e01b81526000906001600160a01b03851690632353eba190610d999086906004016117ea565b604080518083038186803b158015610db057600080fd5b505afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de8919061171e565b915050836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2457600080fd5b505afa158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c919061158b565b6001600160a01b031663ba4ee1e782846040518363ffffffff1660e01b8152600401610e899291906117fe565b600060405180830381600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b5050505050505050565b600054610100900460ff1680610eda575060005460ff16155b610ef65760405162461bcd60e51b81526004016103159061184e565b600054610100900460ff16158015610f21576000805460ff1961ff0019909116610100171660011790555b610f296113b2565b606580546001600160a01b0319166001600160a01b0384161790558015610f56576000805461ff00191690555b5050565b606560009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610fa857600080fd5b505afa158015610fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe0919061158b565b6001600160a01b0316336001600160a01b0316146110105760405162461bcd60e51b8152600401610315906118d1565b80831461102f5760405162461bcd60e51b815260040161031590611817565b60005b838110156111f8576000866001600160a01b0316632353eba187878581811061106b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611080919061156f565b6040518263ffffffff1660e01b815260040161109c91906117ea565b604080518083038186803b1580156110b357600080fd5b505afa1580156110c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110eb919061171e565b915050866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f919061158b565b6001600160a01b031663ba4ee1e78286868681811061118e57634e487b7160e01b600052603260045260246000fd5b905060200201356040518363ffffffff1660e01b81526004016111b29291906117fe565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b505050505080806111f0906119c8565b915050611032565b505050505050565b6001600160a01b03808416600090815260666020908152604080832093851683529290529081205461ffff16612710141561123e57506127106112b9565b6001600160a01b038085166000908152606660209081526040808320938616835292905220546112749061ffff166127106119a5565b6001600160a01b0380861660009081526066602090815260408083209388168352929052205461ffff918216916112af916127109116611979565b610bd4919061194a565b9392505050565b336112c961089c565b6001600160a01b0316146112ef5760405162461bcd60e51b81526004016103159061189c565b6001600160a01b0381166113545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610315565b61135d81611360565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16806113cb575060005460ff16155b6113e75760405162461bcd60e51b81526004016103159061184e565b600054610100900460ff16158015611412576000805460ff1961ff0019909116610100171660011790555b61141a611436565b6114226114a9565b801561135d576000805461ff001916905550565b600054610100900460ff168061144f575060005460ff16155b61146b5760405162461bcd60e51b81526004016103159061184e565b600054610100900460ff16158015611422576000805460ff1961ff001990911661010017166001179055801561135d576000805461ff001916905550565b600054610100900460ff16806114c2575060005460ff16155b6114de5760405162461bcd60e51b81526004016103159061184e565b600054610100900460ff16158015611509576000805460ff1961ff0019909116610100171660011790555b61142233611360565b60008083601f840112611523578182fd5b5081356001600160401b03811115611539578182fd5b602083019150836020808302850101111561155357600080fd5b9250929050565b8051801515811461156a57600080fd5b919050565b600060208284031215611580578081fd5b81356112b9816119f9565b60006020828403121561159c578081fd5b81516112b9816119f9565b600080604083850312156115b9578081fd5b82356115c4816119f9565b915060208301356115d4816119f9565b809150509250929050565b6000806000606084860312156115f3578081fd5b83356115fe816119f9565b9250602084013561160e816119f9565b9150604084013561161e816119f9565b809150509250925092565b60008060006060848603121561163d578283fd5b8335611648816119f9565b92506020840135611658816119f9565b929592945050506040919091013590565b600080600080600060608688031215611680578081fd5b853561168b816119f9565b945060208601356001600160401b03808211156116a6578283fd5b6116b289838a01611512565b909650945060408801359150808211156116ca578283fd5b506116d788828901611512565b969995985093965092949392505050565b6000806000606084860312156116fc578283fd5b8335611707816119f9565b925060208401359150604084013561161e816119f9565b60008060408385031215611730578182fd5b6117398361155a565b915060208301516115d4816119f9565b60006040828403121561175a578081fd5b604080519081016001600160401b038111828210171561178857634e487b7160e01b83526041600452602483fd5b6040526117948361155a565b815260208301516117a4816119f9565b60208201529392505050565b6000602082840312156117c1578081fd5b813561ffff811681146112b9578182fd5b6000602082840312156117e3578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252601f908201527f4552524f523a20496e76616c696420706172616d657465727320636f756e7400604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4552524f523a204f6e6c7920676f7665726e6f722063616e2063616c6c20746860408201527234b99036b0b730b3b2b910333ab731ba34b7b760691b606082015260800190565b600061ffff808316818516808303821115611941576119416119e3565b01949350505050565b600063ffffffff8084168061196d57634e487b7160e01b83526012600452602483fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561199c5761199c6119e3565b02949350505050565b600061ffff838116908316818110156119c0576119c06119e3565b039392505050565b60006000198214156119dc576119dc6119e3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461135d57600080fdfea2646970667358221220c6c28f8f140095109909347c4b70ef1e8ecd863d3f2cf621eca185eca965bdd464736f6c63430008020033