0x608060405234801561000f575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610081575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610078919061019d565b60405180910390fd5b6100908161009d60201b60201c565b50426003819055506101b6565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101878261015e565b9050919050565b6101978161017d565b82525050565b5f6020820190506101b05f83018461018e565b92915050565b6120d8806101c35f395ff3fe608060405234801561000f575f80fd5b506004361061012a575f3560e01c80638da5cb5b116100ab578063c9ec28881161006f578063c9ec288814610378578063ce7616d7146103a8578063d3007b0c146103d8578063f2fde38b146103f6578063f6a74ed7146104125761012a565b80638da5cb5b146102c2578063a7fc7a07146102e0578063b429afeb146102fc578063bb8aa1fc1461032c578063c4f441b61461035c5761012a565b80636e71e628116100f25780636e71e6281461020c57806370a8158914610228578063715018a61461025857806372652636146102625780638903f947146102925761012a565b80633aa497281461012e57806353d0048d1461015e5780635615e1201461018e57806367829e0a146101be5780636c39b7ee146101ee575b5f80fd5b6101486004803603810190610143919061150b565b61042e565b604051610155919061161e565b60405180910390f35b6101786004803603810190610173919061150b565b6104c1565b6040516101859190611646565b60405180910390f35b6101a860048036038101906101a3919061165f565b610569565b6040516101b59190611646565b60405180910390f35b6101d860048036038101906101d3919061168a565b610616565b6040516101e591906117c3565b60405180910390f35b6101f66106b1565b6040516102039190611646565b60405180910390f35b61022660048036038101906102219190611837565b6106bd565b005b610242600480360381019061023d9190611887565b610af7565b60405161024f91906118c1565b60405180910390f35b610260610b0c565b005b61027c6004803603810190610277919061150b565b610b1f565b60405161028991906117c3565b60405180910390f35b6102ac60048036038101906102a7919061150b565b610c42565b6040516102b99190611646565b60405180910390f35b6102ca610ce3565b6040516102d791906118e9565b60405180910390f35b6102fa60048036038101906102f5919061165f565b610d0a565b005b6103166004803603810190610311919061165f565b610dfa565b6040516103239190611911565b60405180910390f35b6103466004803603810190610341919061168a565b610e4c565b604051610353919061161e565b60405180910390f35b6103766004803603810190610371919061165f565b610fd0565b005b610392600480360381019061038d919061168a565b6110aa565b60405161039f9190611646565b60405180910390f35b6103c260048036038101906103bd919061168a565b61110f565b6040516103cf9190611646565b60405180910390f35b6103e0611175565b6040516103ed91906118e9565b60405180910390f35b610410600480360381019061040b919061165f565b61119d565b005b61042c6004803603810190610427919061165f565b611221565b005b610436611431565b5f61044084610569565b9050808310610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047b90611984565b60405180910390fd5b5f805b8481116104ad576104988683610c42565b915080806104a5906119cf565b915050610487565b506104b781610e4c565b9250505092915050565b5f806001836104d09190611a16565b90505b5f811061055f578373ffffffffffffffffffffffffffffffffffffffff166004828154811061050557610504611a49565b5b905f5260205f20015f0160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16031561055f57808061055790611a76565b9150506104d3565b8091505092915050565b5f805f60048054905090505f5b8181101561060b578473ffffffffffffffffffffffffffffffffffffffff16600482815481106105a9576105a8611a49565b5b905f5260205f20015f0160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036105fe5782806105fa906119cf565b9350505b8080600101915050610576565b508192505050919050565b6060805f8060048054905090505f8186101561063f5785826106389190611a16565b9050610644565b600190505b5f8290505b8181106106a4576106656001826106609190611a16565b610e4c565b85858151811061067857610677611a49565b5b6020026020010181905250838061068e906119cf565b945050808061069c90611a76565b915050610649565b5083945050505050919050565b5f600480549050905090565b5f3390508361ffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4327350836040518263ffffffff1660e01b815260040161072091906118e9565b602060405180830381865afa15801561073b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075f9190611ab1565b10156107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790611b26565b60405180910390fd5b5f813a4344426001436107b39190611a16565b40308b6040516020016107cd989796959493929190611b6b565b604051602081830303815290604052805190602001205f1c90505f8360ff166107f586610af7565b60ff16836108039190611c14565b14905080156108bd575f60018661081a9190611c44565b60ff16905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccfd5ae485838a61ffff1661086d9190611c78565b6040518363ffffffff1660e01b815260040161088a929190611cb9565b5f604051808303815f87803b1580156108a1575f80fd5b505af11580156108b3573d5f803e3d5ffd5b5050505050610947565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb0128ee84886040518363ffffffff1660e01b8152600401610919929190611d19565b5f604051808303815f87803b158015610930575f80fd5b505af1158015610942573d5f803e3d5ffd5b505050505b60046040518060a00160405280600354426109629190611a16565b67ffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018861ffff1681526020018760ff168152602001831515815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151815f01601c6101000a81548161ffff021916908361ffff1602179055506060820151815f01601e6101000a81548160ff021916908360ff1602179055506080820151815f01601f6101000a81548160ff02191690831515021790555050508273ffffffffffffffffffffffffffffffffffffffff167fc0334af56178d56deae363b19b8aae293bcce362ead15192376f078a10e80c52878784604051610ae793929190611d70565b60405180910390a2505050505050565b5f600182610b059190611da5565b9050919050565b610b146112c0565b610b1d5f611347565b565b60605f8211610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90611e23565b60405180910390fd5b60605f80610b7086610569565b90505f8111610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90611e8b565b60405180910390fd5b5f8190505f82871015610bd4578683610bcd9190611a16565b9050610bd8565b5f90505b5f8190505b83811015610c3357610bef89846104c1565b9250610bfa83610e4c565b868681518110610c0d57610c0c611a49565b5b60200260200101819052508480610c23906119cf565b9550508080600101915050610bdd565b50849550505050505092915050565b5f8060048054905090505f8390505b81811015610cd8578473ffffffffffffffffffffffffffffffffffffffff1660048281548110610c8457610c83611a49565b5b905f5260205f20015f0160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160315610cd8578080600101915050610c51565b809250505092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d126112c0565b610d1b81611408565b610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190611ef3565b60405180910390fd5b610d6381610dfa565b15610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90611f5b565b60405180910390fd5b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610e54611431565b5f60048381548110610e6957610e68611a49565b5b905f5260205f20016040518060a00160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f8201601c9054906101000a900461ffff1661ffff1661ffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff1681526020015f8201601f9054906101000a900460ff16151515158152505090506040518060a00160405280825f015167ffffffffffffffff16600354610f7e9190611f79565b8152602001826020015173ffffffffffffffffffffffffffffffffffffffff168152602001826040015161ffff168152602001826060015160ff16815260200182608001511515815250915050919050565b610fd86112c0565b8073ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e9061201c565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f806001836110b99190611a16565b90505b5f811061110657600481815481106110d7576110d6611a49565b5b905f5260205f20015f01601f9054906101000a900460ff166111065780806110fe90611a76565b9150506110bc565b80915050919050565b5f8060018361111e9190611a16565b90505b5f811061116c576004818154811061113c5761113b611a49565b5b905f5260205f20015f01601f9054906101000a900460ff161561116c57808061116490611a76565b915050611121565b80915050919050565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111a56112c0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611215575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161120c91906118e9565b60405180910390fd5b61121e81611347565b50565b6112296112c0565b61123281610dfa565b611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890612084565b60405180910390fd5b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff021916905550565b6112c861142a565b73ffffffffffffffffffffffffffffffffffffffff166112e6610ce3565b73ffffffffffffffffffffffffffffffffffffffff16146113455761130961142a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161133c91906118e9565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b6040518060a001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f61ffff1681526020015f60ff1681526020015f151581525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6114a78261147e565b9050919050565b6114b78161149d565b81146114c1575f80fd5b50565b5f813590506114d2816114ae565b92915050565b5f819050919050565b6114ea816114d8565b81146114f4575f80fd5b50565b5f81359050611505816114e1565b92915050565b5f80604083850312156115215761152061147a565b5b5f61152e858286016114c4565b925050602061153f858286016114f7565b9150509250929050565b611552816114d8565b82525050565b6115618161149d565b82525050565b5f61ffff82169050919050565b61157d81611567565b82525050565b5f60ff82169050919050565b61159881611583565b82525050565b5f8115159050919050565b6115b28161159e565b82525050565b60a082015f8201516115cc5f850182611549565b5060208201516115df6020850182611558565b5060408201516115f26040850182611574565b506060820151611605606085018261158f565b50608082015161161860808501826115a9565b50505050565b5f60a0820190506116315f8301846115b8565b92915050565b611640816114d8565b82525050565b5f6020820190506116595f830184611637565b92915050565b5f602082840312156116745761167361147a565b5b5f611681848285016114c4565b91505092915050565b5f6020828403121561169f5761169e61147a565b5b5f6116ac848285016114f7565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b60a082015f8201516116f25f850182611549565b5060208201516117056020850182611558565b5060408201516117186040850182611574565b50606082015161172b606085018261158f565b50608082015161173e60808501826115a9565b50505050565b5f61174f83836116de565b60a08301905092915050565b5f602082019050919050565b5f611771826116b5565b61177b81856116bf565b9350611786836116cf565b805f5b838110156117b657815161179d8882611744565b97506117a88361175b565b925050600181019050611789565b5085935050505092915050565b5f6020820190508181035f8301526117db8184611767565b905092915050565b6117ec81611567565b81146117f6575f80fd5b50565b5f81359050611807816117e3565b92915050565b61181681611583565b8114611820575f80fd5b50565b5f813590506118318161180d565b92915050565b5f805f6060848603121561184e5761184d61147a565b5b5f61185b868287016117f9565b935050602061186c86828701611823565b925050604061187d86828701611823565b9150509250925092565b5f6020828403121561189c5761189b61147a565b5b5f6118a984828501611823565b91505092915050565b6118bb81611583565b82525050565b5f6020820190506118d45f8301846118b2565b92915050565b6118e38161149d565b82525050565b5f6020820190506118fc5f8301846118da565b92915050565b61190b8161159e565b82525050565b5f6020820190506119245f830184611902565b92915050565b5f82825260208201905092915050565b7f6f7574206f662072616e676520666f722077616c6c65740000000000000000005f82015250565b5f61196e60178361192a565b91506119798261193a565b602082019050919050565b5f6020820190508181035f83015261199b81611962565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6119d9826114d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a0b57611a0a6119a2565b5b600182019050919050565b5f611a20826114d8565b9150611a2b836114d8565b9250828203905081811115611a4357611a426119a2565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611a80826114d8565b91505f8203611a9257611a916119a2565b5b600182039050919050565b5f81519050611aab816114e1565b92915050565b5f60208284031215611ac657611ac561147a565b5b5f611ad384828501611a9d565b91505092915050565b7f4e6f7420656e6f75676820667261676d656e747320666f7220776167657200005f82015250565b5f611b10601e8361192a565b9150611b1b82611adc565b602082019050919050565b5f6020820190508181035f830152611b3d81611b04565b9050919050565b5f819050919050565b611b5681611b44565b82525050565b611b6581611567565b82525050565b5f61010082019050611b7f5f83018b6118da565b611b8c602083018a611637565b611b996040830189611637565b611ba66060830188611637565b611bb36080830187611637565b611bc060a0830186611b4d565b611bcd60c08301856118da565b611bda60e0830184611b5c565b9998505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611c1e826114d8565b9150611c29836114d8565b925082611c3957611c38611be7565b5b828206905092915050565b5f611c4e82611583565b9150611c5983611583565b9250828203905060ff811115611c7257611c716119a2565b5b92915050565b5f611c82826114d8565b9150611c8d836114d8565b9250828202611c9b816114d8565b91508282048414831517611cb257611cb16119a2565b5b5092915050565b5f604082019050611ccc5f8301856118da565b611cd96020830184611637565b9392505050565b5f819050919050565b5f611d03611cfe611cf984611567565b611ce0565b6114d8565b9050919050565b611d1381611ce9565b82525050565b5f604082019050611d2c5f8301856118da565b611d396020830184611d0a565b9392505050565b5f611d5a611d55611d5084611583565b611ce0565b6114d8565b9050919050565b611d6a81611d40565b82525050565b5f606082019050611d835f830186611d0a565b611d906020830185611d61565b611d9d6040830184611902565b949350505050565b5f611daf82611583565b9150611dba83611583565b9250828201905060ff811115611dd357611dd26119a2565b5b92915050565b7f72657175657374656420302067616d65730000000000000000000000000000005f82015250565b5f611e0d60118361192a565b9150611e1882611dd9565b602082019050919050565b5f6020820190508181035f830152611e3a81611e01565b9050919050565b7f77616c6c6574206861736e7420706c61796564000000000000000000000000005f82015250565b5f611e7560138361192a565b9150611e8082611e41565b602082019050919050565b5f6020820190508181035f830152611ea281611e69565b9050919050565b7f4f6e6c7920636f6e7472616374206164647265737365730000000000000000005f82015250565b5f611edd60178361192a565b9150611ee882611ea9565b602082019050919050565b5f6020820190508181035f830152611f0a81611ed1565b9050919050565b7f416c7265616479206120636f6e74726f6c6c65720000000000000000000000005f82015250565b5f611f4560148361192a565b9150611f5082611f11565b602082019050919050565b5f6020820190508181035f830152611f7281611f39565b9050919050565b5f611f83826114d8565b9150611f8e836114d8565b9250828201905080821115611fa657611fa56119a2565b5b92915050565b7f52656d61696e7320636f6e747261637420616c72656164792073657420746f205f8201527f7468697300000000000000000000000000000000000000000000000000000000602082015250565b5f61200660248361192a565b915061201182611fac565b604082019050919050565b5f6020820190508181035f83015261203381611ffa565b9050919050565b7f4e6f74206120636f6e74726f6c6c6572000000000000000000000000000000005f82015250565b5f61206e60108361192a565b91506120798261203a565b602082019050919050565b5f6020820190508181035f83015261209b81612062565b905091905056fea264697066735822122056b3009d18949d0369ba72884693e887f2a40ab58fe23002b7f628643524a57464736f6c634300081a0033