0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80638f81c508116100ee578063bf848f8111610097578063e268474711610071578063e26847471461040c578063e29b9d0a14610433578063f93554ae14610453578063ff7aab801461047a576101ae565b8063bf848f81146103b9578063d367ab95146103d9578063d547741f146103f9576101ae565b8063a217fddf116100c8578063a217fddf1461037e578063a4b7eeaf14610386578063b2016bd414610399576101ae565b80638f81c5081461030057806391d1485414610313578063a125142b14610357576101ae565b8063379607f51161015b578063504006ca11610135578063504006ca146102885780635c975abb146102a85780636999b377146102b35780638456cb59146102f8576101ae565b8063379607f51461025a5780633ed4c6781461026d5780633f4ba83a14610280576101ae565b80632f2ff15d1161018c5780632f2ff15d1461022157806336568abe14610234578063371fd8e614610247576101ae565b806301ffc9a7146101b357806315a0ea6a146101db578063248a9ca3146101f0575b600080fd5b6101c66101c13660046130a8565b61049a565b60405190151581526020015b60405180910390f35b6101ee6101e93660046130e8565b610533565b005b6102136101fe366004613061565b60009081526020819052604090206001015490565b6040519081526020016101d2565b6101ee61022f366004613079565b610666565b6101ee610242366004613079565b610691565b6101ee610255366004613061565b610749565b6101ee610268366004613061565b610dbb565b6101ee61027b3660046130e8565b611399565b6101ee61140c565b61029b610296366004613061565b611423565b6040516101d291906132bb565b60015460ff166101c6565b6008546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101ee611536565b61021361030e366004613104565b61154a565b6101c6610321366004613079565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102137f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e81565b610213600081565b6101ee610394366004613001565b611a35565b6007546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6005546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6101ee610407366004613079565b612234565b6102137f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e81565b600a546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6102137f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb81565b6006546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061052d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb61055f81335b612263565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff91906131b5565b905061060c833383612333565b6040805173ffffffffffffffffffffffffffffffffffffffff8516815233602082015280820183905290517ffe3464cd748424446c37877c28ce5b700222c5bc9f90d908afcc4e5cb22707ff9181900360600190a1505050565b600082815260208190526040902060010154610682813361055a565b61068c83836123c0565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61074582826124b0565b5050565b7f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e610774813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff9091169081111561083c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610874577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90525090506002816060015160048111156108b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a72657061793a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b600061096a82604001516040015183604001516020015161256790919063ffffffff16565b9050600061097f83604001516080015161257a565b905081811015610a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c6f616e436f72653a3a72657061793a20496e73756666696369656e7420726560448201527f7061796d656e74000000000000000000000000000000000000000000000000006064820152608401610732565b60065460208401516040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b158015610a8257600080fd5b505afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190612fe5565b60055485516040517f6352211e00000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff90921691636352211e91610b1a9160040190815260200190565b60206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612fe5565b60008881526003602081815260409283902060070180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091556006549088015191517f42966c68000000000000000000000000000000000000000000000000000000008152600481019290925291925073ffffffffffffffffffffffffffffffffffffffff909116906342966c6890602401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505060055487516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921693506342966c689250610c8e9160040190815260200190565b600060405180830381600087803b158015610ca857600080fd5b505af1158015610cbc573d6000803e3d6000fd5b50505050610cd38560400151608001518386612333565b6007546040868101516060015190517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015260448201929092529116906323b872dd90606401600060405180830381600087803b158015610d5657600080fd5b505af1158015610d6a573d6000803e3d6000fd5b50505050610d7f856040015160800151612631565b6040518781527f9a7851747cd7ffb3fe0a32caf3da48b31f27cebe131267051640f8b72fc471869060200160405180910390a150505050505050565b60015460ff1615610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e610e53813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff90911690811115610f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610f53577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052509050600281606001516004811115610f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a636c61696d3a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b60408101515142116110b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c6f616e436f72653a3a636c61696d3a204c6f616e206e6f742065787069726560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b60065460208201516040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b15801561112957600080fd5b505afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190612fe5565b600085815260036020526040902060070180549192506004917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183021790555060065460208301516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216916342966c68916112019160040190815260200190565b600060405180830381600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b505060055484516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921693506342966c68925061128d9160040190815260200190565b600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b50506007546040858101516060015190517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301526044820192909252911692506323b872dd9150606401600060405180830381600087803b15801561134257600080fd5b505af1158015611356573d6000803e3d6000fd5b505050507fb15e438728b48d46c9a5505713e60ff50c80559f4523c8f99a246a2069a8684a8460405161138b91815260200190565b60405180910390a150505050565b7f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb6113c4813361055a565b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611418813361055a565b6114206126f7565b50565b61142b612f78565b60008281526003602081815260409283902083516080808201865282548252600183015482850152855160a081018752600284015481529483015493850193909352600480830154858701526005830154606080870191909152600684015473ffffffffffffffffffffffffffffffffffffffff1694860194909452948101939093526007810154929390929184019160ff16908111156114f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481111561152d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90525092915050565b6000611542813361055a565b6114206127d8565b600061155860015460ff1690565b156115bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e6115ea813361055a565b4283351161167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4c6f616e436f72653a3a6372656174653a204c6f616e20697320616c7265616460448201527f79206578706972656400000000000000000000000000000000000000000000006064820152608401610732565b606083013560009081526004602052604090205460ff161561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c6f616e436f72653a3a6372656174653a20436f6c6c61746572616c20746f6b60448201527f656e20616c726561647920696e207573650000000000000000000000000000006064820152608401610732565b6007546040517f6352211e0000000000000000000000000000000000000000000000000000000081526060850135600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b15801561178c57600080fd5b505afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190612fe5565b73ffffffffffffffffffffffffffffffffffffffff161415611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c6f616e436f72653a3a6372656174653a206e6f6e6578697374656e7420636f60448201527f6c6c61746572616c0000000000000000000000000000000000000000000000006064820152608401610732565b600254915061187b600280546001019055565b60408051608081018252600080825260208201529081016118a13686900386018661311b565b8152602001600190526000838152600360208181526040928390208451815584820151600180830191909155858501518051600284015592830151938201939093559281015160048085019190915560608083015160058601556080909201516006850180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905590840151600784018054919390927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169184908111156119b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550505060608301356000908152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517ff4e2f5ba558476e035046e0d563522d7a889c5e5de95a111272d163aefec83ec90611a279085908590613366565b60405180910390a150919050565b60015460ff1615611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e611acd813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff90911690811115611b95577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052509050600181606001516004811115611c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a73746172743a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6007546040828101516060015190517f6352211e0000000000000000000000000000000000000000000000000000000081526004810191909152309173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b158015611d1257600080fd5b505afa158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a9190612fe5565b73ffffffffffffffffffffffffffffffffffffffff1614611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c6f616e436f72653a3a73746172743a20636f6c6c61746572616c206e6f742060448201527f73656e74000000000000000000000000000000000000000000000000000000006064820152608401610732565b6000611dff82604001516080015161257a565b9050816040015160200151811015611e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c6f616e436f72653a3a73746172743a20496e73756666696369656e74206c6560448201527f6e646572206465706f73697400000000000000000000000000000000000000006064820152608401610732565b60008481526003602052604080822060070180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905560055490517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201889052909116906340c10f1990604401602060405180830381600087803b158015611f4757600080fd5b505af1158015611f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7f91906131b5565b6006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015260248201899052929350600092909116906340c10f1990604401602060405180830381600087803b158015611ff957600080fd5b505af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203191906131b5565b90506040518060800160405280838152602001828152602001856040015181526020016002600481111561208e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90526000878152600360208181526040928390208451815584820151600180830191909155858501518051600284015592830151938201939093559281015160048085019190915560608083015160058601556080909201516006850180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905590840151600784018054919390927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216918490811115612198577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055509050506121c3846040015160800151886121be876040015160200151612896565b612333565b6121d4846040015160800151612631565b6040805187815273ffffffffffffffffffffffffffffffffffffffff8a8116602083015289168183015290517f80058ebfadf3969c68465e37d0ca6f1647cd2ef5b7a73f5bd388f25be77ed9819181900360600190a15050505050505050565b600082815260208190526040902060010154612250813361055a565b61068c83836124b0565b80546001019055565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610745576122b98173ffffffffffffffffffffffffffffffffffffffff166014612958565b6122c4836020612958565b6040516020016122d59291906131e9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526107329160040161326a565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261068c908490612c5e565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166107455760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124523390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156107455760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061257382846133c7565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600b60205260408082205490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919261052d926370a082319060240160206040518083038186803b1580156125f357600080fd5b505afa158015612607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262b91906131b5565b90612d6a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a082319060240160206040518083038186803b15801561269657600080fd5b505afa1580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce91906131b5565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152600b6020526040902055565b60015460ff16612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610732565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60015460ff1615612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127ae565b600061052d61295161271061294b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc2e39a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561290c57600080fd5b505afa158015612920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294491906131b5565b8690612d76565b90612d82565b8390612d6a565b60606000612967836002613418565b6129729060026133c7565b67ffffffffffffffff8111156129b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129db576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612aff846002613418565b612b0a9060016133c7565b90505b6001811115612bf5577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612b72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612baf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612bee8161349c565b9050612b0d565b508315612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610732565b6000612cc0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d8e9092919063ffffffff16565b80519091501561068c5780806020019051810190612cde9190613041565b61068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610732565b60006125738284613455565b60006125738284613418565b600061257382846133df565b6060612d9d8484600085612da5565b949350505050565b606082471015612e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610732565b843b612e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610732565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ec891906131cd565b60006040518083038185875af1925050503d8060008114612f05576040519150601f19603f3d011682016040523d82523d6000602084013e612f0a565b606091505b5091509150612f1a828286612f25565b979650505050505050565b60608315612f34575081612573565b825115612f445782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610732919061326a565b60405180608001604052806000815260200160008152602001612fd96040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b81526020016000905290565b600060208284031215612ff6578081fd5b815161257381613500565b600080600060608486031215613015578182fd5b833561302081613500565b9250602084013561303081613500565b929592945050506040919091013590565b600060208284031215613052578081fd5b81518015158114612573578182fd5b600060208284031215613072578081fd5b5035919050565b6000806040838503121561308b578182fd5b82359150602083013561309d81613500565b809150509250929050565b6000602082840312156130b9578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612573578182fd5b6000602082840312156130f9578081fd5b813561257381613500565b600060a08284031215613115578081fd5b50919050565b600060a0828403121561312c578081fd5b60405160a0810181811067ffffffffffffffff82111715613174577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356131a981613500565b60808201529392505050565b6000602082840312156131c6578081fd5b5051919050565b600082516131df81846020870161346c565b9190910192915050565b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161322181601785016020880161346c565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161325e81602884016020880161346c565b01602801949350505050565b600060208252825180602084015261328981604085016020870161346c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006101008201905082518252602083015160208301526040830151805160408401526020810151606084015260408101516080840152606081015160a084015273ffffffffffffffffffffffffffffffffffffffff60808201511660c084015250606083015160058110613359577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8060e08401525092915050565b600060c08201905083358252602084013560208301526040840135604083015260608401356060830152608084013561339e81613500565b73ffffffffffffffffffffffffffffffffffffffff16608083015260a090910191909152919050565b600082198211156133da576133da6134d1565b500190565b600082613413577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613450576134506134d1565b500290565b600082821015613467576134676134d1565b500390565b60005b8381101561348757818101518382015260200161346f565b83811115613496576000848401525b50505050565b6000816134ab576134ab6134d1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461142057600080fdfea164736f6c6343000803000a
0x60806040523480156200001157600080fd5b50604051620078eb380380620078eb833981016040819052620000349162000371565b6001805460ff191690556200004c6000335b62000256565b62000067600080516020620078cb8339815191523362000046565b62000082600080516020620078cb8339815191528062000266565b600880546001600160a01b038084166001600160a01b0319928316179092556007805492851692909116919091179055604051620000c09062000363565b60408082526014908201527f5061776e466920426f72726f776572204e6f746500000000000000000000000060608201526080602082018190526003908201526238212760e91b60a082015260c001604051809103906000f0801580156200012c573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b03929092169190911790556040516200015b9062000363565b6040808252601290820152715061776e4669204c656e646572204e6f746560701b60608201526080602082018190526003908201526238262760e91b60a082015260c001604051809103906000f080158015620001bc573d6000803e3d6000fd5b50600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550620001fa6002620002ba60201b6200225a1760201c565b600754600554600654604080516001600160a01b039485168152928416602084015292168183015290517fad307780531f6353137c35adc50ad58d71b76e76aa891e729387f2e720f2de209181900360600190a15050620003c8565b620002628282620002c3565b5050565b600082815260208190526040902060010154819060405184907fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff90600090a460009182526020829052604090912060010155565b80546001019055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000262576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200031f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613fc4806200390783390190565b6000806040838503121562000384578182fd5b82516200039181620003af565b6020840151909250620003a481620003af565b809150509250929050565b6001600160a01b0381168114620003c557600080fd5b50565b61352f80620003d86000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80638f81c508116100ee578063bf848f8111610097578063e268474711610071578063e26847471461040c578063e29b9d0a14610433578063f93554ae14610453578063ff7aab801461047a576101ae565b8063bf848f81146103b9578063d367ab95146103d9578063d547741f146103f9576101ae565b8063a217fddf116100c8578063a217fddf1461037e578063a4b7eeaf14610386578063b2016bd414610399576101ae565b80638f81c5081461030057806391d1485414610313578063a125142b14610357576101ae565b8063379607f51161015b578063504006ca11610135578063504006ca146102885780635c975abb146102a85780636999b377146102b35780638456cb59146102f8576101ae565b8063379607f51461025a5780633ed4c6781461026d5780633f4ba83a14610280576101ae565b80632f2ff15d1161018c5780632f2ff15d1461022157806336568abe14610234578063371fd8e614610247576101ae565b806301ffc9a7146101b357806315a0ea6a146101db578063248a9ca3146101f0575b600080fd5b6101c66101c13660046130a8565b61049a565b60405190151581526020015b60405180910390f35b6101ee6101e93660046130e8565b610533565b005b6102136101fe366004613061565b60009081526020819052604090206001015490565b6040519081526020016101d2565b6101ee61022f366004613079565b610666565b6101ee610242366004613079565b610691565b6101ee610255366004613061565b610749565b6101ee610268366004613061565b610dbb565b6101ee61027b3660046130e8565b611399565b6101ee61140c565b61029b610296366004613061565b611423565b6040516101d291906132bb565b60015460ff166101c6565b6008546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b6101ee611536565b61021361030e366004613104565b61154a565b6101c6610321366004613079565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102137f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e81565b610213600081565b6101ee610394366004613001565b611a35565b6007546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6005546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6101ee610407366004613079565b612234565b6102137f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e81565b600a546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b6102137f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb81565b6006546102d39073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061052d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb61055f81335b612263565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff91906131b5565b905061060c833383612333565b6040805173ffffffffffffffffffffffffffffffffffffffff8516815233602082015280820183905290517ffe3464cd748424446c37877c28ce5b700222c5bc9f90d908afcc4e5cb22707ff9181900360600190a1505050565b600082815260208190526040902060010154610682813361055a565b61068c83836123c0565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61074582826124b0565b5050565b7f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e610774813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff9091169081111561083c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610874577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90525090506002816060015160048111156108b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a72657061793a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b600061096a82604001516040015183604001516020015161256790919063ffffffff16565b9050600061097f83604001516080015161257a565b905081811015610a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c6f616e436f72653a3a72657061793a20496e73756666696369656e7420726560448201527f7061796d656e74000000000000000000000000000000000000000000000000006064820152608401610732565b60065460208401516040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b158015610a8257600080fd5b505afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190612fe5565b60055485516040517f6352211e00000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff90921691636352211e91610b1a9160040190815260200190565b60206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612fe5565b60008881526003602081815260409283902060070180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091556006549088015191517f42966c68000000000000000000000000000000000000000000000000000000008152600481019290925291925073ffffffffffffffffffffffffffffffffffffffff909116906342966c6890602401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505060055487516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921693506342966c689250610c8e9160040190815260200190565b600060405180830381600087803b158015610ca857600080fd5b505af1158015610cbc573d6000803e3d6000fd5b50505050610cd38560400151608001518386612333565b6007546040868101516060015190517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015260448201929092529116906323b872dd90606401600060405180830381600087803b158015610d5657600080fd5b505af1158015610d6a573d6000803e3d6000fd5b50505050610d7f856040015160800151612631565b6040518781527f9a7851747cd7ffb3fe0a32caf3da48b31f27cebe131267051640f8b72fc471869060200160405180910390a150505050505050565b60015460ff1615610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f9c60024347074fd9de2c1e36003080d22dbc76a41ef87444d21e361bcb39118e610e53813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff90911690811115610f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610f53577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052509050600281606001516004811115610f97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a636c61696d3a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b60408101515142116110b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c6f616e436f72653a3a636c61696d3a204c6f616e206e6f742065787069726560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610732565b60065460208201516040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b15801561112957600080fd5b505afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190612fe5565b600085815260036020526040902060070180549192506004917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183021790555060065460208301516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216916342966c68916112019160040190815260200190565b600060405180830381600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b505060055484516040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921693506342966c68925061128d9160040190815260200190565b600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b50506007546040858101516060015190517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301526044820192909252911692506323b872dd9150606401600060405180830381600087803b15801561134257600080fd5b505af1158015611356573d6000803e3d6000fd5b505050507fb15e438728b48d46c9a5505713e60ff50c80559f4523c8f99a246a2069a8684a8460405161138b91815260200190565b60405180910390a150505050565b7f8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb6113c4813361055a565b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611418813361055a565b6114206126f7565b50565b61142b612f78565b60008281526003602081815260409283902083516080808201865282548252600183015482850152855160a081018752600284015481529483015493850193909352600480830154858701526005830154606080870191909152600684015473ffffffffffffffffffffffffffffffffffffffff1694860194909452948101939093526007810154929390929184019160ff16908111156114f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481111561152d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90525092915050565b6000611542813361055a565b6114206127d8565b600061155860015460ff1690565b156115bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e6115ea813361055a565b4283351161167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4c6f616e436f72653a3a6372656174653a204c6f616e20697320616c7265616460448201527f79206578706972656400000000000000000000000000000000000000000000006064820152608401610732565b606083013560009081526004602052604090205460ff161561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c6f616e436f72653a3a6372656174653a20436f6c6c61746572616c20746f6b60448201527f656e20616c726561647920696e207573650000000000000000000000000000006064820152608401610732565b6007546040517f6352211e0000000000000000000000000000000000000000000000000000000081526060850135600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b15801561178c57600080fd5b505afa1580156117a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c49190612fe5565b73ffffffffffffffffffffffffffffffffffffffff161415611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c6f616e436f72653a3a6372656174653a206e6f6e6578697374656e7420636f60448201527f6c6c61746572616c0000000000000000000000000000000000000000000000006064820152608401610732565b600254915061187b600280546001019055565b60408051608081018252600080825260208201529081016118a13686900386018661311b565b8152602001600190526000838152600360208181526040928390208451815584820151600180830191909155858501518051600284015592830151938201939093559281015160048085019190915560608083015160058601556080909201516006850180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905590840151600784018054919390927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169184908111156119b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550505060608301356000908152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517ff4e2f5ba558476e035046e0d563522d7a889c5e5de95a111272d163aefec83ec90611a279085908590613366565b60405180910390a150919050565b60015460ff1615611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b7f59abfac6520ec36a6556b2a4dd949cc40007459bcd5cd2507f1e5cc77b6bc97e611acd813361055a565b600082815260036020818152604080842081516080808201845282548252600183015482860152835160a081018552600284015481529583015494860194909452600480830154868501526005830154606080880191909152600684015473ffffffffffffffffffffffffffffffffffffffff1695870195909552928101949094526007810154909284019160ff90911690811115611b95577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052509050600181606001516004811115611c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c6f616e436f72653a3a73746172743a20496e76616c6964206c6f616e20737460448201527f61746500000000000000000000000000000000000000000000000000000000006064820152608401610732565b6007546040828101516060015190517f6352211e0000000000000000000000000000000000000000000000000000000081526004810191909152309173ffffffffffffffffffffffffffffffffffffffff1690636352211e9060240160206040518083038186803b158015611d1257600080fd5b505afa158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a9190612fe5565b73ffffffffffffffffffffffffffffffffffffffff1614611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c6f616e436f72653a3a73746172743a20636f6c6c61746572616c206e6f742060448201527f73656e74000000000000000000000000000000000000000000000000000000006064820152608401610732565b6000611dff82604001516080015161257a565b9050816040015160200151811015611e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c6f616e436f72653a3a73746172743a20496e73756666696369656e74206c6560448201527f6e646572206465706f73697400000000000000000000000000000000000000006064820152608401610732565b60008481526003602052604080822060070180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905560055490517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201889052909116906340c10f1990604401602060405180830381600087803b158015611f4757600080fd5b505af1158015611f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7f91906131b5565b6006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015260248201899052929350600092909116906340c10f1990604401602060405180830381600087803b158015611ff957600080fd5b505af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203191906131b5565b90506040518060800160405280838152602001828152602001856040015181526020016002600481111561208e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90526000878152600360208181526040928390208451815584820151600180830191909155858501518051600284015592830151938201939093559281015160048085019190915560608083015160058601556080909201516006850180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905590840151600784018054919390927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216918490811115612198577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055509050506121c3846040015160800151886121be876040015160200151612896565b612333565b6121d4846040015160800151612631565b6040805187815273ffffffffffffffffffffffffffffffffffffffff8a8116602083015289168183015290517f80058ebfadf3969c68465e37d0ca6f1647cd2ef5b7a73f5bd388f25be77ed9819181900360600190a15050505050505050565b600082815260208190526040902060010154612250813361055a565b61068c83836124b0565b80546001019055565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610745576122b98173ffffffffffffffffffffffffffffffffffffffff166014612958565b6122c4836020612958565b6040516020016122d59291906131e9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526107329160040161326a565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261068c908490612c5e565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166107455760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124523390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156107455760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061257382846133c7565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600b60205260408082205490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919261052d926370a082319060240160206040518083038186803b1580156125f357600080fd5b505afa158015612607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262b91906131b5565b90612d6a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a082319060240160206040518083038186803b15801561269657600080fd5b505afa1580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce91906131b5565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152600b6020526040902055565b60015460ff16612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610732565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60015460ff1615612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610732565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127ae565b600061052d61295161271061294b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc2e39a66040518163ffffffff1660e01b815260040160206040518083038186803b15801561290c57600080fd5b505afa158015612920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294491906131b5565b8690612d76565b90612d82565b8390612d6a565b60606000612967836002613418565b6129729060026133c7565b67ffffffffffffffff8111156129b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129db576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612aff846002613418565b612b0a9060016133c7565b90505b6001811115612bf5577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612b72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612baf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612bee8161349c565b9050612b0d565b508315612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610732565b6000612cc0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d8e9092919063ffffffff16565b80519091501561068c5780806020019051810190612cde9190613041565b61068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610732565b60006125738284613455565b60006125738284613418565b600061257382846133df565b6060612d9d8484600085612da5565b949350505050565b606082471015612e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610732565b843b612e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610732565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ec891906131cd565b60006040518083038185875af1925050503d8060008114612f05576040519150601f19603f3d011682016040523d82523d6000602084013e612f0a565b606091505b5091509150612f1a828286612f25565b979650505050505050565b60608315612f34575081612573565b825115612f445782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610732919061326a565b60405180608001604052806000815260200160008152602001612fd96040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b81526020016000905290565b600060208284031215612ff6578081fd5b815161257381613500565b600080600060608486031215613015578182fd5b833561302081613500565b9250602084013561303081613500565b929592945050506040919091013590565b600060208284031215613052578081fd5b81518015158114612573578182fd5b600060208284031215613072578081fd5b5035919050565b6000806040838503121561308b578182fd5b82359150602083013561309d81613500565b809150509250929050565b6000602082840312156130b9578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612573578182fd5b6000602082840312156130f9578081fd5b813561257381613500565b600060a08284031215613115578081fd5b50919050565b600060a0828403121561312c578081fd5b60405160a0810181811067ffffffffffffffff82111715613174577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356131a981613500565b60808201529392505050565b6000602082840312156131c6578081fd5b5051919050565b600082516131df81846020870161346c565b9190910192915050565b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161322181601785016020880161346c565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161325e81602884016020880161346c565b01602801949350505050565b600060208252825180602084015261328981604085016020870161346c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006101008201905082518252602083015160208301526040830151805160408401526020810151606084015260408101516080840152606081015160a084015273ffffffffffffffffffffffffffffffffffffffff60808201511660c084015250606083015160058110613359577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8060e08401525092915050565b600060c08201905083358252602084013560208301526040840135604083015260608401356060830152608084013561339e81613500565b73ffffffffffffffffffffffffffffffffffffffff16608083015260a090910191909152919050565b600082198211156133da576133da6134d1565b500190565b600082613413577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613450576134506134d1565b500290565b600082821015613467576134676134d1565b500390565b60005b8381101561348757818101518382015260200161346f565b83811115613496576000848401525b50505050565b6000816134ab576134ab6134d1565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461142057600080fdfea164736f6c6343000803000a6101406040527f48d39b37a35214940203bbbd4f383519797769b13d936f387d89430afef27688610120523480156200003757600080fd5b5060405162003fc438038062003fc48339810160408190526200005a91620004a8565b8180604051806040016040528060018152602001603160f81b81525084848160029080519060200190620000909291906200034f565b508051620000a69060039060208401906200034f565b5050600c805460ff1916905550815160209283012081519183019190912060c082815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81890181905281830197909752606081019590955260808086019390935230858301528051808603909201825293909201909252805193019290922090915261010052506200016a7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848335b620001e1565b620001967f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000164565b620001c27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000164565b620001d9600e6200022460201b620014651760201c565b505062000562565b620001f882826200022d60201b6200146e1760201c565b60008281526001602090815260409091206200021f9183906200147c6200023d821b17901c565b505050565b80546001019055565b6200023982826200025d565b5050565b600062000254836001600160a01b038416620002fd565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000239576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000818152600183016020526040812054620003465750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000257565b50600062000257565b8280546200035d906200050f565b90600052602060002090601f016020900481019282620003815760008555620003cc565b82601f106200039c57805160ff1916838001178555620003cc565b82800160010185558215620003cc579182015b82811115620003cc578251825591602001919060010190620003af565b50620003da929150620003de565b5090565b5b80821115620003da5760008155600101620003df565b600082601f83011262000406578081fd5b81516001600160401b03808211156200042357620004236200054c565b604051601f8301601f19908116603f011681019082821181831017156200044e576200044e6200054c565b816040528381526020925086838588010111156200046a578485fd5b8491505b838210156200048d57858201830151818301840152908201906200046e565b838211156200049e57848385830101525b9695505050505050565b60008060408385031215620004bb578182fd5b82516001600160401b0380821115620004d2578384fd5b620004e086838701620003f5565b93506020850151915080821115620004f6578283fd5b506200050585828601620003f5565b9150509250929050565b600181811c908216806200052457607f821691505b602082108114156200054657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e0516101005161012051613a12620005b2600039600061130b015260006119f501526000611a4401526000611a1f015260006119a1015260006119ca0152613a126000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80636352211e1161012a578063a22cb465116100bd578063d505accf1161008c578063d547741f11610071578063d547741f14610502578063e63ab1e914610515578063e985e9c51461053c57610226565b8063d505accf146104c8578063d5391393146104db57610226565b8063a22cb4651461047c578063b88d4fde1461048f578063c87b56dd146104a2578063ca15c873146104b557610226565b80639010d07c116100f95780639010d07c1461041557806391d148541461042857806395d89b411461046c578063a217fddf1461047457610226565b80636352211e146103bc57806370a08231146103cf5780637ecebe00146103e25780638e130c8f146103f557610226565b80632f2ff15d116101bd57806340c10f191161018c57806342966c681161017157806342966c681461038b5780634f6ccce71461039e5780635c975abb146103b157610226565b806340c10f191461036557806342842e0e1461037857610226565b80632f2ff15d146103245780632f745c59146103375780633644e5151461034a57806336568abe1461035257610226565b806318160ddd116101f957806318160ddd146102b557806323b872dd146102c7578063248a9ca3146102da578063282c51f3146102fd57610226565b806301ffc9a71461022b57806306fdde0314610253578063081812fc14610268578063095ea7b3146102a0575b600080fd5b61023e61023936600461363d565b610585565b60405190151581526020015b60405180910390f35b61025b610598565b60405161024a91906137b8565b61027b6102763660046135e2565b61062b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024a565b6102b36102ae3660046135b9565b61070a565b005b600a545b60405190815260200161024a565b6102b36102d53660046133e0565b610897565b6102b96102e83660046135e2565b60009081526020819052604090206001015490565b6102b97f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6102b36103323660046135fa565b610938565b6102b96103453660046135b9565b61095a565b6102b9610a2c565b6102b36103603660046135fa565b610a3b565b6102b96103733660046135b9565b610a5d565b6102b36103863660046133e0565b610b52565b6102b36103993660046135e2565b610b6d565b6102b96103ac3660046135e2565b610c3d565b600c5460ff1661023e565b61027b6103ca3660046135e2565b610d22565b6102b96103dd366004613394565b610dd4565b6102b96103f0366004613394565b610ea2565b6102b96104033660046135e2565b600f6020526000908152604090205481565b61027b61042336600461361c565b610ecd565b61023e6104363660046135fa565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61025b610ee5565b6102b9600081565b6102b361048a36600461357f565b610ef4565b6102b361049d36600461341b565b611025565b61025b6104b03660046135e2565b6110cd565b6102b96104c33660046135e2565b6111e9565b6102b36104d636600461350e565b611200565b6102b97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102b36105103660046135fa565b61145b565b6102b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023e61054a3660046133ae565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006105908261149e565b90505b919050565b6060600280546105a7906138ac565b80601f01602080910402602001604051908101604052809291908181526020018280546105d3906138ac565b80156106205780601f106105f557610100808354040283529160200191610620565b820191906000526020600020905b81548152906001019060200180831161060357829003601f168201915b505050505090505b90565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff166106e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061071582610d22565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016106d8565b3373ffffffffffffffffffffffffffffffffffffffff821614806107fc57506107fc813361054a565b610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d8565b61089283836114f4565b505050565b6108a13382611594565b61092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d8565b610892838383611704565b6109428282611976565b6000828152600160205260409020610892908261147c565b600061096583610dd4565b82106109f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016106d8565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260408083208484529091529020545b92915050565b6000610a3661199d565b905090565b610a458282611a94565b60008281526001602052604090206108929082611b43565b6000610a897f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610436565b610b15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732315072657365744d696e7465723a2073656e64696e6720646f657360448201527f20686176652070726f70657220726f6c6500000000000000000000000000000060648201526084016106d8565b6000610b20600e5490565b9050610b2c8482611b65565b6000818152600f60205260409020839055610b4b600e80546001019055565b9392505050565b61089283838360405180602001604052806000815250611025565b610b977f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84833610436565b610c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f50726f6d6973736f72794e6f74653a2063616c6c657273206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d8565b610c2c81611d33565b6000908152600f6020526040812055565b6000610c48600a5490565b8210610cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016106d8565b600a8281548110610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016106d8565b600073ffffffffffffffffffffffffffffffffffffffff8216610e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016106d8565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d6020526040812054610590565b6000828152600160205260408120610b4b9083611e0c565b6060600380546105a7906138ac565b73ffffffffffffffffffffffffffffffffffffffff8216331415610f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d8565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415151790559073ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611019911515815260200190565b60405180910390a35050565b61102f3383611594565b6110bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106d8565b6110c784848484611e18565b50505050565b60008181526004602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016106d8565b600061119860408051602081019091526000815290565b905060008151116111b85760405180602001604052806000815250610b4b565b806111c284611ebb565b6040516020016111d39291906136bf565b6040516020818303038152906040529392505050565b60008181526001602052604081206105909061203c565b8342111561126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4552433732315065726d69743a206578706972656420646561646c696e65000060448201526064016106d8565b61127385610d22565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611307576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315065726d69743a206e6f74206f776e657200000000000000000060448201526064016106d8565b60007f00000000000000000000000000000000000000000000000000000000000000008888886113368c612046565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061139e8261207b565b905060006113ae828787876120e4565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732315065726d69743a20696e76616c6964207369676e61747572650060448201526064016106d8565b61144f89896114f4565b50505050505050505050565b610a45828261233c565b80546001019055565b6114788282612362565b5050565b6000610b4b8373ffffffffffffffffffffffffffffffffffffffff8416612452565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105905750610590826124a1565b600081815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061154e82610d22565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106d8565b600061165083610d22565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116bf57508373ffffffffffffffffffffffffffffffffffffffff166116a78461062b565b73ffffffffffffffffffffffffffffffffffffffff16145b806116fc575073ffffffffffffffffffffffffffffffffffffffff80821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661172482610d22565b73ffffffffffffffffffffffffffffffffffffffff16146117c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016106d8565b73ffffffffffffffffffffffffffffffffffffffff8216611869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106d8565b611874838383612543565b61187f6000826114f4565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604081208054600192906118b5908490613834565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081208054600192906118f09084906137cb565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008281526020819052604090206001015461199381335b6125e1565b6108928383612362565b60007f00000000000000000000000000000000000000000000000000000000000000004614156119ee57507f0000000000000000000000000000000000000000000000000000000000000000610628565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c09092019092528051910120610628565b73ffffffffffffffffffffffffffffffffffffffff81163314611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016106d8565b61147882826126b1565b6000610b4b8373ffffffffffffffffffffffffffffffffffffffff8416612768565b73ffffffffffffffffffffffffffffffffffffffff8216611be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d8565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d8565b611c7a60008383612543565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120805460019290611cb09084906137cb565b909155505060008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000611d3e82610d22565b9050611d4c81600084612543565b611d576000836114f4565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120805460019290611d8d908490613834565b909155505060008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000610b4b83836128ca565b611e23848484611704565b611e2f848484846129ac565b6110c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d8565b606081611efc575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610593565b8160005b8115611f265780611f10816138fa565b9150611f1f9050600a836137e3565b9150611f00565b60008167ffffffffffffffff811115611f68577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f92576020820181803683370190505b5090505b84156116fc57611fa7600183613834565b9150611fb4600a86613933565b611fbf9060306137cb565b60f81b818381518110611ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612035600a866137e3565b9450611f96565b6000610590825490565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604090208054600181018255905b50919050565b600061059061208861199d565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106d8565b8360ff16601b14806121ab57508360ff16601c145b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106d8565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561228b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106d8565b95945050505050565b600082815260208190526040902060010154612358813361198e565b61089283836126b1565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166114785760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556123f43390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600081815260018301602052604081205461249957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a26565b506000610a26565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061253457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610590575061059082612ba8565b61254e838383612bfe565b600c5460ff1615610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c65207061757365640000000000000000000000000000000000000000000060648201526084016106d8565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611478576126378173ffffffffffffffffffffffffffffffffffffffff166014612c9c565b612642836020612c9c565b6040516020016126539291906136ee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526106d8916004016137b8565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156114785760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081815260018301602052604081205480156128c057600061278c600183613834565b85549091506000906127a090600190613834565b905060008660000182815481106127e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508087600001848154811061282a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091019290925582815260018901909152604090208490558654879080612884577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610a26565b6000915050610a26565b8154600090821061295d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016106d8565b826000018281548110612999577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612ba0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612a2390339089908890889060040161376f565b602060405180830381600087803b158015612a3d57600080fd5b505af1925050508015612a8b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612a8891810190613659565b60015b612b55573d808015612ab9576040519150601f19603f3d011682016040523d82523d6000602084013e612abe565b606091505b508051612b4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106d8565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506116fc565b5060016116fc565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610590575061059082612fa2565b612c09838383613039565b600c5460ff1615610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201527f68696c652070617573656400000000000000000000000000000000000000000060648201526084016106d8565b60606000612cab8360026137f7565b612cb69060026137cb565b67ffffffffffffffff811115612cf5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d1f576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612e07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612e438460026137f7565b612e4e9060016137cb565b90505b6001811115612f39577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612eb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612f3281613877565b9050612e51565b508315610b4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061059057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610590565b73ffffffffffffffffffffffffffffffffffffffff83166130a15761309c81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b6130de565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130de576130de8382613144565b73ffffffffffffffffffffffffffffffffffffffff821661310757613102816131fb565b610892565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461089257610892828261331f565b6000600161315184610dd4565b61315b9190613834565b6000838152600960205260409020549091508082146131bb5773ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b50600091825260096020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600881528383209183525290812055565b600a5460009061320d90600190613834565b6000838152600b6020526040812054600a805493945090928490811061325c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600a83815481106132a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a805480613303577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061332a83610dd4565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b803573ffffffffffffffffffffffffffffffffffffffff8116811461059357600080fd5b6000602082840312156133a5578081fd5b610b4b82613370565b600080604083850312156133c0578081fd5b6133c983613370565b91506133d760208401613370565b90509250929050565b6000806000606084860312156133f4578081fd5b6133fd84613370565b925061340b60208501613370565b9150604084013590509250925092565b60008060008060808587031215613430578081fd5b61343985613370565b935061344760208601613370565b925060408501359150606085013567ffffffffffffffff8082111561346a578283fd5b818701915087601f83011261347d578283fd5b81358181111561348f5761348f6139a5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156134d5576134d56139a5565b816040528281528a60208487010111156134ed578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080600080600080600060e0888a031215613528578283fd5b61353188613370565b965061353f60208901613370565b95506040880135945060608801359350608088013560ff81168114613562578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613591578182fd5b61359a83613370565b9150602083013580151581146135ae578182fd5b809150509250929050565b600080604083850312156135cb578182fd5b6135d483613370565b946020939093013593505050565b6000602082840312156135f3578081fd5b5035919050565b6000806040838503121561360c578182fd5b823591506133d760208401613370565b6000806040838503121561362e578182fd5b50508035926020909101359150565b60006020828403121561364e578081fd5b8135610b4b816139d4565b60006020828403121561366a578081fd5b8151610b4b816139d4565b6000815180845261368d81602086016020860161384b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600083516136d181846020880161384b565b8351908301906136e581836020880161384b565b01949350505050565b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161372681601785016020880161384b565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161376381602884016020880161384b565b01602801949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526137ae6080830184613675565b9695505050505050565b600060208252610b4b6020830184613675565b600082198211156137de576137de613947565b500190565b6000826137f2576137f2613976565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561382f5761382f613947565b500290565b60008282101561384657613846613947565b500390565b60005b8381101561386657818101518382015260200161384e565b838111156110c75750506000910152565b60008161388657613886613947565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806138c057607f821691505b60208210811415612075577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561392c5761392c613947565b5060010190565b60008261394257613942613976565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613a0257600080fd5b5056fea164736f6c6343000803000a8dd046eb6fe22791cf064df41dbfc76ef240a563550f519aac88255bd8c2d3bb0000000000000000000000001f563cdd688ad47b75e474fde74e87c643d129b7000000000000000000000000fc2b8d5c60c8e8bbf8d6dc685f03193472e39587