0x60806040523480156200001157600080fd5b506040518060400160405280600581526020017f41636556320000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4e6577416365000000000000000000000000000000000000000000000000000081525081600390816200008f91906200042d565b508060049081620000a191906200042d565b505050620000c4620000b8620000e560201b60201c565b620000ed60201b60201c565b6000600960146101000a81548160ff02191690831515021790555062000514565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023557607f821691505b6020821081036200024b576200024a620001ed565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000276565b620002c1868362000276565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200030e620003086200030284620002d9565b620002e3565b620002d9565b9050919050565b6000819050919050565b6200032a83620002ed565b62000342620003398262000315565b84845462000283565b825550505050565b600090565b620003596200034a565b620003668184846200031f565b505050565b5b818110156200038e57620003826000826200034f565b6001810190506200036c565b5050565b601f821115620003dd57620003a78162000251565b620003b28462000266565b81016020851015620003c2578190505b620003da620003d18562000266565b8301826200036b565b50505b505050565b600082821c905092915050565b60006200040260001984600802620003e2565b1980831691505092915050565b60006200041d8383620003ef565b9150826002028217905092915050565b6200043882620001b3565b67ffffffffffffffff811115620004545762000453620001be565b5b6200046082546200021c565b6200046d82828562000392565b600060209050601f831160018114620004a5576000841562000490578287015190505b6200049c85826200040f565b8655506200050c565b601f198416620004b58662000251565b60005b82811015620004df57848901518255600182019150602085019450602081019050620004b8565b86831015620004ff5784890151620004fb601f891682620003ef565b8355505b6001600288020188555050505b505050505050565b6125b180620005246000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c35780639711715a1161007c5780639711715a14610368578063981b24d014610372578063a457c2d7146103a2578063a9059cbb146103d2578063dd62ed3e14610402578063f2fde38b146104325761014d565b806370a08231146102cc578063715018a6146102fc57806379cc6790146103065780638456cb59146103225780638da5cb5b1461032c57806395d89b411461034a5761014d565b80633950935111610115578063395093511461020c5780633f4ba83a1461023c57806340c10f191461024657806342966c68146102625780634ee2cd7e1461027e5780635c975abb146102ae5761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a61044e565b6040516101679190611936565b60405180910390f35b61018a600480360381019061018591906119f1565b6104e0565b6040516101979190611a4c565b60405180910390f35b6101a8610503565b6040516101b59190611a76565b60405180910390f35b6101d860048036038101906101d39190611a91565b61050d565b6040516101e59190611a4c565b60405180910390f35b6101f661053c565b6040516102039190611b00565b60405180910390f35b610226600480360381019061022191906119f1565b610545565b6040516102339190611a4c565b60405180910390f35b61024461057c565b005b610260600480360381019061025b91906119f1565b61058e565b005b61027c60048036038101906102779190611b1b565b6105a4565b005b610298600480360381019061029391906119f1565b6105b8565b6040516102a59190611a76565b60405180910390f35b6102b6610628565b6040516102c39190611a4c565b60405180910390f35b6102e660048036038101906102e19190611b48565b61063f565b6040516102f39190611a76565b60405180910390f35b610304610687565b005b610320600480360381019061031b91906119f1565b61069b565b005b61032a6106bb565b005b6103346106cd565b6040516103419190611b84565b60405180910390f35b6103526106f7565b60405161035f9190611936565b60405180910390f35b610370610789565b005b61038c60048036038101906103879190611b1b565b61079c565b6040516103999190611a76565b60405180910390f35b6103bc60048036038101906103b791906119f1565b6107cd565b6040516103c99190611a4c565b60405180910390f35b6103ec60048036038101906103e791906119f1565b610844565b6040516103f99190611a4c565b60405180910390f35b61041c60048036038101906104179190611b9f565b610867565b6040516104299190611a76565b60405180910390f35b61044c60048036038101906104479190611b48565b6108ee565b005b60606003805461045d90611c0e565b80601f016020809104026020016040519081016040528092919081815260200182805461048990611c0e565b80156104d65780601f106104ab576101008083540402835291602001916104d6565b820191906000526020600020905b8154815290600101906020018083116104b957829003601f168201915b5050505050905090565b6000806104eb610971565b90506104f8818585610979565b600191505092915050565b6000600254905090565b600080610518610971565b9050610525858285610b42565b610530858585610bce565b60019150509392505050565b60006012905090565b600080610550610971565b90506105718185856105628589610867565b61056c9190611c6e565b610979565b600191505092915050565b610584610e44565b61058c610ec2565b565b610596610e44565b6105a08282610f25565b5050565b6105b56105af610971565b8261108a565b50565b600080600061060584600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611257565b915091508161061c576106178561063f565b61061e565b805b9250505092915050565b6000600960149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61068f610e44565b610699600061134c565b565b6106ad826106a7610971565b83610b42565b6106b7828261108a565b5050565b6106c3610e44565b6106cb611412565b565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461070690611c0e565b80601f016020809104026020016040519081016040528092919081815260200182805461073290611c0e565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b5050505050905090565b610791610e44565b610799611475565b50565b60008060006107ac846006611257565b91509150816107c2576107bd610503565b6107c4565b805b92505050919050565b6000806107d8610971565b905060006107e68286610867565b90508381101561082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290611d14565b60405180910390fd5b6108388286868403610979565b60019250505092915050565b60008061084f610971565b905061085c818585610bce565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108f6610e44565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c90611da6565b60405180910390fd5b61096e8161134c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df90611e38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90611eca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b359190611a76565b60405180910390a3505050565b6000610b4e8484610867565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bc85781811015610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190611f36565b60405180910390fd5b610bc78484848403610979565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490611fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca39061205a565b60405180910390fd5b610cb78383836114cb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906120ec565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e2b9190611a76565b60405180910390a3610e3e8484846114e3565b50505050565b610e4c610971565b73ffffffffffffffffffffffffffffffffffffffff16610e6a6106cd565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790612158565b60405180910390fd5b565b610eca6114e8565b6000600960146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610f0e610971565b604051610f1b9190611b84565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b906121c4565b60405180910390fd5b610faf6000836eedc4e57e669eb52ec54d65cc045f156114cb565b8060026000828254610fc19190611c6e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110729190611a76565b60405180910390a3611086600083836114e3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612256565b60405180910390fd5b611105826000836114cb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561118b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611182906122e8565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161123e9190611a76565b60405180910390a3611252836000846114e3565b505050565b6000806000841161129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490612354565b60405180910390fd5b6112a5611531565b8411156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de906123c0565b60405180910390fd5b60006112ff858560000161154290919063ffffffff16565b90508360000180549050810361131c576000809250925050611345565b6001846001018281548110611334576113336123e0565b5b906000526020600020015492509250505b9250929050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61141a6115fb565b6001600960146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861145e610971565b60405161146b9190611b84565b60405180910390a1565b60006114816008611645565b600061148b611531565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040516114bc9190611a76565b60405180910390a18091505090565b6114d36115fb565b6114de83838361165b565b505050565b505050565b6114f0610628565b61152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115269061245b565b60405180910390fd5b565b600061153d6008611713565b905090565b60008083805490500361155857600090506115f5565b600080848054905090505b808210156115ac5760006115778383611721565b9050846115848783611747565b600001541115611596578091506115a6565b6001816115a39190611c6e565b92505b50611563565b6000821180156115d45750836115ce866001856115c9919061247b565b611747565b60000154145b156115ef576001826115e6919061247b565b925050506115f5565b81925050505b92915050565b611603610628565b15611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a906124fb565b60405180910390fd5b565b6001816000016000828254019250508190555050565b611666838383611769565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116b0576116a38261176e565b6116ab6117c1565b61170e565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fa576116ed8361176e565b6116f56117c1565b61170d565b6117038361176e565b61170c8261176e565b5b5b505050565b600081600001549050919050565b60006002828418611732919061254a565b82841661173f9190611c6e565b905092915050565b60008083600052826020600020019050611760816117d5565b91505092915050565b505050565b6117be600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206117b98361063f565b6117df565b50565b6117d360066117ce610503565b6117df565b565b6000819050919050565b60006117e9611531565b9050806117f88460000161185a565b10156118555782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b60008082805490500361187057600090506118a1565b8160018380549050611882919061247b565b81548110611893576118926123e0565b5b906000526020600020015490505b919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118e05780820151818401526020810190506118c5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611908826118a6565b61191281856118b1565b93506119228185602086016118c2565b61192b816118ec565b840191505092915050565b6000602082019050818103600083015261195081846118fd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119888261195d565b9050919050565b6119988161197d565b81146119a357600080fd5b50565b6000813590506119b58161198f565b92915050565b6000819050919050565b6119ce816119bb565b81146119d957600080fd5b50565b6000813590506119eb816119c5565b92915050565b60008060408385031215611a0857611a07611958565b5b6000611a16858286016119a6565b9250506020611a27858286016119dc565b9150509250929050565b60008115159050919050565b611a4681611a31565b82525050565b6000602082019050611a616000830184611a3d565b92915050565b611a70816119bb565b82525050565b6000602082019050611a8b6000830184611a67565b92915050565b600080600060608486031215611aaa57611aa9611958565b5b6000611ab8868287016119a6565b9350506020611ac9868287016119a6565b9250506040611ada868287016119dc565b9150509250925092565b600060ff82169050919050565b611afa81611ae4565b82525050565b6000602082019050611b156000830184611af1565b92915050565b600060208284031215611b3157611b30611958565b5b6000611b3f848285016119dc565b91505092915050565b600060208284031215611b5e57611b5d611958565b5b6000611b6c848285016119a6565b91505092915050565b611b7e8161197d565b82525050565b6000602082019050611b996000830184611b75565b92915050565b60008060408385031215611bb657611bb5611958565b5b6000611bc4858286016119a6565b9250506020611bd5858286016119a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c2657607f821691505b602082108103611c3957611c38611bdf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c79826119bb565b9150611c84836119bb565b9250828201905080821115611c9c57611c9b611c3f565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cfe6025836118b1565b9150611d0982611ca2565b604082019050919050565b60006020820190508181036000830152611d2d81611cf1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d906026836118b1565b9150611d9b82611d34565b604082019050919050565b60006020820190508181036000830152611dbf81611d83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e226024836118b1565b9150611e2d82611dc6565b604082019050919050565b60006020820190508181036000830152611e5181611e15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb46022836118b1565b9150611ebf82611e58565b604082019050919050565b60006020820190508181036000830152611ee381611ea7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f20601d836118b1565b9150611f2b82611eea565b602082019050919050565b60006020820190508181036000830152611f4f81611f13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611fb26025836118b1565b9150611fbd82611f56565b604082019050919050565b60006020820190508181036000830152611fe181611fa5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120446023836118b1565b915061204f82611fe8565b604082019050919050565b6000602082019050818103600083015261207381612037565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006120d66026836118b1565b91506120e18261207a565b604082019050919050565b60006020820190508181036000830152612105816120c9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121426020836118b1565b915061214d8261210c565b602082019050919050565b6000602082019050818103600083015261217181612135565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006121ae601f836118b1565b91506121b982612178565b602082019050919050565b600060208201905081810360008301526121dd816121a1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006122406021836118b1565b915061224b826121e4565b604082019050919050565b6000602082019050818103600083015261226f81612233565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006122d26022836118b1565b91506122dd82612276565b604082019050919050565b60006020820190508181036000830152612301816122c5565b9050919050565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b600061233e6016836118b1565b915061234982612308565b602082019050919050565b6000602082019050818103600083015261236d81612331565b9050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b60006123aa601d836118b1565b91506123b582612374565b602082019050919050565b600060208201905081810360008301526123d98161239d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006124456014836118b1565b91506124508261240f565b602082019050919050565b6000602082019050818103600083015261247481612438565b9050919050565b6000612486826119bb565b9150612491836119bb565b92508282039050818111156124a9576124a8611c3f565b5b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006124e56010836118b1565b91506124f0826124af565b602082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612555826119bb565b9150612560836119bb565b9250826125705761256f61251b565b5b82820490509291505056fea2646970667358221220cfa4b47695b9cc2271dd43fbcd6ee85fdf6676667a34cf80de3c4aa94c2f1a9d64736f6c63430008120033