0x608060405234801561000f575f80fd5b506040518060400160405280601381526020017f5765696768746564566f74696e67546f6b656e000000000000000000000000008152506040518060400160405280600381526020017f5756540000000000000000000000000000000000000000000000000000000000815250816003908161008b91906105aa565b50806004908161009b91906105aa565b5050506100b130620f42406100d260201b60201c565b600560018160018154018082558091505003905f5260205f2090505061078e565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610142575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161013991906106b8565b60405180910390fd5b6101535f838361015760201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101a7578060025f82825461019b91906106fe565b92505081905550610275565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610230578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161022793929190610740565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102bc578060025f8282540392505081905550610306565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103639190610775565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103eb57607f821691505b6020821081036103fe576103fd6103a7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610425565b61046a8683610425565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104ae6104a96104a484610482565b61048b565b610482565b9050919050565b5f819050919050565b6104c783610494565b6104db6104d3826104b5565b848454610431565b825550505050565b5f90565b6104ef6104e3565b6104fa8184846104be565b505050565b5b8181101561051d576105125f826104e7565b600181019050610500565b5050565b601f8211156105625761053381610404565b61053c84610416565b8101602085101561054b578190505b61055f61055785610416565b8301826104ff565b50505b505050565b5f82821c905092915050565b5f6105825f1984600802610567565b1980831691505092915050565b5f61059a8383610573565b9150826002028217905092915050565b6105b382610370565b67ffffffffffffffff8111156105cc576105cb61037a565b5b6105d682546103d4565b6105e1828285610521565b5f60209050601f831160018114610612575f8415610600578287015190505b61060a858261058f565b865550610671565b601f19841661062086610404565b5f5b8281101561064757848901518255600182019150602085019450602081019050610622565b868310156106645784890151610660601f891682610573565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106a282610679565b9050919050565b6106b281610698565b82525050565b5f6020820190506106cb5f8301846106a9565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61070882610482565b915061071383610482565b925082820190508082111561072b5761072a6106d1565b5b92915050565b61073a81610482565b82525050565b5f6060820190506107535f8301866106a9565b6107606020830185610731565b61076d6040830184610731565b949350505050565b5f6020820190506107885f830184610731565b92915050565b611cb58061079b5f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806373b2e80e11610095578063976b311311610064578063976b311314610285578063a9059cbb146102bd578063d5abeb01146102ed578063dd62ed3e1461030b576100f3565b806373b2e80e146101eb5780638615d8551461021b578063943e82161461024b57806395d89b4114610267576100f3565b806323b872dd116100d157806323b872dd14610163578063313ce567146101935780634e71d92d146101b157806370a08231146101bb576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff61033b565b60405161010c9190611362565b60405180910390f35b61012f600480360381019061012a9190611417565b6103cb565b60405161013c919061146f565b60405180910390f35b61014d6103ed565b60405161015a9190611497565b60405180910390f35b61017d600480360381019061017891906114b0565b6103f6565b60405161018a919061146f565b60405180910390f35b61019b610424565b6040516101a8919061151b565b60405180910390f35b6101b961042c565b005b6101d560048036038101906101d09190611534565b610553565b6040516101e29190611497565b60405180910390f35b61020560048036038101906102009190611534565b610598565b604051610212919061146f565b60405180910390f35b610235600480360381019061023091906115c0565b6105b5565b6040516102429190611497565b60405180910390f35b61026560048036038101906102609190611640565b61069d565b005b61026f6108ff565b60405161027c9190611362565b60405180910390f35b61029f600480360381019061029a919061167e565b61098f565b6040516102b499989796959493929190611760565b60405180910390f35b6102d760048036038101906102d29190611417565b610b83565b6040516102e4919061146f565b60405180910390f35b6102f5610ba5565b6040516103029190611497565b60405180910390f35b610325600480360381019061032091906117f9565b610bac565b6040516103329190611497565b60405180910390f35b60606003805461034a90611864565b80601f016020809104026020016040519081016040528092919081815260200182805461037690611864565b80156103c15780601f10610398576101008083540402835291602001916103c1565b820191905f5260205f20905b8154815290600101906020018083116103a457829003601f168201915b5050505050905090565b5f806103d5610c2e565b90506103e2818585610c35565b600191505092915050565b5f600254905090565b5f80610400610c2e565b905061040d858285610c47565b610418858585610cd9565b60019150509392505050565b5f6012905090565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156104ad576040517f0b1327a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620f42406104b96103ed565b036104f0576040517fcbe2483100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061055130336064610cd9565b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f806105c033610553565b036105f7576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ff6103ed565b82111561064357816040517f589a495200000000000000000000000000000000000000000000000000000000815260040161063a9190611497565b60405180910390fd5b5f600560018160018154018082558091505003905f5260205f20906009020190508484826002019182610677929190611a68565b5082816007018190555060016005805490506106939190611b62565b9150509392505050565b5f600583815481106106b2576106b1611b95565b5b905f5260205f20906009020190508060080160019054906101000a900460ff1615610709576040517f66b6cb4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071e33825f01610dc990919063ffffffff16565b15610755576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61075f33610553565b90505f810361079a576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107af33835f01610df690919063ffffffff16565b5080826006015f8282546107c39190611bc2565b92505081905550600160028111156107de576107dd611bf5565b5b8360028111156107f1576107f0611bf5565b5b036108155780826003015f8282546108099190611bc2565b925050819055506108a7565b5f600281111561082857610827611bf5565b5b83600281111561083b5761083a611bf5565b5b0361085f5780826004015f8282546108539190611bc2565b925050819055506108a6565b60028081111561087257610871611bf5565b5b83600281111561088557610884611bf5565b5b036108a55780826005015f82825461089d9190611bc2565b925050819055505b5b5b81600701548260060154106108f95760018260080160016101000a81548160ff0219169083151502179055508160040154826003015411826008015f6101000a81548160ff0219169083151502179055505b50505050565b60606004805461090e90611864565b80601f016020809104026020016040519081016040528092919081815260200182805461093a90611864565b80156109855780601f1061095c57610100808354040283529160200191610985565b820191905f5260205f20905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b60605f805f805f805f60605f60058b815481106109af576109ae611b95565b5b905f5260205f20906009020190505f6109c9825f01610e23565b67ffffffffffffffff8111156109e2576109e161189e565b5b604051908082528060200260200182016040528015610a105781602001602082028036833780820191505090505b5090505f5b610a20835f01610e23565b811015610a9657610a3c81845f01610e3690919063ffffffff16565b828281518110610a4f57610a4e611b95565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610a15565b508160020182600301548360040154846005015485600601548660070154876008015f9054906101000a900460ff168860080160019054906101000a900460ff1688888054610ae490611864565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1090611864565b8015610b5b5780601f10610b3257610100808354040283529160200191610b5b565b820191905f5260205f20905b815481529060010190602001808311610b3e57829003601f168201915b505050505098509a509a509a509a509a509a509a509a509a5050509193959799909294969850565b5f80610b8d610c2e565b9050610b9a818585610cd9565b600191505092915050565b620f424081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610c428383836001610e4d565b505050565b5f610c528484610bac565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cd35781811015610cc4578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610cbb93929190611c31565b60405180910390fd5b610cd284848484035f610e4d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d49575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d409190611c66565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db9575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610db09190611c66565b60405180910390fd5b610dc483838361101c565b505050565b5f610dee835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611235565b905092915050565b5f610e1b835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611255565b905092915050565b5f610e2f825f016112bc565b9050919050565b5f610e43835f01836112cb565b5f1c905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ebd575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610eb49190611c66565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f2d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f249190611c66565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611016578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161100d9190611497565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361106c578060025f8282546110609190611bc2565b9250508190555061113a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110f5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110ec93929190611c31565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611181578060025f82825403925050819055506111cb565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112289190611497565b60405180910390a3505050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f6112608383611235565b6112b257825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f2081905550600190506112b6565b5f90505b92915050565b5f815f01805490509050919050565b5f825f0182815481106112e1576112e0611b95565b5b905f5260205f200154905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611334826112f2565b61133e81856112fc565b935061134e81856020860161130c565b6113578161131a565b840191505092915050565b5f6020820190508181035f83015261137a818461132a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113b38261138a565b9050919050565b6113c3816113a9565b81146113cd575f80fd5b50565b5f813590506113de816113ba565b92915050565b5f819050919050565b6113f6816113e4565b8114611400575f80fd5b50565b5f81359050611411816113ed565b92915050565b5f806040838503121561142d5761142c611382565b5b5f61143a858286016113d0565b925050602061144b85828601611403565b9150509250929050565b5f8115159050919050565b61146981611455565b82525050565b5f6020820190506114825f830184611460565b92915050565b611491816113e4565b82525050565b5f6020820190506114aa5f830184611488565b92915050565b5f805f606084860312156114c7576114c6611382565b5b5f6114d4868287016113d0565b93505060206114e5868287016113d0565b92505060406114f686828701611403565b9150509250925092565b5f60ff82169050919050565b61151581611500565b82525050565b5f60208201905061152e5f83018461150c565b92915050565b5f6020828403121561154957611548611382565b5b5f611556848285016113d0565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126115805761157f61155f565b5b8235905067ffffffffffffffff81111561159d5761159c611563565b5b6020830191508360018202830111156115b9576115b8611567565b5b9250929050565b5f805f604084860312156115d7576115d6611382565b5b5f84013567ffffffffffffffff8111156115f4576115f3611386565b5b6116008682870161156b565b9350935050602061161386828701611403565b9150509250925092565b60038110611629575f80fd5b50565b5f8135905061163a8161161d565b92915050565b5f806040838503121561165657611655611382565b5b5f61166385828601611403565b92505060206116748582860161162c565b9150509250929050565b5f6020828403121561169357611692611382565b5b5f6116a084828501611403565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116db816113a9565b82525050565b5f6116ec83836116d2565b60208301905092915050565b5f602082019050919050565b5f61170e826116a9565b61171881856116b3565b9350611723836116c3565b805f5b8381101561175357815161173a88826116e1565b9750611745836116f8565b925050600181019050611726565b5085935050505092915050565b5f610120820190508181035f830152611779818c61132a565b9050611788602083018b611488565b611795604083018a611488565b6117a26060830189611488565b6117af6080830188611488565b6117bc60a0830187611488565b6117c960c0830186611460565b6117d660e0830185611460565b8181036101008301526117e98184611704565b90509a9950505050505050505050565b5f806040838503121561180f5761180e611382565b5b5f61181c858286016113d0565b925050602061182d858286016113d0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061187b57607f821691505b60208210810361188e5761188d611837565b5b50919050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118ec565b61193186836118ec565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61196c611967611962846113e4565b611949565b6113e4565b9050919050565b5f819050919050565b61198583611952565b61199961199182611973565b8484546118f8565b825550505050565b5f90565b6119ad6119a1565b6119b881848461197c565b505050565b5b818110156119db576119d05f826119a5565b6001810190506119be565b5050565b601f821115611a20576119f1816118cb565b6119fa846118dd565b81016020851015611a09578190505b611a1d611a15856118dd565b8301826119bd565b50505b505050565b5f82821c905092915050565b5f611a405f1984600802611a25565b1980831691505092915050565b5f611a588383611a31565b9150826002028217905092915050565b611a728383611894565b67ffffffffffffffff811115611a8b57611a8a61189e565b5b611a958254611864565b611aa08282856119df565b5f601f831160018114611acd575f8415611abb578287013590505b611ac58582611a4d565b865550611b2c565b601f198416611adb866118cb565b5f5b82811015611b0257848901358255600182019150602085019450602081019050611add565b86831015611b1f5784890135611b1b601f891682611a31565b8355505b6001600288020188555050505b50505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b6c826113e4565b9150611b77836113e4565b9250828203905081811115611b8f57611b8e611b35565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611bcc826113e4565b9150611bd7836113e4565b9250828201905080821115611bef57611bee611b35565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b611c2b816113a9565b82525050565b5f606082019050611c445f830186611c22565b611c516020830185611488565b611c5e6040830184611488565b949350505050565b5f602082019050611c795f830184611c22565b9291505056fea264697066735822122081a51219a59f66e614ea506d2d13638385a0805ec00580b2d0386eb77468bf9164736f6c634300081a0033