6080604052600180546001600160a01b03199081167301000b5fe61411c466b70631d7ff070187179bbf17909155600280549091163317905534801561004457600080fd5b506100556301ffc9a760e01b61005a565b6100dd565b6001600160e01b031980821690036100b85760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b611563806100ec6000396000f3fe6080604052600436106101445760003560e01c806340c10f19116100c0578063938b5f3211610074578063a9059cbb11610059578063a9059cbb14610385578063be45fd62146103a5578063dd62ed3e146103b857600080fd5b8063938b5f321461035257806395d89b411461037057600080fd5b80635a3b7e42116100a55780635a3b7e42146102e057806370a08231146102fc5780638cd4426d1461033257600080fd5b806340c10f19146102a057806342966c68146102c057600080fd5b806318160ddd1161011757806323b872dd116100fc57806323b872dd146102375780632801617e14610257578063313ce5671461027957600080fd5b806318160ddd146101f857806319d16c491461021757600080fd5b806301ffc9a71461014957806302d05d3f1461017e57806306fdde03146101b6578063095ea7b3146101d8575b600080fd5b34801561015557600080fd5b5061016961016436600461107c565b6103fe565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b5060025461019e906001600160a01b031681565b6040516001600160a01b039091168152602001610175565b3480156101c257600080fd5b506101cb61056b565b60405161017591906110f0565b3480156101e457600080fd5b506101696101f336600461111f565b6105fb565b34801561020457600080fd5b506005545b604051908152602001610175565b34801561022357600080fd5b5060015461019e906001600160a01b031681565b34801561024357600080fd5b50610169610252366004611149565b6106bc565b34801561026357600080fd5b50610277610272366004611185565b61081a565b005b34801561028557600080fd5b5061028e61086b565b60405160ff9091168152602001610175565b3480156102ac57600080fd5b506102776102bb36600461111f565b6108f2565b3480156102cc57600080fd5b506102776102db3660046111a0565b6109e2565b3480156102ec57600080fd5b5060405160df8152602001610175565b34801561030857600080fd5b50610209610317366004611185565b6001600160a01b031660009081526006602052604090205490565b34801561033e57600080fd5b5061027761034d36600461111f565b610ac9565b34801561035e57600080fd5b506003546001600160a01b031661019e565b34801561037c57600080fd5b506101cb610ae5565b34801561039157600080fd5b506101696103a036600461111f565b610b94565b6101696103b33660046111b9565b610d33565b3480156103c457600080fd5b506102096103d3366004611240565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000148061049157507fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000145b806104dd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f3ed8c78500000000000000000000000000000000000000000000000000000000145b8061052957507fffffffff0000000000000000000000000000000000000000000000000000000082167fddef4e1000000000000000000000000000000000000000000000000000000000145b8061056557507fffffffff00000000000000000000000000000000000000000000000000000000821660009081526020819052604090205460ff165b92915050565b600354604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde039160048083019260009291908290030181865afa1580156105ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f691908101906112a2565b905090565b60006001600160a01b0383166106585760405162461bcd60e51b815260206004820152601760248201527f4552432d3232333a205370656e646572206572726f722e00000000000000000060448201526064015b60405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205482111561072f5760405162461bcd60e51b815260206004820181905260248201527f4552432d3232333a20496e73756666696369656e7420616c6c6f77616e63652e604482015260640161064f565b6001600160a01b0384166000908152600660205260408120805484929061075790849061137e565b90915550506001600160a01b03841660009081526004602090815260408083203384529091528120805484929061078f90849061137e565b90915550506001600160a01b038316600090815260066020526040812080548492906107bc908490611391565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161080891815260200190565b60405180910390a35060019392505050565b6002546001600160a01b0316331461083157600080fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600354604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f691906113a4565b6002546001600160a01b031633146109985760405162461bcd60e51b815260206004820152604160248201527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f722060448201527f636f6e74726163742063616e206d696e74207772617070657220746f6b656e7360648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a40161064f565b6001600160a01b038216600090815260066020526040812080548392906109c0908490611391565b9250508190555080600560008282546109d99190611391565b90915550505050565b6002546001600160a01b03163314610a895760405162461bcd60e51b8152602060048201526044602482018190527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f7220908201527f636f6e74726163742063616e2064657374726f79207772617070657220746f6b60648201527f656e732e00000000000000000000000000000000000000000000000000000000608482015260a40161064f565b3360009081526006602052604081208054839290610aa890849061137e565b925050819055508060056000828254610ac1919061137e565b909155505050565b600154610ae19083906001600160a01b031683610f02565b5050565b600354604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde039160048083019260009291908290030181865afa158015610b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b7091908101906112a2565b604051602001610b8091906113c7565b604051602081830303815290604052905090565b60408051808201825260048152600060208083018290523382526006905291822054610bc190849061137e565b33600090815260066020526040808220929092556001600160a01b03861681522054610bee908490611391565b6001600160a01b038516600090815260066020526040902055833b15610c9c576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03851690638943ec0290610c5790339087908690600401611408565b6020604051808303816000875af1158015610c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9a9190611439565b505b836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c168584604051610ce1929190611456565b60405180910390a36040518381526001600160a01b0385169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b33600090815260066020526040812054610d4e90859061137e565b33600090815260066020526040808220929092556001600160a01b03871681522054610d7b908590611391565b6001600160a01b038616600090815260066020526040902055843b15610e2b576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638943ec0290610de69033908890889088906004016114a2565b6020604051808303816000875af1158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611439565b505b3415610e68576040516001600160a01b038616903480156108fc02916000818181858888f19350505050158015610e66573d6000803e3d6000fd5b505b846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610eaf939291906114d5565b60405180910390a36040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691610f8c91906114ef565b6000604051808303816000865af19150503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b5091509150818015610ff8575080511580610ff8575080806020019051810190610ff8919061150b565b6110445760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161064f565b5050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461107957600080fd5b50565b60006020828403121561108e57600080fd5b81356110998161104b565b9392505050565b60005b838110156110bb5781810151838201526020016110a3565b50506000910152565b600081518084526110dc8160208601602086016110a0565b601f01601f19169290920160200192915050565b60208152600061109960208301846110c4565b80356001600160a01b038116811461111a57600080fd5b919050565b6000806040838503121561113257600080fd5b61113b83611103565b946020939093013593505050565b60008060006060848603121561115e57600080fd5b61116784611103565b925061117560208501611103565b9150604084013590509250925092565b60006020828403121561119757600080fd5b61109982611103565b6000602082840312156111b257600080fd5b5035919050565b600080600080606085870312156111cf57600080fd5b6111d885611103565b935060208501359250604085013567ffffffffffffffff808211156111fc57600080fd5b818701915087601f83011261121057600080fd5b81358181111561121f57600080fd5b88602082850101111561123157600080fd5b95989497505060200194505050565b6000806040838503121561125357600080fd5b61125c83611103565b915061126a60208401611103565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156112b457600080fd5b815167ffffffffffffffff808211156112cc57600080fd5b818401915084601f8301126112e057600080fd5b8151818111156112f2576112f2611273565b604051601f8201601f19908116603f0116810190838211818310171561131a5761131a611273565b8160405282815287602084870101111561133357600080fd5b6113448360208301602088016110a0565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105655761056561134f565b808201808211156105655761056561134f565b6000602082840312156113b657600080fd5b815160ff8116811461109957600080fd5b600082516113d98184602087016110a0565b7f3232330000000000000000000000000000000000000000000000000000000000920191825250600301919050565b6001600160a01b038416815282602082015260606040820152600061143060608301846110c4565b95945050505050565b60006020828403121561144b57600080fd5b81516110998161104b565b82815260406020820152600061146f60408301846110c4565b949350505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b03851681528360208201526060604082015260006114cb606083018486611477565b9695505050505050565b838152604060208201526000611430604083018486611477565b600082516115018184602087016110a0565b9190910192915050565b60006020828403121561151d57600080fd5b8151801515811461109957600080fdfea26469706673582212203daaf058d4912ffd72cc549181d424f6f1d77ab2e25e285228bb16382b524e6864736f6c63430008130033