608060405234801561001057600080fd5b5061299b806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146106d8578063a9059cbb1461073e578063ca15c873146107a4578063cd6dc687146107e6578063d547741f14610834578063dd62ed3e146108825761014d565b806370a08231146104b35780639010d07c1461050b57806391d148541461058357806395d89b41146105e95780639dc29fac1461066c578063a217fddf146106ba5761014d565b8063282c51f311610115578063282c51f3146103215780632f2ff15d1461033f578063313ce5671461038d57806336568abe146103b157806339509351146103ff57806340c10f19146104655761014d565b806306fdde0314610152578063095ea7b3146101d557806318160ddd1461023b57806323b872dd14610259578063248a9ca3146102df575b600080fd5b61015a6108fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561019a57808201518184015260208101905061017f565b50505050905090810190601f1680156101c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610221600480360360408110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061099c565b604051808215151515815260200191505060405180910390f35b6102436109ba565b6040518082815260200191505060405180910390f35b6102c56004803603606081101561026f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c4565b604051808215151515815260200191505060405180910390f35b61030b600480360360208110156102f557600080fd5b8101908080359060200190929190505050610a9d565b6040518082815260200191505060405180910390f35b610329610abd565b6040518082815260200191505060405180910390f35b61038b6004803603604081101561035557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610af6565b005b610395610b80565b604051808260ff1660ff16815260200191505060405180910390f35b6103fd600480360360408110156103c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b97565b005b61044b6004803603604081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c30565b604051808215151515815260200191505060405180910390f35b6104b16004803603604081101561047b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ce3565b005b6104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d53565b6040518082815260200191505060405180910390f35b6105416004803603604081101561052157600080fd5b810190808035906020019092919080359060200190929190505050610d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105cf6004803603604081101561059957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dce565b604051808215151515815260200191505060405180910390f35b6105f1610e00565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610631578082015181840152602081019050610616565b50505050905090810190601f16801561065e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106b86004803603604081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea2565b005b6106c2610f44565b6040518082815260200191505060405180910390f35b610724600480360360408110156106ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f4b565b604051808215151515815260200191505060405180910390f35b61078a6004803603604081101561075457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611018565b604051808215151515815260200191505060405180910390f35b6107d0600480360360208110156107ba57600080fd5b8101908080359060200190929190505050611036565b6040518082815260200191505060405180910390f35b610832600480360360408110156107fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105d565b005b6108806004803603604081101561084a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123f565b005b6108e46004803603604081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a9565b6040518082815260200191505060405180910390f35b606060688054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109925780601f1061096757610100808354040283529160200191610992565b820191906000526020600020905b81548152906001019060200180831161097557829003601f168201915b5050505050905090565b60006109b06109a9611330565b8484611338565b6001905092915050565b6000606754905090565b60006109d184848461152f565b610a92846109dd611330565b610a8d856040518060600160405280602881526020016127cf60289139606660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a43611330565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f49092919063ffffffff16565b611338565b600190509392505050565b600060976000838152602001908152602001600020600201549050919050565b60405180807f4255524e45525f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902081565b610b1d6097600084815260200190815260200160002060020154610b18611330565b610dce565b610b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612706602f913960400191505060405180910390fd5b610b7c82826118b4565b5050565b6000606a60009054906101000a900460ff16905090565b610b9f611330565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612937602f913960400191505060405180910390fd5b610c2c8282611948565b5050565b6000610cd9610c3d611330565b84610cd48560666000610c4e611330565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119dc90919063ffffffff16565b611338565b6001905092915050565b610cf06000801b33610dce565b610d45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806128e96029913960400191505060405180910390fd5b610d4f8282611a64565b5050565b6000606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610dc68260976000868152602001908152602001600020600001611c2d90919063ffffffff16565b905092915050565b6000610df88260976000868152602001908152602001600020600001611c4790919063ffffffff16565b905092915050565b606060698054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b610ee160405180807f4255524e45525f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902033610dce565b610f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806128c66023913960400191505060405180910390fd5b610f408282611c77565b5050565b6000801b81565b600061100e610f58611330565b84611009856040518060600160405280602581526020016129126025913960666000610f82611330565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f49092919063ffffffff16565b611338565b6001905092915050565b600061102c611025611330565b848461152f565b6001905092915050565b600061105660976000848152602001908152602001600020600001611e3d565b9050919050565b600060019054906101000a900460ff168061107c575061107b611e52565b5b8061109357506000809054906101000a900460ff16155b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127f7602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611138576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6111ac6040518060400160405280600681526020017f4d6972726f7200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d4952524f520000000000000000000000000000000000000000000000000000815250611e69565b6111b4611f7c565b6111cd836111c0610b80565b60ff16600a0a8402611a64565b61120c60405180807f4255524e45525f524f4c45000000000000000000000000000000000000000000815250600b01905060405180910390208461207b565b6112196000801b8461207b565b801561123a5760008060016101000a81548160ff0219169083151502179055505b505050565b6000801b82141561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061286b6037913960400191505060405180910390fd5b6112a58282612089565b5050565b6000606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806128a26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127576022913960400191505060405180910390fd5b80606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806128466025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806126e36023913960400191505060405180910390fd5b611646838383612113565b6116b28160405180606001604052806026815260200161277960269139606560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f49092919063ffffffff16565b606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061174781606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119dc90919063ffffffff16565b606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906118a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561186657808201518184015260208101905061184b565b50505050905090810190601f1680156118935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6118dc816097600085815260200190815260200160002060000161211890919063ffffffff16565b15611944576118e9611330565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611970816097600085815260200190815260200160002060000161214890919063ffffffff16565b156119d85761197d611330565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080828401905083811015611a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b611b1360008383612113565b611b28816067546119dc90919063ffffffff16565b606781905550611b8081606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119dc90919063ffffffff16565b606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611c3c8360000183612178565b60001c905092915050565b6000611c6f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6121fb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806128256021913960400191505060405180910390fd5b611d0982600083612113565b611d758160405180606001604052806022815260200161273560229139606560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f49092919063ffffffff16565b606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dcd8160675461221e90919063ffffffff16565b606781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611e4b82600001612268565b9050919050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680611e885750611e87611e52565b5b80611e9f57506000809054906101000a900460ff16155b611ef4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127f7602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611f44576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611f4c612279565b611f568383612378565b8015611f775760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680611f9b5750611f9a611e52565b5b80611fb257506000809054906101000a900460ff16155b612007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127f7602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612057576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156120785760008060016101000a81548160ff0219169083151502179055505b50565b61208582826118b4565b5050565b6120b060976000848152602001908152602001600020600201546120ab611330565b610dce565b612105576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061279f6030913960400191505060405180910390fd5b61210f8282611948565b5050565b505050565b6000612140836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6124c3565b905092915050565b6000612170836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612533565b905092915050565b6000818360000180549050116121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126c16022913960400191505060405180910390fd5b8260000182815481106121e857fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600061226083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117f4565b905092915050565b600081600001805490509050919050565b600060019054906101000a900460ff16806122985750612297611e52565b5b806122af57506000809054906101000a900460ff16155b612304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127f7602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612354576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156123755760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806123975750612396611e52565b5b806123ae57506000809054906101000a900460ff16155b612403576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127f7602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612453576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019061246992919061261b565b50816069908051906020019061248092919061261b565b506012606a60006101000a81548160ff021916908360ff16021790555080156124be5760008060016101000a81548160ff0219169083151502179055505b505050565b60006124cf83836121fb565b61252857826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061252d565b600090505b92915050565b6000808360010160008481526020019081526020016000205490506000811461260f576000600182039050600060018660000180549050039050600086600001828154811061257e57fe5b906000526020600020015490508087600001848154811061259b57fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806125d357fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612615565b60009150505b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061265c57805160ff191683800117855561268a565b8280016001018555821561268a579182015b8281111561268957825182559160200191906001019061266e565b5b509050612697919061269b565b5090565b6126bd91905b808211156126b95760008160009055506001016126a1565b5090565b9056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734d6f646966696564416363657373436f6e74726f6c3a2063616e6e6f74207265766f6b652064656661756c742061646d696e20726f6c6545524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d6972726f72546f6b656e3a2043616c6c6572206973206e6f742061206275726e65724d6972726f72546f6b656e3a206d75737420686176652061646d696e20726f6c6520746f206d696e7445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220835aec0881addbd2f226a29b7e66bd7464bb6c9d07f40aa8a50bde8657d7fa3464736f6c63430006020033