60806040523480156200001157600080fd5b50604051620024e0380380620024e08339810160408190526200003491620001de565b33868660006200004583826200033a565b5060016200005482826200033a565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000c4565b506007620000a085826200033a565b506008620000af84826200033a565b50600a91909155600b55506200040692505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013e57600080fd5b81516001600160401b03808211156200015b576200015b62000116565b604051601f8301601f19908116603f0116810190828211818310171562000186576200018662000116565b8160405283815260209250866020858801011115620001a457600080fd5b600091505b83821015620001c85785820183015181830184015290820190620001a9565b6000602085830101528094505050505092915050565b60008060008060008060c08789031215620001f857600080fd5b86516001600160401b03808211156200021057600080fd5b6200021e8a838b016200012c565b975060208901519150808211156200023557600080fd5b620002438a838b016200012c565b965060408901519150808211156200025a57600080fd5b620002688a838b016200012c565b955060608901519150808211156200027f57600080fd5b506200028e89828a016200012c565b9350506080870151915060a087015190509295509295509295565b600181811c90821680620002be57607f821691505b602082108103620002df57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000335576000816000526020600020601f850160051c81016020861015620003105750805b601f850160051c820191505b8181101562000331578281556001016200031c565b5050505b505050565b81516001600160401b0381111562000356576200035662000116565b6200036e81620003678454620002a9565b84620002e5565b602080601f831160018114620003a657600084156200038d5750858301515b600019600386901b1c1916600185901b17855562000331565b600085815260208120601f198616915b82811015620003d757888601518255948401946001909101908401620003b6565b5085821015620003f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6120ca80620004166000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063715018a61161010f578063c098004c116100a2578063e985e9c511610071578063e985e9c514610445578063f0de67ac1461048e578063f2fde38b14610496578063fbfa941f146104a957600080fd5b8063c098004c1461040e578063c87b56dd14610416578063d0f4116f14610429578063d5abeb011461043c57600080fd5b806395d89b41116100de57806395d89b41146103cd57806396607ff1146103d5578063a22cb465146103e8578063b88d4fde146103fb57600080fd5b8063715018a6146103815780638da5cb5b14610389578063951b6c02146103a7578063956f061a146103ba57600080fd5b806319fee256116101875780633de2c798116101565780633de2c7981461032557806342842e0e146103485780636352211e1461035b57806370a082311461036e57600080fd5b806319fee256146102d357806323b872dd146102f65780632bca65c314610309578063319bafeb1461031257600080fd5b806307ac904c116101c357806307ac904c1461023d578063081812fc14610298578063095ea7b3146102ab5780630b834696146102c057600080fd5b80629a9b7b146101e957806301ffc9a71461020557806306fdde0314610228575b600080fd5b6101f260095481565b6040519081526020015b60405180910390f35b610218610213366004611b4b565b6104c9565b60405190151581526020016101fc565b6102306105ae565b6040516101fc9190611bd3565b61027361024b366004611be6565b600e6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b6102736102a6366004611be6565b610640565b6102be6102b9366004611c28565b610676565b005b6102be6102ce366004611c52565b610685565b6102186102e1366004611c85565b600d6020526000908152604090205460ff1681565b6102be610304366004611ca0565b6108bb565b6101f2600b5481565b6101f2610320366004611c85565b6109ab565b610218610333366004611c85565b600c6020526000908152604090205460ff1681565b6102be610356366004611ca0565b610ad6565b610273610369366004611be6565b610af6565b6101f261037c366004611c85565b610b01565b6102be610b7c565b60065473ffffffffffffffffffffffffffffffffffffffff16610273565b6101f26103b5366004611c52565b610b90565b6102be6103c8366004611cea565b610d95565b610230610df3565b6102be6103e3366004611c85565b610e02565b6102be6103f6366004611cea565b610f27565b6102be610409366004611d50565b610f32565b610230610f49565b610230610424366004611be6565b610fd7565b6102be610437366004611cea565b611083565b6101f2600a5481565b610218610453366004611c52565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102306110e1565b6102be6104a4366004611c85565b6110ee565b6101f26104b7366004611c85565b600f6020526000908152604090205481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061055c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105a857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600080546105bd90611e4a565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990611e4a565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b5050505050905090565b600061064b82611152565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff166105a8565b6106818282336111b1565b5050565b61068d6111be565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600d602052604081205460ff16151590036106f0576040517fe51cf7bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561075d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107819190611e9d565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081523060048201526024810182905290915073ffffffffffffffffffffffffffffffffffffffff84169063095ea7b3906044016020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611eb6565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611eb6565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610910576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b600061091d838333611211565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b5576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610907565b336000908152600c602052604081205460ff16151581036109f8576040517f40fb774800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b54336000908152600f602052604081208054909190610a1a908490611f02565b925050819055506000600960008154610a3290611f15565b9190508190559050600a54811115610a76576040517fb36c128400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a80838261138e565b6000818152600e6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94909416939093179092555090565b610af183838360405180602001604052806000815250610f32565b505050565b60006105a882611152565b600073ffffffffffffffffffffffffffffffffffffffff8216610b53576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610907565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b610b846111be565b610b8e60006113a8565b565b336000908152600c602052604081205460ff1615158103610bdd576040517f40fb774800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600d602052604081205460ff1615159003610c40576040517fe51cf7bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af1158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611eb6565b506000600960008154610cf390611f15565b9190508190559050600a54811115610d37576040517fb36c128400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d41848261138e565b6000818152600e6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055905092915050565b610d9d6111be565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6060600180546105bd90611e4a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d602052604081205460ff1615159003610e65576040517fe51cf7bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152600f6020526040908190205490517f23b872dd0000000000000000000000000000000000000000000000000000000081526004810192909252306024830152604482015273ffffffffffffffffffffffffffffffffffffffff8216906323b872dd906064016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190611eb6565b5050336000908152600f6020526040812055565b61068133838361141f565b610f3d8484846108bb565b6108b58484848461151c565b60078054610f5690611e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8290611e4a565b8015610fcf5780601f10610fa457610100808354040283529160200191610fcf565b820191906000526020600020905b815481529060010190602001808311610fb257829003601f168201915b505050505081565b60606000610fe483610af6565b73ffffffffffffffffffffffffffffffffffffffff1603611031576040517fd872946b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006007805461104090611e4a565b90501161105c57604051806020016040528060008152506105a8565b600760405160200161106e9190611f4d565b60405160208183030381529060405292915050565b61108b6111be565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60088054610f5690611e4a565b6110f66111be565b73ffffffffffffffffffffffffffffffffffffffff8116611146576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610907565b61114f816113a8565b50565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806105a8576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610907565b610af18383836001611713565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b8e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610907565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff9081169083161561124b5761124b8184866118de565b73ffffffffffffffffffffffffffffffffffffffff8116156112c157611275600085600080611713565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff85161561130a5773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b61068182826040518060200160405280600081525061198e565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611484576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610907565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b156108b5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611591903390889087908790600401612057565b6020604051808303816000875af19250505080156115ea575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526115e7918101906120a0565b60015b611679573d808015611618576040519150601f19603f3d011682016040523d82523d6000602084013e61161d565b606091505b508051600003611671576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610907565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a02000000000000000000000000000000000000000000000000000000001461170c576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610907565b5050505050565b8080611734575073ffffffffffffffffffffffffffffffffffffffff821615155b1561188957600061174484611152565b905073ffffffffffffffffffffffffffffffffffffffff83161580159061179757508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156117d6575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b15611825576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610907565b811561188757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6118e98383836119a5565b610af15773ffffffffffffffffffffffffffffffffffffffff831661193d576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610907565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610907565b6119988383611a6c565b610af1600084848461151c565b600073ffffffffffffffffffffffffffffffffffffffff831615801590611a6457508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a33575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b80611a64575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611abc576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610907565b6000611aca83836000611211565b905073ffffffffffffffffffffffffffffffffffffffff811615610af1576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610907565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461114f57600080fd5b600060208284031215611b5d57600080fd5b8135611b6881611b1d565b9392505050565b6000815180845260005b81811015611b9557602081850181015186830182015201611b79565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611b686020830184611b6f565b600060208284031215611bf857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c2357600080fd5b919050565b60008060408385031215611c3b57600080fd5b611c4483611bff565b946020939093013593505050565b60008060408385031215611c6557600080fd5b611c6e83611bff565b9150611c7c60208401611bff565b90509250929050565b600060208284031215611c9757600080fd5b611b6882611bff565b600080600060608486031215611cb557600080fd5b611cbe84611bff565b9250611ccc60208501611bff565b9150604084013590509250925092565b801515811461114f57600080fd5b60008060408385031215611cfd57600080fd5b611d0683611bff565b91506020830135611d1681611cdc565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611d6657600080fd5b611d6f85611bff565b9350611d7d60208601611bff565b925060408501359150606085013567ffffffffffffffff80821115611da157600080fd5b818701915087601f830112611db557600080fd5b813581811115611dc757611dc7611d21565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611e0d57611e0d611d21565b816040528281528a6020848701011115611e2657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600181811c90821680611e5e57607f821691505b602082108103611e97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611eaf57600080fd5b5051919050565b600060208284031215611ec857600080fd5b8151611b6881611cdc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105a8576105a8611ed3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4657611f46611ed3565b5060010190565b7f68747470733a2f2f697066732e696f2f697066732f0000000000000000000000815260006015600084548160018260011c91506001831680611f9157607f831692505b60208084108203611fc9577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015611fdd576001811461201657612048565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861660158b0152601585151586028b01019650612048565b60008b81526020902060005b8681101561203d5781548c82018b0152908501908301612022565b50506015858b010196505b50949998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526120966080830184611b6f565b9695505050505050565b6000602082840312156120b257600080fd5b8151611b6881611b1d56fea164736f6c6343000818000a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000165465737420426f6f6b205469746c652069732057696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000055442546957000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d5842574a5354536234744c52797441566f4a31683848514a4e3268706a4d4834445a354b555156575263716600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046570756200000000000000000000000000000000000000000000000000000000