608060405234801561000f575f80fd5b506040518060400160405280600881526020017f4f6c64546f6b656e0000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4f4c445f544f4b454e0000000000000000000000000000000000000000000000815250816003908161008b9190610593565b50806004908161009b9190610593565b5050506100b633678ac7230489e800006100bb60201b60201c565b610777565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361012b575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161012291906106a1565b60405180910390fd5b61013c5f838361014060201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610190578060025f82825461018491906106e7565b9250508190555061025e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610219578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161021093929190610729565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102a5578060025f82825403925050819055506102ef565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161034c919061075e565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103d457607f821691505b6020821081036103e7576103e6610390565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261040e565b610453868361040e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61049761049261048d8461046b565b610474565b61046b565b9050919050565b5f819050919050565b6104b08361047d565b6104c46104bc8261049e565b84845461041a565b825550505050565b5f90565b6104d86104cc565b6104e38184846104a7565b505050565b5b81811015610506576104fb5f826104d0565b6001810190506104e9565b5050565b601f82111561054b5761051c816103ed565b610525846103ff565b81016020851015610534578190505b610548610540856103ff565b8301826104e8565b50505b505050565b5f82821c905092915050565b5f61056b5f1984600802610550565b1980831691505092915050565b5f610583838361055c565b9150826002028217905092915050565b61059c82610359565b67ffffffffffffffff8111156105b5576105b4610363565b5b6105bf82546103bd565b6105ca82828561050a565b5f60209050601f8311600181146105fb575f84156105e9578287015190505b6105f38582610578565b86555061065a565b601f198416610609866103ed565b5f5b828110156106305784890151825560018201915060208501945060208101905061060b565b8683101561064d5784890151610649601f89168261055c565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61068b82610662565b9050919050565b61069b81610681565b82525050565b5f6020820190506106b45f830184610692565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6106f18261046b565b91506106fc8361046b565b9250828201905080821115610714576107136106ba565b5b92915050565b6107238161046b565b82525050565b5f60608201905061073c5f830186610692565b610749602083018561071a565b610756604083018461071a565b949350505050565b5f6020820190506107715f83018461071a565b92915050565b610f1c806107845f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806342966c681161006f57806342966c681461016557806370a082311461018157806395d89b41146101b1578063a9059cbb146101cf578063ce6d41de146101ff578063dd62ed3e1461021e576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b361024e565b6040516100c09190610b43565b60405180910390f35b6100e360048036038101906100de9190610bf4565b6102de565b6040516100f09190610c4c565b60405180910390f35b610101610300565b60405161010e9190610c74565b60405180910390f35b610131600480360381019061012c9190610c8d565b610309565b60405161013e9190610c4c565b60405180910390f35b61014f610337565b60405161015c9190610cf8565b60405180910390f35b61017f600480360381019061017a9190610d11565b61033f565b005b61019b60048036038101906101969190610d3c565b61034c565b6040516101a89190610c74565b60405180910390f35b6101b9610391565b6040516101c69190610b43565b60405180910390f35b6101e960048036038101906101e49190610bf4565b610421565b6040516101f69190610c4c565b60405180910390f35b610207610443565b604051610215929190610d76565b60405180910390f35b61023860048036038101906102339190610d9d565b61044f565b6040516102459190610c74565b60405180910390f35b60606003805461025d90610e08565b80601f016020809104026020016040519081016040528092919081815260200182805461028990610e08565b80156102d45780601f106102ab576101008083540402835291602001916102d4565b820191905f5260205f20905b8154815290600101906020018083116102b757829003601f168201915b5050505050905090565b5f806102e86104d1565b90506102f58185856104d8565b600191505092915050565b5f600254905090565b5f806103136104d1565b90506103208582856104ea565b61032b85858561057c565b60019150509392505050565b5f6012905090565b610349338261066c565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600480546103a090610e08565b80601f01602080910402602001604051908101604052809291908181526020018280546103cc90610e08565b80156104175780601f106103ee57610100808354040283529160200191610417565b820191905f5260205f20905b8154815290600101906020018083116103fa57829003601f168201915b5050505050905090565b5f8061042b6104d1565b905061043881858561057c565b600191505092915050565b5f803330915091509091565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6104e583838360016106eb565b505050565b5f6104f5848461044f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105765781811015610567578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161055e93929190610e38565b60405180910390fd5b61057584848484035f6106eb565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105ec575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105e39190610e6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361065c575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106539190610e6d565b60405180910390fd5b6106678383836108ba565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106dc575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106d39190610e6d565b60405180910390fd5b6106e7825f836108ba565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361075b575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107529190610e6d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107cb575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107c29190610e6d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156108b4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108ab9190610c74565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361090a578060025f8282546108fe9190610eb3565b925050819055506109d8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610993578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161098a93929190610e38565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a1f578060025f8282540392505081905550610a69565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ac69190610c74565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610b1582610ad3565b610b1f8185610add565b9350610b2f818560208601610aed565b610b3881610afb565b840191505092915050565b5f6020820190508181035f830152610b5b8184610b0b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b9082610b67565b9050919050565b610ba081610b86565b8114610baa575f80fd5b50565b5f81359050610bbb81610b97565b92915050565b5f819050919050565b610bd381610bc1565b8114610bdd575f80fd5b50565b5f81359050610bee81610bca565b92915050565b5f8060408385031215610c0a57610c09610b63565b5b5f610c1785828601610bad565b9250506020610c2885828601610be0565b9150509250929050565b5f8115159050919050565b610c4681610c32565b82525050565b5f602082019050610c5f5f830184610c3d565b92915050565b610c6e81610bc1565b82525050565b5f602082019050610c875f830184610c65565b92915050565b5f805f60608486031215610ca457610ca3610b63565b5b5f610cb186828701610bad565b9350506020610cc286828701610bad565b9250506040610cd386828701610be0565b9150509250925092565b5f60ff82169050919050565b610cf281610cdd565b82525050565b5f602082019050610d0b5f830184610ce9565b92915050565b5f60208284031215610d2657610d25610b63565b5b5f610d3384828501610be0565b91505092915050565b5f60208284031215610d5157610d50610b63565b5b5f610d5e84828501610bad565b91505092915050565b610d7081610b86565b82525050565b5f604082019050610d895f830185610d67565b610d966020830184610d67565b9392505050565b5f8060408385031215610db357610db2610b63565b5b5f610dc085828601610bad565b9250506020610dd185828601610bad565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e1f57607f821691505b602082108103610e3257610e31610ddb565b5b50919050565b5f606082019050610e4b5f830186610d67565b610e586020830185610c65565b610e656040830184610c65565b949350505050565b5f602082019050610e805f830184610d67565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ebd82610bc1565b9150610ec883610bc1565b9250828201905080821115610ee057610edf610e86565b5b9291505056fea264697066735822122099c8ba2456fbf160a484bd9c707539d2d6e6a62ec12b733fe555c406f8d4716864736f6c634300081a0033