608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061005c6012600a6101c7565b61006a90633b9aca006101dc565b335f81815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6100aa6012600a6101c7565b6100b890633b9aca006101dc565b60405190815260200160405180910390a36101f3565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561011d57808504811115610101576101016100ce565b600184161561010f57908102905b60019390931c9280026100e6565b935093915050565b5f82610133575060016101c1565b8161013f57505f6101c1565b8160018114610155576002811461015f5761017b565b60019150506101c1565b60ff841115610170576101706100ce565b50506001821b6101c1565b5060208310610133831016604e8410600b841016171561019e575081810a6101c1565b6101aa5f1984846100e2565b805f19048211156101bd576101bd6100ce565b0290505b92915050565b5f6101d560ff841683610125565b9392505050565b80820281158282048414176101c1576101c16100ce565b610e2e806102005f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80637111a99411610093578063beabacc811610063578063beabacc814610223578063cddd69f814610236578063d63a8e1114610249578063dd62ed3e1461026b575f80fd5b80637111a994146101c55780638da5cb5b146101da57806395d89b41146101f4578063b15be2f51461021b575f80fd5b806323b872dd116100ce57806323b872dd14610168578063313ce5671461017b5780635487816d1461018a57806370a082311461019d575f80fd5b806306fdde03146100f4578063095ea7b31461012f57806318160ddd14610152575b5f80fd5b60408051808201909152600d81526c38a022d554f8a022d138a022d5609a1b60208201525b6040516101269190610914565b60405180910390f35b61014261013d366004610964565b6102a3565b6040519015158152602001610126565b61015a6102b9565b604051908152602001610126565b61014261017636600461098c565b6102d9565b60405160128152602001610126565b610142610198366004610964565b610329565b61015a6101ab3660046109c6565b6001600160a01b03165f9081526001602052604090205490565b6101d86101d3366004610abf565b610335565b005b5f546040516001600160a01b039091168152602001610126565b60408051808201909152600b81526a2af14045a9a2714045e85160a91b6020820152610119565b6101d8610455565b6101d861023136600461098c565b6104f6565b6101d8610244366004610ba6565b610562565b6101426102573660046109c6565b60036020525f908152604090205460ff1681565b61015a610279366004610c71565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b5f6102af338484610633565b5060015b92915050565b5f6102c66012600a610d99565b6102d490633b9aca00610da7565b905090565b5f6102e584848461074e565b6001600160a01b0384165f9081526002602090815260408083203380855292529091205461031f91869161031a908690610dbe565b610633565b5060019392505050565b5f6102af33848461074e565b335f9081526003602052604090205460ff1661034f575f80fd5b81518351148015610361575080518251145b6103a45760405162461bcd60e51b815260206004820152600f60248201526e082e4e4c2f2e640dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b5f5b835181101561044f578281815181106103c1576103c1610dd1565b60200260200101516001600160a01b03168482815181106103e4576103e4610dd1565b60200260200101516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061042857610428610dd1565b602002602001015160405161043f91815260200190565b60405180910390a36001016103a6565b50505050565b5f546001600160a01b031633146104ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039b565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b335f9081526003602052604090205460ff16610510575f80fd5b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161055591815260200190565b60405180910390a3505050565b5f546001600160a01b031633146105bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039b565b5f5b825181101561062e578181815181106105d8576105d8610dd1565b602002602001015160035f8584815181106105f5576105f5610dd1565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016105bd565b505050565b6001600160a01b0383166106955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161039b565b6001600160a01b0382166106f65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161039b565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610555565b6001600160a01b0383166107b25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161039b565b6001600160a01b0382166108145760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161039b565b5f81116108755760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161039b565b6001600160a01b0383165f908152600160205260408120805483929061089c908490610dbe565b90915550506001600160a01b0382165f90815260016020526040812080548392906108c8908490610de5565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161055591815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461095f575f80fd5b919050565b5f8060408385031215610975575f80fd5b61097e83610949565b946020939093013593505050565b5f805f6060848603121561099e575f80fd5b6109a784610949565b92506109b560208501610949565b929592945050506040919091013590565b5f602082840312156109d6575f80fd5b6109df82610949565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610a2357610a236109e6565b604052919050565b5f67ffffffffffffffff821115610a4457610a446109e6565b5060051b60200190565b5f82601f830112610a5d575f80fd5b8135610a70610a6b82610a2b565b6109fa565b8082825260208201915060208360051b860101925085831115610a91575f80fd5b602085015b83811015610ab557610aa781610949565b835260209283019201610a96565b5095945050505050565b5f805f60608486031215610ad1575f80fd5b833567ffffffffffffffff811115610ae7575f80fd5b610af386828701610a4e565b935050602084013567ffffffffffffffff811115610b0f575f80fd5b610b1b86828701610a4e565b925050604084013567ffffffffffffffff811115610b37575f80fd5b8401601f81018613610b47575f80fd5b8035610b55610a6b82610a2b565b8082825260208201915060208360051b850101925088831115610b76575f80fd5b6020840193505b82841015610b98578335825260209384019390910190610b7d565b809450505050509250925092565b5f8060408385031215610bb7575f80fd5b823567ffffffffffffffff811115610bcd575f80fd5b610bd985828601610a4e565b925050602083013567ffffffffffffffff811115610bf5575f80fd5b8301601f81018513610c05575f80fd5b8035610c13610a6b82610a2b565b8082825260208201915060208360051b850101925087831115610c34575f80fd5b6020840193505b82841015610c635783358015158114610c52575f80fd5b825260209384019390910190610c3b565b809450505050509250929050565b5f8060408385031215610c82575f80fd5b610c8b83610949565b9150610c9960208401610949565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610cf157808504811115610cd557610cd5610ca2565b6001841615610ce357908102905b60019390931c928002610cba565b935093915050565b5f82610d07575060016102b3565b81610d1357505f6102b3565b8160018114610d295760028114610d3357610d4f565b60019150506102b3565b60ff841115610d4457610d44610ca2565b50506001821b6102b3565b5060208310610133831016604e8410600b8410161715610d72575081810a6102b3565b610d7e5f198484610cb6565b805f1904821115610d9157610d91610ca2565b029392505050565b5f6109df60ff841683610cf9565b80820281158282048414176102b3576102b3610ca2565b818103818111156102b3576102b3610ca2565b634e487b7160e01b5f52603260045260245ffd5b808201808211156102b3576102b3610ca256fea2646970667358221220cc9ebe34ebb5278a049a2c8ab5a513258a40c38bbd19eeadf7d16b82223b2ce964736f6c634300081a0033