60806040526103e7600755348015610015575f80fd5b506100326100276100fa60201b60201c565b61010160201b60201c565b6040518060400160405280600d81526020017f424f4f4b204f46205452554d5000000000000000000000000000000000000000815250600490816100769190610631565b506040518060400160405280600781526020017f424f5452554d5000000000000000000000000000000000000000000000000000815250600590816100bb9190610631565b506100f5336100ce6101c260201b60201c565b600a6100da9190610868565b640af16b16006100ea91906108b2565b6101ca60201b60201c565b610a2e565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6008905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022f9061094d565b60405180910390fd5b8060035f828254610249919061096b565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102f791906109ad565b60405180910390a36103105f838361032260201b60201c565b61031e61032760201b60201c565b5050565b505050565b61033561034660201b60201c565b6103445f61010160201b60201c565b565b6103546100fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166103786103d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146103ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c590610a10565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061047257607f821691505b6020821081036104855761048461042e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104ac565b6104f186836104ac565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61053561053061052b84610509565b610512565b610509565b9050919050565b5f819050919050565b61054e8361051b565b61056261055a8261053c565b8484546104b8565b825550505050565b5f90565b61057661056a565b610581818484610545565b505050565b5b818110156105a4576105995f8261056e565b600181019050610587565b5050565b601f8211156105e9576105ba8161048b565b6105c38461049d565b810160208510156105d2578190505b6105e66105de8561049d565b830182610586565b50505b505050565b5f82821c905092915050565b5f6106095f19846008026105ee565b1980831691505092915050565b5f61062183836105fa565b9150826002028217905092915050565b61063a826103f7565b67ffffffffffffffff81111561065357610652610401565b5b61065d825461045b565b6106688282856105a8565b5f60209050601f831160018114610699575f8415610687578287015190505b6106918582610616565b8655506106f8565b601f1984166106a78661048b565b5f5b828110156106ce578489015182556001820191506020850194506020810190506106a9565b868310156106eb57848901516106e7601f8916826105fa565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156107825780860481111561075e5761075d610700565b5b600185161561076d5780820291505b808102905061077b8561072d565b9450610742565b94509492505050565b5f8261079a5760019050610855565b816107a7575f9050610855565b81600181146107bd57600281146107c7576107f6565b6001915050610855565b60ff8411156107d9576107d8610700565b5b8360020a9150848211156107f0576107ef610700565b5b50610855565b5060208310610133831016604e8410600b841016171561082b5782820a90508381111561082657610825610700565b5b610855565b6108388484846001610739565b9250905081840481111561084f5761084e610700565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61087282610509565b915061087d8361085c565b92506108aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461078b565b905092915050565b5f6108bc82610509565b91506108c783610509565b92508282026108d581610509565b915082820484148315176108ec576108eb610700565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610937601f836108f3565b915061094282610903565b602082019050919050565b5f6020820190508181035f8301526109648161092b565b9050919050565b5f61097582610509565b915061098083610509565b925082820190508082111561099857610997610700565b5b92915050565b6109a781610509565b82525050565b5f6020820190506109c05f83018461099e565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6109fa6020836108f3565b9150610a05826109c6565b602082019050919050565b5f6020820190508181035f830152610a27816109ee565b9050919050565b61192080610a3b5f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063715018a611610095578063beabacc811610064578063beabacc814610273578063dd62ed3e1461028f578063e7b81749146102bf578063f2fde38b146102ef576100f3565b8063715018a6146101fd5780638da5cb5b1461020757806395d89b4114610225578063a9059cbb14610243576100f3565b806323b872dd116100d157806323b872dd1461016357806326ededb814610193578063313ce567146101af57806370a08231146101cd576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff61030b565b60405161010c91906110bb565b60405180910390f35b61012f600480360381019061012a9190611170565b61039b565b60405161013c91906111c8565b60405180910390f35b61014d6103bd565b60405161015a91906111f0565b60405180910390f35b61017d60048036038101906101789190611209565b6103c6565b60405161018a91906111c8565b60405180910390f35b6101ad60048036038101906101a891906112ba565b6103f4565b005b6101b76104c1565b6040516101c49190611332565b60405180910390f35b6101e760048036038101906101e2919061134b565b6104c9565b6040516101f491906111f0565b60405180910390f35b61020561050f565b005b61020f610522565b60405161021c9190611385565b60405180910390f35b61022d610549565b60405161023a91906110bb565b60405180910390f35b61025d60048036038101906102589190611170565b6105d9565b60405161026a91906111c8565b60405180910390f35b61028d60048036038101906102889190611209565b6105fb565b005b6102a960048036038101906102a4919061139e565b610665565b6040516102b691906111f0565b60405180910390f35b6102d960048036038101906102d4919061134b565b6106e7565b6040516102e691906111c8565b60405180910390f35b6103096004803603810190610304919061134b565b610780565b005b60606004805461031a90611409565b80601f016020809104026020016040519081016040528092919081815260200182805461034690611409565b80156103915780601f1061036857610100808354040283529160200191610391565b820191905f5260205f20905b81548152906001019060200180831161037457829003601f168201915b5050505050905090565b5f806103a5610802565b90506103b2818585610809565b600191505092915050565b5f600354905090565b5f806103d0610802565b90506103dd8582856109cc565b6103e8858585610a57565b60019150509392505050565b5f5b838390508110156104bb5783838281811061041457610413611439565b5b9050602002016020810190610429919061134b565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104a691906111f0565b60405180910390a380806001019150506103f6565b50505050565b5f6008905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610517610f07565b6105205f610f85565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461055890611409565b80601f016020809104026020016040519081016040528092919081815260200182805461058490611409565b80156105cf5780601f106105a6576101008083540402835291602001916105cf565b820191905f5260205f20905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b5f806105e3610802565b90506105f0818585610a57565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161065891906111f0565b60405180910390a3505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73644b5d45453a864cc3f6cbe5e0ea96bfe34c030f73ffffffffffffffffffffffffffffffffffffffff1661071b610802565b73ffffffffffffffffffffffffffffffffffffffff1603610777578160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60019050919050565b610788610f07565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed906114d6565b60405180910390fd5b6107ff81610f85565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e90611564565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc906115f2565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109bf91906111f0565b60405180910390a3505050565b5f6109d78484610665565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a515781811015610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061165a565b60405180910390fd5b610a508484848403610809565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc906116e8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90611776565b60405180910390fd5b5f83905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610bd35750736b75d8af000000e20b7a7ddf000ba900b4009a8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80610d5a57508273ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610c755750736b75d8af000000e20b7a7ddf000ba900b4009a8073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610cc15750739424771600ce37b3f8fec4300e23996369c69c5673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610d0d575073ca219c74bd63122060785439b12cf80cfe3b5cba73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610d59575073644b5d45453a864cc3f6cbe5e0ea96bfe34c030f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b5b15610d7e575f600183610d6d91906117c1565b90506007548110610d7c575f80fd5b505b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990611864565b60405180910390fd5b82810360015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610eed91906111f0565b60405180910390a3610f00858585611046565b5050505050565b610f0f610802565b73ffffffffffffffffffffffffffffffffffffffff16610f2d610522565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a906118cc565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61108d8261104b565b6110978185611055565b93506110a7818560208601611065565b6110b081611073565b840191505092915050565b5f6020820190508181035f8301526110d38184611083565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61110c826110e3565b9050919050565b61111c81611102565b8114611126575f80fd5b50565b5f8135905061113781611113565b92915050565b5f819050919050565b61114f8161113d565b8114611159575f80fd5b50565b5f8135905061116a81611146565b92915050565b5f8060408385031215611186576111856110db565b5b5f61119385828601611129565b92505060206111a48582860161115c565b9150509250929050565b5f8115159050919050565b6111c2816111ae565b82525050565b5f6020820190506111db5f8301846111b9565b92915050565b6111ea8161113d565b82525050565b5f6020820190506112035f8301846111e1565b92915050565b5f805f606084860312156112205761121f6110db565b5b5f61122d86828701611129565b935050602061123e86828701611129565b925050604061124f8682870161115c565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261127a57611279611259565b5b8235905067ffffffffffffffff8111156112975761129661125d565b5b6020830191508360208202830111156112b3576112b2611261565b5b9250929050565b5f805f604084860312156112d1576112d06110db565b5b5f84013567ffffffffffffffff8111156112ee576112ed6110df565b5b6112fa86828701611265565b9350935050602061130d8682870161115c565b9150509250925092565b5f60ff82169050919050565b61132c81611317565b82525050565b5f6020820190506113455f830184611323565b92915050565b5f602082840312156113605761135f6110db565b5b5f61136d84828501611129565b91505092915050565b61137f81611102565b82525050565b5f6020820190506113985f830184611376565b92915050565b5f80604083850312156113b4576113b36110db565b5b5f6113c185828601611129565b92505060206113d285828601611129565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061142057607f821691505b602082108103611433576114326113dc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6114c0602683611055565b91506114cb82611466565b604082019050919050565b5f6020820190508181035f8301526114ed816114b4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61154e602483611055565b9150611559826114f4565b604082019050919050565b5f6020820190508181035f83015261157b81611542565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6115dc602283611055565b91506115e782611582565b604082019050919050565b5f6020820190508181035f830152611609816115d0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611644601d83611055565b915061164f82611610565b602082019050919050565b5f6020820190508181035f83015261167181611638565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6116d2602383611055565b91506116dd82611678565b604082019050919050565b5f6020820190508181035f8301526116ff816116c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611760602583611055565b915061176b82611706565b604082019050919050565b5f6020820190508181035f83015261178d81611754565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6117cb8261113d565b91506117d68361113d565b92508282019050808211156117ee576117ed611794565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61184e602683611055565b9150611859826117f4565b604082019050919050565b5f6020820190508181035f83015261187b81611842565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6118b6602083611055565b91506118c182611882565b602082019050919050565b5f6020820190508181035f8301526118e3816118aa565b905091905056fea2646970667358221220e8b45811d0499fd492f2e24f336f3e645a5fd9a4ad0a06d680d714b648e6133564736f6c63430008190033