60806040526040518060400160405280600781526020017f4265726d756461000000000000000000000000000000000000000000000000008152505f908162000049919062000725565b506040518060400160405280600781526020017f4245524d554441000000000000000000000000000000000000000000000000008152506001908162000090919062000725565b505f600960146101000a81548160ff021916908360ff1602179055505f600960156101000a81548160ff021916908360ff160217905550348015620000d3575f80fd5b5060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001600960149054906101000a900460ff1660ff168152602001600960159054906101000a900460ff1660ff1681525060025f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a81548160ff021916908360ff1602179055506040820151815f0160156101000a81548160ff021916908360ff1602179055509050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b533336200043d60201b60201c565b6064806012600a620002c8919062000992565b610fcc620002d79190620009e2565b620002e39190620009e2565b620002ef919062000a59565b60035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516200042f919062000aa1565b60405180910390a362000abc565b8160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200053d57607f821691505b602082108103620005535762000552620004f8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200057a565b620005c386836200057a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200060d620006076200060184620005db565b620005e4565b620005db565b9050919050565b5f819050919050565b6200062883620005ed565b62000640620006378262000614565b84845462000586565b825550505050565b5f90565b6200065662000648565b620006638184846200061d565b505050565b5b818110156200068a576200067e5f826200064c565b60018101905062000669565b5050565b601f821115620006d957620006a38162000559565b620006ae846200056b565b81016020851015620006be578190505b620006d6620006cd856200056b565b83018262000668565b50505b505050565b5f82821c905092915050565b5f620006fb5f1984600802620006de565b1980831691505092915050565b5f620007158383620006ea565b9150826002028217905092915050565b6200073082620004c1565b67ffffffffffffffff8111156200074c576200074b620004cb565b5b62000758825462000525565b620007658282856200068e565b5f60209050601f8311600181146200079b575f841562000786578287015190505b62000792858262000708565b86555062000801565b601f198416620007ab8662000559565b5f5b82811015620007d457848901518255600182019150602085019450602081019050620007ad565b86831015620007f45784890151620007f0601f891682620006ea565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000893578086048111156200086b576200086a62000809565b5b60018516156200087b5780820291505b80810290506200088b8562000836565b94506200084b565b94509492505050565b5f82620008ad57600190506200097f565b81620008bc575f90506200097f565b8160018114620008d55760028114620008e05762000916565b60019150506200097f565b60ff841115620008f557620008f462000809565b5b8360020a9150848211156200090f576200090e62000809565b5b506200097f565b5060208310610133831016604e8410600b8410161715620009505782820a9050838111156200094a576200094962000809565b5b6200097f565b6200095f848484600162000842565b9250905081840481111562000979576200097862000809565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200099e82620005db565b9150620009ab8362000986565b9250620009da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200089c565b905092915050565b5f620009ee82620005db565b9150620009fb83620005db565b925082820262000a0b81620005db565b9150828204841483151762000a255762000a2462000809565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000a6582620005db565b915062000a7283620005db565b92508262000a855762000a8462000a2c565b5b828204905092915050565b62000a9b81620005db565b82525050565b5f60208201905062000ab65f83018462000a90565b92915050565b611c3b8062000aca5f395ff3fe6080604052600436106100e0575f3560e01c806395d89b411161007e578063c6ba48be11610058578063c6ba48be146102d9578063c9567bf914610301578063d28d885214610317578063dd62ed3e14610341576100e7565b806395d89b4114610249578063a9059cbb14610273578063b09f1266146102af576100e7565b806323b872dd116100ba57806323b872dd1461017b578063313ce567146101b75780634abe3052146101e157806370a082311461020d576100e7565b806306fdde03146100eb578063095ea7b31461011557806318160ddd14610151576100e7565b366100e757005b5f80fd5b3480156100f6575f80fd5b506100ff61037d565b60405161010c919061140a565b60405180910390f35b348015610120575f80fd5b5061013b600480360381019061013691906114bb565b61040c565b6040516101489190611513565b60405180910390f35b34801561015c575f80fd5b506101656104f9565b604051610172919061153b565b60405180910390f35b348015610186575f80fd5b506101a1600480360381019061019c9190611554565b610517565b6040516101ae9190611513565b60405180910390f35b3480156101c2575f80fd5b506101cb6105ba565b6040516101d891906115bf565b60405180910390f35b3480156101ec575f80fd5b506101f56105bf565b604051610204939291906115e7565b60405180910390f35b348015610218575f80fd5b50610233600480360381019061022e919061161c565b61060d565b604051610240919061153b565b60405180910390f35b348015610254575f80fd5b5061025d610622565b60405161026a919061140a565b60405180910390f35b34801561027e575f80fd5b50610299600480360381019061029491906114bb565b6106b2565b6040516102a69190611513565b60405180910390f35b3480156102ba575f80fd5b506102c36106c6565b6040516102d0919061140a565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa9190611671565b610752565b005b34801561030c575f80fd5b506103156107cc565b005b348015610322575f80fd5b5061032b610a08565b604051610338919061140a565b60405180910390f35b34801561034c575f80fd5b50610367600480360381019061036291906116af565b610a93565b604051610374919061153b565b60405180910390f35b60605f805461038b9061171a565b80601f01602080910402602001604051908101604052809291908181526020018280546103b79061171a565b80156104025780601f106103d957610100808354040283529160200191610402565b820191905f5260205f20905b8154815290600101906020018083116103e557829003601f168201915b5050505050905090565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104e7919061153b565b60405180910390a36001905092915050565b6012600a61050791906118a6565b610fcc61051491906118f0565b81565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461059f9190611931565b925050819055506105b1848484610ab3565b90509392505050565b601281565b6002805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff1690805f0160159054906101000a900460ff16905083565b6003602052805f5260405f205f915090505481565b6060600180546106319061171a565b80601f016020809104026020016040519081016040528092919081815260200182805461065d9061171a565b80156106a85780601f1061067f576101008083540402835291602001916106a8565b820191905f5260205f20905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b5f6106be338484610ab3565b905092915050565b600180546106d39061171a565b80601f01602080910402602001604051908101604052809291908181526020018280546106ff9061171a565b801561074a5780601f106107215761010080835404028352916020019161074a565b820191905f5260205f20905b81548152906001019060200180831161072d57829003601f168201915b505050505081565b61075a611318565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107be576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c88282611342565b5050565b6107d4611318565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080a575f80fd5b600760159054906101000a900460ff1615610823575f80fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610881573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a59190611978565b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610905573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109299190611978565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663e6a4390530846040518363ffffffff1660e01b81526004016109679291906119a3565b602060405180830381865afa158015610982573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a69190611978565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760156101000a81548160ff021916908315150217905550505050565b5f8054610a149061171a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a409061171a565b8015610a8b5780601f10610a6257610100808354040283529160200191610a8b565b820191905f5260205f20905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b6004602052815f5260405f20602052805f5260405f205f91509150505481565b5f80610abd611318565b9050600760159054906101000a900460ff1680610b0557508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80610b3b57508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b610b43575f80fd5b8260035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b8f9190611931565b9250508190555060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610bff5750600760149054906101000a900460ff16155b8015610c6e575060646012600a610c1691906118a6565b610fcc610c2391906118f0565b610c2d91906119f7565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b8015610ca657508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610f38576001600760146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610ce257610ce1611a27565b5b604051908082528060200260200182016040528015610d105781602001602082028036833780820191505090505b50905030815f81518110610d2757610d26611a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de29190611978565b81600181518110610df657610df5611a54565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663eb6f613960646012600a610e7091906118a6565b610fcc610e7d91906118f0565b610e8791906119f7565b5f8430426040518663ffffffff1660e01b8152600401610eab959493929190611b7a565b5f604051808303815f87803b158015610ec2575f80fd5b505af1158015610ed4573d5f803e3d5ffd5b505050508173ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610f1b573d5f803e3d5ffd5b505f600760146101000a81548160ff021916908315150217905550505b5f8060025f0160149054906101000a900460ff1660025f0160159054906101000a900460ff16915091503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610fb1575060011515600760159054906101000a900460ff161515145b15611092575f606460055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146110135783611015565b825b60ff168761102391906118f0565b61102d91906119f7565b9050808661103b9190611931565b95508060035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110899190611bd2565b92505081905550505b8460035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110de9190611bd2565b9250508190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036111c4578573ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516111b7919061153b565b60405180910390a361130a565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036112a35760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611296919061153b565b60405180910390a3611309565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611300919061153b565b60405180910390a35b5b600193505050509392505050565b5f60025f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8160025f0160146101000a81548160ff021916908360ff1602179055508060025f0160156101000a81548160ff021916908360ff1602179055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156113b757808201518184015260208101905061139c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6113dc82611380565b6113e6818561138a565b93506113f681856020860161139a565b6113ff816113c2565b840191505092915050565b5f6020820190508181035f83015261142281846113d2565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6114578261142e565b9050919050565b6114678161144d565b8114611471575f80fd5b50565b5f813590506114828161145e565b92915050565b5f819050919050565b61149a81611488565b81146114a4575f80fd5b50565b5f813590506114b581611491565b92915050565b5f80604083850312156114d1576114d061142a565b5b5f6114de85828601611474565b92505060206114ef858286016114a7565b9150509250929050565b5f8115159050919050565b61150d816114f9565b82525050565b5f6020820190506115265f830184611504565b92915050565b61153581611488565b82525050565b5f60208201905061154e5f83018461152c565b92915050565b5f805f6060848603121561156b5761156a61142a565b5b5f61157886828701611474565b935050602061158986828701611474565b925050604061159a868287016114a7565b9150509250925092565b5f60ff82169050919050565b6115b9816115a4565b82525050565b5f6020820190506115d25f8301846115b0565b92915050565b6115e18161144d565b82525050565b5f6060820190506115fa5f8301866115d8565b61160760208301856115b0565b61161460408301846115b0565b949350505050565b5f602082840312156116315761163061142a565b5b5f61163e84828501611474565b91505092915050565b611650816115a4565b811461165a575f80fd5b50565b5f8135905061166b81611647565b92915050565b5f80604083850312156116875761168661142a565b5b5f6116948582860161165d565b92505060206116a58582860161165d565b9150509250929050565b5f80604083850312156116c5576116c461142a565b5b5f6116d285828601611474565b92505060206116e385828601611474565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061173157607f821691505b602082108103611744576117436116ed565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156117cc578086048111156117a8576117a761174a565b5b60018516156117b75780820291505b80810290506117c585611777565b945061178c565b94509492505050565b5f826117e4576001905061189f565b816117f1575f905061189f565b8160018114611807576002811461181157611840565b600191505061189f565b60ff8411156118235761182261174a565b5b8360020a91508482111561183a5761183961174a565b5b5061189f565b5060208310610133831016604e8410600b84101617156118755782820a9050838111156118705761186f61174a565b5b61189f565b6118828484846001611783565b925090508184048111156118995761189861174a565b5b81810290505b9392505050565b5f6118b082611488565b91506118bb836115a4565b92506118e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846117d5565b905092915050565b5f6118fa82611488565b915061190583611488565b925082820261191381611488565b9150828204841483151761192a5761192961174a565b5b5092915050565b5f61193b82611488565b915061194683611488565b925082820390508181111561195e5761195d61174a565b5b92915050565b5f815190506119728161145e565b92915050565b5f6020828403121561198d5761198c61142a565b5b5f61199a84828501611964565b91505092915050565b5f6040820190506119b65f8301856115d8565b6119c360208301846115d8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611a0182611488565b9150611a0c83611488565b925082611a1c57611a1b6119ca565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f611aad611aa8611aa384611a81565b611a8a565b611488565b9050919050565b611abd81611a93565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611af58161144d565b82525050565b5f611b068383611aec565b60208301905092915050565b5f602082019050919050565b5f611b2882611ac3565b611b328185611acd565b9350611b3d83611add565b805f5b83811015611b6d578151611b548882611afb565b9750611b5f83611b12565b925050600181019050611b40565b5085935050505092915050565b5f60a082019050611b8d5f83018861152c565b611b9a6020830187611ab4565b8181036040830152611bac8186611b1e565b9050611bbb60608301856115d8565b611bc8608083018461152c565b9695505050505050565b5f611bdc82611488565b9150611be783611488565b9250828201905080821115611bff57611bfe61174a565b5b9291505056fea264697066735822122058252c3ba46fbe39f4df25116fcafdf0cd0b9fb8a0c38f7c58bbdf6cde2896e864736f6c63430008180033