0x608060405234801561000f575f5ffd5b506004361061013d575f3560e01c80638e32c003116100b4578063c345cf2311610079578063c345cf23146102b0578063cadc24b5146102b8578063d8fb9361146102e0578063dd62ed3e146102f3578063e03504af1461021b578063e156b1b61461032b575f5ffd5b80638e32c0031461026f57806395d89b4114610141578063a713fd5314610282578063a9059cbb1461028a578063adacad8c1461029d575f5ffd5b806328226aa71161010557806328226aa7146101d1578063313ce567146101f5578063416c3c9d1461020a5780635c01b60c1461021b57806370a082311461023d578063715018a614610265575f5ffd5b806306fdde0314610141578063095ea7b31461017257806318160ddd146101955780631ae1ffbc146101ab57806323b872dd146101be575b5f5ffd5b60408051808201909152600381526208aa8960eb1b60208201525b6040516101699190610b74565b60405180910390f35b610185610180366004610bc4565b61033e565b6040519015158152602001610169565b61019d6103a5565b604051908152602001610169565b6101856101b9366004610d20565b6103c4565b6101856101cc366004610dcf565b6105cb565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b60015b60405160ff9091168152602001610169565b6004546001600160a01b03166101dd565b61015c6040518060400160405280600381526020016208aa8960eb1b81525081565b61019d61024b366004610e09565b6001600160a01b03165f9081526002602052604090205490565b61026d610785565b005b61026d61027d366004610e09565b6107fc565b6101f8600181565b610185610298366004610bc4565b610847565b61026d6102ab366004610e29565b610984565b61019d610a0a565b61019d6102c6366004610e09565b6001600160a01b03165f9081526003602052604090205490565b61026d6102ee366004610e9e565b610a26565b61019d610301366004610ee0565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610185610339366004610dcf565b610b41565b335f8181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6103b26001600a611008565b6103bf9062989680611016565b905090565b5f805b85518110156105be578581815181106103e2576103e261102d565b60200260200101516001600160a01b0316876001600160a01b03165f5160206111185f395f51905f5287848151811061041d5761041d61102d565b602002602001015160405161043491815260200190565b60405180910390a385818151811061044e5761044e61102d565b60200260200101516001600160a01b0316734752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228784815181106104b0576104b061102d565b60200260200101515f5f8987815181106104cc576104cc61102d565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3826001600160a01b031663e156b1b687838151811061051a5761051a61102d565b6020026020010151898785815181106105355761053561102d565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610591573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b59190611041565b506001016103c7565b5060019695505050505050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120548211156106425760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602052604090205480156106af578083146106af5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b6001600160a01b0385165f90815260026020526040812080548592906106d6908490611060565b90915550506001600160a01b0384165f9081526002602052604081208054859290610702908490611073565b90915550506001600160a01b0385165f90815260016020908152604080832033845290915281208054859290610739908490611060565b92505081905550836001600160a01b0316856001600160a01b03165f5160206111185f395f51905f528560405161077291815260200190565b60405180910390a3506001949350505050565b5f546001600160a01b031633146107ae5760405162461bcd60e51b815260040161063990611086565b5f805460405161dead926001600160a01b03909216917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca91a35f80546001600160a01b03191661dead179055565b5f546001600160a01b031633146108255760405162461bcd60e51b815260040161063990611086565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604081205482111561089c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610639565b5f6108a6336102c6565b905080156108fd578083146108fd5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b335f908152600260205260408120805485929061091b908490611060565b90915550506001600160a01b0384165f9081526002602052604081208054859290610947908490611073565b90915550506040518381526001600160a01b0385169033905f5160206111185f395f51905f52906020015b60405180910390a35060019392505050565b6004546001600160a01b031633146109ae5760405162461bcd60e51b8152600401610639906110d1565b5f5b82811015610a04578160035f8686858181106109ce576109ce61102d565b90506020020160208101906109e39190610e09565b6001600160a01b0316815260208101919091526040015f20556001016109b0565b50505050565b610a166001600a611008565b610a239062989680611016565b81565b6004546001600160a01b03163314610a505760405162461bcd60e51b8152600401610639906110d1565b5f5b8251811015610b3c575f838281518110610a6e57610a6e61102d565b602002602001015190505f6001600160a01b0316816001600160a01b031603610ad95760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206164647265737320737065636966696564000000000000006044820152606401610639565b6001600160a01b0381165f81815260026020908152604091829020805490879055825181815291820187905292917fef88868e7a1bd2fac29f7b777f32f9d8ea2ac5e10c2d23234d4715ab11c84890910160405180910390a25050600101610a52565b505050565b5f826001600160a01b0316846001600160a01b03165f5160206111185f395f51905f528460405161097291815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610bbf575f5ffd5b919050565b5f5f60408385031215610bd5575f5ffd5b610bde83610ba9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c2957610c29610bec565b604052919050565b5f67ffffffffffffffff821115610c4a57610c4a610bec565b5060051b60200190565b5f82601f830112610c63575f5ffd5b8135610c76610c7182610c31565b610c00565b8082825260208201915060208360051b860101925085831115610c97575f5ffd5b602085015b83811015610cbb57610cad81610ba9565b835260209283019201610c9c565b5095945050505050565b5f82601f830112610cd4575f5ffd5b8135610ce2610c7182610c31565b8082825260208201915060208360051b860101925085831115610d03575f5ffd5b602085015b83811015610cbb578035835260209283019201610d08565b5f5f5f5f5f60a08688031215610d34575f5ffd5b610d3d86610ba9565b9450602086013567ffffffffffffffff811115610d58575f5ffd5b610d6488828901610c54565b945050604086013567ffffffffffffffff811115610d80575f5ffd5b610d8c88828901610cc5565b935050606086013567ffffffffffffffff811115610da8575f5ffd5b610db488828901610cc5565b925050610dc360808701610ba9565b90509295509295909350565b5f5f5f60608486031215610de1575f5ffd5b610dea84610ba9565b9250610df860208501610ba9565b929592945050506040919091013590565b5f60208284031215610e19575f5ffd5b610e2282610ba9565b9392505050565b5f5f5f60408486031215610e3b575f5ffd5b833567ffffffffffffffff811115610e51575f5ffd5b8401601f81018613610e61575f5ffd5b803567ffffffffffffffff811115610e77575f5ffd5b8660208260051b8401011115610e8b575f5ffd5b6020918201979096509401359392505050565b5f5f60408385031215610eaf575f5ffd5b823567ffffffffffffffff811115610ec5575f5ffd5b610ed185828601610c54565b95602094909401359450505050565b5f5f60408385031215610ef1575f5ffd5b610efa83610ba9565b9150610f0860208401610ba9565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610f6057808504811115610f4457610f44610f11565b6001841615610f5257908102905b60019390931c928002610f29565b935093915050565b5f82610f765750600161039f565b81610f8257505f61039f565b8160018114610f985760028114610fa257610fbe565b600191505061039f565b60ff841115610fb357610fb3610f11565b50506001821b61039f565b5060208310610133831016604e8410600b8410161715610fe1575081810a61039f565b610fed5f198484610f25565b805f190482111561100057611000610f11565b029392505050565b5f610e2260ff841683610f68565b808202811582820484141761039f5761039f610f11565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611051575f5ffd5b81518015158114610e22575f5ffd5b8181038181111561039f5761039f610f11565b8082018082111561039f5761039f610f11565b6020808252602b908201527f556e617574686f72697a65643a2053696e676c65204f776e657220616363657360408201526a39903932b8bab4b932b21760a91b606082015260800190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d8dd72629d20539eed53e09cb9fc3010c0ea59013f46f03f9239c5ac65219af964736f6c634300081e0033
0x608060405234801561000f575f5ffd5b505f80546001600160a01b031916339081178255604051909182917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca908290a35061005c6001600a6101c5565b61006990629896806101da565b335f81815260026020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6100a96001600a6101c5565b6100b690629896806101da565b60405190815260200160405180910390a36101f1565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561011b578085048111156100ff576100ff6100cc565b600184161561010d57908102905b60019390931c9280026100e4565b935093915050565b5f82610131575060016101bf565b8161013d57505f6101bf565b8160018114610153576002811461015d57610179565b60019150506101bf565b60ff84111561016e5761016e6100cc565b50506001821b6101bf565b5060208310610133831016604e8410600b841016171561019c575081810a6101bf565b6101a85f1984846100e0565b805f19048211156101bb576101bb6100cc565b0290505b92915050565b5f6101d360ff841683610123565b9392505050565b80820281158282048414176101bf576101bf6100cc565b61116d806101fe5f395ff3fe608060405234801561000f575f5ffd5b506004361061013d575f3560e01c80638e32c003116100b4578063c345cf2311610079578063c345cf23146102b0578063cadc24b5146102b8578063d8fb9361146102e0578063dd62ed3e146102f3578063e03504af1461021b578063e156b1b61461032b575f5ffd5b80638e32c0031461026f57806395d89b4114610141578063a713fd5314610282578063a9059cbb1461028a578063adacad8c1461029d575f5ffd5b806328226aa71161010557806328226aa7146101d1578063313ce567146101f5578063416c3c9d1461020a5780635c01b60c1461021b57806370a082311461023d578063715018a614610265575f5ffd5b806306fdde0314610141578063095ea7b31461017257806318160ddd146101955780631ae1ffbc146101ab57806323b872dd146101be575b5f5ffd5b60408051808201909152600381526208aa8960eb1b60208201525b6040516101699190610b74565b60405180910390f35b610185610180366004610bc4565b61033e565b6040519015158152602001610169565b61019d6103a5565b604051908152602001610169565b6101856101b9366004610d20565b6103c4565b6101856101cc366004610dcf565b6105cb565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b60015b60405160ff9091168152602001610169565b6004546001600160a01b03166101dd565b61015c6040518060400160405280600381526020016208aa8960eb1b81525081565b61019d61024b366004610e09565b6001600160a01b03165f9081526002602052604090205490565b61026d610785565b005b61026d61027d366004610e09565b6107fc565b6101f8600181565b610185610298366004610bc4565b610847565b61026d6102ab366004610e29565b610984565b61019d610a0a565b61019d6102c6366004610e09565b6001600160a01b03165f9081526003602052604090205490565b61026d6102ee366004610e9e565b610a26565b61019d610301366004610ee0565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610185610339366004610dcf565b610b41565b335f8181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6103b26001600a611008565b6103bf9062989680611016565b905090565b5f805b85518110156105be578581815181106103e2576103e261102d565b60200260200101516001600160a01b0316876001600160a01b03165f5160206111185f395f51905f5287848151811061041d5761041d61102d565b602002602001015160405161043491815260200190565b60405180910390a385818151811061044e5761044e61102d565b60200260200101516001600160a01b0316734752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228784815181106104b0576104b061102d565b60200260200101515f5f8987815181106104cc576104cc61102d565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3826001600160a01b031663e156b1b687838151811061051a5761051a61102d565b6020026020010151898785815181106105355761053561102d565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610591573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b59190611041565b506001016103c7565b5060019695505050505050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120548211156106425760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602052604090205480156106af578083146106af5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b6001600160a01b0385165f90815260026020526040812080548592906106d6908490611060565b90915550506001600160a01b0384165f9081526002602052604081208054859290610702908490611073565b90915550506001600160a01b0385165f90815260016020908152604080832033845290915281208054859290610739908490611060565b92505081905550836001600160a01b0316856001600160a01b03165f5160206111185f395f51905f528560405161077291815260200190565b60405180910390a3506001949350505050565b5f546001600160a01b031633146107ae5760405162461bcd60e51b815260040161063990611086565b5f805460405161dead926001600160a01b03909216917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca91a35f80546001600160a01b03191661dead179055565b5f546001600160a01b031633146108255760405162461bcd60e51b815260040161063990611086565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604081205482111561089c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610639565b5f6108a6336102c6565b905080156108fd578083146108fd5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b335f908152600260205260408120805485929061091b908490611060565b90915550506001600160a01b0384165f9081526002602052604081208054859290610947908490611073565b90915550506040518381526001600160a01b0385169033905f5160206111185f395f51905f52906020015b60405180910390a35060019392505050565b6004546001600160a01b031633146109ae5760405162461bcd60e51b8152600401610639906110d1565b5f5b82811015610a04578160035f8686858181106109ce576109ce61102d565b90506020020160208101906109e39190610e09565b6001600160a01b0316815260208101919091526040015f20556001016109b0565b50505050565b610a166001600a611008565b610a239062989680611016565b81565b6004546001600160a01b03163314610a505760405162461bcd60e51b8152600401610639906110d1565b5f5b8251811015610b3c575f838281518110610a6e57610a6e61102d565b602002602001015190505f6001600160a01b0316816001600160a01b031603610ad95760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206164647265737320737065636966696564000000000000006044820152606401610639565b6001600160a01b0381165f81815260026020908152604091829020805490879055825181815291820187905292917fef88868e7a1bd2fac29f7b777f32f9d8ea2ac5e10c2d23234d4715ab11c84890910160405180910390a25050600101610a52565b505050565b5f826001600160a01b0316846001600160a01b03165f5160206111185f395f51905f528460405161097291815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610bbf575f5ffd5b919050565b5f5f60408385031215610bd5575f5ffd5b610bde83610ba9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c2957610c29610bec565b604052919050565b5f67ffffffffffffffff821115610c4a57610c4a610bec565b5060051b60200190565b5f82601f830112610c63575f5ffd5b8135610c76610c7182610c31565b610c00565b8082825260208201915060208360051b860101925085831115610c97575f5ffd5b602085015b83811015610cbb57610cad81610ba9565b835260209283019201610c9c565b5095945050505050565b5f82601f830112610cd4575f5ffd5b8135610ce2610c7182610c31565b8082825260208201915060208360051b860101925085831115610d03575f5ffd5b602085015b83811015610cbb578035835260209283019201610d08565b5f5f5f5f5f60a08688031215610d34575f5ffd5b610d3d86610ba9565b9450602086013567ffffffffffffffff811115610d58575f5ffd5b610d6488828901610c54565b945050604086013567ffffffffffffffff811115610d80575f5ffd5b610d8c88828901610cc5565b935050606086013567ffffffffffffffff811115610da8575f5ffd5b610db488828901610cc5565b925050610dc360808701610ba9565b90509295509295909350565b5f5f5f60608486031215610de1575f5ffd5b610dea84610ba9565b9250610df860208501610ba9565b929592945050506040919091013590565b5f60208284031215610e19575f5ffd5b610e2282610ba9565b9392505050565b5f5f5f60408486031215610e3b575f5ffd5b833567ffffffffffffffff811115610e51575f5ffd5b8401601f81018613610e61575f5ffd5b803567ffffffffffffffff811115610e77575f5ffd5b8660208260051b8401011115610e8b575f5ffd5b6020918201979096509401359392505050565b5f5f60408385031215610eaf575f5ffd5b823567ffffffffffffffff811115610ec5575f5ffd5b610ed185828601610c54565b95602094909401359450505050565b5f5f60408385031215610ef1575f5ffd5b610efa83610ba9565b9150610f0860208401610ba9565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610f6057808504811115610f4457610f44610f11565b6001841615610f5257908102905b60019390931c928002610f29565b935093915050565b5f82610f765750600161039f565b81610f8257505f61039f565b8160018114610f985760028114610fa257610fbe565b600191505061039f565b60ff841115610fb357610fb3610f11565b50506001821b61039f565b5060208310610133831016604e8410600b8410161715610fe1575081810a61039f565b610fed5f198484610f25565b805f190482111561100057611000610f11565b029392505050565b5f610e2260ff841683610f68565b808202811582820484141761039f5761039f610f11565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611051575f5ffd5b81518015158114610e22575f5ffd5b8181038181111561039f5761039f610f11565b8082018082111561039f5761039f610f11565b6020808252602b908201527f556e617574686f72697a65643a2053696e676c65204f776e657220616363657360408201526a39903932b8bab4b932b21760a91b606082015260800190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d8dd72629d20539eed53e09cb9fc3010c0ea59013f46f03f9239c5ac65219af964736f6c634300081e0033