60e0604052602d608081815290620022c660a039600690620000229082620002f1565b503480156200003057600080fd5b50604051620022f3380380620022f38339810160408190526200005391620003bd565b600380546001600160a01b0319166daaeb6d7670e522a718067333cd4e908117909155733cc6cdda760b79bafa08df41ecfa224f810dceb6600182803b15620001a85781156200010757604051633e9f1edf60e11b81523060048201526001600160a01b038481166024830152821690637d3e3dbe906044015b600060405180830381600087803b158015620000e857600080fd5b505af1158015620000fd573d6000803e3d6000fd5b50505050620001a8565b6001600160a01b038316156200014c5760405163a0af290360e01b81523060048201526001600160a01b03848116602483015282169063a0af290390604401620000cd565b604051632210724360e11b81523060048201526001600160a01b03821690634420e48690602401600060405180830381600087803b1580156200018e57600080fd5b505af1158015620001a3573d6000803e3d6000fd5b505050505b50505050620001bd33620001d260201b60201c565b620001cb816103e8620001f4565b50620003ef565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6127108111156200022757604051632761fe9d60e11b815260048101829052612710602482015260440160405180910390fd5b600155600280546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200027757607f821691505b6020821081036200029857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ec57600081815260208120601f850160051c81016020861015620002c75750805b601f850160051c820191505b81811015620002e857828155600101620002d3565b5050505b505050565b81516001600160401b038111156200030d576200030d6200024c565b62000325816200031e845462000262565b846200029e565b602080601f8311600181146200035d5760008415620003445750858301515b600019600386901b1c1916600185901b178555620002e8565b600085815260208120601f198616915b828110156200038e578886015182559484019460019091019084016200036d565b5085821015620003ad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620003d057600080fd5b81516001600160a01b0381168114620003e857600080fd5b9392505050565b611ec780620003ff6000396000f3fe6080604052600436106101c65760003560e01c80638da5cb5b116100f7578063b8d1e53211610095578063e2e784d511610064578063e2e784d5146105fd578063e985e9c51461061d578063f2fde38b14610666578063f9c0611c14610686576101fd565b8063b8d1e5321461057d578063c87b56dd1461059d578063c89e4361146105bd578063ca5eb5e1146105dd576101fd565b8063a49225f8116100d1578063a49225f8146104e9578063b0ccc31e1461050b578063b2b93b731461052b578063b88d4fde1461055d576101fd565b80638da5cb5b1461046257806395d89b4114610480578063a22cb465146104c9576101fd565b806342842e0e116101645780636352211e1161013e5780636352211e146103ed57806370a082311461040d57806387491c601461042d5780638ba4cc3c14610442576101fd565b806342842e0e1461039757806355f804b3146103b75780635f97036f146103d7576101fd565b8063095ea7b3116101a0578063095ea7b3146102f257806318160ddd1461031457806323b872dd146103385780632a55205a14610358576101fd565b806301ffc9a71461022f57806306fdde0314610264578063081812fc146102ba576101fd565b366101fd576040517f34890cd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f34890cd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34801561023b57600080fd5b5061024f61024a3660046117d2565b6106ae565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b506102ad6040518060400160405280601581526020017f4173746572696120466f756e646572732050617373000000000000000000000081525081565b60405161025b919061185d565b3480156102c657600080fd5b506102da6102d5366004611870565b61082b565b6040516001600160a01b03909116815260200161025b565b3480156102fe57600080fd5b5061031261030d3660046118a5565b610896565b005b34801561032057600080fd5b5061032a60055481565b60405190815260200161025b565b34801561034457600080fd5b506103126103533660046118cf565b610a19565b34801561036457600080fd5b5061037861037336600461190b565b610b37565b604080516001600160a01b03909316835260208301919091520161025b565b3480156103a357600080fd5b506103126103b23660046118cf565b610b97565b3480156103c357600080fd5b506103126103d23660046119f0565b610bb7565b3480156103e357600080fd5b5061032a61271081565b3480156103f957600080fd5b506102da610408366004611870565b610c1c565b34801561041957600080fd5b5061032a610428366004611a39565b610c81565b34801561043957600080fd5b50610312610cb5565b34801561044e57600080fd5b5061031261045d3660046118a5565b610d4b565b34801561046e57600080fd5b506000546001600160a01b03166102da565b34801561048c57600080fd5b506102ad6040518060400160405280600381526020017f414650000000000000000000000000000000000000000000000000000000000081525081565b3480156104d557600080fd5b506103126104e4366004611a62565b610e40565b3480156104f557600080fd5b506102da6daaeb6d7670e522a718067333cd4e81565b34801561051757600080fd5b506003546102da906001600160a01b031681565b34801561053757600080fd5b5060045461024f9074010000000000000000000000000000000000000000900460ff1681565b34801561056957600080fd5b50610312610578366004611a99565b610f25565b34801561058957600080fd5b50610312610598366004611a39565b610f83565b3480156105a957600080fd5b506102ad6105b8366004611870565b611001565b3480156105c957600080fd5b506004546102da906001600160a01b031681565b3480156105e957600080fd5b506103126105f8366004611a39565b61109d565b34801561060957600080fd5b506103126106183660046118a5565b61112c565b34801561062957600080fd5b5061024f610638366004611b15565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b34801561067257600080fd5b50610312610681366004611a39565b61118b565b34801561069257600080fd5b506102da733cc6cdda760b79bafa08df41ecfa224f810dceb681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061074157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061078d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7f5828d000000000000000000000000000000000000000000000000000000000145b806107d957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061082557507fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000145b92915050565b60008161083781611248565b610875576040517f1cf4d9a4000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6000838152600760205260409020546001600160a01b031691505b50919050565b806108a081611248565b6108d9576040517f1cf4d9a40000000000000000000000000000000000000000000000000000000081526004810182905260240161086c565b336108e381611278565b6000838152600860205260409020546001600160a01b03908116908516819003610944576040517ff2b21e1c0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260240161086c565b600061095182338761136c565b9050806109a2576040517f19f48dff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201523360248201526044810186905260640161086c565b60008581526007602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a811691821790925591518893918616917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b336001600160a01b038316610a5a576040517f14242cb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a6583610c1c565b9050806001600160a01b0316856001600160a01b031614610acc576040517fe02b28e70000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152861660248201526044810184905260640161086c565b610ad781338561136c565b610b25576040517f19f48dff0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201523360248201526044810184905260640161086c565b610b308185856113df565b5050505050565b600080821580610b475750600154155b15610b615750506002546001600160a01b03166000610b90565b600061271084600154610b749190611b48565b610b7e9190611b86565b6002546001600160a01b031693509150505b9250929050565b610bb283838360405180602001604052806000815250610f25565b505050565b33610bca6000546001600160a01b031690565b6001600160a01b031614610c0c576040517f55932a1b00000000000000000000000000000000000000000000000000000000815233600482015260240161086c565b6006610c188282611c5c565b5050565b600081610c2881611248565b610c61576040517f1cf4d9a40000000000000000000000000000000000000000000000000000000081526004810182905260240161086c565b6000838152600860205260409020546001600160a01b03165b9392505050565b60006001600160a01b038216610c9957506000919050565b506001600160a01b031660009081526009602052604090205490565b33610cc86000546001600160a01b031690565b6001600160a01b031614610d0a576040517f55932a1b00000000000000000000000000000000000000000000000000000000815233600482015260240161086c565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b60045474010000000000000000000000000000000000000000900460ff1615610da0576040517f7e1603b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546001600160a01b03163314610de4576040517f50a851ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600860205260409020546001600160a01b031615610e36576040517f158fb1e50000000000000000000000000000000000000000000000000000000081526004810182905260240161086c565b610c1882826114a3565b33610e4a81611278565b336001600160a01b038416819003610e99576040517ff2b21e1c0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161086c565b6001600160a01b038181166000818152600a602090815260408083209489168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b610f30848484610a19565b610f3c84848484611532565b610f7d576040517f015be56a0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161086c565b50505050565b6000546001600160a01b03163314610fc7576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608161100d81611248565b611046576040517f1cf4d9a40000000000000000000000000000000000000000000000000000000081526004810182905260240161086c565b60006006805461105590611bc1565b90501161106a57611065836116bb565b610c7a565b6006611075846116bb565b604051602001611086929190611d76565b604051602081830303815290604052915050919050565b336110b06000546001600160a01b031690565b6001600160a01b0316146110f2576040517f55932a1b00000000000000000000000000000000000000000000000000000000815233600482015260240161086c565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3361113f6000546001600160a01b031690565b6001600160a01b031614611181576040517f55932a1b00000000000000000000000000000000000000000000000000000000815233600482015260240161086c565b610c18828261171d565b3361119e6000546001600160a01b031690565b6001600160a01b0316146111e0576040517f55932a1b00000000000000000000000000000000000000000000000000000000815233600482015260240161086c565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008160000361125a57506000919050565b506000908152600860205260409020546001600160a01b0316151590565b6003546001600160a01b0316801580159061129d57506000816001600160a01b03163b115b15610c18576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015282169063c617113490604401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190611e1b565b610c18576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161086c565b6000836001600160a01b0316836001600160a01b031614806113a757506113928261082b565b6001600160a01b0316836001600160a01b0316145b806113d757506001600160a01b038085166000908152600a602090815260408083209387168352929052205460ff165b949350505050565b6001600160a01b0380831660008181526009602090815260408083208054600101905593871680835284832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526008825284832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811686179091556007909252848320805490921690915592518493917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216600081815260096020908152604080832080546001908101909155600580549091019055848352600890915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000833b80156116af576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063150b7a02906115879033908a9089908990600401611e38565b6020604051808303816000875af19250505080156115e0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526115dd91810190611e74565b60015b611662573d80801561160e576040519150601f19603f3d011682016040523d82523d6000602084013e611613565b606091505b50805160000361165a576040517f015be56a0000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260240161086c565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001491506113d79050565b50600195945050505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806116d557508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b612710811115611764576040517f4ec3fd3a00000000000000000000000000000000000000000000000000000000815260048101829052612710602482015260440161086c565b600155600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146117cf57600080fd5b50565b6000602082840312156117e457600080fd5b8135610c7a816117a1565b60005b8381101561180a5781810151838201526020016117f2565b50506000910152565b6000815180845261182b8160208601602086016117ef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c7a6020830184611813565b60006020828403121561188257600080fd5b5035919050565b80356001600160a01b03811681146118a057600080fd5b919050565b600080604083850312156118b857600080fd5b6118c183611889565b946020939093013593505050565b6000806000606084860312156118e457600080fd5b6118ed84611889565b92506118fb60208501611889565b9150604084013590509250925092565b6000806040838503121561191e57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156119775761197761192d565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156119bd576119bd61192d565b816040528093508581528686860111156119d657600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611a0257600080fd5b813567ffffffffffffffff811115611a1957600080fd5b8201601f81018413611a2a57600080fd5b6113d78482356020840161195c565b600060208284031215611a4b57600080fd5b610c7a82611889565b80151581146117cf57600080fd5b60008060408385031215611a7557600080fd5b611a7e83611889565b91506020830135611a8e81611a54565b809150509250929050565b60008060008060808587031215611aaf57600080fd5b611ab885611889565b9350611ac660208601611889565b925060408501359150606085013567ffffffffffffffff811115611ae957600080fd5b8501601f81018713611afa57600080fd5b611b098782356020840161195c565b91505092959194509250565b60008060408385031215611b2857600080fd5b611b3183611889565b9150611b3f60208401611889565b90509250929050565b8082028115828204841417610825577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082611bbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c90821680611bd557607f821691505b602082108103610890577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610bb257600081815260208120601f850160051c81016020861015611c355750805b601f850160051c820191505b81811015611c5457828155600101611c41565b505050505050565b815167ffffffffffffffff811115611c7657611c7661192d565b611c8a81611c848454611bc1565b84611c0e565b602080601f831160018114611cdd5760008415611ca75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611c54565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611d2a57888601518255948401946001909101908401611d0b565b5085821015611d6657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611d8481611bc1565b60018281168015611d9c5760018114611dcf57611dfe565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450611dfe565b8860005260208060002060005b85811015611df55781548a820152908401908201611ddc565b50505082870194505b505050508351611e128183602088016117ef565b01949350505050565b600060208284031215611e2d57600080fd5b8151610c7a81611a54565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611e6a6080830184611813565b9695505050505050565b600060208284031215611e8657600080fd5b8151610c7a816117a156fea264697066735822122080f66feb0c41f061d7b916fc9cac01af1629637272a392651b05385de86c106664736f6c6343000811003368747470733a2f2f6166702d61756374696f6e2d736974652e76657263656c2e6170702f6170692f6d6574612f000000000000000000000000b94aca4c0764b4fbc8c66570f54366bb94fa2375