60806040523480156200001157600080fd5b506040518060400160405280601581526020017f4e6578742047656e65726174696f6e204d6f6e657900000000000000000000008152506040518060400160405280600381526020017f4e474d00000000000000000000000000000000000000000000000000000000008152508181818181600490805190602001906200009a92919062000363565b508060059080519060200190620000b392919062000363565b506012600660006101000a81548160ff021916908360ff16021790555050506000600660016101000a81548160ff021916908315150217905550620001116000801b62000105620001af60201b60201c565b620001b760201b60201c565b620001527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a662000146620001af60201b60201c565b620001b760201b60201c565b620001937f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a62000187620001af60201b60201c565b620001b760201b60201c565b5050620001a76006620001cd60201b60201c565b505062000409565b600033905090565b620001c98282620001eb60201b60201c565b5050565b80600660006101000a81548160ff021916908360ff16021790555050565b62000219816000808581526020019081526020016000206000016200028e60201b6200138d1790919060201c565b156200028a576200022f620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002be836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002c660201b60201c565b905092915050565b6000620002da83836200034060201b60201c565b620003355782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200033a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003a657805160ff1916838001178555620003d7565b82800160010185558215620003d7579182015b82811115620003d6578251825591602001919060010190620003b9565b5b509050620003e69190620003ea565b5090565b5b8082111562000405576000816000905550600101620003eb565b5090565b61275b80620004196000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d539139314610861578063d547741f1461087f578063dd62ed3e146108cd578063e63ab1e914610945576101a9565b8063a457c2d714610757578063a9059cbb146107bb578063ca15c8731461081f576101a9565b80639010d07c116100d35780639010d07c146105f057806391d148541461065257806395d89b41146106b6578063a217fddf14610739576101a9565b806370a082311461054057806379cc6790146105985780638456cb59146105e6576101a9565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a1461049a57806340c10f19146104a457806342966c68146104f25780635c975abb14610520576101a9565b8063313ce567146103c757806336568abe146103e85780633950935114610436576101a9565b806306fdde03146101ae578063095ea7b31461023157806318160ddd1461029557806323b872dd146102b3578063248a9ca3146103375780632f2ff15d14610379575b600080fd5b6101b6610963565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a05565b60405180821515815260200191505060405180910390f35b61029d610a23565b6040518082815260200191505060405180910390f35b61031f600480360360608110156102c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a2d565b60405180821515815260200191505060405180910390f35b6103636004803603602081101561034d57600080fd5b8101908080359060200190929190505050610b06565b6040518082815260200191505060405180910390f35b6103c56004803603604081101561038f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b25565b005b6103cf610bae565b604051808260ff16815260200191505060405180910390f35b610434600480360360408110156103fe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc5565b005b6104826004803603604081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c5e565b60405180821515815260200191505060405180910390f35b6104a2610d11565b005b6104f0600480360360408110156104ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610da1565b005b61051e6004803603602081101561050857600080fd5b8101908080359060200190929190505050610e35565b005b610528610ec7565b60405180821515815260200191505060405180910390f35b6105826004803603602081101561055657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ede565b6040518082815260200191505060405180910390f35b6105e4600480360360408110156105ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f27565b005b6105ee610f89565b005b6106266004803603604081101561060657600080fd5b810190808035906020019092919080359060200190929190505050611019565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61069e6004803603604081101561066857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061104a565b60405180821515815260200191505060405180910390f35b6106be61107b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106fe5780820151818401526020810190506106e3565b50505050905090810190601f16801561072b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61074161111d565b6040518082815260200191505060405180910390f35b6107a36004803603604081101561076d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b60405180821515815260200191505060405180910390f35b610807600480360360408110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111f1565b60405180821515815260200191505060405180910390f35b61084b6004803603602081101561083557600080fd5b810190808035906020019092919050505061120f565b6040518082815260200191505060405180910390f35b610869611235565b6040518082815260200191505060405180910390f35b6108cb6004803603604081101561089557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611259565b005b61092f600480360360408110156108e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112e2565b6040518082815260200191505060405180910390f35b61094d611369565b6040518082815260200191505060405180910390f35b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109fb5780601f106109d0576101008083540402835291602001916109fb565b820191906000526020600020905b8154815290600101906020018083116109de57829003601f168201915b5050505050905090565b6000610a19610a126113bd565b84846113c5565b6001905092915050565b6000600354905090565b6000610a3a8484846115bc565b610afb84610a466113bd565b610af68560405180606001604052806028815260200161254f60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aac6113bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118819092919063ffffffff16565b6113c5565b600190509392505050565b6000806000838152602001908152602001600020600201549050919050565b610b4b60008084815260200190815260200160002060020154610b466113bd565b61104a565b610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061244d602f913960400191505060405180910390fd5b610baa828261193b565b5050565b6000600660009054906101000a900460ff16905090565b610bcd6113bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806126cd602f913960400191505060405180910390fd5b610c5a82826119ce565b5050565b6000610d07610c6b6113bd565b84610d028560026000610c7c6113bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6190919063ffffffff16565b6113c5565b6001905092915050565b610d427f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d3d6113bd565b61104a565b610d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603981526020018061249e6039913960400191505060405180910390fd5b610d9f611ae9565b565b610dd27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dcd6113bd565b61104a565b610e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806125ad6036913960400191505060405180910390fd5b610e318282611bd4565b5050565b610e667f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610e616113bd565b61104a565b610ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806125776036913960400191505060405180910390fd5b610ec481611d9d565b50565b6000600660019054906101000a900460ff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610f66826040518060600160405280602481526020016125e360249139610f5786610f526113bd565b6112e2565b6118819092919063ffffffff16565b9050610f7a83610f746113bd565b836113c5565b610f848383611db1565b505050565b610fba7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fb56113bd565b61104a565b61100f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806126716037913960400191505060405180910390fd5b611017611f77565b565b60006110428260008086815260200190815260200160002060000161206390919063ffffffff16565b905092915050565b60006110738260008086815260200190815260200160002060000161207d90919063ffffffff16565b905092915050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b5050505050905090565b6000801b81565b60006111e76111316113bd565b846111e2856040518060600160405280602581526020016126a8602591396002600061115b6113bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118819092919063ffffffff16565b6113c5565b6001905092915050565b60006112056111fe6113bd565b84846115bc565b6001905092915050565b600061122e6000808481526020019081526020016000206000016120ad565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61127f6000808481526020019081526020016000206002015461127a6113bd565b61104a565b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061251f6030913960400191505060405180910390fd5b6112de82826119ce565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60006113b5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6120c2565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061264d6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806124d76022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806126286025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061242a6023913960400191505060405180910390fd5b6116d3838383612132565b61173f816040518060600160405280602681526020016124f960269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118819092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117d481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118f35780820151818401526020810190506118d8565b50505050905090810190601f1680156119205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b6119628160008085815260200190815260200160002060000161138d90919063ffffffff16565b156119ca5761196f6113bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6119f58160008085815260200190815260200160002060000161214290919063ffffffff16565b15611a5d57611a026113bd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080828401905083811015611adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611af1610ec7565b611b63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600660016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ba76113bd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b611c8360008383612132565b611c9881600354611a6190919063ffffffff16565b600381905550611cf081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611dae611da86113bd565b82611db1565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126076021913960400191505060405180910390fd5b611e4382600083612132565b611eaf8160405180606001604052806022815260200161247c60229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118819092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f078160035461217290919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611f7f610ec7565b15611ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600660016101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120366113bd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061207283600001836121f5565b60001c905092915050565b60006120a5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612278565b905092915050565b60006120bb8260000161229b565b9050919050565b60006120ce8383612278565b61212757826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061212c565b600090505b92915050565b61213d8383836122ac565b505050565b600061216a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61231a565b905092915050565b6000828211156121ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600081836000018054905011612256576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806124086022913960400191505060405180910390fd5b82600001828154811061226557fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b6122b7838383612402565b6122bf610ec7565b15612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806126fc602a913960400191505060405180910390fd5b505050565b600080836001016000848152602001908152602001600020549050600081146123f6576000600182039050600060018660000180549050039050600086600001828154811061236557fe5b906000526020600020015490508087600001848154811061238257fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806123ba57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506123fc565b60009150505b92915050565b50505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332305072657365744d696e7465725061757365723a206d75737420686176652070617573657220726f6c6520746f20756e706175736545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332305072657365744d696e7465725061757365723a206d7573742068617665206d696e74657220726f6c6520746f206275726e45524332305072657365744d696e7465725061757365723a206d7573742068617665206d696e74657220726f6c6520746f206d696e7445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332305072657365744d696e7465725061757365723a206d75737420686176652070617573657220726f6c6520746f20706175736545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c6645524332305061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564a264697066735822122069a50cc803c71c58d9947ec60afd768ff3f922fba343313796064132e7992a0164736f6c634300060c0033