60a06040523480156200001157600080fd5b50604051620027bf380380620027bf83398101604081905262000034916200007d565b6040805160208101909152600081526200004e816200006b565b506004805460ff191690556001600160a01b031660805262000220565b600362000079828262000154565b5050565b6000602082840312156200009057600080fd5b81516001600160a01b0381168114620000a857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000da57607f821691505b602082108103620000fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014f57600081815260208120601f850160051c810160208610156200012a5750805b601f850160051c820191505b818110156200014b5782815560010162000136565b5050505b505050565b81516001600160401b03811115620001705762000170620000af565b6200018881620001818454620000c5565b8462000101565b602080601f831160018114620001c05760008415620001a75750858301515b600019600386901b1c1916600185901b1785556200014b565b600085815260208120601f198616915b82811015620001f157888601518255948401946001909101908401620001d0565b5085821015620002105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161257c620002436000396000818161069a015261079c015261257c6000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80636b20c45411610104578063afad55fd116100a2578063e63ab1e911610071578063e63ab1e914610433578063e985e9c51461045a578063f242432a14610496578063f5298aca146104a957600080fd5b8063afad55fd146103dd578063d5391393146103e6578063d547741f1461040d578063e1fd9d181461042057600080fd5b80638456cb59116100de5780638456cb591461038357806391d148541461038b578063a217fddf146103c2578063a22cb465146103ca57600080fd5b80636b20c4541461032d5780636f307dc314610340578063731133e91461037057600080fd5b806336568abe116101715780634e1273f41161014b5780634e1273f4146102c85780635705ae43146102e85780635abfad0e146102fb5780635c975abb1461032257600080fd5b806336568abe1461029a5780633f4ba83a146102ad578063485cc955146102b557600080fd5b80631f7fdffa116101ad5780631f7fdffa1461023c578063248a9ca3146102515780632eb2c2d6146102745780632f2ff15d1461028757600080fd5b8062fdd58e146101d357806301ffc9a7146101f95780630e89341c1461021c575b600080fd5b6101e66101e1366004611ccd565b6104bc565b6040519081526020015b60405180910390f35b61020c610207366004611d0f565b6104e6565b60405190151581526020016101f0565b61022f61022a366004611d2c565b610500565b6040516101f09190611d95565b61024f61024a366004611eee565b610594565b005b6101e661025f366004611d2c565b60009081526020819052604090206001015490565b61024f610282366004611f89565b6105b1565b61024f610295366004612037565b6105e4565b61024f6102a8366004612037565b610609565b61024f61065a565b61024f6102c3366004612067565b61068f565b6102db6102d6366004612095565b61082c565b6040516101f09190612192565b61024f6102f6366004611ccd565b610906565b6101e67fb7dcc8d4f8c7089b2848886d8b8cd5cdea2b9e39c8b76e751a2ad908f5c8469d81565b60045460ff1661020c565b61024f61033b3660046121a5565b610ab1565b6004546103589061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101f0565b61024f61037e36600461221b565b610abe565b61024f610b02565b61020c610399366004612037565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6101e6600081565b61024f6103d8366004612280565b610b34565b6101e660055481565b6101e67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61024f61041b366004612037565b610b43565b61024f61042e366004611f89565b610b68565b6101e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61020c610468366004612067565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b61024f6104a43660046122ae565b610bcb565b61024f6104b7366004612317565b610c20565b60008181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104f182610c4f565b806104e057506104e082610cbc565b60606003805461050f9061234c565b80601f016020809104026020016040519081016040528092919081815260200182805461053b9061234c565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b50505050509050919050565b61059f338484610d23565b6105ab84848484610d66565b50505050565b6105ba81610d9c565b156105d1576105cc8585858585610de7565b6105dd565b6105dd85858585610e65565b5050505050565b6000828152602081905260409020600101546105ff81610eb3565b6105ab8383610ebd565b6001600160a01b038116331461064b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106558282610f67565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61068481610eb3565b61068c610fea565b50565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f1576040517f0c6d42ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811661073f5760405163d92e233d60e01b815260040160405180910390fd5b61074a600082610ebd565b506107757f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610ebd565b506107c07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a67f0000000000000000000000000000000000000000000000000000000000000000610ebd565b506107eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610ebd565b5050600480546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b606081518351146108625781518351604051635b05999160e01b8152600481019290925260248201526044015b60405180910390fd5b6000835167ffffffffffffffff81111561087e5761087e611da8565b6040519080825280602002602001820160405280156108a7578160200160208202803683370190505b50905060005b84518110156108fe576020808202860101516108d1906020808402870101516104bc565b8282815181106108e3576108e3612386565b60209081029190910101526108f7816123b2565b90506108ad565b509392505050565b600061091181610eb3565b81600003610984576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561095d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098191906123cb565b91505b6004546001600160a01b0384811661010090920416148015610a1957506005546040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c91906123cb565b610a1691906123e4565b82115b15610a50576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a646001600160a01b038416338461103c565b604080513381526001600160a01b038516602082015280820184905290517fb66c2595c5f377625ce78f02a4e5a1e17bd8e65fb805e6262a773981729899239181900360600190a1505050565b61065583335b8484610e65565b60408051600180825260208201869052818301908152606082018590526080820190925290610aee338383610d23565b610afa868686866110b0565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2c81610eb3565b61068c6110e6565b610b3f338383611123565b5050565b600082815260208190526040902060010154610b5e81610eb3565b6105ab8383610f67565b610b7181610d9c565b610ba7576040517fb0ff264200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb2858484610d23565b610bbe85848484610d66565b6105dd85858585856111d3565b610bd481610d9c565b15610be6576105cc8585858585611233565b60408051600180825260208201869052818301908152606082018590526080820190925290610c1787878484610e65565b50505050505050565b604080516001808252602082018590528183019081526060820184905260808201909252906105dd8533610ab7565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806104f157506001600160e01b031982167f0e89341c0000000000000000000000000000000000000000000000000000000014806104e057506104e0825b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806104e057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146104e0565b6000610d2f83836112b1565b600454909150610d4f9061010090046001600160a01b0316853084611324565b80600554610d5d91906123f7565b60055550505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610d9081610eb3565b6105dd8585858561135d565b600060208251101580156104e057507fb7dcc8d4f8c7089b2848886d8b8cd5cdea2b9e39c8b76e751a2ad908f5c8469d82806020019051810190610de091906123cb565b1492915050565b336001600160a01b0386168114801590610e2757506001600160a01b0380871660009081526002602090815260408083209385168352929052205460ff16155b15610e585760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610859565b610afa86868686866111d3565b610e70848383611395565b6000610e7c83836112b1565b600454909150610e9b9061010090046001600160a01b0316858361103c565b80600554610ea991906123e4565b6005555050505050565b61068c81336113ef565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610f5f576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610f173390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104e0565b5060006104e0565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615610f5f576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104e0565b610ff261145b565b6004805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516001600160a01b0383811660248301526044820183905261065591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611499565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110da81610eb3565b6105dd85858585611515565b6110ee611572565b6004805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861101f3390565b6001600160a01b038216611166576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610859565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166111fd57604051632bfa23e760e11b815260006004820152602401610859565b6001600160a01b03851661122657604051626a0d4560e21b815260006004820152602401610859565b6105dd85858585856115af565b336001600160a01b038616811480159061127357506001600160a01b0380871660009081526002602090815260408083209385168352929052205460ff16155b156112a45760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610859565b610afa8686868686611602565b805160009081805b8281101561131b578481815181106112d3576112d3612386565b60200260200101518682815181106112ed576112ed612386565b60200260200101516112ff919061240a565b61130990836123f7565b9150611314816123b2565b90506112b9565b50949350505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526105ab9186918216906323b872dd90608401611069565b6001600160a01b03841661138757604051632bfa23e760e11b815260006004820152602401610859565b6105ab6000858585856115af565b6001600160a01b03831633148015906113b557506113b38333610468565b155b156113e45760405163711bec9160e11b81523360048201526001600160a01b0384166024820152604401610859565b610655838383611687565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610b3f576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610859565b60045460ff16611497576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006114ae6001600160a01b038416836116cd565b905080516000141580156114d35750808060200190518101906114d19190612421565b155b15610655576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610859565b6001600160a01b03841661153f57604051632bfa23e760e11b815260006004820152602401610859565b60408051600180825260208201869052818301908152606082018590526080820190925290610afa6000878484876115af565b60045460ff1615611497576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115bb858585856116e2565b6001600160a01b038416156105dd57825133906001036115f457602084810151908401516115ed8389898585896116ee565b5050610afa565b610afa818787878787611812565b6001600160a01b03841661162c57604051632bfa23e760e11b815260006004820152602401610859565b6001600160a01b03851661165557604051626a0d4560e21b815260006004820152602401610859565b60408051600180825260208201869052818301908152606082018590526080820190925290610c1787878484876115af565b6001600160a01b0383166116b057604051626a0d4560e21b815260006004820152602401610859565b6106558360008484604051806020016040528060008152506115af565b60606116db838360006118fb565b9392505050565b6105ab848484846119b1565b6001600160a01b0384163b15610afa5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611732908990899088908890889060040161243e565b6020604051808303816000875af192505050801561176d575060408051601f3d908101601f1916820190925261176a91810190612481565b60015b6117d6573d80801561179b576040519150601f19603f3d011682016040523d82523d6000602084013e6117a0565b606091505b5080516000036117ce57604051632bfa23e760e11b81526001600160a01b0386166004820152602401610859565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b14610c1757604051632bfa23e760e11b81526001600160a01b0386166004820152602401610859565b6001600160a01b0384163b15610afa5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611856908990899088908890889060040161249e565b6020604051808303816000875af1925050508015611891575060408051601f3d908101601f1916820190925261188e91810190612481565b60015b6118bf573d80801561179b576040519150601f19603f3d011682016040523d82523d6000602084013e6117a0565b6001600160e01b0319811663bc197c8160e01b14610c1757604051632bfa23e760e11b81526001600160a01b0386166004820152602401610859565b606081471015611939576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610859565b600080856001600160a01b0316848660405161195591906124fc565b60006040518083038185875af1925050503d8060008114611992576040519150601f19603f3d011682016040523d82523d6000602084013e611997565b606091505b50915091506119a78683836119c5565b9695505050505050565b6119b9611572565b6105ab84848484611a3a565b6060826119da576119d582611c76565b6116db565b81511580156119f157506001600160a01b0384163b155b15611a33576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610859565b50806116db565b8051825114611a695781518151604051635b05999160e01b815260048101929092526024820152604401610859565b3360005b8351811015611b97576020818102858101820151908501909101516001600160a01b03881615611b3d5760008281526001602090815260408083206001600160a01b038c16845290915290205481811015611b14576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602481018290526044810183905260648101849052608401610859565b60008381526001602090815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b03871615611b845760008281526001602090815260408083206001600160a01b038b16845290915281208054839290611b7e9084906123f7565b90915550505b505080611b90906123b2565b9050611a6d565b508251600103611c185760208301516000906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611c09929190918252602082015260400190565b60405180910390a450506105dd565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611c67929190612518565b60405180910390a45050505050565b805115611c865780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116811461068c57600080fd5b60008060408385031215611ce057600080fd5b8235611ceb81611cb8565b946020939093013593505050565b6001600160e01b03198116811461068c57600080fd5b600060208284031215611d2157600080fd5b81356116db81611cf9565b600060208284031215611d3e57600080fd5b5035919050565b60005b83811015611d60578181015183820152602001611d48565b50506000910152565b60008151808452611d81816020860160208601611d45565b601f01601f19169290920160200192915050565b6020815260006116db6020830184611d69565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611de757611de7611da8565b604052919050565b600067ffffffffffffffff821115611e0957611e09611da8565b5060051b60200190565b600082601f830112611e2457600080fd5b81356020611e39611e3483611def565b611dbe565b82815260059290921b84018101918181019086841115611e5857600080fd5b8286015b84811015611e735780358352918301918301611e5c565b509695505050505050565b600082601f830112611e8f57600080fd5b813567ffffffffffffffff811115611ea957611ea9611da8565b611ebc601f8201601f1916602001611dbe565b818152846020838601011115611ed157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611f0457600080fd5b8435611f0f81611cb8565b9350602085013567ffffffffffffffff80821115611f2c57600080fd5b611f3888838901611e13565b94506040870135915080821115611f4e57600080fd5b611f5a88838901611e13565b93506060870135915080821115611f7057600080fd5b50611f7d87828801611e7e565b91505092959194509250565b600080600080600060a08688031215611fa157600080fd5b8535611fac81611cb8565b94506020860135611fbc81611cb8565b9350604086013567ffffffffffffffff80821115611fd957600080fd5b611fe589838a01611e13565b94506060880135915080821115611ffb57600080fd5b61200789838a01611e13565b9350608088013591508082111561201d57600080fd5b5061202a88828901611e7e565b9150509295509295909350565b6000806040838503121561204a57600080fd5b82359150602083013561205c81611cb8565b809150509250929050565b6000806040838503121561207a57600080fd5b823561208581611cb8565b9150602083013561205c81611cb8565b600080604083850312156120a857600080fd5b823567ffffffffffffffff808211156120c057600080fd5b818501915085601f8301126120d457600080fd5b813560206120e4611e3483611def565b82815260059290921b8401810191818101908984111561210357600080fd5b948201945b8386101561212a57853561211b81611cb8565b82529482019490820190612108565b9650508601359250508082111561214057600080fd5b5061214d85828601611e13565b9150509250929050565b600081518084526020808501945080840160005b838110156121875781518752958201959082019060010161216b565b509495945050505050565b6020815260006116db6020830184612157565b6000806000606084860312156121ba57600080fd5b83356121c581611cb8565b9250602084013567ffffffffffffffff808211156121e257600080fd5b6121ee87838801611e13565b9350604086013591508082111561220457600080fd5b5061221186828701611e13565b9150509250925092565b6000806000806080858703121561223157600080fd5b843561223c81611cb8565b93506020850135925060408501359150606085013567ffffffffffffffff81111561226657600080fd5b611f7d87828801611e7e565b801515811461068c57600080fd5b6000806040838503121561229357600080fd5b823561229e81611cb8565b9150602083013561205c81612272565b600080600080600060a086880312156122c657600080fd5b85356122d181611cb8565b945060208601356122e181611cb8565b93506040860135925060608601359150608086013567ffffffffffffffff81111561230b57600080fd5b61202a88828901611e7e565b60008060006060848603121561232c57600080fd5b833561233781611cb8565b95602085013595506040909401359392505050565b600181811c9082168061236057607f821691505b60208210810361238057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123c4576123c461239c565b5060010190565b6000602082840312156123dd57600080fd5b5051919050565b818103818111156104e0576104e061239c565b808201808211156104e0576104e061239c565b80820281158282048414176104e0576104e061239c565b60006020828403121561243357600080fd5b81516116db81612272565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261247660a0830184611d69565b979650505050505050565b60006020828403121561249357600080fd5b81516116db81611cf9565b60006001600160a01b03808816835280871660208401525060a060408301526124ca60a0830186612157565b82810360608401526124dc8186612157565b905082810360808401526124f08185611d69565b98975050505050505050565b6000825161250e818460208701611d45565b9190910192915050565b60408152600061252b6040830185612157565b828103602084015261253d8185612157565b9594505050505056fea264697066735822122099687f06f61fcd47a9c8463467b54c29b79864cc42fce06c578eeda7c9e2ed6164736f6c63430008140033000000000000000000000000d1610a02c2eafd5c07d9b660f01f58c790947fe6