0x60a060405230608052348015610013575f5ffd5b5061001c610029565b610024610029565b6100e5565b5f54610100900460ff16156100945760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100e3575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516127816101195f395f8181610665015281816106ae015281816108260152818161086601526108e101526127815ff3fe6080604052600436106101db575f3560e01c8063715018a6116100fd578063a86f9d9e11610092578063f0a88aad11610062578063f0a88aad1461052e578063f2fde38b14610542578063f3fef3a314610561578063fe904b7a14610580575f5ffd5b8063a86f9d9e146104ba578063e07baba6146104d9578063e1de7c80146104fc578063e30c397814610511575f5ffd5b80638da5cb5b116100cd5780638da5cb5b1461042157806392c2bcb41461043e5780639a9f738c1461045d578063a4317ef41461047c575f5ffd5b8063715018a6146103d157806379ba5097146103e55780638456cb59146103f95780638abf60771461040d575f5ffd5b80633f4ba83a116101735780635c975abb116101435780635c975abb1461035457806366d003ac146103745780636b56979b146103935780636ca471dc146103b2575f5ffd5b80633f4ba83a146102fa5780634f1ef2861461030e57806352d1902d146103215780635c19a95c14610335575f5ffd5b80633659cfe6116101ae5780633659cfe61461026f5780633ab76e9f146102905780633ccfd60b146102c75780633eb6b8cf146102db575f5ffd5b806316d3bfbb146101df5780631c12cfef1461020957806321d8096b146102475780633075db561461025b575b5f5ffd5b3480156101ea575f5ffd5b506101f66301e1338081565b6040519081526020015b60405180910390f35b348015610214575f5ffd5b50610237610223366004611e11565b60fd6020525f908152604090205460ff1681565b6040519015158152602001610200565b348015610252575f5ffd5b506101f6610594565b348015610266575f5ffd5b50610237610643565b34801561027a575f5ffd5b5061028e610289366004611e11565b61065b565b005b34801561029b575f5ffd5b506097546102af906001600160a01b031681565b6040516001600160a01b039091168152602001610200565b3480156102d2575f5ffd5b5061028e61072b565b3480156102e6575f5ffd5b506102af6102f5366004611e5b565b6107f6565b348015610305575f5ffd5b5061028e61080a565b61028e61031c366004611eac565b61081c565b34801561032c575f5ffd5b506101f66108d5565b348015610340575f5ffd5b5061028e61034f366004611e11565b610986565b34801561035f575f5ffd5b5061023760c954610100900460ff1660021490565b34801561037f575f5ffd5b5060fc546102af906001600160a01b031681565b34801561039e575f5ffd5b5061028e6103ad366004611f6f565b610a64565b3480156103bd575f5ffd5b5061028e6103cc366004611fc6565b610c29565b3480156103dc575f5ffd5b5061028e610d12565b3480156103f0575f5ffd5b5061028e610d23565b348015610404575f5ffd5b5061028e610d9a565b348015610418575f5ffd5b506102af610dad565b34801561042c575f5ffd5b506033546001600160a01b03166102af565b348015610449575f5ffd5b5061028e610458366004611e11565b610dbb565b348015610468575f5ffd5b5061028e610477366004611ff0565b610e9b565b348015610487575f5ffd5b5060fc546104a290600160a01b90046001600160401b031681565b6040516001600160401b039091168152602001610200565b3480156104c5575f5ffd5b506102af6104d4366004612016565b610f9a565b3480156104e4575f5ffd5b5060c9546201000090046001600160401b03166104a2565b348015610507575f5ffd5b506101f660fb5481565b34801561051c575f5ffd5b506065546001600160a01b03166102af565b348015610539575f5ffd5b506102af610faf565b34801561054d575f5ffd5b5061028e61055c366004611e11565b61113a565b34801561056c575f5ffd5b5061028e61057b366004611fc6565b6111ab565b34801561058b575f5ffd5b506101f66112f0565b5f5f6105ae6a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106199190612044565b90505f610624611302565b90508061063183826113b8565b61063b919061206f565b935050505090565b5f600261065260c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106ac5760405162461bcd60e51b81526004016106a390612082565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106de6113cd565b6001600160a01b0316146107045760405162461bcd60e51b81526004016106a3906120ce565b61070d816113e8565b604080515f80825260208201909252610728918391906113f0565b50565b600261073960c95460ff1690565b60ff160361075a5760405163dfc60d8560e01b815260040160405180910390fd5b610764600261155a565b5f61076d610594565b60fc546040518281529192506001600160a01b0316907fa2bd9fcfcdba69f52bcd9a520846ad4bd685b187483f53efc42d035b2ddebff09060200160405180910390a260fc546107e9906001600160a01b0316826107d96a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6001600160a01b03169190611570565b506107f4600161155a565b565b5f6108028484846115d3565b949350505050565b61081261162f565b6107f4335f6116bf565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108645760405162461bcd60e51b81526004016106a390612082565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108966113cd565b6001600160a01b0316146108bc5760405162461bcd60e51b81526004016106a3906120ce565b6108c5826113e8565b6108d1828260016113f0565b5050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109745760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106a3565b505f5160206127055f395f51905f5290565b60fc546001600160a01b031633146109b15760405163e5816e1960e01b815260040160405180910390fd5b60026109bf60c95460ff1690565b60ff16036109e05760405163dfc60d8560e01b815260040160405180910390fd5b6109ea600261155a565b610a026a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6040516317066a5760e21b81526001600160a01b0383811660048301529190911690635c19a95c906024015f604051808303815f87803b158015610a44575f5ffd5b505af1158015610a56573d5f5f3e3d5ffd5b50505050610728600161155a565b816001600160a01b038116610a8c5760405163538ba4f960e01b815260040160405180910390fd5b816001600160401b0316805f03610ab65760405163ec73295960e01b815260040160405180910390fd5b5f54610100900460ff1615808015610ad457505f54600160ff909116105b80610aed5750303b158015610aed57505f5460ff166001145b610b505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a3565b5f805460ff191660011790558015610b71575f805461ff0019166101001790555b846001600160a01b0316876001600160a01b031603610ba3576040516322ee6ae760e01b815260040160405180910390fd5b610bad87876116c7565b60fc80546001600160401b038616600160a01b026001600160e01b03199091166001600160a01b038816171790558015610c20575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b80805f03610c4a5760405163ec73295960e01b815260040160405180910390fd5b60fc546001600160a01b03163314610c755760405163e5816e1960e01b815260040160405180910390fd5b6001600160a01b0383165f90815260fd602052604090205460ff16610cad57604051635130348360e11b815260040160405180910390fd5b826001600160a01b03167fa930ec009eec2ece0c7a4c0f9afbb3c2a3e9b1420786f5bbe8cafc861166117683604051610ce891815260200190565b60405180910390a2610d0d83836107d96a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b505050565b610d1a611701565b6107f45f61175b565b60655433906001600160a01b03168114610d915760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106a3565b6107288161175b565b610da2611774565b6107f43360016116bf565b5f610db66113cd565b905090565b60fc546001600160a01b03163314801590610de157506033546001600160a01b03163314155b15610dff5760405163e5816e1960e01b815260040160405180910390fd5b6001600160a01b0381161580610e22575060fc546001600160a01b038281169116145b15610e40576040516322ee6ae760e01b815260040160405180910390fd5b60fc546040516001600160a01b038084169216907f4a9d367b1b0cd787be10021f1c55cb49c9f2302334e6df35c9621005eb222514905f90a360fc80546001600160a01b0319166001600160a01b0392909216919091179055565b6002610ea960c95460ff1690565b60ff1603610eca5760405163dfc60d8560e01b815260040160405180910390fd5b610ed4600261155a565b806001600160801b03165f03610efd576040516322ee6ae760e01b815260040160405180910390fd5b806001600160801b031660fb5f828254610f17919061211a565b90915550506040516001600160801b03821681527fd5cae025fa70f93147df3628885f9ddd7976bb7dd8a8ec1f2abe24ec194b981a9060200160405180910390a1610f903330836001600160801b0316610f7f6a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6001600160a01b03169291906117e5565b610728600161155a565b5f610fa64684846115d3565b90505b92915050565b60fc545f906001600160a01b03163314610fdc5760405163e5816e1960e01b815260040160405180910390fd5b610ff46a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6001600160a01b0316611014693137b7322fba37b5b2b760b11b5f610f9a565b6001600160a01b03161461103b5760405163acda910b60e01b815260040160405180910390fd5b5f61104e6033546001600160a01b031690565b6097546040516001600160a01b0392831660248201523060448201529116606482015260840160408051601f198184030181529190526020810180516001600160e01b031663184b955960e01b17905290506110b7691c1c9bdd995c97dcd95d60b21b5f610f9a565b816040516110c490611df0565b6110cf92919061215b565b604051809103905ff0801580156110e8573d5f5f3e3d5ffd5b506001600160a01b0381165f81815260fd6020526040808220805460ff191660011790555192945090917fcfd81b6b68ae45b08902d9ace4509ada07532538cb741f24c505cca9b73b63409190a25090565b611142611701565b606580546001600160a01b0383166001600160a01b031990911681179091556111736033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b816001600160a01b0381166111d35760405163538ba4f960e01b815260040160405180910390fd5b81805f036111f45760405163ec73295960e01b815260040160405180910390fd5b60fc546001600160a01b0316331461121f5760405163e5816e1960e01b815260040160405180910390fd5b600261122d60c95460ff1690565b60ff160361124e5760405163dfc60d8560e01b815260040160405180910390fd5b611258600261155a565b611260610594565b8311156112805760405163f90c7ee560e01b815260040160405180910390fd5b836001600160a01b03167fa2bd9fcfcdba69f52bcd9a520846ad4bd685b187483f53efc42d035b2ddebff0846040516112bb91815260200190565b60405180910390a26112e084846107d96a3a30b4b5b7afba37b5b2b760a91b5f610f9a565b6112ea600161155a565b50505050565b6112ff6301e13380600461217e565b81565b60fb545f90808203611315575f91505090565b60fc54600160a01b90046001600160401b03166113366301e133808261211a565b4210156113435750919050565b6113526301e13380600461217e565b61135c908261211a565b421061136a575f9250505090565b6113796301e13380600461217e565b426113896301e13380600461217e565b611393908461211a565b61139d919061206f565b6113a7908461217e565b6113b19190612195565b9250505090565b5f8183116113c65781610fa6565b5090919050565b5f5160206127055f395f51905f52546001600160a01b031690565b610728611701565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561142357610d0d8361181d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561147d575060408051601f3d908101601f1916820190925261147a91810190612044565b60015b6114e05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106a3565b5f5160206127055f395f51905f52811461154e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106a3565b50610d0d8383836118b8565b60c9805460ff191660ff92909216919091179055565b6040516001600160a01b038316602482015260448101829052610d0d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118dc565b5f6115de84846119af565b905081806115f457506001600160a01b03811615155b8484909161162657604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016106a3565b50509392505050565b61164360c954610100900460ff1660021490565b6116605760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108d1611701565b806001600160a01b0381166116ef5760405163538ba4f960e01b815260040160405180910390fd5b6116f883611a51565b610d0d82611aaf565b6033546001600160a01b031633146107f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a3565b606580546001600160a01b031916905561072881611b1f565b61178860c954610100900460ff1660021490565b156117a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116b5565b6040516001600160a01b03808516602483015283166044820152606481018290526112ea9085906323b872dd60e01b9060840161159c565b6001600160a01b0381163b61188a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106a3565b5f5160206127055f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6118c183611b70565b5f825111806118cd5750805b15610d0d576112ea8383611baf565b5f611930826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bd49092919063ffffffff16565b905080515f148061195057508080602001905181019061195091906121b4565b610d0d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a3565b6097545f906001600160a01b0316806119db57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611a2d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080291906121cf565b5f54610100900460ff16611a775760405162461bcd60e51b81526004016106a3906121ea565b611a7f611be2565b611a9d6001600160a01b03821615611a97578161175b565b3361175b565b5060c9805461ff001916610100179055565b5f54610100900460ff16611ad55760405162461bcd60e51b81526004016106a3906121ea565b6001600160401b03461115611afd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611b798161181d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610fa6838360405180606001604052806027815260200161272560279139611c08565b606061080284845f85611c7c565b5f54610100900460ff166107f45760405162461bcd60e51b81526004016106a3906121ea565b60605f5f856001600160a01b031685604051611c249190612235565b5f60405180830381855af49150503d805f8114611c5c576040519150601f19603f3d011682016040523d82523d5f602084013e611c61565b606091505b5091509150611c7286838387611d53565b9695505050505050565b606082471015611cdd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a3565b5f5f866001600160a01b03168587604051611cf89190612235565b5f6040518083038185875af1925050503d805f8114611d32576040519150601f19603f3d011682016040523d82523d5f602084013e611d37565b606091505b5091509150611d4887838387611d53565b979650505050505050565b60608315611dc15782515f03611dba576001600160a01b0385163b611dba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a3565b5081610802565b6108028383815115611dd65781518083602001fd5b8060405162461bcd60e51b81526004016106a3919061224b565b6104a78061225e83390190565b6001600160a01b0381168114610728575f5ffd5b5f60208284031215611e21575f5ffd5b8135611e2c81611dfd565b9392505050565b80356001600160401b0381168114611e49575f5ffd5b919050565b8015158114610728575f5ffd5b5f5f5f60608486031215611e6d575f5ffd5b611e7684611e33565b9250602084013591506040840135611e8d81611e4e565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215611ebd575f5ffd5b8235611ec881611dfd565b915060208301356001600160401b03811115611ee2575f5ffd5b8301601f81018513611ef2575f5ffd5b80356001600160401b03811115611f0b57611f0b611e98565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611f3957611f39611e98565b604052818152828201602001871015611f50575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215611f82575f5ffd5b8435611f8d81611dfd565b93506020850135611f9d81611dfd565b92506040850135611fad81611dfd565b9150611fbb60608601611e33565b905092959194509250565b5f5f60408385031215611fd7575f5ffd5b8235611fe281611dfd565b946020939093013593505050565b5f60208284031215612000575f5ffd5b81356001600160801b0381168114611e2c575f5ffd5b5f5f60408385031215612027575f5ffd5b82359150602083013561203981611e4e565b809150509250929050565b5f60208284031215612054575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610fa957610fa961205b565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b80820180821115610fa957610fa961205b565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190525f906108029083018461212d565b8082028115828204841417610fa957610fa961205b565b5f826121af57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156121c4575f5ffd5b8151611e2c81611e4e565b5f602082840312156121df575f5ffd5b8151611e2c81611dfd565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610fa6602083018461212d56fe60806040526040516104a73803806104a7833981016040819052610022916102b0565b61002d82825f610034565b50506103ca565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104806027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b031685604051610199919061037f565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b81526004016101339190610395565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156102c1575f5ffd5b82516001600160a01b03811681146102d7575f5ffd5b60208401519092506001600160401b038111156102f2575f5ffd5b8301601f81018513610302575f5ffd5b80516001600160401b0381111561031b5761031b61029c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103495761034961029c565b604052818152828201602001871015610360575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60aa806103d65f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea2646970667358221220792b771a0f927a155f6deebc97cc8132f95fd63df5796c32ac51c0775610f38b64736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207f74afa7522493323392051c5f05cf15da0910f5837078b06c94bd8fa7210b6464736f6c634300081b0033