60606040526000600460006101000a81548160ff02191690831515021790555063598ba2006005556000600655600a600d55600a600e55341561004157600080fd5b5b5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b73a1b2f1782fa7b2cb5b889f40e5865af3767b8a48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f83b956aa48e14761838b5e6aac094aa653f2be600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600863ffffffff16600d540a600d819055506010600e540a600e81905550610191600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54612710026101cd64010000000002611aa1176401000000009004565b5062278d0060055401600b81905550690dbfcee2736a19e40000600f81905550660aa87594c27ee860078190555060006008819055505b6102a2565b6000600460009054906101000a900460ff161515156101eb57600080fd5b8160036000828254019250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a2600190505b5b92915050565b611cb2806102b16000396000f3006060604052361561015d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b146102f857806306fdde0314610325578063095ea7b3146103b457806318160ddd1461040e57806323b872dd1461043757806327e235e3146104b057806329dcb0cf146104fd5780632beaead0146105265780632ddbd13a1461054f578063313ce5671461057857806344cb9d03146105ad5780634783c35b146105d65780635bf5d54c1461062b57806370a08231146106545780637d64bcb4146106a15780637e88f603146106ce57806385956649146106e35780638da5cb5b1461072557806395d89b411461077a578063a035b1fe14610809578063a9059cbb14610832578063be9a655514610874578063c885bc581461089d578063dd62ed3e146108c6578063e1be746714610932578063f2fde38b14610987578063fd6b7ef8146109c0575b6102f65b600080600b544210151561017457600080fd5b600f54600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163111156101bc57600080fd5b600754348115156101c957fe5b049150600d548202905080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254019250508190555034601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825401925050819055508060086000828254019250508190555061028d81336109d5565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156102ef57600080fd5b5b5b5b5050565b005b341561030357600080fd5b61030b610ad5565b604051808215151515815260200191505060405180910390f35b341561033057600080fd5b610338610ae8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103795780820151818401525b60208101905061035d565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103bf57600080fd5b6103f4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b21565b604051808215151515815260200191505060405180910390f35b341561041957600080fd5b610421610ca9565b6040518082815260200191505060405180910390f35b341561044257600080fd5b610496600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610caf565b604051808215151515815260200191505060405180910390f35b34156104bb57600080fd5b6104e7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610fa8565b6040518082815260200191505060405180910390f35b341561050857600080fd5b610510610fc0565b6040518082815260200191505060405180910390f35b341561053157600080fd5b610539610fc6565b6040518082815260200191505060405180910390f35b341561055a57600080fd5b610562610fcc565b6040518082815260200191505060405180910390f35b341561058357600080fd5b61058b610fd7565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34156105b857600080fd5b6105c0610fdc565b6040518082815260200191505060405180910390f35b34156105e157600080fd5b6105e9610fe2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063657600080fd5b61063e611008565b6040518082815260200191505060405180910390f35b341561065f57600080fd5b61068b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061100e565b6040518082815260200191505060405180910390f35b34156106ac57600080fd5b6106b4611058565b604051808215151515815260200191505060405180910390f35b34156106d957600080fd5b6106e1611105565b005b34156106ee57600080fd5b610723600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611202565b005b341561073057600080fd5b6107386113a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561078557600080fd5b61078d6113ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107ce5780820151818401525b6020810190506107b2565b50505050905090810190601f1680156107fb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561081457600080fd5b61081c611403565b6040518082815260200191505060405180910390f35b341561083d57600080fd5b610872600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611409565b005b341561087f57600080fd5b6108876115e6565b6040518082815260200191505060405180910390f35b34156108a857600080fd5b6108b06115ec565b6040518082815260200191505060405180910390f35b34156108d157600080fd5b61091c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061175c565b6040518082815260200191505060405180910390f35b341561093d57600080fd5b6109456117e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561099257600080fd5b6109be600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061180a565b005b34156109cb57600080fd5b6109d36118e6565b005b6109de816119b9565b6109fb816298968062c65d4085028115156109f557fe5b04611aa1565b50610a266000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119b9565b610a646000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662989680622625a08502811515610a5e57fe5b04611aa1565b50610a90600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119b9565b610acf600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16629896806207a1208502811515610ac957fe5b04611aa1565b505b5050565b600460009054906101000a900460ff1681565b6040805190810160405280600c81526020017f52697665747a20546f6b656e000000000000000000000000000000000000000081525081565b600080821480610bad57506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1515610bb857600080fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190505b92915050565b60035481565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cfd57600080fd5b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011015610d8a57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610e1357600080fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b9392505050565b60016020528060005260406000206000915090505481565b600b5481565b600c5481565b600060035490505b90565b600881565b60085481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110b557600080fd5b6001600460006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1600190505b5b90565b600b544210801561111857506002600654105b1561112257600080fd5b600061112d3361100e565b141561113857600080fd5b600f54600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163110156111fe573373ffffffffffffffffffffffffffffffffffffffff166108fc601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549081150290604051600060405180830381858888f1935050505015156111fd57600080fd5b5b5b5b565b600b544210151561121257600080fd5b600f54600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631111561125a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112b557600080fd5b6112be816119b9565b6112c88183611aa1565b506112f36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119b9565b6113316000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662989680622625a0850281151561132b57fe5b04611aa1565b5061135d600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119b9565b61139c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16629896806207a120850281151561139657fe5b04611aa1565b505b5b5b5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600381526020017f527654000000000000000000000000000000000000000000000000000000000081525081565b60075481565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561145557600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110156114e257600080fd5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b5050565b60055481565b60008062278d00600b540142101561160357600080fd5b600b544210801561161657506002600654105b1561162057600080fd5b600061162b3361100e565b141561163657600080fd5b61163e611b76565b905060008114156116525760009150611756565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561169257600080fd5b600061169d3361100e565b141561170a57601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090555050611752565b42601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b8091505b5b5b5090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b92915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561186557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156118a157600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b3373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119b657600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156119b557600080fd5b5b5b565b600c54601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111515611a9d5742601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611a568161100e565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b5b50565b6000600460009054906101000a900460ff16151515611abf57600080fd5b8160036000828254019250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a2600190505b5b92915050565b600080600c54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154101515611bcf5760009150611c82565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600c54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154111515611c6d57611c6a3361100e565b90505b6008548160105402811515611c7e57fe5b0491505b50905600a165627a7a72305820139f06314ffd5e631c357ff037f540529882d0e30e1b8cadbf401ae5d8735bef0029