60806040526040518060400160405280600581526020017f4d6f6e61640000000000000000000000000000000000000000000000000000008152505f9081610047919061051d565b506040518060400160405280600381526020017f4d4e4400000000000000000000000000000000000000000000000000000000008152506001908161008c919061051d565b50601260025f6101000a81548160ff021916908360ff16021790555060016008553480156100b8575f80fd5b50604051611fa9380380611fa983398181016040528101906100da919061064a565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f9054906101000a900460ff1660ff16600a61017991906107d1565b633b9aca00610188919061081b565b905061019a33826101a160201b60201c565b505061092f565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361020f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610206906108b6565b60405180910390fd5b8060035f82825461022091906108d4565b925050819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461027391906108d4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102d79190610916565b60405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061035e57607f821691505b6020821081036103715761037061031a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103d37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610398565b6103dd8683610398565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61042161041c610417846103f5565b6103fe565b6103f5565b9050919050565b5f819050919050565b61043a83610407565b61044e61044682610428565b8484546103a4565b825550505050565b5f90565b610462610456565b61046d818484610431565b505050565b5b81811015610490576104855f8261045a565b600181019050610473565b5050565b601f8211156104d5576104a681610377565b6104af84610389565b810160208510156104be578190505b6104d26104ca85610389565b830182610472565b50505b505050565b5f82821c905092915050565b5f6104f55f19846008026104da565b1980831691505092915050565b5f61050d83836104e6565b9150826002028217905092915050565b610526826102e3565b67ffffffffffffffff81111561053f5761053e6102ed565b5b6105498254610347565b610554828285610494565b5f60209050601f831160018114610585575f8415610573578287015190505b61057d8582610502565b8655506105e4565b601f19841661059386610377565b5f5b828110156105ba57848901518255600182019150602085019450602081019050610595565b868310156105d757848901516105d3601f8916826104e6565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610619826105f0565b9050919050565b6106298161060f565b8114610633575f80fd5b50565b5f8151905061064481610620565b92915050565b5f6020828403121561065f5761065e6105ec565b5b5f61066c84828501610636565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156106f7578086048111156106d3576106d2610675565b5b60018516156106e25780820291505b80810290506106f0856106a2565b94506106b7565b94509492505050565b5f8261070f57600190506107ca565b8161071c575f90506107ca565b8160018114610732576002811461073c5761076b565b60019150506107ca565b60ff84111561074e5761074d610675565b5b8360020a91508482111561076557610764610675565b5b506107ca565b5060208310610133831016604e8410600b84101617156107a05782820a90508381111561079b5761079a610675565b5b6107ca565b6107ad84848460016106ae565b925090508184048111156107c4576107c3610675565b5b81810290505b9392505050565b5f6107db826103f5565b91506107e6836103f5565b92506108137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610700565b905092915050565b5f610825826103f5565b9150610830836103f5565b925082820261083e816103f5565b9150828204841483151761085557610854610675565b5b5092915050565b5f82825260208201905092915050565b7f4d696e7420746f207a65726f20616464726573730000000000000000000000005f82015250565b5f6108a060148361085c565b91506108ab8261086c565b602082019050919050565b5f6020820190508181035f8301526108cd81610894565b9050919050565b5f6108de826103f5565b91506108e9836103f5565b925082820190508082111561090157610900610675565b5b92915050565b610910816103f5565b82525050565b5f6020820190506109295f830184610907565b92915050565b61166d8061093c5f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c80638da5cb5b1161008a578063c4aa6f5011610064578063c4aa6f5014610227578063c8a8289c14610245578063dd62ed3e14610263578063e7b8174914610293576100cd565b80638da5cb5b146101bb57806395d89b41146101d9578063a9059cbb146101f7576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d57806370a082311461018b575b5f80fd5b6100d96102c3565b6040516100e69190610f47565b60405180910390f35b61010960048036038101906101049190610ff8565b61034e565b6040516101169190611050565b60405180910390f35b610127610443565b6040516101349190611078565b60405180910390f35b61015760048036038101906101529190611091565b610449565b6040516101649190611050565b60405180910390f35b61017561054a565b60405161018291906110fc565b60405180910390f35b6101a560048036038101906101a09190611115565b61055c565b6040516101b29190611078565b60405180910390f35b6101c36105a2565b6040516101d0919061114f565b60405180910390f35b6101e16105c7565b6040516101ee9190610f47565b60405180910390f35b610211600480360381019061020c9190610ff8565b610653565b60405161021e9190611050565b60405180910390f35b61022f6106fa565b60405161023c919061114f565b60405180910390f35b61024d610712565b60405161025a91906111c3565b60405180910390f35b61027d600480360381019061027891906111dc565b610737565b60405161028a9190611078565b60405180910390f35b6102ad60048036038101906102a89190611115565b6107b9565b6040516102ba9190611050565b60405180910390f35b5f80546102cf90611247565b80601f01602080910402602001604051908101604052809291908181526020018280546102fb90611247565b80156103465780601f1061031d57610100808354040283529160200191610346565b820191905f5260205f20905b81548152906001019060200180831161032957829003601f168201915b505050505081565b5f7319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156103df57507319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561042e576103ed3361084b565b1561042d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610424906112c1565b60405180910390fd5b5b6104393384846108ec565b6001905092915050565b60035481565b5f7319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156104da57507319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610529576104e88461084b565b15610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051f906112c1565b60405180910390fd5b5b610534843384610aaf565b61053f848484610b1b565b600190509392505050565b60025f9054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600180546105d490611247565b80601f016020809104026020016040519081016040528092919081815260200182805461060090611247565b801561064b5780601f106106225761010080835404028352916020019161064b565b820191905f5260205f20905b81548152906001019060200180831161062e57829003601f168201915b505050505081565b5f7319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e5576106a43361084b565b156106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db906112c1565b60405180910390fd5b5b6106f0338484610b1b565b6001905092915050565b7319b0bd1c019cb4185d006351a01e71fd51f25c5481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610842578160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60019050919050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f794062e836040518263ffffffff1660e01b81526004016108a6919061114f565b602060405180830381865afa1580156108c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e59190611309565b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109519061137e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf906113e6565b60405180910390fd5b80600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610aa29190611078565b60405180910390a3505050565b5f610aba8484610737565b905081811015610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af69061144e565b60405180910390fd5b610b1584848484610b109190611499565b6108ec565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090611516565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee9061157e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610c9357507319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80610d3657508173ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610d3557507319b0bd1c019cb4185d006351a01e71fd51f25c5473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15610d5a575f600182610d49919061159c565b90506008548110610d58575f80fd5b505b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590611619565b60405180910390fd5b81810360095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ec99190611078565b60405180910390a350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f1982610ed7565b610f238185610ee1565b9350610f33818560208601610ef1565b610f3c81610eff565b840191505092915050565b5f6020820190508181035f830152610f5f8184610f0f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f9482610f6b565b9050919050565b610fa481610f8a565b8114610fae575f80fd5b50565b5f81359050610fbf81610f9b565b92915050565b5f819050919050565b610fd781610fc5565b8114610fe1575f80fd5b50565b5f81359050610ff281610fce565b92915050565b5f806040838503121561100e5761100d610f67565b5b5f61101b85828601610fb1565b925050602061102c85828601610fe4565b9150509250929050565b5f8115159050919050565b61104a81611036565b82525050565b5f6020820190506110635f830184611041565b92915050565b61107281610fc5565b82525050565b5f60208201905061108b5f830184611069565b92915050565b5f805f606084860312156110a8576110a7610f67565b5b5f6110b586828701610fb1565b93505060206110c686828701610fb1565b92505060406110d786828701610fe4565b9150509250925092565b5f60ff82169050919050565b6110f6816110e1565b82525050565b5f60208201905061110f5f8301846110ed565b92915050565b5f6020828403121561112a57611129610f67565b5b5f61113784828501610fb1565b91505092915050565b61114981610f8a565b82525050565b5f6020820190506111625f830184611140565b92915050565b5f819050919050565b5f61118b61118661118184610f6b565b611168565b610f6b565b9050919050565b5f61119c82611171565b9050919050565b5f6111ad82611192565b9050919050565b6111bd816111a3565b82525050565b5f6020820190506111d65f8301846111b4565b92915050565b5f80604083850312156111f2576111f1610f67565b5b5f6111ff85828601610fb1565b925050602061121085828601610fb1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061125e57607f821691505b6020821081036112715761127061121a565b5b50919050565b7f4572726f720000000000000000000000000000000000000000000000000000005f82015250565b5f6112ab600583610ee1565b91506112b682611277565b602082019050919050565b5f6020820190508181035f8301526112d88161129f565b9050919050565b6112e881611036565b81146112f2575f80fd5b50565b5f81519050611303816112df565b92915050565b5f6020828403121561131e5761131d610f67565b5b5f61132b848285016112f5565b91505092915050565b7f417070726f76652066726f6d207a65726f2061646472657373000000000000005f82015250565b5f611368601983610ee1565b915061137382611334565b602082019050919050565b5f6020820190508181035f8301526113958161135c565b9050919050565b7f417070726f766520746f207a65726f20616464726573730000000000000000005f82015250565b5f6113d0601783610ee1565b91506113db8261139c565b602082019050919050565b5f6020820190508181035f8301526113fd816113c4565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f611438601683610ee1565b915061144382611404565b602082019050919050565b5f6020820190508181035f8301526114658161142c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114a382610fc5565b91506114ae83610fc5565b92508282039050818111156114c6576114c561146c565b5b92915050565b7f5472616e736665722066726f6d207a65726f20616464726573730000000000005f82015250565b5f611500601a83610ee1565b915061150b826114cc565b602082019050919050565b5f6020820190508181035f83015261152d816114f4565b9050919050565b7f5472616e7366657220746f207a65726f206164647265737300000000000000005f82015250565b5f611568601883610ee1565b915061157382611534565b602082019050919050565b5f6020820190508181035f8301526115958161155c565b9050919050565b5f6115a682610fc5565b91506115b183610fc5565b92508282019050808211156115c9576115c861146c565b5b92915050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e6365005f82015250565b5f611603601f83610ee1565b915061160e826115cf565b602082019050919050565b5f6020820190508181035f830152611630816115f7565b905091905056fea26469706673582212209cebdb2e1bc7a230cb5a3bee70c4577978cbe9ea511e72ff0b498c960d261abf64736f6c634300081a0033000000000000000000000000352e5f9883fab7813c387dd9b3d7c203e2186b78