60806040527fae95c91c4b86b8b69bdb0dd4a8ef590d27763571e3cd8dd0334cf78bedf3be59600c556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200006b57600080fd5b50604051620045b2380380620045b2833981810160405281019062000091919062000557565b6040518060400160405280601081526020017f5465737420636f6e7472616374333435000000000000000000000000000000008152506040518060400160405280600481526020017f4f5a46500000000000000000000000000000000000000000000000000000000081525081600290816200010e919062000813565b50806003908162000120919062000813565b5062000131620001a460201b60201c565b600081905550505081600d8190555080600e908162000151919062000813565b50620001676000801b84620001ad60201b60201c565b506200019a7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c84620001ad60201b60201c565b50505050620008fa565b60006001905090565b6000620001c18383620002b160201b60201c565b620002a65760016008600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002426200031c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050620002ab565b600090505b92915050565b60006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003658262000338565b9050919050565b620003778162000358565b81146200038357600080fd5b50565b60008151905062000397816200036c565b92915050565b6000819050919050565b620003b2816200039d565b8114620003be57600080fd5b50565b600081519050620003d281620003a7565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200042d82620003e2565b810181811067ffffffffffffffff821117156200044f576200044e620003f3565b5b80604052505050565b60006200046462000324565b905062000472828262000422565b919050565b600067ffffffffffffffff821115620004955762000494620003f3565b5b620004a082620003e2565b9050602081019050919050565b60005b83811015620004cd578082015181840152602081019050620004b0565b60008484015250505050565b6000620004f0620004ea8462000477565b62000458565b9050828152602081018484840111156200050f576200050e620003dd565b5b6200051c848285620004ad565b509392505050565b600082601f8301126200053c576200053b620003d8565b5b81516200054e848260208601620004d9565b91505092915050565b6000806000606084860312156200057357620005726200032e565b5b6000620005838682870162000386565b93505060206200059686828701620003c1565b925050604084015167ffffffffffffffff811115620005ba57620005b962000333565b5b620005c88682870162000524565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200062557607f821691505b6020821081036200063b576200063a620005dd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000666565b620006b1868362000666565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620006f4620006ee620006e8846200039d565b620006c9565b6200039d565b9050919050565b6000819050919050565b6200071083620006d3565b620007286200071f82620006fb565b84845462000673565b825550505050565b600090565b6200073f62000730565b6200074c81848462000705565b505050565b5b8181101562000774576200076860008262000735565b60018101905062000752565b5050565b601f821115620007c3576200078d8162000641565b620007988462000656565b81016020851015620007a8578190505b620007c0620007b78562000656565b83018262000751565b50505b505050565b600082821c905092915050565b6000620007e860001984600802620007c8565b1980831691505092915050565b6000620008038383620007d5565b9150826002028217905092915050565b6200081e82620005d2565b67ffffffffffffffff8111156200083a5762000839620003f3565b5b6200084682546200060c565b6200085382828562000778565b600060209050601f8311600181146200088b576000841562000876578287015190505b620008828582620007f5565b865550620008f2565b601f1984166200089b8662000641565b60005b82811015620008c5578489015182556001820191506020850194506020810190506200089e565b86831015620008e55784890151620008e1601f891682620007d5565b8355505b6001600288020188555050505b505050505050565b613ca8806200090a6000396000f3fe6080604052600436106102515760003560e01c80637d55094d11610139578063b88d4fde116100b6578063d8baa6421161007a578063d8baa64214610890578063dd5ffa1e146108bb578063e985e9c5146108e6578063f5b541a614610923578063fe575a871461094e578063ffa303b51461098b57610251565b8063b88d4fde146107b8578063c87b56dd146107d4578063cb784e0614610811578063d547741f1461083c578063d5abeb011461086557610251565b8063a217fddf116100fd578063a217fddf146106e7578063a22cb46514610712578063a75551601461073b578063a75d4d6e14610764578063ae096f5d1461078f57610251565b80637d55094d1461061457806391d148541461062b57806395d89b41146106685780639e51cfcd14610693578063a125c824146106be57610251565b80632eb4a7ab116101d257806342842e0e1161019657806342842e0e146104ff57806345b6e0cb1461051b5780636352211e1461054657806370a0823114610583578063752cd544146105c05780637cb64759146105eb57610251565b80632eb4a7ab1461042e5780632f2ff15d146104595780632f52ebb71461048257806331f9c919146104ab57806336568abe146104d657610251565b806309fe95021161021957806309fe9502146103545780630d8d7f141461037f57806318160ddd146103aa57806323b872dd146103d5578063248a9ca3146103f157610251565b806301ffc9a71461025657806304e869031461029357806306fdde03146102d0578063081812fc146102fb578063095ea7b314610338575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612de8565b6109b6565b60405161028a9190612e30565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612ea9565b6109c8565b6040516102c79190612eef565b60405180910390f35b3480156102dc57600080fd5b506102e5610a11565b6040516102f29190612f9a565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612fe8565b610aa3565b60405161032f9190613024565b60405180910390f35b610352600480360381019061034d919061303f565b610b22565b005b34801561036057600080fd5b50610369610bf6565b6040516103769190612f9a565b60405180910390f35b34801561038b57600080fd5b50610394610c2f565b6040516103a19190612e30565b60405180910390f35b3480156103b657600080fd5b506103bf610c42565b6040516103cc9190612eef565b60405180910390f35b6103ef60048036038101906103ea919061307f565b610c59565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613108565b610f7b565b6040516104259190613144565b60405180910390f35b34801561043a57600080fd5b50610443610f9b565b6040516104509190613144565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061315f565b610fa1565b005b34801561048e57600080fd5b506104a960048036038101906104a49190613204565b610fc3565b005b3480156104b757600080fd5b506104c0611389565b6040516104cd9190612e30565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f8919061315f565b61139c565b005b6105196004803603810190610514919061307f565b611417565b005b34801561052757600080fd5b50610530611437565b60405161053d9190612f9a565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612fe8565b611470565b60405161057a9190613024565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612ea9565b611482565b6040516105b79190612eef565b60405180910390f35b3480156105cc57600080fd5b506105d561153a565b6040516105e29190612f9a565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613108565b611573565b005b34801561062057600080fd5b506106296115eb565b005b34801561063757600080fd5b50610652600480360381019061064d919061315f565b611726565b60405161065f9190612e30565b60405180910390f35b34801561067457600080fd5b5061067d611791565b60405161068a9190612f9a565b60405180910390f35b34801561069f57600080fd5b506106a8611823565b6040516106b59190612f9a565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906132ba565b61185c565b005b3480156106f357600080fd5b506106fc611967565b6040516107099190613144565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613333565b61196e565b005b34801561074757600080fd5b50610762600480360381019061075d9190613333565b611a42565b005b34801561077057600080fd5b50610779611b16565b6040516107869190613144565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906132ba565b611b3a565b005b6107d260048036038101906107cd91906134a3565b611bcf565b005b3480156107e057600080fd5b506107fb60048036038101906107f69190612fe8565b611c42565b6040516108089190612f9a565b60405180910390f35b34801561081d57600080fd5b50610826611d7a565b6040516108339190612f9a565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e919061315f565b611db3565b005b34801561087157600080fd5b5061087a611dd5565b6040516108879190612eef565b60405180910390f35b34801561089c57600080fd5b506108a5611ddb565b6040516108b29190612f9a565b60405180910390f35b3480156108c757600080fd5b506108d0611e14565b6040516108dd9190612f9a565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613526565b611ea2565b60405161091a9190612e30565b60405180910390f35b34801561092f57600080fd5b50610938611f36565b6040516109459190613144565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190612ea9565b611f5a565b6040516109829190612e30565b60405180910390f35b34801561099757600080fd5b506109a0611fb0565b6040516109ad9190612f9a565b60405180910390f35b60006109c182611fe9565b9050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060028054610a2090613595565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c90613595565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905090565b6000610aae82612063565b610ae4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156040518060400160405280601381526020017f4164647265737320626c61636b6c69737465640000000000000000000000000081525090610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde9190612f9a565b60405180910390fd5b50610bf282826120c2565b5050565b6040518060400160405280601281526020017f45786365656473206d617820737570706c79000000000000000000000000000081525081565b600f60019054906101000a900460ff1681565b6000610c4c612206565b6001546000540303905090565b6000610c648261220f565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cd7846122db565b91509150610ced8187610ce8612302565b61230a565b610d3957610d0286610cfd612302565b611ea2565b610d38576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d9f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dac868686600161234e565b8015610db757600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e8585610e61888887612354565b7c02000000000000000000000000000000000000000000000000000000001761237c565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610f0b5760006001850190506000600460008381526020019081526020016000205403610f09576000548114610f08578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f7386868660016123a7565b505050505050565b600060086000838152602001908152602001600020600101549050919050565b600c5481565b610faa82610f7b565b610fb3816123ad565b610fbd83836123c1565b50505050565b600f60009054906101000a900460ff168015610fec5750600f60019054906101000a900460ff16155b6040518060400160405280601681526020017f4d696e74696e67206973206e6f7420616c6c6f7765640000000000000000000081525090611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a9190612f9a565b60405180910390fd5b50600d5461106f610c42565b106040518060400160405280601281526020017f45786365656473206d617820737570706c790000000000000000000000000000815250906110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de9190612f9a565b60405180910390fd5b506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146040518060400160405280600f81526020017f416c726561647920636c61696d65640000000000000000000000000000000000815250906111a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111999190612f9a565b60405180910390fd5b50600033846040516020016111b892919061362f565b60405160208183030381529060405280519060200120905061121e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c54836124b3565b6040518060400160405280600d81526020017f496e76616c69642070726f6f660000000000000000000000000000000000000081525090611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9190612f9a565b60405180910390fd5b506000600d54856112a4610c42565b6112ae919061368a565b11156112ce576112bc610c42565b600d546112c991906136be565b6112d0565b845b90506112dc33826124ca565b84600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461132b919061368a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b868360405161137a9291906136f2565b60405180910390a25050505050565b600f60009054906101000a900460ff1681565b6113a46124e8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611408576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141282826124f0565b505050565b61143283838360405180602001604052806000815250611bcf565b505050565b6040518060400160405280601381526020017f4164647265737320626c61636b6c69737465640000000000000000000000000081525081565b600061147b8261220f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6040518060400160405280601681526020017f4d696e74696e67206973206e6f7420616c6c6f7765640000000000000000000081525081565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61159d816123ad565b6000600c54905082600c819055507f123d88ba82600dfc3f219f8885c691b0ff020caa535666874b3f5174973757fe81600c546040516115de92919061371b565b60405180910390a1505050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611615816123ad565b7fae95c91c4b86b8b69bdb0dd4a8ef590d27763571e3cd8dd0334cf78bedf3be59600c5414156040518060400160405280601681526020017f4d65726b6c6520726f6f74206973206e6f742073657400000000000000000000815250906116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a99190612f9a565b60405180910390fd5b50600f60009054906101000a900460ff1615600f60006101000a81548160ff0219169083151502179055507f6bdfe227d5db299c59aa56d5f846f40dbd73b271aaa78e18ed74fc3e00b8aa6b600f60009054906101000a900460ff1660405161171b9190612e30565b60405180910390a150565b60006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600380546117a090613595565b80601f01602080910402602001604051908101604052809291908181526020018280546117cc90613595565b80156118195780601f106117ee57610100808354040283529160200191611819565b820191906000526020600020905b8154815290600101906020018083116117fc57829003601f168201915b5050505050905090565b6040518060400160405280601681526020017f4d65726b6c6520726f6f74206973206e6f74207365740000000000000000000081525081565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611886816123ad565b6000600e805461189590613595565b80601f01602080910402602001604051908101604052809291908181526020018280546118c190613595565b801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b505050505090508383600e91826119269291906138fb565b507ff09716cbe3e20f31db84c694118bf7f61fa2c9cb6d3a773ad995983cbd9ce9ac81600e604051611959929190613a4f565b60405180910390a150505050565b6000801b81565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156040518060400160405280601381526020017f4164647265737320626c61636b6c69737465640000000000000000000000000081525090611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a9190612f9a565b60405180910390fd5b50611a3e82826125e3565b5050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611a6c816123ad565b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f5456bb8088fff9a398293a5e956e1fe919f95816b4f0476a60a01a63f99c0c1483604051611b099190612e30565b60405180910390a2505050565b7fae95c91c4b86b8b69bdb0dd4a8ef590d27763571e3cd8dd0334cf78bedf3be5981565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611b64816123ad565b6001600f60016101000a81548160ff021916908315150217905550828260099182611b909291906138fb565b507f0f19ef33cc50a128e73a2124617ef105667dc8678e939712a2ccabcf65de1ff18383604051611bc2929190613ab3565b60405180910390a1505050565b611bda848484610c59565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611c3c57611c05848484846126ee565b611c3b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611c4d82612063565b6040518060400160405280601181526020017f4e6f6e6578697374656e7420746f6b656e00000000000000000000000000000081525090611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb9190612f9a565b60405180910390fd5b50600f60019054906101000a900460ff16611d6957600e8054611ce690613595565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1290613595565b8015611d5f5780601f10611d3457610100808354040283529160200191611d5f565b820191906000526020600020905b815481529060010190602001808311611d4257829003601f168201915b5050505050611d73565b611d728261283e565b5b9050919050565b6040518060400160405280600f81526020017f416c726561647920636c61696d6564000000000000000000000000000000000081525081565b611dbc82610f7b565b611dc5816123ad565b611dcf83836124f0565b50505050565b600d5481565b6040518060400160405280601181526020017f4e6f6e6578697374656e7420746f6b656e00000000000000000000000000000081525081565b600e8054611e2190613595565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4d90613595565b8015611e9a5780601f10611e6f57610100808354040283529160200191611e9a565b820191906000526020600020905b815481529060010190602001808311611e7d57829003601f168201915b505050505081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6040518060400160405280600d81526020017f496e76616c69642070726f6f660000000000000000000000000000000000000081525081565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061205c575061205b826128dc565b5b9050919050565b60008161206e612206565b1115801561207d575060005482105b80156120bb575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006120cd82611470565b90508073ffffffffffffffffffffffffffffffffffffffff166120ee612302565b73ffffffffffffffffffffffffffffffffffffffff16146121515761211a81612115612302565b611ea2565b612150576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000808290508061221e612206565b116122a4576000548110156122a35760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036122a1575b6000810361229757600460008360019003935083815260200190815260200160002054905061226d565b80925050506122d6565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861236b868684612946565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6123be816123b96124e8565b61294f565b50565b60006123cd8383611726565b6124a85760016008600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124456124e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506124ad565b600090505b92915050565b6000826124c085846129a0565b1490509392505050565b6124e48282604051806020016040528060008152506129f0565b5050565b600033905090565b60006124fc8383611726565b156125d85760006008600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125756124e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506125dd565b600090505b92915050565b80600760006125f0612302565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661269d612302565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126e29190612e30565b60405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612714612302565b8786866040518563ffffffff1660e01b81526004016127369493929190613b2c565b6020604051808303816000875af192505050801561277257506040513d601f19601f8201168201806040525081019061276f9190613b8d565b60015b6127eb573d80600081146127a2576040519150601f19603f3d011682016040523d82523d6000602084013e6127a7565b606091505b5060008151036127e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606061284982612063565b61287f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612889612a8d565b905060008151036128a957604051806020016040528060008152506128d4565b806128b384612b1f565b6040516020016128c4929190613bf6565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60009392505050565b6129598282611726565b61299c5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612993929190613c1a565b60405180910390fd5b5050565b60008082905060005b84518110156129e5576129d6828683815181106129c9576129c8613c43565b5b6020026020010151612b6f565b915080806001019150506129a9565b508091505092915050565b6129fa8383612b9a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612a8857600080549050600083820390505b612a3a60008683806001019450866126ee565b612a70576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612a27578160005414612a8557600080fd5b50505b505050565b606060098054612a9c90613595565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac890613595565b8015612b155780601f10612aea57610100808354040283529160200191612b15565b820191906000526020600020905b815481529060010190602001808311612af857829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b600115612b5a57600184039350600a81066030018453600a8104905080612b38575b50828103602084039350808452505050919050565b6000818310612b8757612b828284612d55565b612b92565b612b918383612d55565b5b905092915050565b60008054905060008203612bda576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612be7600084838561234e565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612c5e83612c4f6000866000612354565b612c5885612d6c565b1761237c565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612cff57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612cc4565b5060008203612d3a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819055505050612d5060008483856123a7565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dc581612d90565b8114612dd057600080fd5b50565b600081359050612de281612dbc565b92915050565b600060208284031215612dfe57612dfd612d86565b5b6000612e0c84828501612dd3565b91505092915050565b60008115159050919050565b612e2a81612e15565b82525050565b6000602082019050612e456000830184612e21565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e7682612e4b565b9050919050565b612e8681612e6b565b8114612e9157600080fd5b50565b600081359050612ea381612e7d565b92915050565b600060208284031215612ebf57612ebe612d86565b5b6000612ecd84828501612e94565b91505092915050565b6000819050919050565b612ee981612ed6565b82525050565b6000602082019050612f046000830184612ee0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f44578082015181840152602081019050612f29565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f6c82612f0a565b612f768185612f15565b9350612f86818560208601612f26565b612f8f81612f50565b840191505092915050565b60006020820190508181036000830152612fb48184612f61565b905092915050565b612fc581612ed6565b8114612fd057600080fd5b50565b600081359050612fe281612fbc565b92915050565b600060208284031215612ffe57612ffd612d86565b5b600061300c84828501612fd3565b91505092915050565b61301e81612e6b565b82525050565b60006020820190506130396000830184613015565b92915050565b6000806040838503121561305657613055612d86565b5b600061306485828601612e94565b925050602061307585828601612fd3565b9150509250929050565b60008060006060848603121561309857613097612d86565b5b60006130a686828701612e94565b93505060206130b786828701612e94565b92505060406130c886828701612fd3565b9150509250925092565b6000819050919050565b6130e5816130d2565b81146130f057600080fd5b50565b600081359050613102816130dc565b92915050565b60006020828403121561311e5761311d612d86565b5b600061312c848285016130f3565b91505092915050565b61313e816130d2565b82525050565b60006020820190506131596000830184613135565b92915050565b6000806040838503121561317657613175612d86565b5b6000613184858286016130f3565b925050602061319585828601612e94565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126131c4576131c361319f565b5b8235905067ffffffffffffffff8111156131e1576131e06131a4565b5b6020830191508360208202830111156131fd576131fc6131a9565b5b9250929050565b60008060006040848603121561321d5761321c612d86565b5b600061322b86828701612fd3565b935050602084013567ffffffffffffffff81111561324c5761324b612d8b565b5b613258868287016131ae565b92509250509250925092565b60008083601f84011261327a5761327961319f565b5b8235905067ffffffffffffffff811115613297576132966131a4565b5b6020830191508360018202830111156132b3576132b26131a9565b5b9250929050565b600080602083850312156132d1576132d0612d86565b5b600083013567ffffffffffffffff8111156132ef576132ee612d8b565b5b6132fb85828601613264565b92509250509250929050565b61331081612e15565b811461331b57600080fd5b50565b60008135905061332d81613307565b92915050565b6000806040838503121561334a57613349612d86565b5b600061335885828601612e94565b92505060206133698582860161331e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133b082612f50565b810181811067ffffffffffffffff821117156133cf576133ce613378565b5b80604052505050565b60006133e2612d7c565b90506133ee82826133a7565b919050565b600067ffffffffffffffff82111561340e5761340d613378565b5b61341782612f50565b9050602081019050919050565b82818337600083830152505050565b6000613446613441846133f3565b6133d8565b90508281526020810184848401111561346257613461613373565b5b61346d848285613424565b509392505050565b600082601f83011261348a5761348961319f565b5b813561349a848260208601613433565b91505092915050565b600080600080608085870312156134bd576134bc612d86565b5b60006134cb87828801612e94565b94505060206134dc87828801612e94565b93505060406134ed87828801612fd3565b925050606085013567ffffffffffffffff81111561350e5761350d612d8b565b5b61351a87828801613475565b91505092959194509250565b6000806040838503121561353d5761353c612d86565b5b600061354b85828601612e94565b925050602061355c85828601612e94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135ad57607f821691505b6020821081036135c0576135bf613566565b5b50919050565b60008160601b9050919050565b60006135de826135c6565b9050919050565b60006135f0826135d3565b9050919050565b61360861360382612e6b565b6135e5565b82525050565b6000819050919050565b61362961362482612ed6565b61360e565b82525050565b600061363b82856135f7565b60148201915061364b8284613618565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061369582612ed6565b91506136a083612ed6565b92508282019050808211156136b8576136b761365b565b5b92915050565b60006136c982612ed6565b91506136d483612ed6565b92508282039050818111156136ec576136eb61365b565b5b92915050565b60006040820190506137076000830185612ee0565b6137146020830184612ee0565b9392505050565b60006040820190506137306000830185613135565b61373d6020830184613135565b9392505050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026137b17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613774565b6137bb8683613774565b95508019841693508086168417925050509392505050565b6000819050919050565b60006137f86137f36137ee84612ed6565b6137d3565b612ed6565b9050919050565b6000819050919050565b613812836137dd565b61382661381e826137ff565b848454613781565b825550505050565b600090565b61383b61382e565b613846818484613809565b505050565b5b8181101561386a5761385f600082613833565b60018101905061384c565b5050565b601f8211156138af576138808161374f565b61388984613764565b81016020851015613898578190505b6138ac6138a485613764565b83018261384b565b50505b505050565b600082821c905092915050565b60006138d2600019846008026138b4565b1980831691505092915050565b60006138eb83836138c1565b9150826002028217905092915050565b6139058383613744565b67ffffffffffffffff81111561391e5761391d613378565b5b6139288254613595565b61393382828561386e565b6000601f8311600181146139625760008415613950578287013590505b61395a85826138df565b8655506139c2565b601f1984166139708661374f565b60005b8281101561399857848901358255600182019150602085019450602081019050613973565b868310156139b557848901356139b1601f8916826138c1565b8355505b6001600288020188555050505b50505050505050565b600081546139d881613595565b6139e28186612f15565b945060018216600081146139fd5760018114613a1357613a46565b60ff198316865281151560200286019350613a46565b613a1c8561374f565b60005b83811015613a3e57815481890152600182019150602081019050613a1f565b808801955050505b50505092915050565b60006040820190508181036000830152613a698185612f61565b90508181036020830152613a7d81846139cb565b90509392505050565b6000613a928385612f15565b9350613a9f838584613424565b613aa883612f50565b840190509392505050565b60006020820190508181036000830152613ace818486613a86565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000613afe82613ad7565b613b088185613ae2565b9350613b18818560208601612f26565b613b2181612f50565b840191505092915050565b6000608082019050613b416000830187613015565b613b4e6020830186613015565b613b5b6040830185612ee0565b8181036060830152613b6d8184613af3565b905095945050505050565b600081519050613b8781612dbc565b92915050565b600060208284031215613ba357613ba2612d86565b5b6000613bb184828501613b78565b91505092915050565b600081905092915050565b6000613bd082612f0a565b613bda8185613bba565b9350613bea818560208601612f26565b80840191505092915050565b6000613c028285613bc5565b9150613c0e8284613bc5565b91508190509392505050565b6000604082019050613c2f6000830185613015565b613c3c6020830184613135565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220c0c0ebe975a1b537b558921dbc81f80327538a0a143cea81380b4da00af5ddb364736f6c634300081800330000000000000000000000006f4c6c4d5c8f93555cede0400fe7616e1678db7000000000000000000000000000000000000000000000000000000000000000e60000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f52726436517352625a49543352354459345f326f496c3378365238324b445666505a6d565471514e58703800