60806040525f600d5534801562000014575f80fd5b5060405162001fec38038062001fec8339810160408190526200003791620002ef565b82826200004433620000a9565b600362000052838262000426565b50600462000061828262000426565b50600180555050601180546001600160a01b0319166001600160a01b03861690811790915562000094906103e8620000f8565b6200009f8162000112565b50505050620004ee565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001026200012a565b6200010e82826200018b565b5050565b6200011c6200012a565b60106200010e828262000426565b5f546001600160a01b03163314620001895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6127106001600160601b038216811015620001cc57604051636f483d0960e01b81526001600160601b03831660048201526024810182905260440162000180565b6001600160a01b038316620001f757604051635b6cc80560e11b81525f600482015260240162000180565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000255575f80fd5b81516001600160401b038082111562000272576200027262000231565b604051601f8301601f19908116603f011681019082821181831017156200029d576200029d62000231565b81604052838152602092508683858801011115620002b9575f80fd5b5f91505b83821015620002dc5785820183015181830184015290820190620002bd565b5f93810190920192909252949350505050565b5f805f806080858703121562000303575f80fd5b84516001600160a01b03811681146200031a575f80fd5b60208601519094506001600160401b038082111562000337575f80fd5b620003458883890162000245565b945060408701519150808211156200035b575f80fd5b620003698883890162000245565b935060608701519150808211156200037f575f80fd5b506200038e8782880162000245565b91505092959194509250565b600181811c90821680620003af57607f821691505b602082108103620003ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000421575f81815260208120601f850160051c81016020861015620003fc5750805b601f850160051c820191505b818110156200041d5782815560010162000408565b5050505b505050565b81516001600160401b0381111562000442576200044262000231565b6200045a816200045384546200039a565b84620003d4565b602080601f83116001811462000490575f8415620004785750858301515b5f19600386901b1c1916600185901b1785556200041d565b5f85815260208120601f198616915b82811015620004c0578886015182559484019460019091019084016200049f565b5085821015620004de57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b611af080620004fc5f395ff3fe608060405260043610610195575f3560e01c80636198e339116100e757806395d89b4111610087578063c87b56dd11610062578063c87b56dd1461046f578063e8a3d4851461048e578063e985e9c5146104a2578063f2fde38b146104e9575f80fd5b806395d89b4114610429578063a22cb4651461043d578063b88d4fde1461045c575f80fd5b8063715018a6116100c2578063715018a6146103bb5780638da5cb5b146103cf578063938e3d7b146103eb57806395652cfa1461040a575f80fd5b80636198e3391461035e5780636352211e1461037d57806370a082311461039c575f80fd5b806323b872dd1161015257806333f91dfb1161012d57806333f91dfb146102ee57806334e99fb61461030d5780633b035df61461032c57806342842e0e1461034b575f80fd5b806323b872dd1461027e578063282d3fdf146102915780632a55205a146102b0575f80fd5b806301ffc9a71461019957806306fdde03146101cd578063081812fc146101ee578063095ea7b31461022557806318160ddd1461023a57806321df4a481461025f575b5f80fd5b3480156101a4575f80fd5b506101b86101b3366004611409565b610508565b60405190151581526020015b60405180910390f35b3480156101d8575f80fd5b506101e1610527565b6040516101c49190611471565b3480156101f9575f80fd5b5061020d610208366004611483565b6105b7565b6040516001600160a01b0390911681526020016101c4565b6102386102333660046114b5565b6105f9565b005b348015610245575f80fd5b50600254600154035f19015b6040519081526020016101c4565b34801561026a575f80fd5b506102386102793660046114dd565b61066c565b61023861028c366004611507565b61067e565b34801561029c575f80fd5b506102386102ab3660046114b5565b610844565b3480156102bb575f80fd5b506102cf6102ca366004611540565b610947565b604080516001600160a01b0390931683526020830191909152016101c4565b3480156102f9575f80fd5b506102386103083660046114dd565b610979565b348015610318575f80fd5b50610238610327366004611560565b6109e9565b348015610337575f80fd5b5061020d610346366004611483565b6109fe565b610238610359366004611507565b610a85565b348015610369575f80fd5b50610238610378366004611483565b610a9f565b348015610388575f80fd5b5061020d610397366004611483565b610b10565b3480156103a7575f80fd5b506102516103b63660046115cc565b610b1a565b3480156103c6575f80fd5b50610238610b67565b3480156103da575f80fd5b505f546001600160a01b031661020d565b3480156103f6575f80fd5b5061023861040536600461166c565b610b7a565b348015610415575f80fd5b50610238610424366004611560565b610b8e565b348015610434575f80fd5b506101e1610ba3565b348015610448575f80fd5b506102386104573660046116b1565b610bb2565b61023861046a3660046116ea565b610c1d565b34801561047a575f80fd5b506101e1610489366004611483565b610c67565b348015610499575f80fd5b506101e1610ce8565b3480156104ad575f80fd5b506101b86104bc366004611761565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205460ff1690565b3480156104f4575f80fd5b506102386105033660046115cc565b610cf7565b5f61051282610d70565b80610521575061052182610dbd565b92915050565b60606003805461053690611789565b80601f016020809104026020016040519081016040528092919081815260200182805461056290611789565b80156105ad5780601f10610584576101008083540402835291602001916105ad565b820191905f5260205f20905b81548152906001019060200180831161059057829003601f168201915b5050505050905090565b5f6105c182610df1565b6105de576040516333d1c03960e21b815260040160405180910390fd5b505f908152600760205260409020546001600160a01b031690565b5f610603826109fe565b6001600160a01b03161461065e5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420617070726f7665206c6f636b656420746f6b656e0000000060448201526064015b60405180910390fd5b6106688282610e24565b5050565b610674610ed5565b6106688282610979565b5f61068882610f2e565b9050836001600160a01b0316816001600160a01b0316146106bb5760405162a1148160e81b815260040160405180910390fd5b5f8281526007602052604090208054338082146001600160a01b03881690911417610723576001600160a01b0386165f90815260086020908152604080832033845290915290205460ff1661072357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661074a57604051633a954ecd60e21b815260040160405180910390fd5b6107578686866001610f9f565b8015610761575f82555b6001600160a01b038681165f9081526006602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260056020526040812091909155600160e11b841690036107ee57600184015f8181526005602052604081205490036107ec5760015481146107ec575f8181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461083c868686600161101b565b505050505050565b5f61084e82610b10565b9050336001600160a01b0382161480610880575061086b826105b7565b6001600160a01b0316336001600160a01b0316145b6108bd5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610655565b5f828152600960205260409020546001600160a01b0316156109125760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d313d0d2d15160921b6044820152606401610655565b5f82815260096020526040902080546001600160a01b0319166001600160a01b0385161790556109428383610e24565b505050565b6011545f9081906001600160a01b0316606461096485600a6117d5565b61096e91906117ec565b915091509250929050565b610981610ed5565b5f61098b600c5490565b90505f5b838110156109c5576109a5600c80546001019055565b816109af8161180b565b92505080806109bd9061180b565b91505061098f565b506109d0828461104a565b600d8054905f6109df8361180b565b9190505550505050565b6109f1610ed5565b600f610942828483611868565b5f610a0882610df1565b610a6a5760405162461bcd60e51b815260206004820152602d60248201527f4c6f636b61626c653a206c6f636b696e6720717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610655565b505f908152600960205260409020546001600160a01b031690565b61094283838360405180602001604052805f815250610c1d565b5f818152600960205260409020546001600160a01b03163314610af35760405162461bcd60e51b815260206004820152600c60248201526b2727aa2faaa72627a1a5a2a960a11b6044820152606401610655565b5f90815260096020526040902080546001600160a01b0319169055565b5f61052182610f2e565b5f6001600160a01b038216610b42576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03165f9081526006602052604090205467ffffffffffffffff1690565b610b6f610ed5565b610b785f611156565b565b610b82610ed5565b60106106688282611924565b610b96610ed5565b600e610942828483611868565b60606004805461053690611789565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c2884848461067e565b6001600160a01b0383163b15610c6157610c44848484846111a5565b610c61576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610c7282610df1565b610cb65760405162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973742160581b6044820152606401610655565b600e610cc18361128d565b604051602001610cd29291906119e0565b6040516020818303038152906040529050919050565b60606010805461053690611789565b610cff610ed5565b6001600160a01b038116610d645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610655565b610d6d81611156565b50565b5f6301ffc9a760e01b6001600160e01b031983161480610da057506380ac58cd60e01b6001600160e01b03198316145b806105215750506001600160e01b031916635b5e139f60e01b1490565b5f6001600160e01b0319821663152a902d60e11b148061052157506301ffc9a760e01b6001600160e01b0319831614610521565b5f81600111158015610e04575060015482105b80156105215750505f90815260056020526040902054600160e01b161590565b5f610e2e82610b10565b9050336001600160a01b03821614610e7a57610e49826105b7565b6001600160a01b0316336001600160a01b031614610e7a576040516367d9dca160e11b815260040160405180910390fd5b5f8281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f546001600160a01b03163314610b785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610655565b5f8180600111610f8657600154811015610f86575f8181526005602052604081205490600160e01b82169003610f84575b805f03610f7d57505f19015f81815260056020526040902054610f5f565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b6001600160a01b03841615610c61575f610fb8836109fe565b6001600160a01b03161480610fe65750610fd1826109fe565b6001600160a01b0316336001600160a01b0316145b610c615760405162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b6044820152606401610655565b6001600160a01b03841615610c6157505f90815260096020526040902080546001600160a01b03191690555050565b6001545f82900361106e5760405163b562e8dd60e01b815260040160405180910390fd5b61107a5f848385610f9f565b6001600160a01b0383165f8181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146111265780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46001016110f0565b50815f0361114657604051622e076360e81b815260040160405180910390fd5b600155506109425f84838561101b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906111d9903390899088908890600401611a63565b6020604051808303815f875af1925050508015611213575060408051601f3d908101601f1916820190925261121091810190611a9f565b60015b61126f573d808015611240576040519150601f19603f3d011682016040523d82523d5f602084013e611245565b606091505b5080515f03611267576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60605f6112998361131d565b60010190505f8167ffffffffffffffff8111156112b8576112b86115e5565b6040519080825280601f01601f1916602001820160405280156112e2576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846112ec57509392505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061135b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611387576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113a557662386f26fc10000830492506010015b6305f5e10083106113bd576305f5e100830492506008015b61271083106113d157612710830492506004015b606483106113e3576064830492506002015b600a83106105215760010192915050565b6001600160e01b031981168114610d6d575f80fd5b5f60208284031215611419575f80fd5b8135610f7d816113f4565b5f5b8381101561143e578181015183820152602001611426565b50505f910152565b5f815180845261145d816020860160208601611424565b601f01601f19169290920160200192915050565b602081525f610f7d6020830184611446565b5f60208284031215611493575f80fd5b5035919050565b80356001600160a01b03811681146114b0575f80fd5b919050565b5f80604083850312156114c6575f80fd5b6114cf8361149a565b946020939093013593505050565b5f80604083850312156114ee575f80fd5b823591506114fe6020840161149a565b90509250929050565b5f805f60608486031215611519575f80fd5b6115228461149a565b92506115306020850161149a565b9150604084013590509250925092565b5f8060408385031215611551575f80fd5b50508035926020909101359150565b5f8060208385031215611571575f80fd5b823567ffffffffffffffff80821115611588575f80fd5b818501915085601f83011261159b575f80fd5b8135818111156115a9575f80fd5b8660208285010111156115ba575f80fd5b60209290920196919550909350505050565b5f602082840312156115dc575f80fd5b610f7d8261149a565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611613576116136115e5565b604051601f8501601f19908116603f0116810190828211818310171561163b5761163b6115e5565b81604052809350858152868686011115611653575f80fd5b858560208301375f602087830101525050509392505050565b5f6020828403121561167c575f80fd5b813567ffffffffffffffff811115611692575f80fd5b8201601f810184136116a2575f80fd5b611285848235602084016115f9565b5f80604083850312156116c2575f80fd5b6116cb8361149a565b9150602083013580151581146116df575f80fd5b809150509250929050565b5f805f80608085870312156116fd575f80fd5b6117068561149a565b93506117146020860161149a565b925060408501359150606085013567ffffffffffffffff811115611736575f80fd5b8501601f81018713611746575f80fd5b611755878235602084016115f9565b91505092959194509250565b5f8060408385031215611772575f80fd5b61177b8361149a565b91506114fe6020840161149a565b600181811c9082168061179d57607f821691505b6020821081036117bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610521576105216117c1565b5f8261180657634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001820161181c5761181c6117c1565b5060010190565b601f821115610942575f81815260208120601f850160051c810160208610156118495750805b601f850160051c820191505b8181101561083c57828155600101611855565b67ffffffffffffffff831115611880576118806115e5565b6118948361188e8354611789565b83611823565b5f601f8411600181146118c5575f85156118ae5750838201355b5f19600387901b1c1916600186901b17835561191d565b5f83815260209020601f19861690835b828110156118f557868501358255602094850194600190920191016118d5565b5086821015611911575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b815167ffffffffffffffff81111561193e5761193e6115e5565b6119528161194c8454611789565b84611823565b602080601f831160018114611985575f841561196e5750858301515b5f19600386901b1c1916600185901b17855561083c565b5f85815260208120601f198616915b828110156119b357888601518255948401946001909101908401611994565b50858210156119d057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f8084546119ed81611789565b60018281168015611a055760018114611a1a57611a46565b60ff1984168752821515830287019450611a46565b885f526020805f205f5b85811015611a3d5781548a820152908401908201611a24565b50505082870194505b505050508351611a5a818360208801611424565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611a9590830184611446565b9695505050505050565b5f60208284031215611aaf575f80fd5b8151610f7d816113f456fea26469706673582212209f1bb222dd587dc547eba2b223f9da654bb6b8cc708cbce27ef17eaa8f90982564736f6c6343000814003300000000000000000000000007caf45e67590e3cce0fcfab047ec7d248f13f05000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000011416d616e546573744f72672f7465737434000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641324134304300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000