60806040526000600860006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601081526020017f53656e7369747275737420546f6b656e000000000000000000000000000000008152506040518060400160405280600481526020017f53455453000000000000000000000000000000000000000000000000000000008152506012630bebc2008383838260039080519060200190620000bb92919062000787565b508160049080519060200190620000d492919062000787565b5080600560006101000a81548160ff021916908360ff1602179055505050506200010433620001c260201b60201c565b62000115336200022360201b60201c565b6000811162000170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018062002a476027913960400191505060405180910390fd5b6000620001928360ff16600a0a836200028460201b62001e731790919060201c565b9050620001a633826200030f60201b60201c565b620001b733620004d960201b60201c565b505050505062000836565b620001dd8160066200053a60201b62001c911790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f5f623b47bfe36aaaf34e1462c270eb404748419392eec3cde90904bd96d90e3460405160405180910390a250565b6200023e8160076200053a60201b62001c911790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f13f07a5e41c05094bc8d0f13990d083807823116008d9b6b30245a485aec32db60405160405180910390a250565b60008083141562000299576000905062000309565b6000828402905082848281620002ab57fe5b041462000304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062002a046021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620003cf816002546200061e60201b620013d21790919060201c565b6002819055506200042d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200061e60201b620013d21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b620004f48160096200053a60201b62001c911790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f20b54ba3b54af0ae97076cd941c65ed4fec15c91c8f6faa21ad9379df5cdad7660405160405180910390a250565b6200054c8282620006a760201b60201c565b15620005c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000808284019050838110156200069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062002a256022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007ca57805160ff1916838001178555620007fb565b82800160010185558215620007fb579182015b82811115620007fa578251825591602001919060010190620007dd565b5b5090506200080a91906200080e565b5090565b6200083391905b808211156200082f57600081600090555060010162000815565b5090565b90565b6121be80620008466000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a9059cbb1161007c578063a9059cbb146106a7578063bedb980b1461070d578063dd62ed3e14610717578063e341d5651461078f578063e3ebf98d146107d3578063f1b50c1d1461082f57610158565b806370a08231146104ca57806379cc6790146105225780637ca395c3146105705780637ec918ee146105b457806395d89b41146105be578063a457c2d71461064157610158565b80633950935111610115578063395093511461033057806339e03905146103965780633a5349a9146103da57806342966c68146104365780634c9c3e8a1461046457806360e2a5881461046e57610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806318e6b3671461026457806323b872dd14610286578063313ce5671461030c575b600080fd5b610165610839565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108db565b604051808215151515815260200191505060405180910390f35b61024e6108f9565b6040518082815260200191505060405180910390f35b61026c610903565b604051808215151515815260200191505060405180910390f35b6102f26004803603606081101561029c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061091a565b604051808215151515815260200191505060405180910390f35b6103146109f3565b604051808260ff1660ff16815260200191505060405180910390f35b61037c6004803603604081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0a565b604051808215151515815260200191505060405180910390f35b6103d8600480360360208110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b61041c600480360360208110156103f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b27565b604051808215151515815260200191505060405180910390f35b6104626004803603602081101561044c57600080fd5b8101908080359060200190929190505050610b44565b005b61046c610b58565b005b6104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc1565b604051808215151515815260200191505060405180910390f35b61050c600480360360208110156104e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bde565b6040518082815260200191505060405180910390f35b61056e6004803603604081101561053857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c26565b005b6105b26004803603602081101561058657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c34565b005b6105bc610c9e565b005b6105c6610d07565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106065780820151818401526020810190506105eb565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61068d6004803603604081101561065757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610da9565b604051808215151515815260200191505060405180910390f35b6106f3600480360360408110156106bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e76565b604051808215151515815260200191505060405180910390f35b610715610e94565b005b6107796004803603604081101561072d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610efd565b6040518082815260200191505060405180910390f35b6107d1600480360360208110156107a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f84565b005b610815600480360360208110156107e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fee565b604051808215151515815260200191505060405180910390f35b61083761100b565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108d15780601f106108a6576101008083540402835291602001916108d1565b820191906000526020600020905b8154815290600101906020018083116108b457829003601f168201915b5050505050905090565b60006108ef6108e8611086565b848461108e565b6001905092915050565b6000600254905090565b6000600860009054906101000a900460ff16905090565b6000610927848484611285565b6109e884610933611086565b6109e38560405180606001604052806028815260200161203560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610999611086565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113129092919063ffffffff16565b61108e565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610ab3610a17611086565b84610aae8560016000610a28611086565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d290919063ffffffff16565b61108e565b6001905092915050565b610ac633610b27565b610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180611fbe6035913960400191505060405180910390fd5b610b248161145a565b50565b6000610b3d8260066114b490919063ffffffff16565b9050919050565b610b55610b4f611086565b82611592565b50565b610b6133610bc1565b610bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061210d6037913960400191505060405180910390fd5b610bbf3361174a565b565b6000610bd78260076114b490919063ffffffff16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c3082826117a4565b5050565b610c3d33610fee565b610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180611f1d6037913960400191505060405180910390fd5b610c9b81611873565b50565b610ca733610b27565b610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180611fbe6035913960400191505060405180910390fd5b610d05336118cd565b565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d9f5780601f10610d7457610100808354040283529160200191610d9f565b820191906000526020600020905b815481529060010190602001808311610d8257829003601f168201915b5050505050905090565b6000610e6c610db6611086565b84610e67856040518060600160405280602581526020016121656025913960016000610de0611086565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113129092919063ffffffff16565b61108e565b6001905092915050565b6000610e8a610e83611086565b8484611285565b6001905092915050565b610e9d33610fee565b610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180611f1d6037913960400191505060405180910390fd5b610efb33611927565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f8d33610bc1565b610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061210d6037913960400191505060405180910390fd5b610feb81611981565b50565b60006110048260096114b490919063ffffffff16565b9050919050565b61101433610fee565b611069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180611f1d6037913960400191505060405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611114576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806120e96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f766022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61128d610903565b8061129d575061129c83610b27565b5b806112ad57506112ac82610bc1565b5b611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121446021913960400191505060405180910390fd5b61130d8383836119db565b505050565b60008383111582906113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611384578082015181840152602081019050611369565b50505050905090810190601f1680156113b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61146e816006611c9190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f5f623b47bfe36aaaf34e1462c270eb404748419392eec3cde90904bd96d90e3460405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061205d6022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611618576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120a36021913960400191505060405180910390fd5b61168381604051806060016040528060228152602001611f54602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113129092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116da81600254611d6c90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61175e816007611db690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f83260bd5cb0f49df24817f246b12eaf6cac3c7667ce1b39ac4f3733dbd378c8360405160405180910390a250565b6117ae8282611592565b61186f826117ba611086565b61186a8460405180606001604052806024815260200161207f60249139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611820611086565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113129092919063ffffffff16565b61108e565b5050565b611887816009611c9190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f20b54ba3b54af0ae97076cd941c65ed4fec15c91c8f6faa21ad9379df5cdad7660405160405180910390a250565b6118e1816006611db690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fef15eca2e094874c606991ec6bac18e0969b4b5747ac4afb4d007149add9837760405160405180910390a250565b61193b816009611db690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f9875305e3123604588f12a5ad9f8b6738bfdcde245815243822ded4946eaf8c460405160405180910390a250565b611995816007611c9190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f13f07a5e41c05094bc8d0f13990d083807823116008d9b6b30245a485aec32db60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806120c46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611efa6023913960400191505060405180910390fd5b611b5281604051806060016040528060268152602001611f98602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113129092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611be5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b611c9b82826114b4565b15611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611dae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611312565b905092915050565b611dc082826114b4565b611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611ff36021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080831415611e865760009050611ef3565b6000828402905082848281611e9757fe5b0414611eee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120146021913960400191505060405180910390fd5b809150505b9291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737354686973206f7065726174696f6e2063616e20626520706572666f726d6564206279205472616e736665722041646d696e73206f6e6c7945524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636554686973206f7065726174696f6e2063616e20626520706572666f726d65642062792053656e6465722041646d696e73206f6e6c79526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737354686973206f7065726174696f6e2063616e20626520706572666f726d65642062792052656365697665722041646d696e73206f6e6c79546f6b656e207472616e73666572206973206e6f7420656e61626c65642079657445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820a1b7291915d445aad3cc44d4c5329723fe930d4c73f4e7cff3f1d7b0f181347f64736f6c63430005110032536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737354686520746f74616c20737570706c79206d7573742062652067726561746572207468616e2030