0x60806040526004361061026a5760003560e01c80637d557a3f11610153578063c1bd8cf9116100cb578063ded8454a1161007f578063f2fde38b11610064578063f2fde38b14610757578063f7ee999814610777578063f9b833e1146107a857600080fd5b8063ded8454a14610711578063f0141d841461073857600080fd5b8063d5abeb01116100b0578063d5abeb011461063d578063dc02f45614610652578063dd62ed3e146106cb57600080fd5b8063c1bd8cf914610608578063c599efdd1461061d57600080fd5b806395d89b4111610122578063a457c2d711610107578063a457c2d714610598578063a9059cbb146105b8578063aa4efa5b146105d857600080fd5b806395d89b41146105605780639a8a05921461057557600080fd5b80637d557a3f146104e457806384acd1bb14610504578063860369cc146105225780638da5cb5b1461054257600080fd5b806339509351116101e657806370a08231116101b5578063715018a61161019a578063715018a61461047157806373ee799b1461048657806374d32ad4146104b257600080fd5b806370a082311461041b578063711055a21461045157600080fd5b806339509351146103b357806340c10f19146103d3578063529dca32146103f357806364d42b171461040657600080fd5b806318160ddd1161023d5780632c5485f4116102225780632c5485f414610345578063313ce56714610367578063392e53cd1461039457600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631150f0f3146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046124d3565b6107c8565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107ff565b60405161029b9190612555565b3480156102d257600080fd5b5061028f6102e1366004612584565b610891565b3480156102f257600080fd5b5061028f610301366004612665565b6108a9565b34801561031257600080fd5b50600b545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126a2565b6108d6565b34801561035157600080fd5b50610365610360366004612770565b6108fc565b005b34801561037357600080fd5b50600554600160a81b900460ff165b60405160ff909116815260200161029b565b3480156103a057600080fd5b50600554600160a01b900460ff1661028f565b3480156103bf57600080fd5b5061028f6103ce366004612584565b610b85565b3480156103df57600080fd5b506103656103ee366004612584565b610bc4565b6103656104013660046127eb565b610c5b565b34801561041257600080fd5b50600454610317565b34801561042757600080fd5b506103176104363660046128e6565b6001600160a01b031660009081526009602052604090205490565b34801561045d57600080fd5b5061036561046c366004612901565b610de4565b34801561047d57600080fd5b50610365610eca565b61049961049436600461291f565b610ede565b60405167ffffffffffffffff909116815260200161029b565b3480156104be57600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161029b565b3480156104f057600080fd5b506103656104ff3660046129c0565b6111c6565b34801561051057600080fd5b506001546001600160a01b03166104cc565b34801561052e57600080fd5b506102b961053d366004612a9a565b6114ed565b34801561054e57600080fd5b50600e546001600160a01b03166104cc565b34801561056c57600080fd5b506102b96115ad565b34801561058157600080fd5b5060005460405161ffff909116815260200161029b565b3480156105a457600080fd5b5061028f6105b3366004612584565b6115bc565b3480156105c457600080fd5b5061028f6105d3366004612584565b611671565b3480156105e457600080fd5b5061028f6105f3366004612b2e565b60009081526002602052604090205460ff1690565b34801561061457600080fd5b50600754610317565b34801561062957600080fd5b506104cc610638366004612b2e565b61167f565b34801561064957600080fd5b50600654610317565b34801561065e57600080fd5b5061067261066d366004612665565b6116ea565b60405161029b9190600060c0820190508251825260208301516020830152604083015161ffff808216604085015260608501516060850152806080860151166080850152505060ff60a08401511660a083015292915050565b3480156106d757600080fd5b506103176106e6366004612b47565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561071d57600080fd5b5061031761072c3660046128e6565b6001600160a01b031690565b34801561074457600080fd5b50600554600160a81b900460ff16610382565b34801561076357600080fd5b506103656107723660046128e6565b611825565b34801561078357600080fd5b50610317610792366004612b7a565b61ffff1660009081526003602052604090205490565b3480156107b457600080fd5b506103176107c3366004612b7a565b6118b5565b60006001600160e01b0319821663adf0604b60e01b14806107f957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600c805461080e90612b95565b80601f016020809104026020016040519081016040528092919081815260200182805461083a90612b95565b80156108875780601f1061085c57610100808354040283529160200191610887565b820191906000526020600020905b81548152906001019060200180831161086a57829003601f168201915b5050505050905090565b60003361089f8185856119eb565b5060019392505050565b600080600801826040516108bd9190612bca565b9081526040519081900360200190205460ff1692915050565b6000336108e4858285611b0f565b6108ef858585611b9b565b60019150505b9392505050565b8061090f600e546001600160a01b031690565b6001600160a01b0316336001600160a01b031614156109435761ffff84166000908152600360205260409020839055610b7f565b60006109e08260000151836020015160405160200161098092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b82519091506001600160a01b03163314610a415760405162461bcd60e51b815260206004820152601760248201527f637573746f6469616e2063616e2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b42826020015111610a945760405162461bcd60e51b815260206004820152601a60248201527f7369676e6564207472616e73616374696f6e20657870697265640000000000006044820152606401610a38565b610aa182604001516108a9565b15610aee5760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742072652d757365207369676e61747572657300000000000000006044820152606401610a38565b610afb8260400151611d75565b610b1b818360400151610b16600e546001600160a01b031690565b611dad565b610b675760405162461bcd60e51b815260206004820152601660248201527f756e617574686f72697a6564207369676e6174757265000000000000000000006044820152606401610a38565b61ffff85166000908152600360205260409020849055505b50505050565b336000818152600a602090815260408083206001600160a01b038716845290915281205490919061089f9082908690610bbf908790612bfc565b6119eb565b610bcc611e62565b60065481610bd960075490565b610be39190612bfc565b1115610c315760405162461bcd60e51b815260206004820152601260248201527f4d415820535550504c59205245414348454400000000000000000000000000006044820152606401610a38565b610c4d81610c3e60075490565b610c489190612bfc565b600755565b610c578282611ebc565b5050565b600554600160a01b900460ff161515600114610cab5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b46610cb560045490565b14610cf55760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b6001546001600160a01b03163314610d4f5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420576f726d686f6c652052656c6179657200000000000000006044820152606401610a38565b30610d598461167f565b6001600160a01b03161480610d86575082610d848361ffff1660009081526003602052604090205490565b145b610dd25760405162461bcd60e51b815260206004820152600f60248201527f496e76616c696420456d697474657200000000000000000000000000000000006044820152606401610a38565b610ddc8582611f7d565b505050505050565b610dec611e62565b600554600160a01b900460ff1615610e465760405162461bcd60e51b815260206004820152601360248201527f416c726561647920496e697469616c697a6564000000000000000000000000006044820152606401610a38565b6000805461ffff191661ffff85161790556001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055610e8881600655565b610e926000600755565b610ec5600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b505050565b610ed2611e62565b610edc6000612118565b565b600554600090600160a01b900460ff161515600114610f315760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b46610f3b60045490565b14610f7b5760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b6000610f8f6001546001600160a01b031690565b60405163c23ee3c360e01b815261ffff8716600482015260006024820152620493e060448201526001600160a01b03919091169063c23ee3c3906064016040805180830381865afa158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100c9190612c14565b5090508034101561105f5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420776f726d686f6c6520676173000000000000006044820152606401610a38565b60005461ffff166110703388612177565b60006040518060c001604052808981526020018681526020018361ffff1681526020018781526020018861ffff1681526020016110b760055460ff600160a81b9091041690565b60ff16905290506110d06001546001600160a01b031690565b6001600160a01b0316634b5ca6f484896110e98961167f565b6110f2866114ed565b6000620493e061110560005461ffff1690565b336040518963ffffffff1660e01b81526004016111289796959493929190612c38565b60206040518083038185885af1158015611146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061116b9190612c92565b9350856111773361072c565b604080518b815261ffff86811660208301528b168183015290517fce2636d514abb08349f7cf4369885a4ac22355555ff0e1c6f99afc895a77f3669181900360600190a3505050949350505050565b806111d9600e546001600160a01b031690565b6001600160a01b0316336001600160a01b031614156112a55782518451146112335760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610a38565b60005b835181101561129f5761128d85828151811061125457611254612cbc565b602002602001015185838151811061126e5761126e612cbc565b602002602001015161ffff909116600090815260036020526040902055565b8061129781612cd2565b915050611236565b50610b7f565b60006112e28260000151836020015160405160200161098092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b82519091506001600160a01b0316331461133e5760405162461bcd60e51b815260206004820152601760248201527f637573746f6469616e2063616e2063616c6c206f6e6c790000000000000000006044820152606401610a38565b428260200151116113915760405162461bcd60e51b815260206004820152601a60248201527f7369676e6564207472616e73616374696f6e20657870697265640000000000006044820152606401610a38565b61139e82604001516108a9565b156113eb5760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742072652d757365207369676e61747572657300000000000000006044820152606401610a38565b6113f88260400151611d75565b611413818360400151610b16600e546001600160a01b031690565b61145f5760405162461bcd60e51b815260206004820152601660248201527f756e617574686f72697a6564207369676e6174757265000000000000000000006044820152606401610a38565b83518551146114a05760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610a38565b60005b8451811015610ddc576114db8682815181106114c1576114c1612cbc565b602002602001015186838151811061126e5761126e612cbc565b806114e581612cd2565b9150506114a3565b6060816000015182602001518360400151846060015185608001518660a0015160405160200161159796959493929190958652602086019490945260f092831b7fffff0000000000000000000000000000000000000000000000000000000000009081166040870152604286019290925290911b16606283015260f81b7fff0000000000000000000000000000000000000000000000000000000000000016606482015260650190565b6040516020818303038152906040529050919050565b6060600d805461080e90612b95565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909190838110156116595760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a38565b61166682868684036119eb565b506001949350505050565b60003361089f818585611b9b565b600073ffffffffffffffffffffffffffffffffffffffff198216156116e65760405162461bcd60e51b815260206004820152601360248201527f696e76616c69642045564d2061646472657373000000000000000000000000006044820152606401610a38565b5090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529061172683826122ab565b8252611733602082612bfc565b905061173f8382612311565b6020808401919091526117529082612bfc565b905061175e838261236e565b61ffff166040830152611772600282612bfc565b905061177e8382612311565b606083015261178e602082612bfc565b905061179a838261236e565b61ffff1660808301526117ae600282612bfc565b90506117ba83826123d4565b60ff1660a08301526117cd600182612bfc565b90508083511461181f5760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964205472616e73666572000000000000000000000000000000006044820152606401610a38565b50919050565b61182d611e62565b6001600160a01b0381166118a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a38565b6118b281612118565b50565b600554600090600160a01b900460ff1615156001146119085760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b4661191260045490565b146119525760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b60006119666001546001600160a01b031690565b60405163c23ee3c360e01b815261ffff8516600482015260006024820152620493e060448201526001600160a01b03919091169063c23ee3c3906064016040805180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190612c14565b509392505050565b6001600160a01b038316611a4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a38565b6001600160a01b038216611aae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a38565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600a60209081526040808320938616835292905220546000198114610b7f5781811015611b8e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a38565b610b7f84848484036119eb565b6001600160a01b038316611c175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b038216611c795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a38565b6001600160a01b03831660009081526009602052604090205481811015611d085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b0380851660008181526009602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d689086815260200190565b60405180910390a3610b7f565b6001600060080182604051611d8a9190612bca565b908152604051908190036020019020805491151560ff1990921691909117905550565b600080600080611dbc8661243a565b925092509250600060018885858560405160008152602001604052604051611e00949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015611e22573d6000803e3d6000fd5b505050602060405103519050856001600160a01b0316816001600160a01b03161415611e555760019450505050506108f5565b60009450505050506108f5565b600e546001600160a01b03163314610edc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a38565b6001600160a01b038216611f125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a38565b80600b6000828254611f249190612bfc565b90915550506001600160a01b0382166000818152600960209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606000611f8a846116ea565b90506000611f9b826060015161167f565b60008581526002602052604090205490915060ff1615611ffd5760405162461bcd60e51b815260206004820152601a60248201527f7472616e7366657220616c726561647920636f6d706c657465640000000000006044820152606401610a38565b61201c846000908152600260205260409020805460ff19166001179055565b60005461ffff1661ffff16826080015161ffff161461207d5760405162461bcd60e51b815260206004820152601460248201527f696e76616c69642074617267657420636861696e0000000000000000000000006044820152606401610a38565b60006120a583600001518460a001516120a060055460ff600160a81b9091041690565b612469565b90506120b18282611ebc565b82606001517fdf5e04c9235e5b4ddaec2baee15dc9c74de339075fa433a8dd25ebbc0719857b82856040015186608001516040516121069392919092835261ffff918216602084015216604082015260600190565b60405180910390a25093949350505050565b600e80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166121d75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a38565b6001600160a01b0382166000908152600960205260409020548181101561224b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a38565b6001600160a01b03831660008181526009602090815260408083208686039055600b80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006122b8826020612bfc565b835110156123085760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e647300000000000000000000006044820152606401610a38565b50016020015190565b600061231e826020612bfc565b835110156123085760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610a38565b600061237b826002612bfc565b835110156123cb5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610a38565b50016002015190565b60006123e1826001612bfc565b835110156124315760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610a38565b50016001015190565b6000806000835160411461244d57600080fd5b5050506020810151604082015160609092015160001a92909190565b60008160ff168360ff16111561249b576124838284612ced565b61248e90600a612df4565b6124989085612e03565b93505b8260ff168260ff1611156124cb576124b38383612ced565b6124be90600a612df4565b6124c89085612e25565b93505b509192915050565b6000602082840312156124e557600080fd5b81356001600160e01b0319811681146108f557600080fd5b60005b83811015612518578181015183820152602001612500565b83811115610b7f5750506000910152565b600081518084526125418160208601602086016124fd565b601f01601f19169290920160200192915050565b6020815260006108f56020830184612529565b80356001600160a01b038116811461257f57600080fd5b919050565b6000806040838503121561259757600080fd5b6125a083612568565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125ed576125ed6125ae565b604052919050565b600082601f83011261260657600080fd5b813567ffffffffffffffff811115612620576126206125ae565b612633601f8201601f19166020016125c4565b81815284602083860101111561264857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561267757600080fd5b813567ffffffffffffffff81111561268e57600080fd5b61269a848285016125f5565b949350505050565b6000806000606084860312156126b757600080fd5b6126c084612568565b92506126ce60208501612568565b9150604084013590509250925092565b803561ffff8116811461257f57600080fd5b60006060828403121561270257600080fd5b6040516060810167ffffffffffffffff8282108183111715612726576127266125ae565b8160405282935061273685612568565b835260208501356020840152604085013591508082111561275657600080fd5b50612763858286016125f5565b6040830152505092915050565b60008060006060848603121561278557600080fd5b61278e846126de565b925060208401359150604084013567ffffffffffffffff8111156127b157600080fd5b6127bd868287016126f0565b9150509250925092565b600067ffffffffffffffff8211156127e1576127e16125ae565b5060051b60200190565b600080600080600060a0868803121561280357600080fd5b853567ffffffffffffffff8082111561281b57600080fd5b61282789838a016125f5565b965060209150818801358181111561283e57600080fd5b8801601f81018a1361284f57600080fd5b803561286261285d826127c7565b6125c4565b81815260059190911b8201840190848101908c83111561288157600080fd5b8584015b838110156128b95780358681111561289d5760008081fd5b6128ab8f89838901016125f5565b845250918601918601612885565b509850505050604088013594506128d5915050606087016126de565b949793965091946080013592915050565b6000602082840312156128f857600080fd5b6108f582612568565b60008060006060848603121561291657600080fd5b6126c0846126de565b6000806000806080858703121561293557600080fd5b84359350612945602086016126de565b93969395505050506040820135916060013590565b600082601f83011261296b57600080fd5b8135602061297b61285d836127c7565b82815260059290921b8401810191818101908684111561299a57600080fd5b8286015b848110156129b5578035835291830191830161299e565b509695505050505050565b6000806000606084860312156129d557600080fd5b833567ffffffffffffffff808211156129ed57600080fd5b818601915086601f830112612a0157600080fd5b81356020612a1161285d836127c7565b82815260059290921b8401810191818101908a841115612a3057600080fd5b948201945b83861015612a5557612a46866126de565b82529482019490820190612a35565b97505087013592505080821115612a6b57600080fd5b612a778783880161295a565b93506040860135915080821115612a8d57600080fd5b506127bd868287016126f0565b600060c08284031215612aac57600080fd5b60405160c0810181811067ffffffffffffffff82111715612acf57612acf6125ae565b80604052508235815260208301356020820152612aee604084016126de565b604082015260608301356060820152612b09608084016126de565b608082015260a083013560ff81168114612b2257600080fd5b60a08201529392505050565b600060208284031215612b4057600080fd5b5035919050565b60008060408385031215612b5a57600080fd5b612b6383612568565b9150612b7160208401612568565b90509250929050565b600060208284031215612b8c57600080fd5b6108f5826126de565b600181811c90821680612ba957607f821691505b6020821081141561181f57634e487b7160e01b600052602260045260246000fd5b60008251612bdc8184602087016124fd565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612c0f57612c0f612be6565b500190565b60008060408385031215612c2757600080fd5b505080516020909101519092909150565b600061ffff808a1683526001600160a01b03808a16602085015260e06040850152612c6660e085018a612529565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b600060208284031215612ca457600080fd5b815167ffffffffffffffff811681146108f557600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ce657612ce6612be6565b5060010190565b600060ff821660ff841680821015612d0757612d07612be6565b90039392505050565b600181815b80851115612d4b578160001904821115612d3157612d31612be6565b80851615612d3e57918102915b93841c9390800290612d15565b509250929050565b600082612d62575060016107f9565b81612d6f575060006107f9565b8160018114612d855760028114612d8f57612dab565b60019150506107f9565b60ff841115612da057612da0612be6565b50506001821b6107f9565b5060208310610133831016604e8410600b8410161715612dce575081810a6107f9565b612dd88383612d10565b8060001904821115612dec57612dec612be6565b029392505050565b60006108f560ff841683612d53565b600082612e2057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e3f57612e3f612be6565b50029056fea164736f6c634300080a000a
0x60806040523480156200001157600080fd5b50604051620031e6380380620031e68339810160408190526200003491620002c3565b8251839083906200004d90600c90602085019062000150565b5080516200006390600d90602084019062000150565b505050620000806200007a620000ac60201b60201c565b620000b0565b6200008b4662000102565b6005805460ff60a81b1916600160a81b60ff84160217905550505062000385565b3390565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b4681146200014b5760405162461bcd60e51b81526020600482015260126024820152711a5b9d985b1a5908195d9b50da185a5b925960721b604482015260640160405180910390fd5b600455565b8280546200015e9062000348565b90600052602060002090601f016020900481019282620001825760008555620001cd565b82601f106200019d57805160ff1916838001178555620001cd565b82800160010185558215620001cd579182015b82811115620001cd578251825591602001919060010190620001b0565b50620001db929150620001df565b5090565b5b80821115620001db5760008155600101620001e0565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021e57600080fd5b81516001600160401b03808211156200023b576200023b620001f6565b604051601f8301601f19908116603f01168101908282118183101715620002665762000266620001f6565b816040528381526020925086838588010111156200028357600080fd5b600091505b83821015620002a7578582018301518183018401529082019062000288565b83821115620002b95760008385830101525b9695505050505050565b600080600060608486031215620002d957600080fd5b83516001600160401b0380821115620002f157600080fd5b620002ff878388016200020c565b945060208601519150808211156200031657600080fd5b5062000325868287016200020c565b925050604084015160ff811681146200033d57600080fd5b809150509250925092565b600181811c908216806200035d57607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b50919050565b612e5180620003956000396000f3fe60806040526004361061026a5760003560e01c80637d557a3f11610153578063c1bd8cf9116100cb578063ded8454a1161007f578063f2fde38b11610064578063f2fde38b14610757578063f7ee999814610777578063f9b833e1146107a857600080fd5b8063ded8454a14610711578063f0141d841461073857600080fd5b8063d5abeb01116100b0578063d5abeb011461063d578063dc02f45614610652578063dd62ed3e146106cb57600080fd5b8063c1bd8cf914610608578063c599efdd1461061d57600080fd5b806395d89b4111610122578063a457c2d711610107578063a457c2d714610598578063a9059cbb146105b8578063aa4efa5b146105d857600080fd5b806395d89b41146105605780639a8a05921461057557600080fd5b80637d557a3f146104e457806384acd1bb14610504578063860369cc146105225780638da5cb5b1461054257600080fd5b806339509351116101e657806370a08231116101b5578063715018a61161019a578063715018a61461047157806373ee799b1461048657806374d32ad4146104b257600080fd5b806370a082311461041b578063711055a21461045157600080fd5b806339509351146103b357806340c10f19146103d3578063529dca32146103f357806364d42b171461040657600080fd5b806318160ddd1161023d5780632c5485f4116102225780632c5485f414610345578063313ce56714610367578063392e53cd1461039457600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631150f0f3146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046124d3565b6107c8565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107ff565b60405161029b9190612555565b3480156102d257600080fd5b5061028f6102e1366004612584565b610891565b3480156102f257600080fd5b5061028f610301366004612665565b6108a9565b34801561031257600080fd5b50600b545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126a2565b6108d6565b34801561035157600080fd5b50610365610360366004612770565b6108fc565b005b34801561037357600080fd5b50600554600160a81b900460ff165b60405160ff909116815260200161029b565b3480156103a057600080fd5b50600554600160a01b900460ff1661028f565b3480156103bf57600080fd5b5061028f6103ce366004612584565b610b85565b3480156103df57600080fd5b506103656103ee366004612584565b610bc4565b6103656104013660046127eb565b610c5b565b34801561041257600080fd5b50600454610317565b34801561042757600080fd5b506103176104363660046128e6565b6001600160a01b031660009081526009602052604090205490565b34801561045d57600080fd5b5061036561046c366004612901565b610de4565b34801561047d57600080fd5b50610365610eca565b61049961049436600461291f565b610ede565b60405167ffffffffffffffff909116815260200161029b565b3480156104be57600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161029b565b3480156104f057600080fd5b506103656104ff3660046129c0565b6111c6565b34801561051057600080fd5b506001546001600160a01b03166104cc565b34801561052e57600080fd5b506102b961053d366004612a9a565b6114ed565b34801561054e57600080fd5b50600e546001600160a01b03166104cc565b34801561056c57600080fd5b506102b96115ad565b34801561058157600080fd5b5060005460405161ffff909116815260200161029b565b3480156105a457600080fd5b5061028f6105b3366004612584565b6115bc565b3480156105c457600080fd5b5061028f6105d3366004612584565b611671565b3480156105e457600080fd5b5061028f6105f3366004612b2e565b60009081526002602052604090205460ff1690565b34801561061457600080fd5b50600754610317565b34801561062957600080fd5b506104cc610638366004612b2e565b61167f565b34801561064957600080fd5b50600654610317565b34801561065e57600080fd5b5061067261066d366004612665565b6116ea565b60405161029b9190600060c0820190508251825260208301516020830152604083015161ffff808216604085015260608501516060850152806080860151166080850152505060ff60a08401511660a083015292915050565b3480156106d757600080fd5b506103176106e6366004612b47565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561071d57600080fd5b5061031761072c3660046128e6565b6001600160a01b031690565b34801561074457600080fd5b50600554600160a81b900460ff16610382565b34801561076357600080fd5b506103656107723660046128e6565b611825565b34801561078357600080fd5b50610317610792366004612b7a565b61ffff1660009081526003602052604090205490565b3480156107b457600080fd5b506103176107c3366004612b7a565b6118b5565b60006001600160e01b0319821663adf0604b60e01b14806107f957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600c805461080e90612b95565b80601f016020809104026020016040519081016040528092919081815260200182805461083a90612b95565b80156108875780601f1061085c57610100808354040283529160200191610887565b820191906000526020600020905b81548152906001019060200180831161086a57829003601f168201915b5050505050905090565b60003361089f8185856119eb565b5060019392505050565b600080600801826040516108bd9190612bca565b9081526040519081900360200190205460ff1692915050565b6000336108e4858285611b0f565b6108ef858585611b9b565b60019150505b9392505050565b8061090f600e546001600160a01b031690565b6001600160a01b0316336001600160a01b031614156109435761ffff84166000908152600360205260409020839055610b7f565b60006109e08260000151836020015160405160200161098092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b82519091506001600160a01b03163314610a415760405162461bcd60e51b815260206004820152601760248201527f637573746f6469616e2063616e2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b42826020015111610a945760405162461bcd60e51b815260206004820152601a60248201527f7369676e6564207472616e73616374696f6e20657870697265640000000000006044820152606401610a38565b610aa182604001516108a9565b15610aee5760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742072652d757365207369676e61747572657300000000000000006044820152606401610a38565b610afb8260400151611d75565b610b1b818360400151610b16600e546001600160a01b031690565b611dad565b610b675760405162461bcd60e51b815260206004820152601660248201527f756e617574686f72697a6564207369676e6174757265000000000000000000006044820152606401610a38565b61ffff85166000908152600360205260409020849055505b50505050565b336000818152600a602090815260408083206001600160a01b038716845290915281205490919061089f9082908690610bbf908790612bfc565b6119eb565b610bcc611e62565b60065481610bd960075490565b610be39190612bfc565b1115610c315760405162461bcd60e51b815260206004820152601260248201527f4d415820535550504c59205245414348454400000000000000000000000000006044820152606401610a38565b610c4d81610c3e60075490565b610c489190612bfc565b600755565b610c578282611ebc565b5050565b600554600160a01b900460ff161515600114610cab5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b46610cb560045490565b14610cf55760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b6001546001600160a01b03163314610d4f5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420576f726d686f6c652052656c6179657200000000000000006044820152606401610a38565b30610d598461167f565b6001600160a01b03161480610d86575082610d848361ffff1660009081526003602052604090205490565b145b610dd25760405162461bcd60e51b815260206004820152600f60248201527f496e76616c696420456d697474657200000000000000000000000000000000006044820152606401610a38565b610ddc8582611f7d565b505050505050565b610dec611e62565b600554600160a01b900460ff1615610e465760405162461bcd60e51b815260206004820152601360248201527f416c726561647920496e697469616c697a6564000000000000000000000000006044820152606401610a38565b6000805461ffff191661ffff85161790556001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055610e8881600655565b610e926000600755565b610ec5600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b505050565b610ed2611e62565b610edc6000612118565b565b600554600090600160a01b900460ff161515600114610f315760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b46610f3b60045490565b14610f7b5760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b6000610f8f6001546001600160a01b031690565b60405163c23ee3c360e01b815261ffff8716600482015260006024820152620493e060448201526001600160a01b03919091169063c23ee3c3906064016040805180830381865afa158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100c9190612c14565b5090508034101561105f5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420776f726d686f6c6520676173000000000000006044820152606401610a38565b60005461ffff166110703388612177565b60006040518060c001604052808981526020018681526020018361ffff1681526020018781526020018861ffff1681526020016110b760055460ff600160a81b9091041690565b60ff16905290506110d06001546001600160a01b031690565b6001600160a01b0316634b5ca6f484896110e98961167f565b6110f2866114ed565b6000620493e061110560005461ffff1690565b336040518963ffffffff1660e01b81526004016111289796959493929190612c38565b60206040518083038185885af1158015611146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061116b9190612c92565b9350856111773361072c565b604080518b815261ffff86811660208301528b168183015290517fce2636d514abb08349f7cf4369885a4ac22355555ff0e1c6f99afc895a77f3669181900360600190a3505050949350505050565b806111d9600e546001600160a01b031690565b6001600160a01b0316336001600160a01b031614156112a55782518451146112335760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610a38565b60005b835181101561129f5761128d85828151811061125457611254612cbc565b602002602001015185838151811061126e5761126e612cbc565b602002602001015161ffff909116600090815260036020526040902055565b8061129781612cd2565b915050611236565b50610b7f565b60006112e28260000151836020015160405160200161098092919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b82519091506001600160a01b0316331461133e5760405162461bcd60e51b815260206004820152601760248201527f637573746f6469616e2063616e2063616c6c206f6e6c790000000000000000006044820152606401610a38565b428260200151116113915760405162461bcd60e51b815260206004820152601a60248201527f7369676e6564207472616e73616374696f6e20657870697265640000000000006044820152606401610a38565b61139e82604001516108a9565b156113eb5760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742072652d757365207369676e61747572657300000000000000006044820152606401610a38565b6113f88260400151611d75565b611413818360400151610b16600e546001600160a01b031690565b61145f5760405162461bcd60e51b815260206004820152601660248201527f756e617574686f72697a6564207369676e6174757265000000000000000000006044820152606401610a38565b83518551146114a05760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610a38565b60005b8451811015610ddc576114db8682815181106114c1576114c1612cbc565b602002602001015186838151811061126e5761126e612cbc565b806114e581612cd2565b9150506114a3565b6060816000015182602001518360400151846060015185608001518660a0015160405160200161159796959493929190958652602086019490945260f092831b7fffff0000000000000000000000000000000000000000000000000000000000009081166040870152604286019290925290911b16606283015260f81b7fff0000000000000000000000000000000000000000000000000000000000000016606482015260650190565b6040516020818303038152906040529050919050565b6060600d805461080e90612b95565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909190838110156116595760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a38565b61166682868684036119eb565b506001949350505050565b60003361089f818585611b9b565b600073ffffffffffffffffffffffffffffffffffffffff198216156116e65760405162461bcd60e51b815260206004820152601360248201527f696e76616c69642045564d2061646472657373000000000000000000000000006044820152606401610a38565b5090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529061172683826122ab565b8252611733602082612bfc565b905061173f8382612311565b6020808401919091526117529082612bfc565b905061175e838261236e565b61ffff166040830152611772600282612bfc565b905061177e8382612311565b606083015261178e602082612bfc565b905061179a838261236e565b61ffff1660808301526117ae600282612bfc565b90506117ba83826123d4565b60ff1660a08301526117cd600182612bfc565b90508083511461181f5760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964205472616e73666572000000000000000000000000000000006044820152606401610a38565b50919050565b61182d611e62565b6001600160a01b0381166118a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a38565b6118b281612118565b50565b600554600090600160a01b900460ff1615156001146119085760405162461bcd60e51b815260206004820152600f60248201526e139bdd08125b9a5d1a585b1a5e9959608a1b6044820152606401610a38565b4661191260045490565b146119525760405162461bcd60e51b815260206004820152601060248201526f756e737570706f7274656420666f726b60801b6044820152606401610a38565b60006119666001546001600160a01b031690565b60405163c23ee3c360e01b815261ffff8516600482015260006024820152620493e060448201526001600160a01b03919091169063c23ee3c3906064016040805180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190612c14565b509392505050565b6001600160a01b038316611a4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a38565b6001600160a01b038216611aae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a38565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600a60209081526040808320938616835292905220546000198114610b7f5781811015611b8e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a38565b610b7f84848484036119eb565b6001600160a01b038316611c175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b038216611c795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a38565b6001600160a01b03831660009081526009602052604090205481811015611d085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b0380851660008181526009602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d689086815260200190565b60405180910390a3610b7f565b6001600060080182604051611d8a9190612bca565b908152604051908190036020019020805491151560ff1990921691909117905550565b600080600080611dbc8661243a565b925092509250600060018885858560405160008152602001604052604051611e00949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015611e22573d6000803e3d6000fd5b505050602060405103519050856001600160a01b0316816001600160a01b03161415611e555760019450505050506108f5565b60009450505050506108f5565b600e546001600160a01b03163314610edc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a38565b6001600160a01b038216611f125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a38565b80600b6000828254611f249190612bfc565b90915550506001600160a01b0382166000818152600960209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606000611f8a846116ea565b90506000611f9b826060015161167f565b60008581526002602052604090205490915060ff1615611ffd5760405162461bcd60e51b815260206004820152601a60248201527f7472616e7366657220616c726561647920636f6d706c657465640000000000006044820152606401610a38565b61201c846000908152600260205260409020805460ff19166001179055565b60005461ffff1661ffff16826080015161ffff161461207d5760405162461bcd60e51b815260206004820152601460248201527f696e76616c69642074617267657420636861696e0000000000000000000000006044820152606401610a38565b60006120a583600001518460a001516120a060055460ff600160a81b9091041690565b612469565b90506120b18282611ebc565b82606001517fdf5e04c9235e5b4ddaec2baee15dc9c74de339075fa433a8dd25ebbc0719857b82856040015186608001516040516121069392919092835261ffff918216602084015216604082015260600190565b60405180910390a25093949350505050565b600e80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166121d75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a38565b6001600160a01b0382166000908152600960205260409020548181101561224b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a38565b6001600160a01b03831660008181526009602090815260408083208686039055600b80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006122b8826020612bfc565b835110156123085760405162461bcd60e51b815260206004820152601560248201527f746f55696e743235365f6f75744f66426f756e647300000000000000000000006044820152606401610a38565b50016020015190565b600061231e826020612bfc565b835110156123085760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610a38565b600061237b826002612bfc565b835110156123cb5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610a38565b50016002015190565b60006123e1826001612bfc565b835110156124315760405162461bcd60e51b815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610a38565b50016001015190565b6000806000835160411461244d57600080fd5b5050506020810151604082015160609092015160001a92909190565b60008160ff168360ff16111561249b576124838284612ced565b61248e90600a612df4565b6124989085612e03565b93505b8260ff168260ff1611156124cb576124b38383612ced565b6124be90600a612df4565b6124c89085612e25565b93505b509192915050565b6000602082840312156124e557600080fd5b81356001600160e01b0319811681146108f557600080fd5b60005b83811015612518578181015183820152602001612500565b83811115610b7f5750506000910152565b600081518084526125418160208601602086016124fd565b601f01601f19169290920160200192915050565b6020815260006108f56020830184612529565b80356001600160a01b038116811461257f57600080fd5b919050565b6000806040838503121561259757600080fd5b6125a083612568565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125ed576125ed6125ae565b604052919050565b600082601f83011261260657600080fd5b813567ffffffffffffffff811115612620576126206125ae565b612633601f8201601f19166020016125c4565b81815284602083860101111561264857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561267757600080fd5b813567ffffffffffffffff81111561268e57600080fd5b61269a848285016125f5565b949350505050565b6000806000606084860312156126b757600080fd5b6126c084612568565b92506126ce60208501612568565b9150604084013590509250925092565b803561ffff8116811461257f57600080fd5b60006060828403121561270257600080fd5b6040516060810167ffffffffffffffff8282108183111715612726576127266125ae565b8160405282935061273685612568565b835260208501356020840152604085013591508082111561275657600080fd5b50612763858286016125f5565b6040830152505092915050565b60008060006060848603121561278557600080fd5b61278e846126de565b925060208401359150604084013567ffffffffffffffff8111156127b157600080fd5b6127bd868287016126f0565b9150509250925092565b600067ffffffffffffffff8211156127e1576127e16125ae565b5060051b60200190565b600080600080600060a0868803121561280357600080fd5b853567ffffffffffffffff8082111561281b57600080fd5b61282789838a016125f5565b965060209150818801358181111561283e57600080fd5b8801601f81018a1361284f57600080fd5b803561286261285d826127c7565b6125c4565b81815260059190911b8201840190848101908c83111561288157600080fd5b8584015b838110156128b95780358681111561289d5760008081fd5b6128ab8f89838901016125f5565b845250918601918601612885565b509850505050604088013594506128d5915050606087016126de565b949793965091946080013592915050565b6000602082840312156128f857600080fd5b6108f582612568565b60008060006060848603121561291657600080fd5b6126c0846126de565b6000806000806080858703121561293557600080fd5b84359350612945602086016126de565b93969395505050506040820135916060013590565b600082601f83011261296b57600080fd5b8135602061297b61285d836127c7565b82815260059290921b8401810191818101908684111561299a57600080fd5b8286015b848110156129b5578035835291830191830161299e565b509695505050505050565b6000806000606084860312156129d557600080fd5b833567ffffffffffffffff808211156129ed57600080fd5b818601915086601f830112612a0157600080fd5b81356020612a1161285d836127c7565b82815260059290921b8401810191818101908a841115612a3057600080fd5b948201945b83861015612a5557612a46866126de565b82529482019490820190612a35565b97505087013592505080821115612a6b57600080fd5b612a778783880161295a565b93506040860135915080821115612a8d57600080fd5b506127bd868287016126f0565b600060c08284031215612aac57600080fd5b60405160c0810181811067ffffffffffffffff82111715612acf57612acf6125ae565b80604052508235815260208301356020820152612aee604084016126de565b604082015260608301356060820152612b09608084016126de565b608082015260a083013560ff81168114612b2257600080fd5b60a08201529392505050565b600060208284031215612b4057600080fd5b5035919050565b60008060408385031215612b5a57600080fd5b612b6383612568565b9150612b7160208401612568565b90509250929050565b600060208284031215612b8c57600080fd5b6108f5826126de565b600181811c90821680612ba957607f821691505b6020821081141561181f57634e487b7160e01b600052602260045260246000fd5b60008251612bdc8184602087016124fd565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612c0f57612c0f612be6565b500190565b60008060408385031215612c2757600080fd5b505080516020909101519092909150565b600061ffff808a1683526001600160a01b03808a16602085015260e06040850152612c6660e085018a612529565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b600060208284031215612ca457600080fd5b815167ffffffffffffffff811681146108f557600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ce657612ce6612be6565b5060010190565b600060ff821660ff841680821015612d0757612d07612be6565b90039392505050565b600181815b80851115612d4b578160001904821115612d3157612d31612be6565b80851615612d3e57918102915b93841c9390800290612d15565b509250929050565b600082612d62575060016107f9565b81612d6f575060006107f9565b8160018114612d855760028114612d8f57612dab565b60019150506107f9565b60ff841115612da057612da0612be6565b50506001821b6107f9565b5060208310610133831016604e8410600b8410161715612dce575081810a6107f9565b612dd88383612d10565b8060001904821115612dec57612dec612be6565b029392505050565b60006108f560ff841683612d53565b600082612e2057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e3f57612e3f612be6565b50029056fea164736f6c634300080a000a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000a4772696e6465727920580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024758000000000000000000000000000000000000000000000000000000000000