0x608060405262093a80600a556000600c819055600f8190556010556016805460ff191690553480156200003157600080fd5b50604051620026d3380380620026d383398101604081905262000054916200019e565b836001600160a01b038116620000b05760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a15060016002819055600580546001600160a01b03199081166001600160a01b0396871690811790925560048054821690921790915560038054821693861693909317909255426008556006805490921692841692909217905591166000908152600b60205260409020805460ff19169091179055620001fb565b80516001600160a01b03811681146200019957600080fd5b919050565b60008060008060808587031215620001b557600080fd5b620001c08562000181565b9350620001d06020860162000181565b9250620001e06040860162000181565b9150620001f06060860162000181565b905092959194509250565b6124c8806200020b6000396000f3fe608060405234801561001057600080fd5b50600436106102c75760003560e01c80638980f11f1161017b578063bdacb303116100d8578063e295f1801161008c578063ebe2b12b11610071578063ebe2b12b1461060b578063fc939bb114610614578063fff6cae91461061c57600080fd5b8063e295f180146105e2578063e9218ff6146105eb57600080fd5b8063c8f33c91116100bd578063c8f33c91146105b0578063dc6663c7146105b9578063e172cf21146105d957600080fd5b8063bdacb30314610595578063c2c4c5c1146105a857600080fd5b8063948e25a21161012f578063a4bc8dd511610114578063a4bc8dd514610545578063a875f47214610568578063ad1148cb1461058857600080fd5b8063948e25a21461051f5780639f8a835a1461053257600080fd5b80638da5cb5b116101605780638da5cb5b146104d957806391519bda146104f9578063941d9f651461050c57600080fd5b80638980f11f1461049e5780638c322a0b146104b157600080fd5b806342c92f6e116102295780636999ac93116101dd57806379ba5097116101c257806379ba5097146104865780637c2628711461048e5780637cc7deff1461049657600080fd5b80636999ac931461046a57806374ea0b981461047357600080fd5b806353a47bb71161020e57806353a47bb71461042257806356d9fff3146104425780635d13182e1461044a57600080fd5b806342c92f6e146103ef57806350fe98ac1461040257600080fd5b806331ca208c1161028057806338acf26a1161026557806338acf26a146103b35780633c6b16ab146103bc5780633f0569ca146103cf57600080fd5b806331ca208c1461034b57806338359fc21461036e57600080fd5b80631627540c116102b15780631627540c1461032557806319aec6d21461033a5780632fb1f7d81461034257600080fd5b80628cc262146102cc57806314b30537146102f2575b600080fd5b6102df6102da3660046121e5565b610624565b6040519081526020015b60405180910390f35b6103156103003660046121e5565b60116020526000908152604090205460ff1681565b60405190151581526020016102e9565b6103386103333660046121e5565b61081c565b005b6102df610942565b6102df600f5481565b6103156103593660046121e5565b60156020526000908152604090205460ff1681565b60055461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e9565b6102df600c5481565b6103386103ca366004612200565b610960565b6102df6103dd3660046121e5565b60126020526000908152604090205481565b6103386103fd3660046121e5565b610ab8565b6102df6104103660046121e5565b600e6020526000908152604090205481565b60015461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df610baf565b6102df6104583660046121e5565b60136020526000908152604090205481565b6102df60095481565b610338610481366004612200565b610bbd565b610338610d57565b6102df610ea2565b6102df6110c2565b6103386104ac366004612219565b611107565b6104c46104bf3660046121e5565b611222565b604080519283526020830191909152016102e9565b60005461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b610338610507366004612251565b61131e565b61033861051a3660046121e5565b6113d8565b61033861052d366004612281565b6114cf565b6103386105403660046121e5565b6115a3565b6103156105533660046121e5565b600b6020526000908152604090205460ff1681565b6102df6105763660046121e5565b600d6020526000908152604090205481565b6016546103159060ff1681565b6103386105a33660046121e5565b6115af565b610338611699565b6102df60085481565b60065461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df600a5481565b6102df60105481565b60045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df60075481565b6102df6116a4565b6103386116c4565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205460ff1661065957506000919050565b60008061066584611222565b9092509050620f424060008390036107325773ffffffffffffffffffffffffffffffffffffffff851660009081526014602052604090205482116106ae57506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601460205260408120546106df908490611773565b73ffffffffffffffffffffffffffffffffffffffff871660009081526014602052604081205491925090610714904290611773565b905061072d81610727620f4240856117be565b90611876565b925050505b73ffffffffffffffffffffffffffffffffffffffff8516600090815260126020526040812054808511156107685780915061077a565b610777600261072787846118b8565b91505b5073ffffffffffffffffffffffffffffffffffffffff86166000908152600e60205260409020546108129061080c6107bd620f4240670de0b6b3a76400006122cd565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600d6020526040902054610727908790610806906107ff906107f96110c2565b90611773565b88906117be565b906117be565b906118b8565b9695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e000000000000000000000000000000000060648201526084015b60405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b600061095b600a546009546117be90919063ffffffff16565b905090565b336000908152600b602052604090205460ff166109d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53656e646572206e6f742077686974656c69737465640000000000000000000060448201526064016108bf565b6004546109fe9073ffffffffffffffffffffffffffffffffffffffff16333084611931565b610a066116c4565b6007544210610a2557600a54610a1d908290611876565b600955610a68565b600754600090610a359042611773565b90506000610a4e600954836117be90919063ffffffff16565b600a54909150610a629061072785846118b8565b60095550505b426008819055600a54610a7b91906118b8565b6007556009546040805183815260208101929092527f6c07ee05dcf262f13abf9d87b846ee789d2f90fe991d495acd7d7fc109ee1f559101610937565b60005473ffffffffffffffffffffffffffffffffffffffff16331480610af5575060065473ffffffffffffffffffffffffffffffffffffffff1633145b610b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b73ffffffffffffffffffffffffffffffffffffffff166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b600061095b426007546119cc565b60005473ffffffffffffffffffffffffffffffffffffffff16331480610bfa575060065473ffffffffffffffffffffffffffffffffffffffff1633145b610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b6007541580610c70575060075442115b610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726576696f7573207969656c6420706572696f64206d75737420626520636f60448201527f6d706c657465206265666f7265206368616e67696e672074686520647572617460648201527f696f6e20666f7220746865206e657720706572696f6400000000000000000000608482015260a4016108bf565b600a8190556040518181527fce653f06b9044b00e7d9d01b9b4228e84812092cb6a38371889bef19370d21f790602001610937565b60015473ffffffffffffffffffffffffffffffffffffffff163314610dfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e657273686970000000000000000000000060648201526084016108bf565b6000546001546040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60006002805403610f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108bf565b6002805560165460ff1615610f80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5969656c6420636f6c6c656374696f6e2069732070617573656400000000000060448201526064016108bf565b33610f8a816119e2565b3360009081526015602052604090205460ff1615611004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4164647265737320686173206265656e20677265796c6973746564000000000060448201526064016108bf565b336000908152600e6020526040902054915081156110a757336000818152600e60205260408120556005546110529173ffffffffffffffffffffffffffffffffffffffff9091169084611c50565b6005546040805184815273ffffffffffffffffffffffffffffffffffffffff909216602083015233917f3998039806f6db7e5d83a5371638cc47dd2e9ae500d5d561d95ec6381f53e3cd910160405180910390a25b50336000908152601460205260409020429055600160025590565b60006010546000036110d55750600c5490565b61095b6110fe601054610727670de0b6b3a76400006108066009546108066008546107f9610baf565b600c54906118b8565b60005473ffffffffffffffffffffffffffffffffffffffff16331480611144575060065473ffffffffffffffffffffffffffffffffffffffff1633145b6111aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b6000546111cf90839073ffffffffffffffffffffffffffffffffffffffff1683611c50565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f55350610fe57096d8c0ffa30beede987326bccfcb0b4415804164d0dd50ce8b1910160405180910390a15050565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009283928392909116906370a0823190602401602060405180830381865afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906122e4565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601360205260409020549250905081158015906112f65750814210155b156113045760009250611318565b8142106113145760009250611318565b8092505b50915091565b60005473ffffffffffffffffffffffffffffffffffffffff1633148061135b575060065473ffffffffffffffffffffffffffffffffffffffff1633145b6113c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b600982905580156113d4576113d46116c4565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331480611415575060065473ffffffffffffffffffffffffffffffffffffffff1633145b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b73ffffffffffffffffffffffffffffffffffffffff16600090815260156020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633148061150c575060065473ffffffffffffffffffffffffffffffffffffffff1633145b611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6115ac816119e2565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314806115ec575060065473ffffffffffffffffffffffffffffffffffffffff1633145b611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b000000000000000000000060448201526064016108bf565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116a2336119e2565b565b600061095b601054610727620f4240600f546117be90919063ffffffff16565b6116cc6110c2565b600c55600354604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216916318160ddd916004808201926020929091908290030181865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906122e4565b60105561176e610baf565b600855565b60006117b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dc0565b90505b92915050565b6000826000036117d0575060006117b8565b60006117dc83856122cd565b9050826117e985836122fd565b146117b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f770000000000000000000000000000000000000000000000000000000000000060648201526084016108bf565b60006117b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e16565b6000806118c58385612338565b9050838110156117b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108bf565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526119c6908590611e5e565b50505050565b60008183106119db57816117b5565b5090919050565b6119ea6116c4565b6119f381611f6f565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152601260205260408082205460035491517f70a0823100000000000000000000000000000000000000000000000000000000815260048101949094529391929116906370a0823190602401602060405180830381865afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b91906122e4565b73ffffffffffffffffffffffffffffffffffffffff84811660008181526012602052604080822085905560035490517fcbf9fe5f0000000000000000000000000000000000000000000000000000000081526004810193909352939450929091169063cbf9fe5f906024016040805180830381865afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b46919061234b565b60208082015173ffffffffffffffffffffffffffffffffffffffff8716600090815260139092526040909120559050828210611ba1576000611b888385611773565b600f54909150611b9890826118b8565b600f5550611bc2565b6000611bad8484611773565b600f54909150611bbd9082611773565b600f55505b73ffffffffffffffffffffffffffffffffffffffff841660009081526011602052604090205460ff166119c65773ffffffffffffffffffffffffffffffffffffffff8416600090815260116020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556014909152902042905550505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611ce791906123f5565b6000604051808303816000865af19150503d8060008114611d24576040519150601f19603f3d011682016040523d82523d6000602084013e611d29565b606091505b5091509150818015611d53575080511580611d53575080806020019051810190611d539190612411565b611db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016108bf565b5050505050565b60008184841115611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf919061242e565b506000611e0b848661247f565b9150505b9392505050565b60008183611e51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf919061242e565b506000611e0b84866122fd565b6000611ec0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611fd29092919063ffffffff16565b805190915015611f6a5780806020019051810190611ede9190612411565b611f6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108bf565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116156115ac576000611f9682610624565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e6020908152604080832093909355600c54600d909152919020555050565b6060611fe18484600085611fe9565b949350505050565b60608247101561207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108bf565b843b6120e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161210c91906123f5565b60006040518083038185875af1925050503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b509150915061215e828286612169565b979650505050505050565b60608315612178575081611e0f565b8251156121885782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf919061242e565b803573ffffffffffffffffffffffffffffffffffffffff811681146121e057600080fd5b919050565b6000602082840312156121f757600080fd5b6117b5826121bc565b60006020828403121561221257600080fd5b5035919050565b6000806040838503121561222c57600080fd5b612235836121bc565b946020939093013593505050565b80151581146115ac57600080fd5b6000806040838503121561226457600080fd5b82359150602083013561227681612243565b809150509250929050565b60006020828403121561229357600080fd5b81356117b581612243565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176117b8576117b861229e565b6000602082840312156122f657600080fd5b5051919050565b600082612333577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808201808211156117b8576117b861229e565b60006040828403121561235d57600080fd5b6040516040810181811067ffffffffffffffff821117156123a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251600f81900b81146123bc57600080fd5b81526020928301519281019290925250919050565b60005b838110156123ec5781810151838201526020016123d4565b50506000910152565b600082516124078184602087016123d1565b9190910192915050565b60006020828403121561242357600080fd5b81516117b581612243565b602081526000825180602084015261244d8160408501602087016123d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b818103818111156117b8576117b861229e56fea2646970667358221220cae4753da586f3f38f477c9256b36d282e25cb80ede05a714f83d097dee4bec864736f6c63430008110033000000000000000000000000ff5b4bcbf765fe363269114e1c765229a29edefd000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca000000000000000000000000574c154c83432b0a45ba3ad2429c3fa242ed7359